@findify/react-components
Version:
Findify react UI components
51 lines (47 loc) • 1.79 kB
JSX
/**
* @module components/search/MobileSorting
*/
import Button from 'components/Button';
import Text from 'components/Text';
import Icon from 'components/Icon';
import MapArray from 'components/common/MapArray';
import { is } from 'immutable';
import styles from 'components/search/MobileSorting/styles.css';
import useTranslations from 'helpers/useTranslations';
import useSortingLogic from 'helpers/useSortingLogic';
import { useCallback } from 'react';
const Item = ({ item, theme = styles, selected, onChange, }) => {
const onClick = useCallback((e) => {
e.preventDefault();
onChange(item);
}, []);
const isSelected = is(selected, item);
return (<Button onClick={onClick} disabled={isSelected} className={theme.item}>
<Text primary uppercase>
<Icon name={isSelected ? 'RadioFilled' : 'RadioEmpty'} title={isSelected ? 'Selected' : 'Not selected'}/>
{item.get('label')}
</Text>
</Button>);
};
export default ({ theme = styles, style, hideModal }) => {
const [items, selected, onChange] = useSortingLogic();
const translate = useTranslations();
return (<div className={theme.root} style={style}>
<div className={theme.header}>
<div className={theme.title}>
<Text primary uppercase>
{translate('actions.sorting')}
</Text>
</div>
<Button onClick={hideModal}>
<Icon name="ArrowBack" title={translate('actions.back')}/>
</Button>
</div>
<div className={theme.body}>
<MapArray onChange={onChange} theme={theme} selected={selected} array={items} factory={Item}/>
</div>
<Button className={theme.footer} onClick={hideModal}>
{translate('actions.seeResults')}
</Button>
</div>);
};