import { messageHandler } from '@estruyf/vscode/dist/client'; import { EyeIcon, GlobeEuropeAfricaIcon, TrashIcon, LanguageIcon, EllipsisHorizontalIcon, ArrowRightCircleIcon, ArrowPathIcon } from '@heroicons/react/24/outline'; import * as React from 'react'; import { CustomScript, I18nConfig } from '../../../models'; import { DashboardMessage } from '../../DashboardMessage'; import * as l10n from '@vscode/l10n'; import { LocalizationKey } from '../../../localization'; import { useRecoilState, useRecoilValue } from 'recoil'; import { SelectedItemActionAtom, SettingsSelector } from '../../state'; import { COMMAND_NAME, GeneralCommands } from '../../../constants'; import { PinIcon } from '../Icons/PinIcon'; import { PinnedItemsAtom } from '../../state/atom/PinnedItems'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '../../../components/shadcn/Dropdown'; import { RenameIcon } from '../../../components/icons/RenameIcon'; import { openOnWebsite } from '../../utils'; import { CustomActions } from './CustomActions'; import { TranslationMenu } from './TranslationMenu'; export interface IContentActionsProps { path: string; relPath: string; contentType: string; scripts: CustomScript[] | undefined; listView?: boolean; locale?: I18nConfig; isDefaultLocale?: boolean; translations?: { [locale: string]: { locale: I18nConfig; path: string; }; }; onOpen: () => void; } export const ContentActions: React.FunctionComponent = ({ path, relPath, contentType, scripts, onOpen, listView, isDefaultLocale, translations, locale }: React.PropsWithChildren) => { const [, setSelectedItemAction] = useRecoilState(SelectedItemActionAtom); const [pinnedItems, setPinnedItems] = useRecoilState(PinnedItemsAtom); const settings = useRecoilValue(SettingsSelector); const onView = (e: React.MouseEvent) => { e.stopPropagation(); onOpen(); }; const onDelete = React.useCallback((e: React.MouseEvent) => { e.stopPropagation(); setSelectedItemAction({ path, action: 'delete' }); }, [path]); const onMove = React.useCallback((e: React.MouseEvent) => { e.stopPropagation(); setSelectedItemAction({ path, action: 'move' }); }, [path]); const onRename = React.useCallback((e: React.MouseEvent) => { e.stopPropagation(); messageHandler.send(DashboardMessage.rename, path); }, [path]); const onSmartRename = React.useCallback((e: React.MouseEvent) => { e.stopPropagation(); messageHandler.send(DashboardMessage.smartRename, path); }, [path]); const onOpenWebsite = React.useCallback((e: React.MouseEvent) => { e.stopPropagation(); openOnWebsite(settings?.websiteUrl, path); }, [settings?.websiteUrl, path]); const pinItem = React.useCallback((e: React.MouseEvent) => { e.stopPropagation(); messageHandler.request(DashboardMessage.pinItem, path).then((result) => { setPinnedItems(result || []); }) }, [path]); const unpinItem = React.useCallback((e: React.MouseEvent) => { e.stopPropagation(); messageHandler.request(DashboardMessage.unpinItem, path).then((result) => { setPinnedItems(result || []); }) }, [path]); const runCommand = React.useCallback((commandId: string) => { messageHandler.send(GeneralCommands.toVSCode.runCommand, { command: commandId, args: path }) }, [path]); const isPinned = React.useMemo(() => { return pinnedItems.includes(relPath); }, [pinnedItems, relPath]); return ( <>
{l10n.t(LocalizationKey.dashboardContentsContentActionsActionMenuButtonTitle)} isPinned ? unpinItem(e) : pinItem(e)}> {isPinned ? l10n.t(LocalizationKey.commonUnpin) : l10n.t(LocalizationKey.commonPin)} {l10n.t(LocalizationKey.dashboardContentsContentActionsMenuItemView)} Move to folder {l10n.t(LocalizationKey.commonRename)} {l10n.t(LocalizationKey.dashboardContentsContentActionsMenuItemSmartRename)} { settings?.websiteUrl && ( {l10n.t(LocalizationKey.commonOpenOnWebsite)} ) } { locale && ( runCommand(COMMAND_NAME.i18n.create)}> {l10n.t(LocalizationKey.dashboardContentsContentActionsTranslationsCreate)} ) } {l10n.t(LocalizationKey.commonDelete)}
); };