diff --git a/src/views/hooks/useSchedules.ts b/src/views/hooks/useSchedules.ts index 32f35a46..d9807413 100644 --- a/src/views/hooks/useSchedules.ts +++ b/src/views/hooks/useSchedules.ts @@ -12,28 +12,36 @@ export default function useSchedules(): [active: UserSchedule | null, schedules: const [activeSchedule, setActiveSchedule] = useState(null); useEffect(() => { - Promise.all([UserScheduleStore.get('schedules'), UserScheduleStore.get('activeIndex')]).then( - ([schedules, activeIndex]) => { - setSchedules(schedules.map(s => new UserSchedule(s))); - setActiveIndex(activeIndex); - setActiveSchedule(new UserSchedule(schedules[activeIndex])); + const fetchData = async () => { + const [storedSchedules, storedActiveIndex] = await Promise.all([ + UserScheduleStore.get('schedules'), + UserScheduleStore.get('activeIndex'), + ]); + setSchedules(storedSchedules.map(s => new UserSchedule(s))); + setActiveIndex(storedActiveIndex); + setActiveSchedule(new UserSchedule(storedSchedules[storedActiveIndex])); + + const initializable = UserScheduleStore.initialize(); + + if (initializable) { + const l1 = UserScheduleStore.listen('schedules', ({ newValue }) => { + setSchedules(newValue.map(s => new UserSchedule(s))); + setActiveSchedule(new UserSchedule(newValue[activeIndex])); + }); + + const l2 = UserScheduleStore.listen('activeIndex', ({ newValue }) => { + setActiveIndex(newValue); + setActiveSchedule(new UserSchedule(schedules[newValue])); + }); + + return () => { + UserScheduleStore.removeListener(l1); + UserScheduleStore.removeListener(l2); + }; } - ); - - const l1 = UserScheduleStore.listen('schedules', ({ newValue }) => { - setSchedules(newValue.map(s => new UserSchedule(s))); - setActiveSchedule(new UserSchedule(newValue[activeIndex])); - }); - - const l2 = UserScheduleStore.listen('activeIndex', ({ newValue }) => { - setActiveIndex(newValue); - setActiveSchedule(new UserSchedule(schedules[newValue])); - }); - - return () => { - UserScheduleStore.removeListener(l1); - UserScheduleStore.removeListener(l2); }; + + fetchData(); }, [activeIndex, schedules]); return [activeSchedule, schedules];