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