/* eslint react/no-multi-comp:0, no-console:0 */ import { createForm } from '../index' import { Select } from 'vue-antd-ui' import { regionStyle, errorStyle } from './styles' import { mergeProps } from '../../_util/props-util' const emailTpl = ['@gmail.com', '@outlook.com', '@qq.com'] const { Option } = Select const CustomInput = { props: { form: Object, }, data () { return { data: [], } }, methods: { onChange (v) { if (v.indexOf('@') === -1) { this.data = emailTpl.map(m => v + m) } else if (this.data.length) { this.data = [] } }, }, render () { const { getFieldProps, getFieldError, isFieldValidating } = this.form const errors = getFieldError('select') return (<div style={ regionStyle }> <div>custom select sync validate</div> <div> <Select { ...mergeProps( { props: { placeholder: 'please select', mode: 'combobox', filterOption: false, }, style: { width: '200px', }, }, getFieldProps('select', { change: this.onChange, rules: [ { type: 'email', }, { required: true, }, ], })) } > {this.data.map((d) => { return <Option key={d} value={d}>{d}</Option> })} </Select> </div> <div style={errorStyle}> {(errors) ? errors.join(',') : <b style={{ visibility: 'hidden', }} > 1 </b>} </div> <div style={errorStyle}> {isFieldValidating('select') ? 'validating' : <b style={{ visibility: 'hidden', }} > 1 </b>} </div> </div>) }, } const Form = { props: { form: Object, }, methods: { onSubmit (e) { e.preventDefault() this.form.validateFields((error, values) => { if (!error) { console.log('ok', values) } else { console.log('error', error, values) } }) }, }, render () { const { form } = this return (<div style={{ margin: '20px' }}> <h2>suggest</h2> <form onSubmit={this.onSubmit}> <CustomInput form={ form }/> <div style={ regionStyle }> <button>submit</button> </div> </form> </div>) }, } export default createForm()(Form)