ca-mfe-page-scoring-ui
Version:
This is a react shell for the SPGI Platform MFE implementation
109 lines (105 loc) • 4.17 kB
text/typescript
import { createSlice } from '@reduxjs/toolkit';
import _ from 'lodash';
export const parentAndGovernmentSlice = createSlice({
name: 'parentAndGovernment',
initialState: {
periodDates: [],
missingFocusFinInputs: [],
parentGovernment:{
original: {},
current: {}
},
parentCompany: {},
parentInfo: {},
selectedDataInputs: {},
isLoading: true,
onlyParentLoad: false
},
reducers: {
fetchInit: state => {
state.isLoading = true;
},
fetchParent: state => {
state.onlyParentLoad = true;
},
fetchparentAndGovernment: (state, action) => {
state.parentGovernment.original = action.payload;
state.parentGovernment.current = action.payload;
state.isLoading = false;
state.onlyParentLoad = false;
},
fetchOnlyparent: (state, action) => {
const parentSections = (() => {
const sectionsObj = {};
state?.parentGovernment?.original?.data?.parent?.forEach((p, i) => (sectionsObj[p.groupItemCode] = i));
return sectionsObj;
})();
const updateParentState = _.cloneDeep(state?.parentGovernment?.original?.data);
action.payload?.data?.parent.forEach(group => {
updateParentState.parent.splice(parentSections[group.groupItemCode], 1, group);
});
updateParentState.nonFinPgMetrics = action.payload?.data?.nonFinPgMetrics;
const actionPayload = _.cloneDeep(action?.payload);
actionPayload.data = updateParentState;
state.parentGovernment.original = actionPayload;
state.parentGovernment.current = actionPayload;
state.onlyParentLoad = false;
state.isLoading = false;
},
updateParentAndGovernment: (state, action) => {
state.parentGovernment.current = action.payload;
},
fetchPeriodDates: (state, action) =>{
state.periodDates = action.payload;
},
fetchParentCompany: (state, action) => {
state.parentCompany = action.payload;
state.isLoading = true;
},
selectedParentDataInputs: (state, action) => {
state.selectedDataInputs = action.payload;
},
fetchMissingFocusFins: (state, action) => {
state.missingFocusFinInputs = action.payload;
},
clearAllValidationsForGovtSupport: state => {
state.parentGovernment.current?.data?.government.forEach(group => {
group?.metrics.forEach(metric => {
metric.isNotValidInput = false;
});
});
},
clearAllValidationsForParentSupport: state => {
state.parentGovernment.current?.data?.parent.forEach(group => {
group?.metrics.forEach(metric => {
metric.isNotValidInput = false;
});
});
},
updateParentMetricValidation: (state, action) => {
const { analyticsName, isNotValidInput = false} = action.payload;
if(analyticsName){
state.parentGovernment.current?.data?.parent.forEach(group => {
group?.metrics.forEach(metric => {
if(metric.analyticsName === analyticsName){
metric.isNotValidInput = isNotValidInput;
}
});
});
}
}
}
});
export const {fetchparentAndGovernment,
fetchPeriodDates,
fetchParentCompany,
selectedParentDataInputs,
fetchInit, fetchParent,
fetchOnlyparent,
updateParentAndGovernment,
fetchMissingFocusFins,
clearAllValidationsForGovtSupport,
clearAllValidationsForParentSupport,
updateParentMetricValidation
} = parentAndGovernmentSlice.actions;
export default parentAndGovernmentSlice.reducer;