diff --git a/apps/client/src/features/page/components/breadcrumbs/breadcrumb.module.css b/apps/client/src/features/page/components/breadcrumbs/breadcrumb.module.css index cf3637b2..cebee031 100644 --- a/apps/client/src/features/page/components/breadcrumbs/breadcrumb.module.css +++ b/apps/client/src/features/page/components/breadcrumbs/breadcrumb.module.css @@ -2,6 +2,7 @@ display: flex; align-items: center; overflow: hidden; + flex-wrap: nowrap; a { color: var(--mantine-color-default-color); diff --git a/apps/client/src/features/page/components/breadcrumbs/breadcrumb.tsx b/apps/client/src/features/page/components/breadcrumbs/breadcrumb.tsx index 367b2682..d4c2da16 100644 --- a/apps/client/src/features/page/components/breadcrumbs/breadcrumb.tsx +++ b/apps/client/src/features/page/components/breadcrumbs/breadcrumb.tsx @@ -1,6 +1,6 @@ import { useAtomValue } from "jotai"; import { treeDataAtom } from "@/features/page/tree/atoms/tree-data-atom.ts"; -import React, { useEffect, useState } from "react"; +import React, { useCallback, useEffect, useState } from "react"; import { findBreadcrumbPath } from "@/features/page/tree/utils"; import { Button, @@ -9,14 +9,16 @@ import { Breadcrumbs, ActionIcon, Text, + Tooltip, } from "@mantine/core"; -import { IconDots } from "@tabler/icons-react"; +import { IconCornerLeftDownDouble, IconDots } from "@tabler/icons-react"; import { Link, useParams } from "react-router-dom"; import classes from "./breadcrumb.module.css"; import { SpaceTreeNode } from "@/features/page/tree/types.ts"; import { buildPageUrl } from "@/features/page/page.utils.ts"; import { usePageQuery } from "@/features/page/queries/page-query.ts"; import { extractPageSlugId } from "@/lib"; +import { useMediaQuery } from "@mantine/hooks"; function getTitle(name: string, icon: string) { if (icon) { @@ -34,6 +36,7 @@ export default function Breadcrumb() { const { data: currentPage } = usePageQuery({ pageId: extractPageSlugId(pageSlug), }); + const isMobile = useMediaQuery("(max-width: 48em)"); useEffect(() => { if (treeData?.length > 0 && currentPage) { @@ -43,7 +46,7 @@ export default function Breadcrumb() { }, [currentPage?.id, treeData]); const HiddenNodesTooltipContent = () => - breadcrumbNodes?.slice(1, -2).map((node) => ( + breadcrumbNodes?.slice(1, -1).map((node) => ( + + )); + + const renderAnchor = useCallback( + (node: SpaceTreeNode) => ( + + + {getTitle(node.name, node.icon)} + + + ), + [spaceSlug], ); const getBreadcrumbItems = () => { @@ -77,7 +102,7 @@ export default function Breadcrumb() { if (breadcrumbNodes.length > 3) { const firstNode = breadcrumbNodes[0]; - const secondLastNode = breadcrumbNodes[breadcrumbNodes.length - 2]; + //const secondLastNode = breadcrumbNodes[breadcrumbNodes.length - 2]; const lastNode = breadcrumbNodes[breadcrumbNodes.length - 1]; return [ @@ -98,7 +123,7 @@ export default function Breadcrumb() { , - renderAnchor(secondLastNode), + //renderAnchor(secondLastNode), renderAnchor(lastNode), ]; } @@ -106,11 +131,40 @@ export default function Breadcrumb() { return breadcrumbNodes.map(renderAnchor); }; + const getMobileBreadcrumbItems = () => { + if (!breadcrumbNodes) return []; + + if (breadcrumbNodes.length > 0) { + return [ + + + + + + + + + + + + , + ]; + } + + return breadcrumbNodes.map(renderAnchor); + }; + return (
{breadcrumbNodes && ( - {getBreadcrumbItems()} + {isMobile ? getMobileBreadcrumbItems() : getBreadcrumbItems()} )}
diff --git a/apps/client/src/features/share/components/share-modal.tsx b/apps/client/src/features/share/components/share-modal.tsx index e5a86ef3..0a7ce328 100644 --- a/apps/client/src/features/share/components/share-modal.tsx +++ b/apps/client/src/features/share/components/share-modal.tsx @@ -1,6 +1,7 @@ import { ActionIcon, Anchor, + Button, Group, Indicator, Popover, @@ -94,18 +95,23 @@ export default function ShareModal({ readOnly }: ShareModalProps) { return ( - - - + {isDescendantShared ? (