* Reapply "Deflake project settings override on desktop (#4370)" (#4450)
This reverts commit b11040c23c
.
* Refactor writeToFile and updateCodeEditor to happen at appropriate times
* Turn error into warning about out of date AST.
* Rename setUp to setup
* ONLY reload current file on changes.
* If value is falsey then don't try to executeAst
* Fix up code based selections after constraints
* Correct any last missing code mods
* Update src/clientSideScene/ClientSideSceneComp.tsx
Remove eslint rule no-floating-promises
Co-authored-by: Jonathan Tran <jonnytran@gmail.com>
* Fixups
* Fix FileTree failing
---------
Co-authored-by: Jonathan Tran <jonnytran@gmail.com>
33 lines
1.1 KiB
TypeScript
33 lines
1.1 KiB
TypeScript
import { useRouteLoaderData } from 'react-router-dom'
|
|
import { useSettingsAuthContext } from './useSettingsAuthContext'
|
|
import { PATHS } from 'lib/paths'
|
|
import { settings } from 'lib/settings/initialSettings'
|
|
import { useEffect } from 'react'
|
|
|
|
/**
|
|
* I was dismayed to learn that index route in Router.tsx where we initially load up the settings
|
|
* doesn't re-run on subsequent navigations. This hook is a workaround,
|
|
* in conjunction with additional uses of settingsLoader further down the router tree.
|
|
* @param routeId - The id defined in Router.tsx to load the settings from.
|
|
*/
|
|
export function useRefreshSettings(routeId: string = PATHS.INDEX) {
|
|
const ctx = useSettingsAuthContext()
|
|
const routeData = useRouteLoaderData(routeId) as typeof settings
|
|
|
|
if (!ctx) {
|
|
// Intended to stop the world
|
|
// eslint-disable-next-line
|
|
throw new Error(
|
|
'useRefreshSettings must be used within a SettingsAuthProvider'
|
|
)
|
|
}
|
|
|
|
useEffect(() => {
|
|
ctx.settings.send({
|
|
type: 'Set all settings',
|
|
settings: routeData,
|
|
doNotPersist: true,
|
|
})
|
|
}, [])
|
|
}
|