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.js 1.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. // @flow
  2. import { ReducerRegistry } from '../base/redux';
  3. import { ADD_MESSAGE, CLEAR_MESSAGES, TOGGLE_CHAT } from './actionTypes';
  4. const DEFAULT_STATE = {
  5. isOpen: false,
  6. lastReadMessage: undefined,
  7. messages: []
  8. };
  9. ReducerRegistry.register('features/chat', (state = DEFAULT_STATE, action) => {
  10. switch (action.type) {
  11. case ADD_MESSAGE: {
  12. const newMessage = {
  13. displayName: action.displayName,
  14. error: action.error,
  15. id: action.id,
  16. messageType: action.messageType,
  17. message: action.message,
  18. timestamp: action.timestamp
  19. };
  20. return {
  21. ...state,
  22. lastReadMessage:
  23. action.hasRead ? newMessage : state.lastReadMessage,
  24. messages: [
  25. ...state.messages,
  26. newMessage
  27. ]
  28. };
  29. }
  30. case CLEAR_MESSAGES:
  31. return {
  32. ...state,
  33. lastReadMessage: undefined,
  34. messages: []
  35. };
  36. case TOGGLE_CHAT:
  37. return {
  38. ...state,
  39. isOpen: !state.isOpen,
  40. lastReadMessage: state.messages[state.messages.length - 1]
  41. };
  42. }
  43. return state;
  44. });