44 lines
1.1 KiB
TypeScript
44 lines
1.1 KiB
TypeScript
"use client";
|
|
|
|
import { createContext, useContext, useState, ReactNode } from "react";
|
|
import { DataSync } from "@/components/DataSync";
|
|
|
|
interface SidebarContextType {
|
|
isOpen: boolean;
|
|
toggle: () => void;
|
|
close: () => void;
|
|
open: () => void;
|
|
}
|
|
|
|
const SidebarContext = createContext<SidebarContextType | undefined>(undefined);
|
|
|
|
export function Providers({ children }: { children: ReactNode }) {
|
|
const [isSidebarOpen, setIsSidebarOpen] = useState(true);
|
|
|
|
const toggleSidebar = () => setIsSidebarOpen((prev) => !prev);
|
|
const closeSidebar = () => setIsSidebarOpen(false);
|
|
const openSidebar = () => setIsSidebarOpen(true);
|
|
|
|
return (
|
|
<SidebarContext.Provider
|
|
value={{
|
|
isOpen: isSidebarOpen,
|
|
toggle: toggleSidebar,
|
|
close: closeSidebar,
|
|
open: openSidebar,
|
|
}}
|
|
>
|
|
<DataSync />
|
|
{children}
|
|
</SidebarContext.Provider>
|
|
);
|
|
}
|
|
|
|
export function useSidebar() {
|
|
const context = useContext(SidebarContext);
|
|
if (context === undefined) {
|
|
throw new Error("useSidebar must be used within a Providers");
|
|
}
|
|
return context;
|
|
}
|