import { useEffect, useState } from "react"; import { ScrollArea, Text, Divider, Modal } from "@mantine/core"; import { IconHome, IconClock, IconStar, IconLayoutGrid, IconSettings, IconUserPlus, } from "@tabler/icons-react"; import { Link, useLocation } from "react-router-dom"; import classes from "./global-sidebar.module.css"; import { useTranslation } from "react-i18next"; import { useAtom } from "jotai"; import { mobileSidebarAtom } from "@/components/layouts/global/hooks/atoms/sidebar-atom"; import { useToggleSidebar } from "@/components/layouts/global/hooks/hooks/use-toggle-sidebar"; import { useFavoritesQuery } from "@/features/favorite/queries/favorite-query"; import { getSpaceUrl } from "@/lib/config"; import { useDisclosure } from "@mantine/hooks"; import { WorkspaceInviteForm } from "@/features/workspace/components/members/components/workspace-invite-form"; import { CustomAvatar } from "@/components/ui/custom-avatar"; import { AvatarIconType } from "@/features/attachments/types/attachment.types"; const mainNavItems = [ { label: "Home", icon: IconHome, path: "/home" }, { label: "Favorites", icon: IconStar, path: "/favorites" }, { label: "Spaces", icon: IconLayoutGrid, path: "/spaces" }, ]; export default function GlobalSidebar() { const { t } = useTranslation(); const location = useLocation(); const [active, setActive] = useState(location.pathname); const [mobileSidebarOpened] = useAtom(mobileSidebarAtom); const toggleMobileSidebar = useToggleSidebar(mobileSidebarAtom); const { data: favoriteSpacesData } = useFavoritesQuery("space"); const favoriteSpaces = favoriteSpacesData?.pages.flatMap((p) => p.items) ?? []; const sortedFavoriteSpaces = [...favoriteSpaces] .filter((fav) => fav.space) .sort((a, b) => { const cmp = (a.space!.name ?? "").localeCompare(b.space!.name ?? "", undefined, { sensitivity: "base" }); return cmp !== 0 ? cmp : a.id.localeCompare(b.id); }); const [inviteOpened, { open: openInvite, close: closeInvite }] = useDisclosure(false); useEffect(() => { setActive(location.pathname); }, [location.pathname]); const handleNavClick = () => { if (mobileSidebarOpened) { toggleMobileSidebar(); } }; return (
{mainNavItems.map((item) => ( {t(item.label)} ))}
{t("Favorite spaces")} {sortedFavoriteSpaces.length === 0 ? ( {t("Favorite spaces appear here")} ) : ( <> {sortedFavoriteSpaces.slice(0, 10).map((fav) => ( {fav.space!.name} ))} {sortedFavoriteSpaces.length > 10 && ( {t("View all")} )} )}
{ e.preventDefault(); openInvite(); }} href="#" > {t("Invite People")} {t("Settings")}
); }