import { ActionIcon, Group, rem, Text, Tooltip, UnstyledButton, } from "@mantine/core"; import { spotlight } from "@mantine/spotlight"; import { IconHome, IconPlus, IconSearch, IconSettings, } from "@tabler/icons-react"; import classes from "./space-sidebar.module.css"; import React, { useMemo } from "react"; import { useAtom } from "jotai"; import { SearchSpotlight } from "@/features/search/search-spotlight.tsx"; import { treeApiAtom } from "@/features/page/tree/atoms/tree-api-atom.ts"; import { Link, useLocation, useParams } from "react-router-dom"; import clsx from "clsx"; import { useDisclosure } from "@mantine/hooks"; import SpaceSettingsModal from "@/features/space/components/settings-modal.tsx"; import { useGetSpaceBySlugQuery } from "@/features/space/queries/space-query.ts"; import { SpaceName } from "@/features/space/components/sidebar/space-name.tsx"; import { getSpaceUrl } from "@/lib/config.ts"; import SpaceTree from "@/features/page/tree/components/space-tree.tsx"; import { useSpaceAbility } from "@/features/space/permissions/use-space-ability.ts"; import { SpaceCaslAction, SpaceCaslSubject, } from "@/features/space/permissions/permissions.type.ts"; export function SpaceSidebar() { const [tree] = useAtom(treeApiAtom); const location = useLocation(); const [opened, { open: openSettings, close: closeSettings }] = useDisclosure(false); const { spaceSlug } = useParams(); const { data: space, isLoading, isError } = useGetSpaceBySlugQuery(spaceSlug); const spaceRules = space?.membership?.permissions; const spaceAbility = useMemo(() => useSpaceAbility(spaceRules), [spaceRules]); if (!space) { return <>; } function handleCreatePage() { tree?.create({ parentId: null, type: "internal", index: 0 }); } return ( <>
Overview
Search
Space settings
Pages {spaceAbility.can( SpaceCaslAction.Manage, SpaceCaslSubject.Page, ) && ( )}
); }