import React, {createElement, ReactElement} from 'react'; import { Menu, MenuItem, MenuTrigger, } from '@common/ui/navigation/menu/menu-trigger'; import {Trans} from '@common/i18n/trans'; import {DriveEntry} from '../files/drive-entry'; import {useEntryActions} from './use-entry-actions'; import {EntryAction} from './entry-action'; import {DrivePage, RootFolderPage, TrashPage} from '../drive-page/drive-page'; import {useDrivePageActions} from './use-drive-page-actions'; interface Props { children: ReactElement; entries?: DriveEntry[]; page?: DrivePage; } export function EntryActionMenuTrigger({children, entries, page}: Props) { if (page?.id === RootFolderPage.id) { return {children}; } if (page === TrashPage) { return {children}; } if (page?.folder) { return {children}; } if (entries?.length) { return {children}; } return null; } interface EntriesContextMenuProps extends Omit { entries: DriveEntry[]; } function EntriesMenu({entries, children}: EntriesContextMenuProps) { const actions = useEntryActions(entries); return {children}; } interface PageContextMenuProps extends Omit { page: DrivePage; } function PageMenu({page, children}: PageContextMenuProps) { const actions = useDrivePageActions(page); return {children}; } interface BaseMenuProps { actions: EntryAction[]; children: ReactElement; } function BaseMenu({actions, children}: BaseMenuProps) { return ( {children} {actions.map(action => { return ( { action.execute(); }} key={action.key} value={action.key} startIcon={createElement(action.icon)} > ); })} ); }