diff --git a/web/apps/photos/src/components/Export.tsx b/web/apps/photos/src/components/Export.tsx index 17bfa6b6c7..ef007d06c0 100644 --- a/web/apps/photos/src/components/Export.tsx +++ b/web/apps/photos/src/components/Export.tsx @@ -92,41 +92,27 @@ export const Export: React.FC = ({ const [pendingFiles, setPendingFiles] = useState([]); const [lastExportTime, setLastExportTime] = useState(0); - // ==================== - // SIDE EFFECTS - // ==================== useEffect(() => { - if (!isDesktop) { - return; - } - try { - exportService.setUIUpdaters({ - setExportStage, - setExportProgress, - setLastExportTime, - setPendingFiles, - }); - const exportSettings: ExportSettings = - exportService.getExportSettings(); - setExportFolder(exportSettings?.folder ?? null); - setContinuousExport(exportSettings?.continuousExport ?? false); - void syncExportRecord(exportSettings?.folder); - } catch (e) { - log.error("export on mount useEffect failed", e); - } + if (!isDesktop) return; + + exportService.setUIUpdaters({ + setExportStage, + setExportProgress, + setLastExportTime, + setPendingFiles, + }); + const exportSettings: ExportSettings = + exportService.getExportSettings(); + setExportFolder(exportSettings?.folder ?? null); + setContinuousExport(exportSettings?.continuousExport ?? false); + void syncExportRecord(exportSettings?.folder); }, []); useEffect(() => { - if (!open) { - return; - } + if (!open) return; void syncExportRecord(exportFolder); }, [open]); - // ====================== - // HELPER FUNCTIONS - // ======================= - const verifyExportFolderExists = useCallback(async () => { if (!(await exportService.exportFolderExists(exportFolder))) { showMiniDialog({ @@ -141,9 +127,9 @@ export const Export: React.FC = ({ return false; } return true; - }, [showMiniDialog]); + }, [exportFolder, showMiniDialog]); - const syncExportRecord = async (exportFolder: string): Promise => { + const syncExportRecord = useCallback(async (exportFolder: string) => { try { if (!(await exportService.exportFolderExists(exportFolder))) { setPendingFiles(await exportService.pendingFiles()); @@ -158,11 +144,7 @@ export const Export: React.FC = ({ log.error("syncExportRecord failed", e); } } - }; - - // ============= - // UI functions - // ============= + }, []); const handleChangeExportDirectory = useCallback(() => { void (async () => { @@ -176,20 +158,22 @@ export const Export: React.FC = ({ })(); }, [syncExportRecord]); - const toggleContinuousExport = async () => { - if (!(await verifyExportFolderExists())) return; + const handleToggleContinuousExport = useCallback(() => { + void (async () => { + if (!(await verifyExportFolderExists())) return; - const newContinuousExport = !continuousExport; - if (newContinuousExport) { - exportService.enableContinuousExport(); - } else { - exportService.disableContinuousExport(); - } - exportService.updateExportSettings({ - continuousExport: newContinuousExport, - }); - setContinuousExport(newContinuousExport); - }; + const newContinuousExport = !continuousExport; + if (newContinuousExport) { + exportService.enableContinuousExport(); + } else { + exportService.disableContinuousExport(); + } + exportService.updateExportSettings({ + continuousExport: newContinuousExport, + }); + setContinuousExport(newContinuousExport); + })(); + }, [continuousExport]); const handleStartExport = useCallback( (opts?: ExportOpts) => { @@ -197,11 +181,15 @@ export const Export: React.FC = ({ if (!(await verifyExportFolderExists())) return; await exportService.scheduleExport(opts ?? {}); - }); + })(); }, [verifyExportFolderExists], ); + const handleResyncExport = useCallback(() => { + handleStartExport({ resync: true }); + }, [handleStartExport]); + const handleStopExport = useCallback(() => { void exportService.stopRunningExport(); }, []); @@ -216,13 +204,13 @@ export const Export: React.FC = ({ void toggleContinuousExport()} + onToggle={handleToggleContinuousExport} /> @@ -237,7 +225,7 @@ export const Export: React.FC = ({ onClose, }} onStartExport={handleStartExport} - onResyncExport={() => handleStartExport({ resync: true })} + onResyncExport={handleResyncExport} onStopExport={handleStopExport} />