2026-06-07 01:28:35 -05:00
|
|
|
import { useCallback, useEffect, useState } from 'react';
|
|
|
|
|
import { api } from '@/api';
|
|
|
|
|
|
|
|
|
|
const SETTING_KEY = 'search_bars_collapsed';
|
|
|
|
|
|
2026-07-03 22:01:30 -05:00
|
|
|
function settingToBool(value: unknown): boolean {
|
2026-06-07 01:28:35 -05:00
|
|
|
return value === true || value === 'true' || value === '1' || value === 1;
|
|
|
|
|
}
|
|
|
|
|
|
2026-07-03 22:01:30 -05:00
|
|
|
export function useSearchPanelPreference(): [boolean, (nextCollapsed: boolean) => void] {
|
2026-06-07 01:28:35 -05:00
|
|
|
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; };
|
|
|
|
|
}, []);
|
|
|
|
|
|
2026-07-03 22:01:30 -05:00
|
|
|
const saveCollapsed = useCallback((nextCollapsed: boolean) => {
|
2026-06-07 01:28:35 -05:00
|
|
|
setCollapsed(nextCollapsed);
|
|
|
|
|
api.saveSettings({ [SETTING_KEY]: nextCollapsed ? 'true' : 'false' }).catch(() => {});
|
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
|
|
return [collapsed, saveCollapsed];
|
|
|
|
|
}
|