diff options
Diffstat (limited to 'openecomp-ui/src/sdc-app/common/reducers/PlainDataReducer.js')
-rw-r--r-- | openecomp-ui/src/sdc-app/common/reducers/PlainDataReducer.js | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/openecomp-ui/src/sdc-app/common/reducers/PlainDataReducer.js b/openecomp-ui/src/sdc-app/common/reducers/PlainDataReducer.js new file mode 100644 index 0000000000..0bbb5e63be --- /dev/null +++ b/openecomp-ui/src/sdc-app/common/reducers/PlainDataReducer.js @@ -0,0 +1,94 @@ +/*! + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +import {actionTypes} from './PlainDataReducerConstants.js'; +import Validator from 'nfvo-utils/Validator.js'; +import forOwn from 'lodash/forOwn.js'; + +function updateDataAndValidateReducer(state = {}, action) { + let genericFieldInfoCopy; + switch (action.type) { + case actionTypes.DATA_CHANGED: + let changed = action.deltaData; + if (!action.formName || (state.formName !== action.formName)) {return {...state};} + genericFieldInfoCopy = {...state.genericFieldInfo}; + forOwn(changed,(value, key) => { + if (state.genericFieldInfo[key]) { + let result = Validator.validate(key, value, state.genericFieldInfo[key].validations, state, action.customValidations); + genericFieldInfoCopy[key] = {...genericFieldInfoCopy[key], isValid: result.isValid, errorText: result.errorText}; + } + }); + return { + ...state, + formReady: null, + data: { + ...state.data, + ...action.deltaData + }, + genericFieldInfo: genericFieldInfoCopy + }; + case actionTypes.VALIDATE_FORM: + if (!action.formName || (state.formName !== action.formName)) {return {...state};} + genericFieldInfoCopy = {...state.genericFieldInfo}; + let formReady = true; + forOwn(state.genericFieldInfo,(value, key) => { + let val = state.data && state.data[key] ? state.data[key] : ''; + let result = Validator.validate(key, val, state.genericFieldInfo[key].validations, state, {}); + genericFieldInfoCopy[key] = {...genericFieldInfoCopy[key], isValid: result.isValid, errorText: result.errorText}; + if (!result.isValid) { + formReady = false; + } + }); + return { + ...state, + formReady, + genericFieldInfo: genericFieldInfoCopy + }; + case actionTypes.VALIDATE_DATA: + let specificFields = action.data; + if (!action.formName || (state.formName !== action.formName)) {return {...state};} + genericFieldInfoCopy = {...state.genericFieldInfo}; + forOwn(specificFields,(value, key) => { + let result = Validator.validate(key, value, state.genericFieldInfo[key].validations, state, action.customValidations); + genericFieldInfoCopy[key] = {...genericFieldInfoCopy[key], isValid: result.isValid, errorText: result.errorText}; + }); + return { + ...state, + formReady: null, + genericFieldInfo: genericFieldInfoCopy + }; + default: + return state; + } +}; + +export function createPlainDataReducer(loadReducer) { + return (state = {}, action) => { + if(action.type === actionTypes.VALIDATE_DATA || + action.type === actionTypes.VALIDATE_FORM || + action.type === actionTypes.DATA_CHANGED + ) { + return updateDataAndValidateReducer(state, action); + } else { + return loadReducer(state, action); + } + }; +}; + + + + + + |