import type { FC } from 'react' import { useEffect } from 'react' import { Command } from 'cmdk' import { useTranslation } from 'react-i18next' import type { ActionItem } from './actions/types' type Props = { actions: Record onCommandSelect: (commandKey: string) => void searchFilter?: string commandValue?: string onCommandValueChange?: (value: string) => void } const CommandSelector: FC = ({ actions, onCommandSelect, searchFilter, commandValue, onCommandValueChange }) => { const { t } = useTranslation() const filteredActions = Object.values(actions).filter((action) => { if (!searchFilter) return true const filterLower = searchFilter.toLowerCase() return action.shortcut.toLowerCase().includes(filterLower) }) useEffect(() => { if (filteredActions.length > 0 && onCommandValueChange) { const currentValueExists = filteredActions.some(action => action.shortcut === commandValue) if (!currentValueExists) onCommandValueChange(filteredActions[0].shortcut) } }, [searchFilter, filteredActions.length]) if (filteredActions.length === 0) { return (
{t('app.gotoAnything.noMatchingCommands')}
{t('app.gotoAnything.tryDifferentSearch')}
) } return (
{t('app.gotoAnything.selectSearchType')}
{filteredActions.map(action => ( onCommandSelect(action.shortcut)} > {action.shortcut} {(() => { const keyMap: Record = { '@app': 'app.gotoAnything.actions.searchApplicationsDesc', '@plugin': 'app.gotoAnything.actions.searchPluginsDesc', '@knowledge': 'app.gotoAnything.actions.searchKnowledgeBasesDesc', '@run': 'app.gotoAnything.actions.runDesc', '@node': 'app.gotoAnything.actions.searchWorkflowNodesDesc', } return t(keyMap[action.key]) })()} ))}
) } export default CommandSelector