@cometchat/chat-uikit-angular
Version:
Ready-to-use Chat UI Components for Angular (JavaScript/Web)
373 lines • 80 kB
JavaScript
import { Component, Input, ChangeDetectionStrategy, } from "@angular/core";
import "@cometchat/uikit-elements";
import { AvatarStyle, DateStyle, ListItemStyle, } from "@cometchat/uikit-elements";
import { CallButtonsConfiguration, CallLogDetailsStyle, CallLogParticipantsConfiguration, CallLogHistoryConfiguration, CallLogRecordingsConfiguration, } from "@cometchat/uikit-shared";
import { fontHelper, localize, DatePatterns, } from "@cometchat/uikit-resources";
import { CometChat } from "@cometchat/chat-sdk-javascript";
import { CallDetailUtils } from "../../../Shared/Utils/CallDetailUtils";
import { CallLogUtils } from "../../../Shared/Utils/CallLogUtils";
import * as i0 from "@angular/core";
import * as i1 from "../../../CometChatTheme.service";
import * as i2 from "../../CometChatCallButtons/cometchat-call-buttons/cometchat-call-buttons.component";
import * as i3 from "../../CometChatCallLogParticipants/cometchat-call-log-participants/cometchat-call-log-participants.component";
import * as i4 from "../../CometChatCallLogRecordings/cometchat-call-log-recordings/cometchat-call-log-recordings.component";
import * as i5 from "../../CometChatCallLogHistory/cometchat-call-log-history/cometchat-call-log-history.component";
import * as i6 from "@angular/common";
export class CometChatCallLogDetailsComponent {
constructor(ref, themeService) {
this.ref = ref;
this.themeService = themeService;
this.title = localize("CALL_DETAILS");
this.hideProfile = false;
this.backIconUrl = "assets/backbutton.svg";
this.greaterThanIconURL = "assets/greaterThanIcon.svg";
this.callButtonsConfiguration = new CallButtonsConfiguration({});
this.callLogParticipantsConfiguration = new CallLogParticipantsConfiguration({});
this.callLogHistoryConfiguration = new CallLogHistoryConfiguration({});
this.callLogRecordingsConfiguration = new CallLogRecordingsConfiguration({});
this.onError = (error) => {
console.log(error);
};
this.datePattern = DatePatterns.time;
this.datePattern2 = DatePatterns.DayDate;
this.data = [];
this.avatarStyle = {
borderRadius: "16px",
width: "28px",
height: "28px",
border: "none",
};
this.labelStyle = {
textFont: '600 22px sans-serif, Inter',
textColor: 'rgb(20, 20, 20)'
};
this.callDetailsStyle = {
width: "100%",
height: "100%",
};
this.listItemStyle = {};
this.dateStyle = {};
this.callButtonsStyle = {
width: "100%",
height: "100%",
border: "none",
borderRadius: "0",
background: "transparent",
};
this.iconStyle = {
height: "16px",
width: "16px",
iconTint: "RGBA(20, 20, 20, 0.68)",
};
this.defaultTemplate = [];
this.authToken = "";
this.loggedInUser = null;
this.showCallLogDetailOptionList = true;
this.showCometChatMessages = true;
this.showParticipantsList = false;
this.showCallRecordingList = false;
this.showCallHistory = false;
this.userListenerId = "userlist_" + new Date().getTime();
this.limit = 5;
this.onItemClick = (call) => {
this.call = call;
this.showCallLogDetailOptionList = true;
this.showCallHistory = false;
this.ref.detectChanges();
};
this.types = [];
this.categories = [];
this.getTemplateOptions = (template) => {
if (template.options) {
return template.options(this.user, this.group, template.id);
}
else
return [];
};
this.onOptionClick = (option) => {
if (option?.onClick) {
option.onClick(this.call);
}
else {
switch (option.id) {
case "participants":
this.showCallLogDetailOptionList = false;
this.showParticipantsList = true;
this.ref.detectChanges();
break;
case "recordings":
this.showCallLogDetailOptionList = false;
this.showCallRecordingList = true;
this.ref.detectChanges();
break;
case "callHistory":
this.showCallLogDetailOptionList = false;
this.showCallHistory = true;
this.ref.detectChanges();
break;
default:
break;
}
}
};
this.handlePageOnBackClick = () => {
this.showCallHistory = false;
this.showCallRecordingList = false;
this.showParticipantsList = false;
this.showCometChatMessages = false;
this.showCallLogDetailOptionList = true;
this.ref.detectChanges();
};
this.wrapperStyle = () => {
return {
width: this.callDetailsStyle.width,
height: this.callDetailsStyle.height,
border: this.callDetailsStyle.border,
borderRadius: this.callDetailsStyle.borderRadius,
background: this.callDetailsStyle.background,
padding: '16px',
};
};
this.profileContainerStyle = () => {
return {
height: "auto",
width: "100%",
minHeight: "150px",
padding: "16px",
display: "flex",
flexDirection: "column",
justifyContent: "center",
alignItems: "center",
boxSizing: "border-box",
gap: "8px",
};
};
this.getTailViewStyle = () => {
return {
font: fontHelper(this.themeService?.theme.typography.text3),
color: this.themeService.theme.palette.getAccent600()
};
};
this.backButtonStyle = () => {
return {
height: "24px",
width: "24px",
border: "none",
borderRadius: "0",
background: "transparent",
buttonIconTint: this.themeService.theme.palette.getPrimary(),
};
};
}
getTitleStyle() {
return {
textFont: this.callDetailsStyle.titleFont ||
fontHelper(this.themeService.theme.typography.title1),
textColor: this.callDetailsStyle.titleColor ||
this.themeService.theme.palette.getAccent(),
};
}
ngOnChanges(changes) {
if (changes["user"] || changes["group"]) {
this.showCallLogDetailOptionList = true;
this.showParticipantsList = false;
this.showCallRecordingList = false;
this.showCallHistory = false;
this.showCometChatMessages = false;
}
}
removeListener() {
CometChat.removeUserListener(this.userListenerId);
}
ngOnInit() {
CometChat.getLoggedinUser()
.then((user) => {
this.loggedInUser = user;
this.authToken = this.loggedInUser.getAuthToken();
this.getTemplate();
})
.catch((error) => {
if (this.onError) {
this.onError(error);
}
});
this.setThemeStyle();
}
trackByFnOption(index, option) {
return option.id;
}
getTemplate() {
if (this.data && this.data?.length > 0) {
this.defaultTemplate = this.data;
this.ref.detectChanges();
}
else {
this.defaultTemplate = CallDetailUtils.getDefaultCallTemplate(this.call, this.loggedInUser, this.themeService.theme);
this.ref.detectChanges();
}
}
getCustomOptionView(option) {
return option?.customView;
}
getSectionHeaderStyle(template) {
return {
textFont: template.titleFont,
textColor: template.titleColor,
};
}
getButtonStyle(option) {
return {
height: "100%",
width: "100%",
border: "none",
borderRadius: "0",
buttonTextFont: option?.titleFont,
buttonTextColor: option?.titleColor,
background: option?.backgroundColor || "transparent",
};
}
subtitleStyle(template) {
return {
textFont: template.titleFont,
textColor: template.titleColor,
};
}
showDataSectionStyle(template) {
return {
textFont: template.titleFont,
textColor: template.titleColor,
};
}
setThemeStyle() {
this.setDetailsStyle();
this.setAvatarStyle();
this.setListItemStyle();
this.setDateStyle();
}
setListItemStyle() {
let defaultStyle = new ListItemStyle({
height: "45px",
width: "100%",
background: this.themeService.theme.palette.getAccent50() ||
this.themeService.theme.palette.getBackground(),
activeBackground: "transparent",
borderRadius: "5px",
titleFont: fontHelper(this.themeService.theme.typography.title2),
titleColor: this.themeService.theme.palette.getAccent(),
border: "none",
separatorColor: this.themeService.theme.palette.getAccent200(),
hoverBackground: this.themeService.theme.palette.getAccent100(),
});
this.listItemStyle = { ...defaultStyle, ...this.listItemStyle };
}
setAvatarStyle() {
let defaultStyle = new AvatarStyle({
borderRadius: "24px",
width: "46px",
height: "46px",
border: "none",
backgroundColor: this.themeService.theme.palette.getAccent700(),
nameTextColor: this.themeService.theme.palette.getAccent900(),
backgroundSize: "cover",
nameTextFont: fontHelper(this.themeService.theme.typography.subtitle1),
outerViewBorderSpacing: "",
});
this.avatarStyle = { ...defaultStyle, ...this.avatarStyle };
}
setDetailsStyle() {
let defaultStyle = new CallLogDetailsStyle({
background: this.themeService.theme.palette.getBackground(),
titleFont: fontHelper(this.themeService.theme.typography.title1),
titleColor: this.themeService.theme.palette.getAccent(),
backIconTint: this.themeService.theme.palette.getPrimary(),
width: "100%",
height: "100%",
borderRadius: "",
nameTextFont: fontHelper(this.themeService.theme.typography.subtitle2),
});
this.callDetailsStyle = { ...defaultStyle, ...this.callDetailsStyle };
}
setDateStyle() {
let defaultStyle = new DateStyle({
textFont: fontHelper(this.themeService.theme.typography.caption2),
textColor: this.themeService.theme.palette.getAccent600(),
background: "transparent",
});
this.dateStyle = { ...defaultStyle, ...this.dateStyle };
}
getTailView(totalSeconds) {
return CallLogUtils.convertMinutesToHoursMinutesSeconds(totalSeconds);
}
getSubtitle(call) {
return CallLogUtils.getCallStatusWithType(call, this.loggedInUser);
}
getListItemStyle(option) {
return {
height: "auto",
width: "100%",
background: option?.backgroundColor ||
this.themeService.theme.palette.getBackground(),
borderRadius: "8px",
titleFont: option?.titleFont ||
fontHelper(this.themeService.theme.typography.title2),
border: "none",
separatorColor: this.themeService.theme.palette.getAccent200(),
hoverBackground: this.themeService.theme.palette.getAccent100(),
};
}
}
CometChatCallLogDetailsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatCallLogDetailsComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.CometChatThemeService }], target: i0.ɵɵFactoryTarget.Component });
CometChatCallLogDetailsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CometChatCallLogDetailsComponent, selector: "cometchat-call-log-details", inputs: { call: "call", group: "group", user: "user", title: "title", onBackClick: "onBackClick", hideProfile: "hideProfile", subtitleView: "subtitleView", customProfileView: "customProfileView", backIconUrl: "backIconUrl", greaterThanIconURL: "greaterThanIconURL", callButtonsConfiguration: "callButtonsConfiguration", callLogParticipantsConfiguration: "callLogParticipantsConfiguration", callLogHistoryConfiguration: "callLogHistoryConfiguration", callLogRecordingsConfiguration: "callLogRecordingsConfiguration", onError: "onError", datePattern: "datePattern", datePattern2: "datePattern2", data: "data", avatarStyle: "avatarStyle", labelStyle: "labelStyle", callDetailsStyle: "callDetailsStyle", listItemStyle: "listItemStyle", dateStyle: "dateStyle", callButtonsStyle: "callButtonsStyle" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cc-call-log-details__wrapper\" *ngIf=\"user || group\" [ngStyle]=\"wrapperStyle()\">\n\n <div class=\"cc-call-log-details__header\"\n *ngIf=\"onBackClick && !(showParticipantsList || showCallRecordingList || showCallHistory)\">\n <cometchat-button [iconURL]=\"backIconUrl\" class=\"cc-call-log-details__close-button\" [buttonStyle]=\"backButtonStyle()\"\n (cc-button-clicked)=\"onBackClick()\"></cometchat-button>\n <cometchat-label [text]=\"title\" [labelStyle]=\"getTitleStyle()\"></cometchat-label>\n </div>\n\n <div class=\"cc-call-log-details\">\n <div class=\"cc-call-log-details__profile\"\n *ngIf=\"!hideProfile && showCallLogDetailOptionList && !(showParticipantsList || showCallRecordingList || showCallHistory)\">\n\n\n <div class=\" cc-call-log-details__default-profile\" *ngIf=\"!customProfileView;else listitem\" [ngStyle]=\"profileContainerStyle()\">\n <cometchat-avatar [name]=\"user?.getName() ?? group?.getName()\" [avatarStyle]=\"avatarStyle\"\n [image]=\"user?.getAvatar() ?? group?.getIcon()\">\n </cometchat-avatar>\n\n <cometchat-label [text]=\"user?.getName() ?? this.group?.getName()\" [labelStyle]=\"labelStyle\"></cometchat-label>\n </div>\n </div>\n <div class=\"cc-call-log-details__section-list\"\n *ngIf=\"showCallLogDetailOptionList && defaultTemplate && defaultTemplate.length > 0\">\n <div class=\"cc-call-log-details__section\" *ngFor=\"let item of defaultTemplate\">\n <div class=\"cc-call-log-details__section-separator\" *ngIf=\"item.title\">\n <cometchat-label [text]=\"item.title\"></cometchat-label>\n </div>\n <div class=\"cc-call-log-details__options-wrapper\" *ngIf=\"getTemplateOptions(item)\">\n <div class=\"cc-call-log-details__options\" *ngFor=\"let option of getTemplateOptions(item); trackBy: trackByFnOption \">\n <div class=\"cc-call-log-details__option\" *ngIf=\"!getCustomOptionView(option);else customView\">\n <div class=\"cc-call-log-details__option-element\">\n\n <div class=\"cc-call-log-details__calling-default-option\" *ngIf=\"option.id=='calls'\">\n\n <cometchat-call-buttons [user]=\"user\" [group]=\"group\"\n [callButtonsStyle]=\"callButtonsConfiguration.callButtonsStyle\"\n [onVideoCallClick]=\"callButtonsConfiguration.onVideoCallClick\"\n [onVoiceCallClick]=\"callButtonsConfiguration.onVoiceCallClick\"\n [videoCallIconURL]=\"callButtonsConfiguration.videoCallIconURL\"\n [voiceCallIconURL]=\"callButtonsConfiguration.voiceCallIconURL\"></cometchat-call-buttons>\n </div>\n <cometchat-list-item *ngIf=\"option.id==='callStatus'\" [listItemStyle]=\"getListItemStyle(option)\"\n [hideSeparator]=\"true\">\n <div class=\"cc-call-log-details__call-Status\" slot=\"subtitleView\" >\n <div *ngIf=\"!subtitleView; else subtitle\" style=\"width: 100%;\">\n <div> <cometchat-date [dateStyle]=\"dateStyle\" [timestamp]=\"call?.getInitiatedAt()\"\n [pattern]=\"datePattern2\">\n </cometchat-date></div>\n\n <div\n class=\"cc-call-log-details__call-Status__subTitle\">\n <div>\n\n <cometchat-date [dateStyle]=\"dateStyle\" [timestamp]=\"call?.getInitiatedAt()\"\n [pattern]=\"datePattern\">\n </cometchat-date>\n <cometchat-label [text]=\"getSubtitle(call)\" [labelStyle]=\"subtitleStyle(option)\">\n </cometchat-label>\n </div>\n <div class=\"cc-call-log-details__call-Status__tailview\" [style]=\"getTailViewStyle()\"> {{ getTailView(call?.getTotalDurationInMinutes()!) }}\n </div>\n\n </div>\n\n\n </div>\n\n <ng-template #subtitle>\n <ng-container *ngTemplateOutlet=\"subtitleView;context:{ $implicit: user ?? group }\">\n </ng-container>\n </ng-template>\n </div>\n\n\n </cometchat-list-item>\n <cometchat-list-item *ngIf=\"option.id!=='calls' && option.id!=='callStatus' \"\n (cc-listitem-clicked)=\"onOptionClick(option)\" [listItemStyle]=\"getListItemStyle(option)\"\n [title]=\"option.title\" [hideSeparator]=\"true\">\n \n <div slot=\"tailView\" class=\"cc-call-log-details__secondary-view__tail-view\" [style]=\"getTailViewStyle()\"\n >\n {{option.tail}}\n <cometchat-icon [iconStyle]=\"iconStyle\" [URL]=\"greaterThanIconURL\"></cometchat-icon>\n </div>\n\n \n\n </cometchat-list-item>\n\n </div>\n </div>\n <ng-template #customView>\n <ng-container *ngTemplateOutlet=\"getCustomOptionView(option)\">\n </ng-container>\n </ng-template>\n </div>\n </div>\n </div>\n </div>\n\n\n\n <div *ngIf=\"showParticipantsList || showCallRecordingList || showCallHistory\" style=\" height: 100%;\">\n\n <div *ngIf=\"showParticipantsList\" style=\"height: 100%;\">\n <cometchat-call-log-participants [call]=\"call\"\n [onBackClick]=\"callLogParticipantsConfiguration.onBackClick || handlePageOnBackClick\"\n [backIconUrl]=\"callLogParticipantsConfiguration.backIconUrl || backIconUrl\"\n [avatarStyle]=\"callLogParticipantsConfiguration.avatarStyle\"\n [onItemClick]=\"callLogParticipantsConfiguration.onItemClick!\"\n [datePattern]=\"callLogParticipantsConfiguration.datePattern\"\n [subtitleView]=\"callLogParticipantsConfiguration.subtitleView\"\n [listItemView]=\"callLogParticipantsConfiguration.listItemView\"\n\n [listItemStyle]=\"callLogParticipantsConfiguration.listItemStyle\" [callLogParticipantsStyle]=\"\n callLogParticipantsConfiguration.callLogParticipantsStyle\"\n \n [tailView]=\"callLogParticipantsConfiguration.tailView\"></cometchat-call-log-participants>\n </div>\n <div *ngIf=\"showCallRecordingList\" style=\"height:100%;\">\n <cometchat-call-log-recordings [call]=\"call\"\n [backIconUrl]=\"callLogRecordingsConfiguration.backIconUrl || backIconUrl\" [onBackClick]=\"\n callLogRecordingsConfiguration.onBackClick || handlePageOnBackClick\n \" [onItemClick]=\"callLogRecordingsConfiguration.onItemClick!\"\n [datePattern]=\"callLogRecordingsConfiguration.datePattern!\"\n [listItemStyle]=\"callLogRecordingsConfiguration.listItemStyle\" callLogRecordingsStyle=\"\n callLogRecordingsConfiguration.callLogRecordingsStyle\n callLogRecordingsConfiguration.hideDownloadButton || false\n \" [onDownloadClick]=\"callLogRecordingsConfiguration.onDownloadClick!\"\n [listItemView]=\"callLogRecordingsConfiguration.listItemView\"\n [subtitleView]=\"callLogRecordingsConfiguration.subtitleView\"\n [tailView]=\"callLogRecordingsConfiguration.tailView\"></cometchat-call-log-recordings>\n </div>\n <div *ngIf=\"showCallHistory\" style=\"height: 100%; \">\n <cometchat-call-log-history [call]=\"call\" [user]=\"user\" [group]=\"group\" [onBackClick]=\"handlePageOnBackClick\"\n [backIconUrl]=\"callLogHistoryConfiguration.backIconUrl || backIconUrl\"\n [emptyStateView]=\"callLogHistoryConfiguration.emptyStateView\"\n [errorStateView]=\"callLogHistoryConfiguration.errorStateView\"\n [loadingIconURL]=\"callLogHistoryConfiguration.loadingIconURL\"\n [loadingStateView]=\"callLogHistoryConfiguration.loadingStateView\"\n [tailView]=\"callLogHistoryConfiguration.tailView\" [callLogRequestBuilder]=\"\n callLogHistoryConfiguration.callLogRequestBuilder\n \" [onItemClick]=\"callLogHistoryConfiguration.onItemClick || onItemClick\" [onBackClick]=\"\n callLogHistoryConfiguration.onBackClick || handlePageOnBackClick\n \" [listItemStyle]=\"callLogHistoryConfiguration.listItemStyle\"\n [datePattern]=\"callLogHistoryConfiguration.datePattern\" [dateSeparatorPattern]=\"\n callLogHistoryConfiguration.dateSeparatorPattern\n \" [callLogHistoryStyle]=\"\n callLogHistoryConfiguration.callLogHistoryStyle\n \" [onError]=\"callLogHistoryConfiguration.onError!\"></cometchat-call-log-history>\n </div>\n\n </div>\n </div>\n</div>\n\n\n<ng-template #listitem>\n <ng-container *ngTemplateOutlet=\"customProfileView\">\n </ng-container>\n</ng-template>", styles: ["*{box-sizing:border-box;margin:0;padding:0}.cc-call-log-details__header{display:flex;gap:10px;align-items:center;height:3%}.cc-call-log-details{height:98%}.cc-call-log-details__profile{display:flex;align-items:center;justify-content:center}.cc-call-log-details__default-profile{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%}.cc-call-log-details__section{margin:10px 3px 3px}.cc-call-log-details__option{margin-top:5px}.cc-call-log-details__calling-default-option{display:flex;align-items:center;justify-content:center;margin:10px}.cc-call-log-details__call-Status{display:flex;justify-content:space-between}.cc-call-log-details__call-Status__subTitle{display:flex;justify-content:space-between;margin:10px 0;padding-right:8px;width:100%}.cc-call-log-details__call-Status__tailview{color:gray}.cc-call-log-details__secondary-view__tail-view{display:flex;align-items:center;justify-content:center;gap:5px;color:RGBA(20,20,20,.68)}\n"], components: [{ type: i2.CometChatCallButtonsComponent, selector: "cometchat-call-buttons", inputs: ["user", "group", "voiceCallIconURL", "voiceCallIconText", "voiceCallIconHoverText", "videoCallIconURL", "videoCallIconText", "videoCallIconHoverText", "onVoiceCallClick", "onVideoCallClick", "onError", "callButtonsStyle", "outgoingCallConfiguration", "ongoingCallConfiguration"] }, { type: i3.CometChatCallLogParticipantsComponent, selector: "cometchat-call-log-participants", inputs: ["title", "call", "backIconUrl", "onBackClick", "datePattern", "subtitleView", "listItemView", "onError", "hideSeparator", "avatarStyle", "dateStyle", "CallLogParticipantsStyle", "listItemStyle"] }, { type: i4.CometChatCallLogRecordingsComponent, selector: "cometchat-call-log-recordings", inputs: ["title", "call", "onBackClick", "backIconURL", "datePattern", "subtitleView", "listItemView", "downloadIconURL", "onDownloadClick", "hideDownloadButton", "onError", "avatarStyle", "dateStyle", "CallLogRecordingsStyle", "listItemStyle", "options"] }, { type: i5.CometChatCallLogHistoryComponent, selector: "cometchat-call-log-history", inputs: ["user", "group", "title", "emptyStateView", "errorStateView", "loadingStateView", "subtitleView", "listItemView", "menu", "emptyStateText", "errorStateText", "loadingIconURL", "backIconUrl", "onItemClick", "onBackClick", "callLogRequestBuilder", "DateSeparatorPattern", "hideSeparator", "dateSeparatorStyle", "hideError", "onError", "showSectionHeader", "sectionHeaderField", "datePattern", "avatarStyle", "dateStyle", "CallLogHistoryStyle", "listItemStyle"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatCallLogDetailsComponent, decorators: [{
type: Component,
args: [{ selector: "cometchat-call-log-details", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cc-call-log-details__wrapper\" *ngIf=\"user || group\" [ngStyle]=\"wrapperStyle()\">\n\n <div class=\"cc-call-log-details__header\"\n *ngIf=\"onBackClick && !(showParticipantsList || showCallRecordingList || showCallHistory)\">\n <cometchat-button [iconURL]=\"backIconUrl\" class=\"cc-call-log-details__close-button\" [buttonStyle]=\"backButtonStyle()\"\n (cc-button-clicked)=\"onBackClick()\"></cometchat-button>\n <cometchat-label [text]=\"title\" [labelStyle]=\"getTitleStyle()\"></cometchat-label>\n </div>\n\n <div class=\"cc-call-log-details\">\n <div class=\"cc-call-log-details__profile\"\n *ngIf=\"!hideProfile && showCallLogDetailOptionList && !(showParticipantsList || showCallRecordingList || showCallHistory)\">\n\n\n <div class=\" cc-call-log-details__default-profile\" *ngIf=\"!customProfileView;else listitem\" [ngStyle]=\"profileContainerStyle()\">\n <cometchat-avatar [name]=\"user?.getName() ?? group?.getName()\" [avatarStyle]=\"avatarStyle\"\n [image]=\"user?.getAvatar() ?? group?.getIcon()\">\n </cometchat-avatar>\n\n <cometchat-label [text]=\"user?.getName() ?? this.group?.getName()\" [labelStyle]=\"labelStyle\"></cometchat-label>\n </div>\n </div>\n <div class=\"cc-call-log-details__section-list\"\n *ngIf=\"showCallLogDetailOptionList && defaultTemplate && defaultTemplate.length > 0\">\n <div class=\"cc-call-log-details__section\" *ngFor=\"let item of defaultTemplate\">\n <div class=\"cc-call-log-details__section-separator\" *ngIf=\"item.title\">\n <cometchat-label [text]=\"item.title\"></cometchat-label>\n </div>\n <div class=\"cc-call-log-details__options-wrapper\" *ngIf=\"getTemplateOptions(item)\">\n <div class=\"cc-call-log-details__options\" *ngFor=\"let option of getTemplateOptions(item); trackBy: trackByFnOption \">\n <div class=\"cc-call-log-details__option\" *ngIf=\"!getCustomOptionView(option);else customView\">\n <div class=\"cc-call-log-details__option-element\">\n\n <div class=\"cc-call-log-details__calling-default-option\" *ngIf=\"option.id=='calls'\">\n\n <cometchat-call-buttons [user]=\"user\" [group]=\"group\"\n [callButtonsStyle]=\"callButtonsConfiguration.callButtonsStyle\"\n [onVideoCallClick]=\"callButtonsConfiguration.onVideoCallClick\"\n [onVoiceCallClick]=\"callButtonsConfiguration.onVoiceCallClick\"\n [videoCallIconURL]=\"callButtonsConfiguration.videoCallIconURL\"\n [voiceCallIconURL]=\"callButtonsConfiguration.voiceCallIconURL\"></cometchat-call-buttons>\n </div>\n <cometchat-list-item *ngIf=\"option.id==='callStatus'\" [listItemStyle]=\"getListItemStyle(option)\"\n [hideSeparator]=\"true\">\n <div class=\"cc-call-log-details__call-Status\" slot=\"subtitleView\" >\n <div *ngIf=\"!subtitleView; else subtitle\" style=\"width: 100%;\">\n <div> <cometchat-date [dateStyle]=\"dateStyle\" [timestamp]=\"call?.getInitiatedAt()\"\n [pattern]=\"datePattern2\">\n </cometchat-date></div>\n\n <div\n class=\"cc-call-log-details__call-Status__subTitle\">\n <div>\n\n <cometchat-date [dateStyle]=\"dateStyle\" [timestamp]=\"call?.getInitiatedAt()\"\n [pattern]=\"datePattern\">\n </cometchat-date>\n <cometchat-label [text]=\"getSubtitle(call)\" [labelStyle]=\"subtitleStyle(option)\">\n </cometchat-label>\n </div>\n <div class=\"cc-call-log-details__call-Status__tailview\" [style]=\"getTailViewStyle()\"> {{ getTailView(call?.getTotalDurationInMinutes()!) }}\n </div>\n\n </div>\n\n\n </div>\n\n <ng-template #subtitle>\n <ng-container *ngTemplateOutlet=\"subtitleView;context:{ $implicit: user ?? group }\">\n </ng-container>\n </ng-template>\n </div>\n\n\n </cometchat-list-item>\n <cometchat-list-item *ngIf=\"option.id!=='calls' && option.id!=='callStatus' \"\n (cc-listitem-clicked)=\"onOptionClick(option)\" [listItemStyle]=\"getListItemStyle(option)\"\n [title]=\"option.title\" [hideSeparator]=\"true\">\n \n <div slot=\"tailView\" class=\"cc-call-log-details__secondary-view__tail-view\" [style]=\"getTailViewStyle()\"\n >\n {{option.tail}}\n <cometchat-icon [iconStyle]=\"iconStyle\" [URL]=\"greaterThanIconURL\"></cometchat-icon>\n </div>\n\n \n\n </cometchat-list-item>\n\n </div>\n </div>\n <ng-template #customView>\n <ng-container *ngTemplateOutlet=\"getCustomOptionView(option)\">\n </ng-container>\n </ng-template>\n </div>\n </div>\n </div>\n </div>\n\n\n\n <div *ngIf=\"showParticipantsList || showCallRecordingList || showCallHistory\" style=\" height: 100%;\">\n\n <div *ngIf=\"showParticipantsList\" style=\"height: 100%;\">\n <cometchat-call-log-participants [call]=\"call\"\n [onBackClick]=\"callLogParticipantsConfiguration.onBackClick || handlePageOnBackClick\"\n [backIconUrl]=\"callLogParticipantsConfiguration.backIconUrl || backIconUrl\"\n [avatarStyle]=\"callLogParticipantsConfiguration.avatarStyle\"\n [onItemClick]=\"callLogParticipantsConfiguration.onItemClick!\"\n [datePattern]=\"callLogParticipantsConfiguration.datePattern\"\n [subtitleView]=\"callLogParticipantsConfiguration.subtitleView\"\n [listItemView]=\"callLogParticipantsConfiguration.listItemView\"\n\n [listItemStyle]=\"callLogParticipantsConfiguration.listItemStyle\" [callLogParticipantsStyle]=\"\n callLogParticipantsConfiguration.callLogParticipantsStyle\"\n \n [tailView]=\"callLogParticipantsConfiguration.tailView\"></cometchat-call-log-participants>\n </div>\n <div *ngIf=\"showCallRecordingList\" style=\"height:100%;\">\n <cometchat-call-log-recordings [call]=\"call\"\n [backIconUrl]=\"callLogRecordingsConfiguration.backIconUrl || backIconUrl\" [onBackClick]=\"\n callLogRecordingsConfiguration.onBackClick || handlePageOnBackClick\n \" [onItemClick]=\"callLogRecordingsConfiguration.onItemClick!\"\n [datePattern]=\"callLogRecordingsConfiguration.datePattern!\"\n [listItemStyle]=\"callLogRecordingsConfiguration.listItemStyle\" callLogRecordingsStyle=\"\n callLogRecordingsConfiguration.callLogRecordingsStyle\n callLogRecordingsConfiguration.hideDownloadButton || false\n \" [onDownloadClick]=\"callLogRecordingsConfiguration.onDownloadClick!\"\n [listItemView]=\"callLogRecordingsConfiguration.listItemView\"\n [subtitleView]=\"callLogRecordingsConfiguration.subtitleView\"\n [tailView]=\"callLogRecordingsConfiguration.tailView\"></cometchat-call-log-recordings>\n </div>\n <div *ngIf=\"showCallHistory\" style=\"height: 100%; \">\n <cometchat-call-log-history [call]=\"call\" [user]=\"user\" [group]=\"group\" [onBackClick]=\"handlePageOnBackClick\"\n [backIconUrl]=\"callLogHistoryConfiguration.backIconUrl || backIconUrl\"\n [emptyStateView]=\"callLogHistoryConfiguration.emptyStateView\"\n [errorStateView]=\"callLogHistoryConfiguration.errorStateView\"\n [loadingIconURL]=\"callLogHistoryConfiguration.loadingIconURL\"\n [loadingStateView]=\"callLogHistoryConfiguration.loadingStateView\"\n [tailView]=\"callLogHistoryConfiguration.tailView\" [callLogRequestBuilder]=\"\n callLogHistoryConfiguration.callLogRequestBuilder\n \" [onItemClick]=\"callLogHistoryConfiguration.onItemClick || onItemClick\" [onBackClick]=\"\n callLogHistoryConfiguration.onBackClick || handlePageOnBackClick\n \" [listItemStyle]=\"callLogHistoryConfiguration.listItemStyle\"\n [datePattern]=\"callLogHistoryConfiguration.datePattern\" [dateSeparatorPattern]=\"\n callLogHistoryConfiguration.dateSeparatorPattern\n \" [callLogHistoryStyle]=\"\n callLogHistoryConfiguration.callLogHistoryStyle\n \" [onError]=\"callLogHistoryConfiguration.onError!\"></cometchat-call-log-history>\n </div>\n\n </div>\n </div>\n</div>\n\n\n<ng-template #listitem>\n <ng-container *ngTemplateOutlet=\"customProfileView\">\n </ng-container>\n</ng-template>", styles: ["*{box-sizing:border-box;margin:0;padding:0}.cc-call-log-details__header{display:flex;gap:10px;align-items:center;height:3%}.cc-call-log-details{height:98%}.cc-call-log-details__profile{display:flex;align-items:center;justify-content:center}.cc-call-log-details__default-profile{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%}.cc-call-log-details__section{margin:10px 3px 3px}.cc-call-log-details__option{margin-top:5px}.cc-call-log-details__calling-default-option{display:flex;align-items:center;justify-content:center;margin:10px}.cc-call-log-details__call-Status{display:flex;justify-content:space-between}.cc-call-log-details__call-Status__subTitle{display:flex;justify-content:space-between;margin:10px 0;padding-right:8px;width:100%}.cc-call-log-details__call-Status__tailview{color:gray}.cc-call-log-details__secondary-view__tail-view{display:flex;align-items:center;justify-content:center;gap:5px;color:RGBA(20,20,20,.68)}\n"] }]
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.CometChatThemeService }]; }, propDecorators: { call: [{
type: Input
}], group: [{
type: Input
}], user: [{
type: Input
}], title: [{
type: Input
}], onBackClick: [{
type: Input
}], hideProfile: [{
type: Input
}], subtitleView: [{
type: Input
}], customProfileView: [{
type: Input
}], backIconUrl: [{
type: Input
}], greaterThanIconURL: [{
type: Input
}], callButtonsConfiguration: [{
type: Input
}], callLogParticipantsConfiguration: [{
type: Input
}], callLogHistoryConfiguration: [{
type: Input
}], callLogRecordingsConfiguration: [{
type: Input
}], onError: [{
type: Input
}], datePattern: [{
type: Input
}], datePattern2: [{
type: Input
}], data: [{
type: Input
}], avatarStyle: [{
type: Input
}], labelStyle: [{
type: Input
}], callDetailsStyle: [{
type: Input
}], listItemStyle: [{
type: Input
}], dateStyle: [{
type: Input
}], callButtonsStyle: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tZXRjaGF0LWNhbGwtbG9nLWRldGFpbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhdC11aWtpdC1hbmd1bGFyL3NyYy9DYWxscy9Db21ldENoYXRDYWxsTG9nRGV0YWlscy9jb21ldGNoYXQtY2FsbC1sb2ctZGV0YWlscy9jb21ldGNoYXQtY2FsbC1sb2ctZGV0YWlscy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXVpa2l0LWFuZ3VsYXIvc3JjL0NhbGxzL0NvbWV0Q2hhdENhbGxMb2dEZXRhaWxzL2NvbWV0Y2hhdC1jYWxsLWxvZy1kZXRhaWxzL2NvbWV0Y2hhdC1jYWxsLWxvZy1kZXRhaWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUVMLHVCQUF1QixHQUt4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFDTCxXQUFXLEVBQ1gsU0FBUyxFQUdULGFBQWEsR0FDZCxNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFFTCx3QkFBd0IsRUFDeEIsbUJBQW1CLEVBQ25CLGdDQUFnQyxFQUNoQywyQkFBMkIsRUFDM0IsOEJBQThCLEdBQy9CLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUNMLFVBQVUsRUFDVixRQUFRLEVBSVIsWUFBWSxHQUViLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQTtBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7Ozs7O0FBUWxFLE1BQU0sT0FBTyxnQ0FBZ0M7SUFvRzNDLFlBQ1UsR0FBc0Is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