diff --git a/src/app/course/[courseName]/CollapsableSidebar.tsx b/src/app/course/[courseName]/CollapsableSidebar.tsx index 0d2bfbd..cece03b 100644 --- a/src/app/course/[courseName]/CollapsableSidebar.tsx +++ b/src/app/course/[courseName]/CollapsableSidebar.tsx @@ -1,25 +1,61 @@ "use client"; -import { useState } from "react"; +import { useState, useEffect } from "react"; import CourseSettingsLink from "./CourseSettingsLink"; import ModuleList from "./modules/ModuleList"; import LeftChevron from "@/components/icons/LeftChevron"; import RightChevron from "@/components/icons/RightChevron"; -export default function CollapsableSidebar() { - const [isCollapsed, setIsCollapsed] = useState(false); +const collapseThreshold = 1400; + +export default function CollapsableSidebar() { + const [windowCollapseRecommended, setWindowCollapseRecommended] = + useState(window.innerWidth <= collapseThreshold); + const [userCollapsed, setUserCollapsed] = useState< + "unset" | "collapsed" | "uncollapsed" + >("unset"); + + useEffect(() => { + function handleResize() { + if (window.innerWidth <= collapseThreshold) { + setWindowCollapseRecommended(true); + } else { + setWindowCollapseRecommended(false); + } + } + handleResize(); // Set initial state + window.addEventListener("resize", handleResize); + return () => window.removeEventListener("resize", handleResize); + }, []); + + let collapsed; + if (userCollapsed === "unset") { + collapsed = windowCollapseRecommended; + } else { + collapsed = userCollapsed === "collapsed"; + } + + const widthClass = collapsed ? "w-0" : "w-96"; + const visibilityClass = collapsed ? "invisible " : "visible"; - const widthClass = isCollapsed ? "w-0" : "w-96"; - const visibilityClass = isCollapsed ? "invisible " : "visible"; return (