chore(ui): abstract useSetting/state combo into own hook
This commit is contained in:
parent
bff97b4810
commit
c0e528b4c1
|
|
@ -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<SplitViewProps> = ({
|
|||
main,
|
||||
}) => {
|
||||
const defaultSize = Math.max(minSidebarSize, sidebarSize) * window.devicePixelRatio;
|
||||
const hSetting = useSetting<number>((settingName ?? 'unused') + '.' + orientation + ':size', defaultSize);
|
||||
const vSetting = useSetting<number>((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<HTMLDivElement>();
|
||||
|
|
|
|||
|
|
@ -157,6 +157,12 @@ export function useSetting<S>(name: string, defaultValue: S, title?: string): [S
|
|||
return [value, setValueWrapper, setting];
|
||||
}
|
||||
|
||||
export function useSettingOrState<S>(name: string | undefined, defaultValue: S, title?: string, persist?: boolean): [S, (v: S) => void, Setting<S>] {
|
||||
const setting = useSetting(name ?? 'unused', defaultValue, title);
|
||||
const state = React.useState(defaultValue);
|
||||
return persist ? setting : [...state, [...state, title ?? '']];
|
||||
}
|
||||
|
||||
export class Settings {
|
||||
onChangeEmitter = new EventTarget();
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue