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:
Bruno Almeida
2020-05-14 10:13:02 +02:00
committed by GitHub
parent e6bf81caf4
commit 1108446974
4 changed files with 106 additions and 7 deletions

View File

@@ -157,11 +157,7 @@ export default {
} else {
copyList = this.allChatList.slice();
}
const sorted = copyList.sort(
(a, b) =>
this.lastMessage(b).created_at - this.lastMessage(a).created_at
);
return sorted;
return copyList;
},
},
};

View File

@@ -120,13 +120,19 @@ const actions = {
}
},
toggleStatus: async ({ commit }, data) => {
toggleStatus: async ({ commit, dispatch, getters }, data) => {
try {
const nextChat = getters.getNextChatConversation;
const response = await ConversationApi.toggleStatus(data);
commit(
types.default.RESOLVE_CONVERSATION,
response.data.payload.current_status
);
if (nextChat) {
dispatch('setActiveChat', nextChat);
} else {
dispatch('clearSelectedState');
}
} catch (error) {
// Handle error
}

View File

@@ -8,7 +8,9 @@ export const getSelectedChatConversation = ({
// 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,
getMineChats(_state) {
const currentUserID = authAPI.getCurrentUser().id;
@@ -50,6 +52,18 @@ const getters = {
getChatStatusFilter: ({ chatStatusFilter }) => chatStatusFilter,
getSelectedInbox: ({ currentInbox }) => currentInbox,
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;

View File

@@ -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();
});
});
});