export function reducer()

in src/app/offices/store/teller/tellers.reducer.ts [32:92]


export function reducer(state = initialState, action: tellers.Actions): ResourceState {

  switch (action.type) {

    case tellers.LOAD_TELLER: {
      return initialState;
    }

    case tellers.LOAD_TELLER_SUCCESS: {
      const tellers: Teller[] = action.payload;

      const ids = tellers.map(teller => teller.code);

      const entities = resourcesToHash(tellers, 'code');

      const loadedAt = idsToHashWithCurrentTimestamp(ids);

      return {
        ids: [ ...ids ],
        entities: entities,
        loadedAt: loadedAt,
        selectedId: state.selectedId
      };
    }

    case tellers.EXECUTE_COMMAND_SUCCESS: {
      const payload = action.payload;
      const tellerCode = payload.tellerCode;
      const command: TellerManagementCommand = payload.command;
      const teller: Teller = state.entities[tellerCode];

      let tellerState: Status = null;
      let assignedEmployee = null;

      if (command.action === 'OPEN') {
        tellerState = 'OPEN';
        assignedEmployee = command.assignedEmployeeIdentifier;
      } else if (command.action === 'CLOSE') {
        tellerState = 'CLOSED';
      }

      const newTeller = Object.assign({}, teller, {
        state: tellerState,
        assignedEmployee
      });

      return {
        ids: [ ...state.ids ],
        entities: Object.assign({}, state.entities, {
          [teller.code]: newTeller
        }),
        loadedAt: state.loadedAt,
        selectedId: state.selectedId
      };
    }

    default: {
      return state;
    }
  }
}