import {BehaviorSubject} from "rxjs/BehaviorSubject"; import {User} from "../../models/model-interfaces"; export const LOAD = 'LOAD'; export const ADD = 'ADD'; export const EDIT = 'EDIT'; export const REMOVE = 'REMOVE'; export class UserStore { private users: User[] = []; items$ = new BehaviorSubject([]); dispatch(action) { this.users = this._reduce(this.users, action); this.items$.next(this.users); } _reduce(users: User[], 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; } } }