Files
tolaria/src/hooks/useWorkspaceIdentityActions.ts

52 lines
1.5 KiB
TypeScript
Raw Normal View History

2026-05-08 00:45:21 +02:00
import { useCallback, type Dispatch, type SetStateAction } from 'react'
import type { VaultOption } from '../components/status-bar/types'
2026-05-11 16:37:06 +02:00
import { labelFromWorkspacePath } from '../utils/workspaces'
2026-05-08 00:45:21 +02:00
function updateVaultOptionInList(
path: string,
patch: Partial<VaultOption>,
): (vaults: VaultOption[]) => VaultOption[] {
2026-05-11 16:37:06 +02:00
const safePatch = { ...patch }
delete safePatch.path
return (vaults) => {
let updated = false
const nextVaults = vaults.map((vault) => {
if (vault.path !== path) return vault
updated = true
return { ...vault, ...safePatch, path: vault.path }
})
if (updated) return nextVaults
return [
...nextVaults,
{
label: labelFromWorkspacePath(path),
path,
available: true,
...safePatch,
},
]
}
2026-05-08 00:45:21 +02:00
}
export function useWorkspaceIdentityActions({
setDefaultWorkspacePath,
setExtraVaults,
}: {
setDefaultWorkspacePath: Dispatch<SetStateAction<string | null>>
setExtraVaults: Dispatch<SetStateAction<VaultOption[]>>
}) {
const updateWorkspaceIdentity = useCallback((path: string, patch: Partial<VaultOption>) => {
setExtraVaults(updateVaultOptionInList(path, patch))
}, [setExtraVaults])
const setDefaultWorkspace = useCallback((path: string) => {
setDefaultWorkspacePath(path)
setExtraVaults(updateVaultOptionInList(path, { mounted: true }))
}, [setDefaultWorkspacePath, setExtraVaults])
2026-05-08 00:45:21 +02:00
return { setDefaultWorkspace, updateWorkspaceIdentity }
}