From 11b2cd88b7444e8c65d8100a7af6ff17b5086d84 Mon Sep 17 00:00:00 2001 From: kangfenmao Date: Wed, 11 Sep 2024 16:14:06 +0800 Subject: [PATCH] feat: Added configurable Droppable component props to DragableList, updated translations and implemented search functionality. - Added support for configurable Droppable component props to the DragableList component. - Updated translations for multiple components and languages. - Implemented search functionality in the Assistants page. --- .../src/components/DragableList/index.tsx | 17 +++++- src/renderer/src/i18n/index.ts | 8 ++- src/renderer/src/pages/home/Assistants.tsx | 58 +++++++++++++++---- 3 files changed, 66 insertions(+), 17 deletions(-) diff --git a/src/renderer/src/components/DragableList/index.tsx b/src/renderer/src/components/DragableList/index.tsx index 41c613fb..93501101 100644 --- a/src/renderer/src/components/DragableList/index.tsx +++ b/src/renderer/src/components/DragableList/index.tsx @@ -2,6 +2,7 @@ import { DragDropContext, Draggable, Droppable, + DroppableProps, DropResult, OnDragEndResponder, OnDragStartResponder, @@ -18,9 +19,19 @@ interface Props { onUpdate: (list: T[]) => void onDragStart?: OnDragStartResponder onDragEnd?: OnDragEndResponder + droppableProps?: Partial } -const DragableList: FC> = ({ children, list, style, listStyle, onDragStart, onUpdate, onDragEnd }) => { +const DragableList: FC> = ({ + children, + list, + style, + listStyle, + droppableProps, + onDragStart, + onUpdate, + onDragEnd +}) => { const _onDragEnd = (result: DropResult, provided: ResponderProvided) => { onDragEnd?.(result, provided) if (result.destination) { @@ -33,11 +44,11 @@ const DragableList: FC> = ({ children, list, style, listStyle, onDrag return ( - + {(provided) => (
{list.map((item, index) => ( - + {(provided) => (
= ({ activeAssistant, setActiveAssistant, onCreateAssistant }) => { const { assistants, removeAssistant, addAssistant, updateAssistants } = useAssistants() const generating = useAppSelector((state) => state.runtime.generating) + const [search, setSearch] = useState('') const { updateAssistant, removeAllTopics } = useAssistant(activeAssistant.id) const { t } = useTranslation() @@ -104,9 +105,35 @@ const Assistants: FC = ({ activeAssistant, setActiveAssistant, onCreateAs [generating, setActiveAssistant, t] ) + const list = assistants.filter((assistant) => assistant.name?.toLowerCase().includes(search.toLowerCase().trim())) + + const onSearch = (e: React.KeyboardEvent) => { + if (e.key === 'Enter') { + if (list.length === 1) { + onSwitchAssistant(list[0]) + setSearch('') + } + } + } + return ( - + {assistants.length >= 10 && ( + + } + suffix={⌘+K} + value={search} + onChange={(e) => setSearch(e.target.value)} + style={{ borderRadius: 4 }} + onKeyDown={onSearch} + allowClear + /> + + )} + {(assistant) => { const isCurrent = assistant.id === activeAssistant?.id return ( @@ -187,17 +214,12 @@ const ArrowRightButton = styled.div` min-height: 22px; border-radius: 4px; position: absolute; + background-color: var(--color-background); right: 9px; top: 6px; .anticon { font-size: 14px; } - &:hover { - background-color: var(--color-background); - } - &.active { - background-color: var(--color-background); - } ` const TopicCount = styled.div` @@ -215,4 +237,18 @@ const TopicCount = styled.div` align-items: center; ` +const SearchContainer = styled.div` + margin: 0 10px; + margin-bottom: 10px; +` + +const CommandKey = styled.div` + color: var(--color-text-3); + font-size: 11px; + padding: 2px 5px; + border-radius: 4px; + background-color: var(--color-background-mute); + margin-right: -4px; +` + export default Assistants