UNPKG

@digifi-los/reactapp

Version:
510 lines (460 loc) 22 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _stringify = require('babel-runtime/core-js/json/stringify'); var _stringify2 = _interopRequireDefault(_stringify); var _keys = require('babel-runtime/core-js/object/keys'); var _keys2 = _interopRequireDefault(_keys); var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray'); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); var _assign = require('babel-runtime/core-js/object/assign'); var _assign2 = _interopRequireDefault(_assign); var _defineProperty2 = require('babel-runtime/helpers/defineProperty'); var _defineProperty3 = _interopRequireDefault(_defineProperty2); exports.validateFormElement = validateFormElement; exports.valueCheckFormElement = valueCheckFormElement; exports.validateForm = validateForm; exports.assignHiddenFields = assignHiddenFields; exports.getCallbackFromString = getCallbackFromString; exports.setAddNameToName = setAddNameToName; exports.setFormNameFields = setFormNameFields; exports.assignFormBody = assignFormBody; exports.handleFormSubmitNotification = handleFormSubmitNotification; exports.handleSuccessCallbacks = handleSuccessCallbacks; exports.submitThisDotPropsFunc = submitThisDotPropsFunc; exports.submitWindowFunc = submitWindowFunc; var _flat = require('flat'); var _flat2 = _interopRequireDefault(_flat); var _validate3 = require('validate.js'); var _validate4 = _interopRequireDefault(_validate3); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * * * @param {String} function_string sting for function name * @returns the window function associated with the function_string if it exists on the window. Otherwise the function returns null */ var getWindowFunction = function getWindowFunction(function_string) { if (typeof function_string === 'string' && function_string.indexOf('func:window') !== -1 && typeof window[function_string.replace('func:window.', '')] === 'function') { return window[function_string.replace('func:window.', '')]; } return null; }; /** * * creates custom validations on the validator object provided by validate.js. * @param {Object} validation validation object defined as part of the validations array in the form manifest * @param {Array} validation.custom_validators list of names for custom validations. Each name gets set as the key for the validation on the validate.validators object * @param {Array} validation.custom_validators_functions list of function names for custom validations. Function gets defined on the window. Format for function can be found in * Validate.js docs */ var createValidators = function createValidators(validation) { validation.custom_validators.forEach(function (custom_validator, index) { if (validation.custom_validator_functions) { var window_function = getWindowFunction(validation.custom_validator_functions[index]); if (window_function) { _validate4.default.validators[custom_validator] = window_function; } } }); }; function validateFormElement(options) { try { var formElement = options.formElement; /*allows for custom validations to be defined in manifest. If there are custom validations on the formElement, define them on the validators object provided by validate.js*/ this.props.validations.forEach(function (validation) { if (validation.custom_validators && validation.custom_validators.length) createValidators(validation); }); var validation = this.props.validations.filter(function (validation) { return validation.name === formElement.name; }); validation = validation.length > 0 ? validation[0] : false; if (validation) { var validationerror = (0, _validate4.default)((0, _defineProperty3.default)({}, validation.name, this.state[validation.name]), validation.constraints); var validationErrors = void 0; var validationValid = void 0; if (validationerror) { validationErrors = (0, _assign2.default)({}, this.state.formDataErrors); validationErrors[validation.name] = validationerror[validation.name]; if (this.state.formDataValid) { validationValid = (0, _assign2.default)({}, this.state.formDataValid); delete validationValid[validation.name]; } } else { validationValid = (0, _assign2.default)({}, this.state.formDataValid); validationValid[validation.name] = true; if (this.state.formDataErrors) { validationErrors = (0, _assign2.default)({}, this.state.formDataErrors); delete validationErrors[validation.name]; } } this.setState({ formDataErrors: validationErrors, formDataValid: validationValid }); // console.debug('has errors', validationErrors, 'this.state[formElement.name]', this.state[ formElement.name ]); } } catch (e) { console.debug('validation check error', e); } } function valueCheckFormElement(options) { try { var formElement = options.formElement; var validationValid = (0, _assign2.default)({}, this.state.formDataValid); if (this.state[formElement.name]) { validationValid[formElement.name] = true; } else { delete validationValid[formElement.name]; } this.setState({ formDataValid: validationValid }); // console.debug('has errors', validationErrors, 'this.state[formElement.name]', this.state[ formElement.name ]); } catch (e) { console.debug('value check error', e); } } function validateForm(options) { var formdata = options.formdata, validationErrors = options.validationErrors; // console.debug('testin valdation',this.props.validations,) if (this.props.validations) { this.props.validations.forEach(function (validation) { if (validation.custom_validators && validation.custom_validators.length) createValidators(validation); var validationerror = (0, _validate4.default)((0, _defineProperty3.default)({}, validation.name, formdata[validation.name]), validation.constraints); // console.debug(formdata[ validation.name ], { validation, validationerror, }); if (validationerror) { validationErrors[validation.name] = validationerror[validation.name]; } else { delete validationErrors[validation.name]; } }); } else { delete formdata.formDataErrors; } return { formdata: formdata, validationErrors: validationErrors }; } function assignHiddenFields(options) { var _this = this; var formdata = options.formdata, hiddenInputs = options.hiddenInputs, submitFormData = options.submitFormData; var dynamicFields = {}; var ApplicationState = this.props.getState(); if (this.props.hiddenFields) { this.props.hiddenFields.forEach(function (hiddenField) { var hiddenFormValue = typeof _this.state[hiddenField.form_val] === 'undefined' ? hiddenField.form_static_val : _this.state[hiddenField.form_val]; hiddenInputs[hiddenField.form_name] = hiddenFormValue; submitFormData[hiddenField.form_name] = hiddenFormValue; }); } if (this.props.dynamicFields) { var mergedDynamicField = this.props.mergeDynamicFields ? (0, _assign2.default)({}, ApplicationState.dynamic, (0, _flat2.default)(ApplicationState.dynamic)) : ApplicationState.dynamic; this.props.dynamicFields.forEach(function (dynamicHiddenField) { var hiddenFormValue = typeof mergedDynamicField[dynamicHiddenField.form_val] === 'undefined' ? dynamicHiddenField.form_static_val : mergedDynamicField[dynamicHiddenField.form_val]; dynamicFields[dynamicHiddenField.form_name] = hiddenFormValue; submitFormData[dynamicHiddenField.form_name] = hiddenFormValue; }); } formdata = (0, _assign2.default)(formdata, hiddenInputs, dynamicFields); return { formdata: formdata, hiddenInputs: hiddenInputs, submitFormData: submitFormData }; } function getCallbackFromString(successCBProp) { var multiArgs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var successCallback = void 0; if (!multiArgs && Array.isArray(successCBProp) && successCBProp.length) { var fns = successCBProp.map(getCallbackFromString.bind(this)); successCallback = function () { for (var i = 0; i < fns.length; i++) { var _fns$i; (_fns$i = fns[i]).call.apply(_fns$i, [this].concat(Array.prototype.slice.call(arguments))); } }.bind(this); } else if (multiArgs & Array.isArray(successCBProp) && successCBProp.length) { var _fns = successCBProp.map(getCallbackFromString.bind(this)); successCallback = function () { for (var i = 0; i < _fns.length; i++) { var _fns$i2; var args = [arguments[0][i]].concat([].slice.call(arguments, 1)); (_fns$i2 = _fns[i]).call.apply(_fns$i2, [this].concat((0, _toConsumableArray3.default)(args))); } }.bind(this); } else { if (typeof successCBProp === 'string' && successCBProp.indexOf('func:this.props.reduxRouter') !== -1) { successCallback = this.props.reduxRouter[successCBProp.replace('func:this.props.reduxRouter.', '')]; } else if (typeof successCBProp === 'string' && successCBProp.indexOf('func:window') !== -1 && typeof window[successCBProp.replace('func:window.', '')] === 'function') { successCallback = window[successCBProp.replace('func:window.', '')].bind(this); } else if (typeof successCBProp === 'string') { successCallback = this.props[successCBProp.replace('func:this.props.', '')]; } } return successCallback; } function setAddNameToName(options) { var formdata = options.formdata, formElementFields = options.formElementFields, formElm = options.formElm, multipleDropdowns = options.multipleDropdowns; var recursiveSetAddNameToName = setAddNameToName.bind(this); // console.debug('addNameToName','(formElm.passProps && formElm.passProps.state===isDisabled)',(formElm.passProps && formElm.passProps.state==='isDisabled'),{ formElm }); // skip if null, or disabled // console.debug({ formElm, }); if (!formElm || formElm.disabled || formElm.passProps && formElm.passProps.state === 'isDisabled') { // console.debug('skip', formElm); // } else if (formElm.type === 'group') { if (formElm.groupElements && formElm.groupElements.length) { formElm.groupElements.forEach(function (formElm) { return recursiveSetAddNameToName({ formdata: formdata, formElementFields: formElementFields, formElm: formElm }); }); } } else if (formElm.type === 'tabs') { if (formElm.name && formElm.passProps && formElm.passProps.markActiveTab) { formdata[formElm.name] = this.state ? this.state[formElm.name] || formElm.value : formElm.value; formElementFields.push(formElm.name); } if (Array.isArray(formElm.tabs) && formElm.tabs.length) { formElm.tabs.forEach(function (tab) { if (Array.isArray(tab.formElements)) { tab.formElements.forEach(function (formElm) { return recursiveSetAddNameToName({ formElementFields: formElementFields, formdata: formdata, formElm: formElm, multipleDropdowns: multipleDropdowns }); }); } }); } } else if (formElm.name) { formElementFields.push(formElm.name); if (formElm.type === 'hidden' || this.props && this.props.setInitialValues) { if (formElm.type === 'radio') { if (this.state && formElm.name && this.state[formElm.name]) { formdata[formElm.name] = this.state[formElm.name]; } else if (this.state || formElm.checked || formElm.passProps && formElm.passProps.checked) { formdata[formElm.name] = formElm.value; } } else { formdata[formElm.name] = this.state ? this.state[formElm.name] || formElm.value : formElm.value; } } if (formElm.type === 'datalist') { // console.debug('before',{formElm,formdata}); if (formElm.datalist.multi && formdata[formElm.name] && formdata[formElm.name].length) { formdata[formElm.name] = formdata[formElm.name].map(function (datum) { return datum[formElm.datalist.selector || '_id']; }); } else if (formdata[formElm.name] && (0, _keys2.default)(formdata[formElm.name]).length) { formdata[formElm.name] = formdata[formElm.name][formElm.datalist.selector || '_id']; } // console.debug('after',{formElm,formdata}); } if (formElm.type === 'dropdown' && formElm.passProps && formElm.passProps.multiple) { multipleDropdowns[formElm.name] = true; } } return { formdata: formdata, formElementFields: formElementFields, formElement: formElm, multipleDropdowns: multipleDropdowns }; } function setFormNameFields(options) { var formElementFields = options.formElementFields, formdata = options.formdata; var multipleDropdowns = {}; var addNameToName = setAddNameToName.bind(this); function _mapFormFieldNames(formgroup, formdata, formElementFields) { var _this2 = this; if (formgroup.formElements && formgroup.formElements.length) { formgroup.formElements.forEach(function (formElement) { var formElementsLeft = formElement.formGroupElementsLeft && formElement.formGroupElementsLeft.length ? formElement.formGroupElementsLeft : false; var formElementsRight = formElement.formGroupElementsRight && formElement.formGroupElementsRight.length ? formElement.formGroupElementsRight : false; var formGroupLeft = formElement.formGroupCardLeft && formElement.formGroupCardLeft.length ? formElement.formGroupCardLeft : false; var formGroupRight = formElement.formGroupCardRight && formElement.formGroupCardRight.length ? formElement.formGroupCardRight : false; if (formElementsLeft || formElementsRight) { if (formElementsLeft) formElementsLeft.forEach(function (formElm) { return addNameToName({ formElementFields: formElementFields, formdata: formdata, formElm: formElm, multipleDropdowns: multipleDropdowns }); }); if (formElementsRight) formElementsRight.forEach(function (formElm) { return addNameToName({ formElementFields: formElementFields, formdata: formdata, formElm: formElm, multipleDropdowns: multipleDropdowns }); }); } else if (formGroupLeft || formGroupRight) { if (formGroupLeft) formGroupLeft.forEach(function (formElm) { return addNameToName({ formElementFields: formElementFields, formdata: formdata, formElm: formElm, multipleDropdowns: multipleDropdowns }); }); if (formGroupRight) formGroupRight.forEach(function (formElm) { return addNameToName({ formElementFields: formElementFields, formdata: formdata, formElm: formElm, multipleDropdowns: multipleDropdowns }); }); } else if (formElement.type === 'group') { if (formElement.groupElements && formElement.groupElements.length) formElement.groupElements.forEach(function (formElm) { return addNameToName({ formElementFields: formElementFields, formdata: formdata, formElm: formElm, multipleDropdowns: multipleDropdowns }); }); } else if (formElement.type === 'tabs') { if (formElement.name && formElement.passProps && formElement.passProps.markActiveTab) { formdata[formElement.name] = _this2.state ? _this2.state[formElement.name] || formElement.value : formElement.value; formElementFields.push(formElement.name); } if (formElement.tabs && formElement.tabs.length) { formElement.tabs.forEach(function (tab) { if (tab.formElements && tab.formElements.length) { tab.formElements.forEach(function (formElm) { return addNameToName({ formElementFields: formElementFields, formdata: formdata, formElm: formElm, multipleDropdowns: multipleDropdowns }); }); } }); } } else if (!formElement || formElement.disabled || formElement.passProps && formElement.passProps.state === 'isDisabled') { //skip if dsiabled // console.debug('skip', formElement); } else { if (formElement.name) { addNameToName({ formElementFields: formElementFields, formdata: formdata, formElm: formElement, multipleDropdowns: multipleDropdowns }); // formElementFields.push(formElement.name); } } }); } } if (this.props.formgroups && this.props.formgroups.length) { this.props.formgroups.forEach(function (formgroup) { if (formgroup.gridElements) { formgroup.gridElements.map(function (grid) { return _mapFormFieldNames(grid, formdata, formElementFields); }); } else { _mapFormFieldNames(formgroup, formdata, formElementFields); } }); } return { formElementFields: formElementFields, formdata: formdata, multipleDropdowns: multipleDropdowns }; } function assignFormBody(options) { var formdata = options.formdata, headers = options.headers, formBody = options.formBody, submitFormData = options.submitFormData, fetchPostBody = options.fetchPostBody, fetchOptions = options.fetchOptions; //if file if ((0, _keys2.default)(formdata.formDataFiles).length) { delete headers['Content-Type']; delete headers['content-type']; (0, _keys2.default)(formdata.formDataFiles).forEach(function (formFileName) { var fileList = formdata.formDataFiles[formFileName].files; for (var x = 0; x < fileList.length; x++) { formBody.append(formFileName, fileList.item(x)); } }); delete formdata.formDataErrors; delete formdata.formDataFiles; (0, _keys2.default)(submitFormData).forEach(function (form_name) { formBody.append(form_name, submitFormData[form_name]); }); fetchPostBody = formBody; } else { delete formdata.formDataErrors; delete formdata.formDataFiles; fetchPostBody = (0, _stringify2.default)(submitFormData); } var isGetRequest = fetchOptions.options && fetchOptions.options.method && fetchOptions.options.method.toUpperCase() === 'GET'; var bodyForFetch = isGetRequest ? {} : { body: fetchPostBody }; if (fetchOptions.options.headers) { headers = (0, _assign2.default)({}, headers, fetchOptions.options.headers); } fetchOptions.options = (0, _assign2.default)({}, fetchOptions.options, { headers: headers }, bodyForFetch); return { formdata: formdata, headers: headers, formBody: formBody, submitFormData: submitFormData, fetchPostBody: fetchPostBody, fetchOptions: fetchOptions, isGetRequest: isGetRequest }; } function handleFormSubmitNotification(options) { var fetchOptions = options.fetchOptions, __formStateUpdate = options.__formStateUpdate; if (fetchOptions.success.modal) { this.props.createModal(fetchOptions.success.modal); } else if (fetchOptions.success.notification) { this.props.createNotification(fetchOptions.success.notification); } else { this.props.createNotification({ text: 'Saved', timeout: 4000, type: 'success' }); } if (!fetchOptions.successCallback && !fetchOptions.responseCallback) { __formStateUpdate(); } } function handleSuccessCallbacks(options) { var fetchOptions = options.fetchOptions, submitFormData = options.submitFormData, successData = options.successData, successCallback = options.successCallback, responseCallback = options.responseCallback; if (fetchOptions.successCallback === 'func:this.props.setDynamicData') { this.props.setDynamicData(this.props.dynamicField, submitFormData); } else { if (fetchOptions.setDynamicData) { this.props.setDynamicData(this.props.dynamicField, submitFormData); } if (successCallback) { successCallback(fetchOptions.successProps || successData.callbackProps || (0, _assign2.default)({}, submitFormData, successData), submitFormData); } } if (responseCallback) { if (fetchOptions.responseCallback === 'func:this.props.setDynamicData') { this.props.setDynamicData(this.props.dynamicResponseField, successData); } else { if (fetchOptions.setDynamicResponseData) { this.props.setDynamicData(this.props.dynamicResponseField, successData); } responseCallback(fetchOptions.responseProps || successData.callbackProps || successData, submitFormData); } } if (this.props.updateFormOnResponse) { this.setState(this.props.flattenFormData ? (0, _assign2.default)({}, successData, (0, _flat2.default)(successData, this.props.flattenDataOptions)) : successData); } } function submitThisDotPropsFunc(options) { var formdata = options.formdata, submitFormData = options.submitFormData; delete formdata.formDataFiles; delete formdata.formDataErrors; if (this.props.onSubmit === 'func:this.props.setDynamicData') { // console.debug('this.props', this.props); this.props.setDynamicData(this.props.dynamicField, submitFormData); } else { this.props[this.props.onSubmit.replace('func:this.props.', '')](submitFormData); } } function submitWindowFunc(options) { var formdata = options.formdata, submitFormData = options.submitFormData; delete formdata.formDataFiles; delete formdata.formDataErrors; window[this.props.onSubmit.replace('func:window.', '')].call(this, submitFormData); }