feat: support search from marketplace list

pull/12372/head
Joel 2 years ago
parent ceae69b773
commit 99a9bf6d56

@ -80,6 +80,7 @@ export type PluginManifestInMarket = {
brief: Record<Locale, string> brief: Record<Locale, string>
introduction: string introduction: string
verified: boolean verified: boolean
install_count: number
} }
export type PluginDetail = { export type PluginDetail = {

@ -1,4 +1,5 @@
import { import {
useEffect,
useMemo, useMemo,
useRef, useRef,
useState, useState,
@ -14,9 +15,10 @@ import ViewTypeSelect, { ViewType } from './view-type-select'
import cn from '@/utils/classnames' import cn from '@/utils/classnames'
import { useGetLanguage } from '@/context/i18n' import { useGetLanguage } from '@/context/i18n'
import PluginList from '@/app/components/workflow/block-selector/market-place-plugin/list' import PluginList from '@/app/components/workflow/block-selector/market-place-plugin/list'
import { extensionDallE, modelGPT4, toolNotion } from '@/app/components/plugins/card/card-mock'
import ActionButton from '../../base/action-button' import ActionButton from '../../base/action-button'
import { RiAddLine } from '@remixicon/react' import { RiAddLine } from '@remixicon/react'
import { PluginType } from '../../plugins/types'
import { useMarketplacePlugins } from '../../plugins/marketplace/hooks'
type AllToolsProps = { type AllToolsProps = {
className?: string className?: string
@ -62,6 +64,21 @@ const AllTools = ({
}) })
}, [activeTab, buildInTools, customTools, workflowTools, searchText, language]) }, [activeTab, buildInTools, customTools, workflowTools, searchText, language])
const {
queryPluginsWithDebounced: fetchPlugins,
plugins: notInstalledPlugins,
} = useMarketplacePlugins()
useEffect(() => {
if (searchText) {
fetchPlugins({
query: searchText,
category: PluginType.tool,
})
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [searchText])
const pluginRef = useRef(null) const pluginRef = useRef(null)
const wrapElemRef = useRef<HTMLDivElement>(null) const wrapElemRef = useRef<HTMLDivElement>(null)
@ -112,7 +129,7 @@ const AllTools = ({
{/* Plugins from marketplace */} {/* Plugins from marketplace */}
<PluginList <PluginList
wrapElemRef={wrapElemRef} wrapElemRef={wrapElemRef}
list={[toolNotion, extensionDallE, modelGPT4] as any} ref={pluginRef} list={notInstalledPlugins as any} ref={pluginRef}
searchText={searchText} searchText={searchText}
/> />
</div> </div>

@ -26,6 +26,8 @@ const Item: FC<Props> = ({
const { t } = useTranslation() const { t } = useTranslation()
const [open, setOpen] = React.useState(false) const [open, setOpen] = React.useState(false)
const { locale } = useContext(I18n) const { locale } = useContext(I18n)
const getLocalizedText = (obj: Record<string, string> | undefined) =>
obj?.[locale] || obj?.['en-US'] || obj?.en_US || ''
return ( return (
<div className='group/plugin flex rounded-lg py-1 pr-1 pl-3 hover:bg-state-base-hover'> <div className='group/plugin flex rounded-lg py-1 pr-1 pl-3 hover:bg-state-base-hover'>
@ -35,8 +37,8 @@ const Item: FC<Props> = ({
/> />
<div className='ml-2 w-0 grow flex'> <div className='ml-2 w-0 grow flex'>
<div className='w-0 grow'> <div className='w-0 grow'>
<div className='h-4 leading-4 text-text-primary system-sm-medium truncate '>{payload.label[locale]}</div> <div className='h-4 leading-4 text-text-primary system-sm-medium truncate '>{getLocalizedText(payload.label)}</div>
<div className='h-5 leading-5 text-text-tertiary system-xs-regular truncate'>{payload.brief[locale]}</div> <div className='h-5 leading-5 text-text-tertiary system-xs-regular truncate'>{getLocalizedText(payload.brief)}</div>
<div className='flex text-text-tertiary system-xs-regular space-x-1'> <div className='flex text-text-tertiary system-xs-regular space-x-1'>
<div>{payload.org}</div> <div>{payload.org}</div>
<div>·</div> <div>·</div>

Loading…
Cancel
Save