From 69c0f3f2ad8cbfb4ba2ad8ffbf00570b888b0bea Mon Sep 17 00:00:00 2001 From: Yi Date: Sat, 28 Sep 2024 14:13:02 +0800 Subject: [PATCH] fix: default selection issue & trigger retrieval setting unintentionally --- web/app/(commonLayout)/datasets/store.ts | 11 +++++++++++ .../create/ExternalApiSelect.tsx | 15 ++++++++++----- .../create/ExternalApiSelection.tsx | 19 ++++++++++++++++--- .../components/dataset-item.tsx | 12 ++++++++++-- .../nodes/knowledge-retrieval/use-config.ts | 3 ++- 5 files changed, 49 insertions(+), 11 deletions(-) create mode 100644 web/app/(commonLayout)/datasets/store.ts diff --git a/web/app/(commonLayout)/datasets/store.ts b/web/app/(commonLayout)/datasets/store.ts new file mode 100644 index 0000000000..40b7b15594 --- /dev/null +++ b/web/app/(commonLayout)/datasets/store.ts @@ -0,0 +1,11 @@ +import { create } from 'zustand' + +type DatasetStore = { + showExternalApiPanel: boolean + setShowExternalApiPanel: (show: boolean) => void +} + +export const useDatasetStore = create(set => ({ + showExternalApiPanel: false, + setShowExternalApiPanel: show => set({ showExternalApiPanel: show }), +})) diff --git a/web/app/components/datasets/external-knowledge-base/create/ExternalApiSelect.tsx b/web/app/components/datasets/external-knowledge-base/create/ExternalApiSelect.tsx index faddb2593b..3c4733933e 100644 --- a/web/app/components/datasets/external-knowledge-base/create/ExternalApiSelect.tsx +++ b/web/app/components/datasets/external-knowledge-base/create/ExternalApiSelect.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react' +import React, { useEffect, useState } from 'react' import { RiAddLine, RiArrowDownSLine, @@ -15,18 +15,23 @@ type ApiItem = { type ExternalApiSelectProps = { items: ApiItem[] - defaultValue?: string + value?: string onSelect: (item: ApiItem) => void } -const ExternalApiSelect: React.FC = ({ items, defaultValue, onSelect }) => { +const ExternalApiSelect: React.FC = ({ items, value, onSelect }) => { const { t } = useTranslation() const [isOpen, setIsOpen] = useState(false) const router = useRouter() const [selectedItem, setSelectedItem] = useState( - items.find(item => item.value === defaultValue) || null, + items.find(item => item.value === value) || null, ) + useEffect(() => { + const newSelectedItem = items.find(item => item.value === value) || null + setSelectedItem(newSelectedItem) + }, [value, items]) + const handleAddNewAPI = () => { router.push('/datasets?openExternalApiPanel=true') } @@ -40,7 +45,7 @@ const ExternalApiSelect: React.FC = ({ items, defaultVal return (
setIsOpen(!isOpen)} > diff --git a/web/app/components/datasets/external-knowledge-base/create/ExternalApiSelection.tsx b/web/app/components/datasets/external-knowledge-base/create/ExternalApiSelection.tsx index 9f5b587c6b..d3a5325d38 100644 --- a/web/app/components/datasets/external-knowledge-base/create/ExternalApiSelection.tsx +++ b/web/app/components/datasets/external-knowledge-base/create/ExternalApiSelection.tsx @@ -1,6 +1,6 @@ 'use client' -import React, { useEffect } from 'react' +import React, { useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import { RiAddLine } from '@remixicon/react' import { useRouter } from 'next/navigation' @@ -19,6 +19,7 @@ const ExternalApiSelection: React.FC = ({ external_kn const { t } = useTranslation() const router = useRouter() const { externalKnowledgeApiList } = useExternalKnowledgeApi() + const [selectedApiId, setSelectedApiId] = useState(external_knowledge_api_id) const apiItems = externalKnowledgeApiList.map(api => ({ value: api.id, @@ -26,6 +27,15 @@ const ExternalApiSelection: React.FC = ({ external_kn url: api.settings.endpoint, })) + useEffect(() => { + if (apiItems.length > 0) { + const newSelectedId = external_knowledge_api_id || apiItems[0].value + setSelectedApiId(newSelectedId) + if (newSelectedId !== external_knowledge_api_id) + onChange({ external_knowledge_api_id: newSelectedId, external_knowledge_id }) + } + }, [apiItems, external_knowledge_api_id, external_knowledge_id, onChange]) + const handleAddNewAPI = () => { router.push('/datasets?openExternalApiPanel=true') } @@ -44,8 +54,11 @@ const ExternalApiSelection: React.FC = ({ external_kn {apiItems.length > 0 ? onChange({ external_knowledge_api_id: e.value as string, external_knowledge_id })} + value={selectedApiId} + onSelect={(e) => { + setSelectedApiId(e.value) + onChange({ external_knowledge_api_id: e.value, external_knowledge_id }) + }} /> :