Feature: Move to the next conversation when I resolve a the current c… (#757)
* Feature: Move to the next conversation when I resolve a the current conversation * check if nextId is present before emitting the event * use es6 string literals * use a named variable for better reading * create a variable for better readability * better sintax to get clickable element * after last, go to first chat when resolve * use state and action to set next chat * remove not used emit * clear selected state when there is not next chat * Remove deprecated scope from FB Channel (#761) Remove deprecated scope from FB Channel * Feature: Customise the position of messenger (#767) Co-authored-by: Nithin David Thomas <webofnithin@gmail.com> * Bug: Redirect user to set new password screen (#772) * auto linter * fix js linter * sort chats on getter / filter before getting next chat * Revert not related changes on ConversationCard.vue * add test for getNextChatConversation getter * remove not used module * add test for getAllConversations getter
This commit is contained in:
@@ -157,11 +157,7 @@ export default {
|
|||||||
} else {
|
} else {
|
||||||
copyList = this.allChatList.slice();
|
copyList = this.allChatList.slice();
|
||||||
}
|
}
|
||||||
const sorted = copyList.sort(
|
return copyList;
|
||||||
(a, b) =>
|
|
||||||
this.lastMessage(b).created_at - this.lastMessage(a).created_at
|
|
||||||
);
|
|
||||||
return sorted;
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -120,13 +120,19 @@ const actions = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
toggleStatus: async ({ commit }, data) => {
|
toggleStatus: async ({ commit, dispatch, getters }, data) => {
|
||||||
try {
|
try {
|
||||||
|
const nextChat = getters.getNextChatConversation;
|
||||||
const response = await ConversationApi.toggleStatus(data);
|
const response = await ConversationApi.toggleStatus(data);
|
||||||
commit(
|
commit(
|
||||||
types.default.RESOLVE_CONVERSATION,
|
types.default.RESOLVE_CONVERSATION,
|
||||||
response.data.payload.current_status
|
response.data.payload.current_status
|
||||||
);
|
);
|
||||||
|
if (nextChat) {
|
||||||
|
dispatch('setActiveChat', nextChat);
|
||||||
|
} else {
|
||||||
|
dispatch('clearSelectedState');
|
||||||
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// Handle error
|
// Handle error
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,9 @@ export const getSelectedChatConversation = ({
|
|||||||
|
|
||||||
// getters
|
// getters
|
||||||
const getters = {
|
const getters = {
|
||||||
getAllConversations: ({ allConversations }) => allConversations,
|
getAllConversations: ({ allConversations }) => allConversations.sort(
|
||||||
|
(a, b) => b.messages.last().created_at - a.messages.last().created_at
|
||||||
|
),
|
||||||
getSelectedChat: ({ selectedChat }) => selectedChat,
|
getSelectedChat: ({ selectedChat }) => selectedChat,
|
||||||
getMineChats(_state) {
|
getMineChats(_state) {
|
||||||
const currentUserID = authAPI.getCurrentUser().id;
|
const currentUserID = authAPI.getCurrentUser().id;
|
||||||
@@ -50,6 +52,18 @@ const getters = {
|
|||||||
getChatStatusFilter: ({ chatStatusFilter }) => chatStatusFilter,
|
getChatStatusFilter: ({ chatStatusFilter }) => chatStatusFilter,
|
||||||
getSelectedInbox: ({ currentInbox }) => currentInbox,
|
getSelectedInbox: ({ currentInbox }) => currentInbox,
|
||||||
getConvTabStats: ({ convTabStats }) => convTabStats,
|
getConvTabStats: ({ convTabStats }) => convTabStats,
|
||||||
|
getNextChatConversation: (_state) => {
|
||||||
|
const { selectedChat } = _state;
|
||||||
|
const conversations = getters.getAllStatusChats(_state);
|
||||||
|
if (conversations.length <= 1) {
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
const currentIndex = conversations.findIndex(
|
||||||
|
conversation => conversation.id === selectedChat.id
|
||||||
|
);
|
||||||
|
const nextIndex = (currentIndex + 1) % conversations.length;
|
||||||
|
return conversations[nextIndex];
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default getters;
|
export default getters;
|
||||||
|
|||||||
@@ -0,0 +1,83 @@
|
|||||||
|
import commonHelpers from '../../../../helper/commons';
|
||||||
|
import getters from '../../conversations/getters';
|
||||||
|
|
||||||
|
// loads .last() helper
|
||||||
|
commonHelpers();
|
||||||
|
|
||||||
|
describe('#getters', () => {
|
||||||
|
describe('#getAllConversations', () => {
|
||||||
|
it('order conversations based on last message date', () => {
|
||||||
|
const state = {
|
||||||
|
allConversations: [
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
messages: [
|
||||||
|
{
|
||||||
|
created_at: 1466424480,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 2,
|
||||||
|
messages: [
|
||||||
|
{
|
||||||
|
created_at: 2466424490,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
expect(getters.getAllConversations(state)).toEqual([
|
||||||
|
{
|
||||||
|
id: 2,
|
||||||
|
messages: [
|
||||||
|
{
|
||||||
|
created_at: 2466424490,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
messages: [
|
||||||
|
{
|
||||||
|
created_at: 1466424480,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
describe('#getNextChatConversation', () => {
|
||||||
|
it('return the next chat', () => {
|
||||||
|
const state = {
|
||||||
|
allConversations: [
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 2,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
selectedChat: {
|
||||||
|
id: 1,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
expect(getters.getNextChatConversation(state)).toEqual({
|
||||||
|
id: 2,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
it('return null when there is only one chat', () => {
|
||||||
|
const state = {
|
||||||
|
allConversations: [
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
selectedChat: {
|
||||||
|
id: 1,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
expect(getters.getNextChatConversation(state)).toBeNull();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user