mirror of
https://github.com/johndoe6345789/metabuilder.git
synced 2026-05-06 19:49:36 +00:00
86 lines
1.9 KiB
TypeScript
86 lines
1.9 KiB
TypeScript
import { useEffect, useState } from 'react'
|
|
import { useAppSelector } from '@/store'
|
|
import {
|
|
getSyncMetrics,
|
|
resetSyncMetrics,
|
|
subscribeSyncMetrics
|
|
} from '@/store/middleware/syncMonitorMiddleware'
|
|
import {
|
|
configureAutoSync,
|
|
getAutoSyncStatus,
|
|
triggerAutoSync
|
|
} from '@/store/middleware/autoSyncMiddleware'
|
|
|
|
interface PersistenceStatus {
|
|
enabled: boolean
|
|
lastSyncTime: number | null
|
|
syncStatus: 'idle' | 'syncing' | 'success' | 'error'
|
|
error: string | null
|
|
dbalConnected: boolean
|
|
}
|
|
|
|
interface SyncMetrics {
|
|
totalOperations: number
|
|
successfulOperations: number
|
|
failedOperations: number
|
|
lastOperationTime: number
|
|
averageOperationTime: number
|
|
}
|
|
|
|
interface AutoSyncStatus {
|
|
enabled: boolean
|
|
lastSyncTime: number
|
|
changeCounter: number
|
|
nextSyncIn: number | null
|
|
}
|
|
|
|
export function usePersistence() {
|
|
const syncState = useAppSelector((state) => state.dbal)
|
|
const [metrics, setMetrics] = useState<SyncMetrics>(getSyncMetrics())
|
|
const [autoSyncStatus, setAutoSyncStatus] = useState<AutoSyncStatus>(getAutoSyncStatus())
|
|
|
|
useEffect(() => {
|
|
const unsubscribe = subscribeSyncMetrics((newMetrics) => {
|
|
setMetrics(newMetrics)
|
|
})
|
|
|
|
const statusTimer = setInterval(() => {
|
|
setAutoSyncStatus(getAutoSyncStatus())
|
|
}, 1000)
|
|
|
|
return () => {
|
|
unsubscribe()
|
|
clearInterval(statusTimer)
|
|
}
|
|
}, [])
|
|
|
|
const status: PersistenceStatus = {
|
|
enabled: true,
|
|
lastSyncTime: syncState.lastSyncedAt,
|
|
syncStatus: syncState.status,
|
|
error: syncState.error,
|
|
dbalConnected: syncState.dbalConnected,
|
|
}
|
|
|
|
const resetMetrics = () => {
|
|
resetSyncMetrics()
|
|
}
|
|
|
|
const configureAutoSyncSettings = (config: any) => {
|
|
configureAutoSync(config)
|
|
}
|
|
|
|
const syncNow = async () => {
|
|
await triggerAutoSync()
|
|
}
|
|
|
|
return {
|
|
status,
|
|
metrics,
|
|
autoSyncStatus,
|
|
resetMetrics,
|
|
configureAutoSync: configureAutoSyncSettings,
|
|
syncNow,
|
|
}
|
|
}
|