84 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
| /* eslint react/no-multi-comp:0, no-console:0 */
 | |
| 
 | |
| import { createForm } from '../index'
 | |
| import { regionStyle, errorStyle } from './styles'
 | |
| 
 | |
| function getFileValueProps (value) {
 | |
|   if (value && value.target) {
 | |
|     return {
 | |
|       value: value.target.value,
 | |
|     }
 | |
|   }
 | |
|   return {
 | |
|     value,
 | |
|   }
 | |
| }
 | |
| 
 | |
| function getValueFromFileEvent ({ target }) {
 | |
|   return {
 | |
|     target,
 | |
|   }
 | |
| }
 | |
| 
 | |
| const Form = {
 | |
|   props: {
 | |
|     form: Object,
 | |
|   },
 | |
|   methods: {
 | |
|     onSubmit (e) {
 | |
|       e.preventDefault()
 | |
|       this.form.validateFields((error, values) => {
 | |
|         console.log(error, values)
 | |
|         if (!error) {
 | |
|           console.log('æ ĄéĒéčŋ')
 | |
|         }
 | |
|       })
 | |
|     },
 | |
|     checkSize (rule, value, callback) {
 | |
|       if (value && value.target) {
 | |
|         const files = value.target.files
 | |
|         if (files[0]) {
 | |
|           callback(files[0].size > 1000000 ? 'file size must be less than 1M' : undefined)
 | |
|         } else {
 | |
|           callback()
 | |
|         }
 | |
|       } else {
 | |
|         callback()
 | |
|       }
 | |
|     },
 | |
|   },
 | |
| 
 | |
|   render () {
 | |
|     const { getFieldProps, getFieldError } = this.form
 | |
|     const errors = getFieldError('attachment')
 | |
|     return (<div
 | |
|       style={ regionStyle }
 | |
|     >
 | |
|       <div>attachment:</div>
 | |
|       <div>
 | |
|         <input type='file' {...getFieldProps('attachment', {
 | |
|           getValueProps: getFileValueProps,
 | |
|           getValueFromEvent: getValueFromFileEvent,
 | |
|           rules: [this.checkSize],
 | |
|         })}
 | |
|         />
 | |
|       </div>
 | |
|       <div style={errorStyle}>
 | |
|         {(errors) ? errors.join(',') : null}
 | |
|       </div>
 | |
|       <button onClick={this.onSubmit}>submit</button>
 | |
|     </div>)
 | |
|   },
 | |
| }
 | |
| 
 | |
| const NewForm = createForm()(Form)
 | |
| 
 | |
| export default {
 | |
|   render () {
 | |
|     return (<div>
 | |
|       <h2>input[type="file"]</h2>
 | |
|       <NewForm />
 | |
|     </div>)
 | |
|   },
 | |
| }
 |