From b7b2af33a5bac9963105bf92d2a3f000e044d4a5 Mon Sep 17 00:00:00 2001 From: hao-affirm <104030690+hao-affirm@users.noreply.github.com> Date: Wed, 18 Jan 2023 00:12:48 -0800 Subject: [PATCH] add data source search Signed-off-by: hao-affirm <104030690+hao-affirm@users.noreply.github.com> --- ui/src/pages/data-sources/Index.tsx | 52 ++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 5 deletions(-) diff --git a/ui/src/pages/data-sources/Index.tsx b/ui/src/pages/data-sources/Index.tsx index 81e3a967022..bbccea04ace 100644 --- a/ui/src/pages/data-sources/Index.tsx +++ b/ui/src/pages/data-sources/Index.tsx @@ -1,10 +1,10 @@ import React, { useContext } from "react"; import { - EuiPageHeader, - EuiPageContent, - EuiPageContentBody, - EuiLoadingSpinner, + EuiPageHeader, + EuiPageContent, + EuiPageContentBody, + EuiLoadingSpinner, EuiFlexGroup, EuiFlexItem, EuiTitle, EuiFieldSearch, EuiSpacer, } from "@elastic/eui"; import useLoadRegistry from "../../queries/useLoadRegistry"; @@ -13,6 +13,8 @@ import { useDocumentTitle } from "../../hooks/useDocumentTitle"; import RegistryPathContext from "../../contexts/RegistryPathContext"; import DataSourceIndexEmptyState from "./DataSourceIndexEmptyState"; import { DataSourceIcon32 } from "../../graphics/DataSourceIcon"; +import { useSearchQuery} from "../../hooks/useSearchInputWithTags"; +import { feast } from "../../protos"; const useLoadDatasources = () => { const registryUrl = useContext(RegistryPathContext); @@ -29,11 +31,32 @@ const useLoadDatasources = () => { }; }; +const filterFn = (data: feast.core.IDataSource[], searchTokens: string[]) => { + let filteredByTags = data; + + if (searchTokens.length) { + return filteredByTags.filter((entry) => { + return searchTokens.find((token) => { + return token.length >= 3 && entry.name && entry.name.indexOf(token) >= 0; + }); + }); + } + + return filteredByTags; +}; + const Index = () => { const { isLoading, isSuccess, isError, data } = useLoadDatasources(); useDocumentTitle(`Data Sources | Feast`); + const { searchString, searchTokens, setSearchString } = useSearchQuery(); + + const filterResult = data + ? filterFn(data, searchTokens) + : data; + + return ( { )} {isError &&

We encountered an error while loading.

} {isSuccess && !data && } - {isSuccess && data && } + {isSuccess && data && data.length > 0 && filterResult && ( + + + + +

Search

+
+ { + setSearchString(e.target.value); + }} + /> +
+
+ + +
+ )}