Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

reducer.ts 1.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import ReducerRegistry from '../base/redux/ReducerRegistry';
  2. import {
  3. ADD_GIF_FOR_PARTICIPANT,
  4. HIDE_GIF_FOR_PARTICIPANT,
  5. REMOVE_GIF_FOR_PARTICIPANT,
  6. SET_GIF_MENU_VISIBILITY
  7. } from './actionTypes';
  8. const initialState = {
  9. gifList: new Map(),
  10. menuOpen: false
  11. };
  12. export interface IGif {
  13. gifUrl?: string;
  14. timeoutID?: number;
  15. }
  16. export interface IGifsState {
  17. gifList: Map<string, IGif>;
  18. menuOpen: boolean;
  19. }
  20. ReducerRegistry.register<IGifsState>(
  21. 'features/gifs',
  22. (state = initialState, action): IGifsState => {
  23. switch (action.type) {
  24. case ADD_GIF_FOR_PARTICIPANT: {
  25. const newList = state.gifList;
  26. newList.set(action.participantId, {
  27. gifUrl: action.gifUrl,
  28. timeoutID: action.timeoutID
  29. });
  30. return {
  31. ...state,
  32. gifList: newList
  33. };
  34. }
  35. case REMOVE_GIF_FOR_PARTICIPANT: {
  36. const newList = state.gifList;
  37. newList.delete(action.participantId);
  38. return {
  39. ...state,
  40. gifList: newList
  41. };
  42. }
  43. case HIDE_GIF_FOR_PARTICIPANT: {
  44. const newList = state.gifList;
  45. const gif = state.gifList.get(action.participantId);
  46. newList.set(action.participantId, {
  47. gifUrl: gif?.gifUrl ?? '',
  48. timeoutID: action.timeoutID
  49. });
  50. return {
  51. ...state,
  52. gifList: newList
  53. };
  54. }
  55. case SET_GIF_MENU_VISIBILITY:
  56. return {
  57. ...state,
  58. menuOpen: action.visible
  59. };
  60. }
  61. return state;
  62. });