fix: show welcome on fresh install without missing vault
This commit is contained in:
@@ -495,6 +495,24 @@ describe('App', () => {
|
||||
expect(screen.getByTestId('welcome-open-folder')).toHaveTextContent('Choose a different folder')
|
||||
})
|
||||
|
||||
it('shows welcome instead of vault-missing when the missing path was not a persisted active vault', async () => {
|
||||
localStorage.setItem('tolaria_welcome_dismissed', '1')
|
||||
mockCommandResults.load_vault_list = {
|
||||
vaults: [],
|
||||
active_vault: null,
|
||||
hidden_defaults: [],
|
||||
}
|
||||
mockCommandResults.check_vault_exists = (args?: { path?: string }) => args?.path === '/Users/mock/Documents/Getting Started'
|
||||
|
||||
render(<App />)
|
||||
|
||||
await waitFor(() => {
|
||||
expect(screen.getByText('Welcome to Tolaria')).toBeInTheDocument()
|
||||
})
|
||||
expect(screen.queryByText('Vault not found')).not.toBeInTheDocument()
|
||||
expect(screen.getByTestId('welcome-open-folder')).toHaveTextContent('Open existing vault')
|
||||
})
|
||||
|
||||
it('renders sidebar with correct default selection (All Notes)', async () => {
|
||||
render(<App />)
|
||||
await waitFor(() => {
|
||||
|
||||
@@ -155,6 +155,21 @@ describe('useOnboarding', () => {
|
||||
})
|
||||
})
|
||||
|
||||
it('shows welcome instead of vault-missing when no persisted active vault matches the missing path', async () => {
|
||||
localStorage.setItem(APP_STORAGE_KEYS.welcomeDismissed, '1')
|
||||
mockCommands({
|
||||
load_vault_list: {
|
||||
vaults: [],
|
||||
active_vault: null,
|
||||
hidden_defaults: [],
|
||||
},
|
||||
})
|
||||
|
||||
const { result } = await renderOnboarding('/vault/deleted')
|
||||
|
||||
expect(result.current.state).toEqual({ status: 'welcome', defaultPath: DEFAULT_GETTING_STARTED_PATH })
|
||||
})
|
||||
|
||||
it('clears the persisted active vault when the saved path no longer exists', async () => {
|
||||
localStorage.setItem(LEGACY_APP_STORAGE_KEYS.welcomeDismissed, '1')
|
||||
mockCommands({
|
||||
|
||||
@@ -40,10 +40,10 @@ function markDismissed(): void {
|
||||
}
|
||||
}
|
||||
|
||||
async function clearMissingActiveVault(missingPath: string): Promise<void> {
|
||||
async function clearMissingActiveVault(missingPath: string): Promise<boolean> {
|
||||
try {
|
||||
const list = await tauriCall<PersistedVaultList>('load_vault_list', {})
|
||||
if (!list || list.active_vault !== missingPath) return
|
||||
if (!list || list.active_vault !== missingPath) return false
|
||||
await tauriCall('save_vault_list', {
|
||||
list: {
|
||||
vaults: list.vaults ?? [],
|
||||
@@ -51,8 +51,10 @@ async function clearMissingActiveVault(missingPath: string): Promise<void> {
|
||||
hidden_defaults: list.hidden_defaults ?? [],
|
||||
},
|
||||
})
|
||||
return true
|
||||
} catch {
|
||||
// Best effort only — onboarding should still proceed
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,17 +86,14 @@ export function useOnboarding(
|
||||
|
||||
if (exists) {
|
||||
setState({ status: 'ready', vaultPath: initialVaultPath })
|
||||
} else {
|
||||
await clearMissingActiveVault(initialVaultPath)
|
||||
if (cancelled) return
|
||||
}
|
||||
|
||||
if (exists) {
|
||||
return
|
||||
}
|
||||
|
||||
if (wasDismissed()) {
|
||||
// User previously dismissed — show vault-missing instead of welcome
|
||||
const missingWasPersistedActiveVault = await clearMissingActiveVault(initialVaultPath)
|
||||
if (cancelled) return
|
||||
|
||||
if (wasDismissed() && missingWasPersistedActiveVault) {
|
||||
// Only show vault-missing when a previously selected vault path truly disappeared.
|
||||
setState({ status: 'vault-missing', vaultPath: initialVaultPath, defaultPath })
|
||||
} else {
|
||||
setState({ status: 'welcome', defaultPath })
|
||||
|
||||
Reference in New Issue
Block a user