From 840470eb4f051d0d5afbfbb112e5ba3677ac3554 Mon Sep 17 00:00:00 2001 From: Leo dev Date: Sat, 27 Dec 2025 01:04:33 +0100 Subject: [PATCH] Better sidebar ux --- package-lock.json | 17 +++++++++++++++++ package.json | 2 ++ src/components/dashboard/DashboardLayout.tsx | 17 +++++++++++++++-- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index eb5fb8f..fb776f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,9 +14,11 @@ "@radix-ui/react-slot": "^1.2.4", "@radix-ui/react-tooltip": "^1.2.8", "@types/dockerode": "^3.3.47", + "@types/js-cookie": "^3.0.6", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "dockerode": "^4.0.9", + "js-cookie": "^3.0.5", "lucide-react": "^0.562.0", "next": "16.1.1", "react": "19.2.3", @@ -2152,6 +2154,12 @@ "@types/ssh2": "*" } }, + "node_modules/@types/js-cookie": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.6.tgz", + "integrity": "sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==", + "license": "MIT" + }, "node_modules/@types/node": { "version": "20.19.27", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.27.tgz", @@ -2778,6 +2786,15 @@ "jiti": "lib/jiti-cli.mjs" } }, + "node_modules/js-cookie": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", diff --git a/package.json b/package.json index dbeb7df..3942165 100644 --- a/package.json +++ b/package.json @@ -14,9 +14,11 @@ "@radix-ui/react-slot": "^1.2.4", "@radix-ui/react-tooltip": "^1.2.8", "@types/dockerode": "^3.3.47", + "@types/js-cookie": "^3.0.6", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "dockerode": "^4.0.9", + "js-cookie": "^3.0.5", "lucide-react": "^0.562.0", "next": "16.1.1", "react": "19.2.3", diff --git a/src/components/dashboard/DashboardLayout.tsx b/src/components/dashboard/DashboardLayout.tsx index 67f0a3a..8647642 100644 --- a/src/components/dashboard/DashboardLayout.tsx +++ b/src/components/dashboard/DashboardLayout.tsx @@ -1,7 +1,10 @@ -import { ReactNode } from "react"; +"use client"; + +import { ReactNode, useEffect, useState } from "react"; import { DashboardSidebar } from "./DashboardSidebar"; import { DashboardHeader } from "./DashboardHeader"; import { SidebarProvider } from "../ui/sidebar"; +import Cookies from "js-cookie"; interface DashboardLayoutProps { children: ReactNode; @@ -14,8 +17,18 @@ export function DashboardLayout({ title, subtitle, }: DashboardLayoutProps) { + const [mounted, setMounted] = useState(false); + const [sidebarOpen, setSidebarOpen] = useState(false); + + useEffect(() => { + setSidebarOpen(Cookies.get("sidebar_state") !== "false"); + setMounted(true); + }, []); + + if (!mounted) return null; + return ( - +