From e0896864c2cb00750ee95f70168180323b008cd5 Mon Sep 17 00:00:00 2001 From: scarqin Date: Mon, 30 Dec 2024 17:00:09 +0800 Subject: [PATCH] feat: update list after edit modal --- .../core/src/pages/aiSetting/AIFlowChart.tsx | 11 +- .../src/pages/aiSetting/AIUnconfigure.tsx | 132 ++++++++---------- .../src/pages/aiSetting/AiSettingModal.tsx | 1 + .../aiSetting/components/ModelCardNode.tsx | 10 +- 4 files changed, 75 insertions(+), 79 deletions(-) diff --git a/frontend/packages/core/src/pages/aiSetting/AIFlowChart.tsx b/frontend/packages/core/src/pages/aiSetting/AIFlowChart.tsx index 92a0063d..6c824284 100644 --- a/frontend/packages/core/src/pages/aiSetting/AIFlowChart.tsx +++ b/frontend/packages/core/src/pages/aiSetting/AIFlowChart.tsx @@ -1,6 +1,7 @@ 'use client' import { BasicResponse } from '@common/const/const' +import { useGlobalContext } from '@common/contexts/GlobalStateContext' import { useFetch } from '@common/hooks/http' import { CoordinateExtent, @@ -20,7 +21,6 @@ import { KeyStatusNode } from './components/KeyStatusNode' import { ModelCardNode } from './components/ModelCardNode' import { ServiceCardNode } from './components/NodeComponents' import { LAYOUT } from './constants' -import { useAiSetting } from './contexts/AiSettingContext' import './styles.css' import { ModelData } from './types' @@ -67,7 +67,7 @@ const AIFlowChart = () => { const [nodes, setNodes, onNodesChange] = useNodesState([]) const [edges, setEdges, onEdgesChange] = useEdgesState([]) const { fetchData } = useFetch() - const { openConfigModal } = useAiSetting() + const { aiConfigFlushed } = useGlobalContext() useEffect(() => { fetchData('ai/providers/configured', { @@ -76,7 +76,7 @@ const AIFlowChart = () => { const mockApiResponse: ApiResponse = response as ApiResponse setModelData(mockApiResponse.data.providers) }) - }, []) + }, [aiConfigFlushed]) useEffect(() => { if (!modelData.length) return @@ -104,8 +104,7 @@ const AIFlowChart = () => { status: model.status, defaultLlm: model.default_llm, logo: model.logo, - id: model.id, - openModal: openConfigModal + id: model.id } })), ...modelData.map((model) => ({ @@ -220,7 +219,7 @@ const AIFlowChart = () => { ) return ( -
+
Promise - }) => { - return ( - -
- - {provider.name} -
- - {provider.configured ? $t('已配置') : $t('未配置')} - -
- } - className="shadow-[0_5px_10px_0_rgba(0,0,0,0.05)] rounded-[10px] overflow-visible h-[156px] m-0 flex flex-col " - classNames={{ header: 'border-b-[0px] p-[20px] px-[24px]', body: 'pt-0 flex-1' }} - > -
-
- {provider.configured && ( - <> - - {provider.defaultLlm} - - )} -
- - - -
- - ) +const CardBox = memo(({ provider }: { provider: AiSettingListItem }) => { + const { openConfigModal } = useAiSetting() + const { aiConfigFlushed, setAiConfigFlushed } = useGlobalContext() + + const handleOpenModal = async (provider: AiSettingListItem) => { + await openConfigModal(provider) + setAiConfigFlushed(!aiConfigFlushed) } -) -const ModelCardArea = ({ - modelList, - className, - openModal -}: { - modelList: AiSettingListItem[] - className?: string - openModal?: (provider: AiSettingListItem) => Promise -}) => { + + return ( + +
+ + {provider.name} +
+ + {provider.configured ? $t('已配置') : $t('未配置')} + +
+ } + className="shadow-[0_5px_10px_0_rgba(0,0,0,0.05)] rounded-[10px] overflow-visible h-[156px] m-0 flex flex-col " + classNames={{ header: 'border-b-[0px] p-[20px] px-[24px]', body: 'pt-0 flex-1' }} + > +
+
+ {provider.configured && ( + <> + + {provider.defaultLlm} + + )} +
+ + + +
+ + ) +}) +const ModelCardArea = ({ modelList, className }: { modelList: AiSettingListItem[]; className?: string }) => { return ( <> {modelList.length > 0 ? ( @@ -84,7 +77,7 @@ const ModelCardArea = ({ }} > {modelList.map((provider: AiSettingListItem) => ( - + ))} ) : ( @@ -97,8 +90,8 @@ const ModelCardArea = ({ const AIUnConfigure = () => { const [modelData, setModelData] = useState([]) const { fetchData } = useFetch() - const { openConfigModal } = useAiSetting() const [loading, setLoading] = useState(false) + const { aiConfigFlushed } = useGlobalContext() useEffect(() => { setLoading(true) @@ -123,23 +116,20 @@ const AIUnConfigure = () => { } }) .finally(() => setLoading(false)) - }, []) + }, [aiConfigFlushed]) return ( } - spinning={modelData.length === 0} + spinning={loading} > {modelData && modelData.length > 0 ? (
{modelData.filter((item) => !item.configured).length > 0 && ( <> - !item.configured) || []} - /> + !item.configured) || []} /> )}
diff --git a/frontend/packages/core/src/pages/aiSetting/AiSettingModal.tsx b/frontend/packages/core/src/pages/aiSetting/AiSettingModal.tsx index b9e8486c..74def9cf 100644 --- a/frontend/packages/core/src/pages/aiSetting/AiSettingModal.tsx +++ b/frontend/packages/core/src/pages/aiSetting/AiSettingModal.tsx @@ -80,6 +80,7 @@ const AiSettingModalContent = forwardRef { const { code, msg } = response diff --git a/frontend/packages/core/src/pages/aiSetting/components/ModelCardNode.tsx b/frontend/packages/core/src/pages/aiSetting/components/ModelCardNode.tsx index b32ce854..ca684709 100644 --- a/frontend/packages/core/src/pages/aiSetting/components/ModelCardNode.tsx +++ b/frontend/packages/core/src/pages/aiSetting/components/ModelCardNode.tsx @@ -1,7 +1,9 @@ +import { useGlobalContext } from '@common/contexts/GlobalStateContext' import { Icon } from '@iconify/react' import { Handle, Position } from '@xyflow/react' import { t } from 'i18next' import React from 'react' +import { useAiSetting } from '../contexts/AiSettingContext' import { AiSettingListItem, ModelStatus } from '../types' interface ModelCardData { @@ -14,11 +16,12 @@ interface ModelCardData { type ModelCardNodeData = ModelCardData & { id: string position: { x: number; y: number } - openModal?: (entity: AiSettingListItem) => Promise } export const ModelCardNode: React.FC<{ data: ModelCardNodeData }> = ({ data }) => { const { title, status, defaultLlm, logo } = data + const { openConfigModal } = useAiSetting() + const { aiConfigFlushed, setAiConfigFlushed } = useGlobalContext() return (
= ({ data }) = data.openModal?.({ id: data.id, defaultLlm: defaultLlm })} + onClick={() => { + openConfigModal({ id: data.id, defaultLlm: defaultLlm } as AiSettingListItem) + setAiConfigFlushed(!aiConfigFlushed) + }} />