import { EventEmitter } from "events"; import Dispatcher from "../appDispatcher"; import actionTypes from "../actions/actionTypes"; const CHANGE_EVENT = "change"; let _users = []; class UserStore extends EventEmitter { addChangeListener(callback) { this.on(CHANGE_EVENT, callback); } removeChangeListener(callback) { this.removeListener(CHANGE_EVENT, callback); } emitChange() { this.emit(CHANGE_EVENT); } getUsers() { return _users; } getUserBySlug(slug) { return _users.find((user) => user.slug === slug); } } const store = new UserStore(); Dispatcher.register((action) => { switch (action.actionType) { case actionTypes.DELETE_USER: _users = _users.filter((user) => user.id !== parseInt(action.id, 10)); store.emitChange(); break; case actionTypes.CREATE_USER: _users.push(action.user); store.emitChange(); break; case actionTypes.UPDATE_USER: _users = _users.map((user) => user.id === action.user.id ? action.user : user ); store.emitChange(); break; case actionTypes.LOAD_USERS: _users = action.users; store.emitChange(); break; default: // nothing to do here } }); export default store;