Better sidebar ux

This commit is contained in:
2025-12-27 01:04:33 +01:00
parent 947b9e0f1b
commit 840470eb4f
3 changed files with 34 additions and 2 deletions
+17
View File
@@ -14,9 +14,11 @@
"@radix-ui/react-slot": "^1.2.4", "@radix-ui/react-slot": "^1.2.4",
"@radix-ui/react-tooltip": "^1.2.8", "@radix-ui/react-tooltip": "^1.2.8",
"@types/dockerode": "^3.3.47", "@types/dockerode": "^3.3.47",
"@types/js-cookie": "^3.0.6",
"class-variance-authority": "^0.7.1", "class-variance-authority": "^0.7.1",
"clsx": "^2.1.1", "clsx": "^2.1.1",
"dockerode": "^4.0.9", "dockerode": "^4.0.9",
"js-cookie": "^3.0.5",
"lucide-react": "^0.562.0", "lucide-react": "^0.562.0",
"next": "16.1.1", "next": "16.1.1",
"react": "19.2.3", "react": "19.2.3",
@@ -2152,6 +2154,12 @@
"@types/ssh2": "*" "@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": { "node_modules/@types/node": {
"version": "20.19.27", "version": "20.19.27",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.27.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.27.tgz",
@@ -2778,6 +2786,15 @@
"jiti": "lib/jiti-cli.mjs" "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": { "node_modules/js-tokens": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+2
View File
@@ -14,9 +14,11 @@
"@radix-ui/react-slot": "^1.2.4", "@radix-ui/react-slot": "^1.2.4",
"@radix-ui/react-tooltip": "^1.2.8", "@radix-ui/react-tooltip": "^1.2.8",
"@types/dockerode": "^3.3.47", "@types/dockerode": "^3.3.47",
"@types/js-cookie": "^3.0.6",
"class-variance-authority": "^0.7.1", "class-variance-authority": "^0.7.1",
"clsx": "^2.1.1", "clsx": "^2.1.1",
"dockerode": "^4.0.9", "dockerode": "^4.0.9",
"js-cookie": "^3.0.5",
"lucide-react": "^0.562.0", "lucide-react": "^0.562.0",
"next": "16.1.1", "next": "16.1.1",
"react": "19.2.3", "react": "19.2.3",
+15 -2
View File
@@ -1,7 +1,10 @@
import { ReactNode } from "react"; "use client";
import { ReactNode, useEffect, useState } from "react";
import { DashboardSidebar } from "./DashboardSidebar"; import { DashboardSidebar } from "./DashboardSidebar";
import { DashboardHeader } from "./DashboardHeader"; import { DashboardHeader } from "./DashboardHeader";
import { SidebarProvider } from "../ui/sidebar"; import { SidebarProvider } from "../ui/sidebar";
import Cookies from "js-cookie";
interface DashboardLayoutProps { interface DashboardLayoutProps {
children: ReactNode; children: ReactNode;
@@ -14,8 +17,18 @@ export function DashboardLayout({
title, title,
subtitle, subtitle,
}: DashboardLayoutProps) { }: 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 ( return (
<SidebarProvider> <SidebarProvider defaultOpen={sidebarOpen}>
<DashboardSidebar /> <DashboardSidebar />
<div className="flex-1 flex flex-col overflow-hidden"> <div className="flex-1 flex flex-col overflow-hidden">
<DashboardHeader title={title} subtitle={subtitle} /> <DashboardHeader title={title} subtitle={subtitle} />