diff --git a/web/app/components/plugins/plugin-page/context.tsx b/web/app/components/plugins/plugin-page/context.tsx index 8587012b79..cbe8f3bf93 100644 --- a/web/app/components/plugins/plugin-page/context.tsx +++ b/web/app/components/plugins/plugin-page/context.tsx @@ -27,6 +27,7 @@ export type PluginPageContextValue = { setCurrentPluginDetail: (plugin: PluginDetail) => void installedPluginList: PluginDetail[] mutateInstalledPluginList: () => void + isPluginListLoading: boolean filters: FilterState setFilters: (filter: FilterState) => void activeTab: string @@ -45,6 +46,7 @@ export const PluginPageContext = createContext({ setCurrentPluginDetail: () => {}, installedPluginList: [], mutateInstalledPluginList: () => {}, + isPluginListLoading: true, filters: { categories: [], tags: [], @@ -78,7 +80,7 @@ export const PluginPageContextProvider = ({ tags: [], searchQuery: '', }) - const { data, mutate: mutateInstalledPluginList } = useSWR({ url: '/workspaces/current/plugin/list' }, fetchInstalledPluginList) + const { data, mutate: mutateInstalledPluginList, isLoading: isPluginListLoading } = useSWR({ url: '/workspaces/current/plugin/list' }, fetchInstalledPluginList) const [currentPluginDetail, setCurrentPluginDetail] = useState() const { enable_marketplace } = useAppContextSelector(s => s.systemFeatures) @@ -106,6 +108,7 @@ export const PluginPageContextProvider = ({ setCurrentPluginDetail, installedPluginList: data?.plugins || [], mutateInstalledPluginList, + isPluginListLoading, filters, setFilters, activeTab, diff --git a/web/app/components/plugins/plugin-page/plugins-panel.tsx b/web/app/components/plugins/plugin-page/plugins-panel.tsx index 6b8d2475fd..ae108d5b65 100644 --- a/web/app/components/plugins/plugin-page/plugins-panel.tsx +++ b/web/app/components/plugins/plugin-page/plugins-panel.tsx @@ -8,10 +8,12 @@ import PluginDetailPanel from '@/app/components/plugins/plugin-detail-panel' import { usePluginPageContext } from './context' import { useDebounceFn } from 'ahooks' import Empty from './empty' +import Loading from '../../base/loading' const PluginsPanel = () => { const [filters, setFilters] = usePluginPageContext(v => [v.filters, v.setFilters]) as [FilterState, (filter: FilterState) => void] const pluginList = usePluginPageContext(v => v.installedPluginList) as PluginDetail[] + const isPluginListLoading = usePluginPageContext(v => v.isPluginListLoading) const mutateInstalledPluginList = usePluginPageContext(v => v.mutateInstalledPluginList) const { run: handleFilterChange } = useDebounceFn((filters: FilterState) => { @@ -38,7 +40,7 @@ const PluginsPanel = () => { onFilterChange={handleFilterChange} /> - {filteredList.length > 0 ? ( + {isPluginListLoading ? : filteredList.length > 0 ? (