gitscope
← marzneshin / v0.3.0-alpha5 / dashboard/src/features/sidebar/use-panel-toggle.ts
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/features/sidebar/use-panel-toggle.ts · TypeScript
Blame Raw
 1import { useRef, useState } from "react";
 2import { ImperativePanelHandle } from "react-resizable-panels";
 3
 4export const usePanelToggle = (isDesktop: boolean) => {
 5    const [collapsed, setCollapsed] = useState(false);
 6    const panelRef = useRef<ImperativePanelHandle>(null);
 7    const [open, setOpen] = useState(false);
 8
 9    const toggleCollapse = () => {
10        const panel = panelRef.current;
11        if (isDesktop && panel) {
12            collapsed ? panel.expand() : panel.collapse();
13            setCollapsed(!collapsed);
14            setOpen(false);
15        }
16    };
17
18    const toggleOpen = () => {
19        if (!isDesktop) {
20            setCollapsed(false);
21            setOpen(!open);
22        }
23    };
24
25    return { collapsed, open, panelRef, setCollapsed, setOpen, toggleCollapse, toggleOpen };
26};