BillTracker/client/hooks/useSearchPanelPreference.js

33 lines
921 B
JavaScript
Raw Permalink Normal View History

import { useCallback, useEffect, useState } from 'react';
import { api } from '@/api';
const SETTING_KEY = 'search_bars_collapsed';
function settingToBool(value) {
return value === true || value === 'true' || value === '1' || value === 1;
}
export function useSearchPanelPreference() {
const [collapsed, setCollapsed] = useState(false);
useEffect(() => {
let mounted = true;
api.settings()
.then(settings => {
if (mounted && settings?.[SETTING_KEY] !== undefined && settings?.[SETTING_KEY] !== null) {
setCollapsed(settingToBool(settings[SETTING_KEY]));
}
})
.catch(() => {});
return () => { mounted = false; };
}, []);
const saveCollapsed = useCallback((nextCollapsed) => {
setCollapsed(nextCollapsed);
api.saveSettings({ [SETTING_KEY]: nextCollapsed ? 'true' : 'false' }).catch(() => {});
}, []);
return [collapsed, saveCollapsed];
}