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:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user