memberListStore.tsx 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import Reflux from 'reflux';
  2. import {User} from 'app/types';
  3. type MemberListStoreInterface = {
  4. state: User[];
  5. loaded: boolean;
  6. loadInitialData: (items: User[]) => void;
  7. isLoaded: () => boolean;
  8. getById: (id: string) => User | undefined;
  9. getByEmail: (email: string) => User | undefined;
  10. getAll: () => User[];
  11. };
  12. const memberListStoreConfig: Reflux.StoreDefinition & MemberListStoreInterface = {
  13. // listenables: MemberActions,
  14. loaded: false,
  15. state: [],
  16. init() {
  17. this.state = [];
  18. this.loaded = false;
  19. },
  20. // TODO(dcramer): this should actually come from an action of some sorts
  21. loadInitialData(items: User[]) {
  22. this.state = items;
  23. this.loaded = true;
  24. this.trigger(this.state, 'initial');
  25. },
  26. isLoaded() {
  27. return this.loaded;
  28. },
  29. getById(id) {
  30. if (!this.state) {
  31. return undefined;
  32. }
  33. id = '' + id;
  34. for (let i = 0; i < this.state.length; i++) {
  35. if (this.state[i].id === id) {
  36. return this.state[i];
  37. }
  38. }
  39. return undefined;
  40. },
  41. getByEmail(email) {
  42. if (!this.state) {
  43. return undefined;
  44. }
  45. email = email.toLowerCase();
  46. for (let i = 0; i < this.state.length; i++) {
  47. if (this.state[i].email.toLowerCase() === email) {
  48. return this.state[i];
  49. }
  50. }
  51. return undefined;
  52. },
  53. getAll() {
  54. return this.state;
  55. },
  56. };
  57. type MemberListStore = Reflux.Store & MemberListStoreInterface;
  58. const MemberListStore = Reflux.createStore(memberListStoreConfig) as MemberListStore;
  59. export default MemberListStore;