File based settings (#1361)

* Rename GlobalStateContext to SettingsAuthContext

* Naive initial impl of settings persistence to file system

* Update app identifier in tauri config

* Add "show in folder" tauri command

* Load from and save to file system in Tauri app

* Add documents drive to tauri permission scope

* Add recursive prop to default dir selection dialog

* Add success toast to web restore defaults action

* Add a way to validate read-in settings

* Update imports to use separate settings lib file

* Validate localStorage-loaded settings, combine error message

* Add a e2e test for validation

* Clean up state state bugs

* Reverse validation looping so new users don't error

* update settingsMachine typegen to remove conflicts

* Fmt

* Fix TS errors
This commit is contained in:
Frank Noirot
2024-02-15 14:14:14 -05:00
committed by GitHub
parent d9bcadb062
commit 602e7afef6
32 changed files with 599 additions and 169 deletions

View File

@ -2,7 +2,7 @@ import { fireEvent, render, screen } from '@testing-library/react'
import { BrowserRouter } from 'react-router-dom'
import ProjectSidebarMenu from './ProjectSidebarMenu'
import { type ProjectWithEntryPointMetadata } from 'lib/types'
import { GlobalStateProvider } from './GlobalStateProvider'
import { SettingsAuthStateProvider } from './SettingsAuthStateProvider'
import CommandBarProvider from './CommandBar/CommandBar'
import { APP_NAME } from 'lib/constants'
@ -42,9 +42,9 @@ describe('ProjectSidebarMenu tests', () => {
render(
<BrowserRouter>
<CommandBarProvider>
<GlobalStateProvider>
<SettingsAuthStateProvider>
<ProjectSidebarMenu project={projectWellFormed} />
</GlobalStateProvider>
</SettingsAuthStateProvider>
</CommandBarProvider>
</BrowserRouter>
)
@ -63,9 +63,9 @@ describe('ProjectSidebarMenu tests', () => {
render(
<BrowserRouter>
<CommandBarProvider>
<GlobalStateProvider>
<SettingsAuthStateProvider>
<ProjectSidebarMenu />
</GlobalStateProvider>
</SettingsAuthStateProvider>
</CommandBarProvider>
</BrowserRouter>
)
@ -79,12 +79,12 @@ describe('ProjectSidebarMenu tests', () => {
render(
<BrowserRouter>
<CommandBarProvider>
<GlobalStateProvider>
<SettingsAuthStateProvider>
<ProjectSidebarMenu
project={projectWellFormed}
renderAsLink={true}
/>
</GlobalStateProvider>
</SettingsAuthStateProvider>
</CommandBarProvider>
</BrowserRouter>
)