diff --git a/src/components/FileExplorer.tsx b/src/components/FileExplorer.tsx index cef7d03..91fc119 100644 --- a/src/components/FileExplorer.tsx +++ b/src/components/FileExplorer.tsx @@ -32,7 +32,7 @@ const RawFileExplorer: React.FC = function RawFileExplor treeRoot, defer, } = props - const { val: config } = useConfigs() + const { value: config } = useConfigs() React.useEffect(() => { if (treeRoot) { diff --git a/src/components/Node.tsx b/src/components/Node.tsx index ea023fc..f721c1f 100644 --- a/src/components/Node.tsx +++ b/src/components/Node.tsx @@ -87,7 +87,7 @@ const NodeItemIcon = React.memo(function NodeItemIcon({ loading?: boolean }) { const { - val: { icons }, + value: { icons }, } = useConfigs() const src = React.useMemo( diff --git a/src/components/Resizable.tsx b/src/components/Resizable.tsx index fa58bb6..bc1a786 100644 --- a/src/components/Resizable.tsx +++ b/src/components/Resizable.tsx @@ -38,7 +38,7 @@ export function Resizable({ baseSize, className, children }: React.PropsWithChil }, [width, size]) useCSSVariable('--gitako-width', `${size}px`) - useDebounce(() => configContext.set({ sideBarWidth: size }), 100, [size]) + useDebounce(() => configContext.onChange({ sideBarWidth: size }), 100, [size]) const onResize = React.useCallback((size: number) => { // do NOT merge this with the above similar effect, side bar will jump otherwise diff --git a/src/components/SideBar.tsx b/src/components/SideBar.tsx index 704c675..96d044e 100644 --- a/src/components/SideBar.tsx +++ b/src/components/SideBar.tsx @@ -38,16 +38,16 @@ const RawGitako: React.FC = function RawGitako(props) { configContext, } = props - const accessToken = configContext.val.accessToken || '' - const [baseSize] = React.useState(() => configContext.val.sideBarWidth) + const accessToken = configContext.value.accessToken || '' + const [baseSize] = React.useState(() => configContext.value.sideBarWidth) - useShrinkGitHubHeader(configContext.val.shrinkGitHubHeader) + useShrinkGitHubHeader(configContext.value.shrinkGitHubHeader) React.useEffect(() => { run(async function () { if (!accessToken) { const accessToken = await trySetUpAccessTokenWithCode() - if (accessToken) configContext.set({ accessToken }) + if (accessToken) configContext.onChange({ accessToken }) } }) }, []) @@ -58,21 +58,21 @@ const RawGitako: React.FC = function RawGitako(props) { React.useEffect( function attachKeyDown() { - if (props.disabled || !configContext.val.shortcut) return + if (props.disabled || !configContext.value.shortcut) return function onKeyDown(e: KeyboardEvent) { const keys = keyHelper.parseEvent(e) - if (keys === configContext.val.shortcut) { + if (keys === configContext.value.shortcut) { toggleShowSideBar() } } window.addEventListener('keydown', onKeyDown) return () => window.removeEventListener('keydown', onKeyDown) }, - [toggleShowSideBar, props.disabled, configContext.val.shortcut], + [toggleShowSideBar, props.disabled, configContext.value.shortcut], ) - const intelligentToggle = configContext.val.intelligentToggle + const intelligentToggle = configContext.value.intelligentToggle React.useEffect(() => { const shouldShow = intelligentToggle === null ? platform.shouldShow() : intelligentToggle props.setShouldShow(shouldShow) @@ -88,8 +88,8 @@ const RawGitako: React.FC = function RawGitako(props) { ) useOnPJAXDone(updateSideBarVisibility) - useGitHubAttachCopyFileButton(configContext.val.copyFileButton) - useGitHubAttachCopySnippetButton(configContext.val.copySnippetButton) + useGitHubAttachCopyFileButton(configContext.value.copyFileButton) + useGitHubAttachCopySnippetButton(configContext.value.copySnippetButton) usePJAX() useProgressBar() @@ -122,7 +122,7 @@ const RawGitako: React.FC = function RawGitako(props) { freeze={showSettings} accessToken={accessToken} loadWithPJAX={loadWithPJAX} - config={configContext.val} + config={configContext.value} defer={defer} /> ) diff --git a/src/components/SimpleToggleField.tsx b/src/components/SimpleToggleField.tsx index 52c75ba..343aae0 100644 --- a/src/components/SimpleToggleField.tsx +++ b/src/components/SimpleToggleField.tsx @@ -24,7 +24,7 @@ type Props = { export function SimpleToggleField({ field, onChange }: Props) { const { overwrite } = field const configContext = useConfigs() - const value = configContext.val[field.key] + const value = configContext.value[field.key] return ( { const enabled = e.currentTarget.checked - configContext.set({ [field.key]: overwrite ? overwrite.onChange(enabled) : enabled }) + configContext.onChange({ [field.key]: overwrite ? overwrite.onChange(enabled) : enabled }) if (onChange) onChange() }} checked={overwrite ? overwrite.value(value) : Boolean(value)} diff --git a/src/components/ToggleShowButton.tsx b/src/components/ToggleShowButton.tsx index adeb194..4a07863 100644 --- a/src/components/ToggleShowButton.tsx +++ b/src/components/ToggleShowButton.tsx @@ -11,7 +11,7 @@ type Props = { export function ToggleShowButton({ error, onClick }: Props) { const ref = React.useRef(null) const config = useConfigs() - const [distance, setDistance] = React.useState(config.val.toggleButtonVerticalDistance) + const [distance, setDistance] = React.useState(config.value.toggleButtonVerticalDistance) const { height } = useWindowSize() const buttonHeight = 42 React.useEffect(() => { @@ -28,12 +28,12 @@ export function ToggleShowButton({ error, onClick }: Props) { // updating context useDebounce( - () => config.set({ toggleButtonVerticalDistance: distance }), // too slow + () => config.onChange({ toggleButtonVerticalDistance: distance }), // too slow 100, [distance], ) - const toggleIconMode = config.val.toggleButtonContent + const toggleIconMode = config.value.toggleButtonContent return (
+
) : (
@@ -110,8 +110,8 @@ export function AccessTokenSettings(props: React.PropsWithChildren) { className={'access-token-input'} value={accessToken} placeholder="Or input here manually" - onFocus={() => focusInput.set(true)} - onBlur={() => focusInput.set(false)} + onFocus={() => focusInput.onChange(true)} + onBlur={() => focusInput.onChange(false)} onChange={onInputAccessToken} onKeyPress={onPressAccessToken} /> @@ -121,7 +121,7 @@ export function AccessTokenSettings(props: React.PropsWithChildren) {
)} - {accessTokenHint && !focusInput.val && {accessTokenHint}} + {accessTokenHint && !focusInput.value && {accessTokenHint}} ) } diff --git a/src/components/settings/FileTreeSettings.tsx b/src/components/settings/FileTreeSettings.tsx index 3b2dbaf..72c3ca7 100644 --- a/src/components/settings/FileTreeSettings.tsx +++ b/src/components/settings/FileTreeSettings.tsx @@ -49,11 +49,11 @@ export function FileTreeSettings(props: React.PropsWithChildren) { id="recursive-toggle-folder" options={recursiveToggleFolderOptions} onChange={v => { - configContext.set({ + configContext.onChange({ recursiveToggleFolder: v, }) }} - value={configContext.val.recursiveToggleFolder} + value={configContext.value.recursiveToggleFolder} >
@@ -61,11 +61,11 @@ export function FileTreeSettings(props: React.PropsWithChildren) { id="file-tree-icons" options={iconOptions} onChange={v => { - configContext.set({ + configContext.onChange({ icons: v, }) }} - value={configContext.val.icons} + value={configContext.value.icons} /> ('') - const { val: reloadHint } = useReloadHint + const useReloadHint = useStateIO('') + const { value: reloadHint } = useReloadHint const moreFields: SimpleField[] = platform === GitHub diff --git a/src/components/settings/SidebarSettings.tsx b/src/components/settings/SidebarSettings.tsx index 157607c..8f805b0 100644 --- a/src/components/settings/SidebarSettings.tsx +++ b/src/components/settings/SidebarSettings.tsx @@ -5,7 +5,7 @@ import { useConfigs } from 'containers/ConfigsContext' import * as React from 'react' import { Config } from 'utils/configHelper' import { friendlyFormatShortcut } from 'utils/general' -import { useStates } from 'utils/hooks/useStates' +import { useStateIO } from 'utils/hooks/useStateIO' import * as keyHelper from 'utils/keyHelper' import { Field } from './Field' import { SettingsSection } from './SettingsSection' @@ -27,13 +27,13 @@ const toggleButtonContentOptions: Option[] = [ export function SidebarSettings(props: React.PropsWithChildren) { const configContext = useConfigs() - const useToggleShowSideBarShortcut = useStates(configContext.val.shortcut) - const { val: toggleShowSideBarShortcut } = useToggleShowSideBarShortcut - const focused = useStates(false) + const useToggleShowSideBarShortcut = useStateIO(configContext.value.shortcut) + const { value: toggleShowSideBarShortcut } = useToggleShowSideBarShortcut + const focused = useStateIO(false) React.useEffect(() => { - useToggleShowSideBarShortcut.set(configContext.val.shortcut) - }, [configContext.val.shortcut]) + useToggleShowSideBarShortcut.onChange(configContext.value.shortcut) + }, [configContext.value.shortcut]) return ( @@ -43,24 +43,24 @@ export function SidebarSettings(props: React.PropsWithChildren) { id="toggle-sidebar-shortcut" marginRight={1} className={'toggle-shortcut-input'} - onFocus={() => focused.set(true)} - onBlur={() => focused.set(false)} - placeholder={focused.val ? 'Press key combination' : 'Click here to set'} + onFocus={() => focused.onChange(true)} + onBlur={() => focused.onChange(false)} + placeholder={focused.value ? 'Press key combination' : 'Click here to set'} value={friendlyFormatShortcut(toggleShowSideBarShortcut)} onKeyDown={React.useCallback((e: React.KeyboardEvent) => { e.preventDefault() e.stopPropagation() // Clear shortcut with backspace const shortcut = e.key === 'Backspace' ? '' : keyHelper.parseEvent(e) - useToggleShowSideBarShortcut.set(shortcut) + useToggleShowSideBarShortcut.onChange(shortcut) }, [])} readOnly /> - {configContext.val.shortcut === toggleShowSideBarShortcut ? ( + {configContext.value.shortcut === toggleShowSideBarShortcut ? (