mirror of
https://github.com/Kong/insomnia
synced 2024-11-08 14:49:53 +00:00
58 lines
1.9 KiB
TypeScript
58 lines
1.9 KiB
TypeScript
import { useEffect, useLayoutEffect } from 'react';
|
|
import { useSelector } from 'react-redux';
|
|
import { usePrevious } from 'react-use';
|
|
|
|
import { restartApp, setMenuBarVisibility } from '../../common/electron-helpers';
|
|
import { Settings } from '../../models/settings';
|
|
import { selectSettings } from '../redux/selectors';
|
|
|
|
const useRestartSetting = (setting: keyof Settings) => {
|
|
const settings = useSelector(selectSettings);
|
|
|
|
const nextValue = settings[setting];
|
|
const previousValue = usePrevious(nextValue);
|
|
useEffect(() => {
|
|
// for the first value only, the return of `usePrevious` is `undefined` since there's no "previous" value at the time of the first value.
|
|
if (previousValue === undefined) {
|
|
return;
|
|
}
|
|
|
|
// there's not been a change, so no need to take any action
|
|
if (nextValue === previousValue) {
|
|
return;
|
|
}
|
|
|
|
restartApp();
|
|
}, [nextValue, previousValue]);
|
|
};
|
|
|
|
const updateFontStyle = (key: string, value: string | null) => document?.querySelector('html')?.style.setProperty(key, value);
|
|
|
|
// as a general rule, if the body effect in this file is more than one line, extract into a separate function.
|
|
export const useSettingsSideEffects = () => {
|
|
const settings = useSelector(selectSettings);
|
|
|
|
useLayoutEffect(() => {
|
|
updateFontStyle('--font-default', settings.fontInterface);
|
|
}, [settings.fontInterface]);
|
|
|
|
useLayoutEffect(() => {
|
|
updateFontStyle('--font-monospace', settings.fontMonospace);
|
|
}, [settings.fontMonospace]);
|
|
|
|
useLayoutEffect(() => {
|
|
updateFontStyle('--font-ligatures', settings.fontVariantLigatures ? 'normal' : 'none');
|
|
}, [settings.fontVariantLigatures]);
|
|
|
|
useLayoutEffect(() => {
|
|
updateFontStyle('font-size', `${settings.fontSize}px`);
|
|
}, [settings.fontSize]);
|
|
|
|
useEffect(() => {
|
|
setMenuBarVisibility(!settings.autoHideMenuBar);
|
|
}, [settings.autoHideMenuBar]);
|
|
|
|
useRestartSetting('nunjucksPowerUserMode');
|
|
useRestartSetting('showVariableSourceAndValue');
|
|
};
|