From 8cf03f303f8f55e839e7372e1a0fe8905382ce9b Mon Sep 17 00:00:00 2001 From: johndoe6345789 Date: Sun, 18 Jan 2026 00:58:51 +0000 Subject: [PATCH] Refactor persistence dashboard handlers --- src/components/PersistenceDashboard.tsx | 44 +++++++++++-------------- src/hooks/use-persistence-dashboard.ts | 41 ++++++++++++++++------- 2 files changed, 49 insertions(+), 36 deletions(-) diff --git a/src/components/PersistenceDashboard.tsx b/src/components/PersistenceDashboard.tsx index 4b364ba..3b54a22 100644 --- a/src/components/PersistenceDashboard.tsx +++ b/src/components/PersistenceDashboard.tsx @@ -189,9 +189,9 @@ type ManualSyncCardProps = { onSyncFromFlask: () => void onManualSync: () => void onCheckConnection: () => void - syncing: boolean - status: PersistenceStatus - autoSyncStatus: AutoSyncStatus + canSyncToFlask: boolean + canSyncFromFlask: boolean + canTriggerManualSync: boolean } const ManualSyncCard = ({ @@ -199,9 +199,9 @@ const ManualSyncCard = ({ onSyncFromFlask, onManualSync, onCheckConnection, - syncing, - status, - autoSyncStatus, + canSyncToFlask, + canSyncFromFlask, + canTriggerManualSync, }: ManualSyncCardProps) => (

@@ -212,7 +212,7 @@ const ManualSyncCard = ({
- {status.error && } + {flags.hasError && status.error && } diff --git a/src/hooks/use-persistence-dashboard.ts b/src/hooks/use-persistence-dashboard.ts index 61325e7..6a15f7f 100644 --- a/src/hooks/use-persistence-dashboard.ts +++ b/src/hooks/use-persistence-dashboard.ts @@ -9,12 +9,7 @@ import { } from '@/store/slices/syncSlice' import copy from '@/data/persistence-dashboard.json' -export function usePersistenceDashboard() { - const dispatch = useAppDispatch() - const { status, metrics, autoSyncStatus, syncNow, configureAutoSync } = usePersistence() - const [autoSyncEnabled, setAutoSyncEnabled] = useState(false) - const [syncing, setSyncing] = useState(false) - +const useFlaskConnectionPolling = (dispatch: ReturnType) => { useEffect(() => { dispatch(checkFlaskConnection()) const interval = setInterval(() => { @@ -23,6 +18,15 @@ export function usePersistenceDashboard() { return () => clearInterval(interval) }, [dispatch]) +} + +export function usePersistenceDashboard() { + const dispatch = useAppDispatch() + const { status, metrics, autoSyncStatus, syncNow, configureAutoSync } = usePersistence() + const [autoSyncEnabled, setAutoSyncEnabled] = useState(false) + const [syncing, setSyncing] = useState(false) + + useFlaskConnectionPolling(dispatch) const handleSyncToFlask = async () => { setSyncing(true) @@ -67,16 +71,29 @@ export function usePersistenceDashboard() { dispatch(checkFlaskConnection()) } - return { - status, - metrics, - autoSyncStatus, - autoSyncEnabled, - syncing, + const flags = { + isConnected: status.flaskConnected, + isSyncing: syncing, + hasError: Boolean(status.error), + canSyncToFlask: status.flaskConnected && !syncing, + canSyncFromFlask: status.flaskConnected && !syncing, + canTriggerManualSync: autoSyncStatus.enabled && !syncing, + } + + const handlers = { handleSyncToFlask, handleSyncFromFlask, handleManualSync, handleAutoSyncToggle, handleCheckConnection, } + + return { + status, + metrics, + autoSyncStatus, + autoSyncEnabled, + flags, + handlers, + } }