feat: conversation participants (#4145)
Fixes #241 Fixes: chatwoot/product#648 Co-authored-by: Aswin Dev P.S <aswindevps@gmail.com> Co-authored-by: Nithin David Thomas <1277421+nithindavid@users.noreply.github.com> Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com> Co-authored-by: Pranav Raj S <pranav@chatwoot.com>
This commit is contained in:
@@ -23,7 +23,7 @@ export const getters = {
|
||||
|
||||
export const actions = {
|
||||
show: async ({ commit }, { conversationId }) => {
|
||||
commit(types.SET_CONVERSATION_WATCHERS_UI_FLAG, {
|
||||
commit(types.SET_CONVERSATION_PARTICIPANTS_UI_FLAG, {
|
||||
isFetching: true,
|
||||
});
|
||||
|
||||
@@ -31,21 +31,21 @@ export const actions = {
|
||||
const response = await ConversationInboxApi.fetchParticipants(
|
||||
conversationId
|
||||
);
|
||||
commit(types.SET_CONVERSATION_WATCHERS, {
|
||||
commit(types.SET_CONVERSATION_PARTICIPANTS, {
|
||||
conversationId,
|
||||
data: response.data,
|
||||
});
|
||||
} catch (error) {
|
||||
throwErrorMessage(error);
|
||||
} finally {
|
||||
commit(types.SET_CONVERSATION_WATCHERS_UI_FLAG, {
|
||||
commit(types.SET_CONVERSATION_PARTICIPANTS_UI_FLAG, {
|
||||
isFetching: false,
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
update: async ({ commit }, { conversationId, userIds }) => {
|
||||
commit(types.SET_CONVERSATION_WATCHERS_UI_FLAG, {
|
||||
commit(types.SET_CONVERSATION_PARTICIPANTS_UI_FLAG, {
|
||||
isUpdating: true,
|
||||
});
|
||||
|
||||
@@ -54,14 +54,14 @@ export const actions = {
|
||||
conversationId,
|
||||
userIds,
|
||||
});
|
||||
commit(types.SET_CONVERSATION_WATCHERS, {
|
||||
commit(types.SET_CONVERSATION_PARTICIPANTS, {
|
||||
conversationId,
|
||||
data: response.data,
|
||||
});
|
||||
} catch (error) {
|
||||
throwErrorMessage(error);
|
||||
} finally {
|
||||
commit(types.SET_CONVERSATION_WATCHERS_UI_FLAG, {
|
||||
commit(types.SET_CONVERSATION_PARTICIPANTS_UI_FLAG, {
|
||||
isUpdating: false,
|
||||
});
|
||||
}
|
||||
@@ -69,14 +69,14 @@ export const actions = {
|
||||
};
|
||||
|
||||
export const mutations = {
|
||||
[types.SET_CONVERSATION_WATCHERS_UI_FLAG]($state, data) {
|
||||
[types.SET_CONVERSATION_PARTICIPANTS_UI_FLAG]($state, data) {
|
||||
$state.uiFlags = {
|
||||
...$state.uiFlags,
|
||||
...data,
|
||||
};
|
||||
},
|
||||
|
||||
[types.SET_CONVERSATION_WATCHERS]($state, { data, conversationId }) {
|
||||
[types.SET_CONVERSATION_PARTICIPANTS]($state, { data, conversationId }) {
|
||||
Vue.set($state.records, conversationId, data);
|
||||
},
|
||||
};
|
||||
|
||||
@@ -91,6 +91,12 @@ const getters = {
|
||||
value => value.id === Number(conversationId)
|
||||
);
|
||||
},
|
||||
getConversationParticipants: _state => {
|
||||
return _state.conversationParticipants;
|
||||
},
|
||||
getConversationLastSeen: _state => {
|
||||
return _state.conversationLastSeen;
|
||||
},
|
||||
};
|
||||
|
||||
export default getters;
|
||||
|
||||
@@ -13,6 +13,8 @@ const state = {
|
||||
currentInbox: null,
|
||||
selectedChatId: null,
|
||||
appliedFilters: [],
|
||||
conversationParticipants: [],
|
||||
conversationLastSeen: null,
|
||||
};
|
||||
|
||||
// mutations
|
||||
|
||||
@@ -12,12 +12,12 @@ describe('#actions', () => {
|
||||
axios.get.mockResolvedValue({ data: { id: 1 } });
|
||||
await actions.show({ commit }, { conversationId: 1 });
|
||||
expect(commit.mock.calls).toEqual([
|
||||
[types.SET_CONVERSATION_WATCHERS_UI_FLAG, { isFetching: true }],
|
||||
[types.SET_CONVERSATION_PARTICIPANTS_UI_FLAG, { isFetching: true }],
|
||||
[
|
||||
types.SET_CONVERSATION_WATCHERS,
|
||||
types.SET_CONVERSATION_PARTICIPANTS,
|
||||
{ conversationId: 1, data: { id: 1 } },
|
||||
],
|
||||
[types.SET_CONVERSATION_WATCHERS_UI_FLAG, { isFetching: false }],
|
||||
[types.SET_CONVERSATION_PARTICIPANTS_UI_FLAG, { isFetching: false }],
|
||||
]);
|
||||
});
|
||||
it('sends correct actions if API is error', async () => {
|
||||
@@ -26,8 +26,8 @@ describe('#actions', () => {
|
||||
actions.show({ commit }, { conversationId: 1 })
|
||||
).rejects.toThrow(Error);
|
||||
expect(commit.mock.calls).toEqual([
|
||||
[types.SET_CONVERSATION_WATCHERS_UI_FLAG, { isFetching: true }],
|
||||
[types.SET_CONVERSATION_WATCHERS_UI_FLAG, { isFetching: false }],
|
||||
[types.SET_CONVERSATION_PARTICIPANTS_UI_FLAG, { isFetching: true }],
|
||||
[types.SET_CONVERSATION_PARTICIPANTS_UI_FLAG, { isFetching: false }],
|
||||
]);
|
||||
});
|
||||
});
|
||||
@@ -40,12 +40,12 @@ describe('#actions', () => {
|
||||
{ conversationId: 2, userIds: [{ id: 2 }] }
|
||||
);
|
||||
expect(commit.mock.calls).toEqual([
|
||||
[types.SET_CONVERSATION_WATCHERS_UI_FLAG, { isUpdating: true }],
|
||||
[types.SET_CONVERSATION_PARTICIPANTS_UI_FLAG, { isUpdating: true }],
|
||||
[
|
||||
types.SET_CONVERSATION_WATCHERS,
|
||||
types.SET_CONVERSATION_PARTICIPANTS,
|
||||
{ conversationId: 2, data: [{ id: 2 }] },
|
||||
],
|
||||
[types.SET_CONVERSATION_WATCHERS_UI_FLAG, { isUpdating: false }],
|
||||
[types.SET_CONVERSATION_PARTICIPANTS_UI_FLAG, { isUpdating: false }],
|
||||
]);
|
||||
});
|
||||
it('sends correct actions if API is error', async () => {
|
||||
@@ -54,8 +54,8 @@ describe('#actions', () => {
|
||||
actions.update({ commit }, { conversationId: 1, content: 'hi' })
|
||||
).rejects.toThrow(Error);
|
||||
expect(commit.mock.calls).toEqual([
|
||||
[types.SET_CONVERSATION_WATCHERS_UI_FLAG, { isUpdating: true }],
|
||||
[types.SET_CONVERSATION_WATCHERS_UI_FLAG, { isUpdating: false }],
|
||||
[types.SET_CONVERSATION_PARTICIPANTS_UI_FLAG, { isUpdating: true }],
|
||||
[types.SET_CONVERSATION_PARTICIPANTS_UI_FLAG, { isUpdating: false }],
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -2,13 +2,13 @@ import types from '../../../mutation-types';
|
||||
import { mutations } from '../../conversationWatchers';
|
||||
|
||||
describe('#mutations', () => {
|
||||
describe('#SET_CONVERSATION_WATCHERS', () => {
|
||||
describe('#SET_CONVERSATION_PARTICIPANTS', () => {
|
||||
it('sets an individual record', () => {
|
||||
let state = {
|
||||
records: {},
|
||||
};
|
||||
|
||||
mutations[types.SET_CONVERSATION_WATCHERS](state, {
|
||||
mutations[types.SET_CONVERSATION_PARTICIPANTS](state, {
|
||||
data: [],
|
||||
conversationId: 1,
|
||||
});
|
||||
@@ -16,7 +16,7 @@ describe('#mutations', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('#SET_CONVERSATION_WATCHERS_UI_FLAG', () => {
|
||||
describe('#SET_CONVERSATION_PARTICIPANTS_UI_FLAG', () => {
|
||||
it('set ui flags', () => {
|
||||
let state = {
|
||||
uiFlags: {
|
||||
@@ -25,7 +25,7 @@ describe('#mutations', () => {
|
||||
},
|
||||
};
|
||||
|
||||
mutations[types.SET_CONVERSATION_WATCHERS_UI_FLAG](state, {
|
||||
mutations[types.SET_CONVERSATION_PARTICIPANTS_UI_FLAG](state, {
|
||||
isFetching: false,
|
||||
});
|
||||
expect(state.uiFlags).toEqual({
|
||||
|
||||
Reference in New Issue
Block a user