import * as React from 'react'; import { get, toPairs, flatten, identity } from 'lodash'; import * as Radium from 'radium'; interface SelectedFiltersProps { title?: (facet: string) => string; } @Radium class SelectedFilters extends React.Component { static contextTypes = { searchState: React.PropTypes.object, transition: React.PropTypes.func }; onClick(facet: string, value: string) { return () => { let selections: string[] = get(this.context.searchState.facets, facet, []); selections = selections.filter( (f) => f !== value ); const thisFacet = {}; thisFacet[facet] = selections; this.context.transition( { start: 0, facets: thisFacet } ); }; } render() { let lastType = ''; let title = this.props.title || identity; const facetSelections = flatten( toPairs(this.context.searchState.facets).map( ([facet, values]) => (values as string[]).map( (value) => [facet, value] ) ) ).map( ([facet, value], i) => { let display = lastType !== facet ? (title(facet) + ': ' + value) : value; lastType = facet; const iconStyle = { ':hover': { 'transform': 'scale(1.5)' } }; return (
{display}
); } ); return (
{facetSelections}
); } } export { SelectedFiltersProps, SelectedFilters };