diff --git a/src/stories/components/CalendarCourseCell.stories.tsx b/src/stories/components/CalendarCourseCell.stories.tsx index c1ecdb3c..cb68081d 100644 --- a/src/stories/components/CalendarCourseCell.stories.tsx +++ b/src/stories/components/CalendarCourseCell.stories.tsx @@ -30,8 +30,7 @@ const meta = { courseNumber: exampleCourse.number, instructorLastName: exampleCourse.instructors[0].lastName, status: exampleCourse.status, - meetingTime: exampleCourse.schedule.meetings[0].getTimeString({separator: '-'}), - + meetingTime: exampleCourse.schedule.meetings[0].getTimeString({ separator: '-' }), colors: getCourseColors('emerald', 500), }, @@ -40,31 +39,40 @@ export default meta; type Story = StoryObj; -export const Default: Story = {}; - -export const Variants: Story = { - render: props => ( -
- - - - -
- ), +export const Default: Story = { + args: { + course: new Course({ + uniqueId: 123, + number: '311C', + fullName: "311C - Bevo's Default Course", + courseName: "Bevo's Default Course", + department: 'BVO', + creditHours: 3, + status: Status.WAITLISTED, + instructors: [new Instructor({ firstName: '', lastName: 'Bevo', fullName: 'Bevo' })], + isReserved: false, + url: '', + flags: [], + schedule: new CourseSchedule({ + meetings: [ + new CourseMeeting({ + days: [DAY_MAP.M, DAY_MAP.W, DAY_MAP.F], + startTime: 480, + endTime: 570, + location: { + building: 'UTC', + room: '123', + }, + }), + ], + }), + instructionMode: 'In Person', + semester: { + year: 2024, + season: 'Spring', + }, + }), + meetingIdx: 0, + color: 'red', + }, }; diff --git a/src/views/components/common/CalendarCourseCell/CalendarCourseCell.tsx b/src/views/components/common/CalendarCourseCell/CalendarCourseCell.tsx index e7b389f6..1afb1b60 100644 --- a/src/views/components/common/CalendarCourseCell/CalendarCourseCell.tsx +++ b/src/views/components/common/CalendarCourseCell/CalendarCourseCell.tsx @@ -7,18 +7,16 @@ import CancelledIcon from '~icons/material-symbols/warning'; import Text from '../Text/Text'; export interface CalendarCourseCellProps { - courseDeptAndInstr: string; - timeAndLocation?: string; - status: Status; - colors: CourseColors; + /** The Course that the meeting is for. */ + course: Course; + /* index into course meeting array to display */ + meetingIdx?: number; + /** The background color for the course. */ + color: string; } -const CalendarCourseCell: React.FC = ({ - courseDeptAndInstr, - timeAndLocation, - status, - colors, -}: CalendarCourseCellProps) => { +const CalendarCourseCell: React.FC = ({ course, meetingIdx }: CalendarCourseCellProps) => { + let meeting: CourseMeeting | null = meetingIdx !== undefined ? course.schedule.meetings[meetingIdx] : null; let rightIcon: React.ReactNode | null = null; if (status === Status.WAITLISTED) { rightIcon = ; diff --git a/src/views/components/common/CalendarGrid/CalendarGrid.tsx b/src/views/components/common/CalendarGrid/CalendarGrid.tsx index 3d83ef9a..4dbd06c9 100644 --- a/src/views/components/common/CalendarGrid/CalendarGrid.tsx +++ b/src/views/components/common/CalendarGrid/CalendarGrid.tsx @@ -2,7 +2,9 @@ import React from 'react'; import { DAY_MAP } from 'src/shared/types/CourseMeeting'; import styles from './CalendarGrid.module.scss'; import CalendarCell from '../CalendarGridCell/CalendarGridCell'; -import { CourseMeeting } from 'src/shared/types/CourseMeeting'; +import CalendarCourseCell from '../CalendarCourseCell/CalendarCourseCell'; +import { Chip } from '../Chip/Chip'; + const daysOfWeek = Object.keys(DAY_MAP).filter(key => !['S', 'SU'].includes(key)); const hoursOfDay = Array.from({ length: 14 }, (_, index) => index + 8); @@ -22,14 +24,14 @@ for (let i = 0; i < 13; i++) { } interface Props { - CourseMeetingBlocks: CourseMeeting[]; + courseCells: typeof CalendarCourseCell[]; } /** * Grid of CalendarGridCell components forming the user's course schedule calendar view * @param props */ -export function Calendar({ courseMeetingBlocks }: React.PropsWithChildren): JSX.Element { +export function Calendar({ courseCells }: React.PropsWithChildren): JSX.Element { return (
@@ -54,12 +56,16 @@ export function Calendar({ courseMeetingBlocks }: React.PropsWithChildren {day}
))} - {grid.map((row, rowIndex) => row)} + {grid.map((row) => row)} - {courseMeetingBlocks.map((block: CourseMeeting, index: number) => ( -
- {block} + {courseCells.map((Block: typeof CalendarCourseCell) => ( +
+
))}