You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

middleware.ts 1.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import {
  2. PARTICIPANT_JOINED,
  3. PARTICIPANT_KICKED,
  4. PARTICIPANT_LEFT,
  5. PARTICIPANT_UPDATED
  6. } from '../base/participants/actionTypes';
  7. import MiddlewareRegistry from '../base/redux/MiddlewareRegistry';
  8. import {
  9. INIT_SEARCH,
  10. INIT_UPDATE_STATS,
  11. RESET_SEARCH_CRITERIA
  12. } from './actionTypes';
  13. import { initReorderStats, updateSortedSpeakerStatsIds, updateStats } from './actions';
  14. import { filterBySearchCriteria, getPendingReorder, getSortedSpeakerStatsIds, resetHiddenStats } from './functions';
  15. MiddlewareRegistry.register(({ dispatch, getState }) => next => action => {
  16. const result = next(action);
  17. switch (action.type) {
  18. case INIT_SEARCH: {
  19. const state = getState();
  20. const stats = filterBySearchCriteria(state);
  21. dispatch(updateStats(stats));
  22. break;
  23. }
  24. case INIT_UPDATE_STATS:
  25. if (action.getSpeakerStats) {
  26. const state = getState();
  27. const speakerStats = { ...action.getSpeakerStats() };
  28. const stats = filterBySearchCriteria(state, speakerStats);
  29. const pendingReorder = getPendingReorder(state);
  30. if (pendingReorder) {
  31. dispatch(updateSortedSpeakerStatsIds(getSortedSpeakerStatsIds(state, stats)));
  32. }
  33. dispatch(updateStats(stats));
  34. }
  35. break;
  36. case RESET_SEARCH_CRITERIA: {
  37. const state = getState();
  38. const stats = resetHiddenStats(state);
  39. dispatch(updateStats(stats));
  40. break;
  41. }
  42. case PARTICIPANT_JOINED:
  43. case PARTICIPANT_LEFT:
  44. case PARTICIPANT_KICKED:
  45. case PARTICIPANT_UPDATED: {
  46. dispatch(initReorderStats());
  47. break;
  48. }
  49. }
  50. return result;
  51. });