schedules working

This commit is contained in:
Sriram Hariharan
2023-03-16 00:32:10 -05:00
parent 6afd372945
commit 882b5b4e00
13 changed files with 125 additions and 38 deletions

View File

@@ -0,0 +1,7 @@
import { Course } from '../types/Course';
export interface UserScheduleMessages {
addCourse: (data: { scheduleId: string; course: Course }) => void;
removeCourse: (data: { scheduleId: string; course: Course }) => void;
}

View File

@@ -3,11 +3,15 @@ import TAB_MESSAGES from './TabMessages';
import BrowserActionMessages from './BrowserActionMessages';
import HotReloadingMessages from './HotReloadingMessages';
import TabManagementMessages from './TabManagementMessages';
import { UserScheduleMessages } from './UserScheduleMessages';
/**
* This is a type with all the message definitions that can be sent TO the background script
*/
export type BACKGROUND_MESSAGES = BrowserActionMessages & TabManagementMessages & HotReloadingMessages;
export type BACKGROUND_MESSAGES = BrowserActionMessages &
TabManagementMessages &
HotReloadingMessages &
UserScheduleMessages;
/**
* A utility object that can be used to send type-safe messages to the background script

View File

@@ -1,5 +1,6 @@
import { createLocalStore, debugStore } from 'chrome-extension-toolkit';
import { UserSchedule } from 'src/shared/types/UserSchedule';
import { v4 as uuidv4 } from 'uuid';
interface IUserScheduleStore {
schedules: UserSchedule[];
@@ -9,7 +10,14 @@ interface IUserScheduleStore {
* A store that is used for storing user schedules (and the active schedule)
*/
export const userScheduleStore = createLocalStore<IUserScheduleStore>({
schedules: [],
schedules: [
new UserSchedule({
courses: [],
id: uuidv4(),
name: 'Schedule 1',
creditHours: 0,
}),
],
});
debugStore({ userScheduleStore });

View File

@@ -8,9 +8,11 @@ export class UserSchedule {
courses: Course[];
id: string;
name: string;
creditHours: number;
constructor(schedule: Serialized<UserSchedule>) {
this.courses = schedule.courses.map(c => new Course(c));
this.creditHours = this.courses.reduce((acc, course) => acc + course.creditHours, 0);
this.id = schedule.id;
this.name = schedule.name;
}
@@ -18,18 +20,4 @@ export class UserSchedule {
containsCourse(course: Course): boolean {
return this.courses.some(c => c.uniqueId === course.uniqueId);
}
getCreditHours(): number {
return this.courses.reduce((acc, course) => acc + course.creditHours, 0);
}
addCourse(course: Course): void {
if (!this.containsCourse(course)) {
this.courses.push(course);
}
}
removeCourse(course: Course): void {
this.courses = this.courses.filter(c => c.uniqueId !== course.uniqueId);
}
}