UNPKG

strapi-plugin-content-manager

Version:

A powerful UI to easily manage your data.

102 lines (94 loc) 2.82 kB
import React, { memo } from 'react'; import { get, isEmpty } from 'lodash'; import PropTypes from 'prop-types'; import { CircleButton, getFilterType } from 'strapi-helper-plugin'; import { Select } from '@buffetjs/core'; import { InputWrapper, Wrapper } from './components'; import Input from './Input'; import Option from './Option'; const styles = { select: { minWidth: '170px', maxWidth: '200px', }, selectMiddle: { minWidth: '130px', maxWidth: '200px', marginLeft: '10px', marginRight: '10px', }, }; function FilterPickerOption({ allowedAttributes, modifiedData, index, onChange, onClickAddFilter, onRemoveFilter, value, showAddButton, type, }) { const filtersOptions = getFilterType(type); const currentFilterName = get(modifiedData, [index, 'name'], ''); const currentFilterData = allowedAttributes.find(attr => attr.name === currentFilterName); const options = get(currentFilterData, ['options'], null) || ['true', 'false']; return ( <Wrapper borderLeft={!isEmpty(value)}> <InputWrapper> <CircleButton type="button" isRemoveButton onClick={() => onRemoveFilter(index)} /> <Select onChange={e => { // Change the attribute onChange(e); // Change the default filter so it reset to the common one which is '=' onChange({ target: { name: `${index}.filter`, value: '=' } }); }} name={`${index}.name`} value={currentFilterName} options={allowedAttributes.map(attr => attr.name)} style={styles.select} /> <Select onChange={onChange} name={`${index}.filter`} options={filtersOptions.map(option => ( <Option {...option} key={option.value} /> ))} style={styles.selectMiddle} value={get(modifiedData, [index, 'filter'], '')} /> <Input type={type} name={`${index}.value`} value={get(modifiedData, [index, 'value'], '')} options={options} onChange={onChange} /> {showAddButton && <CircleButton type="button" onClick={onClickAddFilter} />} </InputWrapper> </Wrapper> ); } FilterPickerOption.defaultProps = { allowedAttributes: [], modifiedData: [], index: -1, onChange: () => {}, onClickAddFilter: () => {}, onRemoveFilter: () => {}, value: null, type: 'string', }; FilterPickerOption.propTypes = { allowedAttributes: PropTypes.array, modifiedData: PropTypes.array, index: PropTypes.number, onChange: PropTypes.func, onClickAddFilter: PropTypes.func, onRemoveFilter: PropTypes.func, showAddButton: PropTypes.bool.isRequired, type: PropTypes.string, value: PropTypes.any, }; export default memo(FilterPickerOption);