diff --git a/apps/client/src/components/settings/settings-sidebar.tsx b/apps/client/src/components/settings/settings-sidebar.tsx index 1a0835a4..483c0026 100644 --- a/apps/client/src/components/settings/settings-sidebar.tsx +++ b/apps/client/src/components/settings/settings-sidebar.tsx @@ -10,8 +10,9 @@ import { IconBrush, IconCoin, IconLock, - IconKey, IconWorld, -} from '@tabler/icons-react'; + IconKey, + IconWorld, +} from "@tabler/icons-react"; import { Link, useLocation, useNavigate } from "react-router-dom"; import classes from "./settings.module.css"; import { useTranslation } from "react-i18next"; @@ -22,12 +23,15 @@ import { workspaceAtom } from "@/features/user/atoms/current-user-atom.ts"; import { prefetchBilling, prefetchGroups, - prefetchLicense, prefetchShares, + prefetchLicense, + prefetchShares, prefetchSpaces, prefetchSsoProviders, prefetchWorkspaceMembers, -} from '@/components/settings/settings-queries.tsx'; +} from "@/components/settings/settings-queries.tsx"; import AppVersion from "@/components/settings/app-version.tsx"; +import { mobileSidebarAtom } from "@/components/layouts/global/hooks/atoms/sidebar-atom.ts"; +import { useToggleSidebar } from "@/components/layouts/global/hooks/hooks/use-toggle-sidebar.ts"; interface DataItem { label: string; @@ -83,7 +87,6 @@ const groupedData: DataGroup[] = [ { label: "Groups", icon: IconUsersGroup, path: "/settings/groups" }, { label: "Spaces", icon: IconSpaces, path: "/settings/spaces" }, { label: "Public sharing", icon: IconWorld, path: "/settings/sharing" }, - ], }, { @@ -105,6 +108,8 @@ export default function SettingsSidebar() { const navigate = useNavigate(); const { isAdmin } = useUserRole(); const [workspace] = useAtom(workspaceAtom); + const [mobileSidebarOpened] = useAtom(mobileSidebarAtom); + const toggleMobileSidebar = useToggleSidebar(mobileSidebarAtom); useEffect(() => { setActive(location.pathname); @@ -186,6 +191,11 @@ export default function SettingsSidebar() { data-active={active.startsWith(item.path) || undefined} key={item.label} to={item.path} + onClick={() => { + if (mobileSidebarOpened) { + toggleMobileSidebar(); + } + }} > {t(item.label)} diff --git a/apps/client/src/features/page/tree/components/space-tree.tsx b/apps/client/src/features/page/tree/components/space-tree.tsx index 7b2f2f7d..8ff63582 100644 --- a/apps/client/src/features/page/tree/components/space-tree.tsx +++ b/apps/client/src/features/page/tree/components/space-tree.tsx @@ -8,9 +8,9 @@ import { useUpdatePageMutation, } from "@/features/page/queries/page-query.ts"; import { useEffect, useRef, useState } from "react"; -import { useNavigate, useParams } from "react-router-dom"; +import { Link, useNavigate, useParams } from "react-router-dom"; import classes from "@/features/page/tree/styles/tree.module.css"; -import { ActionIcon, Menu, rem } from "@mantine/core"; +import { ActionIcon, Box, Menu, rem } from "@mantine/core"; import { IconArrowRight, IconChevronDown, @@ -58,6 +58,8 @@ import { useDeletePageModal } from "@/features/page/hooks/use-delete-page-modal. import { useTranslation } from "react-i18next"; import ExportModal from "@/components/common/export-modal"; import MovePageModal from "../../components/move-page-modal.tsx"; +import { mobileSidebarAtom } from "@/components/layouts/global/hooks/atoms/sidebar-atom.ts"; +import { useToggleSidebar } from "@/components/layouts/global/hooks/hooks/use-toggle-sidebar.ts"; interface SpaceTreeProps { spaceId: string; @@ -230,13 +232,14 @@ export default function SpaceTree({ spaceId, readOnly }: SpaceTreeProps) { } function Node({ node, style, dragHandle, tree }: NodeRendererProps) { - const navigate = useNavigate(); + const { t } = useTranslation(); const updatePageMutation = useUpdatePageMutation(); const [treeData, setTreeData] = useAtom(treeDataAtom); const emit = useQueryEmit(); const { spaceSlug } = useParams(); const timerRef = useRef(null); - const { t } = useTranslation(); + const [mobileSidebarOpened] = useAtom(mobileSidebarAtom); + const toggleMobileSidebar = useToggleSidebar(mobileSidebarAtom); const prefetchPage = () => { timerRef.current = setTimeout(() => { @@ -287,11 +290,6 @@ function Node({ node, style, dragHandle, tree }: NodeRendererProps) { } } - const handleClick = () => { - const pageUrl = buildPageUrl(spaceSlug, node.data.slugId, node.data.name); - navigate(pageUrl); - }; - const handleUpdateNodeIcon = (nodeId: string, newIcon: string) => { const updatedTree = updateTreeNodeIcon(treeData, nodeId, newIcon); setTreeData(updatedTree); @@ -345,13 +343,22 @@ function Node({ node, style, dragHandle, tree }: NodeRendererProps) { }, 650); } + const pageUrl = buildPageUrl(spaceSlug, node.data.slugId, node.data.name); + return ( <> -
{ + if (mobileSidebarOpened) { + toggleMobileSidebar(); + } + }} onMouseEnter={prefetchPage} onMouseLeave={cancelPagePrefetch} > @@ -385,7 +392,7 @@ function Node({ node, style, dragHandle, tree }: NodeRendererProps) { /> )}
- + ); } diff --git a/apps/client/src/features/page/tree/styles/tree.module.css b/apps/client/src/features/page/tree/styles/tree.module.css index a769dea6..716101e0 100644 --- a/apps/client/src/features/page/tree/styles/tree.module.css +++ b/apps/client/src/features/page/tree/styles/tree.module.css @@ -18,7 +18,7 @@ align-items: center; height: 100%; width: 93%; /* not to overlap with scroll bar */ - + text-decoration: none; color: light-dark(var(--mantine-color-gray-7), var(--mantine-color-dark-0)); &:hover {