Files
weave-scope/client/app/scripts/selectors/search.js

39 lines
1.1 KiB
JavaScript

import { createSelector } from 'reselect';
import { createMapSelector } from 'reselect-map';
import { Map as makeMap } from 'immutable';
import { parseQuery, searchNode, searchTopology, getSearchableFields } from '../utils/search-utils';
const parsedSearchQuerySelector = createSelector(
[
state => state.get('searchQuery')
],
searchQuery => parseQuery(searchQuery)
);
export const searchNodeMatchesSelector = createMapSelector(
[
state => state.get('nodes'),
parsedSearchQuerySelector,
],
(node, parsed) => (parsed ? searchNode(node, parsed) : makeMap())
);
export const searchMatchCountByTopologySelector = createMapSelector(
[
state => state.get('nodesByTopology'),
parsedSearchQuerySelector,
],
// TODO: Bring map selectors one level deeper here so that `searchTopology` is
// not executed against all the topology nodes when the nodes delta is small.
(nodes, parsed) => (parsed ? searchTopology(nodes, parsed).size : 0)
);
export const searchableFieldsSelector = createSelector(
[
state => state.get('nodes'),
],
getSearchableFields
);