import { createFeatureSelector, createSelector, MemoizedSelector, ActionReducerMap } from '@ngrx/store'; import * as fromCoreReferenceData from './core-reference-data.reducer'; import * as fromCaseDetails from './case-details.reducer'; import * as fromCaseNotes from './case-notes.reducer'; import * as fromExemptEp from './exempt-ep.reducer'; import { Dictionary, EntitySelectors } from '@ngrx/entity/src/models'; import { ReferenceData } from '../../shared/models/reference-data'; import { TypedReferenceData } from '../../shared/models/typed-reference-data'; import { CaseDetails } from '../models/case-details'; import { CaseNotes } from '../models/case-notes/case-notes'; export interface CoreState { referenceData: fromCoreReferenceData.LocalState; caseDetails: fromCaseDetails.LocalState; caseNotes: fromCaseNotes.LocalState; exemptEp: fromExemptEp.LocalState; } export const reducers: ActionReducerMap = { referenceData: fromCoreReferenceData.reducer, caseDetails: fromCaseDetails.reducer, caseNotes: fromCaseNotes.reducer, exemptEp: fromExemptEp.reducer, }; export interface State { coreState: CoreState; } export const getCoreState: MemoizedSelector = createFeatureSelector( 'core-data' ); // reference data export const getCoreReferenceDataEntitiesState: MemoizedSelector = createSelector( getCoreState, state => state.referenceData, ); export const { selectIds: getReferenceDataIds, selectEntities: getReferenceDataEntities, selectAll: getAllReferenceData, selectTotal: getTotalReferenceData, }: EntitySelectors, any> = fromCoreReferenceData.adapter.getSelectors( getCoreReferenceDataEntitiesState ); // case summary details export const getCaseDetailsEntitiesState: MemoizedSelector = createSelector( getCoreState, (state: CoreState) => state.caseDetails, ); export const getCaseDetailsLoading: MemoizedSelector = createSelector(getCaseDetailsEntitiesState, fromCaseDetails.getLoading); export const getCaseDetails: MemoizedSelector = createSelector(getCaseDetailsEntitiesState, fromCaseDetails.getCaseDetails); export const getCaseDetailsErrors: MemoizedSelector = createSelector(getCaseDetailsEntitiesState, fromCaseDetails.getErrors); export const getSelectedCaseId: MemoizedSelector = createSelector(getCaseDetailsEntitiesState, fromCaseDetails.getSelectedCaseId); export const { selectEntities: getCaseDetailsEntities, }: EntitySelectors = fromCaseDetails.adapter.getSelectors( getCaseDetailsEntitiesState ); export const getSelectedCaseDetails: MemoizedSelector = createSelector( getCaseDetailsEntities, getSelectedCaseId, ( caseDetailsEntities, caseId ) => { return caseDetailsEntities[caseId]; }, ); export const getCaseNotesEntitiesState: MemoizedSelector = createSelector( getCoreState, (state: CoreState) => state.caseNotes, ); export const getSelectedCaseIdForNotes: MemoizedSelector = createSelector(getCaseNotesEntitiesState, fromCaseNotes.getSelectedCaseId); export const getCaseNotesLoading: MemoizedSelector = createSelector(getCaseNotesEntitiesState, fromCaseNotes.getLoading); export const { selectEntities: getCaseNotesEntities, selectAll: getAllCaseNotes, }: EntitySelectors = fromCaseNotes.adapter.getSelectors( getCaseNotesEntitiesState ); export const getSelectedCaseNotes: MemoizedSelector = createSelector( getCaseNotesEntities, getSelectedCaseIdForNotes, ( caseNotesEntities: Dictionary, id: number ) => { return caseNotesEntities[id]; }, ); // Exempt EP export const getExemptEpEntitiesState: MemoizedSelector = createSelector( getCoreState, (state: CoreState) => state.exemptEp, ); export const getExemptEpLoading: MemoizedSelector = createSelector(getExemptEpEntitiesState, fromExemptEp.getLoading); export const getCloseExemptEpModal: MemoizedSelector = createSelector(getExemptEpEntitiesState, fromExemptEp.getCloseExemptEpModal);