diff --git a/packages/api/src/controllers/plugins.js b/packages/api/src/controllers/plugins.js index 1129d9857..e382c0f1d 100644 --- a/packages/api/src/controllers/plugins.js +++ b/packages/api/src/controllers/plugins.js @@ -41,11 +41,13 @@ module.exports = { // const { results } = json || {}; // return (results || []).map((x) => x.package); + // DOCS: https://github.com/npm/registry/blob/master/docs/REGISTRY-API.md#get-v1search const response = await fetch( - `https://www.npmjs.com/search/suggestions?q=dbgate-plugin ${encodeURIComponent(filter)}` + `http://registry.npmjs.com/-/v1/search?text=${encodeURIComponent(filter)}+keywords:dbgateplugin&size=25&from=0` ); const json = await response.json(); - return json || []; + const { objects } = json || {}; + return (objects || []).map((x) => x.package); }, info_meta: 'get', diff --git a/packages/web/src/widgets/PluginsWidget.js b/packages/web/src/widgets/PluginsWidget.js index 6479cfa51..2419257a9 100644 --- a/packages/web/src/widgets/PluginsWidget.js +++ b/packages/web/src/widgets/PluginsWidget.js @@ -1,4 +1,5 @@ import React from 'react'; +import _ from 'lodash'; import { SearchBoxWrapper, WidgetsInnerContainer } from './WidgetStyles'; import WidgetColumnBar, { WidgetColumnBarItem } from './WidgetColumnBar'; import { useInstalledPlugins } from '../utility/metadataLoaders'; @@ -18,15 +19,26 @@ function InstalledPluginsList() { function AvailablePluginsList() { const [filter, setFilter] = React.useState(''); + const [search, setSearch] = React.useState(''); const plugins = useFetch({ url: 'plugins/search', params: { - filter, + filter: search, }, defaultValue: [], }); + const setDebouncedFilter = React.useRef( + // @ts-ignore + _.debounce((value) => setSearch(value), 500) + ); + + React.useEffect(() => { + // @ts-ignore + setDebouncedFilter.current(filter); + }, [filter]); + return ( <>