Files
tolaria/src/hooks/useUnavailableVaultState.ts
2026-05-02 17:53:13 +02:00

61 lines
1.5 KiB
TypeScript

import { useCallback, useState } from 'react'
import { clearPrefetchCache } from './useTabManagement'
import { resetVaultState, type VaultStateResetOptions } from './vaultStateReset'
interface UnavailableVaultStateOptions extends VaultStateResetOptions {
isCurrentVaultPath: (path: string) => boolean
vaultPath: string
}
export function useUnavailableVaultState(options: UnavailableVaultStateOptions) {
const [unavailableVaultPath, setUnavailableVaultPath] = useState<string | null>(null)
const {
clearNewPaths,
clearUnsaved,
isCurrentVaultPath,
setEntries,
setFolders,
setIsLoading,
setModifiedFiles,
setModifiedFilesError,
setViews,
vaultPath,
} = options
const markVaultUnavailable = useCallback((path: string) => {
if (!isCurrentVaultPath(path)) return
clearPrefetchCache()
resetVaultState({
clearNewPaths,
clearUnsaved,
setEntries,
setFolders,
setIsLoading,
setModifiedFiles,
setModifiedFilesError,
setViews,
})
setUnavailableVaultPath(path)
}, [
clearNewPaths,
clearUnsaved,
isCurrentVaultPath,
setEntries,
setFolders,
setIsLoading,
setModifiedFiles,
setModifiedFilesError,
setViews,
])
const markVaultAvailable = useCallback((path: string) => {
if (isCurrentVaultPath(path)) setUnavailableVaultPath(null)
}, [isCurrentVaultPath])
return {
markVaultAvailable,
markVaultUnavailable,
unavailableVaultPath: unavailableVaultPath === vaultPath ? unavailableVaultPath : null,
}
}