Merge pull request #1255 from spotify/freben/simple-filters

chore(catalog): simplify the filter types a little
This commit is contained in:
Fredrik Adelöw
2020-06-11 16:13:45 +02:00
committed by GitHub
2 changed files with 17 additions and 23 deletions
@@ -37,7 +37,7 @@ import React, { FC, useCallback, useState } from 'react';
import { Link as RouterLink } from 'react-router-dom';
import { useAsync } from 'react-use';
import { catalogApiRef } from '../..';
import { defaultFilter, filterGroups, entityFilters } from '../../data/filters';
import { defaultFilter, entityFilters, filterGroups } from '../../data/filters';
import { findLocationForEntityMeta } from '../../data/utils';
import { useStarredEntities } from '../../hooks/useStarredEntites';
import {
@@ -70,17 +70,11 @@ export const CatalogPage: FC<{}> = () => {
defaultFilter,
);
const { value, error, loading } = useAsync(
() =>
catalogApi
.getEntities()
.then(entities =>
entities.filter(
entityFilters[selectedFilter.id]({ isStarredEntity }),
),
),
[selectedFilter.id, starredEntities.size],
);
const { value, error, loading } = useAsync(async () => {
const filter = entityFilters[selectedFilter.id];
const all = await catalogApi.getEntities();
return all.filter(e => filter(e, { isStarred: isStarredEntity(e) }));
}, [selectedFilter.id, starredEntities.size]);
const onFilterSelected = useCallback(
selected => setSelectedFilter(selected),
+11 -11
View File
@@ -14,15 +14,15 @@
* limitations under the License.
*/
import { Entity } from '@backstage/catalog-model';
import SettingsIcon from '@material-ui/icons/Settings';
import StarIcon from '@material-ui/icons/Star';
import { AllServicesCount } from '../components/CatalogFilter/AllServicesCount';
import {
CatalogFilterGroup,
CatalogFilterItem,
} from '../components/CatalogFilter/CatalogFilter';
import SettingsIcon from '@material-ui/icons/Settings';
import StarIcon from '@material-ui/icons/Star';
import { StarredCount } from '../components/CatalogFilter/StarredCount';
import { AllServicesCount } from '../components/CatalogFilter/AllServicesCount';
import { Entity } from '@backstage/catalog-model';
export enum EntityFilterType {
ALL = 'ALL',
@@ -61,16 +61,16 @@ export const filterGroups: CatalogFilterGroup[] = [
},
];
type EntityFilter = (entity: Entity) => boolean;
type EntityFilter = (entity: Entity, options: EntityFilterOptions) => boolean;
type EntityFilterOptions = {
isStarredEntity: EntityFilter;
isStarred: boolean;
};
export const entityFilters = {
[EntityFilterType.OWNED]: (): EntityFilter => () => false,
[EntityFilterType.ALL]: (): EntityFilter => () => true,
[EntityFilterType.STARRED]: ({ isStarredEntity }: EntityFilterOptions) =>
isStarredEntity,
export const entityFilters: Record<string, EntityFilter> = {
[EntityFilterType.OWNED]: () => false,
[EntityFilterType.ALL]: () => true,
[EntityFilterType.STARRED]: (_, { isStarred }) => isStarred,
};
export const defaultFilter: CatalogFilterItem = filterGroups[0].items[0];