From 8b922082a79ebdbf50a09f37ecb9dfea1be6e1f3 Mon Sep 17 00:00:00 2001 From: Samuel Gunter <29130894+Samathingamajig@users.noreply.github.com> Date: Tue, 19 Nov 2024 19:28:38 -0600 Subject: [PATCH] fix: instructor formatting errors (#425) * fix: instructor formatting errors * refactor: simplify logic in Instructor toString, remove unused formatters * refactor: remove "unnecessary" else's after returns I think it looks worse like this but whatever --- src/shared/types/Instructor.ts | 75 +++++++------------ .../components/common/PopupCourseBlock.tsx | 2 +- .../HeadingAndActions.tsx | 3 +- src/views/hooks/useFlattenedCourseSchedule.ts | 4 +- 4 files changed, 31 insertions(+), 53 deletions(-) diff --git a/src/shared/types/Instructor.ts b/src/shared/types/Instructor.ts index eb5ffd2f..d9a00dca 100644 --- a/src/shared/types/Instructor.ts +++ b/src/shared/types/Instructor.ts @@ -16,25 +16,6 @@ export default class Instructor { }); } - /** - * Get the URL to the instructor's directory page on the UT Directory website - * - * @returns A URL string to the instructor's directory page - */ - getDirectoryUrl(): string { - const name = this.toString({ - format: 'full_name', - case: 'capitalize', - }); - - const url = new URL('https://directory.utexas.edu/index.php'); - url.searchParams.set('q', name); - url.searchParams.set('scope', 'faculty/staff'); - url.searchParams.set('submit', 'Search'); - - return url.toString(); - } - /** * Get a string representation of the instructor * @@ -43,32 +24,36 @@ export default class Instructor { */ toString(options: InstructorFormatOptions): string { const { firstName, lastName, fullName } = this; - const { format, case: caseType } = options; + const { format } = options; - const process = (str: string) => { - if (caseType === 'lowercase') { - return str.toLowerCase(); - } - if (caseType === 'uppercase') { - return str.toUpperCase(); - } - return capitalize(str); - }; + switch (format) { + case 'first_last': + if (firstName && lastName) { + return `${capitalize(firstName)} ${capitalize(lastName)}`; + } - if (format === 'abbr' && firstName && lastName && firstName[0]) { - return `${process(firstName[0])}. ${process(lastName)}`; - } - if (format === 'full_name' && fullName) { - return process(fullName); - } - if (format === 'first_last' && firstName && lastName) { - return `${process(firstName)} ${process(lastName)}`; - } - if (format === 'last' && lastName) { - return process(lastName); - } + if (lastName) { + return capitalize(lastName); + } - throw new Error(`Invalid Instructor String format: ${format}`); + if (fullName) { + return fullName; + } + + return ''; + case 'last': + if (lastName) { + return capitalize(lastName); + } + + if (fullName) { + return fullName; + } + + return ''; + default: + throw new Error(`Invalid Instructor String format: ${format}`); + } } } @@ -77,9 +62,5 @@ export default class Instructor { */ type InstructorFormatOptions = { /** How do you want the names of the professors formatted */ - format: 'abbr' | 'first_last' | 'last' | 'full_name'; - /** - * What the case of the string should be - */ - case: 'capitalize' | 'lowercase' | 'uppercase'; + format: 'first_last' | 'last'; }; diff --git a/src/views/components/common/PopupCourseBlock.tsx b/src/views/components/common/PopupCourseBlock.tsx index 5011c235..852682be 100644 --- a/src/views/components/common/PopupCourseBlock.tsx +++ b/src/views/components/common/PopupCourseBlock.tsx @@ -84,7 +84,7 @@ export default function PopupCourseBlock({ {formattedUniqueId} {course.department} {course.number} {course.instructors.length > 0 ? <> – : ''} - {course.instructors.map(v => v.toString({ format: 'last', case: 'capitalize' })).join('; ')} + {course.instructors.map(v => v.toString({ format: 'last' })).join('; ')} {enableCourseStatusChips && course.status !== Status.OPEN && (
- instructor.toString({ format: 'first_last', case: 'capitalize' }); + const getInstructorFullName = (instructor: Instructor) => instructor.toString({ format: 'first_last' }); const handleCopy = () => { navigator.clipboard.writeText(formattedUniqueId); diff --git a/src/views/hooks/useFlattenedCourseSchedule.ts b/src/views/hooks/useFlattenedCourseSchedule.ts index f7e6efd0..20fe342d 100644 --- a/src/views/hooks/useFlattenedCourseSchedule.ts +++ b/src/views/hooks/useFlattenedCourseSchedule.ts @@ -98,9 +98,7 @@ function extractCourseInfo(course: Course) { if (course.instructors.length > 0) { courseDeptAndInstr += ' \u2013 '; - courseDeptAndInstr += course.instructors - .map(instructor => instructor.toString({ format: 'last', case: 'capitalize' })) - .join('; '); + courseDeptAndInstr += course.instructors.map(instructor => instructor.toString({ format: 'last' })).join('; '); } return { status, courseDeptAndInstr, meetings, course };