import React from 'react'; import { Alert, Col, DatePicker, TimePicker, Form, Input, Row, } from 'antd'; import moment from 'moment'; import IceUpload from './IceUpload'; import IceDataGroup from './IceDataGroup'; import IceSelect from './IceSelect'; import IceLabel from './IceLabel'; import IceColorPick from './IceColorPick'; import IceSignature from './IceSignature'; const ValidationRules = { float(str) { const floatstr = /^[-+]?[0-9]+(\.[0-9]+)?$/; if (str != null && str.match(floatstr)) { return true; } return false; }, number(str) { const numstr = /^[0-9]+$/; if (str != null && str.match(numstr)) { return true; } return false; }, numberOrEmpty(str) { if (str === '') { return true; } const numstr = /^[0-9]+$/; if (str != null && str.match(numstr)) { return true; } return false; }, email(str) { const emailPattern = /^\s*[\w\-+_]+(\.[\w\-+_]+)*@[\w\-+_]+\.[\w\-+_]+(\.[\w\-+_]+)*\s*$/; return str != null && emailPattern.test(str); }, emailOrEmpty(str) { if (str === '') { return true; } const emailPattern = /^\s*[\w\-+_]+(\.[\w\-+_]+)*@[\w\-+_]+\.[\w\-+_]+(\.[\w\-+_]+)*\s*$/; return str != null && emailPattern.test(str); }, username(str) { const username = /^[a-zA-Z0-9.-]+$/; return str != null && username.test(str); }, }; class IceForm extends React.Component { constructor(props) { super(props); this.validationRules = {}; this.state = { validations: {}, errorMsg: false, }; this.formReference = React.createRef(); } showError(errorMsg) { this.setState({ errorMsg }); } hideError() { this.setState({ errorMsg: false }); } isReady() { return this.formReference.current != null; } validateFields() { return this.formReference.current.validateFields(); } render() { const { fields, twoColumnLayout, adapter } = this.props; let formInputs = []; const formInputs1 = []; const formInputs2 = []; const columns = !twoColumnLayout ? 1 : 2; for (let i = 0; i < fields.length; i++) { formInputs.push( adapter.beforeRenderFieldHook( fields[i][0], this.createFromField(fields[i], this.props.viewOnly), fields[i][1] ) ); } formInputs = formInputs.filter(input => !!input); for (let i = 0; i < formInputs.length; i++) { if (formInputs[i] != null) { if (columns === 1) { formInputs1.push(formInputs[i]); } else if (i % 2 === 0) { formInputs1.push(formInputs[i]); } else { formInputs2.push(formInputs[i]); } } } const onFormLayoutChange = () => { }; return (
); } isValid() { return Object.keys(this.validationRules).reduce((acc, fieldName) => acc && (this.state[fieldName] === 'success' || this.state[fieldName] == null), true); } validateOnChange(event) { const validationRule = this.validationRules[event.target.id]; const { validations } = this.state; if (validationRule) { if (validationRule.rule(event.target.value)) { this.state[event.target.id] = 'success'; this.state[`${event.target.id}_message`] = null; } else { this.state[event.target.id] = 'error'; this.state[`${event.target.id}_message`] = validationRule.message; } } this.setState({ validations }); } createFromField(field, viewOnly = false) { let userId = 0; const rules = []; const requiredRule = { required: true }; const [name, data] = field; const { adapter, layout } = this.props; let validationRule = null; data.label = adapter.gt(data.label); const labelSpan = layout === 'vertical' ? { span: 24 } : { span: 6 }; const tempSelectBoxes = ['select', 'select2', 'select2multi']; if (tempSelectBoxes.indexOf(data.type) >= 0 && data['allow-null'] === true) { requiredRule.required = false; } else if (data.validation === 'none' || data.validation === 'emailOrEmpty' || data.validation === 'numberOrEmpty' ) { requiredRule.required = false; } else { requiredRule.required = true; requiredRule.message = this.generateFieldMessage(data.label); } rules.push(requiredRule); if (data.type === 'hidden') { requiredRule.required = false; return (