From f2490ecccd5334c2cd44898ede9bb890c7746816 Mon Sep 17 00:00:00 2001 From: Nate Kelley Date: Mon, 29 Sep 2025 15:48:53 -0600 Subject: [PATCH] Add more shortcut options --- .../BusterChatInput/BusterChatInputBase.tsx | 25 ++++++++++++++++++- .../MentionInputSuggestions.types.ts | 1 - .../MentionInputSuggestionsGroup.tsx | 9 ++++++- .../MentionInputSuggestionsItem.tsx | 15 ++++++++--- 4 files changed, 43 insertions(+), 7 deletions(-) diff --git a/apps/web/src/components/features/input/BusterChatInput/BusterChatInputBase.tsx b/apps/web/src/components/features/input/BusterChatInput/BusterChatInputBase.tsx index b1baa868a..c562b0a6e 100644 --- a/apps/web/src/components/features/input/BusterChatInput/BusterChatInputBase.tsx +++ b/apps/web/src/components/features/input/BusterChatInput/BusterChatInputBase.tsx @@ -2,8 +2,10 @@ import type { ListShortcutsResponse } from '@buster/server-shared/shortcuts'; import type { GetSuggestedPromptsResponse } from '@buster/server-shared/user'; import sampleSize from 'lodash/sampleSize'; import React, { useMemo, useRef, useState } from 'react'; +import { Plus } from '@/components/ui/icons'; import type { MentionSuggestionExtension } from '@/components/ui/inputs/MentionInput'; import type { + MentionInputSuggestionsDropdownItem, MentionInputSuggestionsProps, MentionInputSuggestionsRef, } from '@/components/ui/inputs/MentionInputSuggestions'; @@ -145,12 +147,33 @@ const useShortcuts = ( shortcuts: ListShortcutsResponse['shortcuts'] ): MentionInputSuggestionsProps['suggestionItems'] => { return useMemo(() => { - return shortcuts.map((shortcut) => { + const shortcutsItems = shortcuts.map((shortcut) => { return { type: 'item', value: shortcut.name, label: shortcut.name, + icon: '/', }; }); + + shortcutsItems.push({ + type: 'item', + value: 'createShortcut', + label: 'Create shortcut', + icon: , + onClick: () => { + console.log('createShortcut'); + }, + }); + + return [ + { + type: 'group', + label: 'Shortcuts', + suggestionItems: shortcutsItems, + addValueToInput: false, + closeOnSelect: true, + }, + ]; }, [shortcuts]); }; diff --git a/apps/web/src/components/ui/inputs/MentionInputSuggestions/MentionInputSuggestions.types.ts b/apps/web/src/components/ui/inputs/MentionInputSuggestions/MentionInputSuggestions.types.ts index ab818905e..dfd31074f 100644 --- a/apps/web/src/components/ui/inputs/MentionInputSuggestions/MentionInputSuggestions.types.ts +++ b/apps/web/src/components/ui/inputs/MentionInputSuggestions/MentionInputSuggestions.types.ts @@ -16,7 +16,6 @@ export type MentionInputSuggestionsDropdownItem = { value: T; inputValue?: string; //if this is undefined, the label will be used (string casted), must have addValueToInput set to true label: string | React.ReactNode; - shortcut?: string; icon?: React.ReactNode; onClick?: () => void; disabled?: boolean; diff --git a/apps/web/src/components/ui/inputs/MentionInputSuggestions/MentionInputSuggestionsGroup.tsx b/apps/web/src/components/ui/inputs/MentionInputSuggestions/MentionInputSuggestionsGroup.tsx index 6ae0eccd2..edf5f320a 100644 --- a/apps/web/src/components/ui/inputs/MentionInputSuggestions/MentionInputSuggestionsGroup.tsx +++ b/apps/web/src/components/ui/inputs/MentionInputSuggestions/MentionInputSuggestionsGroup.tsx @@ -1,7 +1,10 @@ import { Command } from 'cmdk'; import type React from 'react'; import { cn } from '@/lib/utils'; -import type { MentionInputSuggestionsDropdownGroup, MentionInputSuggestionsOnSelectParams } from './MentionInputSuggestions.types'; +import type { + MentionInputSuggestionsDropdownGroup, + MentionInputSuggestionsOnSelectParams, +} from './MentionInputSuggestions.types'; import { MentionInputSuggestionsItemsSelector } from './MentionInputSuggestionsItemSelector'; export type MentionInputSuggestionsGroupProps = MentionInputSuggestionsDropdownGroup & { @@ -9,6 +12,8 @@ export type MentionInputSuggestionsGroupProps = MentionInputSuggestionsDropdownG } & { className?: string; style?: React.CSSProperties; + hasResults: boolean; + setHasResults: (hasResults: boolean) => void; }; export const MentionInputSuggestionsGroup = ({ @@ -19,6 +24,7 @@ export const MentionInputSuggestionsGroup = ({ className, closeOnSelect, style, + ...rest }: MentionInputSuggestionsGroupProps) => { return ( ); diff --git a/apps/web/src/components/ui/inputs/MentionInputSuggestions/MentionInputSuggestionsItem.tsx b/apps/web/src/components/ui/inputs/MentionInputSuggestions/MentionInputSuggestionsItem.tsx index 1ef73aaaa..e32f81071 100644 --- a/apps/web/src/components/ui/inputs/MentionInputSuggestions/MentionInputSuggestionsItem.tsx +++ b/apps/web/src/components/ui/inputs/MentionInputSuggestions/MentionInputSuggestionsItem.tsx @@ -20,7 +20,6 @@ export const MentionInputSuggestionsItem = ({ value, inputValue, label, - shortcut, icon, onClick, disabled, @@ -31,16 +30,19 @@ export const MentionInputSuggestionsItem = ({ onSelect, hasResults, setHasResults, - ...props + className, + style, }: MentionInputSuggestionsItemProps) => { return ( { onSelect({ value, @@ -54,6 +56,11 @@ export const MentionInputSuggestionsItem = ({ }); }} > + {icon && ( + + {icon} + + )} {label} {!hasResults && }