From 7c2beef1930fbc887e8ec1aea789016b3150cd21 Mon Sep 17 00:00:00 2001 From: Ethan Lanting Date: Tue, 1 Apr 2025 13:24:08 -0500 Subject: [PATCH] feat: auto create empty schedule when deleted all schedules (#552) * feat: enhance schedule deletion to create a new schedule if none remain * feat: set active index to new schedule if only one exists * chore: run lint * feat: enhance schedule deletion to create a new schedule if none remain * feat: set active index to new schedule if only one exists * chore: run lint * feat: reset schedules on update, refactor invariant to within deleteSchedule * chore: pnpm lint --------- Co-authored-by: Samuel Gunter <29130894+Samathingamajig@users.noreply.github.com> Co-authored-by: Samuel Gunter --- src/pages/background/events/onUpdate.ts | 10 ++++++++++ src/pages/background/lib/createSchedule.ts | 6 ++++++ src/pages/background/lib/deleteSchedule.ts | 5 +++++ 3 files changed, 21 insertions(+) diff --git a/src/pages/background/events/onUpdate.ts b/src/pages/background/events/onUpdate.ts index 76d6e022..20736a85 100644 --- a/src/pages/background/events/onUpdate.ts +++ b/src/pages/background/events/onUpdate.ts @@ -1,4 +1,7 @@ import { ExtensionStore } from '@shared/storage/ExtensionStore'; +import { UserScheduleStore } from '@shared/storage/UserScheduleStore'; + +import createSchedule from '../lib/createSchedule'; /** * Called when the extension is updated (or when the extension is reloaded in development mode) @@ -8,4 +11,11 @@ export default async function onUpdate() { version: chrome.runtime.getManifest().version, lastUpdate: Date.now(), }); + + const schedules = await UserScheduleStore.get('schedules'); + + // By invariant, there must always be at least one schedule + if (schedules.length === 0) { + createSchedule('Schedule 1'); + } } diff --git a/src/pages/background/lib/createSchedule.ts b/src/pages/background/lib/createSchedule.ts index b2333a4b..2c2af690 100644 --- a/src/pages/background/lib/createSchedule.ts +++ b/src/pages/background/lib/createSchedule.ts @@ -36,5 +36,11 @@ export default async function createSchedule(scheduleName: string) { schedules.push(newSchedule); await UserScheduleStore.set('schedules', schedules); + + // If there is only one schedule, set the active index to the new schedule + if (schedules.length <= 1) { + await UserScheduleStore.set('activeIndex', 0); + } + return newSchedule.id; } diff --git a/src/pages/background/lib/deleteSchedule.ts b/src/pages/background/lib/deleteSchedule.ts index d71b6164..5bbe5095 100644 --- a/src/pages/background/lib/deleteSchedule.ts +++ b/src/pages/background/lib/deleteSchedule.ts @@ -22,6 +22,11 @@ export default async function deleteSchedule(scheduleId: string): Promise