@findify/react-components
Version:
Findify react UI components
39 lines (37 loc) • 1.75 kB
JSX
/**
* @module components/CategoryFacet
*/
import MapArray from 'components/common/MapArray';
import Item from 'components/CategoryFacet/Item';
import Button from 'components/Button';
import Text from 'components/Text';
import Icon from 'components/Icon';
import useTranslations from 'helpers/useTranslations';
import styles from 'components/CategoryFacet/styles.css';
import { useMemo, useState } from 'react';
export default ({ theme = styles, config, facet, hidden, isMobile, }) => {
const translate = useTranslations();
const [isExpanded, setExpanded] = useState(false);
const [items, total] = useMemo(() => {
const items = facet.get('values');
const total = items.reduce((acc, v) => acc + v.get('count'), 0);
return [items, total];
}, [facet]);
return (<div className={theme.root} id={`facet-${facet.get('name')}`} role="region" hidden={hidden}>
<Button className={theme.item} onClick={facet.resetValues}>
<Text lowercase primary bold={!items.find((i) => i.get('selected'))} className={theme.content}>
{translate('facets.allCategories')}
</Text>
<Text secondary uppercase>
({total})
</Text>
</Button>
<MapArray config={config} array={items} factory={Item} limit={!isExpanded && config.get('maxItemsCount', 6)} isMobile={isMobile}/>
<Button className={theme.expand} onClick={() => setExpanded((exp) => !exp)} display-if={items.size > config.get('maxItemsCount', 6)}>
<Text primary uppercase>
<Icon name={isExpanded ? 'Minus' : 'Plus'} title={isExpanded ? 'Expanded' : 'Collapsed'}/>
{isExpanded ? translate('facets.less') : translate('facets.more')}
</Text>
</Button>
</div>);
};