interactive-apps/ngx-dhis2-validation-rule-filter

View on GitHub
projects/ngx-dhis2-validation-rule-filter/src/lib/store/reducers/validation-rule-groups.reducers.ts

Summary

Maintainability
A
1 hr
Test Coverage
import {
    ValidationRuleGroupActions,
    VRGActionTypes,
} from '../actions/validation-rule-groups.actions';
import { getAllValidationRuleGroup } from '../../helpers/extract-validation-rule-group.helper';
import { EntityState, EntityAdapter, createEntityAdapter } from '@ngrx/entity';
import { ValidationRuleGroup } from '../../models/validation-rule-group';
import { ValidationRuleGroupData } from '../../models/app-state.model';
import * as _ from 'lodash';

export interface State extends EntityState<ValidationRuleGroup> {
    selectedValidationRuleGroup: number | string | null;
    periodType: Array<string>;
    reloaded: boolean;
    loaded: boolean;
    loading: boolean;
}

export const validationRuleAdapter: EntityAdapter<
    ValidationRuleGroup
> = createEntityAdapter<ValidationRuleGroup>();

export const defaultValidationRuleGroupState: State = {
    ids: [],
    entities: {},
    selectedValidationRuleGroup: null,
    reloaded: false,
    periodType: null,
    loaded: false,
    loading: false,
};

export const initialState: State = validationRuleAdapter.getInitialState(
    defaultValidationRuleGroupState
);

export function reducer(state = initialState, action: VRGActionTypes): State {
    switch (action.type) {
        case ValidationRuleGroupActions.LOAD_VALIDATION_RULE_GROUPS: {
            return {
                ...state,
                loading: true,
            };
        }
        case ValidationRuleGroupActions.LOAD_VALIDATION_RULE_GROUPS_SUCCESS: {
            const validationRuleGroups: ValidationRuleGroupData = _.clone(
                getAllValidationRuleGroup(action.payload)
            );
            return validationRuleAdapter.addAll(
                validationRuleGroups.validationRuleGroup,
                {
                    ...state,
                    periodType: validationRuleGroups.periodType,
                    reloaded: true,
                    loading: false,
                    loaded: true,
                }
            );
        }
        case ValidationRuleGroupActions.LOAD_VALIDATION_RULE_GROUPS_FAIL: {
            return {
                ...state,
                loading: false,
                loaded: false,
            };
        }
    }
    return state;
}