diff --git a/src/common/layouts/Page.tsx b/src/common/layouts/Page.tsx index edc9cce9..f915868e 100644 --- a/src/common/layouts/Page.tsx +++ b/src/common/layouts/Page.tsx @@ -67,6 +67,9 @@ export function Page({ title, leftSidebar, rightSidebar, mobileSupport, children {smallScreen ? ( {leftSidebar} )} - {children} + + {children} + {rightSidebar && {rightSidebar}} ) : ( diff --git a/src/pages/import/components/ImportCalendar.tsx b/src/pages/import/components/ImportCalendar.tsx index 5b311bd7..383dee53 100644 --- a/src/pages/import/components/ImportCalendar.tsx +++ b/src/pages/import/components/ImportCalendar.tsx @@ -6,6 +6,7 @@ import { Box } from '@chakra-ui/layout'; import { Timetable } from 'lib/fetchers'; import { SavedCourse } from 'lib/hooks/useSavedCourses'; +import { useSmallScreen } from 'lib/hooks/useSmallScreen'; import { getCurrentTerm } from 'lib/utils/terms'; import { SchedulerCalendar } from 'pages/scheduler/components/SchedulerCalendar'; @@ -14,6 +15,7 @@ import { denormalizeCourseEvents } from 'pages/scheduler/hooks/useTransformedCal export const ImportCalendar = ({ timetableCourses }: { timetableCourses: Timetable }): JSX.Element => { const { courses, term } = timetableCourses; + const smallScreen = useSmallScreen(); const parsedCourses: SavedCourse[] = useMemo( () => @@ -43,7 +45,7 @@ export const ImportCalendar = ({ timetableCourses }: { timetableCourses: Timetab ); return ( - + ); diff --git a/src/pages/import/components/TimetableCourseTags.tsx b/src/pages/import/components/TimetableCourseTags.tsx new file mode 100644 index 00000000..774dcf8a --- /dev/null +++ b/src/pages/import/components/TimetableCourseTags.tsx @@ -0,0 +1,37 @@ +import { Wrap, WrapItem } from '@chakra-ui/react'; + +import { Term, TimetableCourse } from 'lib/fetchers'; + +import { NotFound } from 'common/notFound/NotFound'; + +import { ShareCourseCard } from 'pages/scheduler/components/share/SelectedCoursesCardList'; + +export function TimetableCourseTags({ courses, term }: { courses: TimetableCourse[]; term: Term }) { + return ( + + {courses.length > 0 ? ( + courses.map((course) => { + if (course.lecture || course.lab || course.tutorial) { + return ( + + + + ); + } + return null; + }) + ) : ( + Unable to find saved courses for + )} + + ); +} diff --git a/src/pages/import/index.tsx b/src/pages/import/index.tsx index 8e88a9ee..152b46dc 100644 --- a/src/pages/import/index.tsx +++ b/src/pages/import/index.tsx @@ -1,9 +1,9 @@ -import { useState } from 'react'; +import { useEffect, useState } from 'react'; import { Spinner, VStack, Heading, HStack, Flex, Box, ButtonGroup, Button, Center } from '@chakra-ui/react'; import { useParams } from 'react-router'; -import { Timetable, useGetTimetable } from 'lib/fetchers'; +import { Term, Timetable, TimetableCourse, useGetTimetable } from 'lib/fetchers'; import { useSmallScreen } from 'lib/hooks/useSmallScreen'; import { getReadableTerm } from 'lib/utils/terms'; @@ -14,44 +14,51 @@ import { Sidebar } from 'common/layouts/sidebar/containers/Sidebar'; import { ImportCalendar } from './components/ImportCalendar'; import { TimetableActionButtons } from './components/TimetableActionButtons'; import { TimetableCourseCard } from './components/TimetableCourseCard'; +import { TimetableCourseTags } from './components/TimetableCourseTags'; export function ImportTimetable(): JSX.Element { const { slug } = useParams(); const smallScreen = useSmallScreen(); const { loading, data } = useGetTimetable({ slug: slug }); + const [courses, setCourses] = useState([]); + const [term, setTerm] = useState('202205'); + + useEffect(() => { + if (data) { + setCourses((data as Timetable).courses); + setTerm((data as Timetable).term); + } + }, [data]); const left = ( <> Timetable Actions + {smallScreen && } ); - const right = ( + const right = !smallScreen ? ( <> Included Courses {!loading && data && ( - {(data as Timetable).courses.map((course) => ( - + {courses.map((course) => ( + ))} )} - ); + ) : undefined; const calendarComponent = ; const listView = ( - {!loading && - data && - (data as Timetable).courses.map((course) => ( - - ))} + {!loading && data && courses.map((course) => )} ); @@ -61,27 +68,24 @@ export function ImportTimetable(): JSX.Element { return ( {smallScreen ? ( - + - {!loading && data ? getReadableTerm((data as Timetable).term) : 'Viewing Timetable'} + {!loading && data ? getReadableTerm(term) : 'Viewing Timetable'} - + - - - {!loading && data ? calendarView ? calendarComponent : listView : } ) : ( - {!loading && data - ? 'Viewing Timetable for ' + getReadableTerm((data as Timetable).term) - : 'Viewing Timetable'} + {!loading && data ? 'Viewing Timetable for ' + getReadableTerm(term) : 'Viewing Timetable'} {!loading && data ? (