import { EntityAdapter, EntityState } from '@ngrx/entity/src/models'; import { createEntityAdapter } from '@ngrx/entity'; import * as caseNotesActions from '../actions/case-Notes.action'; import { assign, get } from 'lodash'; import { CaseNotes } from '../models/case-notes/case-notes'; export interface LocalState extends EntityState { loading: boolean; caseNotes: CaseNotes; selectedCaseId: number; errors: any; } export const adapter: EntityAdapter = createEntityAdapter( { selectId: ( t: CaseNotes ) => t.caseNotesId, } ); export const initialState: LocalState = adapter.getInitialState( { loading: false, caseNotes: undefined, selectedCaseId: undefined, errors: undefined, } ); export function reducer( state: LocalState = initialState, action: caseNotesActions.CaseNotesActions ): LocalState { switch ( action.type ) { case caseNotesActions.CaseNotesActionTypes.SaveCaseNotes: case caseNotesActions.CaseNotesActionTypes.LoadCaseNotes: { return assign( {}, state, { loading: true } ); } case caseNotesActions.CaseNotesActionTypes.LoadCaseNotesSuccess: { if ( !action.payload ) { return state; } const updatedState: LocalState = adapter.removeAll( state ); return adapter.addMany( action.payload as CaseNotes[], { ...updatedState, selectedCaseId: get(action.payload, 'caseId'), loading: false, } ); } case caseNotesActions.CaseNotesActionTypes.LoadCaseNotesFail: { return assign( {}, state, { loading: false, errors: action.payload } ); } default: { return state; } } } export const getErrors: any = (state: LocalState) => state.errors; export const getCaseNotes: any = (state: LocalState) => state.caseNotes; export const getLoading: any = (state: LocalState) => state.loading; export const getSelectedCaseId: any = (state: LocalState) => state.selectedCaseId;