UNPKG

plopfile-generate

Version:

Installation:

109 lines (103 loc) 3.08 kB
import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { Form, Select } from 'antd'; import FormTitle from '../FormTitle'; import IntlMessages from '../../utility/intlMessages'; import { getRecordData } from '../../../helpers/Tools'; import { onSearch } from '../../../utils'; const FormItem = Form.Item; const { Option } = Select; class FormSelect extends Component { onSelectOption = (inputValue, option) => { if (onSearch(option.props.children, inputValue)) { return option.props.value; } return null; }; render() { const { source, title, required, requiredMessage, icon, placeholder, form, defaultValue, disabled, resourceData, valueProp, titleProp, children, rules, label, } = this.props; return ( <FormItem label={label}> <FormTitle title={title} icon={icon} /> <IntlMessages id={placeholder}> {placeholderText => form.getFieldDecorator(source, { rules: [{ required, message: requiredMessage, ...rules }], initialValue: defaultValue, })( <Select disabled={disabled} placeholder={placeholderText} filterOption={this.onSelectOption} showSearch > {resourceData.map(data => { return children ? ( <Option key={valueProp ? getRecordData(data, valueProp) : data} value={valueProp ? getRecordData(data, valueProp) : data} > {React.cloneElement(children, { key: getRecordData(data, valueProp), record: data, valueProp, titleProp, })} </Option> ) : ( <Option key={valueProp ? getRecordData(data, valueProp) : data} value={valueProp ? getRecordData(data, valueProp) : data} > {titleProp ? getRecordData(data, titleProp) : data} </Option> ); })} </Select>, ) } </IntlMessages> </FormItem> ); } } FormSelect.propTypes = { source: PropTypes.string, title: PropTypes.string, required: PropTypes.bool, requiredMessage: PropTypes.node, icon: PropTypes.string, placeholder: PropTypes.string, form: PropTypes.object, defaultValue: PropTypes.any, disabled: PropTypes.bool, resourceData: PropTypes.any, valueProp: PropTypes.string, titleProp: PropTypes.string, children: PropTypes.node, rules: PropTypes.object, label: PropTypes.string, }; FormSelect.defaultProps = { required: false, requiredMessage: 'The field is required', rules: {}, placeholder: 'placeholder.undefined', }; export default FormSelect;