UNPKG

@cometchat/chat-uikit-angular

Version:

Ready-to-use Chat UI Components for Angular (JavaScript/Web)

499 lines 110 kB
import { Component, ViewChild, Input, ChangeDetectionStrategy } from "@angular/core"; import { CometChat } from "@cometchat/chat-sdk-javascript"; import { WithMessagesStyle, MessagesConfiguration, GroupsConfiguration, CreateGroupConfiguration, JoinGroupConfiguration, MessageHeaderStyle } from '@cometchat/uikit-shared'; import '@cometchat/uikit-elements'; import { CreateGroupStyle, JoinGroupStyle, ListItemStyle } from "@cometchat/uikit-elements"; import { localize, CometChatTheme, CometChatUIKitConstants, fontHelper, CometChatGroupEvents, CometChatUIEvents } from "@cometchat/uikit-resources"; import * as i0 from "@angular/core"; import * as i1 from "../../CometChatTheme.service"; import * as i2 from "../../CometChatGroups/cometchat-groups/cometchat-groups.component"; import * as i3 from "../../CometChatMessages/cometchat-messages/cometchat-messages.component"; import * as i4 from "../../CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component"; import * as i5 from "@angular/common"; /** * * CometChatGroupsWithMessagesComponent is a wrapper component for CometChatMessagesComponent and CometChatConversations component to show chats and messages in one screen * * @version 1.0.0 * @author CometChatTeam * @copyright © 2022 CometChat Inc. * */ export class CometChatGroupsWithMessagesComponent { constructor(elementRef, ref, themeService) { this.elementRef = elementRef; this.ref = ref; this.themeService = themeService; this.isMobileView = false; this.hideCreateGroup = false; this.messageText = localize("NO_GROUPS_SELECTED"); this.groupsWithMessagesStyle = { width: "100%", height: "100%", borderRadius: "none", }; this.messagesConfiguration = new MessagesConfiguration({}); this.createGroupConfiguration = new CreateGroupConfiguration({}); this.joinGroupConfiguration = new JoinGroupConfiguration({}); this.groupsConfiguration = new GroupsConfiguration({}); this.onError = (error) => { console.log(error); }; this.theme = new CometChatTheme({}); this.backdropStyle = {}; this.createGroupStyle = {}; this.joinGroupStyle = {}; this.messageHeaderStyle = {}; this.listItemStyle = {}; /** * Properties for internal use */ this.createIconURL = "assets/create-button.svg"; this.createGroupButtonStyle = {}; this.labelStyle = { background: "transparent", textFont: "700 22px Inter", textColor: "rgba(20, 20, 20, 0.33)" }; this.openCreateGroupPage = false; this.openPasswordModal = false; this.sideBarStyle = {}; this.onBack = () => { this.group = null; this.user = null; this.ref.detectChanges(); }; this.closeCreateGroup = () => { this.openCreateGroupPage = false; this.ref.detectChanges(); }; this.closeJoinGroup = () => { this.openPasswordModal = false; }; this.onItemClick = (group) => { this.openPasswordModal = false; if (group.getHasJoined()) { this.group = group; this.user = null; this.ref.detectChanges(); return; } if (group.getType() == CometChatUIKitConstants.GroupTypes.password) { this.group = null; this.protectedGroup = group; this.openPasswordModal = true; this.ref.detectChanges(); return; } CometChat.joinGroup(group).then((groupJoined) => { CometChatGroupEvents.ccGroupMemberJoined.next({ joinedGroup: groupJoined, joinedUser: this.loggedInUser }); group.setHasJoined(true); this.group = group; this.user = null; this.ref.detectChanges(); }) .catch((error) => { if (this.onError) { this.onError(error); } }); }; this.setCreateGroupStyles = () => { let defaultStyle = new CreateGroupStyle({ boxShadow: `0px 0px 8px ${this.themeService.theme.palette.getAccent50()}`, groupTypeTextFont: fontHelper(this.themeService.theme.typography.subtitle2), groupTypeBorder: `1px solid ${this.themeService.theme.palette.getAccent600()}`, groupTypeBorderRadius: "0", groupTypeTextColor: this.themeService.theme.palette.getAccent(), groupTypeTextBackground: "transparent", groupTypeBackground: this.themeService.theme.palette.getAccent100(), groupTypeBoxShadow: "", activeGroupTypeTextFont: fontHelper(this.themeService.theme.typography.subtitle2), activeGroupTypeTextColor: this.themeService.theme.palette.getAccent(), activeGroupTypeBackground: this.themeService.theme.palette.getAccent900(), activeGroupTypeBoxShadow: `${this.themeService.theme.palette.getAccent200()} 0 3px 8px 0`, activeGroupTypeBorderRadius: "8px", activeGroupTypeBorder: "none", groupTypeTextBoxShadow: "none", groupTypeTextBorderRadius: "0", closeIconTint: this.themeService.theme.palette.getPrimary(), titleTextFont: fontHelper(this.themeService.theme.typography.title1), titleTextColor: this.themeService.theme.palette.getAccent(), errorTextFont: fontHelper(this.themeService.theme.typography.subtitle1), errorTextBackground: this.themeService.theme.palette.getError(), errorTextBorderRadius: "8px", errorTextBorder: "none", errorTextColor: this.themeService.theme.palette.getError(), nameInputPlaceholderTextFont: fontHelper(this.themeService.theme.typography.subtitle1), nameInputPlaceholderTextColor: this.themeService.theme.palette.getAccent600(), nameInputBackground: this.themeService.theme.palette.getAccent100(), nameInputTextFont: fontHelper(this.themeService.theme.typography.subtitle1), nameInputTextColor: this.themeService.theme.palette.getAccent(), nameInputBorder: "none", nameInputBorderRadius: "8px", nameInputBoxShadow: `${this.themeService.theme.palette.getAccent100()} 0 0 0 1px`, passwordInputPlaceholderTextFont: fontHelper(this.themeService.theme.typography.subtitle1), passwordInputPlaceholderTextColor: this.themeService.theme.palette.getAccent600(), passwordInputBackground: this.themeService.theme.palette.getAccent100(), passwordInputBorder: "none", passwordInputBorderRadius: "8px", passwordInputBoxShadow: `${this.themeService.theme.palette.getAccent100()} 0 0 0 1px`, passwordInputTextFont: fontHelper(this.themeService.theme.typography.subtitle1), passwordInputTextColor: this.themeService.theme.palette.getAccent(), createGroupButtonTextFont: fontHelper(this.themeService.theme.typography.text2), createGroupButtonTextColor: this.themeService.theme.palette.getAccent900("light"), createGroupButtonBackground: this.themeService.theme.palette.getPrimary(), createGroupButtonBorderRadius: "8px", createGroupButtonBorder: "none", height: "620px", width: "360px", borderRadius: "8px", background: this.themeService.theme.palette.getBackground() }); this.createGroupStyle = { ...defaultStyle, ...this.createGroupConfiguration.createGroupStyle }; }; this.setJoinGroupStyles = () => { let defaultStyle = new JoinGroupStyle({ boxShadow: `0px 0px 8px ${this.themeService.theme.palette.getAccent50()}`, titleTextFont: fontHelper(this.themeService.theme.typography.title1), titleTextColor: this.themeService.theme.palette.getAccent(), passwordInputPlaceholderTextFont: fontHelper(this.themeService.theme.typography.subtitle1), passwordInputPlaceholderTextColor: this.themeService.theme.palette.getAccent600(), passwordInputBackground: this.themeService.theme.palette.getAccent100(), passwordInputBorder: "none", passwordInputBorderRadius: "8px", passwordInputBoxShadow: `${this.themeService.theme.palette.getAccent100()} 0 0 0 1px`, passwordInputTextFont: fontHelper(this.themeService.theme.typography.subtitle1), passwordInputTextColor: this.themeService.theme.palette.getAccent(), height: "100%", width: "100%", joinButtonTextFont: fontHelper(this.themeService.theme.typography.subtitle1), joinButtonTextColor: this.themeService.theme.palette.getAccent("dark"), joinButtonBackground: this.themeService.theme.palette.getPrimary(), joinButtonBorderRadius: "8px", joinButtonBorder: "none", background: this.themeService.theme.palette.getBackground() }); this.joinGroupStyle = { ...defaultStyle, ...this.joinGroupConfiguration.joinGroupStyle }; }; this.onGroupJoined = (event) => { let group = event?.detail?.response; this.openPasswordModal = false; this.protectedGroup = null; if (group) { this.group = group; this.user = null; } }; this.emptyMessageStyle = () => { return { background: this.groupsWithMessagesStyle.background || this.themeService.theme.palette.getBackground(), height: this.groupsWithMessagesStyle.height, width: `calc(${this.groupsWithMessagesStyle.width} - 280px)`, border: "none", borderRadius: this.groupsWithMessagesStyle.borderRadius, }; }; this.groupsWrapperStyles = () => { return { height: this.groupsWithMessagesStyle.height, width: this.groupsWithMessagesStyle.width, border: this.groupsWithMessagesStyle.border, borderRadius: this.groupsWithMessagesStyle.borderRadius, background: this.groupsWithMessagesStyle.background || this.themeService.theme.palette.getBackground(), position: 'relative' }; }; } ngOnChanges(changes) { if (changes["isMobileView"]) { if (this.isMobileView) { this.messagesConfiguration.messageListConfiguration.messageInformationConfiguration.messageInformationStyle.height = "100%"; this.messagesConfiguration.messageListConfiguration.messageInformationConfiguration.messageInformationStyle.width = "100%"; this.messagesConfiguration.messageHeaderConfiguration.hideBackButton = false; if (!this.messagesConfiguration.detailsConfiguration.detailsStyle.padding) { this.messagesConfiguration.detailsConfiguration.detailsStyle.padding = "0 8px"; } if (!this.messagesConfiguration.detailsConfiguration.addMembersConfiguration.addMembersStyle.padding) { this.messagesConfiguration.detailsConfiguration.addMembersConfiguration.addMembersStyle.padding = "0 8px"; } if (!this.messagesConfiguration.detailsConfiguration.bannedMembersConfiguration.bannedMembersStyle.padding) { this.messagesConfiguration.detailsConfiguration.bannedMembersConfiguration.bannedMembersStyle.padding = "0 8px"; } if (!this.messagesConfiguration.detailsConfiguration.bannedMembersConfiguration.bannedMembersStyle.padding) { this.messagesConfiguration.detailsConfiguration.bannedMembersConfiguration.bannedMembersStyle.padding = "0 8px"; } this.messagesConfiguration.messageHeaderConfiguration = { ...this.messagesConfiguration.messageHeaderConfiguration }; this.messagesConfiguration = { ...this.messagesConfiguration }; this.joinGroupConfiguration.messageHeaderConfiguration.hideBackButton = false; this.joinGroupConfiguration.messageHeaderConfiguration = { ...this.joinGroupConfiguration.messageHeaderConfiguration }; this.joinGroupConfiguration = { ...this.joinGroupConfiguration }; } else if (!this.isMobileView) { this.messagesConfiguration.messageListConfiguration.messageInformationConfiguration.messageInformationStyle.height = "500px"; this.messagesConfiguration.messageListConfiguration.messageInformationConfiguration.messageInformationStyle.width = "500px"; this.messagesConfiguration.messageHeaderConfiguration.hideBackButton = true; if (!this.messagesConfiguration.detailsConfiguration.detailsStyle.padding) { this.messagesConfiguration.detailsConfiguration.detailsStyle.padding = "0 100px"; } if (!this.messagesConfiguration.detailsConfiguration.addMembersConfiguration.addMembersStyle.padding) { this.messagesConfiguration.detailsConfiguration.addMembersConfiguration.addMembersStyle.padding = "0 100px"; } if (!this.messagesConfiguration.detailsConfiguration.bannedMembersConfiguration.bannedMembersStyle.padding) { this.messagesConfiguration.detailsConfiguration.bannedMembersConfiguration.bannedMembersStyle.padding = "0 100px"; } if (!this.messagesConfiguration.detailsConfiguration.bannedMembersConfiguration.bannedMembersStyle.padding) { this.messagesConfiguration.detailsConfiguration.bannedMembersConfiguration.bannedMembersStyle.padding = "0 100px"; } this.messagesConfiguration.messageHeaderConfiguration = { ...this.messagesConfiguration.messageHeaderConfiguration }; this.messagesConfiguration = { ...this.messagesConfiguration }; this.joinGroupConfiguration.messageHeaderConfiguration.hideBackButton = true; this.joinGroupConfiguration.messageHeaderConfiguration = { ...this.joinGroupConfiguration.messageHeaderConfiguration }; this.joinGroupConfiguration = { ...this.joinGroupConfiguration }; } setTimeout(() => { this.updateBackdropHeight(); }, 100); } } ngAfterViewInit() { this.updateBackdropHeight(); } openCreateGroup() { this.openCreateGroupPage = true; } updateBackdropHeight() { let divHeight = this.elementRef.nativeElement.offsetHeight; let divWidth = this.elementRef.nativeElement.offsetWidth; if (divHeight === 0 || divWidth === 0) { const rect = this.elementRef.nativeElement.getBoundingClientRect(); divHeight = rect.height; divWidth = rect.width; } let backdropStyle = { height: divHeight + "px", width: divWidth + "px", background: "rgba(0, 0, 0, 0.5)", position: "fixed" }; if (this.isMobileView) { this.createGroupStyle.height = (divHeight - 30) + "px"; this.messagesConfiguration.detailsConfiguration.transferOwnershipConfiguration.transferOwnershipStyle.height = (divHeight - 30) + "px"; this.messagesConfiguration.detailsConfiguration.transferOwnershipConfiguration.transferOwnershipStyle.width = divWidth + "px"; this.messagesConfiguration.messageListConfiguration.messageInformationConfiguration.messageInformationStyle.height = divHeight + "px"; this.messagesConfiguration.messageListConfiguration.messageInformationConfiguration.messageInformationStyle.width = divWidth + "px"; } else { this.createGroupStyle.height = this.createGroupConfiguration.createGroupStyle.height || "620px"; this.messagesConfiguration.detailsConfiguration.transferOwnershipConfiguration.transferOwnershipStyle.height = "650px"; this.messagesConfiguration.detailsConfiguration.transferOwnershipConfiguration.transferOwnershipStyle.width = "360px"; } this.createGroupStyle = { ...this.createGroupStyle }; this.backdropStyle = backdropStyle; this.messagesConfiguration.messageListConfiguration.backdropStyle = backdropStyle; this.messagesConfiguration.detailsConfiguration.backdropStyle = backdropStyle; this.messagesConfiguration.messageComposerConfiguration.backdropStyle = backdropStyle; this.messagesConfiguration.detailsConfiguration.groupMembersConfiguration.backdropStyle = backdropStyle; this.ref.detectChanges(); } ngOnInit() { this.createGroupButtonStyle = { height: "24px", width: "24px", border: "none", borderRadius: '0', background: "transparent", buttonIconTint: this.themeService.theme.palette.getPrimary() }; this.setWithMessagesStyle(); this.setCreateGroupStyles(); this.setListItemStyle(); this.setJoinGroupStyles(); if (!this.messagesConfiguration.messageHeaderConfiguration.onBack) { this.messagesConfiguration.messageHeaderConfiguration.onBack = this.onBack; } this.subscribeToEvents(); CometChat.getLoggedinUser() .then((user) => { this.loggedInUser = user; }) .catch((error) => { if (this.onError) { this.onError(error); } }); } setWithMessagesStyle() { let defaultStyle = new WithMessagesStyle({ width: "100%", height: "100%", background: this.themeService.theme.palette.getBackground(), borderRadius: "none", border: `1px solid ${this.themeService.theme.palette.getAccent200()}`, messageTextColor: this.themeService.theme.palette.getAccent600(), messageTextFont: fontHelper(this.themeService.theme.typography.title1), }); this.groupsWithMessagesStyle = { ...defaultStyle, ...this.groupsWithMessagesStyle }; this.labelStyle.textFont = this.groupsWithMessagesStyle.messageTextFont; this.labelStyle.textColor = this.groupsWithMessagesStyle.messageTextColor; this.messagesConfiguration.messagesStyle.border = this.messagesConfiguration.messagesStyle.border ?? "none"; this.groupsConfiguration.groupsStyle.border = this.groupsConfiguration.groupsStyle.border ?? "none"; if (!this.groupsConfiguration?.groupsStyle?.border || this.groupsConfiguration?.groupsStyle?.border == "none") { this.sideBarStyle = { borderRight: this.groupsWithMessagesStyle.border }; } } setHeadersStyle() { let defaultStyle = new MessageHeaderStyle({ background: this.themeService.theme.palette.getBackground(), border: `none`, onlineStatusColor: this.themeService.theme.palette.getSuccess(), privateGroupIconBackground: this.themeService.theme.palette.getSuccess(), passwordGroupIconBackground: "RGB(247, 165, 0)", backButtonIconTint: this.themeService.theme.palette.getPrimary(), subtitleTextColor: this.themeService.theme.palette.getAccent600(), subtitleTextFont: fontHelper(this.themeService.theme.typography.subtitle2), typingIndicatorTextColor: this.themeService.theme.palette.getPrimary(), typingIndicatorTextFont: fontHelper(this.themeService.theme.typography.subtitle1), }); this.messageHeaderStyle = { ...defaultStyle, ...this.joinGroupConfiguration.messageHeaderConfiguration.messageHeaderStyle }; } setListItemStyle() { let defaultStyle = new ListItemStyle({ height: "45px", width: "100%", background: this.themeService.theme.palette.getBackground(), activeBackground: "transparent", borderRadius: "0", titleFont: fontHelper(this.themeService.theme.typography.title2), titleColor: this.themeService.theme.palette.getAccent(), border: "none", separatorColor: "", hoverBackground: "transparent" }); this.listItemStyle = { ...defaultStyle, ...this.joinGroupConfiguration.messageHeaderConfiguration.listItemStyle }; } ngOnDestroy() { this.unsubscribeToEvents(); } updatedCreatedGroup(event) { let group = event?.detail?.group; if (group) { this.group = group; this.user = null; this.openCreateGroupPage = false; this.ref.detectChanges(); CometChatGroupEvents.ccGroupCreated.next(group); } } // subscribe to global events subscribeToEvents() { this.ccGroupDeleted = CometChatGroupEvents.ccGroupDeleted.subscribe((group) => { if (this.group && group.getGuid() == this.group.getGuid()) { this.group = null; this.ref.detectChanges(); } }); this.ccGroupCreated = CometChatGroupEvents.ccGroupCreated.subscribe((group) => { if (group) { this.group = group; this.user = null; this.openCreateGroupPage = false; this.ref.detectChanges(); } }); this.ccGroupMemberAdded = CometChatGroupEvents.ccGroupMemberAdded.subscribe((item) => { if (this.group && this.group.getGuid() == item?.userAddedIn.getGuid()) { this.group = item?.userAddedIn; this.ref.detectChanges(); } }); this.ccGroupMemberBanned = CometChatGroupEvents.ccGroupMemberBanned.subscribe((item) => { if (this.group && this.group.getGuid() == item?.kickedFrom.getGuid()) { this.group = item?.kickedFrom; this.ref.detectChanges(); } }); this.ccGroupMemberJoined = CometChatGroupEvents.ccGroupMemberJoined.subscribe((item) => { if (this.protectedGroup && this.protectedGroup.getGuid() == item?.joinedGroup.getGuid()) { this.openPasswordModal = false; this.protectedGroup = null; this.group = item?.joinedGroup; this.ref.detectChanges(); } }); this.ccGroupMemberKicked = CometChatGroupEvents.ccGroupMemberKicked.subscribe((item) => { if (this.group && this.group.getGuid() == item?.kickedFrom.getGuid()) { this.group = item?.kickedFrom; this.ref.detectChanges(); } }); this.ccOwnershipChanged = CometChatGroupEvents.ccOwnershipChanged.subscribe((item) => { if (this.group && this.group.getGuid() == item?.group.getGuid()) { this.group = item?.group; this.ref.detectChanges(); } }); this.ccGroupLeft = CometChatGroupEvents.ccGroupLeft.subscribe((item) => { if (this.group && this.group.getGuid() == item?.leftGroup.getGuid() && this.loggedInUser?.getUid() == item?.userLeft?.getUid()) { this.group = item?.leftGroup; this.ref.detectChanges(); } }); // open chat and mark as active conversation this.ccOpenChat = CometChatUIEvents.ccOpenChat.subscribe((item) => { this.user = item.user ? item.user : null; this.group = item.group ? item.group : null; this.ref.detectChanges(); }); } // unsubscribe to subscribed events. unsubscribeToEvents() { this.ccGroupDeleted?.unsubscribe(); this.ccGroupMemberAdded?.unsubscribe(); this.ccGroupMemberBanned?.unsubscribe(); this.ccGroupMemberJoined?.unsubscribe(); this.ccGroupMemberKicked?.unsubscribe(); this.ccOwnershipChanged?.unsubscribe(); this.ccGroupLeft?.unsubscribe(); this.ccOpenChat?.unsubscribe(); } } CometChatGroupsWithMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatGroupsWithMessagesComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.CometChatThemeService }], target: i0.ɵɵFactoryTarget.Component }); CometChatGroupsWithMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CometChatGroupsWithMessagesComponent, selector: "cometchat-groups-with-messages", inputs: { group: "group", isMobileView: "isMobileView", hideCreateGroup: "hideCreateGroup", messageText: "messageText", groupsWithMessagesStyle: "groupsWithMessagesStyle", messagesConfiguration: "messagesConfiguration", createGroupConfiguration: "createGroupConfiguration", joinGroupConfiguration: "joinGroupConfiguration", groupsConfiguration: "groupsConfiguration", onError: "onError" }, viewQueries: [{ propertyName: "groupRef", first: true, predicate: ["groupRef"], descendants: true }, { propertyName: "messageListRef", first: true, predicate: ["messagesRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"cc-with-messages__wrapper\" [ngStyle]=\"groupsWrapperStyles()\">\n <div class=\"cc-with-messages__sidebar\" [ngClass]=\"{mobile : isMobileView}\"\n [ngStyle]=\"sideBarStyle\">\n <cometchat-groups #groupRef [activeGroup]=\"group\"\n [hideSearch]=\"groupsConfiguration.hideSearch\"\n [searchIconURL]=\"groupsConfiguration.searchIconURL\"\n [searchRequestBuilder]=\"groupsConfiguration.searchRequestBuilder\"\n [onItemClick]=\"groupsConfiguration.onItemClick || onItemClick\"\n [groupsStyle]=\"groupsConfiguration.groupsStyle\"\n [subtitleView]=\"groupsConfiguration.subtitleView\"\n [options]=\"groupsConfiguration.options\"\n [privateGroupIcon]=\"groupsConfiguration.privateGroupIcon\"\n [protectedGroupIcon]=\"groupsConfiguration.protectedGroupIcon\"\n [passwordGroupIcon]=\"groupsConfiguration.passwordGroupIcon\"\n [groupsRequestBuilder]=\"groupsConfiguration.groupsRequestBuilder\"\n [emptyStateView]=\"groupsConfiguration.emptyStateView\"\n [onSelect]=\"groupsConfiguration.onSelect\"\n [loadingIconURL]=\"groupsConfiguration.loadingIconURL\"\n [errorStateView]=\"groupsConfiguration.errorStateView\"\n [loadingStateView]=\"groupsConfiguration.loadingStateView\"\n [titleAlignment]=\"groupsConfiguration.titleAlignment\"\n [listItemView]=\"groupsConfiguration.listItemView\"\n [menu]=\"groupsConfiguration.menu || createGroupButton\"\n [hideSeparator]=\"groupsConfiguration.hideSeparator\"\n [hideError]=\"groupsConfiguration.hideError\"\n [selectionMode]=\"groupsConfiguration.selectionMode\"\n [listItemStyle]=\"groupsConfiguration.listItemStyle\"></cometchat-groups>\n </div>\n <div class=\"cc-with-messages__main\" [ngClass]=\"{mobile : isMobileView}\"\n *ngIf=\"(group || user) && !openPasswordModal\">\n <!--Message List Screen-->\n <cometchat-messages #messagesRef [group]=\"group!\"\n [messageHeaderConfiguration]=\"messagesConfiguration.messageHeaderConfiguration\"\n [messageListConfiguration]=\"messagesConfiguration.messageListConfiguration\"\n [messageComposerConfiguration]=\"messagesConfiguration.messageComposerConfiguration\"\n [messagesStyle]=\"messagesConfiguration.messagesStyle\"\n [customSoundForIncomingMessages]=\"messagesConfiguration.customSoundForIncomingMessages\"\n [customSoundForOutgoingMessages]=\"messagesConfiguration.customSoundForOutgoingMessages\"\n [detailsConfiguration]=\"messagesConfiguration.detailsConfiguration\"\n [disableSoundForMessages]=\"messagesConfiguration.disableSoundForMessages\"\n [disableTyping]=\"messagesConfiguration.disableTyping\"\n [hideMessageComposer]=\"messagesConfiguration.hideMessageComposer\"\n [hideMessageHeader]=\"messagesConfiguration.hideMessageHeader\"\n [messageComposerView]=\"messagesConfiguration.messageComposerView\"\n [messageHeaderView]=\"messagesConfiguration.messageHeaderView\"\n [messageListView]=\"messagesConfiguration.messageListView\" [user]=\"user!\"\n [threadedMessageConfiguration]=\"messagesConfiguration.threadedMessageConfiguration\"\n [hideDetails]=\"messagesConfiguration.hideDetails!\">\n </cometchat-messages>\n <!--Message List Screen ENDS-->\n </div>\n <div class=\"cc-decorator__message--empty\"\n *ngIf=\"!user && !group && !openPasswordModal\"\n [ngStyle]=\"emptyMessageStyle()\">\n <cometchat-label [text]=\"messageText\"\n [labelStyle]=\"labelStyle\"></cometchat-label>\n </div>\n <div class=\"cc-with-messages__joingroup\"\n *ngIf=\"openPasswordModal && !group && !user\" [ngStyle]=\"emptyMessageStyle()\"\n [ngClass]=\"{mobile : isMobileView}\">\n <cometchat-join-group [group]=\"protectedGroup!\"\n [joinGroupStyle]=\"joinGroupStyle\"\n (cc-joingroup-joined)=\"onGroupJoined($event)\"\n [errorCallback]=\"joinGroupConfiguration.onError\"\n [joinClick]=\"joinGroupConfiguration.joinClick\">\n <cometchat-message-header slot=\"headerView\" [group]=\"protectedGroup!\"\n [subtitleView]=\"joinGroupConfiguration.messageHeaderConfiguration.subtitleView\"\n [disableUsersPresence]=\"joinGroupConfiguration.messageHeaderConfiguration.disableUsersPresence\"\n [protectedGroupIcon]=\"joinGroupConfiguration.messageHeaderConfiguration.protectedGroupIcon\"\n [passwordGroupIcon]=\"joinGroupConfiguration.messageHeaderConfiguration.passwordGroupIcon\"\n [privateGroupIcon]=\"joinGroupConfiguration.messageHeaderConfiguration.privateGroupIcon\"\n [menu]=\"joinGroupConfiguration.messageHeaderConfiguration.menu\"\n [messageHeaderStyle]=\"messageHeaderStyle\"\n [backButtonIconURL]=\"joinGroupConfiguration.messageHeaderConfiguration.backButtonIconURL\"\n [hideBackButton]=\"joinGroupConfiguration.messageHeaderConfiguration.hideBackButton\"\n [onError]=\"joinGroupConfiguration.messageHeaderConfiguration.onError\"\n [onBack]=\"joinGroupConfiguration.messageHeaderConfiguration.onBack || closeJoinGroup\"\n [listItemStyle]=\"listItemStyle\"\n [statusIndicatorStyle]=\"joinGroupConfiguration.messageHeaderConfiguration.statusIndicatorStyle\"\n [avatarStyle]=\"joinGroupConfiguration.messageHeaderConfiguration.avatarStyle\">\n </cometchat-message-header>\n </cometchat-join-group>\n </div>\n</div>\n<ng-template #createGroupButton>\n <cometchat-button *ngIf=\"!hideCreateGroup\" [iconURL]=\"createIconURL\"\n [buttonStyle]=\"createGroupButtonStyle\"\n (cc-button-clicked)=\"openCreateGroup()\"></cometchat-button>\n\n</ng-template>\n<cometchat-backdrop *ngIf=\"openCreateGroupPage\" [backdropStyle]=\"backdropStyle\">\n <cometchat-create-group [createGroupStyle]=\"createGroupStyle\"\n [hideCloseButton]=\"createGroupConfiguration.hideCloseButton\"\n [closeButtonIconURL]=\"createGroupConfiguration.closeButtonIconURL\"\n [createClick]=\"createGroupConfiguration.createClick\"\n [closeCallback]=\"closeCreateGroup\">\n\n </cometchat-create-group>\n</cometchat-backdrop>\n", styles: [".cc-with-messages__wrapper{display:flex;height:100%;width:100%;box-sizing:border-box}.cc-with-messages__sidebar{width:280px;height:100%;position:relative}.cc-with-messages__main{width:calc(100% - 280px);height:100%}.mobile{width:100%!important;height:100%;position:absolute}.cc-decorator__message--empty{display:flex;justify-content:center;align-items:center}.cc-with-messages__joingroup{width:calc(100% - 280px);height:100%}\n"], components: [{ type: i2.CometChatGroupsComponent, selector: "cometchat-groups", inputs: ["groupsRequestBuilder", "searchRequestBuilder", "subtitleView", "listItemView", "menu", "options", "activeGroup", "hideSeparator", "selectionMode", "searchPlaceholder", "hideError", "searchIconURL", "hideSearch", "title", "onError", "onSelect", "emptyStateView", "errorStateView", "loadingIconURL", "privateGroupIcon", "protectedGroupIcon", "passwordGroupIcon", "loadingStateView", "emptyStateText", "errorStateText", "titleAlignment", "statusIndicatorStyle", "avatarStyle", "groupsStyle", "listItemStyle", "onItemClick"] }, { type: i3.CometChatMessagesComponent, selector: "cometchat-messages", inputs: ["user", "group", "currentAskAIBot", "hideMessageComposer", "disableTyping", "messageHeaderConfiguration", "messageListConfiguration", "messageComposerConfiguration", "threadedMessageConfiguration", "detailsConfiguration", "customSoundForIncomingMessages", "customSoundForOutgoingMessages", "disableSoundForMessages", "messagesStyle", "messageHeaderView", "messageComposerView", "messageListView", "hideMessageHeader", "hideDetails", "auxiliaryMenu"] }, { type: i4.CometChatMessageHeaderComponent, selector: "cometchat-message-header", inputs: ["avatarStyle", "statusIndicatorStyle", "messageHeaderStyle", "listItemStyle", "subtitleView", "disableUsersPresence", "disableTyping", "protectedGroupIcon", "passwordGroupIcon", "privateGroupIcon", "menu", "user", "group", "backButtonIconURL", "hideBackButton", "listItemView", "onError", "onBack"] }], directives: [{ type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatGroupsWithMessagesComponent, decorators: [{ type: Component, args: [{ selector: "cometchat-groups-with-messages", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cc-with-messages__wrapper\" [ngStyle]=\"groupsWrapperStyles()\">\n <div class=\"cc-with-messages__sidebar\" [ngClass]=\"{mobile : isMobileView}\"\n [ngStyle]=\"sideBarStyle\">\n <cometchat-groups #groupRef [activeGroup]=\"group\"\n [hideSearch]=\"groupsConfiguration.hideSearch\"\n [searchIconURL]=\"groupsConfiguration.searchIconURL\"\n [searchRequestBuilder]=\"groupsConfiguration.searchRequestBuilder\"\n [onItemClick]=\"groupsConfiguration.onItemClick || onItemClick\"\n [groupsStyle]=\"groupsConfiguration.groupsStyle\"\n [subtitleView]=\"groupsConfiguration.subtitleView\"\n [options]=\"groupsConfiguration.options\"\n [privateGroupIcon]=\"groupsConfiguration.privateGroupIcon\"\n [protectedGroupIcon]=\"groupsConfiguration.protectedGroupIcon\"\n [passwordGroupIcon]=\"groupsConfiguration.passwordGroupIcon\"\n [groupsRequestBuilder]=\"groupsConfiguration.groupsRequestBuilder\"\n [emptyStateView]=\"groupsConfiguration.emptyStateView\"\n [onSelect]=\"groupsConfiguration.onSelect\"\n [loadingIconURL]=\"groupsConfiguration.loadingIconURL\"\n [errorStateView]=\"groupsConfiguration.errorStateView\"\n [loadingStateView]=\"groupsConfiguration.loadingStateView\"\n [titleAlignment]=\"groupsConfiguration.titleAlignment\"\n [listItemView]=\"groupsConfiguration.listItemView\"\n [menu]=\"groupsConfiguration.menu || createGroupButton\"\n [hideSeparator]=\"groupsConfiguration.hideSeparator\"\n [hideError]=\"groupsConfiguration.hideError\"\n [selectionMode]=\"groupsConfiguration.selectionMode\"\n [listItemStyle]=\"groupsConfiguration.listItemStyle\"></cometchat-groups>\n </div>\n <div class=\"cc-with-messages__main\" [ngClass]=\"{mobile : isMobileView}\"\n *ngIf=\"(group || user) && !openPasswordModal\">\n <!--Message List Screen-->\n <cometchat-messages #messagesRef [group]=\"group!\"\n [messageHeaderConfiguration]=\"messagesConfiguration.messageHeaderConfiguration\"\n [messageListConfiguration]=\"messagesConfiguration.messageListConfiguration\"\n [messageComposerConfiguration]=\"messagesConfiguration.messageComposerConfiguration\"\n [messagesStyle]=\"messagesConfiguration.messagesStyle\"\n [customSoundForIncomingMessages]=\"messagesConfiguration.customSoundForIncomingMessages\"\n [customSoundForOutgoingMessages]=\"messagesConfiguration.customSoundForOutgoingMessages\"\n [detailsConfiguration]=\"messagesConfiguration.detailsConfiguration\"\n [disableSoundForMessages]=\"messagesConfiguration.disableSoundForMessages\"\n [disableTyping]=\"messagesConfiguration.disableTyping\"\n [hideMessageComposer]=\"messagesConfiguration.hideMessageComposer\"\n [hideMessageHeader]=\"messagesConfiguration.hideMessageHeader\"\n [messageComposerView]=\"messagesConfiguration.messageComposerView\"\n [messageHeaderView]=\"messagesConfiguration.messageHeaderView\"\n [messageListView]=\"messagesConfiguration.messageListView\" [user]=\"user!\"\n [threadedMessageConfiguration]=\"messagesConfiguration.threadedMessageConfiguration\"\n [hideDetails]=\"messagesConfiguration.hideDetails!\">\n </cometchat-messages>\n <!--Message List Screen ENDS-->\n </div>\n <div class=\"cc-decorator__message--empty\"\n *ngIf=\"!user && !group && !openPasswordModal\"\n [ngStyle]=\"emptyMessageStyle()\">\n <cometchat-label [text]=\"messageText\"\n [labelStyle]=\"labelStyle\"></cometchat-label>\n </div>\n <div class=\"cc-with-messages__joingroup\"\n *ngIf=\"openPasswordModal && !group && !user\" [ngStyle]=\"emptyMessageStyle()\"\n [ngClass]=\"{mobile : isMobileView}\">\n <cometchat-join-group [group]=\"protectedGroup!\"\n [joinGroupStyle]=\"joinGroupStyle\"\n (cc-joingroup-joined)=\"onGroupJoined($event)\"\n [errorCallback]=\"joinGroupConfiguration.onError\"\n [joinClick]=\"joinGroupConfiguration.joinClick\">\n <cometchat-message-header slot=\"headerView\" [group]=\"protectedGroup!\"\n [subtitleView]=\"joinGroupConfiguration.messageHeaderConfiguration.subtitleView\"\n [disableUsersPresence]=\"joinGroupConfiguration.messageHeaderConfiguration.disableUsersPresence\"\n [protectedGroupIcon]=\"joinGroupConfiguration.messageHeaderConfiguration.protectedGroupIcon\"\n [passwordGroupIcon]=\"joinGroupConfiguration.messageHeaderConfiguration.passwordGroupIcon\"\n [privateGroupIcon]=\"joinGroupConfiguration.messageHeaderConfiguration.privateGroupIcon\"\n [menu]=\"joinGroupConfiguration.messageHeaderConfiguration.menu\"\n [messageHeaderStyle]=\"messageHeaderStyle\"\n [backButtonIconURL]=\"joinGroupConfiguration.messageHeaderConfiguration.backButtonIconURL\"\n [hideBackButton]=\"joinGroupConfiguration.messageHeaderConfiguration.hideBackButton\"\n [onError]=\"joinGroupConfiguration.messageHeaderConfiguration.onError\"\n [onBack]=\"joinGroupConfiguration.messageHeaderConfiguration.onBack || closeJoinGroup\"\n [listItemStyle]=\"listItemStyle\"\n [statusIndicatorStyle]=\"joinGroupConfiguration.messageHeaderConfiguration.statusIndicatorStyle\"\n [avatarStyle]=\"joinGroupConfiguration.messageHeaderConfiguration.avatarStyle\">\n </cometchat-message-header>\n </cometchat-join-group>\n </div>\n</div>\n<ng-template #createGroupButton>\n <cometchat-button *ngIf=\"!hideCreateGroup\" [iconURL]=\"createIconURL\"\n [buttonStyle]=\"createGroupButtonStyle\"\n (cc-button-clicked)=\"openCreateGroup()\"></cometchat-button>\n\n</ng-template>\n<cometchat-backdrop *ngIf=\"openCreateGroupPage\" [backdropStyle]=\"backdropStyle\">\n <cometchat-create-group [createGroupStyle]=\"createGroupStyle\"\n [hideCloseButton]=\"createGroupConfiguration.hideCloseButton\"\n [closeButtonIconURL]=\"createGroupConfiguration.closeButtonIconURL\"\n [createClick]=\"createGroupConfiguration.createClick\"\n [closeCallback]=\"closeCreateGroup\">\n\n </cometchat-create-group>\n</cometchat-backdrop>\n", styles: [".cc-with-messages__wrapper{display:flex;height:100%;width:100%;box-sizing:border-box}.cc-with-messages__sidebar{width:280px;height:100%;position:relative}.cc-with-messages__main{width:calc(100% - 280px);height:100%}.mobile{width:100%!important;height:100%;position:absolute}.cc-decorator__message--empty{display:flex;justify-content:center;align-items:center}.cc-with-messages__joingroup{width:calc(100% - 280px);height:100%}\n"] }] }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.CometChatThemeService }]; }, propDecorators: { groupRef: [{ type: ViewChild, args: ["groupRef", { static: false }] }], messageListRef: [{ type: ViewChild, args: ["messagesRef", { static: false }] }], group: [{ type: Input }], isMobileView: [{ type: Input }], hideCreateGroup: [{ type: Input }], messageText: [{ type: Input }], groupsWithMessagesStyle: [{ type: Input }], messagesConfiguration: [{ type: Input }], createGroupConfiguration: [{ type: Input }], joinGroupConfiguration: [{ type: Input }], groupsConfiguration: [{ type: Input }], onError: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tZXRjaGF0LWdyb3Vwcy13aXRoLW1lc3NhZ2VzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtdWlraXQtYW5ndWxhci9zcmMvQ29tZXRDaGF0R3JvdXBzV2l0aE1lc3NhZ2VzL2NvbWV0Y2hhdC1ncm91cHMtd2l0aC1tZXNzYWdlcy9jb21ldGNoYXQtZ3JvdXBzLXdpdGgtbWVzc2FnZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhdC11aWtpdC1hbmd1bGFyL3NyYy9Db21ldENoYXRHcm91cHNXaXRoTWVzc2FnZXMvY29tZXRjaGF0LWdyb3Vwcy13aXRoLW1lc3NhZ2VzL2NvbWV0Y2hhdC1ncm91cHMtd2l0aC1tZXNzYWdlcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFNBQVMsRUFBRSxLQUFLLEVBQUUsdUJBQXVCLEVBQTJELE1BQU0sZUFBZSxDQUFDO0FBQ3RKLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUczRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsd0JBQXdCLEVBQUUsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUM3SyxPQUFPLDJCQUEyQixDQUFBO0FBRWxDLE9BQU8sRUFBaUIsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTNHLE9BQU8sRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLHVCQUF1QixFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBa0csaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7OztBQUNwUDs7Ozs7Ozs7RUFRRTtBQU9GLE1BQU0sT0FBTyxvQ0FBb0M7SUEwRC9DLFlBQW9CLFVBQXNCLEVB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