12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- // @flow
-
- import { ReducerRegistry } from '../base/redux';
-
- import {
- ADD_MESSAGE,
- CLEAR_MESSAGES,
- CLOSE_CHAT,
- OPEN_CHAT,
- SET_PRIVATE_MESSAGE_RECIPIENT,
- SET_IS_POLL_TAB_FOCUSED
- } from './actionTypes';
-
- const DEFAULT_STATE = {
- isOpen: false,
- isPollsTabFocused: false,
- lastReadMessage: undefined,
- lastReadPoll: undefined,
- messages: [],
- nbUnreadMessages: 0,
- privateMessageRecipient: undefined
- };
-
- ReducerRegistry.register('features/chat', (state = DEFAULT_STATE, action) => {
- switch (action.type) {
- case ADD_MESSAGE: {
- const newMessage = {
- displayName: action.displayName,
- error: action.error,
- id: action.id,
- isReaction: action.isReaction,
- messageType: action.messageType,
- message: action.message,
- privateMessage: action.privateMessage,
- recipient: action.recipient,
- timestamp: action.timestamp
- };
-
- // React native, unlike web, needs a reverse sorted message list.
- const messages = navigator.product === 'ReactNative'
- ? [
- newMessage,
- ...state.messages
- ]
- : [
- ...state.messages,
- newMessage
- ];
-
- return {
- ...state,
- lastReadMessage:
- action.hasRead ? newMessage : state.lastReadMessage,
- nbUnreadMessages: state.isPollsTabFocused ? state.nbUnreadMessages + 1 : state.nbUnreadMessages,
- messages
- };
- }
-
- case CLEAR_MESSAGES:
- return {
- ...state,
- lastReadMessage: undefined,
- messages: []
- };
-
- case SET_PRIVATE_MESSAGE_RECIPIENT:
- return {
- ...state,
- privateMessageRecipient: action.participant
- };
-
- case OPEN_CHAT:
- return {
- ...state,
- isOpen: true,
- privateMessageRecipient: action.participant
- };
-
- case CLOSE_CHAT:
- return {
- ...state,
- isOpen: false,
- lastReadMessage: state.messages[
- navigator.product === 'ReactNative' ? 0 : state.messages.length - 1],
- privateMessageRecipient: action.participant
- };
-
- case SET_IS_POLL_TAB_FOCUSED: {
- return {
- ...state,
- isPollsTabFocused: action.isPollsTabFocused,
- nbUnreadMessages: 0
- }; }
- }
-
- return state;
- });
|