feat: Show cc from last email on reply editor (#3983)
* Adds last emails to reply editor * Fixes bug in reply box * Adds test cases * Prevents private notes having cc bcc data * Prevents private notes having cc bcc data * Init reply head with values * fix broken tests Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com> Co-authored-by: Fayaz Ahmed <15716057+fayazara@users.noreply.github.com> Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com>
This commit is contained in:
parent
1de18391b4
commit
eee89bf0d8
5 changed files with 74 additions and 3 deletions
|
@ -190,6 +190,7 @@ export default {
|
||||||
currentChat: 'getSelectedChat',
|
currentChat: 'getSelectedChat',
|
||||||
messageSignature: 'getMessageSignature',
|
messageSignature: 'getMessageSignature',
|
||||||
currentUser: 'getCurrentUser',
|
currentUser: 'getCurrentUser',
|
||||||
|
lastEmail: 'getLastEmailInSelectedChat',
|
||||||
globalConfig: 'globalConfig/get',
|
globalConfig: 'globalConfig/get',
|
||||||
accountId: 'getCurrentAccountId',
|
accountId: 'getCurrentAccountId',
|
||||||
}),
|
}),
|
||||||
|
@ -388,6 +389,8 @@ export default {
|
||||||
} else {
|
} else {
|
||||||
this.replyType = REPLY_EDITOR_MODES.NOTE;
|
this.replyType = REPLY_EDITOR_MODES.NOTE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.setCCEmailFromLastChat();
|
||||||
},
|
},
|
||||||
message(updatedMessage) {
|
message(updatedMessage) {
|
||||||
this.hasSlashCommand =
|
this.hasSlashCommand =
|
||||||
|
@ -409,6 +412,8 @@ export default {
|
||||||
// working even if input/textarea is focussed.
|
// working even if input/textarea is focussed.
|
||||||
document.addEventListener('keydown', this.handleKeyEvents);
|
document.addEventListener('keydown', this.handleKeyEvents);
|
||||||
document.addEventListener('paste', this.onPaste);
|
document.addEventListener('paste', this.onPaste);
|
||||||
|
|
||||||
|
this.setCCEmailFromLastChat();
|
||||||
},
|
},
|
||||||
destroyed() {
|
destroyed() {
|
||||||
document.removeEventListener('keydown', this.handleKeyEvents);
|
document.removeEventListener('keydown', this.handleKeyEvents);
|
||||||
|
@ -650,11 +655,11 @@ export default {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.ccEmails) {
|
if (this.ccEmails && !this.isOnPrivateNote) {
|
||||||
messagePayload.ccEmails = this.ccEmails;
|
messagePayload.ccEmails = this.ccEmails;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.bccEmails) {
|
if (this.bccEmails && !this.isOnPrivateNote) {
|
||||||
messagePayload.bccEmails = this.bccEmails;
|
messagePayload.bccEmails = this.bccEmails;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -667,6 +672,17 @@ export default {
|
||||||
this.bccEmails = value.bccEmails;
|
this.bccEmails = value.bccEmails;
|
||||||
this.ccEmails = value.ccEmails;
|
this.ccEmails = value.ccEmails;
|
||||||
},
|
},
|
||||||
|
setCCEmailFromLastChat() {
|
||||||
|
if (this.lastEmail) {
|
||||||
|
const {
|
||||||
|
content_attributes: { email: emailAttributes = {} },
|
||||||
|
} = this.lastEmail;
|
||||||
|
const cc = emailAttributes.cc || [];
|
||||||
|
const bcc = emailAttributes.bcc || [];
|
||||||
|
this.ccEmails = cc.join(', ');
|
||||||
|
this.bccEmails = bcc.join(', ');
|
||||||
|
}
|
||||||
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -83,6 +83,10 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
mounted() {
|
||||||
|
this.ccEmailsVal = this.ccEmails;
|
||||||
|
this.bccEmailsVal = this.bccEmails;
|
||||||
|
},
|
||||||
validations: {
|
validations: {
|
||||||
ccEmailsVal: {
|
ccEmailsVal: {
|
||||||
hasValidEmails(value) {
|
hasValidEmails(value) {
|
||||||
|
|
|
@ -70,7 +70,7 @@ export default {
|
||||||
return this.emailAttributes.subject || '';
|
return this.emailAttributes.subject || '';
|
||||||
},
|
},
|
||||||
showHead() {
|
showHead() {
|
||||||
return this.toMails || this.ccMails || this.bccMails;
|
return this.toMails || this.ccMails || this.bccMails || this.fromMail;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import authAPI from '../../../api/auth';
|
import authAPI from '../../../api/auth';
|
||||||
|
import { MESSAGE_TYPE } from 'shared/constants/messages';
|
||||||
import { applyPageFilters } from './helpers';
|
import { applyPageFilters } from './helpers';
|
||||||
|
|
||||||
export const getSelectedChatConversation = ({
|
export const getSelectedChatConversation = ({
|
||||||
|
@ -19,6 +20,26 @@ const getters = {
|
||||||
);
|
);
|
||||||
return selectedChat || {};
|
return selectedChat || {};
|
||||||
},
|
},
|
||||||
|
getLastEmailInSelectedChat: (stage, _getters) => {
|
||||||
|
const selectedChat = _getters.getSelectedChat;
|
||||||
|
const { messages = [] } = selectedChat;
|
||||||
|
const lastEmail = [...messages].reverse().find(message => {
|
||||||
|
const {
|
||||||
|
content_attributes: contentAttributes = {},
|
||||||
|
message_type: messageType,
|
||||||
|
} = message;
|
||||||
|
const { email = {} } = contentAttributes;
|
||||||
|
const isIncomingOrOutgoing =
|
||||||
|
messageType === MESSAGE_TYPE.OUTGOING ||
|
||||||
|
messageType === MESSAGE_TYPE.INCOMING;
|
||||||
|
if (email.from && isIncomingOrOutgoing) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
return lastEmail;
|
||||||
|
},
|
||||||
getMineChats: _state => activeFilters => {
|
getMineChats: _state => activeFilters => {
|
||||||
const currentUserID = authAPI.getCurrentUser().id;
|
const currentUserID = authAPI.getCurrentUser().id;
|
||||||
|
|
||||||
|
|
|
@ -131,4 +131,34 @@ describe('#getters', () => {
|
||||||
expect(getters.getAppliedConversationFilters(state)).toEqual(filtersList);
|
expect(getters.getAppliedConversationFilters(state)).toEqual(filtersList);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('#getLastEmailInSelectedChat', () => {
|
||||||
|
it('Returns cc in last email', () => {
|
||||||
|
const state = {};
|
||||||
|
const getSelectedChat = {
|
||||||
|
messages: [
|
||||||
|
{
|
||||||
|
message_type: 1,
|
||||||
|
content_attributes: {
|
||||||
|
email: {
|
||||||
|
from: 'why@how.my',
|
||||||
|
cc: ['nithin@me.co', 'we@who.why'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
expect(
|
||||||
|
getters.getLastEmailInSelectedChat(state, { getSelectedChat })
|
||||||
|
).toEqual({
|
||||||
|
message_type: 1,
|
||||||
|
content_attributes: {
|
||||||
|
email: {
|
||||||
|
from: 'why@how.my',
|
||||||
|
cc: ['nithin@me.co', 'we@who.why'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue