feat: Updates widget message state to support multiple conversations
This commit is contained in:
51
app/javascript/widget/store/modules/message/mutations.js
Normal file
51
app/javascript/widget/store/modules/message/mutations.js
Normal file
@@ -0,0 +1,51 @@
|
||||
import Vue from 'vue';
|
||||
|
||||
export const mutations = {
|
||||
addMessagesEntry($state, { messages = [] }) {
|
||||
messages.forEach(message => {
|
||||
Vue.set($state.messages.byId, message.id, message);
|
||||
});
|
||||
},
|
||||
|
||||
addMessageIds($state, { messages }) {
|
||||
const messageIds = messages.map(message => message.id);
|
||||
const allIds = $state.messages.allIds;
|
||||
const newIds = [allIds, messageIds];
|
||||
const uniqIds = Array.from(new Set(newIds));
|
||||
|
||||
Vue.set($state.messages, 'allIds', uniqIds);
|
||||
},
|
||||
|
||||
updateMessageEntry($state, message) {
|
||||
const messageId = message.id;
|
||||
if (!messageId) return;
|
||||
|
||||
const messageById = $state.messages.byId[messageId];
|
||||
if (!messageById) return;
|
||||
if (messageId !== message.id) return;
|
||||
|
||||
Vue.set($state.messages.byId, messageId, { ...message });
|
||||
},
|
||||
|
||||
removeMessageEntry($state, messageId) {
|
||||
if (!messageId) return;
|
||||
|
||||
Vue.delete($state.messages.byId, messageId);
|
||||
},
|
||||
|
||||
removeMessageId($state, messageId) {
|
||||
if (!messageId) return;
|
||||
|
||||
$state.messages.allIds = $state.messages.allIds.filter(
|
||||
id => id !== messageId
|
||||
);
|
||||
},
|
||||
|
||||
setMessageUIFlag($state, { messageId, uiFlags }) {
|
||||
const flags = $state.messages.uiFlags.byId[messageId];
|
||||
$state.messages.uiFlags.byId[messageId] = {
|
||||
...flags,
|
||||
...uiFlags,
|
||||
};
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user