/** * Platform sidebar: Recollections, Recently used, New recollection. */ import React, { useCallback, useMemo } from 'react' import { Link, useNavigate, useParams, useLocation } from 'react-router-dom' import { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupLabel, SidebarHeader, SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarRail, SidebarTrigger, } from '@/components/ui/sidebar' import { Plus, Settings } from 'lucide-react' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { useSidebar } from '@/components/ui/sidebar' import { usePlatform } from './KosmosContext' import { getRecollectionIcon } from '@/lib/iconMap' import { RecollectionsIcon } from '@/lib/icons' import { NewRecollectionDialog } from './NewRecollectionDialog' import { SettingsDialog } from './SettingsDialog' import type { Recollection } from './types' export function KosmosSidebar() { const { state, setOpen } = useSidebar() const isCollapsed = state === 'collapsed' const { orderedRecollections, createRecollection, recentRecollectionIds } = usePlatform() const recentRecollections = useMemo(() => { const byId = new Map(orderedRecollections.map((p) => [p.id, p])) return recentRecollectionIds.map((id) => byId.get(id)).filter((p): p is Recollection => p != null) }, [orderedRecollections, recentRecollectionIds]) const navigate = useNavigate() const location = useLocation() const { recollectionId: selectedRecollectionId } = useParams<{ recollectionId: string }>() const handleCreateRecollection = useCallback( (recollection: Parameters[0]) => { createRecollection(recollection) navigate(`/recollections/${recollection.id}`) }, [createRecollection, navigate] ) return ( <> {isCollapsed && (