@cometchat/chat-uikit-angular
Version:
Ready-to-use Chat UI Components for Angular (JavaScript/Web)
115 lines • 19.4 kB
JavaScript
import { CometChat } from "@cometchat/chat-sdk-javascript";
import { CometChatMessageEvents, CometChatUIEvents, CometChatUIKitConstants, MessageStatus } from "@cometchat/uikit-resources";
import { CometChatSoundManager, SmartRepliesConfiguration, CometChatUIKitUtility } from "@cometchat/uikit-shared";
import { DataSourceDecorator } from "../../Shared/Framework/DataSourceDecorator";
export class SmartReplyExtensionDecorator extends DataSourceDecorator {
constructor(dataSource) {
super(dataSource);
this.LISTENER_ID = "smartreply__listener";
this.currentMessage = null;
this.sendReply = (reply, message, onError, customSoundForMessages = "", disableSoundForMessages = false) => {
let ReceiverType = this.activeUser ? CometChatUIKitConstants.MessageReceiverType.user : CometChatUIKitConstants.MessageReceiverType.group;
if (reply && reply.trim().length > 0 && message) {
let newMessage;
if (message.getReceiverType() === CometChatUIKitConstants.MessageReceiverType.user) {
newMessage = new CometChat.TextMessage(message.getSender().getUid(), reply.trim(), ReceiverType);
newMessage.setReceiver(this.activeUser);
}
else {
const group = message.getReceiver();
newMessage = new CometChat.TextMessage(group.getGuid(), reply.trim(), ReceiverType);
newMessage.setReceiver(this.activeGroup);
}
if (message.getParentMessageId() > 0) {
newMessage.setParentMessageId(message.getParentMessageId());
}
newMessage.setCategory(CometChatUIKitConstants.MessageCategory.message);
newMessage.setSender(this.loggedInUser);
newMessage.setSentAt(CometChatUIKitUtility.getUnixTimestamp());
newMessage.setMuid(CometChatUIKitUtility.ID());
CometChatMessageEvents.ccMessageSent.next({
message: newMessage,
status: MessageStatus.inprogress
});
if (!disableSoundForMessages) {
CometChatSoundManager.play(customSoundForMessages ?? CometChatSoundManager.Sound.outgoingMessage);
}
CometChat.sendMessage(newMessage).then((message) => {
CometChatMessageEvents.ccMessageSent.next({
message: message,
status: MessageStatus.success
});
})
.catch((error) => {
newMessage.setMetadata({
error: true
});
CometChatMessageEvents.ccMessageSent.next({
message: newMessage,
status: MessageStatus.error
});
});
}
};
this.configuration = new SmartRepliesConfiguration({});
this.addMessageListener();
this.configuration.ccSmartRepliesClicked = this.sendReply;
}
addMessageListener() {
CometChat.getLoggedinUser().then((user) => {
this.loggedInUser = user;
}).catch((error) => {
console.log(error);
});
CometChat.addMessageListener(this.LISTENER_ID, {
onTextMessageReceived: (textMessage) => {
if (textMessage != null) {
if (textMessage.getReceiverType() === CometChatUIKitConstants.MessageReceiverType.user &&
this.activeUser != null) {
if (textMessage.getSender() != null &&
textMessage.getSender().getUid() != null &&
this.activeUser.getUid() == textMessage.getSender().getUid()) {
CometChatUIEvents.ccShowPanel.next({
configuration: this.configuration,
message: textMessage
});
}
}
else if (textMessage.getReceiverType() === CometChatUIKitConstants.MessageReceiverType.group &&
this.activeGroup != null) {
if (this.activeGroup.getGuid() != null &&
this.activeGroup.getGuid() == textMessage.getReceiverId()) {
CometChatUIEvents.ccShowPanel.next({
configuration: this.configuration,
message: textMessage
});
}
}
}
},
});
CometChatUIEvents.ccActiveChatChanged.subscribe((data) => {
this.currentMessage = data.message;
this.activeUser = data.user;
this.activeGroup = data.group;
if (data.message != null && data.message.getType() == CometChatUIKitConstants.MessageTypes.text &&
data.message.getSender() != null &&
this.loggedInUser != null &&
data.message.getSender().getUid() != null &&
data.message.getSender().getUid() != this.loggedInUser.getUid()) {
CometChatUIEvents.ccShowPanel.next({
configuration: this.configuration,
message: data.message
});
}
});
CometChatMessageEvents.ccMessageSent.subscribe(() => {
CometChatUIEvents.ccHidePanel.next();
this.currentMessage = null;
});
}
getId() {
return "smartreply";
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU21hcnRSZXBsaWVzRXh0ZW5zaW9uRGVjb3JhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhdC11aWtpdC1hbmd1bGFyL3NyYy9FeHRlbnNpb25zL1NtYXJ0UmVwbGllcy9TbWFydFJlcGxpZXNFeHRlbnNpb25EZWNvcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUvSCxPQUFPLEVBQUUscUJBQXFCLEVBQUUseUJBQXlCLEVBQW9CLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFcEksT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDakYsTUFBTSxPQUFPLDRCQUE2QixTQUFRLG1CQUFtQjtJQU9uRSxZQUFZLFVBQXFCO1FBQ2pDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQU5ULGdCQUFXLEdBQVcsc0JBQXNCLENBQUM7UUFHOUMsbUJBQWMsR0FBZ0MsSUFBSSxDQUFDO1FBUTVELGNBQVMsR0FBRyxDQUFDLEtBQVksRUFBRSxPQUE2QixFQUFDLE9BQXVFLEVBQUMseUJBQWdDLEVBQUUsRUFBRSwwQkFBa0MsS0FBSyxFQUFDLEVBQUU7WUFDN00sSUFBSSxZQUFZLEdBQVUsSUFBSSxDQUFDLFVBQVUsQ0FBRSxDQUFDLENBQUMsdUJBQXVCLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUE7WUFDakosSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUssT0FBTyxFQUFFO2dCQUNoRCxJQUFJLFVB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Q0FBQyxDQUFBO0lBQ0osQ0FBQztJQUNVLEtBQUs7UUFDWixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21ldENoYXQgfSBmcm9tIFwiQGNvbWV0Y2hhdC9jaGF0LXNkay1qYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyBDb21ldENoYXRNZXNzYWdlRXZlbnRzLCBDb21ldENoYXRVSUV2ZW50cywgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMsIE1lc3NhZ2VTdGF0dXMgfSBmcm9tIFwiQGNvbWV0Y2hhdC91aWtpdC1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IElBY3RpdmVDaGF0Q2hhbmdlZCB9IGZyb20gXCJAY29tZXRjaGF0L3Vpa2l0LXJlc291cmNlc1wiO1xuaW1wb3J0IHsgQ29tZXRDaGF0U291bmRNYW5hZ2VyLCBTbWFydFJlcGxpZXNDb25maWd1cmF0aW9uLCBTbWFydFJlcGxpZXNTdHlsZSxDb21ldENoYXRVSUtpdFV0aWxpdHkgfSBmcm9tIFwiQGNvbWV0Y2hhdC91aWtpdC1zaGFyZWRcIjtcbmltcG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tIFwiLi4vLi4vU2hhcmVkL0ZyYW1ld29yay9EYXRhU291cmNlXCI7XG5pbXBvcnQgeyBEYXRhU291cmNlRGVjb3JhdG9yIH0gZnJvbSBcIi4uLy4uL1NoYXJlZC9GcmFtZXdvcmsvRGF0YVNvdXJjZURlY29yYXRvclwiO1xuZXhwb3J0IGNsYXNzIFNtYXJ0UmVwbHlFeHRlbnNpb25EZWNvcmF0b3IgZXh0ZW5kcyBEYXRhU291cmNlRGVjb3JhdG9yIHtcbiAgcHVibGljIGNvbmZpZ3VyYXRpb24/OlNtYXJ0UmVwbGllc0NvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgTElTVEVORVJfSUQ6IHN0cmluZyA9IFwic21hcnRyZXBseV9fbGlzdGVuZXJcIjtcbiAgcHJpdmF0ZSBhY3RpdmVVc2VyITogQ29tZXRDaGF0LlVzZXI7XG4gIHByaXZhdGUgYWN0aXZlR3JvdXAhOiBDb21ldENoYXQuR3JvdXA7XG4gIHB1YmxpYyBjdXJyZW50TWVzc2FnZTpDb21ldENoYXQuQmFzZU1lc3NhZ2UgfCBudWxsID0gbnVsbDtcbiAgcHVibGljIGxvZ2dlZEluVXNlciE6Q29tZXRDaGF0LlVzZXIgfCBudWxsO1xuICBjb25zdHJ1Y3RvcihkYXRhU291cmNlOkRhdGFTb3VyY2Upe1xuICBzdXBlcihkYXRhU291cmNlKVxuICB0aGlzLmNvbmZpZ3VyYXRpb24gID0gbmV3IFNtYXJ0UmVwbGllc0NvbmZpZ3VyYXRpb24oe30pO1xuICB0aGlzLmFkZE1lc3NhZ2VMaXN0ZW5lcigpO1xuICB0aGlzLmNvbmZpZ3VyYXRpb24hLmNjU21hcnRSZXBsaWVzQ2xpY2tlZCA9IHRoaXMuc2VuZFJlcGx5XG59XG5zZW5kUmVwbHkgPSAocmVwbHk6c3RyaW5nLCBtZXNzYWdlOkNvbWV0Q2hhdC5CYXNlTWVzc2FnZSxvbkVycm9yOigoZXJyb3I6Q29tZXRDaGF0LkNvbWV0Q2hhdEV4Y2VwdGlvbik9PnZvaWQpIHwgbnVsbCB8IHVuZGVmaW5lZCxjdXN0b21Tb3VuZEZvck1lc3NhZ2VzOnN0cmluZyA9IFwiXCIsIGRpc2FibGVTb3VuZEZvck1lc3NhZ2VzOmJvb2xlYW4gPSBmYWxzZSk9PntcbiAgbGV0IFJlY2VpdmVyVHlwZTpzdHJpbmcgPSB0aGlzLmFjdGl2ZVVzZXIgID8gQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVJlY2VpdmVyVHlwZS51c2VyIDogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVJlY2VpdmVyVHlwZS5ncm91cFxuICBpZiAocmVwbHkgJiYgcmVwbHkudHJpbSgpLmxlbmd0aCA+IDAgJiYgIG1lc3NhZ2UpIHtcbiAgICBsZXQgbmV3TWVzc2FnZTogQ29tZXRDaGF0LlRleHRNZXNzYWdlO1xuICAgIGlmIChtZXNzYWdlLmdldFJlY2VpdmVyVHlwZSgpID09PSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlUmVjZWl2ZXJUeXBlLnVzZXIpIHtcbiAgICAgIG5ld01lc3NhZ2UgPSBuZXcgQ29tZXRDaGF0LlRleHRNZXNzYWdlKFxuICAgICAgICAgICAgbWVzc2FnZS5nZXRTZW5kZXIoKS5nZXRVaWQoKSxcbiAgICAgICAgICAgIHJlcGx5LnRyaW0oKSxcbiAgICAgICAgICAgIFJlY2VpdmVyVHlwZVxuICAgICAgICApO1xuICAgICAgICBuZXdNZXNzYWdlLnNldFJlY2VpdmVyKHRoaXMuYWN0aXZlVXNlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZ3JvdXA6IENvbWV0Q2hhdC5Hcm91cCA9IG1lc3NhZ2UuZ2V0UmVjZWl2ZXIoKSBhcyBDb21ldENoYXQuR3JvdXA7XG4gICAgICAgIG5ld01lc3NhZ2UgPSBuZXcgQ29tZXRDaGF0LlRleHRNZXNzYWdlKFxuICAgICAgICAgICAgZ3JvdXAuZ2V0R3VpZCgpLFxuICAgICAgICAgICAgcmVwbHkudHJpbSgpLFxuICAgICAgICAgICAgUmVjZWl2ZXJUeXBlXG4gICAgICAgICk7XG4gICAgICAgIG5ld01lc3NhZ2Uuc2V0UmVjZWl2ZXIodGhpcy5hY3RpdmVHcm91cCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmdldFBhcmVudE1lc3NhZ2VJZCgpID4gMCkge1xuICAgICAgbmV3TWVzc2FnZS5zZXRQYXJlbnRNZXNzYWdlSWQobWVzc2FnZS5nZXRQYXJlbnRNZXNzYWdlSWQoKSk7XG4gICAgfVxuICAgIG5ld01lc3NhZ2Uuc2V0Q2F0ZWdvcnkoQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5Lm1lc3NhZ2UgYXMgQ29tZXRDaGF0Lk1lc3NhZ2VDYXRlZ29yeSk7XG4gICAgbmV3TWVzc2FnZS5zZXRTZW5kZXIodGhpcy5sb2dnZWRJblVzZXIhKTtcbiAgICBuZXdNZXNzYWdlLnNldFNlbnRBdChDb21ldENoYXRVSUtpdFV0aWxpdHkuZ2V0VW5peFRpbWVzdGFtcCgpKTtcbiAgICBuZXdNZXNzYWdlLnNldE11aWQoQ29tZXRDaGF0VUlLaXRVdGlsaXR5LklEKCkpO1xuICAgIENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMuY2NNZXNzYWdlU2VudC5uZXh0KHtcbiAgICAgIG1lc3NhZ2U6bmV3TWVzc2FnZSxcbiAgICAgIHN0YXR1czpNZXNzYWdlU3RhdHVzLmlucHJvZ3Jlc3NcbiAgICB9KVxuICAgIGlmICghZGlzYWJsZVNvdW5kRm9yTWVzc2FnZXMpIHtcbiAgICAgIENvbWV0Q2hhdFNvdW5kTWFuYWdlci5wbGF5KGN1c3RvbVNvdW5kRm9yTWVzc2FnZXMgPz8gQ29tZXRDaGF0U291bmRNYW5hZ2VyLlNvdW5kLm91dGdvaW5nTWVzc2FnZSlcbiAgICB9XG5Db21ldENoYXQuc2VuZE1lc3NhZ2UobmV3TWVzc2FnZSkudGhlbigobWVzc2FnZTpDb21ldENoYXQuQmFzZU1lc3NhZ2UpPT57XG4gIENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMuY2NNZXNzYWdlU2VudC5uZXh0KHtcbiAgICBtZXNzYWdlOm1lc3NhZ2UsXG4gICAgc3RhdHVzOk1lc3NhZ2VTdGF0dXMuc3VjY2Vzc1xuICB9KVxufSlcbi5jYXRjaCgoZXJyb3I6Q29tZXRDaGF0LkNvbWV0Q2hhdEV4Y2VwdGlvbik9PntcbiAgbmV3TWVzc2FnZS5zZXRNZXRhZGF0YSh7XG4gICAgZXJyb3I6dHJ1ZVxuICB9KVxuICBDb21ldENoYXRNZXNzYWdlRXZlbnRzLmNjTWVzc2FnZVNlbnQubmV4dCh7XG4gICAgbWVzc2FnZTpuZXdNZXNzYWdlLFxuICAgIHN0YXR1czpNZXNzYWdlU3RhdHVzLmVycm9yXG4gIH0pXG59KVxufVxufVxucHJpdmF0ZSBhZGRNZXNzYWdlTGlzdGVuZXIoKTogdm9pZCB7XG5Db21ldENoYXQuZ2V0TG9nZ2VkaW5Vc2VyKCkudGhlbigodXNlcjpDb21ldENoYXQuVXNlciB8IG51bGwpPT57XG4gIHRoaXMubG9nZ2VkSW5Vc2VyID0gdXNlclxufSkuY2F0Y2goKGVycm9yOkNvbWV0Q2hhdC5Db21ldENoYXRFeGNlcHRpb24pPT57XG4gIGNvbnNvbGUubG9nKGVycm9yKVxufSlcbiAgQ29tZXRDaGF0LmFkZE1lc3NhZ2VMaXN0ZW5lcih0aGlzLkxJU1RFTkVSX0lELCB7XG4gICAgb25UZXh0TWVzc2FnZVJlY2VpdmVkOiAodGV4dE1lc3NhZ2U6IENvbWV0Q2hhdC5UZXh0TWVzc2FnZSkgPT4ge1xuICAgICAgaWYgKHRleHRNZXNzYWdlICE9IG51bGwpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRleHRNZXNzYWdlLmdldFJlY2VpdmVyVHlwZSgpID09PSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlUmVjZWl2ZXJUeXBlLnVzZXIgJiZcbiAgICAgICAgICB0aGlzLmFjdGl2ZVVzZXIgIT0gbnVsbFxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0ZXh0TWVzc2FnZS5nZXRTZW5kZXIoKSAhPSBudWxsICYmXG4gICAgICAgICAgICB0ZXh0TWVzc2FnZS5nZXRTZW5kZXIoKS5nZXRVaWQoKSAhPSBudWxsICYmXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVVzZXIuZ2V0VWlkKCkgPT0gdGV4dE1lc3NhZ2UuZ2V0U2VuZGVyKCkuZ2V0VWlkKClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIENvbWV0Q2hhdFVJRXZlbnRzLmNjU2hvd1BhbmVsLm5leHQoe1xuICAgICAgICAgICAgICBjb25maWd1cmF0aW9uOnRoaXMuY29uZmlndXJhdGlvbiEsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6dGV4dE1lc3NhZ2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICB0ZXh0TWVzc2FnZS5nZXRSZWNlaXZlclR5cGUoKSA9PT0gQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVJlY2VpdmVyVHlwZS5ncm91cCAmJlxuICAgICAgICAgIHRoaXMuYWN0aXZlR3JvdXAgIT0gbnVsbFxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUdyb3VwLmdldEd1aWQoKSAhPSBudWxsICYmXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUdyb3VwLmdldEd1aWQoKSA9PSB0ZXh0TWVzc2FnZS5nZXRSZWNlaXZlcklkKClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIENvbWV0Q2hhdFVJRXZlbnRzLmNjU2hvd1BhbmVsLm5leHQoe1xuICAgICAgICAgICAgICBjb25maWd1cmF0aW9uOnRoaXMuY29uZmlndXJhdGlvbiEsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6dGV4dE1lc3NhZ2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuICAgIENvbWV0Q2hhdFVJRXZlbnRzLmNjQWN0aXZlQ2hhdENoYW5nZWQuc3Vic2NyaWJlKChkYXRhOklBY3RpdmVDaGF0Q2hhbmdlZCk9PntcbiAgICAgIHRoaXMuY3VycmVudE1lc3NhZ2UgPSBkYXRhLm1lc3NhZ2UhO1xuICAgICAgdGhpcy5hY3RpdmVVc2VyID0gZGF0YS51c2VyITtcbiAgICAgIHRoaXMuYWN0aXZlR3JvdXAgPSBkYXRhLmdyb3VwITtcbiAgICAgIGlmIChcbiAgICAgICAgZGF0YS5tZXNzYWdlICE9IG51bGwgJiYgZGF0YS5tZXNzYWdlLmdldFR5cGUoKSA9PSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMudGV4dCAmJlxuICAgICAgICBkYXRhLm1lc3NhZ2UuZ2V0U2VuZGVyKCkgIT0gbnVsbCAmJlxuICAgICAgICB0aGlzLmxvZ2dlZEluVXNlciAhPSBudWxsICYmXG4gICAgICAgIGRhdGEubWVzc2FnZS5nZXRTZW5kZXIoKS5nZXRVaWQoKSAhPSBudWxsICYmXG4gICAgICAgIGRhdGEubWVzc2FnZS5nZXRTZW5kZXIoKS5nZXRVaWQoKSAhPSB0aGlzLmxvZ2dlZEluVXNlci5nZXRVaWQoKVxuICAgICAgKSB7XG4gICAgICAgIENvbWV0Q2hhdFVJRXZlbnRzLmNjU2hvd1BhbmVsLm5leHQoe1xuICAgICAgICAgIGNvbmZpZ3VyYXRpb246dGhpcy5jb25maWd1cmF0aW9uISxcbiAgICAgICAgICBtZXNzYWdlOmRhdGEubWVzc2FnZSFcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSlcbiAgQ29tZXRDaGF0TWVzc2FnZUV2ZW50cy5jY01lc3NhZ2VTZW50LnN1YnNjcmliZSgoKT0+e1xuICAgIENvbWV0Q2hhdFVJRXZlbnRzLmNjSGlkZVBhbmVsLm5leHQoKVxuICAgIHRoaXMuY3VycmVudE1lc3NhZ2UgPSBudWxsXG4gIH0pXG59XG4gIG92ZXJyaWRlIGdldElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwic21hcnRyZXBseVwiO1xuICB9XG59XG4iXX0=