From d15cf9d0740b3dd3c3105833a7b0762e085abb1b Mon Sep 17 00:00:00 2001 From: Cedric van Putten Date: Sun, 25 Aug 2024 18:58:09 +0200 Subject: [PATCH] feature(webui): add context menu in breadcrumb links to copy relative/absolute paths --- webui/bun.lockb | Bin 532162 -> 536970 bytes webui/package.json | 1 + webui/src/components/BreadcrumbLinks.tsx | 69 +++++++-- webui/src/ui/Menu.tsx | 183 +++++++++++++++++++++++ 4 files changed, 238 insertions(+), 15 deletions(-) create mode 100644 webui/src/ui/Menu.tsx diff --git a/webui/bun.lockb b/webui/bun.lockb index 97e6b19858fba84010b9738ce36a1eee9d9267c3..ff727ac0ecab6f30a3010bdf9e931fc0079f513f 100755 GIT binary patch delta 61912 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 delta 59477 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 T#O7*#MgH{Ie7sVTjqd*g10trF diff --git a/webui/package.json b/webui/package.json index 2686332..edc09ed 100644 --- a/webui/package.json +++ b/webui/package.json @@ -17,6 +17,7 @@ "@expo/styleguide-native": "^7.0.1", "@radix-ui/react-checkbox": "^1.0.4", "@radix-ui/react-collapsible": "^1.0.3", + "@radix-ui/react-context-menu": "^2.2.1", "@radix-ui/react-dialog": "^1.0.5", "@radix-ui/react-label": "^2.0.2", "@radix-ui/react-select": "^2.0.0", diff --git a/webui/src/components/BreadcrumbLinks.tsx b/webui/src/components/BreadcrumbLinks.tsx index 3677421..3e6a936 100644 --- a/webui/src/components/BreadcrumbLinks.tsx +++ b/webui/src/components/BreadcrumbLinks.tsx @@ -1,5 +1,5 @@ import { Link } from 'expo-router'; -import { ComponentProps, Fragment, useMemo } from 'react'; +import { ComponentProps, Fragment, PropsWithChildren, useCallback, useMemo } from 'react'; import { Breadcrumb, @@ -9,6 +9,13 @@ import { BreadcrumbPage, BreadcrumbSeparator, } from '~/ui/Breadcrumb'; +import { + ContextMenu, + ContextMenuContent, + ContextMenuItem, + ContextMenuSeparator, + ContextMenuTrigger, +} from '~/ui/Menu'; import { type PartialAtlasBundle } from '~core/data/types'; type BreadcrumbLinksProps = { @@ -33,20 +40,24 @@ export function BreadcrumbLinks(props: BreadcrumbLinksProps) { {links.map((link) => ( - + {!link.href ? ( - {link.label} + + {link.label} + ) : ( - - - {link.label} - - + + + + {link.label} + + + )} @@ -56,24 +67,52 @@ export function BreadcrumbLinks(props: BreadcrumbLinksProps) { ); } +type BreadcrumbLinkMenuProps = PropsWithChildren<{ + bundle: PartialAtlasBundle; + link: BreadcrumbLinkItem; +}>; + +function BreadcrumbLinkMenu(props: BreadcrumbLinkMenuProps) { + const onCopyRelativePath = useCallback(() => { + navigator.clipboard.writeText(props.link.filePath); + }, [props.link.filePath]); + + const onCopyAbsolutePath = useCallback(() => { + navigator.clipboard.writeText(`${props.bundle.sharedRoot}/${props.link.filePath}`); + }, [props.link.filePath, props.bundle.sharedRoot]); + + return ( + + {props.children} + + Copy relative path + Copy absolute path + + + ); +} + type BreadcrumbLinkItem = { key: string; label: string; + filePath: string; href?: ComponentProps['href']; }; function getBreadcrumbLinks(props: BreadcrumbLinksProps): BreadcrumbLinkItem[] { return props.path.split('/').map((label, index, breadcrumbs) => { const isLastSegment = index === breadcrumbs.length - 1; - const breadcrumb: BreadcrumbLinkItem = { key: `${index}-${label}`, label }; + const breadcrumb: BreadcrumbLinkItem = { + label, + key: `${index}-${label}`, + filePath: breadcrumbs.slice(0, index + 1).join('/'), + }; // NOTE(cedric): a bit of a workaround to avoid linking to the current page, might need to change this if (!isLastSegment || !label.includes('.')) { - const path = breadcrumbs.slice(0, index + 1).join('/'); - breadcrumb.key = path; breadcrumb.href = { pathname: '/(atlas)/[bundle]/folders/[path]', - params: { bundle: props.bundle.id, path }, + params: { bundle: props.bundle.id, path: breadcrumb.filePath }, }; } diff --git a/webui/src/ui/Menu.tsx b/webui/src/ui/Menu.tsx new file mode 100644 index 0000000..0585362 --- /dev/null +++ b/webui/src/ui/Menu.tsx @@ -0,0 +1,183 @@ +// see: https://ui.shadcn.com/docs/components/context-menu + +import * as ContextMenuPrimitive from '@radix-ui/react-context-menu'; +import { cx } from 'class-variance-authority'; +// @ts-expect-error +import CheckIcon from 'lucide-react/dist/esm/icons/check'; +// @ts-expect-error +import ChevronRightIcon from 'lucide-react/dist/esm/icons/chevron-right'; +// @ts-expect-error +import DotFilledIcon from 'lucide-react/dist/esm/icons/dot'; +import { + type ComponentPropsWithoutRef, + type ElementRef, + forwardRef, + type HTMLAttributes, +} from 'react'; + +export const ContextMenu = ContextMenuPrimitive.Root; + +export const ContextMenuTrigger = ContextMenuPrimitive.Trigger; + +export const ContextMenuGroup = ContextMenuPrimitive.Group; + +export const ContextMenuPortal = ContextMenuPrimitive.Portal; + +export const ContextMenuSub = ContextMenuPrimitive.Sub; + +export const ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup; + +export const ContextMenuSubTrigger = forwardRef< + ElementRef, + ComponentPropsWithoutRef & { + inset?: boolean; + } +>(({ className, inset, children, ...props }, ref) => ( + + {children} + + +)); +ContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName; + +export const ContextMenuSubContent = forwardRef< + ElementRef, + ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +ContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName; + +export const ContextMenuContent = forwardRef< + ElementRef, + ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + +)); +ContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName; + +export const ContextMenuItem = forwardRef< + ElementRef, + ComponentPropsWithoutRef & { + inset?: boolean; + } +>(({ className, inset, ...props }, ref) => ( + +)); +ContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName; + +export const ContextMenuCheckboxItem = forwardRef< + ElementRef, + ComponentPropsWithoutRef +>(({ className, children, checked, ...props }, ref) => ( + + + + + + + {children} + +)); +ContextMenuCheckboxItem.displayName = ContextMenuPrimitive.CheckboxItem.displayName; + +export const ContextMenuRadioItem = forwardRef< + ElementRef, + ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + + + + {children} + +)); +ContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName; + +export const ContextMenuLabel = forwardRef< + ElementRef, + ComponentPropsWithoutRef & { + inset?: boolean; + } +>(({ className, inset, ...props }, ref) => ( + +)); +ContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName; + +export const ContextMenuSeparator = forwardRef< + ElementRef, + ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +ContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName; + +export const ContextMenuShortcut = ({ className, ...props }: HTMLAttributes) => { + return ( + + ); +}; +ContextMenuShortcut.displayName = 'ContextMenuShortcut';