Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 

58 wiersze
1.2 KiB

  1. import { EventEmitter } from "events";
  2. import Dispatcher from "../appDispatcher";
  3. import actionTypes from "../actions/actionTypes";
  4. const CHANGE_EVENT = "change";
  5. let _users = [];
  6. class UserStore extends EventEmitter {
  7. addChangeListener(callback) {
  8. this.on(CHANGE_EVENT, callback);
  9. }
  10. removeChangeListener(callback) {
  11. this.removeListener(CHANGE_EVENT, callback);
  12. }
  13. emitChange() {
  14. this.emit(CHANGE_EVENT);
  15. }
  16. getUsers() {
  17. return _users;
  18. }
  19. getUserBySlug(slug) {
  20. return _users.find((user) => user.slug === slug);
  21. }
  22. }
  23. const store = new UserStore();
  24. Dispatcher.register((action) => {
  25. switch (action.actionType) {
  26. case actionTypes.DELETE_USER:
  27. _users = _users.filter((user) => user.id !== parseInt(action.id, 10));
  28. store.emitChange();
  29. break;
  30. case actionTypes.CREATE_USER:
  31. _users.push(action.user);
  32. store.emitChange();
  33. break;
  34. case actionTypes.UPDATE_USER:
  35. _users = _users.map((user) =>
  36. user.id === action.user.id ? action.user : user
  37. );
  38. store.emitChange();
  39. break;
  40. case actionTypes.LOAD_USERS:
  41. _users = action.users;
  42. store.emitChange();
  43. break;
  44. default:
  45. // nothing to do here
  46. }
  47. });
  48. export default store;