53 lines
1.2 KiB
JavaScript
53 lines
1.2 KiB
JavaScript
// @flow
|
|
|
|
import { ReducerRegistry } from '../base/redux';
|
|
|
|
import { ADD_MESSAGE, CLEAR_MESSAGES, TOGGLE_CHAT } from './actionTypes';
|
|
|
|
const DEFAULT_STATE = {
|
|
isOpen: false,
|
|
lastReadMessage: undefined,
|
|
messages: []
|
|
};
|
|
|
|
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,
|
|
messageType: action.messageType,
|
|
message: action.message,
|
|
timestamp: action.timestamp
|
|
};
|
|
|
|
return {
|
|
...state,
|
|
lastReadMessage:
|
|
action.hasRead ? newMessage : state.lastReadMessage,
|
|
messages: [
|
|
...state.messages,
|
|
newMessage
|
|
]
|
|
};
|
|
}
|
|
|
|
case CLEAR_MESSAGES:
|
|
return {
|
|
...state,
|
|
lastReadMessage: undefined,
|
|
messages: []
|
|
};
|
|
|
|
case TOGGLE_CHAT:
|
|
return {
|
|
...state,
|
|
isOpen: !state.isOpen,
|
|
lastReadMessage: state.messages[state.messages.length - 1]
|
|
};
|
|
}
|
|
|
|
return state;
|
|
});
|