vdr-react-form-manager
Version:
131 lines (130 loc) • 6.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const FormManager_constant_1 = require("../constant/FormManager.constant");
const array_utils_1 = require("./array.utils");
const formInputProperties_utils_1 = require("./formInputProperties.utils");
const formInputs_utils_1 = require("./formInputs.utils");
const formInputsValidator_utils_1 = require("./formInputsValidator.utils");
const formValidator_utils_1 = require("./formValidator.utils");
const object_utils_1 = require("./object.utils");
const getCheckBoxValue = (checked, value, formInputProps) => {
const hasMultipleValues = formInputProps.availableValues.length > 0;
if (!hasMultipleValues) {
/* on -> default value for checkbox */
if (value !== '' && value !== 'on') {
return checked ? value : '';
}
return checked;
}
const checkBoxValue = formInputProps.value
.split(',')
.filter((x) => x !== '' && x !== value)
.map((x) => x);
if (checked) {
checkBoxValue.push(value);
}
return checkBoxValue.length ? checkBoxValue.join(',') : '';
};
const isInvalidFormPropertiesMutation = (formPropertiesMutation) => !formPropertiesMutation.formValidators &&
typeof formPropertiesMutation.isFormDisabled !== FormManager_constant_1.typeBoolean &&
!formPropertiesMutation.formCustomsProps &&
!array_utils_1.isValidArray(formPropertiesMutation.formClasseNames);
const getFormPropertiesMutation = (formPropertiesMutation) => {
const { isFormDisabled, formValidators, formCustomsProps, formClasseNames } = formPropertiesMutation;
return {
mutIsFormDisabled: !!isFormDisabled,
mutFormValidators: formValidators,
mutFormCustomsProps: formCustomsProps,
mutFormClassNames: formClasseNames,
};
};
const getAuthorizedFormValidators = (formValidators) => {
return array_utils_1.isValidArray(formValidators)
? formValidators.filter((x) => typeof x.validateForm === 'function')
: [];
};
exports.getIsFormPristine = (formInputs) => {
return Object.keys(formInputs).every(x => formInputs[x].isPristine);
};
exports.getIsFormTouched = (formInputs) => {
return Object.keys(formInputs).some(x => formInputs[x].isTouched);
};
exports.getFormValidity = (formInputs, formValidators) => {
const hasInvalidInputs = Object.keys(formInputs).some(x => !formInputs[x].isValid);
const formErrors = hasInvalidInputs ? [] : formValidator_utils_1.validateForm(formInputs, formValidators);
return { formErrors, isFormValid: !hasInvalidInputs && !formErrors.length };
};
exports.handleInputChange = ({ name, value, type, tagName, checked, emitLastFieldUpdatedStatus }, currentState) => {
const { formInputs } = currentState;
const formInputData = formInputs[name];
if (!formInputData) {
return currentState;
}
let _inputValue;
switch (type) {
case FormManager_constant_1.typeCheckbox:
_inputValue = getCheckBoxValue(checked, value, formInputData);
break;
default:
_inputValue = value;
}
const currentFormInputData = formInputs[name];
const errors = formInputsValidator_utils_1.validateFormInput(_inputValue, currentFormInputData.validators);
const formInputDataUpdated = Object.assign(Object.assign({}, currentFormInputData), { value: _inputValue, isValid: errors.length === 0, isTouched: true, isPristine: formInputs_utils_1.inputValueAreEquals(_inputValue, currentFormInputData.originalValue), errors, updateId: formInputProperties_utils_1.createUpdateId(_inputValue) });
const _formInputs = Object.assign(Object.assign({}, formInputs), { [name]: Object.assign({}, formInputDataUpdated) });
const { formProperties } = currentState;
return {
formInputs: _formInputs,
formProperties: Object.assign(Object.assign(Object.assign({}, formProperties), { isFormTouched: true, isFormPristine: exports.getIsFormPristine(_formInputs) }), exports.getFormValidity(_formInputs, formProperties.formValidators)),
lastFieldUpdated: emitLastFieldUpdatedStatus ? { inputName: name } : null,
};
};
exports.resetState = ({ formInputs, formValidators, formCustomsProps, formClassNames, }) => {
const authorizedFormValidators = getAuthorizedFormValidators(formValidators || []);
const { isFormValid } = exports.getFormValidity(formInputs, authorizedFormValidators);
return {
formInputs,
formProperties: {
formValidators: authorizedFormValidators,
isFormDisabled: false,
isFormValid,
isFormTouched: false,
isFormPristine: true,
formErrors: [],
formCustomsProps: formCustomsProps || {},
formClasseNames: array_utils_1.isValidArray(formClassNames) ? formClassNames : [],
},
lastFieldUpdated: null,
};
};
exports.setFormProperties = (formPropertiesMutation, currentState) => {
if (isInvalidFormPropertiesMutation(formPropertiesMutation || {})) {
return currentState;
}
const { mutIsFormDisabled, mutFormValidators, mutFormCustomsProps, mutFormClassNames } = getFormPropertiesMutation(formPropertiesMutation);
const { formInputs, formProperties } = currentState;
const { isFormDisabled, formValidators, formCustomsProps, formClasseNames } = currentState.formProperties;
let _formValidators = formValidators;
if (array_utils_1.isValidArray(mutFormValidators)) {
_formValidators = getAuthorizedFormValidators(mutFormValidators);
}
let _formClasseNames = formClasseNames;
if (array_utils_1.isValidArray(mutFormClassNames)) {
_formClasseNames = mutFormClassNames;
}
let _formInputs = formInputs;
let _isFormDisabled = !!isFormDisabled;
if (mutIsFormDisabled === !isFormDisabled) {
_isFormDisabled = mutIsFormDisabled;
_formInputs = formInputProperties_utils_1.updateFormInputDisabledValue(_formInputs, _isFormDisabled);
}
let _formCustomsProps = formCustomsProps;
if (object_utils_1.isValidObject(mutFormCustomsProps)) {
_formCustomsProps = mutFormCustomsProps;
}
return {
formInputs: _formInputs,
formProperties: Object.assign(Object.assign(Object.assign({}, formProperties), { formValidators: _formValidators, isFormDisabled: _isFormDisabled, formCustomsProps: _formCustomsProps, formClasseNames: _formClasseNames }), exports.getFormValidity(_formInputs, _formValidators)),
lastFieldUpdated: null,
};
};