Add settings UI page (#171)

* Add theme colors from Figma

* Rough-in of AppHeader

* Add styled ActionButton

* Add react-router and placeholder Settings page

* Add ability to set persistent defaultDir

* Add react-hot-toast for save success message

* Add defaultProjectName setting

* Handle case of stale empty defaultDir in storage

* Wrap app in BrowserRouter

* Wrap test App in BrowserRouter

* Don't need BrowserRouter outside of testing
because we use RouterProvider
This commit is contained in:
Frank Noirot
2023-07-13 07:22:08 -04:00
committed by GitHub
parent 3fc4d71a1e
commit 59fa51d75a
17 changed files with 731 additions and 10 deletions

View File

@ -155,6 +155,8 @@ export interface StoreState {
// tauri specific app settings
defaultDir: DefaultDir
setDefaultDir: (dir: DefaultDir) => void
defaultProjectName: string
setDefaultProjectName: (defaultProjectName: string) => void
showHomeMenu: boolean
setHomeShowMenu: (showMenu: boolean) => void
homeMenuItems: {
@ -310,9 +312,11 @@ export const useStore = create<StoreState>()(
// tauri specific app settings
defaultDir: {
dir: '',
dir: '~/Documents/',
},
setDefaultDir: (dir) => set({ defaultDir: dir }),
defaultProjectName: 'new-project-$n',
setDefaultProjectName: (defaultProjectName) => set({ defaultProjectName }),
showHomeMenu: true,
setHomeShowMenu: (showHomeMenu) => set({ showHomeMenu }),
homeMenuItems: [],
@ -324,7 +328,12 @@ export const useStore = create<StoreState>()(
name: 'store',
partialize: (state) =>
Object.fromEntries(
Object.entries(state).filter(([key]) => ['code', 'defaultDir', 'token'].includes(key))
Object.entries(state).filter(([key]) => [
'code',
'defaultDir',
'defaultProjectName',
'token',
].includes(key))
),
}
)