import { useCallback } from 'react' import { invoke } from '@tauri-apps/api/core' import { isTauri, mockInvoke } from '../mock-tauri' import { formatFolderPickerActionError, pickFolder } from '../utils/vault-dialog' import { buildGettingStartedVaultPath, formatGettingStartedCloneError, labelFromPath, } from '../utils/gettingStartedVault' interface UseGettingStartedCloneOptions { onError: (message: string) => void onSuccess: (path: string, label: string) => void } function tauriCall(command: string, args: Record): Promise { return isTauri() ? invoke(command, args) : mockInvoke(command, args) } export function useGettingStartedClone({ onError, onSuccess, }: UseGettingStartedCloneOptions) { return useCallback(async () => { let parentPath: string | null try { parentPath = await pickFolder('Choose a parent folder for the Getting Started vault') } catch (err) { onError(formatFolderPickerActionError('Could not choose a parent folder', err)) return } if (!parentPath) return const targetPath = buildGettingStartedVaultPath(parentPath) try { const vaultPath = await tauriCall('create_getting_started_vault', { targetPath }) onSuccess(vaultPath, labelFromPath(vaultPath)) } catch (err) { onError(formatGettingStartedCloneError(err)) } }, [onError, onSuccess]) }