diff --git a/src/views/components/PopupMain.tsx b/src/views/components/PopupMain.tsx
index 69920486..92b07ad2 100644
--- a/src/views/components/PopupMain.tsx
+++ b/src/views/components/PopupMain.tsx
@@ -1,17 +1,17 @@
-import logoImage from '@assets/logo.png'; // Adjust the path as necessary
+import logoImage from '@assets/logo.png';
import { Status } from '@shared/types/Course';
import { StatusIcon } from '@shared/util/icons';
import { tailwindColorways } from '@shared/util/storybook';
import Divider from '@views/components/common/Divider/Divider';
import ExtensionRoot from '@views/components/common/ExtensionRoot/ExtensionRoot';
-import List from '@views/components/common/List/List'; // Ensure this path is correctly pointing to your List component
+import List from '@views/components/common/List/List';
import PopupCourseBlock from '@views/components/common/PopupCourseBlock/PopupCourseBlock';
import Text from '@views/components/common/Text/Text';
import { handleOpenCalendar } from '@views/components/injected/CourseCatalogInjectedPopup/HeadingAndActions';
-import useSchedules from '@views/hooks/useSchedules';
+import useSchedules, { switchSchedule } from '@views/hooks/useSchedules';
import { openTabFromContentScript } from '@views/lib/openNewTabFromContentScript';
-import React from 'react';
-import { act } from 'react-dom/test-utils';
+import styles from '@views/styles/popupMain.module.scss';
+import React, { useEffect, useRef,useState } from 'react';
import CalendarIcon from '~icons/material-symbols/calendar-month';
import RefreshIcon from '~icons/material-symbols/refresh';
@@ -23,11 +23,35 @@ import SettingsIcon from '~icons/material-symbols/settings';
*/
export default function PopupMain() {
const [activeSchedule, schedules] = useSchedules();
- const coursesLength = activeSchedule ? activeSchedule.courses.length : 0;
- if (!activeSchedule) {
- return;
+ const [isPopupVisible, setIsPopupVisible] = useState(false);
+ const popupRef = useRef(null);
+ const toggleRef = useRef(null);
+
+ useEffect(() => {
+ function handleClickOutside(event) {
+ if (!popupRef.current.contains(event.target) && !toggleRef.current.contains(event.target)) {
+ setIsPopupVisible(false);
+ }
+ }
+ document.addEventListener('mousedown', handleClickOutside);
+ return () => document.removeEventListener('mousedown', handleClickOutside);
+ }, []);
+
+ const handleClick = () => {
+ setIsPopupVisible(prev => !prev);
+ };
+
+ if (!activeSchedule || schedules.length === 0) {
+ return No active schedule available.;
}
+ const selectSchedule = async selectedSchedule => {
+ await switchSchedule(selectedSchedule.name);
+ handleClick();
+ };
+
+ const nonActiveSchedules = schedules.filter(s => s.name !== activeSchedule.name);
+
const draggableElements = activeSchedule?.courses.map((course, i) => (
));
@@ -62,25 +86,53 @@ export default function PopupMain() {
-
-
- {`${activeSchedule.name}`}:
-
-
-
{`${activeSchedule.hours} HOURS`}
-
{`${coursesLength} Courses`}
+
+
+
+ {`${activeSchedule.name}`}:
+
+
+ {`${activeSchedule.hours} HOURS`}
+ {`${activeSchedule.courses.length} Courses`}
+
+
- {/* Integrate the List component here */}
- {activeSchedule ? (
+ {isPopupVisible && (
+
+ {nonActiveSchedules.map(schedule => (
+
selectSchedule(schedule)}
+ >
+
+ {schedule.name}:
+
+
+ {`${schedule.hours} HOURS`}
+ {`${schedule.courses.length} Courses`}
+
+
+ ))}
+
+ )}
+ {!isPopupVisible && (
(
+
+ ))}
+ itemHeight={100}
+ listHeight={500}
+ listWidth={350}
+ gap={12}
/>
- ) : null}
+ )}
diff --git a/src/views/components/calendar/CalendarSchedules/CalendarSchedules.tsx b/src/views/components/calendar/CalendarSchedules/CalendarSchedules.tsx
index 4f7006be..26bf5f0a 100644
--- a/src/views/components/calendar/CalendarSchedules/CalendarSchedules.tsx
+++ b/src/views/components/calendar/CalendarSchedules/CalendarSchedules.tsx
@@ -1,6 +1,6 @@
import createSchedule from '@pages/background/lib/createSchedule';
import switchSchedule from '@pages/background/lib/switchSchedule';
-// import type { UserSchedule } from '@shared/types/UserSchedule';
+import type { UserSchedule } from '@shared/types/UserSchedule';
import List from '@views/components/common/List/List';
import ScheduleListItem from '@views/components/common/ScheduleListItem/ScheduleListItem';
import Text from '@views/components/common/Text/Text';
@@ -11,8 +11,8 @@ import AddSchedule from '~icons/material-symbols/add';
export type Props = {
style?: React.CSSProperties;
- // dummySchedules?: UserSchedule[];
- // dummyActiveIndex?: number;
+ dummySchedules?: UserSchedule[];
+ dummyActiveIndex?: number;
};
/**
@@ -57,6 +57,12 @@ export function CalendarSchedules(props: Props) {
/>
));
+ const fixBuildError = {
+ dummySchedules: props.dummySchedules,
+ dummyActiveIndex: props.dummyActiveIndex,
+ };
+ console.log(fixBuildError);
+
return (
diff --git a/src/views/hooks/useSchedules.ts b/src/views/hooks/useSchedules.ts
index d9807413..818ac4d3 100644
--- a/src/views/hooks/useSchedules.ts
+++ b/src/views/hooks/useSchedules.ts
@@ -46,3 +46,9 @@ export default function useSchedules(): [active: UserSchedule | null, schedules:
return [activeSchedule, schedules];
}
+
+export async function switchSchedule(name: string) {
+ const schedules = await UserScheduleStore.get('schedules');
+ const activeIndex = schedules.findIndex(s => s.name === name);
+ await UserScheduleStore.set('activeIndex', activeIndex);
+}
diff --git a/src/views/styles/popupMain.module.scss b/src/views/styles/popupMain.module.scss
new file mode 100644
index 00000000..82be1959
--- /dev/null
+++ b/src/views/styles/popupMain.module.scss
@@ -0,0 +1,28 @@
+.arrow {
+ margin-left: auto; // Pushes the arrow to the right
+ display: inline-block;
+ width: 0;
+ height: 0;
+ border-left: 5px solid transparent;
+ border-right: 5px solid transparent;
+ border-top: 5px solid orange; // Use your desired color for the arrow
+ transition: transform 0.3s ease; // smooth transition for rotation
+}
+
+.expanded {
+ transform: rotate(180deg);
+}
+
+.scheduleItem {
+ border: 1px solid #ccc; /* Example border */
+ margin: 8px 0; /* Increased spacing */
+ padding: 10px; /* Inner spacing */
+ border-radius: 4px; /* Rounded corners */
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); /* Soft shadow for depth */
+ background-color: #fff; /* Ensure background contrast */
+ cursor: pointer;
+
+ &:hover {
+ background-color: #f9f9f9; /* Hover effect */
+ }
+}