import { PageRecordType, TLPageId, track, useEditor } from '@tldraw/editor' import { useCallback } from 'react' import { useUiEvents } from '../../context/events' import { useTranslation } from '../../hooks/useTranslation/useTranslation' import { TldrawUiButton } from '../primitives/Button/TldrawUiButton' import { TldrawUiButtonIcon } from '../primitives/Button/TldrawUiButtonIcon' import { TldrawUiMenuContextProvider } from '../primitives/menus/TldrawUiMenuContext' import { TldrawUiMenuGroup } from '../primitives/menus/TldrawUiMenuGroup' import { TldrawUiMenuItem } from '../primitives/menus/TldrawUiMenuItem' import { TldrawUiDropdownMenuContent, TldrawUiDropdownMenuRoot, TldrawUiDropdownMenuTrigger, } from '../primitives/TldrawUiDropdownMenu' import { onMovePage } from './edit-pages-shared' /** @public */ export interface PageItemSubmenuProps { index: number item: { id: string; name: string } listSize: number onRename?(): void } /** @public */ export const PageItemSubmenu = track(function PageItemSubmenu({ index, listSize, item, onRename, }: PageItemSubmenuProps) { const editor = useEditor() const msg = useTranslation() const trackEvent = useUiEvents() const onDuplicate = useCallback(() => { editor.markHistoryStoppingPoint('creating page') const newId = PageRecordType.createId() editor.duplicatePage(item.id as TLPageId, newId) trackEvent('duplicate-page', { source: 'page-menu' }) }, [editor, item, trackEvent]) const onMoveUp = useCallback(() => { onMovePage(editor, item.id as TLPageId, index, index - 1, trackEvent) }, [editor, item, index, trackEvent]) const onMoveDown = useCallback(() => { onMovePage(editor, item.id as TLPageId, index, index + 1, trackEvent) }, [editor, item, index, trackEvent]) const onDelete = useCallback(() => { editor.markHistoryStoppingPoint('deleting page') editor.deletePage(item.id as TLPageId) trackEvent('delete-page', { source: 'page-menu' }) }, [editor, item, trackEvent]) return ( {onRename && ( )} = editor.options.maxPages} /> {index > 0 && ( )} {index < listSize - 1 && ( )} {listSize > 1 && ( )} ) })