2024-10-31 18:31:17 +08:00
|
|
|
import {
|
|
|
|
useCallback,
|
|
|
|
useState,
|
|
|
|
} from 'react'
|
2024-11-06 11:55:19 +08:00
|
|
|
import { useTranslation } from 'react-i18next'
|
2024-10-31 18:31:17 +08:00
|
|
|
import { useDebounceFn } from 'ahooks'
|
2024-11-08 18:21:39 +08:00
|
|
|
import type {
|
|
|
|
Plugin,
|
|
|
|
} from '../types'
|
2024-10-31 18:31:17 +08:00
|
|
|
import type {
|
|
|
|
CollectionsAndPluginsSearchParams,
|
|
|
|
MarketplaceCollection,
|
|
|
|
PluginsSearchParams,
|
|
|
|
} from './types'
|
|
|
|
import {
|
|
|
|
getMarketplaceCollectionsAndPlugins,
|
|
|
|
} from './utils'
|
2024-11-06 14:37:20 +08:00
|
|
|
import i18n from '@/i18n/i18next-config'
|
2024-11-08 18:21:39 +08:00
|
|
|
import { useMutationPluginsFromMarketplace } from '@/service/use-plugins'
|
2024-10-31 18:31:17 +08:00
|
|
|
|
|
|
|
export const useMarketplaceCollectionsAndPlugins = () => {
|
|
|
|
const [isLoading, setIsLoading] = useState(false)
|
|
|
|
const [marketplaceCollections, setMarketplaceCollections] = useState<MarketplaceCollection[]>()
|
|
|
|
const [marketplaceCollectionPluginsMap, setMarketplaceCollectionPluginsMap] = useState<Record<string, Plugin[]>>()
|
|
|
|
|
|
|
|
const queryMarketplaceCollectionsAndPlugins = useCallback(async (query?: CollectionsAndPluginsSearchParams) => {
|
|
|
|
setIsLoading(true)
|
|
|
|
const { marketplaceCollections, marketplaceCollectionPluginsMap } = await getMarketplaceCollectionsAndPlugins(query)
|
|
|
|
setIsLoading(false)
|
|
|
|
|
|
|
|
setMarketplaceCollections(marketplaceCollections)
|
|
|
|
setMarketplaceCollectionPluginsMap(marketplaceCollectionPluginsMap)
|
|
|
|
}, [])
|
|
|
|
|
|
|
|
return {
|
|
|
|
marketplaceCollections,
|
|
|
|
setMarketplaceCollections,
|
|
|
|
marketplaceCollectionPluginsMap,
|
|
|
|
setMarketplaceCollectionPluginsMap,
|
|
|
|
queryMarketplaceCollectionsAndPlugins,
|
|
|
|
isLoading,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export const useMarketplacePlugins = () => {
|
2024-11-08 18:21:39 +08:00
|
|
|
const {
|
|
|
|
data,
|
|
|
|
mutate,
|
|
|
|
reset,
|
|
|
|
isPending,
|
|
|
|
} = useMutationPluginsFromMarketplace()
|
2024-10-31 18:31:17 +08:00
|
|
|
|
2024-11-08 18:21:39 +08:00
|
|
|
const queryPlugins = useCallback((pluginsSearchParams: PluginsSearchParams) => {
|
|
|
|
mutate(pluginsSearchParams)
|
|
|
|
}, [mutate])
|
2024-10-31 18:31:17 +08:00
|
|
|
|
2024-11-08 18:21:39 +08:00
|
|
|
const { run: queryPluginsWithDebounced } = useDebounceFn((pluginsSearchParams) => {
|
|
|
|
mutate(pluginsSearchParams)
|
|
|
|
}, {
|
2024-10-31 18:31:17 +08:00
|
|
|
wait: 500,
|
|
|
|
})
|
|
|
|
|
|
|
|
return {
|
2024-11-08 18:21:39 +08:00
|
|
|
plugins: data?.data?.plugins,
|
|
|
|
resetPlugins: reset,
|
2024-10-31 18:31:17 +08:00
|
|
|
queryPlugins,
|
|
|
|
queryPluginsWithDebounced,
|
2024-11-08 18:21:39 +08:00
|
|
|
isLoading: isPending,
|
2024-10-31 18:31:17 +08:00
|
|
|
}
|
|
|
|
}
|
2024-11-06 11:55:19 +08:00
|
|
|
|
|
|
|
export const useMixedTranslation = (localeFromOuter?: string) => {
|
|
|
|
let t = useTranslation().t
|
|
|
|
|
|
|
|
if (localeFromOuter)
|
|
|
|
t = i18n.getFixedT(localeFromOuter)
|
|
|
|
|
|
|
|
return {
|
|
|
|
t,
|
|
|
|
}
|
|
|
|
}
|