Refactor schedule functionality in frontend

- Extract schedule logic into custom useSchedule hook
- Update BlocklistScheduleSection to use the new hook
- Add tests for useSchedule hook
- Update documentation with task progress

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
2026-04-23 09:40:19 +02:00
parent a87d892584
commit 9375430e02
5 changed files with 155 additions and 35 deletions

View File

@@ -17,12 +17,13 @@ const DAYS = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
interface ScheduleSectionProps {
onRunImport: () => void;
runImportRunning: boolean;
importLastResult?: unknown;
}
export function BlocklistScheduleSection({ onRunImport, runImportRunning }: ScheduleSectionProps): React.JSX.Element {
export function BlocklistScheduleSection({ onRunImport, runImportRunning, importLastResult }: ScheduleSectionProps): React.JSX.Element {
const styles = useBlocklistStyles();
const sectionStyles = useCommonSectionStyles();
const { info, loading, error, saveSchedule } = useSchedule();
const { info, loading, error, saveSchedule, refresh } = useSchedule();
const [saving, setSaving] = useState(false);
const [saveMsg, setSaveMsg] = useState<string | null>(null);
const saveTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);
@@ -46,6 +47,7 @@ export function BlocklistScheduleSection({ onRunImport, runImportRunning }: Sche
setSaving(true);
saveSchedule(draft)
.then(() => {
refresh();
setSaveMsg("Schedule saved.");
setSaving(false);
saveTimeoutRef.current = setTimeout(() => {
@@ -57,7 +59,13 @@ export function BlocklistScheduleSection({ onRunImport, runImportRunning }: Sche
setSaveMsg(err instanceof Error ? err.message : "Failed to save schedule");
setSaving(false);
});
}, [draft, saveSchedule]);
}, [draft, saveSchedule, refresh]);
useEffect(() => {
if (importLastResult) {
refresh();
}
}, [importLastResult, refresh]);
useEffect(() => {
return (): void => {