feat: add a toggle for sidebar

This commit is contained in:
2024-05-17 13:55:37 +02:00
parent c98817e59d
commit c694b7dafd
9 changed files with 119 additions and 32 deletions

35
contexts/sidebar.tsx Normal file
View File

@@ -0,0 +1,35 @@
"use client";
import { createContext, PropsWithChildren, useCallback, useContext } from "react";
import { useCookies } from "next-client-cookies";
const SIDEBAR_COOKIE_NAME = "sidebar";
export enum SidebarStatus {
Open = "open",
Closed = "closed",
}
const SidebarContext = createContext(SidebarStatus.Closed);
const SetSidebarContext = createContext<(newStatus: SidebarStatus) => void>(() => {});
export const useSidebarStatus = () => useContext(SidebarContext);
export const useSetSidebarStatus = () => useContext(SetSidebarContext);
export const SidebarProvider = ({ children }: PropsWithChildren) => {
const cookies = useCookies();
const sidebarStatus = cookies.get(SIDEBAR_COOKIE_NAME) as SidebarStatus;
const setSidebarStatus = useCallback(
(newStatus: SidebarStatus) => {
cookies.set(SIDEBAR_COOKIE_NAME, newStatus);
},
[cookies]
);
return (
<SidebarContext.Provider value={sidebarStatus}>
<SetSidebarContext.Provider value={setSidebarStatus}>{children}</SetSidebarContext.Provider>
</SidebarContext.Provider>
);
};