Set up an unused method to illustrate type usage / communication between search frontend and backend

Signed-off-by: Eric Peterson <ericpeterson@spotify.com>
This commit is contained in:
Eric Peterson
2021-02-15 14:03:21 +01:00
parent 04b492d404
commit e0854f10d5
5 changed files with 24 additions and 18 deletions
+18 -1
View File
@@ -15,7 +15,10 @@
*/
import { Entity, ENTITY_DEFAULT_NAMESPACE } from '@backstage/catalog-model';
import { DiscoveryApi } from '@backstage/core';
import { CatalogApi } from '@backstage/plugin-catalog-react';
import { SearchQuery, SearchResultSet } from '@backstage/plugin-search-backend';
import qs from 'qs';
export type Result = {
name: string;
@@ -30,9 +33,11 @@ export type SearchResults = Array<Result>;
class SearchApi {
private catalogApi: CatalogApi;
private discoveryApi: DiscoveryApi;
constructor(catalogApi: CatalogApi) {
constructor(catalogApi: CatalogApi, discoveryApi: DiscoveryApi) {
this.catalogApi = catalogApi;
this.discoveryApi = discoveryApi;
}
private async entities() {
@@ -56,6 +61,18 @@ class SearchApi {
public getSearchResult(): Promise<SearchResults> {
return this.entities();
}
// @todo Productionalize as we implement search milestones.
public async _alphaPerformSearch(
query: SearchQuery,
): Promise<SearchResultSet> {
const queryString = qs.stringify(query);
const url = `${await this.discoveryApi.getBaseUrl(
'search/query',
)}?${queryString}`;
const response = await fetch(url);
return response.json();
}
}
export default SearchApi;
@@ -14,6 +14,7 @@
* limitations under the License.
*/
import {
discoveryApiRef,
EmptyState,
Link,
Progress,
@@ -117,6 +118,7 @@ const TableHeader = ({
export const SearchResult = ({ searchQuery }: SearchResultProps) => {
const catalogApi = useApi(catalogApiRef);
const discoveryApi = useApi(discoveryApiRef);
const [showFilters, toggleFilters] = useState(false);
const [selectedFilters, setSelectedFilters] = useState<FiltersState>({
@@ -126,7 +128,7 @@ export const SearchResult = ({ searchQuery }: SearchResultProps) => {
const [filteredResults, setFilteredResults] = useState<SearchResults>([]);
const searchApi = new SearchApi(catalogApi);
const searchApi = new SearchApi(catalogApi, discoveryApi);
const { loading, error, value: results } = useAsync(() => {
return searchApi.getSearchResult();