"use client" /** * Learning activities secondary nav — hub modes + activity groups (Question bank pattern). */ import * as React from "react" import { Link, useLocation, useSearchParams } from "react-router-dom" import { Button } from "@/components/ui/button" import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu" import { Tip } from "@/components/ui/tip" import { cn } from "@/lib/utils" import type { LibraryFolder } from "@/lib/mock/library-folders" import { useSecondaryPanel } from "@/components/sidebar" import { SecondaryHubIconNavRow, SecondaryHubNavCompactShell, SecondaryHubNavRow, SecondaryHubNavSectionHeader, useSecondaryHubNavChrome, } from "@/components/sidebar/secondary-hub-nav-primitives" import { LibraryNewFolderSheet } from "@/components/library-new-folder-sheet" import { newFolderId } from "@/lib/mock/learning-activities-folders" import { coerceLearningActivitiesNav, isLearningActivitiesFolderNavActive, isLearningActivitiesNavActive, laHubScopeHref, parseLearningActivitiesNav, } from "@/lib/learning-activities-nav" export function LearningActivitiesSecondaryNav() { const pathname = useLocation().pathname const [searchParams] = useSearchParams() const { openPanel, learningActivitiesFolderBridge } = useSecondaryPanel() const { showCompactRail, dismissNavFlyout } = useSecondaryHubNavChrome() const folders = learningActivitiesFolderBridge?.folders ?? [] const onFoldersChange = learningActivitiesFolderBridge?.onFoldersChange const canManageFolders = learningActivitiesFolderBridge != null const nav = React.useMemo( () => coerceLearningActivitiesNav(parseLearningActivitiesNav(searchParams), folders), [folders, searchParams], ) const [newFolderOpen, setNewFolderOpen] = React.useState(false) const folderTreeScopeActive = nav.scope === "folder" && nav.folderId != null const folderTreeRoots = React.useMemo( () => folders .filter(f => f.parentId === null) .sort((a, b) => a.name.localeCompare(b.name)), [folders], ) const flattenedFolderLinks = React.useMemo(() => { const out: LibraryFolder[] = [] const walk = (folder: LibraryFolder) => { out.push(folder) folders .filter(c => c.parentId === folder.id) .sort((a, b) => a.name.localeCompare(b.name)) .forEach(walk) } folderTreeRoots.forEach(walk) return out }, [folderTreeRoots, folders]) const hubNavModals = ( { onFoldersChange?.(prev => [...prev, { ...folder, id: newFolderId() }]) setNewFolderOpen(false) }} /> ) if (showCompactRail) { return ( <>