From 0db082f6d0d3092ea694216b0100b84454fbc416 Mon Sep 17 00:00:00 2001 From: lyzno1 Date: Wed, 29 Oct 2025 15:10:45 +0800 Subject: [PATCH] feat(workflow): persist RAG recommendation panel collapse state --- .../rag-tool-recommendations/index.tsx | 121 +++++++++++------- 1 file changed, 77 insertions(+), 44 deletions(-) diff --git a/web/app/components/workflow/block-selector/rag-tool-recommendations/index.tsx b/web/app/components/workflow/block-selector/rag-tool-recommendations/index.tsx index eecd874335..240c0814a1 100644 --- a/web/app/components/workflow/block-selector/rag-tool-recommendations/index.tsx +++ b/web/app/components/workflow/block-selector/rag-tool-recommendations/index.tsx @@ -1,5 +1,6 @@ +'use client' import type { Dispatch, SetStateAction } from 'react' -import React, { useCallback, useMemo } from 'react' +import React, { useCallback, useEffect, useMemo, useState } from 'react' import { Trans, useTranslation } from 'react-i18next' import type { OnSelectBlock } from '@/app/components/workflow/types' import type { ViewType } from '@/app/components/workflow/block-selector/view-type-select' @@ -10,6 +11,7 @@ import { getMarketplaceUrl } from '@/utils/var' import { useRAGRecommendedPlugins } from '@/service/use-tools' import List from './list' import { getFormattedPlugin } from '@/app/components/plugins/marketplace/utils' +import { ArrowDownRoundFill } from '@/app/components/base/icons/src/vender/solid/arrows' type RAGToolRecommendationsProps = { viewType: ViewType @@ -17,12 +19,34 @@ type RAGToolRecommendationsProps = { onTagsChange: Dispatch> } +const STORAGE_KEY = 'workflow_rag_recommendations_collapsed' + const RAGToolRecommendations = ({ viewType, onSelect, onTagsChange, }: RAGToolRecommendationsProps) => { const { t } = useTranslation() + const [isCollapsed, setIsCollapsed] = useState(() => { + if (typeof window === 'undefined') + return false + const stored = window.localStorage.getItem(STORAGE_KEY) + return stored === 'true' + }) + + useEffect(() => { + if (typeof window === 'undefined') + return + const stored = window.localStorage.getItem(STORAGE_KEY) + if (stored !== null) + setIsCollapsed(stored === 'true') + }, []) + + useEffect(() => { + if (typeof window === 'undefined') + return + window.localStorage.setItem(STORAGE_KEY, String(isCollapsed)) + }, [isCollapsed]) const { data: ragRecommendedPlugins, @@ -52,51 +76,60 @@ const RAGToolRecommendations = ({ return (
-
- {t('pipeline.ragToolSuggestions.title')} -
- {/* For first time loading, show loading */} - {isLoadingRAGRecommendedPlugins && ( -
- -
- )} - {!isFetchingRAGRecommendedPlugins && recommendedPlugins.length === 0 && unInstalledPlugins.length === 0 && ( -

- - ), - }} - /> -

- )} - {(recommendedPlugins.length > 0 || unInstalledPlugins.length > 0) && ( + + {!isCollapsed && ( <> - -
-
- + {/* For first time loading, show loading */} + {isLoadingRAGRecommendedPlugins && ( +
+
-
- {t('common.operation.more')} -
-
+ )} + {!isFetchingRAGRecommendedPlugins && recommendedPlugins.length === 0 && unInstalledPlugins.length === 0 && ( +

+ + ), + }} + /> +

+ )} + {(recommendedPlugins.length > 0 || unInstalledPlugins.length > 0) && ( + <> + +
+
+ +
+
+ {t('common.operation.more')} +
+
+ + )} )}