import { Decision } from './types'; import { DecisionsActionTypes, DecisionsActions } from './decisionsContextActions'; type StateRecord = Record; export type DecisionsState = StateRecord; export const decisionsReducer = (state: DecisionsState, action: DecisionsActions): DecisionsState => { switch (action.type) { case DecisionsActionTypes.InitFromItems: return action.payload.reduce(function (acc: StateRecord, item) { acc[item.serviceId] = item; return acc; }, {}); case DecisionsActionTypes.Update: const { serviceId } = action.payload; return { ...state, [serviceId]: { ...state[serviceId], ...action.payload, }, }; default: return state; } }; export const selectAllDecisions = (state: DecisionsState): Decision[] => Object.values(state); export const selectAllUserDecisions = (state: DecisionsState): { serviceId: string; status: boolean }[] => selectAllDecisions(state).map(({ serviceId, status }) => ({ serviceId, status, })); export const selectDecision = (state: DecisionsState, id: string): Decision => state[id];