diff --git a/packages/web/src/components/splitView.tsx b/packages/web/src/components/splitView.tsx index 776b8d842f..8e2b242ff5 100644 --- a/packages/web/src/components/splitView.tsx +++ b/packages/web/src/components/splitView.tsx @@ -14,7 +14,7 @@ limitations under the License. */ -import { clsx, useMeasure, useSetting } from '../uiUtils'; +import { clsx, useMeasure, useSettingOrState } from '../uiUtils'; import './splitView.css'; import * as React from 'react'; @@ -43,12 +43,8 @@ export const SplitView: React.FC = ({ main, }) => { const defaultSize = Math.max(minSidebarSize, sidebarSize) * window.devicePixelRatio; - const hSetting = useSetting((settingName ?? 'unused') + '.' + orientation + ':size', defaultSize); - const vSetting = useSetting((settingName ?? 'unused') + '.' + orientation + ':size', defaultSize); - const hState = React.useState(defaultSize); - const vState = React.useState(defaultSize); - const [hSize, setHSize] = settingName ? hSetting : hState; - const [vSize, setVSize] = settingName ? vSetting : vState; + const [hSize, setHSize] = useSettingOrState(settingName + '.' + orientation + ':size', defaultSize, undefined, !!settingName); + const [vSize, setVSize] = useSettingOrState(settingName + '.' + orientation + ':size', defaultSize, undefined, !!settingName); const [resizing, setResizing] = React.useState<{ offset: number, size: number } | null>(null); const [measure, ref] = useMeasure(); diff --git a/packages/web/src/uiUtils.ts b/packages/web/src/uiUtils.ts index b590d75b7b..509c9fc695 100644 --- a/packages/web/src/uiUtils.ts +++ b/packages/web/src/uiUtils.ts @@ -157,6 +157,12 @@ export function useSetting(name: string, defaultValue: S, title?: string): [S return [value, setValueWrapper, setting]; } +export function useSettingOrState(name: string | undefined, defaultValue: S, title?: string, persist?: boolean): [S, (v: S) => void, Setting] { + const setting = useSetting(name ?? 'unused', defaultValue, title); + const state = React.useState(defaultValue); + return persist ? setting : [...state, [...state, title ?? '']]; +} + export class Settings { onChangeEmitter = new EventTarget();