fix: marketplace list

pull/12372/head
StyleZhang 2 years ago
parent 3e314843db
commit aa88028564

@ -41,6 +41,7 @@ export type MarketplaceContextValue = {
setMarketplaceCollectionsFromClient: (collections: MarketplaceCollection[]) => void setMarketplaceCollectionsFromClient: (collections: MarketplaceCollection[]) => void
marketplaceCollectionPluginsMapFromClient?: Record<string, Plugin[]> marketplaceCollectionPluginsMapFromClient?: Record<string, Plugin[]>
setMarketplaceCollectionPluginsMapFromClient: (map: Record<string, Plugin[]>) => void setMarketplaceCollectionPluginsMapFromClient: (map: Record<string, Plugin[]>) => void
isLoading: boolean
} }
export const MarketplaceContext = createContext<MarketplaceContextValue>({ export const MarketplaceContext = createContext<MarketplaceContextValue>({
@ -60,6 +61,7 @@ export const MarketplaceContext = createContext<MarketplaceContextValue>({
setMarketplaceCollectionsFromClient: () => {}, setMarketplaceCollectionsFromClient: () => {},
marketplaceCollectionPluginsMapFromClient: {}, marketplaceCollectionPluginsMapFromClient: {},
setMarketplaceCollectionPluginsMapFromClient: () => {}, setMarketplaceCollectionPluginsMapFromClient: () => {},
isLoading: false,
}) })
type MarketplaceContextProviderProps = { type MarketplaceContextProviderProps = {
@ -88,12 +90,14 @@ export const MarketplaceContextProvider = ({
marketplaceCollectionPluginsMap: marketplaceCollectionPluginsMapFromClient, marketplaceCollectionPluginsMap: marketplaceCollectionPluginsMapFromClient,
setMarketplaceCollectionPluginsMap: setMarketplaceCollectionPluginsMapFromClient, setMarketplaceCollectionPluginsMap: setMarketplaceCollectionPluginsMapFromClient,
queryMarketplaceCollectionsAndPlugins, queryMarketplaceCollectionsAndPlugins,
isLoading,
} = useMarketplaceCollectionsAndPlugins() } = useMarketplaceCollectionsAndPlugins()
const { const {
plugins, plugins,
resetPlugins, resetPlugins,
queryPlugins, queryPlugins,
queryPluginsWithDebounced, queryPluginsWithDebounced,
isLoading: isPluginsLoading,
} = useMarketplacePlugins() } = useMarketplacePlugins()
const handleSearchPluginTextChange = useCallback((text: string) => { const handleSearchPluginTextChange = useCallback((text: string) => {
@ -194,6 +198,7 @@ export const MarketplaceContextProvider = ({
setMarketplaceCollectionsFromClient, setMarketplaceCollectionsFromClient,
marketplaceCollectionPluginsMapFromClient, marketplaceCollectionPluginsMapFromClient,
setMarketplaceCollectionPluginsMapFromClient, setMarketplaceCollectionPluginsMapFromClient,
isLoading: isLoading || isPluginsLoading,
}} }}
> >
{children} {children}

@ -4,6 +4,7 @@ import type { MarketplaceCollection } from '../types'
import { useMarketplaceContext } from '../context' import { useMarketplaceContext } from '../context'
import List from './index' import List from './index'
import SortDropdown from '../sort-dropdown' import SortDropdown from '../sort-dropdown'
import Loading from '@/app/components/base/loading'
type ListWrapperProps = { type ListWrapperProps = {
marketplaceCollections: MarketplaceCollection[] marketplaceCollections: MarketplaceCollection[]
@ -20,9 +21,10 @@ const ListWrapper = ({
const plugins = useMarketplaceContext(v => v.plugins) const plugins = useMarketplaceContext(v => v.plugins)
const marketplaceCollectionsFromClient = useMarketplaceContext(v => v.marketplaceCollectionsFromClient) const marketplaceCollectionsFromClient = useMarketplaceContext(v => v.marketplaceCollectionsFromClient)
const marketplaceCollectionPluginsMapFromClient = useMarketplaceContext(v => v.marketplaceCollectionPluginsMapFromClient) const marketplaceCollectionPluginsMapFromClient = useMarketplaceContext(v => v.marketplaceCollectionPluginsMapFromClient)
const isLoading = useMarketplaceContext(v => v.isLoading)
return ( return (
<div className='flex flex-col grow px-12 py-2 bg-background-default-subtle'> <div className='relative flex flex-col grow px-12 py-2 bg-background-default-subtle'>
{ {
plugins && ( plugins && (
<div className='flex items-center mb-4 pt-3'> <div className='flex items-center mb-4 pt-3'>
@ -32,13 +34,24 @@ const ListWrapper = ({
</div> </div>
) )
} }
<List {
marketplaceCollections={marketplaceCollectionsFromClient || marketplaceCollections} isLoading && (
marketplaceCollectionPluginsMap={marketplaceCollectionPluginsMapFromClient || marketplaceCollectionPluginsMap} <div className='absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2'>
plugins={plugins} <Loading />
showInstallButton={showInstallButton} </div>
locale={locale} )
/> }
{
!isLoading && (
<List
marketplaceCollections={marketplaceCollectionsFromClient || marketplaceCollections}
marketplaceCollectionPluginsMap={marketplaceCollectionPluginsMapFromClient || marketplaceCollectionPluginsMap}
plugins={plugins}
showInstallButton={showInstallButton}
locale={locale}
/>
)
}
</div> </div>
) )
} }

@ -5,6 +5,7 @@ import {
useMarketplaceCollectionsAndPlugins, useMarketplaceCollectionsAndPlugins,
useMarketplacePlugins, useMarketplacePlugins,
} from '@/app/components/plugins/marketplace/hooks' } from '@/app/components/plugins/marketplace/hooks'
import { PluginType } from '@/app/components/plugins/types'
export const useMarketplace = (searchPluginText: string, filterPluginTags: string[]) => { export const useMarketplace = (searchPluginText: string, filterPluginTags: string[]) => {
const { const {
@ -25,18 +26,20 @@ export const useMarketplace = (searchPluginText: string, filterPluginTags: strin
if (searchPluginText || filterPluginTags.length) { if (searchPluginText || filterPluginTags.length) {
if (searchPluginText) { if (searchPluginText) {
queryPluginsWithDebounced({ queryPluginsWithDebounced({
category: PluginType.tool,
query: searchPluginText, query: searchPluginText,
tags: filterPluginTags, tags: filterPluginTags,
}) })
return return
} }
queryPlugins({ queryPlugins({
category: PluginType.tool,
query: searchPluginText, query: searchPluginText,
tags: filterPluginTags, tags: filterPluginTags,
}) })
} }
else { else {
queryMarketplaceCollectionsAndPlugins() queryMarketplaceCollectionsAndPlugins({ category: PluginType.tool })
resetPlugins() resetPlugins()
} }
}, [searchPluginText, filterPluginTags, queryPlugins, queryMarketplaceCollectionsAndPlugins, queryPluginsWithDebounced, resetPlugins]) }, [searchPluginText, filterPluginTags, queryPlugins, queryMarketplaceCollectionsAndPlugins, queryPluginsWithDebounced, resetPlugins])

Loading…
Cancel
Save