import {BehaviorSubject} from 'rxjs/BehaviorSubject'; import {Squad} from '../../models/model-interfaces'; export const LOAD = 'LOAD'; export const ADD = 'ADD'; export const EDIT = 'EDIT'; export const REMOVE = 'REMOVE'; export class SquadStore { private squads: Squad[] = []; items$ = new BehaviorSubject([]); dispatch(action) { this.squads = this._reduce(this.squads, action); this.items$.next(this.squads); } _reduce(squads: Squad[], action) { switch (action.type) { case LOAD: return [...action.data]; case ADD: return [...squads, action.data]; case EDIT: return squads.map(squad => { const editedSquad = action.data; if (squad._id !== editedSquad._id) { return squad; } return editedSquad; }); case REMOVE: return squads.filter(squad => squad._id !== action.data._id); default: return squads; } } }