{"version":3,"sources":["node_modules/dayjs/plugin/calendar.js","libs/conversation/ui/src/pages/inbox-chat/components/inbox-upload-file/inbox-upload.service.ts","libs/conversation/pipes/src/conversation.pipe.ts","libs/conversation/pipes/src/firebase-timestamp-to-date.ts","libs/conversation/pipes/src/in-array.pipe.ts","libs/conversation/pipes/src/message.pipes.ts","libs/conversation/pipes/src/ticket-pane.pipe.ts","libs/conversation/pipes/src/timestamp.pipe.ts","libs/conversation/pipes/src/views.pipe.ts","libs/conversation/pipes/src/pipes.module.ts","libs/conversation/ui/src/guards/sms-access.guard.ts","libs/galaxy/chat-composer/src/chat-composer.component.ts","libs/galaxy/chat-composer/src/chat-composer.component.html","libs/conversation/ui/src/pages/inbox-chat/components/inbox-insert-payment-link/inbox-insert-payment-link-form.component.ts","libs/conversation/ui/src/pages/inbox-chat/components/inbox-insert-payment-link/inbox-insert-payment-link-form.component.html","libs/conversation/ui/src/pages/inbox-chat/components/inbox-insert-payment-link/inbox-insert-payment-link.component.ts","node_modules/@vendasta/customer-voice-service/fesm2020/vendasta-customer-voice-service.mjs","libs/conversation/core/src/lib/listing.service.ts","libs/conversation/ui/src/pages/inbox-chat/components/inbox-insert-review-link/inbox-insert-review-link.component.ts","libs/conversation/ui/src/pages/inbox-chat/components/inbox-insert-review-link/inbox-insert-review-link.component.html","libs/conversation/ui/src/constants.ts","libs/conversation/ui/src/pages/inbox-chat/components/inbox-insert-template/inbox-insert-template.component.ts","libs/conversation/ui/src/pages/inbox-chat/components/inbox-insert-template/inbox-insert-template.component.html","node_modules/@vendasta/google-my-business/fesm2020/vendasta-google-my-business.mjs","libs/conversation/core/src/lib/channels/conversation-channel.abstract.ts","libs/conversation/core/src/lib/channels/conversation-google.service.ts","libs/conversation/core/src/lib/channels/alert-helpers.ts","libs/conversation/core/src/lib/channels/conversation-webchat.service.ts","libs/conversation/core/src/lib/inbox-notification.service.ts","libs/conversation/core/src/lib/view.service.ts","libs/conversation/core/src/lib/conversation-list.service.ts","libs/conversation/core/src/lib/inbox-terms-of-service.service.ts","libs/conversation/core/src/lib/types.ts","libs/galaxy/chat-composer/src/directives/chat-composer-action-button.directive.ts","libs/conversation/ui/src/pages/inbox-chat/components/inbox-upload-file/inbox-upload-file.component.ts","libs/conversation/ui/src/pages/inbox-chat/components/inbox-upload-file/inbox-upload-file.component.html","libs/galaxy/chat-composer/src/directives/chat-composer-actions.directive.ts","libs/galaxy/chat-composer/src/directives/chat-composer-beside-send.directive.ts","libs/conversation/ui/src/pages/inbox-chat/components/inbox-message-text/inbox-message-text.component.ts","libs/conversation/ui/src/pages/inbox-chat/components/inbox-message-text/inbox-message-text.component.html","libs/conversation/ui/src/pages/inbox-chat/components/inbox-messages/media-dialog.component.ts","libs/conversation/ui/src/pages/inbox-chat/components/inbox-messages/media-dialog.component.html","libs/conversation/ui/src/pages/inbox-chat/components/inbox-messages/response-evaluation-dialog.component.ts","libs/conversation/ui/src/pages/inbox-chat/components/inbox-messages/response-evaluation-dialog.component.html","libs/conversation/ui/src/pages/inbox-chat/components/inbox-messages/inbox-messages.component.ts","libs/conversation/ui/src/pages/inbox-chat/components/inbox-messages/inbox-messages.component.html","libs/conversation/ui/src/pages/inbox-ai-chat/inbox-ai-chat.component.ts","libs/conversation/ui/src/pages/inbox-ai-chat/inbox-ai-chat.component.html","libs/galaxy/chat-composer/src/chat-composer.module.ts","libs/conversation/ui/src/components/inbox-conversation-preview/inbox-conversation-preview.component.ts","libs/conversation/ui/src/components/inbox-conversation-preview/inbox-conversation-preview.component.html","libs/conversation/ui/src/components/inbox-conversation-title/inbox-conversation-title.component.ts","libs/conversation/ui/src/components/inbox-conversation-title/inbox-conversation-title.component.html","libs/conversation/ui/src/components/inbox-pane-preview/inbox-pane-preview.component.ts","libs/conversation/ui/src/components/inbox-pane-preview/inbox-pane-preview.component.html","libs/conversation/ui/src/components/inbox-pane/inbox-pane.component.ts","libs/conversation/ui/src/components/inbox-pane/inbox-pane.component.html","libs/conversation/ui/src/components/inbox-views-empty/inbox-views-empty.component.ts","libs/conversation/ui/src/components/inbox-views-empty/inbox-views-empty.component.html","libs/conversation/ui/src/components/inbox-zero/inbox-zero.component.ts","libs/conversation/ui/src/components/inbox-zero/inbox-zero.component.html","libs/conversation/ui/src/components/inbox-views/inbox-views.component.ts","libs/conversation/ui/src/components/inbox-views/inbox-views.component.html","libs/conversation/ui/src/components/inbox-select-contact/inbox-select-contact.component.ts","libs/conversation/ui/src/components/inbox-select-contact/inbox-select-contact.component.html","libs/conversation/ui/src/components/inbox-welcome/inbox-welcome.component.ts","libs/conversation/ui/src/components/inbox-welcome/inbox-welcome.component.html","libs/conversation/ui/src/conversation-ui.routing.ts","libs/conversation/ui/src/guards/web-chat-access.guard.ts","libs/conversation/ui/src/pages/inbox-chat/components/inbox-info-pane/inbox-ticket-card/inbox-ticket-card.component.ts","libs/conversation/ui/src/pages/inbox-chat/components/inbox-info-pane/inbox-ticket-card/inbox-ticket-card.component.html","libs/conversation/ui/src/pages/inbox-chat/components/inbox-info-pane/inbox-ticket/ticket-info.ts","libs/conversation/ui/src/pages/inbox-chat/components/inbox-info-pane/inbox-ticket/inbox-ticket-list.component.ts","libs/conversation/ui/src/pages/inbox-chat/components/inbox-info-pane/inbox-ticket/inbox-ticket-list.component.html","libs/conversation/ui/src/pages/inbox-chat/components/inbox-info-pane/inbox-ticket/inbox-ticket.component.ts","libs/conversation/ui/src/pages/inbox-chat/components/inbox-info-pane/inbox-ticket/inbox-ticket.component.html","libs/conversation/ui/src/components/inbox-conversation-assignee/inbox-conversation-assignee.component.ts","libs/conversation/ui/src/components/inbox-conversation-assignee/inbox-conversation-assignee.component.html","libs/conversation/ui/src/components/inbox-conversation-subtitle/inbox-conversation-subtitle.component.ts","libs/conversation/ui/src/pages/inbox-chat/components/inbox-info-pane/inbox-info-drawer.service.ts","libs/conversation/ui/src/pages/inbox-chat/components/inbox-messages-top-bar/summarize-conversation-dialog.component.ts","libs/conversation/ui/src/pages/inbox-chat/components/inbox-messages-top-bar/summarize-conversation-dialog.component.html","libs/conversation/ui/src/pages/inbox-chat/components/inbox-messages-top-bar/inbox-messages-top-bar.component.ts","libs/conversation/ui/src/pages/inbox-chat/components/inbox-messages-top-bar/inbox-messages-top-bar.component.html","libs/conversation/ui/src/pages/inbox-chat/components/inbox-terms-of-service/inbox-terms-of-service.component.ts","libs/conversation/ui/src/pages/inbox-chat/components/inbox-terms-of-service/inbox-terms-of-service.component.html","libs/conversation/ui/src/pages/inbox-chat/inbox-chat.component.ts","libs/conversation/ui/src/pages/inbox-chat/inbox-chat.component.html","libs/conversation/ui/src/pages/inbox-create-contact/create-contact-form.component.ts","libs/conversation/ui/src/pages/inbox-create-contact/create-contact-form.component.html","libs/conversation/ui/src/pages/inbox-new-message/inbox-new-message.component.ts","libs/conversation/ui/src/pages/inbox-new-message/inbox-new-message.component.html","libs/conversation/ui/src/pages/inbox-send-message/inbox-send-message.resolver.ts","libs/conversation/ui/src/conversation-ui.module.ts","libs/conversation/ui/src/pages/inbox-home/inbox-home.component.ts","libs/conversation/ui/src/pages/inbox-home/inbox-home.component.html"],"sourcesContent":["!function (e, t) {\n \"object\" == typeof exports && \"undefined\" != typeof module ? module.exports = t() : \"function\" == typeof define && define.amd ? define(t) : (e = \"undefined\" != typeof globalThis ? globalThis : e || self).dayjs_plugin_calendar = t();\n}(this, function () {\n \"use strict\";\n\n return function (e, t, a) {\n var n = \"h:mm A\",\n d = {\n lastDay: \"[Yesterday at] \" + n,\n sameDay: \"[Today at] \" + n,\n nextDay: \"[Tomorrow at] \" + n,\n nextWeek: \"dddd [at] \" + n,\n lastWeek: \"[Last] dddd [at] \" + n,\n sameElse: \"MM/DD/YYYY\"\n };\n t.prototype.calendar = function (e, t) {\n var n = t || this.$locale().calendar || d,\n o = a(e || void 0).startOf(\"d\"),\n s = this.diff(o, \"d\", !0),\n i = \"sameElse\",\n f = s < -6 ? i : s < -1 ? \"lastWeek\" : s < 0 ? \"lastDay\" : s < 1 ? \"sameDay\" : s < 2 ? \"nextDay\" : s < 7 ? \"nextWeek\" : i,\n l = n[f] || d[f];\n return \"function\" == typeof l ? l.call(this, a()) : this.format(l);\n };\n };\n});","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Environment, EnvironmentService } from '@galaxy/core';\nimport { FileInfo, GalaxyUploaderService, UploadResponse } from '@vendasta/galaxy/uploader';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { map, switchMap, take } from 'rxjs/operators';\nimport { ChatSourceId } from '@vendasta/galaxy/chat-composer/src/chat-composer.component';\n\n@Injectable()\nexport class InboxUploadService extends GalaxyUploaderService {\n conversationId$$: ReplaySubject = new ReplaySubject(1);\n conversationId$: Observable = this.conversationId$$.asObservable();\n\n constructor(http: HttpClient, private readonly env: EnvironmentService) {\n super(http);\n }\n\n buildRequest(fileInfo: FileInfo): Observable {\n this.uploadUrl = 'https://conversation-demo.apigateway.co/upload-file';\n if (this.env.getEnvironment() === Environment.PROD) {\n this.uploadUrl = 'https://conversation-prod.apigateway.co/upload-file';\n }\n return this.conversationId$.pipe(\n map((conversationId) => new HttpParams().set('conversationID', conversationId)),\n switchMap((params) => {\n const body = new FormData();\n\n body.append('file', fileInfo.file);\n const options = { withCredentials: true };\n if (params) {\n options['params'] = params;\n }\n return this.http.post(this.uploadUrl, body, options) as Observable;\n }),\n take(1),\n );\n }\n}\n\n/**\n * Returns the max file size for a given channel in bytes\n * @param chatSourceId\n */\nexport function getMaxFileSize(chatSourceId?: ChatSourceId): number {\n if (!chatSourceId) {\n return 0;\n }\n switch (chatSourceId) {\n case 'sms':\n return 5 * 1024 * 1024; // 5MB\n default:\n return 250 * 1024 * 1024; // 250MB\n }\n}\n\n/**\n * Returns the accepted file types for a given channel\n * @param chatSourceId\n */\nexport function getAcceptFileTypes(chatSourceId?: ChatSourceId): string {\n if (!chatSourceId) {\n return '';\n }\n switch (chatSourceId) {\n case 'sms':\n return 'image/jpeg, image/jpg, image/png, image/gif';\n default:\n return '*/*';\n }\n}\n\n/**\n * Returns the max file size for a given channel in MB\n * @param chatSourceId\n */\nexport function getMaxFileSizeInMB(chatSourceId?: ChatSourceId): number {\n if (!chatSourceId) {\n return 0;\n }\n return getMaxFileSize(chatSourceId) / 1024 / 1024;\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { Conversation, Participant, ParticipantType } from '@vendasta/conversation';\nimport { Observable, map } from 'rxjs';\nimport { formatUnreadConversationsCount, toFirestoreId } from '../../core/src/lib/conversation-utils';\nimport { ConversationService } from '../../core/src/lib/conversation.service';\nimport { ConversationBadge, ConversationDetail } from '../../core/src/lib/interface/conversation.interface';\nimport { CONVERSATION_HOST_APP_INTERFACE_TOKEN, CONVERSATION_ROUTES_TOKEN } from '../../core/src/lib/tokens';\nimport { ViewMode } from '../../core/src/lib/types';\nimport { ViewModeService } from '../../core/src/lib/view-mode.service';\nimport {\n getAcceptFileTypes,\n getMaxFileSize,\n} from '../../ui/src/pages/inbox-chat/components/inbox-upload-file/inbox-upload.service';\nimport { ChatSourceId } from '@vendasta/galaxy/chat-composer/src/chat-composer.component';\n\n// Determine the conversation URL route\n@Pipe({ name: 'conversationRoute' })\nexport class ConversationRoutePipe implements PipeTransform {\n private readonly routes = toSignal(inject(CONVERSATION_ROUTES_TOKEN));\n\n constructor(private viewModeService: ViewModeService) {}\n\n transform(\n conversationDetail: ConversationDetail,\n conversationPath?: string,\n viewMode: ViewMode = 'modal',\n ): string | [string, object] | any[] {\n const firestoreId = toFirestoreId(conversationDetail?.conversation?.conversationId);\n if (this.routes().useModal) {\n return this.viewModeService.routerCommands(viewMode, firestoreId);\n }\n\n if (conversationPath) {\n return `${conversationPath}/${firestoreId}`;\n }\n return `${this.routes().root}/inbox/channel/${firestoreId}`;\n }\n}\n\n@Pipe({ name: 'conversationBadge' })\nexport class ConversationBadgePipe implements PipeTransform {\n private readonly hostAppInterface = inject(CONVERSATION_HOST_APP_INTERFACE_TOKEN);\n\n private getConversationBadge(conversation: ConversationDetail): ConversationBadge[] {\n const recipient = this.hostAppInterface.getRecipient(conversation);\n return (Array.isArray(recipient) ? recipient : [recipient])\n .map((subjectParticipant) =>\n !subjectParticipant\n ? null\n : this.getConversationBadgeByParticipant(\n subjectParticipant,\n this.hostAppInterface.isRecipientInternalInfoDeleted(conversation),\n ),\n )\n .filter((badge): badge is ConversationBadge => !!badge);\n }\n\n /**\n * TODO - Add more cases to make the badge work in business app && vendor center\n * get badge for Participants\n * @param {SubjectParticipant} participant - the current Participant\n * @param {boolean} deleted - status of deletion\n */\n private getConversationBadgeByParticipant(participant: Participant, deleted: boolean): ConversationBadge | null {\n if (deleted) {\n return { participantType: 'INBOX.LABELS.INACTIVE', badgeColor: 'grey' };\n }\n switch (participant.participantType) {\n case ParticipantType.PARTICIPANT_TYPE_VENDOR:\n return { participantType: 'INBOX.LABELS.VENDOR', badgeColor: 'purple' };\n case ParticipantType.PARTICIPANT_TYPE_ACCOUNT_GROUP:\n return { participantType: 'INBOX.LABELS.ACCOUNT', badgeColor: 'blue' };\n case ParticipantType.PARTICIPANT_TYPE_PARTNER:\n return { participantType: 'INBOX.LABELS.PARTNER', badgeColor: 'green' };\n case ParticipantType.PARTICIPANT_TYPE_OPENAI_BOT:\n return { participantType: 'INBOX.LABELS.APP', badgeColor: 'yellow' };\n }\n\n return null;\n }\n\n transform(conversationDetail: ConversationDetail): ConversationBadge[] {\n return this.getConversationBadge(conversationDetail);\n }\n}\n\n@Pipe({ name: 'conversationUnseen' })\nexport class ConversationUnseenPipe implements PipeTransform {\n constructor(private conversationService: ConversationService) {}\n transform(conversation: Conversation): Observable {\n return this.conversationService.conversationUnseen(conversation);\n }\n}\n\n@Pipe({ name: 'conversationYourExpert' })\nexport class ConversationYourExpertPipe implements PipeTransform {\n private readonly hostAppInterface = inject(CONVERSATION_HOST_APP_INTERFACE_TOKEN);\n\n transform(conversationDetail: ConversationDetail): boolean {\n return this.hostAppInterface.isYourExpert(conversationDetail);\n }\n}\n\n@Pipe({ name: 'unreadConversationsCount' })\nexport class UnreadConversationsCountPipe implements PipeTransform {\n constructor(private conversationService: ConversationService) {}\n\n transform(viewId: string): Observable {\n return this.conversationService\n .getUnreadConversationsCount(viewId)\n .pipe(map((count) => formatUnreadConversationsCount(count)));\n }\n}\n\n@Pipe({ name: 'maxFileSize' })\nexport class MaxFileSize implements PipeTransform {\n transform(chatSourceId?: ChatSourceId): number {\n return getMaxFileSize(chatSourceId);\n }\n}\n\n@Pipe({ name: 'acceptedFileType' })\nexport class AcceptedFileType implements PipeTransform {\n transform(chatSourceId?: ChatSourceId): string {\n return getAcceptFileTypes(chatSourceId);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport firebase from 'firebase/compat/app';\n\n@Pipe({ name: 'firebaseTimestampToDate' })\nexport class FirebaseTimestampsToDatePipe implements PipeTransform {\n transform(firebaseTimestamp: firebase.firestore.Timestamp): Date {\n return firebaseTimestamp.toDate();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'inArray' })\nexport class InArrayPipe implements PipeTransform {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n transform(value: any, dataSet: any[]): boolean {\n return dataSet.includes(value);\n }\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { EnvironmentService } from '@galaxy/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ConversationChannel, MessageType, ParticipantType } from '@vendasta/conversation';\nimport { ChatSourceId } from '@vendasta/galaxy/chat-composer';\nimport { DEFAULT_OPENAI_BOT_NAME, DEFAULT_WEBCHAT_BOT_NAME } from '../../core/src/lib/inbox.constants';\nimport { ConversationMessage, Media } from '../../core/src/lib/interface/conversation.interface';\nimport { CONVERSATION_HOST_APP_INTERFACE_TOKEN, USER_ID_TOKEN } from '../../core/src/lib/tokens';\nimport { MessageGroup } from '../../core/src/lib/types';\n\n// returns true if message is a System Message type\n@Pipe({ name: 'isSystemMessage' })\nexport class IsSystemMessagePipe implements PipeTransform {\n transform(message: ConversationMessage): boolean {\n return message?.type === MessageType.MESSAGE_TYPE_SYSTEM;\n }\n}\n\n// Determine whether we need to specify message type as 'sent' or 'received'\nenum MessageStatus {\n Sent = 'sent',\n Received = 'received',\n}\n@Pipe({ name: 'messageStatusType' })\nexport class MessageStatusType implements PipeTransform {\n private readonly hostAppInterface = inject(CONVERSATION_HOST_APP_INTERFACE_TOKEN);\n\n transform(message: ConversationMessage): MessageStatus {\n return this.hostAppInterface.isSenderFromOrganization(message) ? MessageStatus.Sent : MessageStatus.Received;\n }\n}\n\n@Pipe({ name: 'messageFrom' })\nexport class MessageFrom implements PipeTransform {\n constructor(public translateService: TranslateService) {}\n transform(message: ConversationMessage): string {\n return messageFrom(message) || '';\n }\n}\n\n@Pipe({ name: 'messageVia' })\nexport class MessageVia implements PipeTransform {\n constructor(public translateService: TranslateService) {}\n transform(message: ConversationMessage): string {\n switch (message.channel) {\n case ConversationChannel.CONVERSATION_CHANNEL_GOOGLE_BUSINESS_COMMUNICATIONS:\n return 'INBOX.CHAT.VIA_GOOGLE';\n case ConversationChannel.CONVERSATION_CHANNEL_FACEBOOK:\n return 'INBOX.CHAT.VIA_FACEBOOK';\n case ConversationChannel.CONVERSATION_CHANNEL_SMS:\n return 'INBOX.CHAT.VIA_SMS';\n case ConversationChannel.CONVERSATION_CHANNEL_EMAIL:\n return 'INBOX.CHAT.VIA_EMAIL';\n case ConversationChannel.CONVERSATION_CHANNEL_WEB_CHAT:\n return 'INBOX.CHAT.VIA_WEBCHAT';\n case ConversationChannel.CONVERSATION_CHANNEL_INSTAGRAM:\n return 'INBOX.CHAT.VIA_INSTAGRAM';\n default:\n return '';\n }\n }\n}\n\n@Pipe({ name: 'messageCodeBacktick' })\nexport class MessageCodeBacktickPipe implements PipeTransform {\n transform(message: string): string {\n if (!message) {\n return '';\n }\n\n const blockPattern = /```(.+?)?\\n([\\s\\S]*?)```/g;\n const inlinePattern = /`([^`]+)`/g;\n const blockFormatted = message.replace(blockPattern, '
$2
');\n const finalFormat = blockFormatted.replace(inlinePattern, '$1');\n return finalFormat;\n }\n}\n\n@Pipe({ name: 'getMessageMediaUrl' })\nexport class GetMessageMediaUrlPipe implements PipeTransform {\n constructor(public environmentService: EnvironmentService) {}\n transform(media: Media): string {\n const env = this.environmentService.getEnvironmentString();\n return (\n media?.mediaUrl || `https://storage.googleapis.com/conversations-${env}-shared-files/${media.mediaLocationPath}`\n );\n }\n}\n\n@Pipe({ name: 'isFromYou' })\nexport class IsFromYouPipe implements PipeTransform {\n private readonly userId = toSignal(inject(USER_ID_TOKEN));\n transform(messageGroup: MessageGroup): boolean {\n return isFromYou(messageGroup, this.userId());\n }\n}\n\n@Pipe({ name: 'chatSourceIconName' })\nexport class ChatSourceIconName implements PipeTransform {\n transform(channel: ConversationChannel): ChatSourceId | undefined {\n switch (channel) {\n case ConversationChannel.CONVERSATION_CHANNEL_INTERNAL:\n return undefined;\n case ConversationChannel.CONVERSATION_CHANNEL_GOOGLE_BUSINESS_COMMUNICATIONS:\n return 'google';\n case ConversationChannel.CONVERSATION_CHANNEL_FACEBOOK:\n return 'facebook';\n case ConversationChannel.CONVERSATION_CHANNEL_SMS:\n return 'sms';\n case ConversationChannel.CONVERSATION_CHANNEL_EMAIL:\n return 'email';\n case ConversationChannel.CONVERSATION_CHANNEL_WEB_CHAT:\n return 'webchat';\n case ConversationChannel.CONVERSATION_CHANNEL_OPENAI:\n return undefined;\n case ConversationChannel.CONVERSATION_CHANNEL_INSTAGRAM:\n return 'instagram';\n default:\n throw new Error('unsupported channel ' + channel);\n }\n }\n}\n\n@Pipe({ name: 'chatProfileIcon' })\nexport class ChatProfileIconPipe implements PipeTransform {\n private readonly userId = toSignal(inject(USER_ID_TOKEN));\n transform(messageGroup: MessageGroup): string {\n const unknownContact = !messageFrom(messageGroup.lastMessage);\n const notYou = !isFromYou(messageGroup, this.userId());\n return unknownContact && notYou ? 'person' : '';\n }\n}\n\nfunction messageFrom(message: ConversationMessage): string | undefined {\n if (message.sender?.participantType === ParticipantType.PARTICIPANT_TYPE_OPENAI_BOT) {\n return message.channel === ConversationChannel.CONVERSATION_CHANNEL_WEB_CHAT\n ? DEFAULT_WEBCHAT_BOT_NAME\n : DEFAULT_OPENAI_BOT_NAME;\n }\n return message?.sender?.name;\n}\n\nfunction isFromYou(messageGroup: MessageGroup, userId: string | undefined): boolean {\n const senderID: string | undefined = messageGroup?.sender?.internalParticipantId;\n if (!senderID) return false;\n return senderID === userId;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'trimDescription' })\nexport class TrimDescriptionPipe implements PipeTransform {\n transform(text: string, length: number): string {\n if (text.length <= length) {\n return text;\n }\n return text.substring(0, length).concat('…');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport dayjs from 'dayjs';\nimport calendar from 'dayjs/plugin/calendar';\nimport { ConversationDetail } from '../../core/src/lib/interface/conversation.interface';\ndayjs.extend(calendar);\n\n@Pipe({ name: 'timestamp' })\nexport class TimestampsPipe implements PipeTransform {\n transform(conversationDetail: ConversationDetail): string {\n const timestamp = conversationDetail?.conversation?.latestMsgSentTime;\n const sameDay = timestamp ? dayjs().isSame(timestamp, 'day') : false;\n return sameDay ? dayjs(timestamp).format('h:mm A') : dayjs(timestamp).format('MMM D');\n }\n}\n\n@Pipe({ name: 'messageTime' })\nexport class MessageTime implements PipeTransform {\n constructor(private readonly translateService: TranslateService) {}\n transform(messageTime: Date): string {\n const today = this.translateService.instant('INBOX.DATE.TODAY');\n const yesterday = this.translateService.instant('INBOX.DATE.YESTERDAY');\n const at = this.translateService.instant('INBOX.DATE.AT');\n return dayjs(messageTime).calendar(new Date(), {\n sameDay: `[${today}] h:mm A`, // The same day ( Today 2:30 AM )\n lastDay: `[${yesterday}] h:mm A`, // The day before ( Yesterday 2:30 AM )\n lastWeek: `ddd, MMM D [${at}] h:mm A`, // lastWeek should also follow format ( Mon, Apr 12 at 2:30 AM )\n sameElse: `ddd, MMM D, YYYY [${at}] h:mm A`, // Everything else (Mon, Apr 12, 2023 at 2:30 AM )\n });\n }\n}\n\n@Pipe({ name: 'messageBubbleTime' })\nexport class MessageBubbleTime implements PipeTransform {\n constructor(private readonly translateService: TranslateService) {}\n\n transform(messageBubbleTime: Date): string {\n const now = dayjs();\n const diffInMinutes = now.diff(dayjs(messageBubbleTime), 'minute');\n const isSameDay = dayjs(messageBubbleTime).isSame(now, 'day');\n const isSameYear = dayjs(messageBubbleTime).isSame(now, 'year');\n const isYesterday = dayjs(messageBubbleTime).isSame(now.subtract(1, 'day'), 'day');\n const isWithinLastWeek = dayjs(messageBubbleTime).isAfter(now.subtract(7, 'day'));\n\n const justNowText = this.translateService.instant('INBOX.DATE.JUST_NOW');\n const minsAgoText = this.translateService.instant('INBOX.DATE.MINS_AGO');\n const atText = this.translateService.instant('INBOX.DATE.AT');\n const yesterdayText = this.translateService.instant('INBOX.DATE.YESTERDAY');\n\n if (diffInMinutes < 1) {\n return justNowText;\n } else if (diffInMinutes < 60) {\n return `${diffInMinutes} ${minsAgoText}`;\n } else if (isSameDay) {\n return dayjs(messageBubbleTime).format('h:mm A');\n } else if (isYesterday) {\n return `${yesterdayText} ${atText} ${dayjs(messageBubbleTime).format('h:mm A')}`;\n } else if (isWithinLastWeek) {\n return `${dayjs(messageBubbleTime).format('dddd')} ${atText} ${dayjs(messageBubbleTime).format('h:mm A')}`;\n } else if (isSameYear) {\n return `${dayjs(messageBubbleTime).format('MMM D')} ${atText} ${dayjs(messageBubbleTime).format('h:mm A')}`;\n } else {\n return dayjs(messageBubbleTime).format('MMM D, YYYY');\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ALL_VIEW_ID, FOLLOWING_VIEW_ID } from '../../core/src/lib/inbox.constants';\n\n@Pipe({ name: 'viewIcon' })\nexport class ViewIconPipe implements PipeTransform {\n transform(viewId: string): string {\n switch (viewId) {\n case ALL_VIEW_ID:\n return 'inbox';\n case FOLLOWING_VIEW_ID:\n return 'star';\n default:\n return 'inbox';\n }\n }\n}\n\n@Pipe({ name: 'viewName' })\nexport class ViewNamePipe implements PipeTransform {\n transform(viewId: string): string {\n switch (viewId) {\n case ALL_VIEW_ID:\n return 'INBOX.VIEWS.ALL_CONVERSATIONS';\n case FOLLOWING_VIEW_ID:\n return 'INBOX.VIEWS.FOLLOWING';\n default:\n return '';\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport {\n AcceptedFileType,\n ConversationBadgePipe,\n ConversationRoutePipe,\n ConversationUnseenPipe,\n ConversationYourExpertPipe,\n MaxFileSize,\n UnreadConversationsCountPipe,\n} from './conversation.pipe';\nimport { FirebaseTimestampsToDatePipe } from './firebase-timestamp-to-date';\nimport { InArrayPipe } from './in-array.pipe';\nimport {\n ChatSourceIconName,\n ChatProfileIconPipe,\n GetMessageMediaUrlPipe,\n IsFromYouPipe,\n IsSystemMessagePipe,\n MessageCodeBacktickPipe,\n MessageFrom,\n MessageStatusType,\n MessageVia,\n} from './message.pipes';\nimport { TrimDescriptionPipe } from './ticket-pane.pipe';\nimport { MessageTime, TimestampsPipe, MessageBubbleTime } from './timestamp.pipe';\nimport { ViewIconPipe, ViewNamePipe } from './views.pipe';\n\nconst PIPES = [\n TimestampsPipe,\n MessageStatusType,\n ConversationRoutePipe,\n ConversationBadgePipe,\n ConversationUnseenPipe,\n ConversationYourExpertPipe,\n IsSystemMessagePipe,\n MessageFrom,\n MessageVia,\n ChatSourceIconName,\n MessageCodeBacktickPipe,\n TrimDescriptionPipe,\n FirebaseTimestampsToDatePipe,\n InArrayPipe,\n MessageTime,\n MessageBubbleTime,\n ViewIconPipe,\n ViewNamePipe,\n UnreadConversationsCountPipe,\n MaxFileSize,\n AcceptedFileType,\n GetMessageMediaUrlPipe,\n IsFromYouPipe,\n ChatProfileIconPipe,\n];\n\n@NgModule({\n imports: [CommonModule],\n declarations: [PIPES],\n exports: [PIPES],\n})\nexport class ConversationPipesModule {}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, createUrlTreeFromSnapshot, UrlTree } from '@angular/router';\nimport { Observable, switchMap, take } from 'rxjs';\nimport { InboxService } from '../../../core/src/lib/inbox.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SmsAccessGuard {\n constructor(readonly inboxService: InboxService) {}\n\n canActivate(\n route: ActivatedRouteSnapshot,\n ): Observable | Promise | boolean | UrlTree {\n return this.inboxService.canAccessSMS$.pipe(\n take(1),\n switchMap(async (canAccessSMS) => canAccessSMS || createUrlTreeFromSnapshot(route, ['../'])),\n );\n }\n}\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnInit,\n Output,\n ViewChild,\n OnDestroy,\n ChangeDetectorRef,\n} from '@angular/core';\n\nexport type ChatSourceId = 'facebook' | 'google' | 'sms' | 'webchat' | 'openai' | 'platform' | 'email' | 'instagram';\n\nexport interface ChatSource {\n id: ChatSourceId;\n sourceName: string;\n shortSourceName?: string;\n account?: string;\n}\n\nexport interface SentMessage {\n messageText: string;\n sourceId?: ChatSourceId;\n sourceName?: string;\n}\n\n@Component({\n selector: 'glxy-chat-composer',\n templateUrl: './chat-composer.component.html',\n styleUrls: ['./chat-composer.component.scss'],\n})\nexport class ChatComposerComponent implements OnInit, OnDestroy {\n @HostBinding('class') class = 'glxy-chat-composer';\n\n @HostBinding('class.hide-extended-actions')\n get limitedActions(): boolean {\n // controls the hiding or showing of the 'extended-actions' element.\n // It is hidden when the chat composer component's width becomes too small\n return !this.showExtendedActions;\n }\n\n /**\n * Optional. The available chat sources to be shown in the chat sources\n * menu. If there is only one, that will be auto selected. If none, no\n * chat source text or selector is shown.\n */\n @Input() chatSources: ChatSource[] = [];\n\n /**\n * The messages textarea's content. You can use this input\n * to read or modify the text, such as adding links and content\n * to it.\n */\n @Input() public messageText = '';\n\n /**\n * Optional. The placeholder text for the message textarea\n */\n @Input() public placeholder = 'Type here…';\n\n /**\n * Optional. Set the selected chat source from those available in the\n * `chatSources` input above. If none set, the component will default to\n * the first chatSource item\n */\n @Input() set selectedChatSourceId(value: ChatSourceId | undefined) {\n this.currentChatSourceId = value;\n if (this.initialized) {\n this.changeChatSourceId(value);\n }\n }\n\n /**\n * Whether to send the message if you hit the `enter` key on your keyboard\n */\n @Input() public enterKeySendsMessage? = true;\n\n /* Optional. Controls the min height of the text area in the composer */\n @Input() public textAreaMinRows? = 1;\n\n /* Optional. Controls the max height of the text area in the composer */\n @Input() public textAreaMaxRows? = 5;\n\n /* Optional. Will disable the text box and send button if processing */\n @Input() processing? = false;\n\n /* Optional. Will disable the text box and send button if disabled is true */\n @Input() disabled? = false;\n\n /* Optional. Will clear the message text area if set to false */\n @Input() clearMessageTextOnSend? = true;\n\n /* Optional. Will not send out a message when message text is empty if disabled is true */\n @Input() disableSendEmptyText? = true;\n\n /* Optional. Will set the max length of the text area if provided */\n @Input() maxlength?: number;\n\n /* Optional. Specifies whether the send button will use a custom color class or fallback to the galaxy theme*/\n @Input() customColor?: boolean = false;\n\n /**\n * Emitted when the user sends a message.\n */\n @Output() send: EventEmitter = new EventEmitter();\n\n /**\n * Emitted when the user changes chat sources.\n */\n @Output() selectedChatSourceIdChange: EventEmitter = new EventEmitter();\n\n @ViewChild('composerTextArea', { static: true })\n public composerTextArea!: ElementRef;\n\n currentChatSourceId?: ChatSourceId;\n currentChatSource?: ChatSource;\n\n showDynamicContentMinWidthPx = 400;\n showFullSourceNameMinWidthPx = 500;\n\n initialized = false;\n\n // element resizing for mobile and small screens\n showExtendedActions = false;\n showFullSourceName = false;\n\n private resizeObserver!: ResizeObserver;\n private showDynamicContentStore = false;\n private showSourceNameStore = false;\n\n constructor(\n private elementRef: ElementRef,\n private changeDetectorRef: ChangeDetectorRef,\n ) {\n if (window.ResizeObserver) {\n this.resizeObserver = new ResizeObserver((entries) => {\n const entry = Array.isArray(entries) ? entries[0] : entries;\n this.toggleDynamicContent(entry.contentRect.width);\n this.toggleSourceName(entry.contentRect.width);\n });\n this.resizeObserver.observe(this.elementRef.nativeElement);\n }\n }\n\n ngOnInit(): void {\n const firstChatSource = this.chatSources?.[0];\n\n // if no current chat source set, then use first in array\n if (!this.currentChatSourceId && firstChatSource) {\n this.changeChatSourceId(firstChatSource.id);\n } else if (this.currentChatSourceId) {\n this.changeChatSourceId(this.currentChatSourceId);\n }\n this.initialized = true;\n }\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n }\n\n sendMessage(event?: Event): void {\n // dont send if processing\n if (this.processing) {\n return;\n }\n\n // when hitting the enter key, we must stop the textinput\n // from adding a new line\n if (event) {\n event.preventDefault();\n }\n\n // focus the editor after sending to keep mobile\n // keyboard visible.\n this.focusTextArea();\n\n const messageText = this.messageText?.trim() ?? '';\n\n // dont sent if meessage is blank\n if (this.disableSendEmptyText && !messageText) return;\n\n const messageToSend: SentMessage = {\n messageText,\n sourceId: this.currentChatSourceId,\n sourceName: this.currentChatSource?.sourceName,\n };\n this.send.emit(messageToSend);\n\n if (this.clearMessageTextOnSend) {\n // clear message after sending\n this.clearMessageText();\n }\n }\n\n chatSourceLabel(): string {\n let label = '';\n if (this.showFullSourceName && this.currentChatSource?.sourceName) {\n label += this.currentChatSource.sourceName;\n } else {\n label += this.currentChatSource?.shortSourceName ?? this.currentChatSource?.sourceName;\n }\n if (this.currentChatSource?.account) {\n label += ' ' + this.currentChatSource.account;\n }\n return label;\n }\n\n public clearMessageText(): void {\n this.messageText = '';\n }\n\n public focusTextArea(): void {\n this.composerTextArea.nativeElement.focus();\n }\n\n changeChatSourceId(sourceId: ChatSourceId | undefined, emitChanges = false): void {\n if (this.chatSources.length === 0 || !sourceId) return;\n\n const newSource = this.chatSources.find((obj) => {\n return obj.id === sourceId;\n });\n\n if (newSource) {\n this.currentChatSourceId = sourceId;\n this.currentChatSource = newSource;\n } else {\n // if no source is found with the id then use the first\n // source in the list\n this.currentChatSourceId = this.chatSources[0].id;\n this.currentChatSource = this.chatSources[0];\n }\n\n if (emitChanges) {\n this.selectedChatSourceIdChange.emit(sourceId);\n }\n }\n\n public insertDynamicContent(\n dynamicContent: string,\n position: 'before' | 'after' | 'curser' = 'curser',\n selectInsertedCurserText = false,\n ): void {\n const textArea = this.composerTextArea.nativeElement;\n\n // If there is no message text, then don't add new lines to output\n const spacing = this.messageText !== '' ? '\\n\\n' : '';\n\n const startPos = textArea.selectionStart;\n const endPos = textArea.selectionEnd ?? startPos;\n\n let newValue: string;\n\n if (position === 'before') {\n dynamicContent = dynamicContent + spacing;\n newValue = dynamicContent + this.messageText;\n } else if (position === 'after') {\n dynamicContent = spacing + dynamicContent;\n newValue = this.messageText + dynamicContent;\n } else {\n // position is `curser`\n const contentBefore = textArea.value.substr(0, startPos);\n const contentAfter = textArea.value.substr(endPos, textArea.value.length);\n\n // add space before and after dynamic content if needed\n if (contentBefore && !contentBefore.endsWith(' ')) {\n dynamicContent = ' ' + dynamicContent;\n }\n if (!contentAfter.startsWith(' ')) {\n dynamicContent = dynamicContent + ' ';\n }\n newValue = contentBefore + dynamicContent + contentAfter;\n }\n\n this.messageText = newValue;\n textArea.value = newValue;\n\n // Using window.setTimeout fix bug where input does not focus\n window.setTimeout(() => {\n if (position === 'curser') {\n if (selectInsertedCurserText) {\n textArea.setSelectionRange(startPos, dynamicContent.length + startPos);\n } else {\n const curserPosition = dynamicContent.length + startPos;\n textArea.setSelectionRange(curserPosition, curserPosition);\n }\n } else if (position === 'after') {\n textArea.setSelectionRange(textArea.value.length, textArea.value.length);\n } else if (position === 'before') {\n textArea.setSelectionRange(0, 0);\n }\n textArea.focus();\n }, 0);\n }\n\n // Hide and show content based on the width of the component\n\n toggleDynamicContent(width: number): void {\n const updatedValue = width > this.showDynamicContentMinWidthPx;\n\n if (updatedValue === this.showDynamicContentStore) return;\n\n this.showDynamicContentStore = updatedValue;\n // window.setTimeout to fix detectChanges not firing\n window.setTimeout(() => this.changeDetectorRef.detectChanges(), 0);\n this.showExtendedActions = updatedValue;\n }\n\n toggleSourceName(width: number): void {\n const updatedValue = width > this.showFullSourceNameMinWidthPx;\n if (updatedValue === this.showSourceNameStore) return;\n\n this.showSourceNameStore = updatedValue;\n // window.setTimeout to fix detectChanges not firing\n window.setTimeout(() => this.changeDetectorRef.detectChanges(), 0);\n this.showFullSourceName = updatedValue;\n }\n}\n","
\n \n\n
\n \n\n
\n 0\">\n \n
Send via {{ chatSourceLabel() }}
\n
\n\n \n
\n Send via\n \n
\n
\n
\n \n \n \n Send\n \n \n
\n
\n
\n\n\n\n \n \n \n\n","import { Component, Inject, OnInit, inject } from '@angular/core';\nimport { AbstractControl, UntypedFormArray, UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MerchantService } from '@galaxy/billing';\nimport { TranslateService } from '@ngx-translate/core';\nimport { PaymentLinkItem } from '@vendasta/billing';\nimport { SnackbarService } from '@vendasta/galaxy/snackbar-service';\nimport { getCurrencySymbol } from '@vendasta/galaxy/utility/currency-utils';\nimport { SSOService } from '@vendasta/sso';\nimport { switchMap, take } from 'rxjs/operators';\nimport { ConversationService } from '../../../../../../core/src/lib/conversation.service';\nimport { InboxService } from '../../../../../../core/src/lib/inbox.service';\nimport { CONVERSATION_HOST_APP_INTERFACE_TOKEN, PARTNER_ID_TOKEN } from '../../../../../../core/src/lib/tokens';\n\n@Component({\n selector: 'inbox-insert-payment-link-form',\n templateUrl: 'inbox-insert-payment-link-form.component.html',\n styleUrls: ['inbox-insert-payment-link-form.component.scss'],\n})\nexport class InboxInsertPaymentLinkFormComponent implements OnInit {\n private readonly hostAppInterface = inject(CONVERSATION_HOST_APP_INTERFACE_TOKEN);\n\n paymentUrl: string;\n paymentLinkForm = this.formBuilder.group({\n lineItems: this.formBuilder.array([]),\n });\n defaultLineItem = {\n quantity: [1],\n description: [''],\n amount: [0],\n };\n currencyCode = 'USD'; // fallback to USD if no currency is set.\n subTotal = 0;\n tax = 0;\n currencySymbol = '$';\n\n showTaxCalculation = false;\n\n readonly CENTS_PER_DOLLAR = 100;\n readonly DIGITS_INFO = '1.2-2';\n\n private readonly partnerId$ = inject(PARTNER_ID_TOKEN);\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: any,\n private ssoService: SSOService,\n private formBuilder: UntypedFormBuilder,\n private conversationService: ConversationService,\n private merchantService: MerchantService,\n private snackbarService: SnackbarService,\n private translateService: TranslateService,\n public dialogRef: MatDialogRef,\n private inboxService: InboxService,\n ) {}\n\n ngOnInit(): void {\n this.initCurrency();\n // At least one lineItem cannot be removed.\n this.lineItems.push(this.formBuilder.group(this.defaultLineItem));\n // TODO: Remove this once we have the tax rates management feature in the Business App.\n this.showTaxCalculation = this.inboxService.isPartnerCenter;\n }\n\n private initCurrency(): void {\n // TODO: SMBs don't have merchant retail config currency setting.\n // SMBs will use their partner's currency setting\n // until we have this feature built in the billing µservice,\n this.partnerId$\n .pipe(\n switchMap((partnerId) => {\n return this.merchantService.getMultiRetailConfigurations(partnerId, ['default']);\n }),\n take(1),\n )\n .subscribe((config) => {\n this.currencyCode = config.get('default').currencyCode;\n this.currencySymbol = getCurrencySymbol(this.currencyCode);\n });\n }\n\n get lineItems(): UntypedFormArray {\n return this.paymentLinkForm.controls['lineItems'] as UntypedFormArray;\n }\n\n public addLineItem(): void {\n this.lineItems.push(this.formBuilder.group(this.defaultLineItem));\n }\n\n public deleteLineItemAndCalculate(index: number): void {\n this.lineItems.removeAt(index);\n this.calculateSubTotalAndTax();\n }\n\n public getLineItemsFormArray(): UntypedFormArray {\n return this.paymentLinkForm.get('lineItems') as UntypedFormArray;\n }\n\n public getLineItemsFormControl(): AbstractControl[] {\n return this.getLineItemsFormArray().controls;\n }\n\n private formatAmount(amount: number): string {\n return isNaN(amount) ? '0' : (amount / this.CENTS_PER_DOLLAR).toFixed(2);\n }\n\n public getLineItemsArray(): PaymentLinkItem[] {\n const lineItems: PaymentLinkItem[] = [];\n this.getLineItemsFormControl().forEach((formControl, idx) => {\n const amount = parseInt((formControl.value.amount * this.CENTS_PER_DOLLAR).toFixed(0), 10);\n const formGroup: UntypedFormGroup = this.getLineItemsFormArray()?.at(idx) as UntypedFormGroup;\n formGroup.controls.amount.setValue(this.formatAmount(amount));\n lineItems.push({\n quantity: 1, // always 1 per line item.\n description: formControl.value.description,\n // convert to cents\n amount: amount,\n } as PaymentLinkItem);\n });\n return lineItems;\n }\n\n public calculateSubTotalAndTax(): void {\n this.subTotal = this.getLineItemsArray().reduce((acc, cur) => acc + cur.amount, 0);\n if (this.showTaxCalculation) {\n this.hostAppInterface\n .calculatePaymentLinkTax(this.data.conversationDetail, this.subTotal)\n .pipe(take(1))\n .subscribe((taxAmount) => {\n this.tax = taxAmount;\n });\n }\n }\n\n public requestPayment(): void {\n this.hostAppInterface\n .createPaymentLink(this.data.conversationDetail, this.getLineItemsArray())\n .pipe(take(1))\n .subscribe((paymentUrl) => {\n if (paymentUrl) {\n this.paymentUrl = paymentUrl;\n this.dialogRef.close(paymentUrl);\n const successMessage = this.translateService.instant('INBOX.REQUEST_PAYMENT.INVOICE_CREATE_SUCCESS');\n if (this.showTaxCalculation) {\n this.snackbarService.openWithOptions(successMessage, {\n action: this.translateService.instant('INBOX.REQUEST_PAYMENT.VIEW_INVOICES'),\n actionCallback: () => window.open('/invoices', '_blank'),\n });\n } else {\n this.snackbarService.openSuccessSnack(successMessage);\n }\n } else {\n this.snackbarService.openErrorSnack('INBOX.REQUEST_PAYMENT.INVOICE_CREATE_ERROR');\n }\n });\n }\n}\n","

\n {{ 'INBOX.REQUEST_PAYMENT.TITLE' | translate }}\n

\n\n \n \n \n \n \n \n \n \n   {{ currencySymbol }}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n \n\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { InboxInsertPaymentLinkFormComponent } from './inbox-insert-payment-link-form.component';\nimport { ConversationDetail } from '../../../../../../core/src/lib/interface/conversation.interface';\n@Component({\n selector: 'inbox-insert-payment-link',\n template: '',\n})\nexport class InboxInsertPaymentLinkComponent {\n @Input() conversationDetail: ConversationDetail;\n @Output() insertLink = new EventEmitter();\n\n constructor(public modal: MatDialog) {}\n\n openInsertLinkModal(): void {\n const modalRef$ = this.modal.open(InboxInsertPaymentLinkFormComponent, {\n width: '620px',\n data: {\n conversationDetail: this.conversationDetail,\n },\n });\n // TODO: unsubscribe\n modalRef$.afterClosed().subscribe((res) => {\n if (res) {\n this.insertLink.emit(res);\n }\n });\n }\n}\n","import * as i0 from '@angular/core';\nimport { Injectable } from '@angular/core';\nimport * as i1 from '@angular/common/http';\nimport { HttpHeaders } from '@angular/common/http';\nimport { map } from 'rxjs/operators';\n\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// Enums.\n// *********************************\nvar ReviewRequestStatus = /*#__PURE__*/function (ReviewRequestStatus) {\n ReviewRequestStatus[ReviewRequestStatus[\"REVIEW_REQUEST_STATUS_NOT_SENT\"] = 0] = \"REVIEW_REQUEST_STATUS_NOT_SENT\";\n ReviewRequestStatus[ReviewRequestStatus[\"REVIEW_REQUEST_STATUS_LEFT_REVIEW\"] = 1] = \"REVIEW_REQUEST_STATUS_LEFT_REVIEW\";\n ReviewRequestStatus[ReviewRequestStatus[\"REVIEW_REQUEST_STATUS_DELIVERED\"] = 2] = \"REVIEW_REQUEST_STATUS_DELIVERED\";\n ReviewRequestStatus[ReviewRequestStatus[\"REVIEW_REQUEST_STATUS_BOUNCED\"] = 3] = \"REVIEW_REQUEST_STATUS_BOUNCED\";\n ReviewRequestStatus[ReviewRequestStatus[\"REVIEW_REQUEST_STATUS_OPENED\"] = 4] = \"REVIEW_REQUEST_STATUS_OPENED\";\n ReviewRequestStatus[ReviewRequestStatus[\"REVIEW_REQUEST_STATUS_CLICKED\"] = 5] = \"REVIEW_REQUEST_STATUS_CLICKED\";\n ReviewRequestStatus[ReviewRequestStatus[\"REVIEW_REQUEST_STATUS_CLICKED_POSITIVE\"] = 6] = \"REVIEW_REQUEST_STATUS_CLICKED_POSITIVE\";\n ReviewRequestStatus[ReviewRequestStatus[\"REVIEW_REQUEST_STATUS_CLICKED_NEGATIVE\"] = 7] = \"REVIEW_REQUEST_STATUS_CLICKED_NEGATIVE\";\n ReviewRequestStatus[ReviewRequestStatus[\"REVIEW_REQUEST_STATUS_UNSUBSCRIBE\"] = 8] = \"REVIEW_REQUEST_STATUS_UNSUBSCRIBE\";\n ReviewRequestStatus[ReviewRequestStatus[\"REVIEW_REQUEST_STATUS_SPAM_REPORT\"] = 9] = \"REVIEW_REQUEST_STATUS_SPAM_REPORT\";\n ReviewRequestStatus[ReviewRequestStatus[\"REVIEW_REQUEST_STATUS_SENDING\"] = 10] = \"REVIEW_REQUEST_STATUS_SENDING\";\n ReviewRequestStatus[ReviewRequestStatus[\"REVIEW_REQUEST_STATUS_DROPPED\"] = 11] = \"REVIEW_REQUEST_STATUS_DROPPED\";\n return ReviewRequestStatus;\n}(ReviewRequestStatus || {});\nvar SmsStatusCode = /*#__PURE__*/function (SmsStatusCode) {\n SmsStatusCode[SmsStatusCode[\"SMS_STATUS_CODE_SUCCESS\"] = 0] = \"SMS_STATUS_CODE_SUCCESS\";\n SmsStatusCode[SmsStatusCode[\"SMS_STATUS_CODE_QUEUE_FULL\"] = 1] = \"SMS_STATUS_CODE_QUEUE_FULL\";\n SmsStatusCode[SmsStatusCode[\"SMS_STATUS_CODE_ACCOUNT_SUSPENDED\"] = 2] = \"SMS_STATUS_CODE_ACCOUNT_SUSPENDED\";\n SmsStatusCode[SmsStatusCode[\"SMS_STATUS_CODE_UNREACHABLE_DESTINATION\"] = 3] = \"SMS_STATUS_CODE_UNREACHABLE_DESTINATION\";\n SmsStatusCode[SmsStatusCode[\"SMS_STATUS_CODE_MESSAGE_BLOCKED\"] = 4] = \"SMS_STATUS_CODE_MESSAGE_BLOCKED\";\n SmsStatusCode[SmsStatusCode[\"SMS_STATUS_CODE_UNKNOWN_DESTINATION\"] = 5] = \"SMS_STATUS_CODE_UNKNOWN_DESTINATION\";\n SmsStatusCode[SmsStatusCode[\"SMS_STATUS_CODE_LANDLINE_NUMBER\"] = 6] = \"SMS_STATUS_CODE_LANDLINE_NUMBER\";\n SmsStatusCode[SmsStatusCode[\"SMS_STATUS_CODE_CARRIER_VIOLATION\"] = 7] = \"SMS_STATUS_CODE_CARRIER_VIOLATION\";\n SmsStatusCode[SmsStatusCode[\"SMS_STATUS_CODE_UNKNOWN_ERROR\"] = 8] = \"SMS_STATUS_CODE_UNKNOWN_ERROR\";\n SmsStatusCode[SmsStatusCode[\"SMS_STATUS_CODE_UNSUBSCRIBED\"] = 9] = \"SMS_STATUS_CODE_UNSUBSCRIBED\";\n return SmsStatusCode;\n}(SmsStatusCode || {});\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// Enums.\n// *********************************\nvar AutomationType = /*#__PURE__*/function (AutomationType) {\n AutomationType[AutomationType[\"AUTOMATION_TYPE_NONE\"] = 0] = \"AUTOMATION_TYPE_NONE\";\n AutomationType[AutomationType[\"AUTOMATION_TYPE_REVIEW_REMINDER\"] = 1] = \"AUTOMATION_TYPE_REVIEW_REMINDER\";\n return AutomationType;\n}(AutomationType || {});\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// Enums.\n// *********************************\nvar RequestEventType = /*#__PURE__*/function (RequestEventType) {\n RequestEventType[RequestEventType[\"REQUEST_EVENT_TYPE_UNKNOWN\"] = 0] = \"REQUEST_EVENT_TYPE_UNKNOWN\";\n RequestEventType[RequestEventType[\"REQUEST_EVENT_TYPE_EMAIL\"] = 1] = \"REQUEST_EVENT_TYPE_EMAIL\";\n RequestEventType[RequestEventType[\"REQUEST_EVENT_TYPE_SMS\"] = 2] = \"REQUEST_EVENT_TYPE_SMS\";\n return RequestEventType;\n}(RequestEventType || {});\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// Enums.\n// *********************************\nvar CreateError = /*#__PURE__*/function (CreateError) {\n CreateError[CreateError[\"CREATE_ERROR_NO_ERRORS\"] = 0] = \"CREATE_ERROR_NO_ERRORS\";\n CreateError[CreateError[\"CREATE_ERROR_EMAIL_OR_PHONE_REQUIRED\"] = 1] = \"CREATE_ERROR_EMAIL_OR_PHONE_REQUIRED\";\n CreateError[CreateError[\"CREATE_ERROR_INVALID_EMAIL\"] = 2] = \"CREATE_ERROR_INVALID_EMAIL\";\n CreateError[CreateError[\"CREATE_ERROR_INVALID_PHONE\"] = 3] = \"CREATE_ERROR_INVALID_PHONE\";\n CreateError[CreateError[\"CREATE_ERROR_INVALID_FIRST_NAME\"] = 4] = \"CREATE_ERROR_INVALID_FIRST_NAME\";\n CreateError[CreateError[\"CREATE_ERROR_INVALID_LAST_NAME\"] = 5] = \"CREATE_ERROR_INVALID_LAST_NAME\";\n CreateError[CreateError[\"CREATE_ERROR_INVALID_COUNTRY\"] = 6] = \"CREATE_ERROR_INVALID_COUNTRY\";\n CreateError[CreateError[\"CREATE_ERROR_INVALID_STATE\"] = 7] = \"CREATE_ERROR_INVALID_STATE\";\n return CreateError;\n}(CreateError || {});\nvar SortDirection = /*#__PURE__*/function (SortDirection) {\n SortDirection[SortDirection[\"SORT_DIRECTION_NONE\"] = 0] = \"SORT_DIRECTION_NONE\";\n SortDirection[SortDirection[\"SORT_DIRECTION_ASCENDING\"] = 1] = \"SORT_DIRECTION_ASCENDING\";\n SortDirection[SortDirection[\"SORT_DIRECTION_DESCENDING\"] = 2] = \"SORT_DIRECTION_DESCENDING\";\n return SortDirection;\n}(SortDirection || {});\n// *********************************\n\nfunction enumStringToValue$5(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass Customer {\n static fromProto(proto) {\n let m = new Customer();\n m = Object.assign(m, proto);\n if (proto.created) {\n m.created = new Date(proto.created);\n }\n if (proto.emailRequestLastDateSent) {\n m.emailRequestLastDateSent = new Date(proto.emailRequestLastDateSent);\n }\n if (proto.smsRequestLastDateSent) {\n m.smsRequestLastDateSent = new Date(proto.smsRequestLastDateSent);\n }\n if (proto.emailReviewRequestStatus) {\n m.emailReviewRequestStatus = enumStringToValue$5(ReviewRequestStatus, proto.emailReviewRequestStatus);\n }\n if (proto.smsReviewRequestStatus) {\n m.smsReviewRequestStatus = enumStringToValue$5(ReviewRequestStatus, proto.smsReviewRequestStatus);\n }\n if (proto.emailLastClickedSource) {\n m.emailLastClickedSource = parseInt(proto.emailLastClickedSource, 10);\n }\n if (proto.review) {\n m.review = CustomerReview.fromProto(proto.review);\n }\n if (proto.smsStatusCode) {\n m.smsStatusCode = enumStringToValue$5(SmsStatusCode, proto.smsStatusCode);\n }\n if (proto.smsLastClickedSource) {\n m.smsLastClickedSource = parseInt(proto.smsLastClickedSource, 10);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.customerId !== 'undefined') {\n toReturn['customerId'] = this.customerId;\n }\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n if (typeof this.firstName !== 'undefined') {\n toReturn['firstName'] = this.firstName;\n }\n if (typeof this.lastName !== 'undefined') {\n toReturn['lastName'] = this.lastName;\n }\n if (typeof this.phone !== 'undefined') {\n toReturn['phone'] = this.phone;\n }\n if (typeof this.email !== 'undefined') {\n toReturn['email'] = this.email;\n }\n if (typeof this.created !== 'undefined' && this.created !== null) {\n toReturn['created'] = 'toApiJson' in this.created ? this.created.toApiJson() : this.created;\n }\n if (typeof this.emailRequestLastDateSent !== 'undefined' && this.emailRequestLastDateSent !== null) {\n toReturn['emailRequestLastDateSent'] = 'toApiJson' in this.emailRequestLastDateSent ? this.emailRequestLastDateSent.toApiJson() : this.emailRequestLastDateSent;\n }\n if (typeof this.smsRequestLastDateSent !== 'undefined' && this.smsRequestLastDateSent !== null) {\n toReturn['smsRequestLastDateSent'] = 'toApiJson' in this.smsRequestLastDateSent ? this.smsRequestLastDateSent.toApiJson() : this.smsRequestLastDateSent;\n }\n if (typeof this.emailReviewRequestStatus !== 'undefined') {\n toReturn['emailReviewRequestStatus'] = this.emailReviewRequestStatus;\n }\n if (typeof this.smsReviewRequestStatus !== 'undefined') {\n toReturn['smsReviewRequestStatus'] = this.smsReviewRequestStatus;\n }\n if (typeof this.emailLastClickedSource !== 'undefined') {\n toReturn['emailLastClickedSource'] = this.emailLastClickedSource;\n }\n if (typeof this.employeeFirstName !== 'undefined') {\n toReturn['employeeFirstName'] = this.employeeFirstName;\n }\n if (typeof this.employeeLastName !== 'undefined') {\n toReturn['employeeLastName'] = this.employeeLastName;\n }\n if (typeof this.tag !== 'undefined') {\n toReturn['tag'] = this.tag;\n }\n if (typeof this.review !== 'undefined' && this.review !== null) {\n toReturn['review'] = 'toApiJson' in this.review ? this.review.toApiJson() : this.review;\n }\n if (typeof this.smsStatusCode !== 'undefined') {\n toReturn['smsStatusCode'] = this.smsStatusCode;\n }\n if (typeof this.address !== 'undefined') {\n toReturn['address'] = this.address;\n }\n if (typeof this.city !== 'undefined') {\n toReturn['city'] = this.city;\n }\n if (typeof this.state !== 'undefined') {\n toReturn['state'] = this.state;\n }\n if (typeof this.country !== 'undefined') {\n toReturn['country'] = this.country;\n }\n if (typeof this.smsLastClickedSource !== 'undefined') {\n toReturn['smsLastClickedSource'] = this.smsLastClickedSource;\n }\n if (typeof this.origin !== 'undefined') {\n toReturn['origin'] = this.origin;\n }\n return toReturn;\n }\n}\nclass CustomerReview {\n static fromProto(proto) {\n let m = new CustomerReview();\n m = Object.assign(m, proto);\n if (proto.starRating) {\n m.starRating = parseInt(proto.starRating, 10);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.starRating !== 'undefined') {\n toReturn['starRating'] = this.starRating;\n }\n if (typeof this.reviewUrl !== 'undefined') {\n toReturn['reviewUrl'] = this.reviewUrl;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$4(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass CustomerRequestEvent {\n static fromProto(proto) {\n let m = new CustomerRequestEvent();\n m = Object.assign(m, proto);\n if (proto.requestEventType) {\n m.requestEventType = enumStringToValue$4(RequestEventType, proto.requestEventType);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.customerId !== 'undefined') {\n toReturn['customerId'] = this.customerId;\n }\n if (typeof this.requestEventType !== 'undefined') {\n toReturn['requestEventType'] = this.requestEventType;\n }\n return toReturn;\n }\n}\nclass ReviewRequestEvent {\n static fromProto(proto) {\n let m = new ReviewRequestEvent();\n m = Object.assign(m, proto);\n if (proto.customerRequestEvents) {\n m.customerRequestEvents = proto.customerRequestEvents.map(CustomerRequestEvent.fromProto);\n }\n if (proto.created) {\n m.created = new Date(proto.created);\n }\n if (proto.automationType) {\n m.automationType = enumStringToValue$4(AutomationType, proto.automationType);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.requestEventId !== 'undefined') {\n toReturn['requestEventId'] = this.requestEventId;\n }\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n if (typeof this.customerRequestEvents !== 'undefined' && this.customerRequestEvents !== null) {\n toReturn['customerRequestEvents'] = 'toApiJson' in this.customerRequestEvents ? this.customerRequestEvents.toApiJson() : this.customerRequestEvents;\n }\n if (typeof this.created !== 'undefined' && this.created !== null) {\n toReturn['created'] = 'toApiJson' in this.created ? this.created.toApiJson() : this.created;\n }\n if (typeof this.automationType !== 'undefined') {\n toReturn['automationType'] = this.automationType;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$3(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass FieldMask {\n static fromProto(proto) {\n let m = new FieldMask();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.paths !== 'undefined') {\n toReturn['paths'] = this.paths;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$2(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass Attribute {\n static fromProto(proto) {\n let m = new Attribute();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.key !== 'undefined') {\n toReturn['key'] = this.key;\n }\n if (typeof this.value !== 'undefined') {\n toReturn['value'] = this.value;\n }\n return toReturn;\n }\n}\nclass CreateCustomerAndSendDefaultReviewRequestRequest {\n static fromProto(proto) {\n let m = new CreateCustomerAndSendDefaultReviewRequestRequest();\n m = Object.assign(m, proto);\n if (proto.customer) {\n m.customer = Customer.fromProto(proto.customer);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.customer !== 'undefined' && this.customer !== null) {\n toReturn['customer'] = 'toApiJson' in this.customer ? this.customer.toApiJson() : this.customer;\n }\n if (typeof this.responseToken !== 'undefined') {\n toReturn['responseToken'] = this.responseToken;\n }\n return toReturn;\n }\n}\nclass CreateCustomerAndSendDefaultReviewRequestResponse {\n static fromProto(proto) {\n let m = new CreateCustomerAndSendDefaultReviewRequestResponse();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.customerId !== 'undefined') {\n toReturn['customerId'] = this.customerId;\n }\n return toReturn;\n }\n}\nclass CreateCustomerRequest {\n static fromProto(proto) {\n let m = new CreateCustomerRequest();\n m = Object.assign(m, proto);\n if (proto.customer) {\n m.customer = Customer.fromProto(proto.customer);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n if (typeof this.firstName !== 'undefined') {\n toReturn['firstName'] = this.firstName;\n }\n if (typeof this.lastName !== 'undefined') {\n toReturn['lastName'] = this.lastName;\n }\n if (typeof this.phone !== 'undefined') {\n toReturn['phone'] = this.phone;\n }\n if (typeof this.email !== 'undefined') {\n toReturn['email'] = this.email;\n }\n if (typeof this.employeeFirstName !== 'undefined') {\n toReturn['employeeFirstName'] = this.employeeFirstName;\n }\n if (typeof this.employeeLastName !== 'undefined') {\n toReturn['employeeLastName'] = this.employeeLastName;\n }\n if (typeof this.tag !== 'undefined') {\n toReturn['tag'] = this.tag;\n }\n if (typeof this.customer !== 'undefined' && this.customer !== null) {\n toReturn['customer'] = 'toApiJson' in this.customer ? this.customer.toApiJson() : this.customer;\n }\n return toReturn;\n }\n}\nclass CreateCustomerResponse {\n static fromProto(proto) {\n let m = new CreateCustomerResponse();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.customerId !== 'undefined') {\n toReturn['customerId'] = this.customerId;\n }\n return toReturn;\n }\n}\nclass CreateMultiCustomerError {\n static fromProto(proto) {\n let m = new CreateMultiCustomerError();\n m = Object.assign(m, proto);\n if (proto.index) {\n m.index = parseInt(proto.index, 10);\n }\n if (proto.errors) {\n m.errors = proto.errors.map(v => enumStringToValue$2(CreateError, v));\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.index !== 'undefined') {\n toReturn['index'] = this.index;\n }\n if (typeof this.errors !== 'undefined') {\n toReturn['errors'] = this.errors;\n }\n return toReturn;\n }\n}\nclass CreateMultiCustomerRequest {\n static fromProto(proto) {\n let m = new CreateMultiCustomerRequest();\n m = Object.assign(m, proto);\n if (proto.customers) {\n m.customers = proto.customers.map(Customer.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.customers !== 'undefined' && this.customers !== null) {\n toReturn['customers'] = 'toApiJson' in this.customers ? this.customers.toApiJson() : this.customers;\n }\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n return toReturn;\n }\n}\nclass CreateMultiCustomerResponse {\n static fromProto(proto) {\n let m = new CreateMultiCustomerResponse();\n m = Object.assign(m, proto);\n if (proto.customers) {\n m.customers = proto.customers.map(Customer.fromProto);\n }\n if (proto.errors) {\n m.errors = proto.errors.map(CreateMultiCustomerError.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.customers !== 'undefined' && this.customers !== null) {\n toReturn['customers'] = 'toApiJson' in this.customers ? this.customers.toApiJson() : this.customers;\n }\n if (typeof this.errors !== 'undefined' && this.errors !== null) {\n toReturn['errors'] = 'toApiJson' in this.errors ? this.errors.toApiJson() : this.errors;\n }\n return toReturn;\n }\n}\nclass CreateReviewRequestEventRequest {\n static fromProto(proto) {\n let m = new CreateReviewRequestEventRequest();\n m = Object.assign(m, proto);\n if (proto.customerRequestEvents) {\n m.customerRequestEvents = proto.customerRequestEvents.map(CustomerRequestEvent.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n if (typeof this.customerRequestEvents !== 'undefined' && this.customerRequestEvents !== null) {\n toReturn['customerRequestEvents'] = 'toApiJson' in this.customerRequestEvents ? this.customerRequestEvents.toApiJson() : this.customerRequestEvents;\n }\n return toReturn;\n }\n}\nclass CreateReviewRequestEventResponse {\n static fromProto(proto) {\n let m = new CreateReviewRequestEventResponse();\n m = Object.assign(m, proto);\n if (proto.reviewRequestEvent) {\n m.reviewRequestEvent = ReviewRequestEvent.fromProto(proto.reviewRequestEvent);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.reviewRequestEvent !== 'undefined' && this.reviewRequestEvent !== null) {\n toReturn['reviewRequestEvent'] = 'toApiJson' in this.reviewRequestEvent ? this.reviewRequestEvent.toApiJson() : this.reviewRequestEvent;\n }\n return toReturn;\n }\n}\nclass CustomerExistsRequest {\n static fromProto(proto) {\n let m = new CustomerExistsRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n if (typeof this.email !== 'undefined') {\n toReturn['email'] = this.email;\n }\n if (typeof this.phone !== 'undefined') {\n toReturn['phone'] = this.phone;\n }\n return toReturn;\n }\n}\nclass CustomerExistsResponse {\n static fromProto(proto) {\n let m = new CustomerExistsResponse();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.customerExists !== 'undefined') {\n toReturn['customerExists'] = this.customerExists;\n }\n return toReturn;\n }\n}\nclass CustomerFilters {\n static fromProto(proto) {\n let m = new CustomerFilters();\n m = Object.assign(m, proto);\n if (proto.emailStatus) {\n m.emailStatus = proto.emailStatus.map(v => enumStringToValue$2(ReviewRequestStatus, v));\n }\n if (proto.smsStatus) {\n m.smsStatus = proto.smsStatus.map(v => enumStringToValue$2(ReviewRequestStatus, v));\n }\n if (proto.created) {\n m.created = DateRangeFilter.fromProto(proto.created);\n }\n if (proto.lastRequested) {\n m.lastRequested = DateRangeFilter.fromProto(proto.lastRequested);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.emailStatus !== 'undefined') {\n toReturn['emailStatus'] = this.emailStatus;\n }\n if (typeof this.smsStatus !== 'undefined') {\n toReturn['smsStatus'] = this.smsStatus;\n }\n if (typeof this.tag !== 'undefined') {\n toReturn['tag'] = this.tag;\n }\n if (typeof this.created !== 'undefined' && this.created !== null) {\n toReturn['created'] = 'toApiJson' in this.created ? this.created.toApiJson() : this.created;\n }\n if (typeof this.lastRequested !== 'undefined' && this.lastRequested !== null) {\n toReturn['lastRequested'] = 'toApiJson' in this.lastRequested ? this.lastRequested.toApiJson() : this.lastRequested;\n }\n if (typeof this.origin !== 'undefined') {\n toReturn['origin'] = this.origin;\n }\n if (typeof this.negateTags !== 'undefined') {\n toReturn['negateTags'] = this.negateTags;\n }\n if (typeof this.customerIds !== 'undefined') {\n toReturn['customerIds'] = this.customerIds;\n }\n return toReturn;\n }\n}\nclass DateRangeFilter {\n static fromProto(proto) {\n let m = new DateRangeFilter();\n m = Object.assign(m, proto);\n if (proto.beginRange) {\n m.beginRange = new Date(proto.beginRange);\n }\n if (proto.endRange) {\n m.endRange = new Date(proto.endRange);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.beginRange !== 'undefined' && this.beginRange !== null) {\n toReturn['beginRange'] = 'toApiJson' in this.beginRange ? this.beginRange.toApiJson() : this.beginRange;\n }\n if (typeof this.endRange !== 'undefined' && this.endRange !== null) {\n toReturn['endRange'] = 'toApiJson' in this.endRange ? this.endRange.toApiJson() : this.endRange;\n }\n return toReturn;\n }\n}\nclass DeleteCustomerRequest {\n static fromProto(proto) {\n let m = new DeleteCustomerRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.customerId !== 'undefined') {\n toReturn['customerId'] = this.customerId;\n }\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n return toReturn;\n }\n}\nclass GetCustomerRequest {\n static fromProto(proto) {\n let m = new GetCustomerRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.customerId !== 'undefined') {\n toReturn['customerId'] = this.customerId;\n }\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n return toReturn;\n }\n}\nclass GetCustomerResponse {\n static fromProto(proto) {\n let m = new GetCustomerResponse();\n m = Object.assign(m, proto);\n if (proto.customer) {\n m.customer = Customer.fromProto(proto.customer);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.customer !== 'undefined' && this.customer !== null) {\n toReturn['customer'] = 'toApiJson' in this.customer ? this.customer.toApiJson() : this.customer;\n }\n return toReturn;\n }\n}\nclass GetMultiCustomerForBusinessRequest {\n static fromProto(proto) {\n let m = new GetMultiCustomerForBusinessRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.customerIds !== 'undefined') {\n toReturn['customerIds'] = this.customerIds;\n }\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n return toReturn;\n }\n}\nclass GetMultiCustomerForBusinessResponse {\n static fromProto(proto) {\n let m = new GetMultiCustomerForBusinessResponse();\n m = Object.assign(m, proto);\n if (proto.customers) {\n m.customers = proto.customers.map(Customer.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.customers !== 'undefined' && this.customers !== null) {\n toReturn['customers'] = 'toApiJson' in this.customers ? this.customers.toApiJson() : this.customers;\n }\n return toReturn;\n }\n}\nclass GetQRCodeForURLRequest {\n static fromProto(proto) {\n let m = new GetQRCodeForURLRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.url !== 'undefined') {\n toReturn['url'] = this.url;\n }\n return toReturn;\n }\n}\nclass GetQRCodeForURLResponse {\n static fromProto(proto) {\n let m = new GetQRCodeForURLResponse();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.qrCode !== 'undefined') {\n toReturn['qrCode'] = this.qrCode;\n }\n return toReturn;\n }\n}\nclass HeaderMapping {\n static fromProto(proto) {\n let m = new HeaderMapping();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n if (typeof this.email !== 'undefined') {\n toReturn['email'] = this.email;\n }\n if (typeof this.phone !== 'undefined') {\n toReturn['phone'] = this.phone;\n }\n if (typeof this.firstName !== 'undefined') {\n toReturn['firstName'] = this.firstName;\n }\n if (typeof this.lastName !== 'undefined') {\n toReturn['lastName'] = this.lastName;\n }\n if (typeof this.employeeFirstName !== 'undefined') {\n toReturn['employeeFirstName'] = this.employeeFirstName;\n }\n if (typeof this.employeeLastName !== 'undefined') {\n toReturn['employeeLastName'] = this.employeeLastName;\n }\n if (typeof this.tag !== 'undefined') {\n toReturn['tag'] = this.tag;\n }\n return toReturn;\n }\n}\nclass ListBusinessTagsRequest {\n static fromProto(proto) {\n let m = new ListBusinessTagsRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n return toReturn;\n }\n}\nclass ListBusinessTagsResponse {\n static fromProto(proto) {\n let m = new ListBusinessTagsResponse();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.tag !== 'undefined') {\n toReturn['tag'] = this.tag;\n }\n return toReturn;\n }\n}\nclass ListCustomersRequest {\n static fromProto(proto) {\n let m = new ListCustomersRequest();\n m = Object.assign(m, proto);\n if (proto.pagingOptions) {\n m.pagingOptions = PagedRequestOptions.fromProto(proto.pagingOptions);\n }\n if (proto.filters) {\n m.filters = CustomerFilters.fromProto(proto.filters);\n }\n if (proto.sortingOptions) {\n m.sortingOptions = proto.sortingOptions.map(SortingOption.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n if (typeof this.pagingOptions !== 'undefined' && this.pagingOptions !== null) {\n toReturn['pagingOptions'] = 'toApiJson' in this.pagingOptions ? this.pagingOptions.toApiJson() : this.pagingOptions;\n }\n if (typeof this.searchTerm !== 'undefined') {\n toReturn['searchTerm'] = this.searchTerm;\n }\n if (typeof this.filters !== 'undefined' && this.filters !== null) {\n toReturn['filters'] = 'toApiJson' in this.filters ? this.filters.toApiJson() : this.filters;\n }\n if (typeof this.sortingOptions !== 'undefined' && this.sortingOptions !== null) {\n toReturn['sortingOptions'] = 'toApiJson' in this.sortingOptions ? this.sortingOptions.toApiJson() : this.sortingOptions;\n }\n return toReturn;\n }\n}\nclass ListCustomersResponse {\n static fromProto(proto) {\n let m = new ListCustomersResponse();\n m = Object.assign(m, proto);\n if (proto.customers) {\n m.customers = proto.customers.map(Customer.fromProto);\n }\n if (proto.pagingMetadata) {\n m.pagingMetadata = PagedResponseMetadata.fromProto(proto.pagingMetadata);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.customers !== 'undefined' && this.customers !== null) {\n toReturn['customers'] = 'toApiJson' in this.customers ? this.customers.toApiJson() : this.customers;\n }\n if (typeof this.pagingMetadata !== 'undefined' && this.pagingMetadata !== null) {\n toReturn['pagingMetadata'] = 'toApiJson' in this.pagingMetadata ? this.pagingMetadata.toApiJson() : this.pagingMetadata;\n }\n return toReturn;\n }\n}\nclass ListOriginsRequest {\n static fromProto(proto) {\n let m = new ListOriginsRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n return toReturn;\n }\n}\nclass ListOriginsResponse {\n static fromProto(proto) {\n let m = new ListOriginsResponse();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.origins !== 'undefined') {\n toReturn['origins'] = this.origins;\n }\n return toReturn;\n }\n}\nclass ListReviewRequestEventRequest {\n static fromProto(proto) {\n let m = new ListReviewRequestEventRequest();\n m = Object.assign(m, proto);\n if (proto.pagingOptions) {\n m.pagingOptions = PagedRequestOptions.fromProto(proto.pagingOptions);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n if (typeof this.pagingOptions !== 'undefined' && this.pagingOptions !== null) {\n toReturn['pagingOptions'] = 'toApiJson' in this.pagingOptions ? this.pagingOptions.toApiJson() : this.pagingOptions;\n }\n return toReturn;\n }\n}\nclass ListReviewRequestEventResponse {\n static fromProto(proto) {\n let m = new ListReviewRequestEventResponse();\n m = Object.assign(m, proto);\n if (proto.reviewRequestEvents) {\n m.reviewRequestEvents = proto.reviewRequestEvents.map(ReviewRequestEvent.fromProto);\n }\n if (proto.pagingMetadata) {\n m.pagingMetadata = PagedResponseMetadata.fromProto(proto.pagingMetadata);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.reviewRequestEvents !== 'undefined' && this.reviewRequestEvents !== null) {\n toReturn['reviewRequestEvents'] = 'toApiJson' in this.reviewRequestEvents ? this.reviewRequestEvents.toApiJson() : this.reviewRequestEvents;\n }\n if (typeof this.pagingMetadata !== 'undefined' && this.pagingMetadata !== null) {\n toReturn['pagingMetadata'] = 'toApiJson' in this.pagingMetadata ? this.pagingMetadata.toApiJson() : this.pagingMetadata;\n }\n return toReturn;\n }\n}\nclass MultilocationSendReviewRequestsCSVRequest {\n static fromProto(proto) {\n let m = new MultilocationSendReviewRequestsCSVRequest();\n m = Object.assign(m, proto);\n if (proto.mapping) {\n m.mapping = HeaderMapping.fromProto(proto.mapping);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.partnerId !== 'undefined') {\n toReturn['partnerId'] = this.partnerId;\n }\n if (typeof this.filePath !== 'undefined') {\n toReturn['filePath'] = this.filePath;\n }\n if (typeof this.mapping !== 'undefined' && this.mapping !== null) {\n toReturn['mapping'] = 'toApiJson' in this.mapping ? this.mapping.toApiJson() : this.mapping;\n }\n return toReturn;\n }\n}\nclass PagedRequestOptions {\n static fromProto(proto) {\n let m = new PagedRequestOptions();\n m = Object.assign(m, proto);\n if (proto.pageSize) {\n m.pageSize = parseInt(proto.pageSize, 10);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.cursor !== 'undefined') {\n toReturn['cursor'] = this.cursor;\n }\n if (typeof this.pageSize !== 'undefined') {\n toReturn['pageSize'] = this.pageSize;\n }\n return toReturn;\n }\n}\nclass PagedResponseMetadata {\n static fromProto(proto) {\n let m = new PagedResponseMetadata();\n m = Object.assign(m, proto);\n if (proto.totalResults) {\n m.totalResults = parseInt(proto.totalResults, 10);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.nextCursor !== 'undefined') {\n toReturn['nextCursor'] = this.nextCursor;\n }\n if (typeof this.hasMore !== 'undefined') {\n toReturn['hasMore'] = this.hasMore;\n }\n if (typeof this.totalResults !== 'undefined') {\n toReturn['totalResults'] = this.totalResults;\n }\n return toReturn;\n }\n}\nclass SendReviewRequestEmailRequest {\n static fromProto(proto) {\n let m = new SendReviewRequestEmailRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n if (typeof this.customerId !== 'undefined') {\n toReturn['customerId'] = this.customerId;\n }\n return toReturn;\n }\n}\nclass SendReviewRequestSmsRequest {\n static fromProto(proto) {\n let m = new SendReviewRequestSmsRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n if (typeof this.customerId !== 'undefined') {\n toReturn['customerId'] = this.customerId;\n }\n return toReturn;\n }\n}\nclass SendReviewRequestToDefaultTemplateRequest {\n static fromProto(proto) {\n let m = new SendReviewRequestToDefaultTemplateRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n if (typeof this.customerId !== 'undefined') {\n toReturn['customerId'] = this.customerId;\n }\n return toReturn;\n }\n}\nclass SendSMSRequest {\n static fromProto(proto) {\n let m = new SendSMSRequest();\n m = Object.assign(m, proto);\n if (proto.attributes) {\n m.attributes = proto.attributes.map(Attribute.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n if (typeof this.customerId !== 'undefined') {\n toReturn['customerId'] = this.customerId;\n }\n if (typeof this.customerPhoneNumber !== 'undefined') {\n toReturn['customerPhoneNumber'] = this.customerPhoneNumber;\n }\n if (typeof this.messageToSend !== 'undefined') {\n toReturn['messageToSend'] = this.messageToSend;\n }\n if (typeof this.attributes !== 'undefined' && this.attributes !== null) {\n toReturn['attributes'] = 'toApiJson' in this.attributes ? this.attributes.toApiJson() : this.attributes;\n }\n return toReturn;\n }\n}\nclass SortingOption {\n static fromProto(proto) {\n let m = new SortingOption();\n m = Object.assign(m, proto);\n if (proto.sortDirection) {\n m.sortDirection = enumStringToValue$2(SortDirection, proto.sortDirection);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.columnName !== 'undefined') {\n toReturn['columnName'] = this.columnName;\n }\n if (typeof this.sortDirection !== 'undefined') {\n toReturn['sortDirection'] = this.sortDirection;\n }\n return toReturn;\n }\n}\nclass UpdateCustomerRequest {\n static fromProto(proto) {\n let m = new UpdateCustomerRequest();\n m = Object.assign(m, proto);\n if (proto.customer) {\n m.customer = Customer.fromProto(proto.customer);\n }\n if (proto.fieldMask) {\n m.fieldMask = FieldMask.fromProto(proto.fieldMask);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.customer !== 'undefined' && this.customer !== null) {\n toReturn['customer'] = 'toApiJson' in this.customer ? this.customer.toApiJson() : this.customer;\n }\n if (typeof this.fieldMask !== 'undefined' && this.fieldMask !== null) {\n toReturn['fieldMask'] = 'toApiJson' in this.fieldMask ? this.fieldMask.toApiJson() : this.fieldMask;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$1(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass StartTrustHubRegistrationRequest {\n static fromProto(proto) {\n let m = new StartTrustHubRegistrationRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass GetReviewSourceSettingsRequest {\n static fromProto(proto) {\n let m = new GetReviewSourceSettingsRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n return toReturn;\n }\n}\nclass GetReviewSourceSettingsResponse {\n static fromProto(proto) {\n let m = new GetReviewSourceSettingsResponse();\n m = Object.assign(m, proto);\n if (proto.reviewSources) {\n m.reviewSources = proto.reviewSources.map(ReviewSources.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.reviewSources !== 'undefined' && this.reviewSources !== null) {\n toReturn['reviewSources'] = 'toApiJson' in this.reviewSources ? this.reviewSources.toApiJson() : this.reviewSources;\n }\n if (typeof this.selectedSourceIds !== 'undefined') {\n toReturn['selectedSourceIds'] = this.selectedSourceIds;\n }\n return toReturn;\n }\n}\nclass ReviewSources {\n static fromProto(proto) {\n let m = new ReviewSources();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.sourceId !== 'undefined') {\n toReturn['sourceId'] = this.sourceId;\n }\n if (typeof this.displayName !== 'undefined') {\n toReturn['displayName'] = this.displayName;\n }\n if (typeof this.iconClass !== 'undefined') {\n toReturn['iconClass'] = this.iconClass;\n }\n if (typeof this.hasListings !== 'undefined') {\n toReturn['hasListings'] = this.hasListings;\n }\n if (typeof this.hasWarning !== 'undefined') {\n toReturn['hasWarning'] = this.hasWarning;\n }\n if (typeof this.url !== 'undefined') {\n toReturn['url'] = this.url;\n }\n if (typeof this.overriddenUrl !== 'undefined') {\n toReturn['overriddenUrl'] = this.overriddenUrl;\n }\n return toReturn;\n }\n}\n\n// *********************************\n\nconst environment = (window ? window['environment'] : 'prod') ?? 'prod';\nconst hostMap = {\n 'local': 'customer-voice-service-api.vendasta-local.com',\n 'test': '',\n 'demo': 'customer-voice-service-api-demo.apigateway.co',\n 'prod': 'customer-voice-service-api-prod.apigateway.co',\n 'production': 'customer-voice-service-api-prod.apigateway.co'\n};\nlet HostService = /*#__PURE__*/(() => {\n class HostService {\n get host() {\n return hostMap[environment.toLowerCase()];\n }\n get hostWithScheme() {\n return 'https://' + this.host;\n }\n }\n HostService.ɵfac = function HostService_Factory(t) {\n return new (t || HostService)();\n };\n HostService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: HostService,\n factory: HostService.ɵfac,\n providedIn: 'root'\n });\n return HostService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\nlet CustomerVoiceApiService = /*#__PURE__*/(() => {\n class CustomerVoiceApiService {\n constructor(http, hostService) {\n this.http = http;\n this.hostService = hostService;\n this._host = this.hostService.hostWithScheme;\n }\n apiOptions() {\n return {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json'\n }),\n withCredentials: true\n };\n }\n listCustomers(r) {\n const request = r.toApiJson ? r : new ListCustomersRequest(r);\n return this.http.post(this._host + \"/customervoice.v1.CustomerVoice/ListCustomers\", request.toApiJson(), this.apiOptions()).pipe(map(resp => ListCustomersResponse.fromProto(resp)));\n }\n createCustomer(r) {\n const request = r.toApiJson ? r : new CreateCustomerRequest(r);\n return this.http.post(this._host + \"/customervoice.v1.CustomerVoice/CreateCustomer\", request.toApiJson(), this.apiOptions()).pipe(map(resp => CreateCustomerResponse.fromProto(resp)));\n }\n createMultiCustomers(r) {\n const request = r.toApiJson ? r : new CreateMultiCustomerRequest(r);\n return this.http.post(this._host + \"/customervoice.v1.CustomerVoice/CreateMultiCustomers\", request.toApiJson(), this.apiOptions()).pipe(map(resp => CreateMultiCustomerResponse.fromProto(resp)));\n }\n sendReviewRequestToDefaultTemplate(r) {\n const request = r.toApiJson ? r : new SendReviewRequestToDefaultTemplateRequest(r);\n return this.http.post(this._host + \"/customervoice.v1.CustomerVoice/SendReviewRequestToDefaultTemplate\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n sendReviewRequestEmail(r) {\n const request = r.toApiJson ? r : new SendReviewRequestEmailRequest(r);\n return this.http.post(this._host + \"/customervoice.v1.CustomerVoice/SendReviewRequestEmail\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n sendReviewRequestSms(r) {\n const request = r.toApiJson ? r : new SendReviewRequestSmsRequest(r);\n return this.http.post(this._host + \"/customervoice.v1.CustomerVoice/SendReviewRequestSms\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n updateCustomer(r) {\n const request = r.toApiJson ? r : new UpdateCustomerRequest(r);\n return this.http.post(this._host + \"/customervoice.v1.CustomerVoice/UpdateCustomer\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n deleteCustomer(r) {\n const request = r.toApiJson ? r : new DeleteCustomerRequest(r);\n return this.http.post(this._host + \"/customervoice.v1.CustomerVoice/DeleteCustomer\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n getCustomer(r) {\n const request = r.toApiJson ? r : new GetCustomerRequest(r);\n return this.http.post(this._host + \"/customervoice.v1.CustomerVoice/GetCustomer\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetCustomerResponse.fromProto(resp)));\n }\n getMultiCustomerForBusiness(r) {\n const request = r.toApiJson ? r : new GetMultiCustomerForBusinessRequest(r);\n return this.http.post(this._host + \"/customervoice.v1.CustomerVoice/GetMultiCustomerForBusiness\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetMultiCustomerForBusinessResponse.fromProto(resp)));\n }\n listBusinessTags(r) {\n const request = r.toApiJson ? r : new ListBusinessTagsRequest(r);\n return this.http.post(this._host + \"/customervoice.v1.CustomerVoice/ListBusinessTags\", request.toApiJson(), this.apiOptions()).pipe(map(resp => ListBusinessTagsResponse.fromProto(resp)));\n }\n customerExists(r) {\n const request = r.toApiJson ? r : new CustomerExistsRequest(r);\n return this.http.post(this._host + \"/customervoice.v1.CustomerVoice/CustomerExists\", request.toApiJson(), this.apiOptions()).pipe(map(resp => CustomerExistsResponse.fromProto(resp)));\n }\n multilocationSendReviewRequestsCsv(r) {\n const request = r.toApiJson ? r : new MultilocationSendReviewRequestsCSVRequest(r);\n return this.http.post(this._host + \"/customervoice.v1.CustomerVoice/MultilocationSendReviewRequestsCSV\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n createReviewRequestEvent(r) {\n const request = r.toApiJson ? r : new CreateReviewRequestEventRequest(r);\n return this.http.post(this._host + \"/customervoice.v1.CustomerVoice/CreateReviewRequestEvent\", request.toApiJson(), this.apiOptions()).pipe(map(resp => CreateReviewRequestEventResponse.fromProto(resp)));\n }\n listReviewRequestEvents(r) {\n const request = r.toApiJson ? r : new ListReviewRequestEventRequest(r);\n return this.http.post(this._host + \"/customervoice.v1.CustomerVoice/ListReviewRequestEvents\", request.toApiJson(), this.apiOptions()).pipe(map(resp => ListReviewRequestEventResponse.fromProto(resp)));\n }\n listOrigins(r) {\n const request = r.toApiJson ? r : new ListOriginsRequest(r);\n return this.http.post(this._host + \"/customervoice.v1.CustomerVoice/ListOrigins\", request.toApiJson(), this.apiOptions()).pipe(map(resp => ListOriginsResponse.fromProto(resp)));\n }\n createCustomerAndSendDefaultReviewRequest(r) {\n const request = r.toApiJson ? r : new CreateCustomerAndSendDefaultReviewRequestRequest(r);\n return this.http.post(this._host + \"/customervoice.v1.CustomerVoice/CreateCustomerAndSendDefaultReviewRequest\", request.toApiJson(), this.apiOptions()).pipe(map(resp => CreateCustomerAndSendDefaultReviewRequestResponse.fromProto(resp)));\n }\n sendSms(r) {\n const request = r.toApiJson ? r : new SendSMSRequest(r);\n return this.http.post(this._host + \"/customervoice.v1.CustomerVoice/SendSMS\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n getQrCodeForUrl(r) {\n const request = r.toApiJson ? r : new GetQRCodeForURLRequest(r);\n return this.http.post(this._host + \"/customervoice.v1.CustomerVoice/GetQRCodeForURL\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetQRCodeForURLResponse.fromProto(resp)));\n }\n }\n CustomerVoiceApiService.ɵfac = function CustomerVoiceApiService_Factory(t) {\n return new (t || CustomerVoiceApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(HostService));\n };\n CustomerVoiceApiService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: CustomerVoiceApiService,\n factory: CustomerVoiceApiService.ɵfac,\n providedIn: 'root'\n });\n return CustomerVoiceApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\nlet ListingsApiService = /*#__PURE__*/(() => {\n class ListingsApiService {\n constructor(http, hostService) {\n this.http = http;\n this.hostService = hostService;\n this._host = this.hostService.hostWithScheme;\n }\n apiOptions() {\n return {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json'\n }),\n withCredentials: true\n };\n }\n getReviewSourceSettings(r) {\n const request = r.toApiJson ? r : new GetReviewSourceSettingsRequest(r);\n return this.http.post(this._host + \"/customervoice.v1.ListingsService/GetReviewSourceSettings\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetReviewSourceSettingsResponse.fromProto(resp)));\n }\n }\n ListingsApiService.ɵfac = function ListingsApiService_Factory(t) {\n return new (t || ListingsApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(HostService));\n };\n ListingsApiService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: ListingsApiService,\n factory: ListingsApiService.ɵfac,\n providedIn: 'root'\n });\n return ListingsApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\nlet TwilioApiService = /*#__PURE__*/(() => {\n class TwilioApiService {\n constructor(http, hostService) {\n this.http = http;\n this.hostService = hostService;\n this._host = this.hostService.hostWithScheme;\n }\n apiOptions() {\n return {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json'\n }),\n withCredentials: true\n };\n }\n startTrustHubRegistration(r) {\n const request = r.toApiJson ? r : new StartTrustHubRegistrationRequest(r);\n return this.http.post(this._host + \"/customervoice.v1.Twilio/StartTrustHubRegistration\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n }\n TwilioApiService.ɵfac = function TwilioApiService_Factory(t) {\n return new (t || TwilioApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(HostService));\n };\n TwilioApiService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: TwilioApiService,\n factory: TwilioApiService.ɵfac,\n providedIn: 'root'\n });\n return TwilioApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { Attribute, AutomationType, CreateCustomerAndSendDefaultReviewRequestRequest, CreateCustomerAndSendDefaultReviewRequestResponse, CreateCustomerRequest, CreateCustomerResponse, CreateError, CreateMultiCustomerError, CreateMultiCustomerRequest, CreateMultiCustomerResponse, CreateReviewRequestEventRequest, CreateReviewRequestEventResponse, Customer, CustomerExistsRequest, CustomerExistsResponse, CustomerFilters, CustomerRequestEvent, CustomerReview, CustomerVoiceApiService, DateRangeFilter, DeleteCustomerRequest, FieldMask, GetCustomerRequest, GetCustomerResponse, GetMultiCustomerForBusinessRequest, GetMultiCustomerForBusinessResponse, GetQRCodeForURLRequest, GetQRCodeForURLResponse, GetReviewSourceSettingsRequest, GetReviewSourceSettingsResponse, HeaderMapping, HostService, ListBusinessTagsRequest, ListBusinessTagsResponse, ListCustomersRequest, ListCustomersResponse, ListOriginsRequest, ListOriginsResponse, ListReviewRequestEventRequest, ListReviewRequestEventResponse, ListingsApiService, MultilocationSendReviewRequestsCSVRequest, PagedRequestOptions, PagedResponseMetadata, RequestEventType, ReviewRequestEvent, ReviewRequestStatus, ReviewSources, SendReviewRequestEmailRequest, SendReviewRequestSmsRequest, SendReviewRequestToDefaultTemplateRequest, SendSMSRequest, SmsStatusCode, SortDirection, SortingOption, StartTrustHubRegistrationRequest, TwilioApiService, UpdateCustomerRequest };\n","import { Inject, Injectable } from '@angular/core';\nimport { ListingsApiService } from '@vendasta/customer-voice-service';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { FACEBOOK_SOURCE_ID, GOOGLE_SOURCE_ID } from './inbox.constants';\nimport { ACCOUNT_GROUP_ID_TOKEN } from './tokens';\n\nexport interface ReviewLink {\n sourceName: string;\n reviewUrl: string;\n}\n\n@Injectable()\nexport class ListingService {\n private currentAccountGroupId: string;\n\n constructor(\n private listingsApiService: ListingsApiService,\n @Inject(ACCOUNT_GROUP_ID_TOKEN) readonly accountGroupId$: Observable,\n ) {\n this.accountGroupId$.pipe(takeUntilDestroyed()).subscribe((accountGroupId) => {\n this.currentAccountGroupId = accountGroupId;\n });\n }\n\n public get reviewLinks$(): Observable {\n return this.listingsApiService.getReviewSourceSettings({ accountGroupId: this.currentAccountGroupId }).pipe(\n map((response) => {\n return response.reviewSources\n .filter((result) => result.url != null || result.overriddenUrl != null)\n .sort((a, b) => {\n if (\n a.sourceId == GOOGLE_SOURCE_ID ||\n a.sourceId == FACEBOOK_SOURCE_ID ||\n (a.sourceId == GOOGLE_SOURCE_ID && b.sourceId == FACEBOOK_SOURCE_ID)\n ) {\n return -1;\n }\n return 1;\n })\n .map((result) => {\n if (result.overriddenUrl) {\n return {\n sourceName: result.displayName,\n reviewUrl: result.overriddenUrl,\n } as ReviewLink;\n }\n return {\n sourceName: result.displayName,\n reviewUrl: result.url,\n } as ReviewLink;\n });\n }),\n );\n }\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Output, ViewChild, inject } from '@angular/core';\nimport { EnvironmentService } from '@galaxy/core';\nimport { AppPartnerService, AppSettings } from '@galaxy/marketplace-apps';\nimport { FeatureFlagService } from '@galaxy/partner';\nimport { AccountsService, ActivationStatus } from '@vendasta/accounts';\nimport { GetMultiActivationStatusesResponseAppsAndAddonsActivationStatuses } from '@vendasta/accounts/lib/_internal/objects/api';\nimport { ConversationChannel, GlobalParticipantType, SubjectParticipant } from '@vendasta/conversation';\nimport { ProductAnalyticsService } from '@vendasta/product-analytics';\nimport { SSOService, newAccountServiceContext } from '@vendasta/sso';\nimport { BehaviorSubject, EMPTY, Observable, combineLatest, firstValueFrom, of } from 'rxjs';\nimport { catchError, defaultIfEmpty, filter, map, shareReplay, switchMap, take } from 'rxjs/operators';\nimport { ConversationService } from '../../../../../../core/src/lib/conversation.service';\nimport {\n CustomerVoiceAppIDs,\n DEFAULT_CV_ICON,\n DEFAULT_CV_NAME,\n SMB_MESSAGE_PARTNER_FEATURE,\n} from '../../../../../../core/src/lib/inbox.constants';\nimport { InboxService } from '../../../../../../core/src/lib/inbox.service';\nimport { ListingService, ReviewLink } from '../../../../../../core/src/lib/listing.service';\nimport { ParticipantService } from '../../../../../../core/src/lib/participant.service';\nimport {\n ACCOUNT_GROUP_ID_TOKEN,\n CONVERSATION_HOST_APP_INTERFACE_TOKEN,\n PARTNER_ID_TOKEN,\n} from '../../../../../../core/src/lib/tokens';\n\nimport { MatMenu } from '@angular/material/menu';\n\ninterface CVBrandingInfo {\n name: string;\n iconUrl: string;\n}\n\n@Component({\n selector: 'inbox-insert-review-link',\n templateUrl: './inbox-insert-review-link.component.html',\n styleUrls: ['./inbox-insert-review-link.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class InboxInsertReviewLinkComponent {\n private readonly hostAppInterface = inject(CONVERSATION_HOST_APP_INTERFACE_TOKEN);\n private readonly participantService = inject(ParticipantService);\n\n @Output() insertLink = new EventEmitter();\n @ViewChild('menuCustomerVoice') customerVoiceMenu: MatMenu;\n @ViewChild('menuContactUs') contactUsMenu: MatMenu;\n\n private readonly loading$$ = new BehaviorSubject(true);\n protected readonly loading$ = this.loading$$.asObservable();\n\n private readonly accountGroupId$ = inject(ACCOUNT_GROUP_ID_TOKEN);\n private readonly partnerId$ = inject(PARTNER_ID_TOKEN);\n\n customerVoiceAppIsActive$: Observable = this.accountGroupId$.pipe(\n switchMap((accountGroupId) => {\n return this.accountsService.getMultiActivationStatuses([accountGroupId]).pipe(\n catchError((err) => {\n console.warn('error to get activation status', err);\n return EMPTY;\n }),\n defaultIfEmpty([]),\n map((res: GetMultiActivationStatusesResponseAppsAndAddonsActivationStatuses[]) => {\n const activeApps = res.filter(\n (filter) =>\n filter.productId === CustomerVoiceAppIDs[this.environmentService.getEnvironment()] &&\n filter.status === ActivationStatus.ACTIVATION_STATUS_ACTIVATED,\n );\n return activeApps.length > 0;\n }),\n );\n }),\n );\n\n cvPreferredSitesSettingsLink$: Observable = combineLatest([\n this.customerVoiceAppIsActive$,\n this.accountGroupId$,\n ]).pipe(\n switchMap(([customerVoiceAppIsActive, accountGroupId]) => {\n if (!customerVoiceAppIsActive) {\n return of(null);\n }\n return this.ssoService\n .getEntryUrl(\n CustomerVoiceAppIDs[this.environmentService.getEnvironment()],\n newAccountServiceContext(accountGroupId),\n )\n .pipe(\n catchError(() => of(null)),\n map((entryUrl) => {\n if (!entryUrl) {\n return null;\n }\n const url = new URL(\n entryUrl.replace('', accountGroupId).replace('%3CaccountId%3E', accountGroupId),\n );\n url.searchParams.set('nextUrl', `/cv/account/${accountGroupId}/settings/preferred-sites`);\n return url.toString();\n }),\n shareReplay(1),\n );\n }),\n );\n\n customerVoiceAppInfo$ = combineLatest([this.partnerId$, this.conversationService.marketId$]).pipe(\n switchMap(([partnerId, marketId]) => {\n return this.appPartnerService\n .getAppSettings(CustomerVoiceAppIDs[this.environmentService.getEnvironment()], partnerId, marketId)\n .pipe(\n catchError(() => {\n console.error('error getting customer voice app settings');\n return EMPTY;\n }),\n defaultIfEmpty({ branding: { enabled: false } }),\n map((appSettings: AppSettings) => {\n return {\n name:\n appSettings?.branding?.name && appSettings?.branding?.enabled\n ? appSettings?.branding?.name\n : DEFAULT_CV_NAME,\n iconUrl:\n appSettings?.branding?.iconUrl && appSettings?.branding?.enabled\n ? appSettings.branding.iconUrl\n : DEFAULT_CV_ICON,\n };\n }),\n );\n }),\n map((branding) => {\n return {\n name: branding.name,\n iconUrl: branding.iconUrl,\n } as CVBrandingInfo;\n }),\n );\n\n enableMessagePartnerFeature$: Observable = this.partnerId$.pipe(\n switchMap((partnerId) => {\n return this.featureFlagService.batchGetStatus(partnerId, '', [SMB_MESSAGE_PARTNER_FEATURE]);\n }),\n filter((ff) => !!ff),\n map((feature) => feature[SMB_MESSAGE_PARTNER_FEATURE]),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n reviewLinks$: Observable = this.listingService.reviewLinks$.pipe(\n catchError(() => {\n this.loading$$.next(false);\n return EMPTY;\n }),\n defaultIfEmpty([]),\n map((results) => {\n this.loading$$.next(false);\n return results;\n }),\n );\n\n constructor(\n private conversationService: ConversationService,\n private appPartnerService: AppPartnerService,\n private listingService: ListingService,\n private ssoService: SSOService,\n private accountsService: AccountsService,\n private featureFlagService: FeatureFlagService,\n private analyticsService: ProductAnalyticsService,\n private environmentService: EnvironmentService,\n private inboxService: InboxService,\n ) {}\n\n async useLink(reviewLink: ReviewLink): Promise {\n const [partnerId, accountGroupId] = await Promise.all([\n firstValueFrom(this.partnerId$),\n firstValueFrom(this.accountGroupId$),\n ]);\n this.analyticsService.trackEvent('inbox-insert-review-link', reviewLink.sourceName, 'clicked', 0, {\n accountGroupId: accountGroupId,\n partnerId: partnerId,\n location: this.inboxService.platformLocation,\n });\n this.insertLink.emit(reviewLink.reviewUrl);\n }\n\n openNewCVPreferredSitesSettingsTab(cvPreferredSitesSettingsLink: string): void {\n window.open(cvPreferredSitesSettingsLink, '_blank');\n }\n\n async getInserReviewMenu(): Promise {\n return (await firstValueFrom(this.customerVoiceAppIsActive$)) ? this.customerVoiceMenu : this.contactUsMenu;\n }\n\n sendMessage(): void {\n combineLatest([this.partnerId$, this.accountGroupId$, this.participantService.buildIAMUserParticipant()])\n .pipe(take(1))\n .subscribe(([partnerId, accountGroupId, currentIAMParticipant]) => {\n this.hostAppInterface.redirectToInternalConversation(\n currentIAMParticipant,\n [\n new SubjectParticipant({\n internalParticipantId: accountGroupId,\n participantType: GlobalParticipantType.GLOBAL_PARTICIPANT_TYPE_ACCOUNT_GROUP,\n }),\n new SubjectParticipant({\n internalParticipantId: partnerId,\n participantType: GlobalParticipantType.GLOBAL_PARTICIPANT_TYPE_PARTNER,\n }),\n ],\n ConversationChannel.CONVERSATION_CHANNEL_INTERNAL,\n );\n });\n }\n}\n","\n
\n \n \n \n \n
\n
\n\n\n
\n
\n \n {{ 'INBOX.CHAT.INSERT_REVIEW_LINK' | translate }}\n
\n \n \n {{ 'INBOX.CHAT.GET_ACCESS_TO_REVIEW_LINKS' | translate }}\n \n \n
\n \n
\n\n \n\n\n\n \n
\n \n open_in_new\n
\n \n \n \n 0; else setupCustomerVoice\">\n \n \n \n \n \n \n \n
\n
\n\n\n
\n \n
\n \n
\n","import { InboxAtlasRoute } from '../../core/src/lib/interface/inbox.interface';\n\nexport const INBOX_NAVIGATION_LINK = ['', { outlets: { inbox: ['inbox'] } }];\nexport const INBOX_TEMPLATES_ROUTER_LINK = [\n '',\n { outlets: { inbox: ['inbox', 'settings', 'message-templates'] } },\n];\n\nexport const DEFAULT_MESSAGE_GROUPING_DURATION = 60000 * 10; // 10 minutes in milliseconds\nexport const DEFAULT_HOUR_GROUP_DURATION = 60000 * 60 * 3; // 3 hours in milliseconds\n","import { Component, inject } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { TemplateService } from '../../../../../../core/src/lib/template.service';\nimport { MessageTemplate } from '@vendasta/conversation';\nimport { Scrollable } from '@vendasta/rx-utils';\nimport { BehaviorSubject, catchError, map, of } from 'rxjs';\nimport { TEMPLATES_PAGE_SIZE } from '../../../../../../core/src/lib/inbox.constants';\nimport { InboxService } from '../../../../../../core/src/lib/inbox.service';\nimport { ACCOUNT_GROUP_ID_TOKEN } from '../../../../../../core/src/lib/tokens';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { InboxAtlasRoute } from '../../../../../../core/src/lib/interface/inbox.interface';\nimport { INBOX_TEMPLATES_ROUTER_LINK } from '../../../../../src/constants';\n\n@Component({\n selector: 'inbox-insert-template',\n templateUrl: './inbox-insert-template.component.html',\n styleUrls: ['./inbox-insert-template.component.scss'],\n})\nexport class InboxInsertTemplateComponent {\n private scrollable: Scrollable = this.getScrollableList();\n protected readonly templates$ = this.scrollable.items$;\n\n private loading$$: BehaviorSubject = new BehaviorSubject(true);\n readonly loading$ = this.loading$$.asObservable();\n\n private readonly templateService = inject(TemplateService);\n private readonly inboxService = inject(InboxService);\n private readonly accountGroupId = toSignal(inject(ACCOUNT_GROUP_ID_TOKEN));\n\n readonly isBusinessApp = this.inboxService.isBusinessApp;\n\n constructor(private readonly dialogRef: MatDialogRef) {}\n\n getEditRoute(): string | InboxAtlasRoute {\n if (this.isBusinessApp) {\n return `/account/location/${this.accountGroupId()}/settings/message-templates`;\n }\n return INBOX_TEMPLATES_ROUTER_LINK;\n }\n\n selectTemplate(template: MessageTemplate): void {\n this.dialogRef.close(template);\n }\n\n loadNext(): void {\n this.scrollable.loadMore();\n }\n\n private getScrollableList() {\n return new Scrollable(of(null), (_, cursor) => {\n return this.loadMore(cursor);\n });\n }\n\n loadMore(cursor: string) {\n return this.templateService.listTemplates(cursor, TEMPLATES_PAGE_SIZE).pipe(\n map((response) => {\n this.loading$$.next(false);\n return {\n items: response.templates,\n cursor: response.pagingMetadata?.nextCursor ?? '',\n hasMore: response.pagingMetadata?.hasMore ?? false,\n };\n }),\n catchError(() => of({ items: [] as Array, cursor: '', hasMore: false })),\n );\n }\n}\n","
\n
\n

{{ 'INBOX.MESSAGE_TEMPLATES.TITLE' | translate }}

\n \n {{ 'INBOX.MESSAGE_TEMPLATES.MODAL.EDIT_TEMPLATES' | translate }}\n \n
\n
\n\n \n \n 0; else emptyState\">\n \n \n \n \n \n\n\n\n \n\n\n \n \n article\n \n \n {{ 'INBOX.MESSAGE_TEMPLATES.MODAL.EMPTY_STATE_TITLE' | translate }}\n \n

{{ 'INBOX.MESSAGE_TEMPLATES.MODAL.EMPTY_STATE_CONTENT' | translate }}

\n
\n
\n","import * as i0 from '@angular/core';\nimport { Injectable } from '@angular/core';\nimport * as i1 from '@angular/common/http';\nimport { HttpHeaders } from '@angular/common/http';\nimport { map } from 'rxjs/operators';\n\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// Enums.\n// *********************************\nvar EventType = /*#__PURE__*/function (EventType) {\n EventType[EventType[\"EVENT_TYPE_UNSPECIFIED\"] = 0] = \"EVENT_TYPE_UNSPECIFIED\";\n EventType[EventType[\"EVENT_TYPE_TYPING_STARTED\"] = 1] = \"EVENT_TYPE_TYPING_STARTED\";\n EventType[EventType[\"EVENT_TYPE_TYPING_STOPPED\"] = 2] = \"EVENT_TYPE_TYPING_STOPPED\";\n EventType[EventType[\"EVENT_TYPE_REPRESENTATIVE_JOINED\"] = 3] = \"EVENT_TYPE_REPRESENTATIVE_JOINED\";\n EventType[EventType[\"EVENT_TYPE_REPRESENTATIVE_LEFT\"] = 4] = \"EVENT_TYPE_REPRESENTATIVE_LEFT\";\n return EventType;\n}(EventType || {});\nvar MessageType = /*#__PURE__*/function (MessageType) {\n MessageType[MessageType[\"MESSAGE_TYPE_UNSPECIFIED\"] = 0] = \"MESSAGE_TYPE_UNSPECIFIED\";\n MessageType[MessageType[\"MESSAGE_TYPE_TEXT\"] = 1] = \"MESSAGE_TYPE_TEXT\";\n MessageType[MessageType[\"MESSAGE_TYPE_IMAGE\"] = 2] = \"MESSAGE_TYPE_IMAGE\";\n return MessageType;\n}(MessageType || {});\nvar UserType = /*#__PURE__*/function (UserType) {\n UserType[UserType[\"USER_TYPE_UNSPECIFIED\"] = 0] = \"USER_TYPE_UNSPECIFIED\";\n UserType[UserType[\"USER_TYPE_BOT\"] = 1] = \"USER_TYPE_BOT\";\n UserType[UserType[\"USER_TYPE_HUMAN\"] = 2] = \"USER_TYPE_HUMAN\";\n return UserType;\n}(UserType || {});\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// Enums.\n// *********************************\nvar MetricType = /*#__PURE__*/function (MetricType) {\n MetricType[MetricType[\"NONE\"] = 0] = \"NONE\";\n MetricType[MetricType[\"QUERIES_DIRECT\"] = 1] = \"QUERIES_DIRECT\";\n MetricType[MetricType[\"QUERIES_INDIRECT\"] = 2] = \"QUERIES_INDIRECT\";\n MetricType[MetricType[\"VIEWS_MAPS\"] = 3] = \"VIEWS_MAPS\";\n MetricType[MetricType[\"VIEWS_SEARCH\"] = 4] = \"VIEWS_SEARCH\";\n MetricType[MetricType[\"ACTIONS_WEBSITE\"] = 5] = \"ACTIONS_WEBSITE\";\n MetricType[MetricType[\"ACTIONS_PHONE\"] = 6] = \"ACTIONS_PHONE\";\n MetricType[MetricType[\"ACTIONS_DRIVING_DIRECTIONS\"] = 7] = \"ACTIONS_DRIVING_DIRECTIONS\";\n MetricType[MetricType[\"QUERIES_CHAIN\"] = 8] = \"QUERIES_CHAIN\";\n MetricType[MetricType[\"PHOTOS_VIEWS_MERCHANT\"] = 9] = \"PHOTOS_VIEWS_MERCHANT\";\n MetricType[MetricType[\"PHOTOS_VIEWS_CUSTOMERS\"] = 10] = \"PHOTOS_VIEWS_CUSTOMERS\";\n MetricType[MetricType[\"PHOTOS_COUNT_MERCHANT\"] = 11] = \"PHOTOS_COUNT_MERCHANT\";\n MetricType[MetricType[\"PHOTOS_COUNT_CUSTOMERS\"] = 12] = \"PHOTOS_COUNT_CUSTOMERS\";\n MetricType[MetricType[\"LOCAL_POST_VIEWS_SEARCH\"] = 13] = \"LOCAL_POST_VIEWS_SEARCH\";\n MetricType[MetricType[\"LOCAL_POST_ACTIONS_CALL_TO_ACTION\"] = 14] = \"LOCAL_POST_ACTIONS_CALL_TO_ACTION\";\n return MetricType;\n}(MetricType || {});\nvar Period = /*#__PURE__*/function (Period) {\n Period[Period[\"DAY\"] = 0] = \"DAY\";\n Period[Period[\"WEEK\"] = 1] = \"WEEK\";\n Period[Period[\"MONTH\"] = 2] = \"MONTH\";\n return Period;\n}(Period || {});\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// Enums Index.\n// *********************************\n\nfunction enumStringToValue$8(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass FieldMask {\n static fromProto(proto) {\n let m = new FieldMask();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.paths !== 'undefined') {\n toReturn['paths'] = this.paths;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$7(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass GoogleDate {\n static fromProto(proto) {\n let m = new GoogleDate();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.year !== 'undefined') {\n toReturn['year'] = this.year;\n }\n if (typeof this.month !== 'undefined') {\n toReturn['month'] = this.month;\n }\n if (typeof this.day !== 'undefined') {\n toReturn['day'] = this.day;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$6(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass PostInsightsHistory {\n static fromProto(proto) {\n let m = new PostInsightsHistory();\n m = Object.assign(m, proto);\n if (proto.views) {\n m.views = parseInt(proto.views, 10);\n }\n if (proto.callToActionClicks) {\n m.callToActionClicks = parseInt(proto.callToActionClicks, 10);\n }\n if (proto.postedDateTime) {\n m.postedDateTime = new Date(proto.postedDateTime);\n }\n if (proto.statsDateTime) {\n m.statsDateTime = new Date(proto.statsDateTime);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.socialProfileId !== 'undefined') {\n toReturn['socialProfileId'] = this.socialProfileId;\n }\n if (typeof this.internalPostId !== 'undefined') {\n toReturn['internalPostId'] = this.internalPostId;\n }\n if (typeof this.views !== 'undefined') {\n toReturn['views'] = this.views;\n }\n if (typeof this.callToActionClicks !== 'undefined') {\n toReturn['callToActionClicks'] = this.callToActionClicks;\n }\n if (typeof this.postedDateTime !== 'undefined' && this.postedDateTime !== null) {\n toReturn['postedDateTime'] = 'toApiJson' in this.postedDateTime ? this.postedDateTime.toApiJson() : this.postedDateTime;\n }\n if (typeof this.statsDateTime !== 'undefined' && this.statsDateTime !== null) {\n toReturn['statsDateTime'] = 'toApiJson' in this.statsDateTime ? this.statsDateTime.toApiJson() : this.statsDateTime;\n }\n if (typeof this.partnerId !== 'undefined') {\n toReturn['partnerId'] = this.partnerId;\n }\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$5(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass Answer {\n static fromProto(proto) {\n let m = new Answer();\n m = Object.assign(m, proto);\n if (proto.upVoteCount) {\n m.upVoteCount = parseInt(proto.upVoteCount, 10);\n }\n if (proto.published) {\n m.published = new Date(proto.published);\n }\n if (proto.created) {\n m.created = new Date(proto.created);\n }\n if (proto.modified) {\n m.modified = new Date(proto.modified);\n }\n if (proto.previousVersions) {\n m.previousVersions = proto.previousVersions.map(Answer.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.partnerId !== 'undefined') {\n toReturn['partnerId'] = this.partnerId;\n }\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n if (typeof this.locationId !== 'undefined') {\n toReturn['locationId'] = this.locationId;\n }\n if (typeof this.questionId !== 'undefined') {\n toReturn['questionId'] = this.questionId;\n }\n if (typeof this.version !== 'undefined') {\n toReturn['version'] = this.version;\n }\n if (typeof this.locationPathName !== 'undefined') {\n toReturn['locationPathName'] = this.locationPathName;\n }\n if (typeof this.text !== 'undefined') {\n toReturn['text'] = this.text;\n }\n if (typeof this.author !== 'undefined') {\n toReturn['author'] = this.author;\n }\n if (typeof this.authorPhotoUrl !== 'undefined') {\n toReturn['authorPhotoUrl'] = this.authorPhotoUrl;\n }\n if (typeof this.authorType !== 'undefined') {\n toReturn['authorType'] = this.authorType;\n }\n if (typeof this.answerId !== 'undefined') {\n toReturn['answerId'] = this.answerId;\n }\n if (typeof this.upVoteCount !== 'undefined') {\n toReturn['upVoteCount'] = this.upVoteCount;\n }\n if (typeof this.published !== 'undefined' && this.published !== null) {\n toReturn['published'] = 'toApiJson' in this.published ? this.published.toApiJson() : this.published;\n }\n if (typeof this.created !== 'undefined' && this.created !== null) {\n toReturn['created'] = 'toApiJson' in this.created ? this.created.toApiJson() : this.created;\n }\n if (typeof this.modified !== 'undefined' && this.modified !== null) {\n toReturn['modified'] = 'toApiJson' in this.modified ? this.modified.toApiJson() : this.modified;\n }\n if (typeof this.previousVersions !== 'undefined' && this.previousVersions !== null) {\n toReturn['previousVersions'] = 'toApiJson' in this.previousVersions ? this.previousVersions.toApiJson() : this.previousVersions;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$4(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass Question {\n static fromProto(proto) {\n let m = new Question();\n m = Object.assign(m, proto);\n if (proto.totalAnswerCount) {\n m.totalAnswerCount = parseInt(proto.totalAnswerCount, 10);\n }\n if (proto.upVoteCount) {\n m.upVoteCount = parseInt(proto.upVoteCount, 10);\n }\n if (proto.published) {\n m.published = new Date(proto.published);\n }\n if (proto.created) {\n m.created = new Date(proto.created);\n }\n if (proto.modified) {\n m.modified = new Date(proto.modified);\n }\n if (proto.answers) {\n m.answers = proto.answers.map(Answer.fromProto);\n }\n if (proto.previousVersions) {\n m.previousVersions = proto.previousVersions.map(Question.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.partnerId !== 'undefined') {\n toReturn['partnerId'] = this.partnerId;\n }\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n if (typeof this.locationId !== 'undefined') {\n toReturn['locationId'] = this.locationId;\n }\n if (typeof this.questionId !== 'undefined') {\n toReturn['questionId'] = this.questionId;\n }\n if (typeof this.version !== 'undefined') {\n toReturn['version'] = this.version;\n }\n if (typeof this.locationPathName !== 'undefined') {\n toReturn['locationPathName'] = this.locationPathName;\n }\n if (typeof this.text !== 'undefined') {\n toReturn['text'] = this.text;\n }\n if (typeof this.author !== 'undefined') {\n toReturn['author'] = this.author;\n }\n if (typeof this.authorPhotoUrl !== 'undefined') {\n toReturn['authorPhotoUrl'] = this.authorPhotoUrl;\n }\n if (typeof this.authorType !== 'undefined') {\n toReturn['authorType'] = this.authorType;\n }\n if (typeof this.totalAnswerCount !== 'undefined') {\n toReturn['totalAnswerCount'] = this.totalAnswerCount;\n }\n if (typeof this.upVoteCount !== 'undefined') {\n toReturn['upVoteCount'] = this.upVoteCount;\n }\n if (typeof this.published !== 'undefined' && this.published !== null) {\n toReturn['published'] = 'toApiJson' in this.published ? this.published.toApiJson() : this.published;\n }\n if (typeof this.created !== 'undefined' && this.created !== null) {\n toReturn['created'] = 'toApiJson' in this.created ? this.created.toApiJson() : this.created;\n }\n if (typeof this.modified !== 'undefined' && this.modified !== null) {\n toReturn['modified'] = 'toApiJson' in this.modified ? this.modified.toApiJson() : this.modified;\n }\n if (typeof this.answers !== 'undefined' && this.answers !== null) {\n toReturn['answers'] = 'toApiJson' in this.answers ? this.answers.toApiJson() : this.answers;\n }\n if (typeof this.previousVersions !== 'undefined' && this.previousVersions !== null) {\n toReturn['previousVersions'] = 'toApiJson' in this.previousVersions ? this.previousVersions.toApiJson() : this.previousVersions;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$3(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass CreateEventRequest {\n static fromProto(proto) {\n let m = new CreateEventRequest();\n m = Object.assign(m, proto);\n if (proto.eventType) {\n m.eventType = enumStringToValue$3(EventType, proto.eventType);\n }\n if (proto.user) {\n m.user = User.fromProto(proto.user);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.eventType !== 'undefined') {\n toReturn['eventType'] = this.eventType;\n }\n if (typeof this.user !== 'undefined' && this.user !== null) {\n toReturn['user'] = 'toApiJson' in this.user ? this.user.toApiJson() : this.user;\n }\n if (typeof this.gmbConversationId !== 'undefined') {\n toReturn['gmbConversationId'] = this.gmbConversationId;\n }\n return toReturn;\n }\n}\nclass CreateEventResponse {\n static fromProto(proto) {\n let m = new CreateEventResponse();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.eventId !== 'undefined') {\n toReturn['eventId'] = this.eventId;\n }\n return toReturn;\n }\n}\nclass Image {\n static fromProto(proto) {\n let m = new Image();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.fileUrl !== 'undefined') {\n toReturn['fileUrl'] = this.fileUrl;\n }\n return toReturn;\n }\n}\nclass SendMessageRequest {\n static fromProto(proto) {\n let m = new SendMessageRequest();\n m = Object.assign(m, proto);\n if (proto.sender) {\n m.sender = User.fromProto(proto.sender);\n }\n if (proto.image) {\n m.image = Image.fromProto(proto.image);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.gmbConversationId !== 'undefined') {\n toReturn['gmbConversationId'] = this.gmbConversationId;\n }\n if (typeof this.sender !== 'undefined' && this.sender !== null) {\n toReturn['sender'] = 'toApiJson' in this.sender ? this.sender.toApiJson() : this.sender;\n }\n if (typeof this.image !== 'undefined' && this.image !== null) {\n toReturn['image'] = 'toApiJson' in this.image ? this.image.toApiJson() : this.image;\n }\n if (typeof this.text !== 'undefined') {\n toReturn['text'] = this.text;\n }\n return toReturn;\n }\n}\nclass SendMessageResponse {\n static fromProto(proto) {\n let m = new SendMessageResponse();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.messageId !== 'undefined') {\n toReturn['messageId'] = this.messageId;\n }\n return toReturn;\n }\n}\nclass User {\n static fromProto(proto) {\n let m = new User();\n m = Object.assign(m, proto);\n if (proto.userType) {\n m.userType = enumStringToValue$3(UserType, proto.userType);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.userName !== 'undefined') {\n toReturn['userName'] = this.userName;\n }\n if (typeof this.userAvatarUrl !== 'undefined') {\n toReturn['userAvatarUrl'] = this.userAvatarUrl;\n }\n if (typeof this.userType !== 'undefined') {\n toReturn['userType'] = this.userType;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$2(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass CanEnableBusinessCommunicationsRequest {\n static fromProto(proto) {\n let m = new CanEnableBusinessCommunicationsRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.socialProfileId !== 'undefined') {\n toReturn['socialProfileId'] = this.socialProfileId;\n }\n return toReturn;\n }\n}\nclass CanEnableBusinessCommunicationsResponse {\n static fromProto(proto) {\n let m = new CanEnableBusinessCommunicationsResponse();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.hasRequiredAccessScopes !== 'undefined') {\n toReturn['hasRequiredAccessScopes'] = this.hasRequiredAccessScopes;\n }\n return toReturn;\n }\n}\nclass ConnectBusinessCommunicationsRequest {\n static fromProto(proto) {\n let m = new ConnectBusinessCommunicationsRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n if (typeof this.socialProfileId !== 'undefined') {\n toReturn['socialProfileId'] = this.socialProfileId;\n }\n if (typeof this.partnerId !== 'undefined') {\n toReturn['partnerId'] = this.partnerId;\n }\n return toReturn;\n }\n}\nclass GetBusinessLaunchStatusRequest {\n static fromProto(proto) {\n let m = new GetBusinessLaunchStatusRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n if (typeof this.partnerId !== 'undefined') {\n toReturn['partnerId'] = this.partnerId;\n }\n return toReturn;\n }\n}\nclass GetBusinessLaunchStatusResponse {\n static fromProto(proto) {\n let m = new GetBusinessLaunchStatusResponse();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.isLaunched !== 'undefined') {\n toReturn['isLaunched'] = this.isLaunched;\n }\n return toReturn;\n }\n}\nclass UnlaunchBusinessCommunicationsAgentRequest {\n static fromProto(proto) {\n let m = new UnlaunchBusinessCommunicationsAgentRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n if (typeof this.partnerId !== 'undefined') {\n toReturn['partnerId'] = this.partnerId;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$1(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass CalculateInsightsByTimePeriodRequest {\n static fromProto(proto) {\n let m = new CalculateInsightsByTimePeriodRequest();\n m = Object.assign(m, proto);\n if (proto.startDate) {\n m.startDate = new Date(proto.startDate);\n }\n if (proto.endDate) {\n m.endDate = new Date(proto.endDate);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n if (typeof this.startDate !== 'undefined' && this.startDate !== null) {\n toReturn['startDate'] = 'toApiJson' in this.startDate ? this.startDate.toApiJson() : this.startDate;\n }\n if (typeof this.endDate !== 'undefined' && this.endDate !== null) {\n toReturn['endDate'] = 'toApiJson' in this.endDate ? this.endDate.toApiJson() : this.endDate;\n }\n return toReturn;\n }\n}\nclass CalculateInsightsByTimePeriodResponse {\n static fromProto(proto) {\n let m = new CalculateInsightsByTimePeriodResponse();\n m = Object.assign(m, proto);\n if (proto.stats) {\n m.stats = proto.stats.map(InsightsStat.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.stats !== 'undefined' && this.stats !== null) {\n toReturn['stats'] = 'toApiJson' in this.stats ? this.stats.toApiJson() : this.stats;\n }\n return toReturn;\n }\n}\nclass CanRespondToReviewRequest {\n static fromProto(proto) {\n let m = new CanRespondToReviewRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.reviewId !== 'undefined') {\n toReturn['reviewId'] = this.reviewId;\n }\n return toReturn;\n }\n}\nclass CanRespondToReviewResponse {\n static fromProto(proto) {\n let m = new CanRespondToReviewResponse();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.canPublish !== 'undefined') {\n toReturn['canPublish'] = this.canPublish;\n }\n if (typeof this.addLink !== 'undefined') {\n toReturn['addLink'] = this.addLink;\n }\n if (typeof this.message !== 'undefined') {\n toReturn['message'] = this.message;\n }\n return toReturn;\n }\n}\nclass ConnectRequest {\n static fromProto(proto) {\n let m = new ConnectRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.googleUserId !== 'undefined') {\n toReturn['googleUserId'] = this.googleUserId;\n }\n if (typeof this.locationPathName !== 'undefined') {\n toReturn['locationPathName'] = this.locationPathName;\n }\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n return toReturn;\n }\n}\nclass ConnectResponse {\n static fromProto(proto) {\n let m = new ConnectResponse();\n m = Object.assign(m, proto);\n if (proto.location) {\n m.location = Location.fromProto(proto.location);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.location !== 'undefined' && this.location !== null) {\n toReturn['location'] = 'toApiJson' in this.location ? this.location.toApiJson() : this.location;\n }\n return toReturn;\n }\n}\nclass DisconnectRequest {\n static fromProto(proto) {\n let m = new DisconnectRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.googleUserId !== 'undefined') {\n toReturn['googleUserId'] = this.googleUserId;\n }\n if (typeof this.locationPathName !== 'undefined') {\n toReturn['locationPathName'] = this.locationPathName;\n }\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n return toReturn;\n }\n}\nclass EnableDisableSyncRequest {\n static fromProto(proto) {\n let m = new EnableDisableSyncRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.googleUserId !== 'undefined') {\n toReturn['googleUserId'] = this.googleUserId;\n }\n if (typeof this.locationPathName !== 'undefined') {\n toReturn['locationPathName'] = this.locationPathName;\n }\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n if (typeof this.syncSettingFlag !== 'undefined') {\n toReturn['syncSettingFlag'] = this.syncSettingFlag;\n }\n return toReturn;\n }\n}\nclass EnableDisableSyncResponse {\n static fromProto(proto) {\n let m = new EnableDisableSyncResponse();\n m = Object.assign(m, proto);\n if (proto.location) {\n m.location = Location.fromProto(proto.location);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.location !== 'undefined' && this.location !== null) {\n toReturn['location'] = 'toApiJson' in this.location ? this.location.toApiJson() : this.location;\n }\n return toReturn;\n }\n}\nclass GetAsSocialServiceRequest {\n static fromProto(proto) {\n let m = new GetAsSocialServiceRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n return toReturn;\n }\n}\nclass GetAsSocialServiceResponse {\n static fromProto(proto) {\n let m = new GetAsSocialServiceResponse();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.serviceType !== 'undefined') {\n toReturn['serviceType'] = this.serviceType;\n }\n if (typeof this.ssid !== 'undefined') {\n toReturn['ssid'] = this.ssid;\n }\n if (typeof this.googleUserId !== 'undefined') {\n toReturn['googleUserId'] = this.googleUserId;\n }\n if (typeof this.agid !== 'undefined') {\n toReturn['agid'] = this.agid;\n }\n if (typeof this.profileUrl !== 'undefined') {\n toReturn['profileUrl'] = this.profileUrl;\n }\n if (typeof this.socialSyncFlag !== 'undefined') {\n toReturn['socialSyncFlag'] = this.socialSyncFlag;\n }\n if (typeof this.spid !== 'undefined') {\n toReturn['spid'] = this.spid;\n }\n if (typeof this.isAuthenticated !== 'undefined') {\n toReturn['isAuthenticated'] = this.isAuthenticated;\n }\n if (typeof this.name !== 'undefined') {\n toReturn['name'] = this.name;\n }\n return toReturn;\n }\n}\nclass GetConnectionRequest {\n static fromProto(proto) {\n let m = new GetConnectionRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n if (typeof this.googleUserId !== 'undefined') {\n toReturn['googleUserId'] = this.googleUserId;\n }\n if (typeof this.locationPathName !== 'undefined') {\n toReturn['locationPathName'] = this.locationPathName;\n }\n if (typeof this.refreshFromGoogleFlag !== 'undefined') {\n toReturn['refreshFromGoogleFlag'] = this.refreshFromGoogleFlag;\n }\n return toReturn;\n }\n}\nclass GetConnectionResponse {\n static fromProto(proto) {\n let m = new GetConnectionResponse();\n m = Object.assign(m, proto);\n if (proto.location) {\n m.location = Location.fromProto(proto.location);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.location !== 'undefined' && this.location !== null) {\n toReturn['location'] = 'toApiJson' in this.location ? this.location.toApiJson() : this.location;\n }\n return toReturn;\n }\n}\nclass GetConnectionsRequest {\n static fromProto(proto) {\n let m = new GetConnectionsRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n if (typeof this.googleUserId !== 'undefined') {\n toReturn['googleUserId'] = this.googleUserId;\n }\n if (typeof this.locationPathName !== 'undefined') {\n toReturn['locationPathName'] = this.locationPathName;\n }\n if (typeof this.refreshFromGoogleFlag !== 'undefined') {\n toReturn['refreshFromGoogleFlag'] = this.refreshFromGoogleFlag;\n }\n return toReturn;\n }\n}\nclass GetConnectionsResponse {\n static fromProto(proto) {\n let m = new GetConnectionsResponse();\n m = Object.assign(m, proto);\n if (proto.locations) {\n m.locations = proto.locations.map(Location.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.locations !== 'undefined' && this.locations !== null) {\n toReturn['locations'] = 'toApiJson' in this.locations ? this.locations.toApiJson() : this.locations;\n }\n return toReturn;\n }\n}\nclass GetGoogleUserRequest {\n static fromProto(proto) {\n let m = new GetGoogleUserRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n if (typeof this.googleUserId !== 'undefined') {\n toReturn['googleUserId'] = this.googleUserId;\n }\n return toReturn;\n }\n}\nclass GetGoogleUserResponse {\n static fromProto(proto) {\n let m = new GetGoogleUserResponse();\n m = Object.assign(m, proto);\n if (proto.user) {\n m.user = GoogleUser.fromProto(proto.user);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.user !== 'undefined' && this.user !== null) {\n toReturn['user'] = 'toApiJson' in this.user ? this.user.toApiJson() : this.user;\n }\n return toReturn;\n }\n}\nclass GoogleUser {\n static fromProto(proto) {\n let m = new GoogleUser();\n m = Object.assign(m, proto);\n if (proto.expiryDateTime) {\n m.expiryDateTime = new Date(proto.expiryDateTime);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.socialProfileId !== 'undefined') {\n toReturn['socialProfileId'] = this.socialProfileId;\n }\n if (typeof this.userId !== 'undefined') {\n toReturn['userId'] = this.userId;\n }\n if (typeof this.socialServiceId !== 'undefined') {\n toReturn['socialServiceId'] = this.socialServiceId;\n }\n if (typeof this.name !== 'undefined') {\n toReturn['name'] = this.name;\n }\n if (typeof this.accessToken !== 'undefined') {\n toReturn['accessToken'] = this.accessToken;\n }\n if (typeof this.refreshToken !== 'undefined') {\n toReturn['refreshToken'] = this.refreshToken;\n }\n if (typeof this.isTokenBroken !== 'undefined') {\n toReturn['isTokenBroken'] = this.isTokenBroken;\n }\n if (typeof this.expiryDateTime !== 'undefined' && this.expiryDateTime !== null) {\n toReturn['expiryDateTime'] = 'toApiJson' in this.expiryDateTime ? this.expiryDateTime.toApiJson() : this.expiryDateTime;\n }\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n return toReturn;\n }\n}\nclass InsightsStat {\n static fromProto(proto) {\n let m = new InsightsStat();\n m = Object.assign(m, proto);\n if (proto.currentValue) {\n m.currentValue = parseInt(proto.currentValue, 10);\n }\n if (proto.change) {\n m.change = parseInt(proto.change, 10);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.currentValue !== 'undefined') {\n toReturn['currentValue'] = this.currentValue;\n }\n if (typeof this.change !== 'undefined') {\n toReturn['change'] = this.change;\n }\n if (typeof this.name !== 'undefined') {\n toReturn['name'] = this.name;\n }\n return toReturn;\n }\n}\nclass Location {\n static fromProto(proto) {\n let m = new Location();\n m = Object.assign(m, proto);\n if (proto.locationSyncSucceededOn) {\n m.locationSyncSucceededOn = new Date(proto.locationSyncSucceededOn);\n }\n if (proto.openStatusSyncSucceededOn) {\n m.openStatusSyncSucceededOn = new Date(proto.openStatusSyncSucceededOn);\n }\n if (proto.syncLastAttemptedOn) {\n m.syncLastAttemptedOn = new Date(proto.syncLastAttemptedOn);\n }\n if (proto.created) {\n m.created = new Date(proto.created);\n }\n if (proto.modified) {\n m.modified = new Date(proto.modified);\n }\n if (proto.deleted) {\n m.deleted = new Date(proto.deleted);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n if (typeof this.socialProfileId !== 'undefined') {\n toReturn['socialProfileId'] = this.socialProfileId;\n }\n if (typeof this.address !== 'undefined') {\n toReturn['address'] = this.address;\n }\n if (typeof this.displayName !== 'undefined') {\n toReturn['displayName'] = this.displayName;\n }\n if (typeof this.googleReverify !== 'undefined') {\n toReturn['googleReverify'] = this.googleReverify;\n }\n if (typeof this.googleVerified !== 'undefined') {\n toReturn['googleVerified'] = this.googleVerified;\n }\n if (typeof this.isLocalPostApiDisabled !== 'undefined') {\n toReturn['isLocalPostApiDisabled'] = this.isLocalPostApiDisabled;\n }\n if (typeof this.isMissing !== 'undefined') {\n toReturn['isMissing'] = this.isMissing;\n }\n if (typeof this.isTokenBroken !== 'undefined') {\n toReturn['isTokenBroken'] = this.isTokenBroken;\n }\n if (typeof this.isVerified !== 'undefined') {\n toReturn['isVerified'] = this.isVerified;\n }\n if (typeof this.locationPathName !== 'undefined') {\n toReturn['locationPathName'] = this.locationPathName;\n }\n if (typeof this.logoImageId !== 'undefined') {\n toReturn['logoImageId'] = this.logoImageId;\n }\n if (typeof this.mapsPlaceId !== 'undefined') {\n toReturn['mapsPlaceId'] = this.mapsPlaceId;\n }\n if (typeof this.primaryImageId !== 'undefined') {\n toReturn['primaryImageId'] = this.primaryImageId;\n }\n if (typeof this.syncSettingFlag !== 'undefined') {\n toReturn['syncSettingFlag'] = this.syncSettingFlag;\n }\n if (typeof this.cannotSyncReasons !== 'undefined') {\n toReturn['cannotSyncReasons'] = this.cannotSyncReasons;\n }\n if (typeof this.serviceAreaPlaceId !== 'undefined') {\n toReturn['serviceAreaPlaceId'] = this.serviceAreaPlaceId;\n }\n if (typeof this.locationSyncSucceededOn !== 'undefined' && this.locationSyncSucceededOn !== null) {\n toReturn['locationSyncSucceededOn'] = 'toApiJson' in this.locationSyncSucceededOn ? this.locationSyncSucceededOn.toApiJson() : this.locationSyncSucceededOn;\n }\n if (typeof this.openStatusSyncSucceededOn !== 'undefined' && this.openStatusSyncSucceededOn !== null) {\n toReturn['openStatusSyncSucceededOn'] = 'toApiJson' in this.openStatusSyncSucceededOn ? this.openStatusSyncSucceededOn.toApiJson() : this.openStatusSyncSucceededOn;\n }\n if (typeof this.syncLastAttemptedOn !== 'undefined' && this.syncLastAttemptedOn !== null) {\n toReturn['syncLastAttemptedOn'] = 'toApiJson' in this.syncLastAttemptedOn ? this.syncLastAttemptedOn.toApiJson() : this.syncLastAttemptedOn;\n }\n if (typeof this.created !== 'undefined' && this.created !== null) {\n toReturn['created'] = 'toApiJson' in this.created ? this.created.toApiJson() : this.created;\n }\n if (typeof this.modified !== 'undefined' && this.modified !== null) {\n toReturn['modified'] = 'toApiJson' in this.modified ? this.modified.toApiJson() : this.modified;\n }\n if (typeof this.deleted !== 'undefined' && this.deleted !== null) {\n toReturn['deleted'] = 'toApiJson' in this.deleted ? this.deleted.toApiJson() : this.deleted;\n }\n return toReturn;\n }\n}\nclass QAndAAccountData {\n static fromProto(proto) {\n let m = new QAndAAccountData();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n if (typeof this.partnerId !== 'undefined') {\n toReturn['partnerId'] = this.partnerId;\n }\n if (typeof this.socialProfileId !== 'undefined') {\n toReturn['socialProfileId'] = this.socialProfileId;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass AccountLocation {\n static fromProto(proto) {\n let m = new AccountLocation();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n if (typeof this.googleAccountId !== 'undefined') {\n toReturn['googleAccountId'] = this.googleAccountId;\n }\n if (typeof this.googleLocationId !== 'undefined') {\n toReturn['googleLocationId'] = this.googleLocationId;\n }\n return toReturn;\n }\n}\nclass CreateAnswerRequest {\n static fromProto(proto) {\n let m = new CreateAnswerRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n if (typeof this.socialProfileId !== 'undefined') {\n toReturn['socialProfileId'] = this.socialProfileId;\n }\n if (typeof this.locationPathName !== 'undefined') {\n toReturn['locationPathName'] = this.locationPathName;\n }\n if (typeof this.questionId !== 'undefined') {\n toReturn['questionId'] = this.questionId;\n }\n if (typeof this.text !== 'undefined') {\n toReturn['text'] = this.text;\n }\n return toReturn;\n }\n}\nclass CreateAnswerResponse {\n static fromProto(proto) {\n let m = new CreateAnswerResponse();\n m = Object.assign(m, proto);\n if (proto.answer) {\n m.answer = Answer.fromProto(proto.answer);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.answer !== 'undefined' && this.answer !== null) {\n toReturn['answer'] = 'toApiJson' in this.answer ? this.answer.toApiJson() : this.answer;\n }\n return toReturn;\n }\n}\nclass CreateQuestionRequest {\n static fromProto(proto) {\n let m = new CreateQuestionRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n if (typeof this.socialProfileId !== 'undefined') {\n toReturn['socialProfileId'] = this.socialProfileId;\n }\n if (typeof this.locationPathName !== 'undefined') {\n toReturn['locationPathName'] = this.locationPathName;\n }\n if (typeof this.text !== 'undefined') {\n toReturn['text'] = this.text;\n }\n if (typeof this.partnerId !== 'undefined') {\n toReturn['partnerId'] = this.partnerId;\n }\n return toReturn;\n }\n}\nclass CreateQuestionResponse {\n static fromProto(proto) {\n let m = new CreateQuestionResponse();\n m = Object.assign(m, proto);\n if (proto.question) {\n m.question = Question.fromProto(proto.question);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.question !== 'undefined' && this.question !== null) {\n toReturn['question'] = 'toApiJson' in this.question ? this.question.toApiJson() : this.question;\n }\n return toReturn;\n }\n}\nclass DeleteAccountLocationRequest {\n static fromProto(proto) {\n let m = new DeleteAccountLocationRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n return toReturn;\n }\n}\nclass DeletePostRequest {\n static fromProto(proto) {\n let m = new DeletePostRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.accessToken !== 'undefined') {\n toReturn['accessToken'] = this.accessToken;\n }\n if (typeof this.postId !== 'undefined') {\n toReturn['postId'] = this.postId;\n }\n return toReturn;\n }\n}\nclass GetMultiAccountLocationRequest {\n static fromProto(proto) {\n let m = new GetMultiAccountLocationRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.accountGroupIds !== 'undefined') {\n toReturn['accountGroupIds'] = this.accountGroupIds;\n }\n return toReturn;\n }\n}\nclass GetMultiAccountLocationResponse {\n static fromProto(proto) {\n let m = new GetMultiAccountLocationResponse();\n m = Object.assign(m, proto);\n if (proto.accountLocations) {\n m.accountLocations = proto.accountLocations.map(AccountLocation.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.accountLocations !== 'undefined' && this.accountLocations !== null) {\n toReturn['accountLocations'] = 'toApiJson' in this.accountLocations ? this.accountLocations.toApiJson() : this.accountLocations;\n }\n return toReturn;\n }\n}\nclass GetMultiQuestionsRequest {\n static fromProto(proto) {\n let m = new GetMultiQuestionsRequest();\n m = Object.assign(m, proto);\n if (proto.questionIds) {\n m.questionIds = proto.questionIds.map(QuestionIdentifier.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.questionIds !== 'undefined' && this.questionIds !== null) {\n toReturn['questionIds'] = 'toApiJson' in this.questionIds ? this.questionIds.toApiJson() : this.questionIds;\n }\n if (typeof this.includeAnswers !== 'undefined') {\n toReturn['includeAnswers'] = this.includeAnswers;\n }\n return toReturn;\n }\n}\nclass GetMultiQuestionsResponse {\n static fromProto(proto) {\n let m = new GetMultiQuestionsResponse();\n m = Object.assign(m, proto);\n if (proto.questions) {\n m.questions = proto.questions.map(Question.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.questions !== 'undefined' && this.questions !== null) {\n toReturn['questions'] = 'toApiJson' in this.questions ? this.questions.toApiJson() : this.questions;\n }\n return toReturn;\n }\n}\nclass GetMultiTimeRangeRequest {\n static fromProto(proto) {\n let m = new GetMultiTimeRangeRequest();\n m = Object.assign(m, proto);\n if (proto.resourceIds) {\n m.resourceIds = proto.resourceIds.map(ResourceId.fromProto);\n }\n if (proto.startTime) {\n m.startTime = new Date(proto.startTime);\n }\n if (proto.endTime) {\n m.endTime = new Date(proto.endTime);\n }\n if (proto.metricTypes) {\n m.metricTypes = proto.metricTypes.map(v => enumStringToValue(MetricType, v));\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.resourceIds !== 'undefined' && this.resourceIds !== null) {\n toReturn['resourceIds'] = 'toApiJson' in this.resourceIds ? this.resourceIds.toApiJson() : this.resourceIds;\n }\n if (typeof this.partnerId !== 'undefined') {\n toReturn['partnerId'] = this.partnerId;\n }\n if (typeof this.startTime !== 'undefined' && this.startTime !== null) {\n toReturn['startTime'] = 'toApiJson' in this.startTime ? this.startTime.toApiJson() : this.startTime;\n }\n if (typeof this.endTime !== 'undefined' && this.endTime !== null) {\n toReturn['endTime'] = 'toApiJson' in this.endTime ? this.endTime.toApiJson() : this.endTime;\n }\n if (typeof this.metricTypes !== 'undefined') {\n toReturn['metricTypes'] = this.metricTypes;\n }\n if (typeof this.delta !== 'undefined') {\n toReturn['delta'] = this.delta;\n }\n if (typeof this.total !== 'undefined') {\n toReturn['total'] = this.total;\n }\n if (typeof this.overTime !== 'undefined') {\n toReturn['overTime'] = this.overTime;\n }\n return toReturn;\n }\n}\nclass GetMultiTimeRangeResponse {\n static fromProto(proto) {\n let m = new GetMultiTimeRangeResponse();\n m = Object.assign(m, proto);\n if (proto.resourceInsights) {\n m.resourceInsights = proto.resourceInsights.map(GetMultiTimeRangeResponseInsightsContainer.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.resourceInsights !== 'undefined' && this.resourceInsights !== null) {\n toReturn['resourceInsights'] = 'toApiJson' in this.resourceInsights ? this.resourceInsights.toApiJson() : this.resourceInsights;\n }\n return toReturn;\n }\n}\nclass GetQuestionAnswerStatsRequest {\n static fromProto(proto) {\n let m = new GetQuestionAnswerStatsRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n if (typeof this.locationId !== 'undefined') {\n toReturn['locationId'] = this.locationId;\n }\n return toReturn;\n }\n}\nclass GetQuestionAnswerStatsResponse {\n static fromProto(proto) {\n let m = new GetQuestionAnswerStatsResponse();\n m = Object.assign(m, proto);\n if (proto.unanswered) {\n m.unanswered = parseInt(proto.unanswered, 10);\n }\n if (proto.answeredByOwner) {\n m.answeredByOwner = parseInt(proto.answeredByOwner, 10);\n }\n if (proto.totalQuestions) {\n m.totalQuestions = parseInt(proto.totalQuestions, 10);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.unanswered !== 'undefined') {\n toReturn['unanswered'] = this.unanswered;\n }\n if (typeof this.answeredByOwner !== 'undefined') {\n toReturn['answeredByOwner'] = this.answeredByOwner;\n }\n if (typeof this.totalQuestions !== 'undefined') {\n toReturn['totalQuestions'] = this.totalQuestions;\n }\n return toReturn;\n }\n}\nclass GetQuestionRequest {\n static fromProto(proto) {\n let m = new GetQuestionRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n if (typeof this.locationId !== 'undefined') {\n toReturn['locationId'] = this.locationId;\n }\n if (typeof this.questionId !== 'undefined') {\n toReturn['questionId'] = this.questionId;\n }\n if (typeof this.includeAnswers !== 'undefined') {\n toReturn['includeAnswers'] = this.includeAnswers;\n }\n if (typeof this.onlyLatestVersion !== 'undefined') {\n toReturn['onlyLatestVersion'] = this.onlyLatestVersion;\n }\n return toReturn;\n }\n}\nclass GetQuestionResponse {\n static fromProto(proto) {\n let m = new GetQuestionResponse();\n m = Object.assign(m, proto);\n if (proto.question) {\n m.question = Question.fromProto(proto.question);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.question !== 'undefined' && this.question !== null) {\n toReturn['question'] = 'toApiJson' in this.question ? this.question.toApiJson() : this.question;\n }\n return toReturn;\n }\n}\nclass GetTimeRangeRequest {\n static fromProto(proto) {\n let m = new GetTimeRangeRequest();\n m = Object.assign(m, proto);\n if (proto.startTime) {\n m.startTime = new Date(proto.startTime);\n }\n if (proto.endTime) {\n m.endTime = new Date(proto.endTime);\n }\n if (proto.metricTypes) {\n m.metricTypes = proto.metricTypes.map(v => enumStringToValue(MetricType, v));\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.groupPathNodes !== 'undefined') {\n toReturn['groupPathNodes'] = this.groupPathNodes;\n }\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n if (typeof this.startTime !== 'undefined' && this.startTime !== null) {\n toReturn['startTime'] = 'toApiJson' in this.startTime ? this.startTime.toApiJson() : this.startTime;\n }\n if (typeof this.endTime !== 'undefined' && this.endTime !== null) {\n toReturn['endTime'] = 'toApiJson' in this.endTime ? this.endTime.toApiJson() : this.endTime;\n }\n if (typeof this.metricTypes !== 'undefined') {\n toReturn['metricTypes'] = this.metricTypes;\n }\n return toReturn;\n }\n}\nclass Insight {\n static fromProto(proto) {\n let m = new Insight();\n m = Object.assign(m, proto);\n if (proto.metricType) {\n m.metricType = enumStringToValue(MetricType, proto.metricType);\n }\n if (proto.totalValue) {\n m.totalValue = Metric.fromProto(proto.totalValue);\n }\n if (proto.deltaValue) {\n m.deltaValue = Metric.fromProto(proto.deltaValue);\n }\n if (proto.metrics) {\n m.metrics = proto.metrics.map(Metric.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.metricType !== 'undefined') {\n toReturn['metricType'] = this.metricType;\n }\n if (typeof this.totalValue !== 'undefined' && this.totalValue !== null) {\n toReturn['totalValue'] = 'toApiJson' in this.totalValue ? this.totalValue.toApiJson() : this.totalValue;\n }\n if (typeof this.deltaValue !== 'undefined' && this.deltaValue !== null) {\n toReturn['deltaValue'] = 'toApiJson' in this.deltaValue ? this.deltaValue.toApiJson() : this.deltaValue;\n }\n if (typeof this.metrics !== 'undefined' && this.metrics !== null) {\n toReturn['metrics'] = 'toApiJson' in this.metrics ? this.metrics.toApiJson() : this.metrics;\n }\n return toReturn;\n }\n}\nclass GetMultiTimeRangeResponseInsightsContainer {\n static fromProto(proto) {\n let m = new GetMultiTimeRangeResponseInsightsContainer();\n m = Object.assign(m, proto);\n if (proto.insights) {\n m.insights = InsightsResponse.fromProto(proto.insights);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.insights !== 'undefined' && this.insights !== null) {\n toReturn['insights'] = 'toApiJson' in this.insights ? this.insights.toApiJson() : this.insights;\n }\n return toReturn;\n }\n}\nclass InsightsResponse {\n static fromProto(proto) {\n let m = new InsightsResponse();\n m = Object.assign(m, proto);\n if (proto.insights) {\n m.insights = proto.insights.map(Insight.fromProto);\n }\n if (proto.locationCount) {\n m.locationCount = parseInt(proto.locationCount, 10);\n }\n if (proto.connectedLocationCount) {\n m.connectedLocationCount = parseInt(proto.connectedLocationCount, 10);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.insights !== 'undefined' && this.insights !== null) {\n toReturn['insights'] = 'toApiJson' in this.insights ? this.insights.toApiJson() : this.insights;\n }\n if (typeof this.locationCount !== 'undefined') {\n toReturn['locationCount'] = this.locationCount;\n }\n if (typeof this.connectedLocationCount !== 'undefined') {\n toReturn['connectedLocationCount'] = this.connectedLocationCount;\n }\n return toReturn;\n }\n}\nclass ListQuestionsRequest {\n static fromProto(proto) {\n let m = new ListQuestionsRequest();\n m = Object.assign(m, proto);\n if (proto.limit) {\n m.limit = parseInt(proto.limit, 10);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n if (typeof this.locationId !== 'undefined') {\n toReturn['locationId'] = this.locationId;\n }\n if (typeof this.includeAnswers !== 'undefined') {\n toReturn['includeAnswers'] = this.includeAnswers;\n }\n if (typeof this.onlyLatestVersion !== 'undefined') {\n toReturn['onlyLatestVersion'] = this.onlyLatestVersion;\n }\n if (typeof this.limit !== 'undefined') {\n toReturn['limit'] = this.limit;\n }\n if (typeof this.cursor !== 'undefined') {\n toReturn['cursor'] = this.cursor;\n }\n return toReturn;\n }\n}\nclass ListQuestionsResponse {\n static fromProto(proto) {\n let m = new ListQuestionsResponse();\n m = Object.assign(m, proto);\n if (proto.questions) {\n m.questions = proto.questions.map(Question.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.questions !== 'undefined' && this.questions !== null) {\n toReturn['questions'] = 'toApiJson' in this.questions ? this.questions.toApiJson() : this.questions;\n }\n if (typeof this.more !== 'undefined') {\n toReturn['more'] = this.more;\n }\n if (typeof this.cursor !== 'undefined') {\n toReturn['cursor'] = this.cursor;\n }\n return toReturn;\n }\n}\nclass Metric {\n static fromProto(proto) {\n let m = new Metric();\n m = Object.assign(m, proto);\n if (proto.value) {\n m.value = parseInt(proto.value, 10);\n }\n if (proto.timeDimension) {\n m.timeDimension = TimeDimension.fromProto(proto.timeDimension);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.value !== 'undefined') {\n toReturn['value'] = this.value;\n }\n if (typeof this.timeDimension !== 'undefined' && this.timeDimension !== null) {\n toReturn['timeDimension'] = 'toApiJson' in this.timeDimension ? this.timeDimension.toApiJson() : this.timeDimension;\n }\n return toReturn;\n }\n}\nclass PopulateGoogleBusinessProfilePerformanceMetricsRequest {\n static fromProto(proto) {\n let m = new PopulateGoogleBusinessProfilePerformanceMetricsRequest();\n m = Object.assign(m, proto);\n if (proto.startDate) {\n m.startDate = GoogleDate.fromProto(proto.startDate);\n }\n if (proto.endDate) {\n m.endDate = GoogleDate.fromProto(proto.endDate);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n if (typeof this.startDate !== 'undefined' && this.startDate !== null) {\n toReturn['startDate'] = 'toApiJson' in this.startDate ? this.startDate.toApiJson() : this.startDate;\n }\n if (typeof this.endDate !== 'undefined' && this.endDate !== null) {\n toReturn['endDate'] = 'toApiJson' in this.endDate ? this.endDate.toApiJson() : this.endDate;\n }\n return toReturn;\n }\n}\nclass PopulateGoogleBusinessProfileSearchKeywordsRequest {\n static fromProto(proto) {\n let m = new PopulateGoogleBusinessProfileSearchKeywordsRequest();\n m = Object.assign(m, proto);\n if (proto.startDate) {\n m.startDate = GoogleDate.fromProto(proto.startDate);\n }\n if (proto.endDate) {\n m.endDate = GoogleDate.fromProto(proto.endDate);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n if (typeof this.googleLocationId !== 'undefined') {\n toReturn['googleLocationId'] = this.googleLocationId;\n }\n if (typeof this.startDate !== 'undefined' && this.startDate !== null) {\n toReturn['startDate'] = 'toApiJson' in this.startDate ? this.startDate.toApiJson() : this.startDate;\n }\n if (typeof this.endDate !== 'undefined' && this.endDate !== null) {\n toReturn['endDate'] = 'toApiJson' in this.endDate ? this.endDate.toApiJson() : this.endDate;\n }\n return toReturn;\n }\n}\nclass QuestionIdentifier {\n static fromProto(proto) {\n let m = new QuestionIdentifier();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n if (typeof this.locationId !== 'undefined') {\n toReturn['locationId'] = this.locationId;\n }\n if (typeof this.questionId !== 'undefined') {\n toReturn['questionId'] = this.questionId;\n }\n if (typeof this.version !== 'undefined') {\n toReturn['version'] = this.version;\n }\n return toReturn;\n }\n}\nclass ReplaceAccountLocationRequest {\n static fromProto(proto) {\n let m = new ReplaceAccountLocationRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n if (typeof this.googleAccountId !== 'undefined') {\n toReturn['googleAccountId'] = this.googleAccountId;\n }\n if (typeof this.googleLocationId !== 'undefined') {\n toReturn['googleLocationId'] = this.googleLocationId;\n }\n return toReturn;\n }\n}\nclass ReplacePostInsightsHistoryRequest {\n static fromProto(proto) {\n let m = new ReplacePostInsightsHistoryRequest();\n m = Object.assign(m, proto);\n if (proto.postInsightsHistory) {\n m.postInsightsHistory = PostInsightsHistory.fromProto(proto.postInsightsHistory);\n }\n if (proto.fieldMask) {\n m.fieldMask = FieldMask.fromProto(proto.fieldMask);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.postInsightsHistory !== 'undefined' && this.postInsightsHistory !== null) {\n toReturn['postInsightsHistory'] = 'toApiJson' in this.postInsightsHistory ? this.postInsightsHistory.toApiJson() : this.postInsightsHistory;\n }\n if (typeof this.fieldMask !== 'undefined' && this.fieldMask !== null) {\n toReturn['fieldMask'] = 'toApiJson' in this.fieldMask ? this.fieldMask.toApiJson() : this.fieldMask;\n }\n return toReturn;\n }\n}\nclass ResourceId {\n static fromProto(proto) {\n let m = new ResourceId();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.groupPathNodes !== 'undefined') {\n toReturn['groupPathNodes'] = this.groupPathNodes;\n }\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n return toReturn;\n }\n}\nclass SyncDataRequest {\n static fromProto(proto) {\n let m = new SyncDataRequest();\n m = Object.assign(m, proto);\n if (proto.requestedAt) {\n m.requestedAt = new Date(proto.requestedAt);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.gmbInsightsJson !== 'undefined') {\n toReturn['gmbInsightsJson'] = this.gmbInsightsJson;\n }\n if (typeof this.requestedAt !== 'undefined' && this.requestedAt !== null) {\n toReturn['requestedAt'] = 'toApiJson' in this.requestedAt ? this.requestedAt.toApiJson() : this.requestedAt;\n }\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n return toReturn;\n }\n}\nclass TimeDimension {\n static fromProto(proto) {\n let m = new TimeDimension();\n m = Object.assign(m, proto);\n if (proto.timeRange) {\n m.timeRange = TimePeriod.fromProto(proto.timeRange);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.timeRange !== 'undefined' && this.timeRange !== null) {\n toReturn['timeRange'] = 'toApiJson' in this.timeRange ? this.timeRange.toApiJson() : this.timeRange;\n }\n return toReturn;\n }\n}\nclass TimePeriod {\n static fromProto(proto) {\n let m = new TimePeriod();\n m = Object.assign(m, proto);\n if (proto.startTime) {\n m.startTime = new Date(proto.startTime);\n }\n if (proto.period) {\n m.period = enumStringToValue(Period, proto.period);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.startTime !== 'undefined' && this.startTime !== null) {\n toReturn['startTime'] = 'toApiJson' in this.startTime ? this.startTime.toApiJson() : this.startTime;\n }\n if (typeof this.period !== 'undefined') {\n toReturn['period'] = this.period;\n }\n return toReturn;\n }\n}\n\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// Objects Index.\n// *********************************\n\nconst environment = (window ? window['environment'] : 'prod') ?? 'prod';\nconst hostMap = {\n 'local': 'google-my-business-api.vendasta-local.com',\n 'test': '',\n 'demo': 'google-my-business-api-demo.apigateway.co',\n 'prod': 'google-my-business-api-prod.apigateway.co',\n 'production': 'google-my-business-api-prod.apigateway.co'\n};\nlet HostService = /*#__PURE__*/(() => {\n class HostService {\n get host() {\n return hostMap[environment.toLowerCase()];\n }\n get hostWithScheme() {\n return 'https://' + this.host;\n }\n }\n HostService.ɵfac = function HostService_Factory(t) {\n return new (t || HostService)();\n };\n HostService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: HostService,\n factory: HostService.ɵfac,\n providedIn: 'root'\n });\n return HostService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// API Service.\n// *********************************\nlet AccountApiService = /*#__PURE__*/(() => {\n class AccountApiService {\n constructor(http, hostService) {\n this.http = http;\n this.hostService = hostService;\n this._host = this.hostService.hostWithScheme;\n }\n apiOptions() {\n return {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json'\n }),\n withCredentials: true\n };\n }\n getMultiAccountLocation(r) {\n const request = r.toApiJson ? r : new GetMultiAccountLocationRequest(r);\n return this.http.post(this._host + \"/gmb.v1.Account/GetMultiAccountLocation\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetMultiAccountLocationResponse.fromProto(resp)));\n }\n replaceAccountLocation(r) {\n const request = r.toApiJson ? r : new ReplaceAccountLocationRequest(r);\n return this.http.post(this._host + \"/gmb.v1.Account/ReplaceAccountLocation\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n deleteAccountLocation(r) {\n const request = r.toApiJson ? r : new DeleteAccountLocationRequest(r);\n return this.http.post(this._host + \"/gmb.v1.Account/DeleteAccountLocation\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n deletePost(r) {\n const request = r.toApiJson ? r : new DeletePostRequest(r);\n return this.http.post(this._host + \"/gmb.v1.Account/DeletePost\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n }\n AccountApiService.ɵfac = function AccountApiService_Factory(t) {\n return new (t || AccountApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(HostService));\n };\n AccountApiService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: AccountApiService,\n factory: AccountApiService.ɵfac,\n providedIn: 'root'\n });\n return AccountApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// API Service.\n// *********************************\nlet BusinessCommunicationsApiService = /*#__PURE__*/(() => {\n class BusinessCommunicationsApiService {\n constructor(http, hostService) {\n this.http = http;\n this.hostService = hostService;\n this._host = this.hostService.hostWithScheme;\n }\n apiOptions() {\n return {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json'\n }),\n withCredentials: true\n };\n }\n connectBusinessCommunications(r) {\n const request = r.toApiJson ? r : new ConnectBusinessCommunicationsRequest(r);\n return this.http.post(this._host + \"/gmb.v1.BusinessCommunications/ConnectBusinessCommunications\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n unlaunchBusinessCommunicationsAgent(r) {\n const request = r.toApiJson ? r : new UnlaunchBusinessCommunicationsAgentRequest(r);\n return this.http.post(this._host + \"/gmb.v1.BusinessCommunications/UnlaunchBusinessCommunicationsAgent\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n getBusinessLaunchStatus(r) {\n const request = r.toApiJson ? r : new GetBusinessLaunchStatusRequest(r);\n return this.http.post(this._host + \"/gmb.v1.BusinessCommunications/GetBusinessLaunchStatus\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetBusinessLaunchStatusResponse.fromProto(resp)));\n }\n canEnableBusinessCommunications(r) {\n const request = r.toApiJson ? r : new CanEnableBusinessCommunicationsRequest(r);\n return this.http.post(this._host + \"/gmb.v1.BusinessCommunications/CanEnableBusinessCommunications\", request.toApiJson(), this.apiOptions()).pipe(map(resp => CanEnableBusinessCommunicationsResponse.fromProto(resp)));\n }\n }\n BusinessCommunicationsApiService.ɵfac = function BusinessCommunicationsApiService_Factory(t) {\n return new (t || BusinessCommunicationsApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(HostService));\n };\n BusinessCommunicationsApiService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: BusinessCommunicationsApiService,\n factory: BusinessCommunicationsApiService.ɵfac,\n providedIn: 'root'\n });\n return BusinessCommunicationsApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// API Service.\n// *********************************\nlet BusinessMessagesApiService = /*#__PURE__*/(() => {\n class BusinessMessagesApiService {\n constructor(http, hostService) {\n this.http = http;\n this.hostService = hostService;\n this._host = this.hostService.hostWithScheme;\n }\n apiOptions() {\n return {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json'\n }),\n withCredentials: true\n };\n }\n sendMessage(r) {\n const request = r.toApiJson ? r : new SendMessageRequest(r);\n return this.http.post(this._host + \"/gmb.v1.BusinessMessages/SendMessage\", request.toApiJson(), this.apiOptions()).pipe(map(resp => SendMessageResponse.fromProto(resp)));\n }\n createEvent(r) {\n const request = r.toApiJson ? r : new CreateEventRequest(r);\n return this.http.post(this._host + \"/gmb.v1.BusinessMessages/CreateEvent\", request.toApiJson(), this.apiOptions()).pipe(map(resp => CreateEventResponse.fromProto(resp)));\n }\n }\n BusinessMessagesApiService.ɵfac = function BusinessMessagesApiService_Factory(t) {\n return new (t || BusinessMessagesApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(HostService));\n };\n BusinessMessagesApiService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: BusinessMessagesApiService,\n factory: BusinessMessagesApiService.ɵfac,\n providedIn: 'root'\n });\n return BusinessMessagesApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// API Service.\n// *********************************\nlet GoogleMyBusinessClientLegacyAPIApiService = /*#__PURE__*/(() => {\n class GoogleMyBusinessClientLegacyAPIApiService {\n constructor(http, hostService) {\n this.http = http;\n this.hostService = hostService;\n this._host = this.hostService.hostWithScheme;\n }\n apiOptions() {\n return {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json'\n }),\n withCredentials: true\n };\n }\n calculateInsightsByTimePeriod(r) {\n const request = r.toApiJson ? r : new CalculateInsightsByTimePeriodRequest(r);\n return this.http.post(this._host + \"/gmb.v1.GoogleMyBusinessClientLegacyAPI/CalculateInsightsByTimePeriod\", request.toApiJson(), this.apiOptions()).pipe(map(resp => CalculateInsightsByTimePeriodResponse.fromProto(resp)));\n }\n canRespondToReview(r) {\n const request = r.toApiJson ? r : new CanRespondToReviewRequest(r);\n return this.http.post(this._host + \"/gmb.v1.GoogleMyBusinessClientLegacyAPI/CanRespondToReview\", request.toApiJson(), this.apiOptions()).pipe(map(resp => CanRespondToReviewResponse.fromProto(resp)));\n }\n connect(r) {\n const request = r.toApiJson ? r : new ConnectRequest(r);\n return this.http.post(this._host + \"/gmb.v1.GoogleMyBusinessClientLegacyAPI/Connect\", request.toApiJson(), this.apiOptions()).pipe(map(resp => ConnectResponse.fromProto(resp)));\n }\n disconnect(r) {\n const request = r.toApiJson ? r : new DisconnectRequest(r);\n return this.http.post(this._host + \"/gmb.v1.GoogleMyBusinessClientLegacyAPI/Disconnect\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n enableDisableSync(r) {\n const request = r.toApiJson ? r : new EnableDisableSyncRequest(r);\n return this.http.post(this._host + \"/gmb.v1.GoogleMyBusinessClientLegacyAPI/EnableDisableSync\", request.toApiJson(), this.apiOptions()).pipe(map(resp => EnableDisableSyncResponse.fromProto(resp)));\n }\n getAsSocialService(r) {\n const request = r.toApiJson ? r : new GetAsSocialServiceRequest(r);\n return this.http.post(this._host + \"/gmb.v1.GoogleMyBusinessClientLegacyAPI/GetAsSocialService\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetAsSocialServiceResponse.fromProto(resp)));\n }\n getConnections(r) {\n const request = r.toApiJson ? r : new GetConnectionsRequest(r);\n return this.http.post(this._host + \"/gmb.v1.GoogleMyBusinessClientLegacyAPI/GetConnections\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetConnectionsResponse.fromProto(resp)));\n }\n getConnection(r) {\n const request = r.toApiJson ? r : new GetConnectionRequest(r);\n return this.http.post(this._host + \"/gmb.v1.GoogleMyBusinessClientLegacyAPI/GetConnection\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetConnectionsResponse.fromProto(resp)));\n }\n getGoogleUser(r) {\n const request = r.toApiJson ? r : new GetGoogleUserRequest(r);\n return this.http.post(this._host + \"/gmb.v1.GoogleMyBusinessClientLegacyAPI/GetGoogleUser\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetGoogleUserResponse.fromProto(resp)));\n }\n }\n GoogleMyBusinessClientLegacyAPIApiService.ɵfac = function GoogleMyBusinessClientLegacyAPIApiService_Factory(t) {\n return new (t || GoogleMyBusinessClientLegacyAPIApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(HostService));\n };\n GoogleMyBusinessClientLegacyAPIApiService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: GoogleMyBusinessClientLegacyAPIApiService,\n factory: GoogleMyBusinessClientLegacyAPIApiService.ɵfac,\n providedIn: 'root'\n });\n return GoogleMyBusinessClientLegacyAPIApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// API Service.\n// *********************************\nlet InsightsApiService = /*#__PURE__*/(() => {\n class InsightsApiService {\n constructor(http, hostService) {\n this.http = http;\n this.hostService = hostService;\n this._host = this.hostService.hostWithScheme;\n }\n apiOptions() {\n return {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json'\n }),\n withCredentials: true\n };\n }\n getTimeRange(r) {\n const request = r.toApiJson ? r : new GetTimeRangeRequest(r);\n return this.http.post(this._host + \"/gmb.v1.Insights/GetTimeRange\", request.toApiJson(), this.apiOptions()).pipe(map(resp => InsightsResponse.fromProto(resp)));\n }\n getMultiTimeRange(r) {\n const request = r.toApiJson ? r : new GetMultiTimeRangeRequest(r);\n return this.http.post(this._host + \"/gmb.v1.Insights/GetMultiTimeRange\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetMultiTimeRangeResponse.fromProto(resp)));\n }\n replacePostInsightsHistory(r) {\n const request = r.toApiJson ? r : new ReplacePostInsightsHistoryRequest(r);\n return this.http.post(this._host + \"/gmb.v1.Insights/ReplacePostInsightsHistory\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n }\n InsightsApiService.ɵfac = function InsightsApiService_Factory(t) {\n return new (t || InsightsApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(HostService));\n };\n InsightsApiService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: InsightsApiService,\n factory: InsightsApiService.ɵfac,\n providedIn: 'root'\n });\n return InsightsApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// API Service.\n// *********************************\nlet InsightsSyncApiService = /*#__PURE__*/(() => {\n class InsightsSyncApiService {\n constructor(http, hostService) {\n this.http = http;\n this.hostService = hostService;\n this._host = this.hostService.hostWithScheme;\n }\n apiOptions() {\n return {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json'\n }),\n withCredentials: true\n };\n }\n syncData(r) {\n const request = r.toApiJson ? r : new SyncDataRequest(r);\n return this.http.post(this._host + \"/gmb.v1.InsightsSync/SyncData\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n populateGoogleBusinessProfilePerformanceMetrics(r) {\n const request = r.toApiJson ? r : new PopulateGoogleBusinessProfilePerformanceMetricsRequest(r);\n return this.http.post(this._host + \"/gmb.v1.InsightsSync/PopulateGoogleBusinessProfilePerformanceMetrics\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n populateGoogleBusinessProfileSearchKeywords(r) {\n const request = r.toApiJson ? r : new PopulateGoogleBusinessProfileSearchKeywordsRequest(r);\n return this.http.post(this._host + \"/gmb.v1.InsightsSync/PopulateGoogleBusinessProfileSearchKeywords\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n }\n InsightsSyncApiService.ɵfac = function InsightsSyncApiService_Factory(t) {\n return new (t || InsightsSyncApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(HostService));\n };\n InsightsSyncApiService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: InsightsSyncApiService,\n factory: InsightsSyncApiService.ɵfac,\n providedIn: 'root'\n });\n return InsightsSyncApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// API Service.\n// *********************************\nlet QuestionAnswerApiService = /*#__PURE__*/(() => {\n class QuestionAnswerApiService {\n constructor(http, hostService) {\n this.http = http;\n this.hostService = hostService;\n this._host = this.hostService.hostWithScheme;\n }\n apiOptions() {\n return {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json'\n }),\n withCredentials: true\n };\n }\n listQuestions(r) {\n const request = r.toApiJson ? r : new ListQuestionsRequest(r);\n return this.http.post(this._host + \"/gmb.v1.QuestionAnswer/ListQuestions\", request.toApiJson(), this.apiOptions()).pipe(map(resp => ListQuestionsResponse.fromProto(resp)));\n }\n getQuestion(r) {\n const request = r.toApiJson ? r : new GetQuestionRequest(r);\n return this.http.post(this._host + \"/gmb.v1.QuestionAnswer/GetQuestion\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetQuestionResponse.fromProto(resp)));\n }\n getMultiQuestions(r) {\n const request = r.toApiJson ? r : new GetMultiQuestionsRequest(r);\n return this.http.post(this._host + \"/gmb.v1.QuestionAnswer/GetMultiQuestions\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetMultiQuestionsResponse.fromProto(resp)));\n }\n createAnswer(r) {\n const request = r.toApiJson ? r : new CreateAnswerRequest(r);\n return this.http.post(this._host + \"/gmb.v1.QuestionAnswer/CreateAnswer\", request.toApiJson(), this.apiOptions()).pipe(map(resp => CreateAnswerResponse.fromProto(resp)));\n }\n createQuestion(r) {\n const request = r.toApiJson ? r : new CreateQuestionRequest(r);\n return this.http.post(this._host + \"/gmb.v1.QuestionAnswer/CreateQuestion\", request.toApiJson(), this.apiOptions()).pipe(map(resp => CreateQuestionResponse.fromProto(resp)));\n }\n getQuestionAnswerStats(r) {\n const request = r.toApiJson ? r : new GetQuestionAnswerStatsRequest(r);\n return this.http.post(this._host + \"/gmb.v1.QuestionAnswer/GetQuestionAnswerStats\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetQuestionAnswerStatsResponse.fromProto(resp)));\n }\n }\n QuestionAnswerApiService.ɵfac = function QuestionAnswerApiService_Factory(t) {\n return new (t || QuestionAnswerApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(HostService));\n };\n QuestionAnswerApiService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: QuestionAnswerApiService,\n factory: QuestionAnswerApiService.ɵfac,\n providedIn: 'root'\n });\n return QuestionAnswerApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// Index.\n// *********************************\nlet QuestionAndAnswerService = /*#__PURE__*/(() => {\n class QuestionAndAnswerService {\n constructor(_api) {\n this._api = _api;\n }\n listQuestions(accountGroupId, cursor, includeAnswers, limit, locationId, onlyLatestVersion) {\n const request = {\n accountGroupId: accountGroupId,\n cursor: cursor,\n includeAnswers: includeAnswers,\n limit: limit,\n locationId: locationId,\n onlyLatestVersion: onlyLatestVersion\n };\n return this._api.listQuestions(request);\n }\n createAnswer(accountGroupId, socialProfileId, locationPathName, questionId, text) {\n const request = {\n accountGroupId: accountGroupId,\n socialProfileId: socialProfileId,\n locationPathName: locationPathName,\n questionId: questionId,\n text: text\n };\n return this._api.createAnswer(request);\n }\n createQuestion(partnerId, accountGroupId, socialProfileId, locationPathName, text) {\n const request = {\n accountGroupId: accountGroupId,\n socialProfileId: socialProfileId,\n locationPathName: locationPathName,\n partnerId: partnerId,\n text: text\n };\n return this._api.createQuestion(request);\n }\n getMultiQuestions(questionIds, includeAnswers) {\n const request = {\n questionIds: questionIds,\n includeAnswers: includeAnswers\n };\n return this._api.getMultiQuestions(request);\n }\n getQuestion(accountGroupId, locationId, questionId, includeAnswers, onlyLatestVersion) {\n const request = {\n accountGroupId: accountGroupId,\n locationId: locationId,\n questionId: questionId,\n includeAnswers: includeAnswers,\n onlyLatestVersion: onlyLatestVersion\n };\n return this._api.getQuestion(request);\n }\n getQuestionAnswerStats(accountGroupId, locationId) {\n const request = {\n accountGroupId: accountGroupId,\n locationId: locationId\n };\n return this._api.getQuestionAnswerStats(request);\n }\n }\n QuestionAndAnswerService.ɵfac = function QuestionAndAnswerService_Factory(t) {\n return new (t || QuestionAndAnswerService)(i0.ɵɵinject(QuestionAnswerApiService));\n };\n QuestionAndAnswerService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: QuestionAndAnswerService,\n factory: QuestionAndAnswerService.ɵfac,\n providedIn: 'root'\n });\n return QuestionAndAnswerService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { Answer, BusinessCommunicationsApiService, GetMultiQuestionsResponse, GetQuestionResponse, Question, QuestionAndAnswerService, QuestionAnswerApiService, QuestionIdentifier };\n","import { ConversationChannel } from '@vendasta/conversation';\nimport { Observable } from 'rxjs';\nimport { ConversationDetail } from '../../index';\n\nexport interface AlertOptions {\n title: string;\n description?: string;\n action?: AlertAction;\n}\n\ninterface AlertAction {\n title: string;\n callback: () => void;\n}\n\nexport abstract class ConversationChannelService {\n abstract getChatComposerAlert(\n partnerId: string,\n accountGroupId: string,\n conversationDetail?: ConversationDetail,\n availableChannels?: ConversationChannel[],\n ): Observable;\n}\n","import { HttpErrorResponse, HttpStatusCode } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { BusinessCommunicationsApiService } from '@vendasta/google-my-business';\nimport { addDays, isBefore } from 'date-fns';\nimport { combineLatest, Observable, of, catchError, map, switchMap } from 'rxjs';\nimport { ConversationDetail } from '../interface/conversation.interface';\nimport {\n ACCOUNT_GROUP_ID_TOKEN,\n CONVERSATION_GOOGLE_BUSINESS_MESSAGES_AVAILABLE_TOKEN,\n PARTNER_ID_TOKEN,\n} from '../tokens';\nimport { AlertOptions, ConversationChannelService } from './conversation-channel.abstract';\n\nexport enum BusinessMessagesEnabledState {\n IS_ENABLED = 'IS_ENABLED',\n INVALID_TOKEN = 'INVALID_TOKEN',\n NOT_ENABLED = 'NOT_ENABLED',\n NOT_LAUNCHED = 'NOT_LAUNCHED',\n CONVERSATION_EXPIRED = 'CONVERSATION_EXPIRED',\n UNKNOWN_ERROR = 'UNKNOWN_ERROR',\n}\n\n@Injectable()\nexport class ConversationGoogleService extends ConversationChannelService {\n private readonly partnerId$: Observable = inject(PARTNER_ID_TOKEN);\n readonly accountGroupId$: Observable = inject(ACCOUNT_GROUP_ID_TOKEN);\n\n private router = inject(Router);\n private readonly googleMyBusinessService = inject(BusinessCommunicationsApiService);\n private readonly googleBusinessMessagesAvailable$ = inject(CONVERSATION_GOOGLE_BUSINESS_MESSAGES_AVAILABLE_TOKEN);\n\n getChatComposerAlert(\n partnerId: string,\n accountGroupId: string,\n conversationDetail: ConversationDetail,\n ): Observable {\n return this.canSendGoogleBusinessMessage(partnerId, accountGroupId, conversationDetail).pipe(\n map((canSend) => {\n if (canSend === BusinessMessagesEnabledState.IS_ENABLED) {\n return null;\n }\n\n return this.getGoogleBusinessMessagesError(canSend, accountGroupId);\n }),\n );\n }\n\n private getGoogleBusinessMessagesError(\n enabledState: BusinessMessagesEnabledState,\n accountGroup: string,\n ): AlertOptions {\n let alert: AlertOptions;\n\n switch (enabledState) {\n case BusinessMessagesEnabledState.NOT_ENABLED:\n alert = {\n title: 'INBOX.SETTINGS.GOOGLE_BUSINESS_MESSAGES.STATUS.NOT_ENABLED.TITLE',\n description: 'INBOX.SETTINGS.GOOGLE_BUSINESS_MESSAGES.STATUS.NOT_ENABLED.DESCRIPTION',\n };\n break;\n case BusinessMessagesEnabledState.INVALID_TOKEN:\n alert = {\n title: 'INBOX.SETTINGS.GOOGLE_BUSINESS_MESSAGES.GOOGLE_BUSINESS_PROFILE',\n description: 'INBOX.SETTINGS.GOOGLE_BUSINESS_MESSAGES.PROFILE_DISCONNECTED',\n action: {\n title: 'INBOX.SETTINGS.GOOGLE_BUSINESS_MESSAGES.ACTIONS.GO_TO_SETTINGS',\n callback: () => this.router.navigate([`/account/location/${accountGroup}/settings/inbox`]),\n },\n };\n break;\n case BusinessMessagesEnabledState.CONVERSATION_EXPIRED:\n alert = {\n title: 'INBOX.SETTINGS.GOOGLE_BUSINESS_MESSAGES.STATUS.EXPIRED_CONVERSATION.TITLE',\n description: 'INBOX.SETTINGS.GOOGLE_BUSINESS_MESSAGES.STATUS.EXPIRED_CONVERSATION.DESCRIPTION',\n };\n break;\n case BusinessMessagesEnabledState.NOT_LAUNCHED:\n alert = {\n title: 'INBOX.SETTINGS.GOOGLE_BUSINESS_MESSAGES.STATUS.NOT_LAUNCHED.TITLE',\n description: 'INBOX.SETTINGS.GOOGLE_BUSINESS_MESSAGES.STATUS.NOT_LAUNCHED.DESCRIPTION',\n action: {\n title: 'INBOX.SETTINGS.GOOGLE_BUSINESS_MESSAGES.ACTIONS.GO_TO_SETTINGS',\n callback: () => this.router.navigate([`/account/location/${accountGroup}/settings/inbox`]),\n },\n };\n break;\n case BusinessMessagesEnabledState.UNKNOWN_ERROR:\n default:\n alert = {\n title: 'INBOX.SETTINGS.GOOGLE_BUSINESS_MESSAGES.STATUS.UNKNOWN_ERROR.TITLE',\n description: 'INBOX.SETTINGS.GOOGLE_BUSINESS_MESSAGES.STATUS.UNKNOWN_ERROR.DESCRIPTION',\n };\n }\n\n return alert;\n }\n\n private canSendGoogleBusinessMessage(\n partnerId: string,\n accountGroupId: string,\n conversationDetail?: ConversationDetail,\n ): Observable {\n const expirationDate = addDays(conversationDetail.latestMessage?.updated, 30);\n const currentDate = new Date();\n\n const launchStatus$: Observable = this.googleMyBusinessService\n .getBusinessLaunchStatus({\n partnerId: partnerId,\n accountGroupId: accountGroupId,\n })\n .pipe(\n map((res) =>\n res.isLaunched ? BusinessMessagesEnabledState.IS_ENABLED : BusinessMessagesEnabledState.NOT_LAUNCHED,\n ),\n catchError((error) => {\n if (error instanceof HttpErrorResponse && error.status === HttpStatusCode.PreconditionFailed) {\n return of(BusinessMessagesEnabledState.INVALID_TOKEN);\n }\n return of(BusinessMessagesEnabledState.UNKNOWN_ERROR);\n }),\n );\n\n return combineLatest([this.googleBusinessMessagesAvailable$, launchStatus$]).pipe(\n map(([googleBusinessMessagesAvailable, launched]) => {\n if (isBefore(expirationDate, currentDate)) {\n return BusinessMessagesEnabledState.CONVERSATION_EXPIRED;\n }\n if (!googleBusinessMessagesAvailable) return BusinessMessagesEnabledState.NOT_ENABLED;\n return launched;\n }),\n );\n }\n\n readonly isGoogleBusinessMessagesEnabled$: Observable = combineLatest([\n this.partnerId$,\n this.accountGroupId$,\n ]).pipe(\n switchMap(([partnerId, accountGroupId]) =>\n this.googleMyBusinessService.getBusinessLaunchStatus({ partnerId, accountGroupId }),\n ),\n map((res) => res.isLaunched),\n catchError(() => of(false)),\n );\n}\n","import { CountryCode, NumberFormat, formatNumber } from 'libphonenumber-js';\nimport { AlertOptions } from './conversation-channel.abstract';\n\nexport interface Translator {\n // eslint-disable-next-line\n instant(key: string | Array, interpolateParams?: Object): string | any;\n}\n\nexport function smsNotAvailableError(\n phoneNumber: string,\n email: string,\n country: string,\n translator: Translator,\n): AlertOptions {\n if (!phoneNumber) {\n return {\n title: translator.instant('INBOX.CHAT.RESPOND_TO_LEAD_AT_EMAIL', {\n email: email,\n }),\n };\n }\n const countryCode = country.toUpperCase() as CountryCode;\n let phone = '';\n try {\n phone = formatNumber(phoneNumber, countryCode, 'NATIONAL' as NumberFormat);\n } catch (error) {\n // fallback to US if country code is not valid\n phone = formatNumber(phoneNumber, 'US' as CountryCode, 'NATIONAL' as NumberFormat);\n }\n if (email) {\n return {\n title: translator.instant('INBOX.CHAT.RESPOND_TO_LEAD_AT_PHONE_NUMBER_OR_EMAIL', {\n phone: phone,\n email: email,\n }),\n };\n }\n return {\n title: translator.instant('INBOX.CHAT.RESPOND_TO_LEAD_AT_PHONE_NUMBER', {\n phone: phone,\n }),\n };\n}\n","import { Injectable, inject } from '@angular/core';\nimport { RegistrationStage, SmsRegistrationService } from '@galaxy/sms';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ConversationApiService, ConversationChannel, ParticipantType, Widget } from '@vendasta/conversation';\nimport { Observable, catchError, combineLatest, map, of, shareReplay, switchMap } from 'rxjs';\nimport { InboxService } from '../inbox.service';\nimport { ConversationDetail } from '../interface/conversation.interface';\nimport { ACCOUNT_GROUP_ID_TOKEN, CONVERSATION_COUNTRY_TOKEN } from '../tokens';\nimport { AlertOptions, ConversationChannelService } from './conversation-channel.abstract';\nimport { smsNotAvailableError } from './alert-helpers';\n\n@Injectable()\nexport class ConversationWebchatService extends ConversationChannelService {\n private readonly translationService = inject(TranslateService);\n private readonly inboxService = inject(InboxService);\n private readonly country$ = inject(CONVERSATION_COUNTRY_TOKEN);\n private readonly smsRegistrationService = this.inboxService.isBusinessApp ? inject(SmsRegistrationService) : null;\n\n getChatComposerAlert(\n partnerId: string,\n accountGroupId: string,\n conversationDetail: ConversationDetail,\n ): Observable {\n if (conversationDetail.conversation.channel !== ConversationChannel.CONVERSATION_CHANNEL_WEB_CHAT) return of(null);\n\n const anonymousParticipant = conversationDetail?.participants?.find(\n (participant) => participant.participantType === ParticipantType.PARTICIPANT_TYPE_ANONYMOUS,\n );\n if (anonymousParticipant) return of(this.contactInfoMissingError());\n\n // should only one customer in one specific webchat conversation\n const customerParticipant = conversationDetail?.participants?.find(\n (participant) => participant.participantType === ParticipantType.PARTICIPANT_TYPE_CUSTOMER,\n );\n if (!customerParticipant || (!customerParticipant.phoneNumber && !customerParticipant.email))\n return of(this.contactInfoMissingError());\n\n return this.country$.pipe(\n switchMap((country) => {\n if (!this.smsRegistrationService || !customerParticipant.phoneNumber) {\n return of(\n smsNotAvailableError(\n customerParticipant.phoneNumber,\n customerParticipant.email,\n country,\n this.translationService,\n ),\n );\n }\n\n return combineLatest([this.inboxService.SMSNumber$, this.smsRegistrationService.registrationStage$]).pipe(\n map(([smsNumber, registrationStage]) => {\n if (!smsNumber && registrationStage != RegistrationStage.RegistrationComplete) {\n return smsNotAvailableError(\n customerParticipant.phoneNumber,\n customerParticipant.email,\n country,\n this.translationService,\n );\n }\n return null;\n }),\n );\n }),\n );\n }\n\n private contactInfoMissingError(): AlertOptions {\n return {\n title: 'INBOX.WEBCHAT.SETTINGS.WEBCHAT_DISABLED_MISSING_CONTACT_INFO',\n };\n }\n\n private readonly conversationApiService = inject(ConversationApiService);\n private accountGroupId$ = inject(ACCOUNT_GROUP_ID_TOKEN);\n\n readonly webchats$: Observable = this.accountGroupId$.pipe(\n switchMap((accountGroupId) => this.conversationApiService.listWidgets({ namespace: accountGroupId })),\n map((listWidgets) => listWidgets?.widgets),\n shareReplay({ bufferSize: 1, refCount: true }),\n catchError(async () => {\n return [];\n }),\n );\n\n readonly isAnyWebchatEnabled$ = this.webchats$.pipe(\n map((webchats) => {\n if (webchats) {\n return webchats.some((webchat) => webchat.isEnabled);\n }\n return false;\n }),\n );\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NotificationsService } from '@galaxy/atlas';\nimport { NotificationMedium, NotificationSetting } from '@vendasta/notifications-sdk';\nimport { NotificationContext } from '@vendasta/notifications-sdk/lib/_internal/objects/api';\nimport { CookieService } from 'ngx-cookie-service';\nimport { BehaviorSubject, Observable, combineLatest, switchMap } from 'rxjs';\nimport { PARTNER_ID_TOKEN, USER_ID_TOKEN } from './tokens';\n\nconst INBOX_NOTIFICATION_TYPE_ID = 'inbox-messages';\nconst TURN_ON_NOTIFICATION_COOKIE = 'inbox-turn-on-notification';\n\n@Injectable()\nexport class InboxNotificationService {\n readonly inboxNotificationStatus$ = combineLatest([this.partnerId$, this.userId$]).pipe(\n switchMap(([partnerId, userId]) => {\n return this.notificationsService.getNotificationSettingStatus$(\n partnerId,\n { user: { userId: userId } },\n INBOX_NOTIFICATION_TYPE_ID,\n );\n }),\n );\n\n private userCookiesValue$$ = new BehaviorSubject('');\n\n constructor(\n private readonly notificationsService: NotificationsService,\n private readonly cookieService: CookieService,\n @Inject(USER_ID_TOKEN) readonly userId$: Observable,\n @Inject(PARTNER_ID_TOKEN) readonly partnerId$: Observable,\n ) {\n combineLatest([this.partnerId$, this.userId$])\n .pipe(takeUntilDestroyed())\n .subscribe(([partnerId, userId]) =>\n this.userCookiesValue$$.next(`${partnerId}-${userId}-${TURN_ON_NOTIFICATION_COOKIE}`),\n );\n }\n\n private getCookie(): string {\n return this.cookieService.get(TURN_ON_NOTIFICATION_COOKIE);\n }\n\n public getCookieStatus(): boolean {\n return this.getCookie() === this.userCookiesValue$$.getValue();\n }\n\n public setCookie(): void {\n const expiry = new Date();\n // we would like to make the warning banner disappear for 7 days after close\n expiry.setDate(expiry.getDate() + 6);\n this.cookieService.set(TURN_ON_NOTIFICATION_COOKIE, this.userCookiesValue$$.getValue(), expiry);\n }\n\n public turnOnOnlyMyEventsNotification$() {\n return combineLatest([this.userId$, this.partnerId$]).pipe(\n switchMap(([userId, partnerId]) => {\n const context = {\n user: {\n userId: userId,\n },\n } as NotificationContext;\n\n const emailSetting = {\n context: context,\n notificationTypeId: INBOX_NOTIFICATION_TYPE_ID,\n notificationMedium: NotificationMedium.NOTIFICATION_MEDIUM_EMAIL,\n } as NotificationSetting;\n\n const webSetting = {\n context: context,\n notificationTypeId: INBOX_NOTIFICATION_TYPE_ID,\n notificationMedium: NotificationMedium.NOTIFICATION_MEDIUM_WEB,\n } as NotificationSetting;\n\n return this.notificationsService.saveSettingMulti$(partnerId, [emailSetting, webSetting]);\n }),\n );\n }\n}\n","import { HttpResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { ConversationApiService } from '@vendasta/conversation';\nimport { View } from '@vendasta/conversation/lib/_internal/objects/conversation-view';\nimport { ProductAnalyticsService } from '@vendasta/product-analytics';\nimport { BehaviorSubject, Observable, combineLatest, switchMap } from 'rxjs';\nimport { distinctUntilChanged, filter, map, tap } from 'rxjs/operators';\nimport { ALL_VIEW_ID, FOLLOWING_VIEW_ID } from './inbox.constants';\nimport { ParticipantService } from './participant.service';\n\nconst localStorageKey = 'inbox-selected-view-id';\n\nexport const getDefaultViewId = (): string => localStorage.getItem(localStorageKey) || ALL_VIEW_ID;\n\n/**\n * Service that interacts with Inbox Views in conversation µservice\n */\n@Injectable()\nexport class ViewService {\n private readonly selectedViewId$$ = new BehaviorSubject(getDefaultViewId());\n readonly selectedViewId$ = this.selectedViewId$$.pipe(\n distinctUntilChanged(),\n tap((selectedViewId) => {\n this.analyticsService.trackEvent('inbox', 'views-tab', 'click', 0, {\n viewId: selectedViewId,\n });\n localStorage.setItem(localStorageKey, selectedViewId);\n }),\n );\n\n constructor(\n private analyticsService: ProductAnalyticsService,\n private conversationApiService: ConversationApiService,\n private participantService: ParticipantService,\n ) {}\n\n setViewId(viewId: string): void {\n this.selectedViewId$$.next(viewId);\n }\n\n // TODO MEGA-248: move view logic from conversationService to viewService\n loadViews(): Observable {\n return this.participantService.currentParticipant$.pipe(\n filter((participant) => !!participant),\n switchMap((participant) =>\n this.conversationApiService.getConversationViews({\n participantId: participant.participantId,\n }),\n ),\n map((res) => res.views),\n );\n }\n\n addConversationToConversationView(conversationId: string): Observable> {\n return combineLatest([this.participantService.currentParticipant$, this.loadViews()]).pipe(\n switchMap(([currentUserParticipant]) => {\n const value = {\n viewId: FOLLOWING_VIEW_ID,\n conversationId: conversationId,\n participantId: currentUserParticipant.participantId,\n };\n return this.conversationApiService.addConversationToConversationView(value);\n }),\n );\n }\n\n removeConversationFromConversationView(conversationId: string): Observable> {\n return this.participantService.currentParticipant$.pipe(\n switchMap((currentUserParticipant) => {\n const value = {\n viewId: FOLLOWING_VIEW_ID,\n conversationId: conversationId,\n participantId: currentUserParticipant.participantId,\n };\n return this.conversationApiService.removeConversationFromConversationView(value);\n }),\n );\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Query, collectionData, limit, query } from '@angular/fire/firestore';\nimport {\n BehaviorSubject,\n Observable,\n Subject,\n asyncScheduler,\n combineLatest,\n distinctUntilChanged,\n map,\n observeOn,\n of,\n shareReplay,\n startWith,\n switchMap,\n} from 'rxjs';\nimport { ConversationFilters } from './conversation-filters';\nimport { ConversationService } from './conversation.service';\nimport { FirestoreService } from './firestore.service';\nimport { FOLLOWING_VIEW_ID } from './inbox.constants';\nimport { InboxService } from './inbox.service';\nimport { ConversationDetail, FirestoreConversation } from './interface/conversation.interface';\nimport { ParticipantService } from './participant.service';\nimport { GROUP_ID_TOKEN } from './tokens';\nimport { ViewService } from './view.service';\n\n@Injectable({ providedIn: 'any' })\nexport class ConversationListService {\n private readonly participantService = inject(ParticipantService);\n private readonly inboxService = inject(InboxService);\n private readonly firestoreService = inject(FirestoreService);\n private readonly conversationService = inject(ConversationService);\n private readonly groupId$ = inject(GROUP_ID_TOKEN);\n\n readonly currentParticipant$ = this.participantService.currentParticipant$;\n\n private readonly filters$$ = new BehaviorSubject(null);\n private readonly loadMoreConversations$$ = new Subject();\n private readonly filterTerm$$ = new BehaviorSubject('');\n\n private readonly conversationsScrollable$ = combineLatest([\n this.currentParticipant$,\n this.participantService.organizationId$,\n inject(ViewService).selectedViewId$,\n this.inboxService.showInboxViews$,\n this.filterTerm$$,\n this.filters$$,\n this.groupId$,\n this.inboxService.isConversationSummaryEnabled$,\n ]).pipe(\n observeOn(asyncScheduler),\n switchMap(\n ([\n currentParticipant,\n organizationId,\n viewId,\n showViews,\n filterTerm,\n filters,\n groupId,\n showConversationSummary,\n ]) => {\n let pageSize = !filterTerm ? 20 : 200; // Get 200 results for a better chance of getting search results\n let conversations: ConversationDetail[] | null = [];\n if (!currentParticipant) {\n return of({\n conversations,\n loading: false,\n empty: true,\n });\n }\n\n return this.loadMoreConversations$$.pipe(\n startWith(null),\n switchMap(() => {\n let q =\n viewId === FOLLOWING_VIEW_ID && showViews\n ? this.firestoreService.getViewsConversationsQuery(currentParticipant.participantId, viewId)\n : this.firestoreService.setupBaseConversationsQuery(organizationId, filters, groupId);\n q = query(q, limit(pageSize));\n pageSize += 40;\n return this.fetchConversations(q, showConversationSummary).pipe(\n map((newConversations) => {\n conversations = newConversations;\n return {\n conversations: this.filterConversations(conversations, filterTerm),\n loading: false,\n empty: conversations.length === 0,\n };\n }),\n startWith({ conversations, loading: true, empty: null }),\n );\n }),\n );\n },\n ),\n takeUntilDestroyed(),\n shareReplay(1),\n );\n readonly conversations$: Observable = this.conversationsScrollable$.pipe(\n map((scrollable) => scrollable.conversations),\n distinctUntilChanged(),\n );\n readonly loadingConversations$: Observable = this.conversationsScrollable$.pipe(\n map((scrollable) => scrollable.loading),\n distinctUntilChanged(),\n );\n readonly emptyConversations$: Observable = this.conversationsScrollable$.pipe(\n map((scrollable) => scrollable.empty),\n distinctUntilChanged(),\n );\n\n // We use a realtime query for this instead of a count so that when the first message for an organization is sent, the\n // conversation list appears.\n readonly organizationHasConversations$ = combineLatest([this.participantService.organizationId$, this.groupId$]).pipe(\n switchMap(([organizationId, groupId]) => {\n let q = this.firestoreService.setupBaseConversationsQuery(organizationId, null, groupId, true, true);\n q = query(q, limit(1));\n return collectionData(q);\n }),\n map((res) => res.length > 0),\n takeUntilDestroyed(),\n shareReplay(1),\n );\n\n readonly organizationHasClosedConversations$ = this.participantService.organizationId$.pipe(\n switchMap((id) => {\n const filters: ConversationFilters = { isOpen: false, isAnonymous: false };\n let q = this.firestoreService.setupBaseConversationsQuery(id, filters, null, true, true);\n q = query(q, limit(1));\n return collectionData(q);\n }),\n map((res) => res.length > 0),\n takeUntilDestroyed(),\n shareReplay(1),\n );\n\n loadMoreConversations(): void {\n this.loadMoreConversations$$.next();\n }\n\n fetchConversations(\n conversationsCollection: Query,\n getSummary = false,\n ): Observable {\n return collectionData(conversationsCollection, { idField: 'id' }).pipe(\n map((cs) => cs.map((c) => c.conversationId).filter((id): id is string => !!id)),\n switchMap((ids) => this.conversationService.getMultiConversationDetails(ids, getSummary)),\n );\n }\n\n setFilterTerm(term: string): void {\n this.filterTerm$$.next(term);\n }\n\n private filterConversations(options: ConversationDetail[], term: string): ConversationDetail[] {\n term = term?.toUpperCase();\n if (!options) {\n return [];\n }\n\n if (!term) {\n return options;\n }\n\n return options.filter((conversationDetail) => {\n const participantsFiltered = conversationDetail?.participants?.filter(\n (participant) =>\n participant?.name?.toLocaleUpperCase().includes(term) ||\n participant?.phoneNumber?.toUpperCase().includes(term),\n );\n if (participantsFiltered && participantsFiltered.length > 0) {\n return conversationDetail;\n }\n });\n }\n\n updateFilters(filters: ConversationFilters | null): void {\n this.filters$$.next(filters);\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport {\n GetTermsOfServiceResponse,\n GetUserAgreementTermsOfServiceResponse,\n PartnerTermsOfApiService,\n PartnerUserAgreementTermsOfApiService,\n TermsOfService,\n UserAgreementTermsOfService,\n} from '@galaxy/partner';\nimport {\n EMPTY,\n Observable,\n ReplaySubject,\n catchError,\n combineLatest,\n defaultIfEmpty,\n map,\n of,\n shareReplay,\n switchMap,\n} from 'rxjs';\nimport { getPlatformLocationToSKey } from './conversation-utils';\nimport { ConversationService } from './conversation.service';\nimport { InboxService } from './inbox.service';\nimport { PARTNER_ID_TOKEN, USER_ID_TOKEN } from './tokens';\n\nexport interface PlatformLocationToSKey {\n partnerId: string;\n feature: string;\n}\n\n@Injectable()\nexport class InboxTermsOfService {\n readonly termsOfServiceAccepted$$: ReplaySubject = new ReplaySubject(1);\n public termsOfServiceAccepted$: Observable = this.termsOfServiceAccepted$$.asObservable();\n\n platformLocationToSKey$ = of(getPlatformLocationToSKey(this.inboxService.platformLocation));\n\n readonly userAgreementTerms$: Observable = this.platformLocationToSKey$.pipe(\n switchMap((platformLocationToSKey) =>\n this.getUserAgreement({\n feature: platformLocationToSKey.feature,\n }),\n ),\n );\n\n readonly termsOfService$: Observable = this.platformLocationToSKey$.pipe(\n switchMap((platformLocationToSKey) =>\n this.getTermsOfService({\n partnerId: platformLocationToSKey.partnerId,\n feature: platformLocationToSKey.feature,\n }).pipe(map((tos) => tos?.termsOfService)),\n ),\n );\n\n readonly getTermsOfServiceText$: Observable = combineLatest([\n this.userAgreementTerms$,\n this.termsOfService$,\n ]).pipe(\n map(([userAgreementResponse, tos]) => {\n const needToAcceptTermsOfService = tos\n ? (this.isNewTermsOfService({\n userAgreement: userAgreementResponse?.userAgreementTermsOfService,\n terms: tos,\n }) ||\n !this.userAgreementIsAccepted({\n userAgreement: userAgreementResponse?.userAgreementTermsOfService,\n })) &&\n this.hasTermsOfService({\n terms: tos,\n })\n : false;\n if (needToAcceptTermsOfService) {\n this.termsOfServiceAccepted$$.next(false);\n return tos?.termsOfService;\n } else {\n this.termsOfServiceAccepted$$.next(true);\n return '';\n }\n }),\n shareReplay(1),\n );\n\n constructor(\n private partnerTermsOfApiService: PartnerTermsOfApiService,\n private partnerUserAgreementTermsOfApiService: PartnerUserAgreementTermsOfApiService,\n private conversationService: ConversationService,\n private snackBar: MatSnackBar,\n @Inject(PARTNER_ID_TOKEN) private partnerId$: Observable,\n @Inject(USER_ID_TOKEN) private userId$: Observable,\n private inboxService: InboxService,\n ) {}\n\n getTermsOfService(termsOfService: {\n partnerId?: string;\n marketId?: string;\n feature?: string;\n }): Observable {\n return this.partnerId$.pipe(\n map((partnerId) => ({\n partnerId,\n ...termsOfService,\n marketId: termsOfService?.marketId || 'NULL',\n })),\n switchMap((termsOfService) => this.partnerTermsOfApiService.getTermsOfService(termsOfService)),\n );\n }\n\n getUserAgreement(userAgreement: {\n partnerId?: string;\n userId?: string;\n feature: string;\n }): Observable {\n return combineLatest([this.partnerId$, this.userId$]).pipe(\n map(([partnerId, userId]) => ({\n partnerId,\n userId,\n ...userAgreement,\n })),\n switchMap((userAgreement) =>\n this.partnerUserAgreementTermsOfApiService.getUserAgreementTermsOfService(userAgreement).pipe(\n catchError((e) => {\n console.warn('Error getting term of service', e);\n return EMPTY;\n }),\n defaultIfEmpty({} as GetUserAgreementTermsOfServiceResponse),\n ),\n ),\n );\n }\n\n hasTermsOfService(check: { terms: TermsOfService }): boolean {\n return !!check.terms?.termsOfService;\n }\n\n userAgreementIsAccepted(check: { userAgreement: UserAgreementTermsOfService }): boolean {\n return check.userAgreement?.accepted;\n }\n\n isNewTermsOfService(check: { userAgreement: UserAgreementTermsOfService; terms: TermsOfService }): boolean {\n return check.userAgreement && check.userAgreement.acceptedAt < check.terms.createdOn;\n }\n\n acceptTermsOfService$(): Observable {\n return combineLatest([this.partnerId$, this.userId$, this.platformLocationToSKey$]).pipe(\n switchMap(([partnerId, userId, platformLocationToSKey]) =>\n this.partnerUserAgreementTermsOfApiService.setUserAgreementTermsOfService({\n userAgreementTermsOfService: {\n partnerId,\n userId,\n accepted: true,\n acceptedAt: new Date(),\n feature: platformLocationToSKey.feature,\n },\n }),\n ),\n catchError((err) => {\n console.warn('setUserAgreementTermsOfService warn', err);\n return of(false);\n }),\n map(() => {\n this.snackBar.open('Terms of Service was accepted', 'OK', {\n duration: 2000,\n });\n return true;\n }),\n );\n }\n}\n","import { ConversationChannel, MessageType, Participant } from '@vendasta/conversation';\nimport { ConversationEvent, ConversationMessage } from './interface/conversation.interface';\n\nexport type ViewMode = 'modal' | 'sidebar';\n\nexport type MessageGroupable = ConversationEvent | ConversationMessage | MessageGroup;\n\nexport class MessageGroup {\n readonly id: string;\n readonly type: MessageType;\n readonly channel: ConversationChannel;\n messages: ConversationMessage[];\n readonly sender?: Participant;\n createdAt: Date;\n\n constructor(\n messageId: string,\n sender?: Participant,\n messageType?: MessageType,\n channel?: ConversationChannel,\n createdAt?: Date,\n ) {\n this.id = `message-group-${messageId}`;\n this.messages = [];\n this.sender = sender;\n this.type = messageType;\n this.channel = channel;\n this.createdAt = createdAt;\n }\n\n addMessage(message: ConversationMessage): void {\n this.messages.push(message);\n }\n\n get lastMessage(): ConversationMessage {\n return this.messages?.[this.messages?.length - 1];\n }\n}\n","import { Directive, HostBinding } from '@angular/core';\n\n@Directive({\n selector: '[glxyComposerActionButton]',\n})\nexport class ChatComposerActionButtonDirective {\n @HostBinding('class') class = 'glxy-composer-action-button';\n}\n","import { Component, EventEmitter, Input, OnDestroy, Output, ViewChild } from '@angular/core';\nimport { ConversationChannel } from '@vendasta/conversation';\nimport { SnackbarService } from '@vendasta/galaxy/snackbar-service';\nimport {\n FileInfo,\n FileUploadError,\n FileUploadStatus,\n GALAXY_UPLOADER_SERVICE_TOKEN,\n GalaxyUploaderComponent,\n} from '@vendasta/galaxy/uploader';\nimport { ProductAnalyticsService } from '@vendasta/product-analytics';\nimport { Observable, ReplaySubject, firstValueFrom, map } from 'rxjs';\nimport { ConversationDetail, InboxService, ParticipantService } from '../../../../../../core/src/index';\nimport { MAX_FILES, MAX_RECORDING_TIME } from '../../../../../../core/src/lib/conversation.constants';\nimport { InboxUploadService, getMaxFileSizeInMB } from './inbox-upload.service';\nimport { ChatSourceId } from '@vendasta/galaxy/chat-composer/src/chat-composer.component';\n\n@Component({\n selector: 'inbox-upload-file',\n templateUrl: 'inbox-upload-file.component.html',\n styleUrls: ['./inbox-upload-file.component.scss'],\n providers: [{ provide: GALAXY_UPLOADER_SERVICE_TOKEN, useExisting: InboxUploadService }],\n})\nexport class InboxUploadFileComponent implements OnDestroy {\n maxFiles = MAX_FILES;\n private readonly conversationChannel$$: ReplaySubject = new ReplaySubject(\n 1,\n );\n conversationChannel$: Observable = this.conversationChannel$$.asObservable();\n\n isRecording = false;\n stream: MediaStream | undefined;\n recorder: MediaRecorder;\n chunks: any[] = [];\n recordingTimeout: any;\n disableVoiceRecording$: Observable = this.inboxUploadService.files$$.pipe(map((files) => files.length > 0));\n\n @ViewChild(GalaxyUploaderComponent) public readonly uploader: GalaxyUploaderComponent | undefined;\n\n @Input() set conversationDetail(value: ConversationDetail) {\n this.inboxUploadService.conversationId$$.next(value?.conversation?.conversationId);\n this.conversationChannel$$.next(value?.conversation?.channel);\n }\n\n @Input() selectedChatSourceId: ChatSourceId | undefined;\n\n @Input() enableVoiceRecording = false;\n\n @Output() fileChanged = new EventEmitter();\n\n constructor(\n private readonly snackbarService: SnackbarService,\n private readonly inboxUploadService: InboxUploadService,\n private readonly analyticsService: ProductAnalyticsService,\n private readonly participantService: ParticipantService,\n private readonly inboxService: InboxService,\n ) {}\n\n public async fileUploaded(file: FileInfo): Promise {\n this.emitAnalyticsEvent('file-upload-success', file);\n this.fileChanged.emit(file);\n }\n\n public async uploadErrored(err: FileUploadError): Promise {\n if (err.error.message === 'GALAXY.UPLOADER.ERROR.MAX_FILES_EXCEEDED') {\n this.snackbarService.openErrorSnack('INBOX.UPLOAD_FILE.MAX_FILES_EXCEEDED');\n } else if (err.error.message === 'GALAXY.UPLOADER.ERROR.MAX_FILE_SIZE_EXCEEDED') {\n const channel = await firstValueFrom(this.conversationChannel$);\n this.snackbarService.openErrorSnack('INBOX.UPLOAD_FILE.MAX_FILE_SIZE_EXCEEDED_ARG', {\n interpolateTranslateParams: {\n maxFileSize: getMaxFileSizeInMB(this.selectedChatSourceId).toString(),\n channel: channel.toString(),\n },\n });\n } else {\n this.snackbarService.openErrorSnack(err.error.message);\n }\n this.emitAnalyticsEvent('file-upload-error', err.fileInfo, err.error.message);\n }\n\n public filesChanged(files: FileInfo[]): void {\n //Check the file status to avoid emitting the file twice when file is uploaded successfully\n if (files[0] && files[0].status !== FileUploadStatus.Success) {\n this.fileChanged.emit(files[0]);\n }\n }\n\n get showUploadIcon(): boolean {\n return this.selectedChatSourceId !== 'google';\n }\n\n toggleRecording() {\n this.isRecording = !this.isRecording;\n if (this.isRecording) {\n this.startRecording();\n } else {\n this.stopRecording();\n }\n }\n\n startRecording() {\n this.emitAnalyticsEvent('voice-record-started');\n navigator.mediaDevices\n .getUserMedia({ audio: true })\n .then((stream) => {\n this.stream = stream;\n this.recorder = new MediaRecorder(stream);\n this.recorder.ondataavailable = (ev) => this.chunks.push(ev.data);\n this.recorder.start();\n\n this.recordingTimeout = window.setTimeout(() => {\n this.stopRecording();\n }, MAX_RECORDING_TIME);\n })\n .catch((err) => {\n console.error('Could not start recording: ', err);\n this.isRecording = false;\n });\n }\n\n stopRecording() {\n if (!this.recorder) {\n console.error('No recording to stop');\n return;\n }\n\n const fileName = 'voice-' + new Date().toISOString() + '.webm';\n this.recorder.onstop = () => {\n const blob = new Blob(this.chunks, { type: 'audio/webm' });\n this.chunks = [];\n\n const file = new File([blob], fileName, { type: blob.type });\n\n const fileInfo = {\n file: file,\n name: file.name,\n status: FileUploadStatus.Queued,\n } as FileInfo;\n this.inboxUploadService.setFiles([fileInfo]);\n this.inboxUploadService.uploadQueuedFiles();\n this.isRecording = false;\n };\n\n if (this.recordingTimeout) {\n window.clearTimeout(this.recordingTimeout);\n }\n\n this.recorder.stop();\n this.stream.getTracks().forEach((track) => track.stop());\n }\n\n async emitAnalyticsEvent(eventName: string, file?: FileInfo, err?: string) {\n const [sender, channel] = await Promise.all([\n firstValueFrom(this.participantService.currentParticipant$),\n firstValueFrom(this.conversationChannel$),\n ]);\n\n this.analyticsService.trackEvent('inbox', 'file-share', eventName, 0, {\n accountGroupId: sender.accountGroupId,\n partnerId: sender.partnerId,\n location: this.inboxService.platformLocation,\n channel,\n mediaType: file?.file?.type ?? '',\n error: err ?? '',\n });\n }\n\n ngOnDestroy() {\n if (this.recorder) {\n this.recorder.stop();\n }\n if (this.stream) {\n this.stream.getTracks().forEach((track) => track.stop());\n }\n this.inboxUploadService.clear();\n this.inboxUploadService.fileErrored$$.next(null);\n }\n}\n","\n \n attach_file\n \n\n\n \n \n keyboard_voice\n \n \n fiber_manual_record\n \n \n\n\n\n","import { Directive, HostBinding } from '@angular/core';\n\n@Directive({\n selector: 'glxy-composer-actions, [glxyComposerActions]',\n})\nexport class ChatComposerActionsDirective {\n @HostBinding('class') class = 'glxy-composer-actions';\n}\n","import { Directive, HostBinding } from '@angular/core';\n\n@Directive({\n selector: 'glxy-composer-beside-send, [glxyComposerBesideSend]',\n})\nexport class ChatComposerBesideSendDirective {\n @HostBinding('class') class = 'glxy-composer-beside-send';\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n EventEmitter,\n inject,\n Inject,\n Input,\n OnChanges,\n Output,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatMenu } from '@angular/material/menu';\nimport { PaymentService } from '@galaxy/billing';\nimport { FeatureFlagService } from '@galaxy/partner';\nimport { ConversationChannel, MediaInterface } from '@vendasta/conversation';\nimport {\n ChatComposerComponent,\n ChatSource,\n ChatSourceId,\n SentMessage,\n} from '@vendasta/galaxy/chat-composer/src/chat-composer.component';\nimport { PopoverPositions } from '@vendasta/galaxy/popover';\nimport { SnackbarService } from '@vendasta/galaxy/snackbar-service';\nimport { FileInfo, FileUploadStatus, GALAXY_UPLOADER_SERVICE_TOKEN } from '@vendasta/galaxy/uploader';\nimport { ProductAnalyticsService } from '@vendasta/product-analytics';\nimport {\n BehaviorSubject,\n combineLatest,\n filter,\n first,\n firstValueFrom,\n forkJoin,\n map,\n Observable,\n of,\n ReplaySubject,\n shareReplay,\n switchMap,\n take,\n withLatestFrom,\n} from 'rxjs';\nimport { ConversationService } from '../../../../../../core/src/lib/conversation.service';\nimport { isMobile } from '../../../../../../core/src/lib/inbox-utils';\nimport { InboxService } from '../../../../../../core/src/lib/inbox.service';\nimport {\n ConversationAvailableChannels,\n ConversationDetail,\n MessageInfo,\n} from '../../../../../../core/src/lib/interface/conversation.interface';\nimport {\n ACCOUNT_GROUP_ID_TOKEN,\n CONVERSATION_HOST_APP_INTERFACE_TOKEN,\n PARTNER_ID_TOKEN,\n} from '../../../../../../core/src/lib/tokens';\nimport { InboxInsertPaymentLinkComponent } from '../inbox-insert-payment-link/inbox-insert-payment-link.component';\nimport { InboxInsertReviewLinkComponent } from '../inbox-insert-review-link/inbox-insert-review-link.component';\nimport { InboxInsertTemplateComponent } from '../inbox-insert-template/inbox-insert-template.component';\nimport { InboxUploadFileComponent } from '../inbox-upload-file/inbox-upload-file.component';\nimport { InboxUploadService } from '../inbox-upload-file/inbox-upload.service';\n\nexport interface ChatSourceInfo {\n channel: ConversationChannel;\n phoneNumber?: string;\n}\n\ninterface PopoverConfig {\n title: string;\n contentFirst: string;\n contentSecond: string;\n}\n\ntype FileTypes = 'image' | 'other';\n\ninterface ComposerAction {\n id: string;\n action: string;\n icon: string;\n onClick: () => void;\n matMenu?: MatMenu | null;\n visible: Observable;\n}\n\n@Component({\n selector: 'inbox-message-text',\n templateUrl: './inbox-message-text.component.html',\n styleUrls: ['./inbox-message-text.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: GALAXY_UPLOADER_SERVICE_TOKEN, useExisting: InboxUploadService }],\n})\nexport class InboxMessageTextComponent implements OnChanges, AfterViewInit {\n private readonly hostAppInterface = inject(CONVERSATION_HOST_APP_INTERFACE_TOKEN);\n private readonly snackbarService = inject(SnackbarService);\n\n @ViewChild('chatComposer') chatComposer?: ChatComposerComponent;\n @ViewChild('inboxUploadFile') inboxUploadFile?: InboxUploadFileComponent;\n @ViewChild('inboxInsertReviewLink') inboxInsertReview?: InboxInsertReviewLinkComponent;\n @ViewChild('inboxInsertPaymentLink') inboxInsertPaymentLink?: InboxInsertPaymentLinkComponent;\n\n @Input() isImpersonating = false;\n @Input() clearMessageText?: boolean;\n @Input() prefilledMessage?: string;\n @Input() missingContactInformation = false;\n\n private readonly availableChannels$$ = new ReplaySubject(1);\n readonly availableChannels$ = this.availableChannels$$.asObservable();\n\n @Input({ required: true }) set availableChannels(value: ConversationAvailableChannels | null) {\n if (value) {\n this.availableChannels$$.next(value);\n if (value.preferredChannel !== ConversationChannel.CONVERSATION_CHANNEL_UNDEFINED) {\n this.selectedChatSourceId.set(mapConversationChannelToChatSource(value.preferredChannel).id);\n }\n }\n }\n\n private readonly conversationDetail$$ = new BehaviorSubject(null);\n readonly conversationDetail$ = this.conversationDetail$$.asObservable();\n\n @Input() set conversationDetail(value: ConversationDetail | null) {\n this.conversationDetail$$.next(value);\n }\n\n @Output() sendMessage = new EventEmitter();\n @Output() fileChange = new EventEmitter();\n\n readonly files = signal([]);\n\n fileTypes = computed(() => {\n for (const file of this.files()) {\n if (file.file?.type.includes('image')) {\n return 'image';\n }\n return 'other';\n }\n return 'other';\n });\n\n disableButtonForSendMsg$$: BehaviorSubject = new BehaviorSubject(false);\n disableButtonForUploadFile$$: BehaviorSubject = new BehaviorSubject(false);\n disableButton$: Observable = combineLatest([\n this.disableButtonForSendMsg$$.asObservable(),\n this.disableButtonForUploadFile$$.asObservable(),\n ]).pipe(map(([sendMsg, uploadFile]) => sendMsg || uploadFile));\n\n isComposerDisabled = signal(false);\n\n showChannelInfoPopover = false;\n\n selectedChatSourceId = signal(undefined);\n\n private readonly currentConversationChannel$ = this.availableChannels$.pipe(\n map((availableChannels) => {\n return availableChannels?.preferredChannel;\n }),\n );\n\n readonly isOpenAIChannel$ = this.currentConversationChannel$.pipe(\n map((channel) => channel === ConversationChannel.CONVERSATION_CHANNEL_OPENAI),\n );\n\n readonly canAccessVoiceRecorder$ = this.currentConversationChannel$.pipe(\n map((channel) => {\n return channel === ConversationChannel.CONVERSATION_CHANNEL_INTERNAL;\n }),\n );\n\n readonly chatSourcesInfo$: Observable = this.availableChannels$.pipe(\n switchMap((value) => {\n const channels = value.availableChannels ?? [];\n if (channels.length === 0) {\n return of([]);\n }\n const chatSourcesInfo = channels.map((channel) => {\n return this.getChatSourceInfo(channel).pipe(first());\n });\n return forkJoin(chatSourcesInfo);\n }),\n );\n\n readonly availableChatSources$: Observable = this.chatSourcesInfo$.pipe(\n map((chatSourceInfo): ChatSource[] => {\n return chatSourceInfo.map((info) => {\n return mapConversationChannelToChatSource(info.channel, info.phoneNumber);\n });\n }),\n map((v) => v ?? new Array()),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n readonly popoverConfig$: Observable = this.chatSourcesInfo$.pipe(\n map((results) => {\n if (results.length !== 1) {\n return {\n title: '',\n contentFirst: '',\n contentSecond: '',\n };\n }\n const result = results[0];\n switch (result.channel) {\n case ConversationChannel.CONVERSATION_CHANNEL_SMS:\n return this.setSMSChannelPopoverInfo(result.phoneNumber);\n case ConversationChannel.CONVERSATION_CHANNEL_INTERNAL:\n return this.setInPlatformChannelPopoverInfo();\n case ConversationChannel.CONVERSATION_CHANNEL_GOOGLE_BUSINESS_COMMUNICATIONS:\n return this.setGoogleBusinessCommunicationsPopoverInfo();\n default:\n return {\n title: '',\n contentFirst: '',\n contentSecond: '',\n };\n }\n }),\n );\n\n readonly showPopover$: Observable = combineLatest([this.isOpenAIChannel$, this.popoverConfig$]).pipe(\n map(([isOpenAIChannel, popoverConfig]) => {\n return !isOpenAIChannel && !!popoverConfig.title;\n }),\n );\n\n canAccessPaymentLink$: Observable;\n\n TOOLTIP_BOTTOM_RIGHT = [{ ...PopoverPositions.TopRight }];\n showImpersonatedPopover = false;\n\n composerCollapsedActions: ComposerAction[] = [];\n\n showTemplates$ = this.inboxService.canAccessMessageTemplateSettingsCard$;\n\n constructor(\n private conversationService: ConversationService,\n private featureFlagService: FeatureFlagService,\n private paymentService: PaymentService,\n @Inject(PARTNER_ID_TOKEN) readonly partnerId$: Observable,\n @Inject(ACCOUNT_GROUP_ID_TOKEN) readonly accountGroupId$: Observable,\n private inboxService: InboxService,\n private inboxUploadService: InboxUploadService,\n public modal: MatDialog,\n private analyticsService: ProductAnalyticsService,\n ) {\n this.conversationDetail$.pipe(takeUntilDestroyed()).subscribe((conversationDetail) => {\n if (conversationDetail?.conversation?.conversationId) {\n this.inboxUploadService.conversationId$$.next(conversationDetail.conversation.conversationId);\n }\n });\n\n this.canAccessPaymentLink$ = this.partnerId$.pipe(\n switchMap((partnerId) => {\n return this.featureFlagService.batchGetStatus(partnerId, '', ['inbox_payment_link']).pipe(\n take(1),\n shareReplay(1),\n map((res) => res['inbox_payment_link']),\n );\n }),\n withLatestFrom(this.accountGroupId$),\n switchMap(([canAccess, accountGroupId]) => {\n if (canAccess && this.inboxService.isBusinessApp) {\n // check if we have setup the retail merchant's stripe account\n return this.paymentService.getRetailProvider(accountGroupId).pipe(\n take(1),\n map((retailProvider) => !!retailProvider?.stripeConnectId),\n );\n }\n return of(canAccess && this.inboxService.isPartnerCenter);\n }),\n take(1),\n );\n\n effect(() => this.setComposerDisabled(this.selectedChatSourceId()), { allowSignalWrites: true });\n }\n\n ngOnChanges(): void {\n this.setComposerDisabled(this.selectedChatSourceId());\n }\n\n async ngAfterViewInit(): Promise {\n if (this.inboxService.isBusinessApp) {\n this.composerCollapsedActions.push({\n id: 'customervoice',\n action: 'INBOX.CHAT.INSERT_REVIEW_LINK',\n icon: 'star_outline',\n matMenu: (await this.inboxInsertReview?.getInserReviewMenu()) || null,\n visible: of(true),\n });\n }\n\n const canAccessPaymentLink = await firstValueFrom(this.canAccessPaymentLink$).catch(() => false);\n\n if (canAccessPaymentLink) {\n this.composerCollapsedActions.push({\n id: 'insertpaymentlink',\n action: 'INBOX.REQUEST_PAYMENT.TITLE',\n icon: 'attach_money',\n onClick: () => this.inboxInsertPaymentLink?.openInsertLinkModal(),\n visible: of(true),\n });\n }\n\n const showTemplates = await firstValueFrom(this.showTemplates$).catch(() => false);\n\n if (showTemplates) {\n this.composerCollapsedActions.push({\n id: 'inserttemplate',\n action: 'INBOX.MESSAGE_TEMPLATES.TITLE',\n icon: 'article',\n onClick: async () => {\n const trackingProps = await this.inboxService.buildTemplateTrackProperties();\n this.analyticsService.trackEvent('inbox', 'template', 'insert-template-button-click', 0, trackingProps);\n this.openInsertTemplateModal();\n },\n visible: of(true),\n });\n }\n }\n\n setComposerDisabled(selectedChatSourceId: ChatSourceId | undefined) {\n this.isComposerDisabled.set(\n this.isImpersonating || this.missingContactInformation || selectedChatSourceId === undefined,\n );\n }\n\n private getChatSourceInfo(ch: ConversationChannel): Observable {\n const result: ChatSourceInfo = {\n channel: ch,\n };\n\n if (ch === ConversationChannel.CONVERSATION_CHANNEL_SMS) {\n // If it's multilocation Inbox, we need to get the current conversation's SMS number because conversations in multilocation have different phone numbers\n if (this.hostAppInterface.getAppOptions().is_multilocation) {\n return this.conversationService.currentConvoSMSNumber$.pipe(\n filter((resp) => !!resp),\n map((resp) => {\n result.phoneNumber = resp.phoneNumber ?? undefined;\n return result;\n }),\n );\n // If it's regular Inbox, we need to get the phone number of account group so that users still can send SMS in new message component\n } else {\n return this.conversationService.sendSMSNumber$.pipe(\n filter((phoneNumber) => phoneNumber !== null),\n map((phoneNumber) => {\n result.phoneNumber = phoneNumber ?? undefined;\n return result;\n }),\n );\n }\n }\n return of(result);\n }\n\n onSubmit(sentMessage: SentMessage): void {\n const text = sentMessage?.messageText;\n const attachments = this.getMessageMediaInfo(this.files());\n const channel = mapChatSourceIdToConversationChannel(sentMessage.sourceId!);\n\n const messageInfo: MessageInfo = {\n text: text,\n attachments: attachments,\n channel,\n };\n\n if ((text && text.trim() !== '') || messageInfo.attachments.length > 0) {\n this.sendMessage.emit(messageInfo);\n if (this.files().length > 0) {\n this.removeFile();\n }\n }\n }\n\n getMessageMediaInfo(files: FileInfo[]): MediaInterface[] {\n if (!files || files.length <= 0) {\n return [];\n }\n\n const messageMedia: MediaInterface[] = files.map((file) => {\n const { media_content_type, media_location_path, media_file_name, media_file_size } = file.resp.data;\n return {\n mediaContentType: media_content_type,\n mediaLocationPath: media_location_path,\n mediaFileName: media_file_name,\n fileSize: media_file_size,\n } as MediaInterface;\n });\n\n return messageMedia;\n }\n\n toggleChannelInfoPopover(): void {\n this.showChannelInfoPopover = !this.showChannelInfoPopover;\n }\n\n closeChannelInfoPopover(): void {\n this.showChannelInfoPopover = false;\n }\n\n showImpersonatedPopovers(): void {\n this.showImpersonatedPopover = true;\n }\n\n hideImpersonatedPopovers(): void {\n this.showImpersonatedPopover = false;\n }\n\n insertLink(reviewLink: string): void {\n this.accountGroupId$\n .pipe(\n switchMap((accountGroupId) => this.hostAppInterface.shortenLink(reviewLink, accountGroupId)),\n take(1),\n )\n .subscribe((shortenReviewLink) => {\n this.chatComposer?.insertDynamicContent(shortenReviewLink, 'curser');\n });\n this.chatComposer?.composerTextArea?.nativeElement?.focus();\n }\n\n setFile(file: FileInfo): void {\n this.files.set([file]);\n switch (file.status) {\n case FileUploadStatus.Queued:\n case FileUploadStatus.InProgress:\n this.disableButtonForUploadFile$$.next(true);\n break;\n case FileUploadStatus.Success:\n case FileUploadStatus.Fail:\n default:\n this.disableButtonForUploadFile$$.next(false);\n break;\n }\n this.fileChange.emit(this.files());\n }\n\n removeFile(): void {\n this.files.set(new Array());\n //Clear file and queue and error\n this.inboxUploadService.clear();\n this.inboxUploadService.fileErrored$$.next(null);\n this.disableButtonForUploadFile$$.next(false);\n this.fileChange.emit(this.files());\n }\n\n setInPlatformChannelPopoverInfo(): PopoverConfig {\n return {\n title: 'INBOX.INFO.PARTNER_PLATFORM_LABEL',\n contentFirst: 'INBOX.POPOVER.IN_PLATFORM_CHANNEL_MESSAGE_INFO',\n contentSecond: '',\n };\n }\n\n setGoogleBusinessCommunicationsPopoverInfo(): PopoverConfig {\n return {\n title: 'INBOX.INFO.GOOGLE_BUSINESS_COMMUNICATIONS_LABEL',\n contentFirst: 'INBOX.POPOVER.GOOGLE_BUSINESS_COMMUNICATIONS_CHANNEL_MESSAGE_INFO',\n contentSecond: '',\n };\n }\n\n setSMSChannelPopoverInfo(phoneNumber?: string): PopoverConfig {\n const popoverConfig = {\n title: '',\n contentFirst: '',\n contentSecond: '',\n };\n if (!phoneNumber) {\n popoverConfig.title = 'INBOX.POPOVER.BUSINESS_INITIATED_CONVERSATIONS';\n popoverConfig.contentFirst = 'INBOX.POPOVER.NO_PHONE_NUMBER_PROVISIONED';\n popoverConfig.contentSecond = '';\n }\n return popoverConfig;\n }\n\n clearText(): void {\n this.chatComposer?.clearMessageText();\n }\n\n async openInsertTemplateModal(): Promise {\n const modalRef$ = this.modal.open(InboxInsertTemplateComponent, {\n width: '620px',\n autoFocus: false,\n });\n\n try {\n const template = await firstValueFrom(modalRef$.afterClosed());\n if (template) {\n this.chatComposer?.insertDynamicContent(template.content, 'curser');\n this.chatComposer?.composerTextArea?.nativeElement?.focus();\n const trackingProps = await this.inboxService.buildTemplateTrackProperties();\n this.analyticsService.trackEvent('inbox', 'template', 'insert-template-success', 0, {\n trackingProps,\n templateId: template.templateId,\n });\n }\n } catch (error) {\n console.error('error inserting template', error);\n this.snackbarService.openErrorSnack('INBOX.MESSAGE_TEMPLATES.MODAL.ERROR');\n return;\n }\n }\n\n get isMobile(): boolean {\n return isMobile();\n }\n}\n\nfunction mapChatSourceIdToConversationChannel(sourceId: ChatSourceId): ConversationChannel {\n switch (sourceId) {\n case 'sms':\n return ConversationChannel.CONVERSATION_CHANNEL_SMS;\n case 'facebook':\n return ConversationChannel.CONVERSATION_CHANNEL_FACEBOOK;\n case 'google':\n return ConversationChannel.CONVERSATION_CHANNEL_GOOGLE_BUSINESS_COMMUNICATIONS;\n case 'webchat':\n return ConversationChannel.CONVERSATION_CHANNEL_WEB_CHAT;\n case 'openai':\n return ConversationChannel.CONVERSATION_CHANNEL_OPENAI;\n case 'platform':\n return ConversationChannel.CONVERSATION_CHANNEL_INTERNAL;\n case 'email':\n return ConversationChannel.CONVERSATION_CHANNEL_EMAIL;\n case 'instagram':\n return ConversationChannel.CONVERSATION_CHANNEL_INSTAGRAM;\n default:\n throw new Error(`Unknown chat source id: ${sourceId}`);\n }\n}\n\nfunction mapConversationChannelToChatSource(channel: ConversationChannel, phoneNumber?: string): ChatSource {\n switch (channel) {\n case ConversationChannel.CONVERSATION_CHANNEL_SMS:\n return { id: 'sms', sourceName: 'SMS', account: phoneNumber };\n case ConversationChannel.CONVERSATION_CHANNEL_FACEBOOK:\n return { id: 'facebook', sourceName: 'Facebook Messenger', shortSourceName: 'Facebook' };\n case ConversationChannel.CONVERSATION_CHANNEL_GOOGLE_BUSINESS_COMMUNICATIONS:\n return { id: 'google', sourceName: 'Google Business Messages', shortSourceName: 'Google' };\n case ConversationChannel.CONVERSATION_CHANNEL_WEB_CHAT:\n return { id: 'webchat', sourceName: 'Web Chat' };\n case ConversationChannel.CONVERSATION_CHANNEL_OPENAI:\n return { id: 'openai', sourceName: '' };\n case ConversationChannel.CONVERSATION_CHANNEL_INTERNAL:\n return { id: 'platform', sourceName: 'Platform Chat', shortSourceName: 'Platform' };\n case ConversationChannel.CONVERSATION_CHANNEL_EMAIL:\n return { id: 'email', sourceName: 'Email' };\n case ConversationChannel.CONVERSATION_CHANNEL_INSTAGRAM:\n return { id: 'instagram', sourceName: 'Instagram Messenger' };\n default:\n throw new Error(`Unknown conversation channel: ${channel}`);\n }\n}\n","\n\n\n\n\n\n\n\n\n \n \n \n \n add\n \n\n \n \n \n \n \n \n \n {{ popoverConfig.title | translate }}\n \n
\n

\n

{{ popoverConfig.contentSecond | translate }}

\n
\n \n \n \n \n
\n\n \n \n {{ 'INBOX.POPOVER.IMPERSONATION_TITLE' | translate }}\n {{ 'INBOX.POPOVER.IMPERSONATION_TEXT' | translate }}\n \n \n\n \n \n \n \n \n\n","import { CommonModule } from '@angular/common';\nimport { Component, Inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { TranslateModule } from '@ngx-translate/core';\n\nexport interface DialogData {\n mediaUrl: string;\n mediaContentType: string;\n}\n\n@Component({\n selector: 'inbox-media-dialog-component',\n templateUrl: './media-dialog.component.html',\n standalone: true,\n imports: [\n CommonModule,\n MatDialogModule,\n MatFormFieldModule,\n MatInputModule,\n FormsModule,\n MatButtonModule,\n TranslateModule,\n ],\n})\nexport class MediaDialogComponent {\n constructor(\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: DialogData,\n ) {}\n}\n","\"\"\n\n \n\n\n \n\n","import { Component, HostListener, inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef, MatDialogModule } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\nimport { ReactiveFormsModule, FormsModule, FormGroup, FormControl } from '@angular/forms';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { GalaxyFormFieldModule } from '@vendasta/galaxy/form-field';\nimport { CommonModule } from '@angular/common';\nimport { TranslateModule } from '@ngx-translate/core';\n\nexport interface DialogData {\n helpful: boolean;\n}\n\n@Component({\n selector: 'inbox-response-evaluation-dialog-component',\n templateUrl: 'response-evaluation-dialog.component.html',\n standalone: true,\n imports: [\n CommonModule,\n GalaxyFormFieldModule,\n MatDialogModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n ReactiveFormsModule,\n FormsModule,\n MatButtonModule,\n TranslateModule,\n ],\n})\nexport class ResponseEvaluationDialogComponent {\n readonly data = inject(MAT_DIALOG_DATA);\n icon = this.data.helpful ? 'thumb_up' : 'thumb_down';\n label = this.data.helpful\n ? 'INBOX.RESPONSE_EVALUATION.HELPFUL_QUESTION'\n : 'INBOX.RESPONSE_EVALUATION.NOT_HELPFUL_QUESTION';\n\n evaluationForm = new FormGroup({\n comment: new FormControl(),\n });\n\n constructor(public dialogRef: MatDialogRef) {}\n\n submit(): void {\n this.dialogRef.close({ comment: this.evaluationForm.value.comment });\n }\n\n @HostListener('click', ['$event'])\n onClick(event: MouseEvent) {\n event.stopPropagation();\n // while the modal is open, prevent clicks from causing the thumbs to hide below the message bubble\n }\n}\n","\n
\n \n {{ label | translate }}\n \n \n
\n
\n\n \n \n\n","import { Component, inject, Input, signal, ViewChild } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { MatDialog } from '@angular/material/dialog';\nimport {\n Conversation,\n ConversationChannel,\n MessageType,\n ParticipantType,\n EvaluationSentiment,\n} from '@vendasta/conversation';\nimport { ChatContainerComponent, ChatMessageStatus } from '@vendasta/galaxy/chat';\nimport { defaultBackgroundColor } from '@vendasta/galaxy/avatar';\nimport { ProductAnalyticsService } from '@vendasta/product-analytics';\nimport { BehaviorSubject, combineLatest, firstValueFrom, map } from 'rxjs';\nimport { DEFAULT_OPENAI_BOT_NAME } from '../../../../../../core/src/lib/inbox.constants';\nimport {\n ConversationEvent,\n ConversationMessage,\n} from '../../../../../../core/src/lib/interface/conversation.interface';\nimport { MessageGroup, MessageGroupable } from '../../../../../../core/src/lib/types';\nimport { ConversationService } from '../../../../../../core/src/lib/conversation.service';\nimport { DEFAULT_HOUR_GROUP_DURATION, DEFAULT_MESSAGE_GROUPING_DURATION } from '../../../../constants';\nimport { MediaDialogComponent } from './media-dialog.component';\nimport { DialogData, ResponseEvaluationDialogComponent } from './response-evaluation-dialog.component';\nimport { GalaxyAiIconService } from '@vendasta/galaxy/ai-icon';\n\nexport interface ResponseEvaluation {\n helpful: boolean;\n comment?: string;\n}\n\n@Component({\n selector: 'inbox-messages',\n templateUrl: './inbox-messages.component.html',\n styleUrls: ['./inbox-messages.component.scss'],\n})\nexport class InboxMessagesComponent {\n readonly defaultBackgroundColor = defaultBackgroundColor;\n readonly mediaWithErrorsMessageIDs = signal([]);\n readonly isConversationEvent = isConversationEvent;\n readonly RECEIVED = 'received';\n readonly MessageType = MessageType;\n readonly OPENAI_BOT_NAME = DEFAULT_OPENAI_BOT_NAME;\n readonly OPENAI_BOT_TYPE = ParticipantType.PARTICIPANT_TYPE_OPENAI_BOT;\n readonly OPENAI_BOT_SVG_ICON = 'galaxy-ai-icon-with-background';\n readonly OPENAI_BOT_BACKGROUND_COLOR = '#f6f6f6';\n readonly acceptedMimeType = [\n 'image/jpeg',\n 'image/jpg',\n 'image/png',\n 'image/gif',\n 'video/mp4',\n 'video/3gpp',\n 'video/WebM',\n 'video/ogg',\n 'audio/ogg',\n 'audio/acc',\n 'audio/wav',\n 'audio/mp3',\n 'audio/mp4',\n 'audio/mpeg',\n 'audio/webm',\n ];\n private readonly messages$$ = new BehaviorSubject([]);\n private readonly messages$ = this.messages$$.asObservable();\n private readonly conversationDetail$$ = new BehaviorSubject(null);\n\n protected readonly conversationId$ = this.conversationDetail$$.pipe(\n map((conversation) => conversation?.conversationId || ''),\n );\n\n @Input() set messages(value: ConversationMessage[]) {\n this.mediaWithErrorsMessageIDs.set([]);\n this.messages$$.next(value);\n }\n\n private readonly events$$ = new BehaviorSubject([]);\n @Input() set events(value: ConversationEvent[]) {\n this.events$$.next(value);\n }\n\n @Input() set conversation(value: Conversation) {\n this.conversationDetail$$.next(value);\n }\n\n @ViewChild('chatContainer') chatContainer: ChatContainerComponent | undefined;\n\n readonly groupedMessages$ = combineLatest([this.messages$, this.events$$]).pipe(\n map(([messages, events]) => groupMessages(messages, events)),\n map((messages) => messages?.slice().reverse()), // reverse messages to render in glxy-chat-container\n );\n\n readonly loadingOpenAIReply = toSignal(\n combineLatest([this.conversationDetail$$, this.messages$]).pipe(\n map(([conversation, messages]) => {\n if (conversation?.channel !== ConversationChannel.CONVERSATION_CHANNEL_OPENAI) {\n return false;\n }\n\n const latestMessage = messages?.[0];\n if (!latestMessage) {\n return false;\n }\n\n // NOTE: This is always assuming that Open AI will have a response for every message\n // However, we will always aim for a chat response from the backend if openai fails\n // We're making a tradeoff here until we have something in the backend that we can use to handle this\n if (latestMessage?.sender?.participantType === ParticipantType.PARTICIPANT_TYPE_IAM_USER) {\n return true;\n }\n return false;\n }),\n ),\n );\n private readonly conversationService = inject(ConversationService);\n readonly aiIconService = inject(GalaxyAiIconService); // used to load the ai avatar svg\n constructor(\n private readonly analytics: ProductAnalyticsService,\n private readonly dialog: MatDialog,\n ) {}\n\n openInDialog(url: string, contentType: string) {\n this.analytics.trackEvent('inbox', 'openMediaDialog', 'view');\n this.dialog.open(MediaDialogComponent, {\n data: { mediaUrl: url, mediaContentType: contentType },\n height: 'auto',\n maxWidth: '860px',\n });\n }\n\n trackById(_: number, item: MessageGroupable): string {\n return isConversationEvent(item) ? item.eventId : item?.id;\n }\n\n addMessageIdToMediaErrors(messageID: string) {\n this.mediaWithErrorsMessageIDs.update((errors) => [...errors, messageID]);\n }\n\n async openEvaluateModal(helpful: boolean, message: ConversationMessage): Promise {\n const data: DialogData = {\n helpful: helpful,\n };\n const modalRef$ = this.dialog.open(ResponseEvaluationDialogComponent, {\n data: data,\n width: '660px',\n });\n const submission = await firstValueFrom(modalRef$.afterClosed());\n if (submission) {\n const sentiment = helpful\n ? EvaluationSentiment.EVALUATION_SENTIMENT_POSITIVE\n : EvaluationSentiment.EVALUATION_SENTIMENT_NEGATIVE;\n await this.conversationService.evaluateResponse(message.messageId, submission?.comment, sentiment);\n }\n }\n\n mapMessageStatus(message: ConversationMessage): ChatMessageStatus {\n return this.conversationService.mapStatusForMessage(message);\n }\n}\n\nexport function groupMessages(messages?: ConversationMessage[], events?: ConversationEvent[]): MessageGroupable[] {\n const allItems = [...(messages || []), ...(events || [])].filter(Boolean).sort((a, b) => {\n const aDate = isConversationEvent(a) ? a.happenedAt.toDate().getTime() : a.created.getTime();\n const bDate = isConversationEvent(b) ? b.happenedAt.toDate().getTime() : b.created.getTime();\n return aDate - bDate;\n });\n\n return allItems.reduce((list, item) => {\n // don't group events and system messages\n if (isConversationEvent(item) || isSystemMessage(item)) {\n return [...list, item];\n }\n\n // if possible, add the message to the previous message group\n const previousGroup = list[list.length - 1];\n if (canAddMessageToPreviousGroup(item, previousGroup)) {\n previousGroup.addMessage(item);\n return list;\n }\n\n // othwerwise, create a new message group and add the item to it\n const newGroup = createNewGroupWithMessage(item, previousGroup?.lastMessage);\n return [...list, newGroup];\n }, []);\n}\n\nfunction isConversationEvent(item: MessageGroupable): item is ConversationEvent {\n return 'happenedAt' in item;\n}\n\nfunction isSystemMessage(item: ConversationMessage | ConversationEvent): boolean {\n return 'type' in item && item.type === MessageType.MESSAGE_TYPE_SYSTEM;\n}\n\nfunction canAddMessageToPreviousGroup(message: ConversationMessage, previousGroup: MessageGroupable): boolean {\n if (previousGroup instanceof MessageGroup) {\n const lastMessage = previousGroup.lastMessage;\n const isSameSender = message.sender?.participantId === lastMessage?.sender?.participantId;\n const isSameType = message.type === lastMessage?.type;\n const isSameChannel = message.channel === lastMessage?.channel;\n const timeElapsed = message.created?.getTime() - lastMessage?.created?.getTime();\n const isWithinDuration = timeElapsed < DEFAULT_MESSAGE_GROUPING_DURATION;\n return isSameSender && isSameType && isSameChannel && isWithinDuration;\n }\n return false;\n}\n\nfunction createNewGroupWithMessage(\n message: ConversationMessage,\n previousMessage: ConversationMessage | undefined,\n): MessageGroup {\n // if enough time has passed since the previous message, set the createdAt\n // date of the new message group so a date divider will be shown in the\n // conversation stream\n const previousDate = previousMessage?.created;\n const messageDate = message.created;\n const enoughTimeElapsed = messageDate.getTime() - previousDate?.getTime() > DEFAULT_HOUR_GROUP_DURATION;\n const addTimeDivider = !previousDate || enoughTimeElapsed;\n const createdAt = addTimeDivider ? messageDate : null;\n\n const { id, sender, channel, type } = message;\n const newGroup = new MessageGroup(id, sender, type, channel, createdAt);\n newGroup.addMessage(message);\n return newGroup;\n}\n","\n \n \n\n \n \n \n \n\n \n \n \n\n \n {{ item.labelKey | translate }}\n \n \n\n\n\n \n \n \n \n \n thumb_up\n \n \n thumb_down\n \n \n \n \n \n \n\n \n {{ messageGroup.createdAt | messageTime }}\n \n\n\n\n \n
\n
\n
\n\n\n \n \n \n \n
\n \n \n \n \n \n
\n
\n
\n \n \n broken_image\n \n

{{ 'INBOX.ERROR.BROKEN_MEDIA_URL' | translate }}

\n \n \n\n \n \n insert_drive_file\n {{ media.mediaFileName }}\n \n \n
\n
\n","import { ChangeDetectionStrategy, Component, OnInit, ViewChild, computed, inject, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport {\n ConversationChannel,\n MessageType,\n Participant,\n ParticipantType,\n PlatformLocation,\n} from '@vendasta/conversation';\nimport { filterNullAndUndefined } from '@vendasta/rx-utils';\nimport { Observable, combineLatest, firstValueFrom, map } from 'rxjs';\nimport { toFirestoreId } from '../../../../core/src/lib/conversation-utils';\nimport { ConversationService } from '../../../../core/src/lib/conversation.service';\nimport { InboxService } from '../../../../core/src/lib/inbox.service';\nimport { ConversationAvailableChannels, MessageInfo } from '../../../../core/src/lib/interface/conversation.interface';\nimport { PARTNER_ID_TOKEN, USER_ID_TOKEN } from '../../../../core/src/lib/tokens';\nimport { InboxMessageTextComponent } from '../inbox-chat/components/inbox-message-text/inbox-message-text.component';\n\n@Component({\n selector: 'inbox-ai-chat',\n templateUrl: './inbox-ai-chat.component.html',\n styleUrls: ['./inbox-ai-chat.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class InboxAiChatComponent implements OnInit {\n messages$ = this.conversationService.messages$;\n readonly loadingMessages = toSignal(this.conversationService.loadingMessages$);\n readonly currentConversationDetail$ = this.conversationService.currentConversationDetail$;\n readonly loadingConversation = signal(true);\n readonly loading = computed(() => this.loadingConversation() || this.loadingMessages());\n\n @ViewChild('inboxTextComponent') inboxTextComponent?: InboxMessageTextComponent;\n\n readonly isImpersonating$: Observable = this.conversationService.isUserImpersonated$;\n\n AIParticipantRecipient = {\n participantType: ParticipantType.PARTICIPANT_TYPE_OPENAI_BOT,\n partnerId: '',\n } as Participant;\n\n private readonly userId$ = inject(USER_ID_TOKEN);\n private readonly partnerId$ = inject(PARTNER_ID_TOKEN);\n\n senderParticipant$: Observable = combineLatest([this.userId$, this.partnerId$]).pipe(\n map(([user, partnerID]) => {\n return {\n internalParticipantId: user,\n partnerId: partnerID,\n participantType: ParticipantType.PARTICIPANT_TYPE_IAM_USER,\n isSubjectParticipant: true,\n } as Participant;\n }),\n );\n\n availableChannels: ConversationAvailableChannels = {\n availableChannels: [ConversationChannel.CONVERSATION_CHANNEL_OPENAI],\n preferredChannel: ConversationChannel.CONVERSATION_CHANNEL_OPENAI,\n };\n\n constructor(\n private readonly conversationService: ConversationService,\n private readonly inboxService: InboxService,\n ) {}\n\n ngOnInit(): void {\n this.startConversation();\n }\n\n async startConversation(): Promise {\n const participants = [await firstValueFrom(this.senderParticipant$), this.AIParticipantRecipient];\n\n try {\n const resp = await firstValueFrom(\n this.conversationService.createConversation(\n participants ?? [],\n ConversationChannel.CONVERSATION_CHANNEL_OPENAI,\n PlatformLocation.PLATFORM_LOCATION_PARTNER_CENTER,\n ),\n );\n\n this.conversationService.setCurrentFirestoreConversationId(\n toFirestoreId(resp?.conversation?.conversationId ?? ''),\n );\n } catch (error) {\n console.warn('Error to get or create the AI conversation: ', error);\n } finally {\n this.loadingConversation.set(false);\n }\n }\n\n async sendMessage(messageInfo: MessageInfo): Promise {\n const currentConversationDetail = await firstValueFrom(\n this.currentConversationDetail$.pipe(filterNullAndUndefined()),\n );\n if (currentConversationDetail.conversation.channel !== ConversationChannel.CONVERSATION_CHANNEL_OPENAI) {\n // Just in case the first non-null conversation we load isn't an AI conversation\n // we don't want messages intended for AI appearing in other conversations\n return;\n }\n await this.conversationService.sendMessage(\n currentConversationDetail.conversation.conversationId,\n MessageType.MESSAGE_TYPE_MESSAGE,\n messageInfo.text,\n messageInfo.channel,\n this.inboxService.platformLocation,\n messageInfo.attachments,\n );\n this.inboxTextComponent?.clearText?.();\n }\n}\n","
\n \n \n \n
\n","import { TextFieldModule } from '@angular/cdk/text-field';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { FormsModule } from '@angular/forms';\n\nimport { ChatComposerComponent } from './chat-composer.component';\nexport { ChatComposerComponent };\n\nimport { ChatComposerActionsDirective } from './directives/chat-composer-actions.directive';\nexport { ChatComposerActionsDirective };\n\nimport { ChatComposerActionsExtendedDirective } from './directives/chat-composer-actions-extended.directive';\nexport { ChatComposerActionsExtendedDirective };\n\nimport { ChatComposerActionButtonDirective } from './directives/chat-composer-action-button.directive';\nexport { ChatComposerActionButtonDirective };\n\nimport { ChatComposerBesideSendDirective } from './directives/chat-composer-beside-send.directive';\nimport { GalaxyButtonLoadingIndicatorModule } from '@vendasta/galaxy/button-loading-indicator';\nexport { ChatComposerBesideSendDirective };\n\nimport { ChatSourceId } from './chat-composer.component';\nexport { ChatSourceId };\n\nexport const MODULE_IMPORTS = [\n CommonModule,\n MatButtonModule,\n MatIconModule,\n TextFieldModule,\n MatMenuModule,\n MatTooltipModule,\n FormsModule,\n GalaxyButtonLoadingIndicatorModule,\n];\n\nexport const MODULE_DECLARATIONS = [\n ChatComposerComponent,\n ChatComposerActionsDirective,\n ChatComposerActionsExtendedDirective,\n ChatComposerActionButtonDirective,\n ChatComposerBesideSendDirective,\n];\n\n@NgModule({\n declarations: MODULE_DECLARATIONS,\n imports: MODULE_IMPORTS,\n exports: MODULE_DECLARATIONS,\n})\nexport class GalaxyChatComposerModule {}\n","import { ChangeDetectionStrategy, Component, Input, inject } from '@angular/core';\nimport { ConversationService } from '../../../../core/src/lib/conversation.service';\nimport { ConversationDetail } from '../../../../core/src/lib/interface/conversation.interface';\nimport { ReplaySubject } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\n\n@Component({\n selector: 'inbox-conversation-preview',\n templateUrl: './inbox-conversation-preview.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class InboxConversationPreviewComponent {\n private readonly conversationService = inject(ConversationService);\n private readonly conversationDetail$$ = new ReplaySubject(1);\n private readonly conversationDetail$ = this.conversationDetail$$.asObservable();\n protected readonly previewContent$ = this.conversationDetail$.pipe(\n switchMap((details) => this.conversationService.getPreviewContent(details)),\n );\n\n @Input() set conversationDetail(value: ConversationDetail) {\n this.conversationDetail$$.next(value);\n }\n}\n","\n","import { AsyncPipe, NgClass, NgStyle } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, inject } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { ConversationDetail } from '../../../../core/src/lib/interface/conversation.interface';\nimport { CONVERSATION_HOST_APP_INTERFACE_TOKEN } from '../../../../core/src/lib/tokens';\n\n@Component({\n selector: 'inbox-conversation-title',\n templateUrl: './inbox-conversation-title.component.html',\n styleUrls: ['./inbox-conversation-title.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [AsyncPipe, NgStyle, NgClass, TranslateModule],\n})\nexport class InboxConversationTitleComponent {\n private readonly hostAppInterface = inject(CONVERSATION_HOST_APP_INTERFACE_TOKEN);\n\n title$$ = new BehaviorSubject('');\n title$ = this.title$$.asObservable();\n\n isInternalInfoDeleted = false;\n\n @Input() set conversationDetail(value: ConversationDetail | null) {\n if (!value) {\n return;\n }\n const title = this.hostAppInterface.getConversationTitleInfo(value).title;\n this.title$$.next(title);\n this.isInternalInfoDeleted = this.hostAppInterface.isRecipientInternalInfoDeleted(value);\n }\n\n @Input() conversationClosed = false;\n @Input() displayOnTopBar = false;\n}\n","\n {{ title$ | async | translate }}\n\n","import { ChangeDetectionStrategy, Component, Input, OnInit, computed, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { ConversationChannel, GlobalParticipantType, SubjectParticipant } from '@vendasta/conversation';\nimport { Observable, map, shareReplay } from 'rxjs';\nimport { ConversationListService } from '../../../../core/src/lib/conversation-list.service';\nimport { ConversationService } from '../../../../core/src/lib/conversation.service';\nimport { FirestoreService } from '../../../../core/src/lib/firestore.service';\nimport { InboxNavigationService } from '../../../../core/src/lib/inbox-navigation.service';\nimport { InboxService } from '../../../../core/src/lib/inbox.service';\nimport { ConversationDetail } from '../../../../core/src/lib/interface/conversation.interface';\nimport { CONVERSATION_ROUTES_TOKEN } from '../../../../core/src/lib/tokens';\nimport { INBOX_NAVIGATION_LINK } from '../../constants';\n\n@Component({\n selector: 'inbox-pane-preview',\n styleUrls: ['./inbox-pane-preview.component.scss'],\n templateUrl: './inbox-pane-preview.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class InboxPanePreviewComponent implements OnInit {\n private readonly conversationService = inject(ConversationService);\n private readonly conversationListService = inject(ConversationListService);\n private readonly inboxService = inject(InboxService);\n private readonly firestoreService = inject(FirestoreService);\n private readonly inboxNav = inject(InboxNavigationService);\n\n displayBadge = this.inboxService.isPartnerCenter;\n\n showInboxPreviewPane: boolean;\n\n @Input() partnerId = '';\n @Input() accountGroupId = '';\n\n conversations$: Observable;\n showEmptyState$: Observable;\n\n private readonly routes = toSignal(inject(CONVERSATION_ROUTES_TOKEN));\n readonly useInboxModal = computed(() => this.routes().useModal);\n readonly inboxRoute = computed(() => {\n const root = `${this.routes().root}/inbox/`;\n return this.useInboxModal() ? INBOX_NAVIGATION_LINK : [root];\n });\n\n ngOnInit(): void {\n this.showInboxPreviewPane = this.partnerId !== 'VMF';\n this.conversations$ = this.conversationListService\n .fetchConversations(this.firestoreService.loadOrgRelatedConversationsQuery(this.accountGroupId))\n .pipe(shareReplay({ bufferSize: 1, refCount: true }));\n this.showEmptyState$ = this.conversations$.pipe(map((conversations) => conversations.length === 0));\n }\n\n trackConversationDetailsById(i: number, conversationDetail: ConversationDetail): string | undefined {\n return conversationDetail?.conversation?.conversationId;\n }\n\n startNewMessage(): void {\n this.inboxNav.gotoConversationChannel(\n [\n new SubjectParticipant({\n internalParticipantId: this.partnerId,\n participantType: GlobalParticipantType.GLOBAL_PARTICIPANT_TYPE_PARTNER,\n }),\n new SubjectParticipant({\n internalParticipantId: this.accountGroupId,\n participantType: GlobalParticipantType.GLOBAL_PARTICIPANT_TYPE_ACCOUNT_GROUP,\n }),\n ],\n ConversationChannel.CONVERSATION_CHANNEL_INTERNAL,\n );\n }\n}\n","\n\n \n \n {{ 'INBOX.PREVIEW_PANE.TITLE' | translate }}\n \n \n {{ 'INBOX.PREVIEW_PANE.GO_TO_INBOX' | translate }}\n \n \n \n \n \n \n question_answer\n \n

{{ 'INBOX.PREVIEW_PANE.EMPTY_STATE.INFO' | translate }}

\n \n \n \n
\n
\n \n
\n \n \n \n
\n
\n
\n \n {{ badge?.participantType | translate }}\n \n
\n
\n
\n \n {{ conversationDetail | timestamp }}\n
\n \n
\n
\n
\n \n
\n \n \n
\n \n \n \n \n
\n
\n
\n","import { ChangeDetectionStrategy, Component, DestroyRef, Inject, Input, OnInit, inject } from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { ActivatedRoute, Params, Router } from '@angular/router';\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\nimport { Timestamp } from 'firebase/firestore';\nimport { Observable, combineLatest } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, map, startWith, tap } from 'rxjs/operators';\nimport { ConversationListService } from '../../../../core/src/lib/conversation-list.service';\nimport { ConversationService } from '../../../../core/src/lib/conversation.service';\nimport { isMobile } from '../../../../core/src/lib/inbox-utils';\nimport { InboxService } from '../../../../core/src/lib/inbox.service';\nimport { ConversationDetail } from '../../../../core/src/lib/interface/conversation.interface';\nimport { ACCOUNT_GROUP_ID_TOKEN, CONVERSATION_ROUTES_TOKEN, PARTNER_ID_TOKEN } from '../../../../core/src/lib/tokens';\nimport { ViewService } from '../../../../core/src/lib/view.service';\n\ndayjs.extend(utc);\n\nconst currentViewId = () => {\n const route = inject(ActivatedRoute);\n return route.params.pipe(\n map((params) => params.viewId),\n distinctUntilChanged(),\n );\n};\n\n// This array of strings allows us to type-check at dev-time and at run-time,\n// using a helper method in the component. The `type InboxView` two lines down\n// is a string union infererred from this array of strings. cf.\n// https://dev.to/hansott/how-to-check-if-string-is-member-of-union-type-1j4m\nconst inboxViews = ['none', 'closed', 'anonymous'] as const;\ntype InboxViewTuple = typeof inboxViews;\ntype InboxView = InboxViewTuple[number];\n\n@Component({\n selector: 'inbox-pane',\n templateUrl: './inbox-pane.component.html',\n styleUrls: ['./inbox-pane.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class InboxPaneComponent implements OnInit {\n private readonly destroyRef = inject(DestroyRef);\n private readonly activeRoute = inject(ActivatedRoute);\n private readonly conversationListService = inject(ConversationListService);\n protected readonly showInboxViews$ = this.inboxService.showInboxViews$;\n\n readonly formGroup = new FormGroup({\n search: new FormControl('', { nonNullable: true }),\n view: new FormControl(this.getInitialView(), { nonNullable: true }),\n });\n\n filteredConversations$ = this.conversationListService.conversations$.pipe(\n tap(() => {\n //refresh \"now\"\n this.now = dayjs.utc();\n }),\n );\n\n routerState = '';\n currentConversationId = '';\n displayBadge$: Observable = this.conversationService.displayBadge$;\n\n loadingConversations$ = this.conversationListService.loadingConversations$;\n emptyConversations$ = this.conversationListService.emptyConversations$;\n hasClosedConversations$ = this.conversationListService.organizationHasClosedConversations$;\n\n now = dayjs.utc();\n\n viewId$ = currentViewId();\n\n // TODO: @ardydedase combine inputs into a single interface.\n @Input() learnMoreUrl = '';\n @Input() showSearchBar = true;\n @Input() emptyTitleMessage = 'INBOX.EMPTY.TITLE';\n @Input() emptySubtitleMessage = 'INBOX.EMPTY.SMS_SUBTITLE';\n @Input() conversationPath?: string;\n\n private readonly routes = toSignal(inject(CONVERSATION_ROUTES_TOKEN));\n\n readonly showFilters$ = this.viewService.selectedViewId$.pipe(map((viewId) => viewId === 'all'));\n readonly showToolbar$ = this.showFilters$.pipe(map((showFilters) => showFilters || this.showSearchBar));\n readonly isBusinessApp = this.inboxService.isBusinessApp;\n canAccessSMS$ = this.inboxService.canAccessSMS$;\n\n // TODO(BREW-575): We're going to combine the concepts of 'views' and 'filters'\n // into a single concept, using the dropdwon UI instead of tabs across the\n // top. But for now, we have to handle two different forms of empty view: one\n // for apps like PCC with 'views' tabs, and one for apps like BCC with the\n // 'filters' dropdown. This will get simpler when we consolidate those.\n showEmptyView$ = combineLatest([this.showInboxViews$, this.emptyConversations$]).pipe(\n map(([showInboxViews, emptyConversations]) => !!(showInboxViews && emptyConversations)),\n );\n\n // This is guaranteed to be mutually exclusive with showEmptyView$ because it\n // incorporates that observable in its logic. This will get simpler as\n // mentioned above. (BREW-575)\n showInboxZero$ = combineLatest([\n this.showFilters$,\n this.showEmptyView$,\n this.emptyConversations$,\n this.hasClosedConversations$,\n ]).pipe(\n map(([showFilters, showEmptyView, emptyConversations, hasClosedConversations]) => {\n const unfiltered = this.formGroup.controls.view.value === 'none';\n return !!(showFilters && unfiltered && emptyConversations && hasClosedConversations && !showEmptyView);\n }),\n );\n\n constructor(\n private conversationService: ConversationService,\n private inboxService: InboxService,\n @Inject(ACCOUNT_GROUP_ID_TOKEN) readonly accountGroupId$: Observable,\n @Inject(PARTNER_ID_TOKEN) readonly partnerId$: Observable,\n private router: Router,\n private readonly viewService: ViewService,\n ) {}\n\n ngOnInit(): void {\n this.activeRoute.queryParamMap.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((params) => {\n this.conversationListService.updateFilters({\n isAnonymous: params.get('view') === 'anonymous',\n isOpen: params.get('view') !== 'closed',\n });\n });\n\n const currentUrlParts = this.router.url.split('/');\n this.routerState = currentUrlParts[currentUrlParts.length - 1];\n if (!isMobile() && this.routerState === 'conversations') {\n this.router.navigate([`${this.routes()?.root}/inbox/home`]);\n }\n\n this.formGroup.controls.search.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef), debounceTime(500), startWith(''), distinctUntilChanged())\n .subscribe((term) => this.conversationListService.setFilterTerm(term));\n\n this.formGroup.controls.view.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((filter) => {\n const queryParams: Params = { view: filter ? filter : null };\n this.router.navigate([], {\n queryParams: queryParams,\n queryParamsHandling: 'merge',\n });\n });\n }\n\n conversationSelected(selected: boolean): void {\n this.conversationService.conversationSelected(selected);\n }\n\n withinPreviousDayFirestoreTimestamp(timestamp: Timestamp): boolean | undefined {\n if (timestamp) {\n return this.withinPreviousDay(timestamp.toDate());\n }\n }\n\n withinPreviousDay(date: Date): boolean | undefined {\n if (date) {\n return this.now.diff(dayjs(date), 'hour') <= 24;\n }\n }\n\n trackConversationDetailsById(i: number, conversationDetail: ConversationDetail): string | undefined {\n return conversationDetail?.conversation?.conversationId;\n }\n\n loadMoreConversations(): void {\n this.conversationListService.loadMoreConversations();\n }\n\n getInitialView(): InboxView {\n const viewParam = this.activeRoute.snapshot.queryParamMap.get('view') as InboxView;\n if (inboxViews.includes(viewParam)) {\n return viewParam;\n }\n return 'none';\n }\n}\n","\n\n
\n \n \n \n\n \n \n {{ 'INBOX.FILTERS.INBOX' | translate }}\n {{ 'INBOX.FILTERS.CLOSED' | translate }}\n \n {{ 'INBOX.FILTERS.ANONYMOUS' | translate }}\n \n \n
\n\n\n
\n \n \n \n
\n
\n
\n
\n \n {{ badge.participantType | translate }}\n \n
\n
\n
\n \n {{ 'INBOX.YOUR_EXPERT' | translate }}\n \n
\n
\n \n {{ conversationDetail | timestamp }}\n
\n \n
\n
\n
\n
\n
\n \n \n
\n \n \n \n
\n
\n \n
\n \n {{ conversationDetail | timestamp }}\n
\n \n
\n
\n
\n \n \n \n
\n \n \n \n \n\n\n\n\n\n","import { Component, inject } from '@angular/core';\nimport { ALL_VIEW_ID, FOLLOWING_VIEW_ID } from '../../../../core/src/lib/inbox.constants';\nimport { ViewService } from '../../../../core/src/lib/view.service';\nimport { CommonModule } from '@angular/common';\nimport { GalaxyEmptyStateModule } from '@vendasta/galaxy/empty-state';\n\n@Component({\n selector: 'inbox-views-empty',\n templateUrl: './inbox-views-empty.component.html',\n styleUrls: ['./inbox-views-empty.component.scss'],\n standalone: true,\n imports: [CommonModule, GalaxyEmptyStateModule],\n})\nexport class InboxViewsEmptyComponent {\n private readonly viewService = inject(ViewService);\n readonly selectedViewId$ = this.viewService.selectedViewId$;\n allViewId = ALL_VIEW_ID;\n followingViewId = FOLLOWING_VIEW_ID;\n}\n","\n\n\n
\n \n \n
\n
\n

\n Tap the ★ on any conversation you want to follow,\n and it will appear here.\n

\n
\n
\n
\n","import { booleanAttribute, Component, Input, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { GalaxyEmptyStateModule } from '@vendasta/galaxy/empty-state';\nimport { RouterLink } from '@angular/router';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { CONVERSATION_ROUTES_TOKEN } from '../../../../core/src/lib/tokens';\n\n@Component({\n selector: 'inbox-zero',\n standalone: true,\n imports: [CommonModule, TranslateModule, MatButtonModule, GalaxyEmptyStateModule, RouterLink],\n templateUrl: './inbox-zero.component.html',\n styleUrls: ['./inbox-zero.component.scss'],\n})\nexport class InboxZeroComponent {\n @Input({ transform: booleanAttribute }) showNewMessageButton = false;\n\n private readonly routes = toSignal(inject(CONVERSATION_ROUTES_TOKEN));\n\n newMessageUrl = this.routes()?.sendNewMessage;\n}\n","\n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n {{ 'INBOX.INBOX_ZERO.TITLE' | translate }}\n\n

{{ 'INBOX.INBOX_ZERO.DESCRIPTION' | translate }}

\n\n \n \n {{ 'INBOX.INBOX_ZERO.START_A_NEW_CONVERSATION' | translate }}\n \n \n
\n","import { Component, DestroyRef, Input } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Router } from '@angular/router';\nimport { SnackbarService } from '@vendasta/galaxy/snackbar-service';\nimport { ReplaySubject, combineLatest } from 'rxjs';\nimport { ConversationListService } from '../../../../core/src/lib/conversation-list.service';\nimport { ConversationService } from '../../../../core/src/lib/conversation.service';\nimport { InboxNotificationService } from '../../../../core/src/lib/inbox-notification.service';\nimport { ALL_VIEW_ID } from '../../../../core/src/lib/inbox.constants';\nimport { ViewService } from '../../../../core/src/lib/view.service';\n\nconst FOLLOW_VIEW_ID = 'following';\n\n@Component({\n selector: 'inbox-views',\n templateUrl: './inbox-views.component.html',\n styleUrls: ['./inbox-views.component.scss'],\n})\nexport class InboxViewsComponent {\n @Input() viewMode = false;\n readonly views$ = this.viewService.loadViews();\n selectedViewId$ = this.viewService.selectedViewId$;\n readonly allViewId = ALL_VIEW_ID;\n\n private readonly notificationWarningView$$: ReplaySubject = new ReplaySubject();\n readonly notificationWarningView$ = this.notificationWarningView$$.asObservable();\n\n constructor(\n private readonly router: Router,\n private readonly conversationService: ConversationService,\n private readonly conversationListService: ConversationListService,\n private readonly notificationsService: InboxNotificationService,\n private readonly viewService: ViewService,\n private readonly snackbarService: SnackbarService,\n private readonly destroyRef: DestroyRef,\n ) {}\n\n showView(viewId: string): void {\n this.conversationService.removeLastConversationId();\n this.router.navigate([{ outlets: { inbox: ['inbox', 'views', viewId, 'conversations'] } }]);\n this.viewService.setViewId(viewId);\n this.conversationService.conversationSelected(false);\n this.notificationWarningBannerStatus(viewId);\n }\n\n notificationWarningBannerStatus(viewSection: string): void {\n combineLatest([\n this.notificationsService.inboxNotificationStatus$,\n this.conversationService.conversationSelected$,\n this.conversationListService.conversations$,\n ])\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(([notificationSetting, conversationSelected, conversations]) => {\n const showNotificationWarningBanner =\n conversations && conversations.length > 0\n ? notificationSetting === false &&\n viewSection === FOLLOW_VIEW_ID &&\n this.notificationsService.getCookieStatus() === false &&\n conversationSelected === false\n : false;\n this.notificationWarningView$$.next(showNotificationWarningBanner);\n });\n }\n\n turnOnNotifications(): void {\n this.notificationsService\n .turnOnOnlyMyEventsNotification$()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: () => {\n this.notificationWarningView$$.next(false);\n this.snackbarService.openSuccessSnack('INBOX.WARNING.NOTIFICATION_UPDATE_SUCCESS');\n },\n error: () => {\n this.snackbarService.openErrorSnack('INBOX.WARNING.NOTIFICATION_UPDATE_ERROR');\n },\n });\n }\n\n onClose(): void {\n this.notificationWarningView$$.next(false);\n this.notificationsService.setCookie();\n }\n}\n","\n {{ 'INBOX.WARNING.TURN_ON_NOTIFICATIONS' | translate }}\n {{ 'INBOX.WARNING.TURN_ON_NOTIFICATIONS_DETAILS' | translate }}\n {{ 'INBOX.WARNING.NOTIFICATION_SETTINGS' | translate }}\n\n\n \n {{ allViewId | viewName | translate }}\n \n \n star\n {{ view.viewId | viewName | translate }} \n \n {{ view.viewId | unreadConversationsCount | async }}\n \n \n\n\n \n\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n OnDestroy,\n OnInit,\n Output,\n Self,\n inject,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport {\n AbstractControl,\n FormControl,\n FormsModule,\n NG_VALUE_ACCESSOR,\n NgControl,\n ReactiveFormsModule,\n SelectControlValueAccessor,\n UntypedFormControl,\n ValidationErrors,\n ValidatorFn,\n} from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { Router } from '@angular/router';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ConversationChannel } from '@vendasta/conversation';\nimport { parsePhoneNumber } from 'libphonenumber-js';\nimport { Observable, Subject, debounceTime, of, shareReplay, skip, switchMap, takeUntil } from 'rxjs';\nimport { InboxContact, InboxContactInfo } from '../../../../core/src/lib/interface/inbox.interface';\nimport { ParticipantService } from '../../../../core/src/lib/participant.service';\nimport { ACCOUNT_GROUP_ID_TOKEN, CONVERSATION_ROUTES_TOKEN } from '../../../../core/src/lib/tokens';\nimport { InboxService } from '../../../../core/src/lib/inbox.service';\nimport { GalaxyFormFieldModule } from '@vendasta/galaxy/form-field';\nimport { Validator } from '@vendasta/shared';\n\nexport class SelectContactControl extends FormControl {\n constructor(value?: InboxContact | string, validator?: ValidatorFn | ValidatorFn[] | null) {\n const validators = validator ? [controlValidator(), validator].flat() : [controlValidator()];\n super(value, validators);\n }\n}\n\nfunction isPhoneNumberAttempt(value: string): boolean {\n return !isNaN(Number(value.replace(/[-+)(\\s]/g, '')));\n}\n\nfunction isEmailAttempt(value: string): boolean {\n return /@.*\\./.test(value);\n}\n\n@Component({\n selector: 'inbox-select-contact',\n templateUrl: './inbox-select-contact.component.html',\n styleUrls: ['./inbox-select-contact.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useClass: SelectControlValueAccessor,\n multi: true,\n },\n ],\n standalone: true,\n imports: [\n CommonModule,\n TranslateModule,\n FormsModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatIconModule,\n MatFormFieldModule,\n MatInputModule,\n MatProgressBarModule,\n MatAutocompleteModule,\n GalaxyFormFieldModule,\n ],\n})\nexport class InboxSelectContactComponent implements OnDestroy, OnInit {\n control?: SelectContactControl;\n private readonly inboxService = inject(InboxService);\n private readonly unsubscribe$ = new Subject();\n\n contacts$?: Observable;\n //TODO: MEGA-868 Delete this and the HTML if validation when the email channel feature is released\n readonly emailChannelSupported = toSignal(this.inboxService.canAccessEmailChannel$);\n\n private readonly accountGroupId = toSignal(inject(ACCOUNT_GROUP_ID_TOKEN));\n private readonly routes = toSignal(inject(CONVERSATION_ROUTES_TOKEN));\n\n @Output() suggestedChannel = new EventEmitter();\n\n constructor(\n private router: Router,\n private participantService: ParticipantService,\n @Self() readonly ngControl: NgControl,\n ) {}\n\n ngOnInit(): void {\n if (!this.ngControl || !(this.ngControl.control instanceof SelectContactControl)) {\n throw new Error('CustomInputComponent: No ControlValueAccessor provided');\n }\n this.control = this.ngControl.control;\n\n this.contacts$ = this.control.valueChanges.pipe(\n debounceTime(200),\n takeUntil(this.unsubscribe$),\n switchMap((term) => {\n if (typeof term === 'object' && term.contactId) {\n return of([] as InboxContact[]);\n }\n const searchTerm = this.getSearchTerm(term);\n\n this.participantService.searchContacts(searchTerm ?? '', this.accountGroupId() ?? '');\n // skip the first value because it always starts as []\n return this.participantService.contacts$.pipe(skip(1));\n }),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n }\n\n ngOnDestroy(): void {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n\n async searchChanged(): Promise {\n const contact = this.control?.value;\n if (typeof contact !== 'string' || !this.control) return;\n\n try {\n if (Validator.isEmail(this.control) === null && contact.length) {\n this.control.setValue({ email: contact });\n return;\n }\n\n const parsed = parsePhoneNumber(contact, 'US');\n if (parsed.isValid()) this.control.setValue({ phone: parsed.number });\n } catch (error) {\n return;\n }\n }\n\n openAddContactForm(): void {\n const routes = this.routes();\n if (!this.control || !routes) return;\n\n const searchTerm = this.control.value;\n\n let inputValue;\n if (typeof searchTerm === 'string' && isPhoneNumberAttempt(searchTerm)) {\n inputValue = { phone: searchTerm };\n }\n if (typeof searchTerm === 'string' && isEmailAttempt(searchTerm)) {\n inputValue = { email: searchTerm };\n }\n\n this.router.navigate([routes.root, 'inbox', 'create-contact'], {\n state: typeof searchTerm === 'object' ? { ...searchTerm } : inputValue ?? { firstName: searchTerm },\n });\n }\n\n displayContactInfo(contact: InboxContact): InboxContactInfo | null {\n if (!contact) return null;\n\n const phone = contact?.phone ? parsePhoneNumber(contact.phone, 'US') : undefined;\n const email = contact?.email;\n\n return {\n name: [contact.firstName, contact.lastName].filter((s) => !!s).join(' '),\n phoneAndEmail: [phone ? `+${phone?.countryCallingCode} ${phone?.formatNational()}` : undefined, email]\n .filter((s) => !!s)\n .join(' '),\n };\n }\n\n displayContact(contact: InboxContact): string {\n if (!contact) return '';\n\n const phone = contact?.phone ? parsePhoneNumber(contact.phone, 'US') : undefined;\n const email = contact?.email;\n\n return [\n contact.firstName,\n contact.lastName,\n phone ? `+${phone?.countryCallingCode} ${phone?.formatNational()}` : undefined,\n email,\n ]\n .filter((s) => !!s)\n .join(' ');\n }\n\n getPhoneSearchTerm(term: string): string {\n const cleanTerm = term.replace(/[-+)(\\s]/g, '').trim();\n\n if (cleanTerm.startsWith('1')) return '+' + cleanTerm;\n\n return '+1' + cleanTerm;\n }\n\n getSearchTerm(term: string | InboxContact): string {\n const emailControlValue = { value: term } as AbstractControl;\n const phoneControlValue = { value: term } as UntypedFormControl;\n\n switch (typeof term) {\n case 'object':\n if (term?.phone) {\n this.suggestedChannel.emit(ConversationChannel.CONVERSATION_CHANNEL_SMS);\n return term?.phone;\n }\n if (term?.email) {\n this.suggestedChannel.emit(ConversationChannel.CONVERSATION_CHANNEL_EMAIL);\n return term?.email;\n }\n return '';\n case 'string':\n if (Validator.isPhoneNumber(phoneControlValue) === null && term.length) {\n this.suggestedChannel.emit(ConversationChannel.CONVERSATION_CHANNEL_SMS);\n return this.getPhoneSearchTerm(term);\n }\n if (Validator.isEmail(emailControlValue) === null && term.length) {\n this.suggestedChannel.emit(ConversationChannel.CONVERSATION_CHANNEL_EMAIL);\n return term;\n }\n this.suggestedChannel.emit(ConversationChannel.CONVERSATION_CHANNEL_UNDEFINED);\n return term;\n default:\n this.suggestedChannel.emit(ConversationChannel.CONVERSATION_CHANNEL_UNDEFINED);\n return term;\n }\n }\n}\n\nfunction controlValidator(): ValidatorFn {\n //TODO: MEGA-868 Delete the service injection and validation when the email channel feature is released\n const canAccessEmailChannel = toSignal(inject(InboxService).canAccessEmailChannel$);\n\n return (control: AbstractControl): ValidationErrors | null => {\n const invalidInputError = canAccessEmailChannel() ? { invalidInput: true } : { phone: true };\n\n const { value: contact } = control;\n\n if (!contact) return { invalidSelection: true };\n\n if (typeof contact === 'string') {\n let validPhoneNumber: boolean;\n try {\n //TODO: MEGA-1093 - use CRM shared validator instead of external library\n const parsedPhoneNumber = parsePhoneNumber(contact, 'US');\n validPhoneNumber = parsedPhoneNumber.isValid();\n } catch (error) {\n validPhoneNumber = false;\n }\n\n const validEmail = Validator.isEmail(control) === null;\n return validPhoneNumber || validEmail ? null : invalidInputError;\n }\n\n return null;\n };\n}\n","
\n \n {{ 'INBOX.NEW_MESSAGE.SEND_TO' | translate }}\n \n \n \n \n \n {{ displayContactInfo(contact).name }}\n \n
\n \n {{ displayContactInfo(contact).phoneAndEmail }}\n \n
\n
\n \n {{ 'INBOX.ERROR.INVALID_PHONE_NUMBER' | translate }}\n \n \n {{ 'INBOX.ERROR.INVALID_INPUT' | translate }}\n \n \n {{ 'INBOX.ERROR.REQUIRED_FIELD' | translate }}\n \n
\n \n add\n {{ 'INBOX.NEW_MESSAGE.CREATE_A_NEW_CONTACT' | translate }}\n \n
\n","import { Component, Inject, OnInit, Optional, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Router } from '@angular/router';\nimport { RegistrationStage, SmsRegistrationService } from '@galaxy/sms';\nimport { BusinessSelectorDialogComponent } from '@vendasta/businesses';\nimport {\n ConversationChannel,\n GlobalParticipantType,\n PlatformLocation,\n SubjectParticipant,\n} from '@vendasta/conversation';\nimport { ProductAnalyticsService } from '@vendasta/product-analytics';\nimport {\n Observable,\n combineLatest,\n filter,\n map,\n of,\n shareReplay,\n switchMap,\n take,\n withLatestFrom,\n firstValueFrom,\n} from 'rxjs';\nimport { ConversationGoogleService } from '../../../../core/src/lib/channels/conversation-google.service';\nimport { ConversationWebchatService } from '../../../../core/src/lib/channels/conversation-webchat.service';\nimport { InboxNavigationService } from '../../../../core/src/lib/inbox-navigation.service';\nimport { InboxService } from '../../../../core/src/lib/inbox.service';\nimport { ConversationConfig } from '../../../../core/src/lib/interface/config.interface';\nimport { ParticipantService } from '../../../../core/src/lib/participant.service';\nimport {\n ACCOUNT_GROUP_ID_TOKEN,\n CONVERSATION_CONFIG_TOKEN,\n CONVERSATION_GOOGLE_BUSINESS_MESSAGES_AVAILABLE_TOKEN,\n CONVERSATION_HOST_APP_INTERFACE_TOKEN,\n CONVERSATION_IMAGE_SERVICE_TOKEN,\n CONVERSATION_ROUTES_TOKEN,\n CONVERSATION_SMS_ENABLED_TOKEN,\n InboxImageService,\n PARTNER_ID_TOKEN,\n GROUP_ID_TOKEN,\n} from '../../../../core/src/lib/tokens';\nimport { InboxApiService } from '@vendasta/conversation';\nimport { SnackbarService } from '@vendasta/galaxy/snackbar-service';\n\n@Component({\n selector: 'inbox-welcome',\n templateUrl: './inbox-welcome.component.html',\n styleUrls: ['./inbox-welcome.component.scss'],\n})\nexport class InboxWelcomeComponent implements OnInit {\n private readonly hostAppInterface = inject(CONVERSATION_HOST_APP_INTERFACE_TOKEN);\n private readonly inboxNav = inject(InboxNavigationService);\n private readonly participantService = inject(ParticipantService);\n\n isBusinessApp = this.inboxService.isBusinessApp;\n private readonly smsRegistrationService = this.isBusinessApp ? inject(SmsRegistrationService) : null;\n\n constructor(\n private readonly analyticsService: ProductAnalyticsService,\n private router: Router,\n private inboxService: InboxService,\n private dialog: MatDialog,\n private inboxApiService: InboxApiService,\n @Inject(CONVERSATION_IMAGE_SERVICE_TOKEN) readonly inboxImageService: InboxImageService,\n @Inject(ACCOUNT_GROUP_ID_TOKEN) readonly accountGroupId$: Observable,\n @Inject(PARTNER_ID_TOKEN) readonly partnerId$: Observable,\n @Optional() @Inject(CONVERSATION_CONFIG_TOKEN) private readonly inboxConfig: ConversationConfig,\n @Inject(CONVERSATION_GOOGLE_BUSINESS_MESSAGES_AVAILABLE_TOKEN)\n readonly googleBusinessMessagesAvailable$: Observable,\n private readonly conversationWebchatService: ConversationWebchatService,\n private readonly conversationGoogleService: ConversationGoogleService,\n @Inject(CONVERSATION_SMS_ENABLED_TOKEN) private smsEnabled$: Observable,\n @Inject(GROUP_ID_TOKEN) readonly groupId$: Observable,\n private snackbarService: SnackbarService,\n ) {}\n\n optInClicked = false;\n\n isPartnerChatEnabled$ = this.inboxService.allowSmbChatWithPartner$;\n\n displayA2pCard$ = this.inboxService.displayA2pCard$();\n multiLocationEnabled$ = this.inboxService.multiLocationEnabled$;\n displayA2pLink$ =\n this.smsRegistrationService !== null\n ? combineLatest([\n this.smsRegistrationService.getAccountGroupInfo$().pipe(map((info) => info.napData.country)),\n this.displayA2pCard$,\n this.smsRegistrationService.registrationStage$,\n ]).pipe(\n shareReplay({ bufferSize: 1, refCount: true }),\n map(([country, displayA2pCard, registrationStage]) => {\n return country === 'US' && displayA2pCard && registrationStage !== RegistrationStage.RegistrationComplete;\n }),\n )\n : of(false);\n\n displayGoogleLink$ = combineLatest([\n this.googleBusinessMessagesAvailable$,\n this.conversationGoogleService.isGoogleBusinessMessagesEnabled$,\n ]).pipe(\n map(([googleBusinessMessagesAvailable, isGoogleBusinessMessagesEnabled]) => {\n return googleBusinessMessagesAvailable && !isGoogleBusinessMessagesEnabled;\n }),\n );\n\n displayWebchatLink$ = this.inboxService.canAccessWebChatSettings$.pipe(\n switchMap((canAccessWebchat) => {\n if (canAccessWebchat) {\n return this.conversationWebchatService.isAnyWebchatEnabled$.pipe(\n map((isAnyWebchatEnabled) => canAccessWebchat && !isAnyWebchatEnabled),\n );\n }\n return of(false);\n }),\n );\n\n isMultiLocation = this.hostAppInterface.getAppOptions().is_multilocation;\n showNewMessage = !this.inboxConfig?.hideNewMessageButton;\n platformLocation = this.inboxService.platformLocation;\n partnerBrandName$ = this.inboxConfig?.partnerBrandName$;\n\n isOnlyPartnerChatAvailable$ = combineLatest([\n this.isPartnerChatEnabled$,\n this.displayA2pLink$,\n this.displayGoogleLink$,\n this.displayWebchatLink$,\n this.smsEnabled$,\n ]).pipe(\n map(([allowPartnerChat, displayA2pLink, displayGoogleLink, displayWebchatLink, smsEnabled]) => {\n return !!(\n this.isBusinessApp &&\n allowPartnerChat &&\n !displayA2pLink &&\n !displayGoogleLink &&\n !displayWebchatLink &&\n !smsEnabled\n );\n }),\n );\n\n settingsUrl$ = this.accountGroupId$.pipe(\n filter((accountGroupId) => !!accountGroupId),\n map((accountGroupId) => `/account/location/${accountGroupId}/settings/inbox`),\n );\n\n private readonly routes = toSignal(inject(CONVERSATION_ROUTES_TOKEN));\n\n ngOnInit(): void {\n this.analyticsService.trackEvent('inbox', 'home', 'view');\n }\n\n newMessage(): void {\n switch (this.platformLocation) {\n case PlatformLocation.PLATFORM_LOCATION_BUSINESS_APP:\n this.messageFromBusinessCenter();\n break;\n case PlatformLocation.PLATFORM_LOCATION_PARTNER_CENTER:\n case PlatformLocation.PLATFORM_LOCATION_SALES_CENTER:\n this.messageFromPartnerCenter();\n break;\n case PlatformLocation.PLATFORM_LOCATION_VENDOR_CENTER:\n this.messageFromVendorCenter();\n break;\n default:\n console.warn(`New message not supported in ${this.platformLocation}.`);\n break;\n }\n }\n\n messageFromBusinessCenter(): void {\n const routes = this.routes();\n if (!routes) return;\n\n combineLatest([\n this.partnerId$,\n this.accountGroupId$,\n this.inboxService.canAccessSMS$,\n this.participantService.buildIAMUserParticipant(),\n ])\n .pipe(take(1))\n .subscribe(([partnerId, accountGroupId, canAccessSMS, currentIAMParticipant]) => {\n if (canAccessSMS === true) {\n this.router.navigate([routes.sendNewMessage]);\n } else {\n this.hostAppInterface.redirectToInternalConversation(\n currentIAMParticipant,\n [\n new SubjectParticipant({\n internalParticipantId: accountGroupId,\n participantType: GlobalParticipantType.GLOBAL_PARTICIPANT_TYPE_ACCOUNT_GROUP,\n }),\n new SubjectParticipant({\n internalParticipantId: partnerId,\n participantType: GlobalParticipantType.GLOBAL_PARTICIPANT_TYPE_PARTNER,\n }),\n ],\n ConversationChannel.CONVERSATION_CHANNEL_INTERNAL,\n );\n }\n });\n }\n\n messageFromPartnerCenter(): void {\n const currentIAMParticipant = this.participantService.buildIAMUserParticipant();\n this.partnerId$\n .pipe(\n switchMap((partnerId) => {\n return this.dialog\n .open(BusinessSelectorDialogComponent, {\n width: '500px',\n data: {\n partnerId: partnerId,\n },\n })\n .afterClosed();\n }),\n withLatestFrom(this.partnerId$, currentIAMParticipant),\n take(1),\n )\n .subscribe(([business, partnerId, currentParticipant]) => {\n if (business) {\n this.inboxNav.gotoConversation(\n [\n new SubjectParticipant({\n internalParticipantId: partnerId,\n participantType: GlobalParticipantType.GLOBAL_PARTICIPANT_TYPE_PARTNER,\n }),\n new SubjectParticipant({\n internalParticipantId: business?.accountGroupId,\n participantType: GlobalParticipantType.GLOBAL_PARTICIPANT_TYPE_ACCOUNT_GROUP,\n }),\n ],\n currentParticipant,\n ConversationChannel.CONVERSATION_CHANNEL_INTERNAL,\n );\n }\n });\n }\n\n messageFromVendorCenter(): void {\n const routes = this.routes();\n if (!routes) return;\n this.router.navigate([routes.root, 'resellers']);\n }\n\n async optIn(): Promise {\n const groupId = await firstValueFrom(this.groupId$);\n try {\n await firstValueFrom(\n this.inboxApiService.upsertProductFeature({\n productFeature: {\n multiLocationEnabled: true,\n },\n fieldMask: {\n paths: ['multi_location_enabled'],\n },\n subjectParticipant: {\n participantType: GlobalParticipantType.GLOBAL_PARTICIPANT_TYPE_GROUP,\n internalParticipantId: groupId,\n },\n }),\n );\n this.snackbarService.openSuccessSnack('INBOX.MULTI_LOCATION.SUCCESS_TO_OPT_IN', { duration: Infinity });\n this.optInClicked = true;\n } catch {\n this.snackbarService.openErrorSnack('INBOX.MULTI_LOCATION.FAIL_TO_OPT_IN');\n }\n }\n}\n","
\n\n

{{ 'INBOX.WELCOME.TITLE' | translate }}

\n\n\n \n
\n

\n {{ 'INBOX.WELCOME_CHAT_WITH_PARTNER.SUBTITLE_1' | translate }}\n

\n

\n {{ 'INBOX.WELCOME_CHAT_WITH_PARTNER.SUBTITLE_2' | translate: { partnerBrandName } }}\n

\n
\n\n
\n

\n {{ 'INBOX.WELCOME.SUBTITLE' | translate }}\n

\n\n \n
\n
\n
\n\n

\n {{ 'INBOX.MULTI_LOCATION.MULTI_LOCATION_SUBTITLE' | translate }}\n

\n
\n\n

\n \n {{ 'INBOX.EMPTY.ACTION' | translate }}\n \n \n {{ 'INBOX.MULTI_LOCATION.MULTI_LOCATION_BUTTON' | translate }}\n \n

\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\n@NgModule({\n imports: [RouterModule.forChild([])],\n exports: [RouterModule],\n})\nexport class ConversationUIRouting {}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, UrlTree } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { InboxService } from '../../../core/src/lib/inbox.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WebChatAccessGuard {\n constructor(readonly inboxService: InboxService) {}\n\n canActivateChild(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _: ActivatedRouteSnapshot,\n ): Observable | Promise | boolean | UrlTree {\n return this.inboxService.canAccessWebChatSettings$;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { GalaxyBadgeModule } from '@vendasta/galaxy/badge';\nimport { GalaxyPipesModule } from '@vendasta/galaxy/pipes';\nimport { ConversationPipesModule } from '../../../../../../../pipes';\nimport { TicketInfo } from '../inbox-ticket/inbox-ticket.component';\n\n@Component({\n selector: 'inbox-ticket-card',\n standalone: true,\n imports: [\n CommonModule,\n GalaxyPipesModule,\n MatCardModule,\n MatIconModule,\n TranslateModule,\n ConversationPipesModule,\n GalaxyBadgeModule,\n MatButtonModule,\n ],\n templateUrl: './inbox-ticket-card.component.html',\n styleUrls: ['./inbox-ticket-card.component.scss'],\n})\nexport class InboxTicketCardComponent {\n protected ticketInfo: TicketInfo;\n protected isMinView = true;\n @Input() set ticketCardInfo(ticket: TicketInfo) {\n this.ticketInfo = ticket;\n }\n showMoreLess() {\n this.isMinView = !this.isMinView;\n }\n}\n","\n \n
\n
\n
{{ ticketInfo.subject }}
\n
\n {{ ticketInfo.status }}\n
\n
\n {{ ticketInfo.createdAt }}\n {{ ticketInfo.groupName }}\n {{ ticketInfo.channel }}\n
\n {{ ticketInfo.description | trimDescription : 80 }}\n {{ ticketInfo.description }} \n 80 && isMinView\" (click)=\"showMoreLess()\">\n {{ 'INBOX.TICKETS.VIEW_MORE' | translate }}\n \n 80 && !isMinView\" (click)=\"showMoreLess()\">\n {{ 'INBOX.TICKETS.VIEW_LESS' | translate }}\n \n
\n \n
\n {{ ticketInfo.requester }}\n
\n \n
\n
\n","import { Ticket } from '@vendasta/support';\n\nconst VMF_INSTANCE = 'https://vendasta-support.zendesk.com/agent/tickets/';\nconst URL_REGEX = /(?:https?|ftp):\\/\\/[\\n\\S]+/g;\nconst badgeColor: Record = {\n new: 'blue',\n open: 'grey',\n hold: 'yellow',\n pending: 'yellow',\n solved: 'green',\n closed: 'green',\n};\n\nexport class TicketInfo {\n id: string;\n subject: string;\n description: string;\n status: string;\n requester: string;\n createdAt: string;\n channel: string;\n groupName: string;\n badgeColor: string;\n url: string;\n total: number;\n\n constructor(ticket: Ticket) {\n this.id = ticket.id.toString();\n this.subject = ticket.subject;\n this.description = this.formatDescription(ticket.description);\n this.status = ticket.status;\n this.requester = ticket.requester.name;\n this.createdAt = ticket.createdAt.toString().substring(0, 15);\n this.channel = ticket.via.channel;\n this.groupName = ticket.group.name;\n this.badgeColor = badgeColor[ticket.status] ? badgeColor[ticket.status] : 'grey';\n this.url = VMF_INSTANCE.concat(ticket.id.toString());\n }\n\n private formatDescription(text: string) {\n text = text.replace(URL_REGEX, '');\n return text.substring(0, 1200);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { GalaxyAlertModule } from '@vendasta/galaxy/alert';\nimport { GalaxyFormFieldModule } from '@vendasta/galaxy/form-field';\nimport { GalaxyLoadingSpinnerModule } from '@vendasta/galaxy/loading-spinner';\nimport { GalaxyPipesModule } from '@vendasta/galaxy/pipes';\nimport { SortBy, SortOrder, SupportApiService, Status as SupportStatus } from '@vendasta/support';\nimport {\n BehaviorSubject,\n Observable,\n ReplaySubject,\n combineLatest,\n map,\n skipWhile,\n startWith,\n switchMap,\n tap,\n} from 'rxjs';\nimport { ConversationPipesModule } from '../../../../../../../pipes';\nimport { InboxTicketCardComponent } from '../inbox-ticket-card/inbox-ticket-card.component';\nimport { TicketInfo } from './ticket-info';\n\ntype Status = 'open' | 'closed';\n\nenum statusEnum {\n OPEN = 'open',\n CLOSED = 'closed',\n}\n\nconst CLOSED_STATUS = [SupportStatus.STATUS_CLOSED, SupportStatus.STATUS_SOLVED];\nconst OPEN_STATUS = [\n SupportStatus.STATUS_HOLD,\n SupportStatus.STATUS_NEW,\n SupportStatus.STATUS_OPEN,\n SupportStatus.STATUS_PENDING,\n];\nconst PAGE = 5;\n\ninterface TicketList {\n tickets: TicketInfo[];\n total: number;\n continue: boolean;\n}\n@Component({\n selector: 'inbox-ticket-list',\n templateUrl: './inbox-ticket-list.component.html',\n styleUrls: ['./inbox-ticket-list.component.scss'],\n standalone: true,\n imports: [\n CommonModule,\n GalaxyPipesModule,\n MatIconModule,\n TranslateModule,\n ConversationPipesModule,\n InboxTicketCardComponent,\n GalaxyFormFieldModule,\n MatCardModule,\n GalaxyLoadingSpinnerModule,\n GalaxyAlertModule,\n ],\n})\nexport class InboxTicketListComponent implements OnInit {\n @Input() set partner(partnerId: string) {\n this.partnerId$$.next(partnerId);\n }\n @Input() title: string;\n @Input() status: Status;\n\n private partnerId$$ = new ReplaySubject(1);\n statusName: string;\n\n private readonly isLoading$$ = new BehaviorSubject(true);\n protected readonly isLoading$ = this.isLoading$$.asObservable();\n\n private showMore$$ = new BehaviorSubject(PAGE);\n private nextPage$ = this.showMore$$.asObservable();\n\n readonly tickets$ = this.partnerId$$.pipe(\n skipWhile((partner) => !partner),\n tap(() => this.isLoading$$.next(true)),\n tap(() => this.showMore$$.next(PAGE)),\n switchMap((partnerId) =>\n this.supportService.searchTickets({\n partnerId: partnerId,\n searchTerm: '',\n sortBy: this.status === statusEnum.OPEN ? SortBy.SORT_BY_CREATED_AT : SortBy.SORT_BY_UPDATED_AT,\n sortOrder: SortOrder.SORT_ORDER_DESC,\n statuses: this.status === statusEnum.OPEN ? OPEN_STATUS : CLOSED_STATUS,\n }),\n ),\n map((res) => {\n return {\n tickets: res?.tickets?.map((ticket) => new TicketInfo(ticket)) || [],\n total: res?.count || 0,\n } as TicketList;\n }),\n startWith({ tickets: [], total: 0, continue: false } as TicketList),\n tap(() => this.isLoading$$.next(false)),\n );\n\n pagedTickets$: Observable = combineLatest([this.tickets$, this.nextPage$]).pipe(\n map(([tickets, page]) => {\n return {\n tickets: tickets.tickets.slice(0, page),\n total: tickets.total,\n continue: page < tickets.total,\n } as TicketList;\n }),\n );\n\n constructor(private readonly supportService: SupportApiService) {}\n\n ngOnInit() {\n this.statusName = statusEnum.OPEN === this.status ? statusEnum.OPEN : statusEnum.CLOSED;\n }\n\n loadClosed(): void {\n this.showMore$$.next(this.showMore$$.value + 5);\n }\n}\n","\n \n \n \n \n \n \n \n \n \n {{ title }} ({{ ticketList.value.total }})\n \n \n \n 0\">\n
\n \n
\n
\n \n
\n
\n\n \n \n \n \n {{ 'INBOX.TICKETS.NO_TICKETS' | translate : { status: statusName } }}\n \n \n \n \n \n \n {{ 'INBOX.TICKETS.ERROR_TICKETS' | translate : { status: statusName } }}\n \n \n\n","import { Component, Input, inject } from '@angular/core';\nimport { BehaviorSubject, map, skipWhile } from 'rxjs';\nimport { ConversationDetail } from '../../../../../../../core/src/lib//interface/conversation.interface';\nimport { CONVERSATION_HOST_APP_INTERFACE_TOKEN } from '../../../../../../../core/src/lib/tokens';\n\nconst VMF_INSTANCE = 'https://vendasta-support.zendesk.com/agent/tickets/';\n\nexport type TicketInfo = {\n id: string;\n subject: string;\n description: string;\n status: string;\n requester: string;\n createdAt: string;\n channel: string;\n groupName: string;\n badgeColor: string;\n url: string;\n total: number;\n};\n\n@Component({\n selector: 'inbox-ticket',\n templateUrl: './inbox-ticket.component.html',\n styleUrls: ['./inbox-ticket.component.scss'],\n})\nexport class InboxTicketComponent {\n private readonly hostAppInterface = inject(CONVERSATION_HOST_APP_INTERFACE_TOKEN);\n\n @Input() set conversationDetails(conversationDetail: ConversationDetail) {\n this.conversationSubject$$.next(conversationDetail);\n }\n\n private readonly conversationSubject$$ = new BehaviorSubject(null);\n readonly partnerAccountGroupId$ = this.conversationSubject$$.asObservable().pipe(\n skipWhile((detail) => !detail),\n map((detail) => {\n return this.hostAppInterface.getConversationTitleInfo(detail).secondarySubtitle;\n }),\n );\n\n openCreateTicket() {\n window.open(VMF_INSTANCE.concat('new/1'), '_blank');\n }\n}\n","
\n \n
\n
\n
\n \n
\n
\n
\n \n
\n","import { AsyncPipe, NgIf } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { AccountGroupService, ProjectionFilter } from '@galaxy/account-group';\nimport { PartnerApiService } from '@galaxy/partner';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { ParticipantType } from '@vendasta/conversation';\nimport { GalaxyAvatarModule } from '@vendasta/galaxy/avatar';\nimport { SnackbarService } from '@vendasta/galaxy/snackbar-service';\nimport { filterNullAndUndefined } from '@vendasta/rx-utils';\nimport { SalespersonService } from '@vendasta/sales';\nimport {\n Observable,\n ReplaySubject,\n catchError,\n defaultIfEmpty,\n distinctUntilChanged,\n filter,\n map,\n of,\n shareReplay,\n switchMap,\n} from 'rxjs';\nimport { MARKETING_SERVICES_PIDS, SUPPORT_PID } from '../../../../core/src/lib/conversation.constants';\nimport { ConversationService } from '../../../../core/src/lib/conversation.service';\nimport { ConversationDetail } from '../../../../core/src/lib/interface/conversation.interface';\nimport { CONVERSATION_HOST_APP_INTERFACE_TOKEN, PARTNER_ID_TOKEN } from '../../../../core/src/lib/tokens';\n\ninterface SalesContact {\n name?: string | null;\n image?: string | null;\n}\n\n@Component({\n selector: 'inbox-conversation-assignee',\n templateUrl: './inbox-conversation-assignee.component.html',\n styleUrls: ['./inbox-conversation-assignee.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [AsyncPipe, NgIf, TranslateModule, GalaxyAvatarModule],\n})\nexport class InboxConversationAssigneeComponent {\n private readonly hostAppInterface = inject(CONVERSATION_HOST_APP_INTERFACE_TOKEN);\n\n private conversationDetails$$ = new ReplaySubject(1);\n private conversationDetails$ = this.conversationDetails$$.asObservable().pipe(distinctUntilChanged());\n\n conversationInfo$ = this.conversationDetails$.pipe(\n map((details) => {\n if (!details) return null;\n const res = this.hostAppInterface.getRecipient(details);\n if (Array.isArray(res) && res.length > 0) {\n return res[0];\n } else if (!Array.isArray(res) && res) {\n return res;\n } else {\n throw new Error(this.translateService.instant('ERROR_LOADING_RECIPIENT'));\n }\n }),\n catchError((error) => {\n this.snackbarService.openErrorSnack(error);\n return of(null);\n }),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n private readonly partnerId = toSignal(inject(PARTNER_ID_TOKEN));\n\n accountGroupPartnerId$ = this.conversationInfo$.pipe(\n switchMap((accountGroupOrPartner) => {\n const partnerId = this.partnerId();\n if (\n accountGroupOrPartner?.participantType === ParticipantType.PARTICIPANT_TYPE_PARTNER &&\n partnerId &&\n (partnerId === SUPPORT_PID || MARKETING_SERVICES_PIDS.includes(partnerId))\n ) {\n return this.getMappedAccountPartner(accountGroupOrPartner.partnerId);\n } else if (accountGroupOrPartner?.participantType === ParticipantType.PARTICIPANT_TYPE_ACCOUNT_GROUP) {\n return of(accountGroupOrPartner.accountGroupId);\n } else {\n return of(null);\n }\n }),\n catchError(() => of(null)),\n );\n\n assignedContact$ = this.accountGroupPartnerId$.pipe(\n filterNullAndUndefined(),\n switchMap((accountGroupId) => this.getSalesPersonDetails(accountGroupId)),\n switchMap((salesPerson) => this.getSalesPersonContactInfo(salesPerson.partnerId, salesPerson.salesPersonId)),\n );\n\n readonly isAccountGroupPartnerType$ = this.accountGroupPartnerId$.pipe(\n map((account) => !!account),\n defaultIfEmpty(false),\n );\n\n @Input() set conversationDetail(details: ConversationDetail | null) {\n this.conversationDetails$$.next(details);\n }\n\n constructor(\n private readonly accountGroupService: AccountGroupService,\n private readonly partnerApiService: PartnerApiService,\n private readonly conversationService: ConversationService,\n private readonly translateService: TranslateService,\n private readonly salespersonService: SalespersonService,\n private readonly snackbarService: SnackbarService,\n ) {}\n\n getSalesPersonDetails(accountGroupId: string): Observable<{ salesPersonId: string; partnerId: string }> {\n return this.accountGroupService\n .get(accountGroupId, new ProjectionFilter({ accountGroupExternalIdentifiers: true }))\n .pipe(\n filter((res) => !!res),\n map((res) => ({\n salesPersonId: res.externalIdentifiers?.salesPersonId || '',\n partnerId: res.externalIdentifiers?.partnerId || '',\n })),\n defaultIfEmpty({ salesPersonId: '', partnerId: '' }),\n );\n }\n\n getSalesPersonContactInfo(partnerId: string, salesPersonId: string): Observable {\n if (partnerId !== '' && salesPersonId !== '') {\n return this.salespersonService.getMultiSalesperson(partnerId, [salesPersonId]).pipe(\n map((res) => res?.[0]),\n filter((res) => !!res),\n map((contact): SalesContact => {\n return {\n name:\n [contact.firstName, contact.lastName].join(' ').trim().length > 0\n ? [contact.firstName, contact.lastName].join(' ').trim()\n : this.translateService.instant('INBOX.TOPBAR.NONE'),\n image: contact.photoUrlHttps ? contact.photoUrlHttps : '',\n };\n }),\n defaultIfEmpty({\n name: this.translateService.instant('INBOX.TOPBAR.NONE'),\n image: null,\n }),\n );\n } else {\n return of({\n name: this.translateService.instant('INBOX.TOPBAR.NONE'),\n image: null,\n });\n }\n }\n\n getMappedAccountPartner(partnerId: string): Observable {\n return this.partnerApiService\n .getPartnerAccountGroupMapping({ partnerId: partnerId, accountGroupPartnerId: '' })\n .pipe(\n map((accountGroupMapping) => {\n return accountGroupMapping.accountGroupId || '';\n }),\n );\n }\n}\n","\n \n
\n
{{ 'INBOX.TOPBAR.ASSIGNEE' | translate }}:
\n \n
{{ salesContact.name }}
\n
\n
\n
\n","import { Component, Input, inject } from '@angular/core';\nimport { ConversationDetail } from '../../../../core/src/lib/interface/conversation.interface';\nimport { CONVERSATION_HOST_APP_INTERFACE_TOKEN } from '../../../../core/src/lib/tokens';\nimport { ConversationPipesModule } from '../../../../pipes/src/pipes.module';\n\n@Component({\n selector: 'inbox-conversation-account',\n template: `\n
\n
\n {{ subtitle | messageCodeBacktick }}\n
\n
\n `,\n styleUrls: ['./inbox-conversation-subtitle.component.scss'],\n standalone: true,\n imports: [ConversationPipesModule],\n})\nexport class InboxConversationSubtitleAccountComponent {\n private readonly hostAppInterface = inject(CONVERSATION_HOST_APP_INTERFACE_TOKEN);\n\n subtitle = '';\n\n @Input() set conversationDetail(value: ConversationDetail | null) {\n if (!value) return;\n const titleInfo = this.hostAppInterface.getConversationTitleInfo(value);\n this.subtitle = titleInfo.subtitle ?? '';\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class InboxInfoDrawerService {\n private isOpen$$ = new BehaviorSubject(false);\n isOpenDrawer$ = this.isOpen$$.asObservable();\n\n public toggle(): void {\n this.isOpen$$.next(!this.isOpen$$.value);\n }\n\n public setIsOpen(isOpen: boolean): void {\n this.isOpen$$.next(isOpen);\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef, MatDialogModule } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\nimport { CommonModule } from '@angular/common';\nimport { TranslateModule } from '@ngx-translate/core';\n\nexport interface DialogData {\n summary: string;\n}\n\n@Component({\n selector: 'inbox-summarize-conversation-dialog.component',\n templateUrl: 'summarize-conversation-dialog.component.html',\n standalone: true,\n imports: [CommonModule, MatDialogModule, MatButtonModule, TranslateModule],\n})\nexport class SummarizeConversationDialogComponent {\n readonly data = inject(MAT_DIALOG_DATA);\n\n constructor(public dialogRef: MatDialogRef) {}\n\n ok(): void {\n this.dialogRef.close();\n }\n}\n","

\n {{ 'INBOX.CONVERSATION_SUMMARY' | translate }}\n

\n\n {{ data.summary }}\n\n\n \n\n","import { AsyncPipe, NgClass, NgFor, NgIf } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Inject,\n Input,\n Optional,\n Output,\n inject,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { Router } from '@angular/router';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { GalaxyBadgeModule } from '@vendasta/galaxy/badge';\nimport { BehaviorSubject, firstValueFrom, map, of, switchMap } from 'rxjs';\nimport { ConversationService } from '../../../../../../core/src/lib/conversation.service';\nimport { InboxService } from '../../../../../../core/src/lib/inbox.service';\nimport {\n ConversationUnseen,\n KabobDynamicButton,\n} from '../../../../../../core/src/lib/interface/conversation.interface';\nimport { HostAppInterface } from '../../../../../../core/src/lib/interface/host-app.interface';\nimport {\n CONVERSATION_HOST_APP_INTERFACE_TOKEN,\n CONVERSATION_ROUTES_TOKEN,\n} from '../../../../../../core/src/lib/tokens';\nimport { ViewModeService } from '../../../../../../core/src/lib/view-mode.service';\nimport { InboxConversationAssigneeComponent } from '../../../../components/inbox-conversation-assignee/inbox-conversation-assignee.component';\nimport { InboxConversationSubtitleAccountComponent } from '../../../../components/inbox-conversation-subtitle/inbox-conversation-subtitle.component';\nimport { InboxConversationTitleComponent } from '../../../../components/inbox-conversation-title/inbox-conversation-title.component';\nimport { INBOX_NAVIGATION_LINK } from '../../../../constants';\nimport { InboxInfoDrawerService } from '../inbox-info-pane/inbox-info-drawer.service';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DialogData, SummarizeConversationDialogComponent } from './summarize-conversation-dialog.component';\nimport { ConversationApiService } from '@vendasta/conversation';\nimport { SnackbarService } from '@vendasta/galaxy/snackbar-service';\n\n@Component({\n selector: 'inbox-messages-top-bar',\n templateUrl: './inbox-messages-top-bar.component.html',\n styleUrls: ['./inbox-messages-top-bar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n // Common\n AsyncPipe,\n NgFor,\n NgIf,\n NgClass,\n\n // Material\n MatButtonModule,\n MatIconModule,\n MatMenuModule,\n MatTooltipModule,\n\n // Everything else\n GalaxyBadgeModule,\n InboxConversationAssigneeComponent,\n InboxConversationTitleComponent,\n TranslateModule,\n InboxConversationSubtitleAccountComponent,\n ],\n})\nexport class InboxMessagesTopBarComponent {\n conversationDetail$ = this.conversationService.currentConversationDetail$;\n kabobAvailableActions$ = this.conversationDetail$.pipe(\n switchMap((conversationDetail) => {\n if (!conversationDetail) return of(new Array());\n return this.hostAppInterface.getKabobAvailableActions(conversationDetail);\n }),\n );\n\n isInternalInfoDeleted = false;\n unseen$$ = new BehaviorSubject({ read: true, conversationId: '' });\n unseen$ = this.unseen$$.asObservable();\n\n readonly showInboxViews$ = this.inboxService.showInboxViews$;\n\n // readonly isBusinessApp = true;\n readonly isBusinessApp = this.inboxService.isBusinessApp;\n\n // only display assignee saleperson for sales center and partner center for now\n readonly displayAssignee = this.inboxService.isSalesCenter || this.inboxService.isPartnerCenter;\n\n readonly showConversationSummary$ = this.inboxService.isConversationSummaryEnabled$;\n\n @Input() set unseen(value: ConversationUnseen) {\n this.unseen$$.next(value);\n }\n @Input() isFollowing = false;\n @Input() isOpen = false;\n\n useSidebarStyles$ = this.viewModeService.viewMode$.pipe(map((viewMode) => viewMode === 'sidebar'));\n\n @Input() accountGroupId = '';\n @Input() groupId = '';\n\n @Output() markedUnread = new EventEmitter();\n @Output() changeFollowStatus = new EventEmitter();\n @Output() changeOpenStatus = new EventEmitter();\n\n private readonly routes = toSignal(inject(CONVERSATION_ROUTES_TOKEN));\n\n constructor(\n private router: Router,\n private conversationService: ConversationService,\n private inboxService: InboxService,\n @Optional()\n private viewModeService: ViewModeService,\n private inboxInfoDrawerService: InboxInfoDrawerService,\n @Inject(CONVERSATION_HOST_APP_INTERFACE_TOKEN) private readonly hostAppInterface: HostAppInterface,\n private readonly dialog: MatDialog,\n private conversationAPIService: ConversationApiService,\n private snackbarService: SnackbarService,\n private translateService: TranslateService,\n ) {}\n\n back(): void {\n if (this.routes()?.useModal) {\n this.conversationService.removeLastConversationId();\n\n this.router.navigate(INBOX_NAVIGATION_LINK, {\n queryParamsHandling: 'merge',\n queryParams: { inboxPrefilledMessage: null },\n });\n return;\n }\n\n if (this.accountGroupId) {\n this.router.navigateByUrl(`/account/location/${this.accountGroupId}/inbox`);\n } else if (this.groupId) {\n this.router.navigateByUrl(`/account/brands/${this.groupId}/inbox`);\n } else {\n this.router.navigateByUrl(`/inbox`);\n }\n }\n\n markUnread(): void {\n this.markedUnread.emit({\n read: false,\n });\n }\n\n markRead(): void {\n this.markedUnread.emit({\n read: true,\n });\n }\n\n updateFollowStatus(): void {\n this.changeFollowStatus.emit(!this.isFollowing);\n }\n\n toggleDetailsDrawer() {\n this.inboxInfoDrawerService.toggle();\n }\n\n toggleConversationOpen(): void {\n this.changeOpenStatus.emit(!this.isOpen);\n }\n\n async openConversationSummaryModal(): Promise {\n const conversation = await firstValueFrom(this.conversationDetail$);\n\n if (!conversation) return;\n\n try {\n const resp = await firstValueFrom(\n this.conversationAPIService.getConversationSummary({\n conversationId: conversation.conversation.conversationId,\n }),\n );\n const data: DialogData = {\n summary: resp.summary,\n };\n this.dialog.open(SummarizeConversationDialogComponent, {\n data: data,\n width: '660px',\n });\n } catch (e) {\n this.snackbarService.openErrorSnack(this.translateService.instant('INBOX.ERROR_GETTING_CONVERSATION_SUMMARY'));\n }\n }\n}\n","\n \n arrow_back\n \n\n
\n
\n
\n \n
\n
\n \n {{ 'INBOX.INFO.DELETED' | translate }}\n \n \n
\n
\n \n \n
\n\n
\n \n \n \n {{ isFollowing ? 'star' : 'star_border' }}\n \n\n \n \n {{ isFollowing ? 'star' : 'star_border' }}\n {{ (isFollowing ? 'INBOX.VIEWS.FOLLOWING' : 'INBOX.VIEWS.FOLLOW') | translate }}\n \n \n\n \n more_vert\n \n \n \n
\n {{ 'INBOX.SENDER.SUMMARIZE_CONVERSATION' | translate }}\n \n
\n \n \n {{ 'INBOX.SENDER.MARK_READ' | translate }}\n \n \n \n \n \n \n\n \n \n \n \n
\n
\n\n\n\n \n\n","import { CommonModule } from '@angular/common';\nimport { Component, Inject, OnInit, Pipe, PipeTransform } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { TranslateModule } from '@ngx-translate/core';\nimport DOMPurify from 'dompurify';\n\n@Pipe({\n name: 'sanitize',\n standalone: true,\n})\nexport class SanitizePipe implements PipeTransform {\n constructor(private sanitizer: DomSanitizer) {}\n\n public transform(value: string | Node): SafeHtml {\n // While allowing iframes is not best practice, a lot of embedded content relies on them. This does allow a\n // potentially malicious actor to inject what appears to be an element of business centre for a social\n // engineering attack, but the browser should prevent any XSS attacks.\n return this.sanitizer.bypassSecurityTrustHtml(DOMPurify.sanitize(value, { ADD_TAGS: ['iframe'] }));\n }\n}\n\nexport interface TermsOfServiceData {\n termsOfService: string;\n accepted: boolean;\n partner?: TermsOfServiceDataPartner;\n}\n\nexport interface TermsOfServiceDataPartner {\n name: string;\n}\n\n@Component({\n selector: 'inbox-terms-of-service',\n templateUrl: './inbox-terms-of-service.component.html',\n styleUrls: ['./inbox-terms-of-service.component.scss'],\n standalone: true,\n imports: [\n CommonModule,\n TranslateModule,\n MatButtonModule,\n MatCheckboxModule,\n MatDialogModule,\n FormsModule,\n SanitizePipe,\n ],\n})\nexport class InboxTermsOfServiceDialogComponent implements OnInit {\n checkedTerms = false;\n showFullTOS = false;\n constructor(\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: TermsOfServiceData,\n ) {}\n\n ngOnInit(): void {\n this.data.accepted = false;\n if (this.data?.partner) {\n this.data.termsOfService = this.replaceVariables(this.data?.termsOfService);\n }\n\n this.data.termsOfService = this.convertToHtml(this.data?.termsOfService);\n }\n\n toggleTOS() {\n this.showFullTOS = !this.showFullTOS;\n }\n\n convertToHtml(escapeString: string): string {\n const parser = new DOMParser();\n return parser.parseFromString(parser.parseFromString(escapeString, 'text/html').body.textContent, 'text/html').body\n .textContent;\n }\n\n accepts(value: boolean): void {\n this.data.accepted = value;\n this.close();\n }\n\n replaceVariables(termsOfService: string): string {\n return termsOfService.replace(/\\[\\[partnerName\\]\\]/gm, this.data?.partner?.name);\n }\n\n close(): void {\n this.dialogRef.close(this.data);\n }\n}\n","

{{ 'INBOX.TERMS_OF_SERVICE.FULL_TITLE' | translate }}

\n\n \n
\n {{ 'INBOX.TERMS_OF_SERVICE.INTRO_FIRST_LINE' | translate }}\n {{ 'INBOX.TERMS_OF_SERVICE.TITLE' | translate }}.\n
\n\n \n {{ 'INBOX.TERMS_OF_SERVICE.ACCEPTANCE_MESSAGE' | translate }}\n \n
\n \n \n \n \n
\n\n\n \n
\n
\n \n \n \n
\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n Inject,\n Input,\n NgZone,\n Signal,\n ViewChild,\n inject,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n ConversationChannel,\n GlobalParticipantType,\n InboxApiService,\n MessageType,\n ParticipantType,\n SendMessageResponse,\n SetLastSeenRequestStatus,\n SubjectParticipant,\n} from '@vendasta/conversation';\nimport { SnackbarService } from '@vendasta/galaxy/snackbar-service';\nimport { FileInfo } from '@vendasta/galaxy/uploader';\nimport { ProductAnalyticsService } from '@vendasta/product-analytics';\nimport { filterNullAndUndefined } from '@vendasta/rx-utils';\nimport {\n BehaviorSubject,\n Observable,\n ReplaySubject,\n combineLatest,\n distinctUntilChanged,\n firstValueFrom,\n map,\n of,\n switchMap,\n take,\n tap,\n filter,\n} from 'rxjs';\nimport { AlertOptions } from '../../../../core/src/lib/channels/conversation-channel.abstract';\nimport { getFollowViewID, toFirestoreId } from '../../../../core/src/lib/conversation-utils';\nimport { ConversationService } from '../../../../core/src/lib/conversation.service';\nimport { InboxNotificationService } from '../../../../core/src/lib/inbox-notification.service';\nimport { InboxTermsOfService } from '../../../../core/src/lib/inbox-terms-of-service.service';\nimport { InboxService } from '../../../../core/src/lib/inbox.service';\nimport {\n ConversationDetail,\n ConversationUnseen,\n MessageInfo,\n TermsOfServiceResult,\n} from '../../../../core/src/lib/interface/conversation.interface';\nimport { HostAppInterface } from '../../../../core/src/lib/interface/host-app.interface';\nimport { isContactInformationMissing } from '../../../../core/src/lib/participant-utils';\nimport { ParticipantService } from '../../../../core/src/lib/participant.service';\nimport {\n ACCOUNT_GROUP_ID_TOKEN,\n CONVERSATION_HOST_APP_INTERFACE_TOKEN,\n CONVERSATION_ROUTES_TOKEN,\n GROUP_ID_TOKEN,\n PARTNER_ID_TOKEN,\n USER_ID_TOKEN,\n} from '../../../../core/src/lib/tokens';\nimport { ViewService } from '../../../../core/src/lib/view.service';\nimport { InboxMessageTextComponent } from './components/inbox-message-text/inbox-message-text.component';\nimport {\n InboxTermsOfServiceDialogComponent,\n TermsOfServiceData,\n} from './components/inbox-terms-of-service/inbox-terms-of-service.component';\n\n@Component({\n selector: 'inbox-chat',\n templateUrl: './inbox-chat.component.html',\n styleUrls: ['./inbox-chat.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class InboxChatComponent {\n conversationService = inject(ConversationService);\n\n @Input() set id(value: string) {\n this.conversationService.setCurrentFirestoreConversationId(value);\n }\n @Input() viewModel?: boolean;\n\n @ViewChild('inboxTextComponent') inboxTextComponent?: InboxMessageTextComponent;\n\n readonly isBusinessApp = this.inboxService.isBusinessApp;\n\n destroyRef = inject(DestroyRef);\n\n private readonly notificationWarningChat$$: ReplaySubject = new ReplaySubject();\n readonly notificationWarningChat$ = this.notificationWarningChat$$.asObservable();\n readonly isOpen = signal(false);\n\n readonly currentConversationDetail$ = this.conversationService.currentConversationDetail$.pipe(\n tap((conversationDetails) => this.isOpen.set(conversationDetails?.conversation?.isOpen ?? false)),\n );\n readonly currentConversationDetail = toSignal(this.currentConversationDetail$, {\n initialValue: null,\n });\n\n messages$ = this.conversationService.messages$;\n events$ = this.conversationService.events$;\n loadingMessages$ = this.conversationService.loadingMessages$;\n\n private readonly fileChange$$ = new ReplaySubject(1);\n readonly fileChange$ = this.fileChange$$.asObservable();\n\n private partnerBrandName?: string;\n\n readonly unseenDefault: ConversationUnseen = {\n read: true,\n conversationId: '',\n };\n private readonly unseen$$: BehaviorSubject = new BehaviorSubject(\n this.unseenDefault,\n );\n readonly unseen$ = this.unseen$$.asObservable();\n\n private readonly isFollowing$$: BehaviorSubject = new BehaviorSubject(false);\n readonly isFollowing$ = this.isFollowing$$.asObservable();\n\n readonly isImpersonating$: Observable = this.conversationService.isUserImpersonated$;\n\n readonly isOpenAIChannel$: Observable = this.currentConversationDetail$.pipe(\n map((conversation) => conversation?.conversation?.channel === ConversationChannel.CONVERSATION_CHANNEL_OPENAI),\n );\n\n readonly isNotGoogleNorFacebookChannel$: Observable = this.currentConversationDetail$.pipe(\n map(\n (conversation) =>\n conversation?.conversation?.channel !==\n ConversationChannel.CONVERSATION_CHANNEL_GOOGLE_BUSINESS_COMMUNICATIONS &&\n conversation?.conversation?.channel !== ConversationChannel.CONVERSATION_CHANNEL_FACEBOOK,\n ),\n );\n\n readonly termsOfServiceResult$: Observable = combineLatest([\n this.inboxTermsOfService.getTermsOfServiceText$,\n this.inboxTermsOfService.termsOfServiceAccepted$,\n this.conversationService.isUserImpersonated$,\n ]).pipe(\n map(([termsOfServiceTextMessage, termsOfServiceAccepted, isImpersonating]) => {\n const showTOS = !isImpersonating && termsOfServiceTextMessage && !termsOfServiceAccepted;\n return {\n termsOfServiceAccepted: termsOfServiceAccepted,\n termsOfServiceTextMessage: showTOS ? termsOfServiceTextMessage : null,\n } as TermsOfServiceResult;\n }),\n );\n\n banners$ = this.currentConversationDetail$.pipe(\n map((conversation) => {\n return this.isBusinessApp\n ? []\n : conversation?.participants\n ?.filter(\n (participant) =>\n participant.isSubjectParticipant &&\n participant.internalParticipantId &&\n (participant.participantType === ParticipantType.PARTICIPANT_TYPE_PARTNER ||\n participant.participantType === ParticipantType.PARTICIPANT_TYPE_VENDOR),\n )\n ?.map(\n (participant) =>\n new SubjectParticipant({\n // We only want to get and display banners for Partners and Vendors. Since currently we only allow\n // Partners to set configurations we must look for the Partner's configuration for that vendor.\n participantType: GlobalParticipantType.GLOBAL_PARTICIPANT_TYPE_PARTNER,\n internalParticipantId: participant.internalParticipantId,\n }),\n ) || [];\n }),\n switchMap((participants) => {\n if (participants.length === 0) {\n return of(null);\n }\n return this.inboxApiService.getMultiConfiguration({\n subjectParticipants: participants,\n });\n }),\n map((configs) =>\n configs?.configurations\n ?.filter((config) => !!config?.availabilityMessage && config?.showAvailabilityMessage)\n ?.map((config) => config.availabilityMessage),\n ),\n );\n\n readonly inboxPrefilledMessage$ = this.route.queryParamMap.pipe(map((params) => params.get('inboxPrefilledMessage')));\n\n readonly isRecipientDeleted$ = this.currentConversationDetail$.pipe(\n filterNullAndUndefined(),\n map((conversation) => this.hostAppInterface.isRecipientInternalInfoDeleted(conversation)),\n );\n\n readonly availableChannels$ = this.conversationService.availableChannels$;\n\n readonly missingContactInformation$ = combineLatest([this.currentConversationDetail$, this.availableChannels$]).pipe(\n map(([conversation, availableChannels]) => {\n if (!conversation) {\n return false;\n }\n return isContactInformationMissing(conversation, availableChannels);\n }),\n );\n\n readonly showContactAlert$: Observable = combineLatest([\n this.isRecipientDeleted$,\n this.missingContactInformation$,\n this.isNotGoogleNorFacebookChannel$,\n ]).pipe(\n map(\n ([isRecipientDeleted, missingContactInformation, isNotGoogleNorFacebookChannel]) =>\n isNotGoogleNorFacebookChannel && !isRecipientDeleted && missingContactInformation,\n ),\n );\n\n disabledAlert: Signal;\n isWebChatConversation$ = this.currentConversationDetail$.pipe(\n map(\n (currentConversationDetail) =>\n currentConversationDetail?.conversation?.channel === ConversationChannel.CONVERSATION_CHANNEL_WEB_CHAT,\n ),\n );\n\n private readonly accountGroupId$ = inject(ACCOUNT_GROUP_ID_TOKEN);\n private readonly partnerId$ = inject(PARTNER_ID_TOKEN);\n private readonly groupId$ = inject(GROUP_ID_TOKEN);\n readonly accountGroupId = toSignal(this.accountGroupId$);\n readonly partnerId = toSignal(this.partnerId$);\n readonly groupId = toSignal(this.groupId$);\n readonly userId = toSignal(inject(USER_ID_TOKEN));\n readonly routes = toSignal(inject(CONVERSATION_ROUTES_TOKEN));\n\n constructor(\n private readonly router: Router,\n private readonly route: ActivatedRoute,\n private readonly snackbarService: SnackbarService,\n private readonly analyticsService: ProductAnalyticsService,\n private readonly inboxService: InboxService,\n private readonly inboxTermsOfService: InboxTermsOfService,\n private readonly viewService: ViewService,\n private readonly dialog: MatDialog,\n private readonly inboxNotificationService: InboxNotificationService,\n private inboxApiService: InboxApiService,\n private readonly participantService: ParticipantService,\n private readonly ngZone: NgZone,\n @Inject(CONVERSATION_HOST_APP_INTERFACE_TOKEN) private readonly hostAppInterface: HostAppInterface,\n ) {\n const alertOptions$ = this.currentConversationDetail$.pipe(\n filterNullAndUndefined(),\n switchMap((convoDetails) => {\n //TODO: MEGA-1090 - Update this to only use the preferred channel and the selected channel by the user as input and to not block the channel selection\n return this.conversationService.displayAlertIfExists(convoDetails, convoDetails.conversation.channel);\n }),\n );\n\n this.disabledAlert = toSignal(alertOptions$, {\n initialValue: null,\n });\n\n // This is normally handled by the component input binding, which ties the named router param to directly set the\n // 'id' input. However, in Partner Center we are using an auxiliary outlet/named router outlet, and it doesn't\n // appear that component input bindings work for params defined in those routes. This subscription is a fallback to\n // ensure the value still gets set. Oct 11, 2023\n this.route.params.pipe(takeUntilDestroyed()).subscribe((params) => {\n if (params.id) {\n this.conversationService.setCurrentFirestoreConversationId(params.id);\n }\n });\n\n const orgId$ = this.isBusinessApp\n ? this.hostAppInterface.getAppOptions().is_multilocation\n ? this.groupId$\n : this.accountGroupId$\n : this.partnerId$;\n\n combineLatest([\n orgId$.pipe(filter((orgId) => !!orgId)),\n this.currentConversationDetail$.pipe(\n distinctUntilChanged((a, b) => a?.conversation?.conversationId === b?.conversation?.conversationId),\n filterNullAndUndefined(),\n ),\n ])\n .pipe(takeUntilDestroyed())\n .subscribe(([currentOrg, conversationDetail]) => {\n if (conversationDetail?.conversation.subjectParticipants?.some((p) => p.internalParticipantId === currentOrg)) {\n this.loadConversation(conversationDetail);\n } else {\n this.conversationService.removeLastConversationId();\n const routes = this.routes();\n this.router.navigate(routes.useModal ? ['', { outlets: { inbox: 'inbox' } }] : [routes.root + '/inbox']);\n }\n });\n }\n\n //TODO: MEGA-868 Delete this and the HTML switch validation when the email channel feature is released\n readonly emailChannelSupported$ = this.inboxService.canAccessEmailChannel$;\n\n /**\n * load conversation using the new µs\n */\n private async loadConversation(conversationDetail: ConversationDetail): Promise {\n if (conversationDetail && conversationDetail?.conversation?.conversationId) {\n this.analyticsService.trackEvent('inbox', 'conversation', 'view', 0, {\n id: toFirestoreId(conversationDetail.conversation.conversationId),\n accountGroupId: this.accountGroupId(),\n partnerId: this.partnerId(),\n location: this.inboxService.platformLocation,\n channel: conversationDetail?.conversation?.channel,\n });\n this.sendDraftMessage();\n }\n\n await this.conversationService.setConversationLastSeen(\n conversationDetail.conversation.conversationId as string,\n SetLastSeenRequestStatus.SET_LAST_SEEN_REQUEST_STATUS_READ,\n );\n this.unseen$$.next({\n conversationId: conversationDetail.conversation.conversationId,\n read: true,\n });\n\n this.conversationService.currentParticipant$\n .pipe(\n take(1),\n map(\n (participant) =>\n conversationDetail?.conversation?.conversationViewIds?.indexOf(\n getFollowViewID(participant.participantId),\n ) >= 0,\n ),\n )\n .subscribe((notInFollowIDs) => {\n this.isFollowing$$.next(notInFollowIDs);\n });\n\n const prefilledMessage = await firstValueFrom(this.inboxPrefilledMessage$);\n if (!prefilledMessage) {\n this.inboxTextComponent?.clearText();\n }\n this.inboxTextComponent?.removeFile();\n }\n\n private sendDraftMessage(): void {\n if (\n this.conversationService.draftMessages &&\n ((this.conversationService.draftMessages?.text && this.conversationService.draftMessages?.text !== '') ||\n this.conversationService.draftMessages?.attachments?.length > 0)\n ) {\n this.sendMessageConversation(this.conversationService.draftMessages);\n }\n }\n\n async sendMessage(messageInfo: MessageInfo): Promise {\n const tosResult = await firstValueFrom(this.termsOfServiceResult$);\n let accepted = tosResult.termsOfServiceAccepted;\n if (!accepted) {\n accepted = await this.showTermsOfService({\n terms: tosResult?.termsOfServiceTextMessage,\n });\n this.inboxTermsOfService.termsOfServiceAccepted$$.next(accepted);\n }\n if (accepted) {\n const result = await this.sendMessageConversation(messageInfo);\n const following = await firstValueFrom(this.isFollowing$);\n if (result && !following) {\n this.simulateFollowingForBackgroundProccess();\n }\n }\n }\n\n fileChange(files: FileInfo[]): void {\n this.fileChange$$.next(files);\n }\n\n private simulateFollowingForBackgroundProccess(): void {\n if (this.isBusinessApp) {\n return;\n }\n this.isFollowing$$.next(true);\n this.snackbarService.openSuccessSnack('INBOX.VIEWS.SUCCESS_FOLLOW');\n }\n\n private async sendMessageConversation(messageInfo: MessageInfo): Promise {\n if ((messageInfo.text && messageInfo.text !== '') || messageInfo.attachments?.length > 0) {\n const result = await this.sendMessageViaConversation(messageInfo);\n this.conversationService.draftMessages = {} as MessageInfo;\n this.analyticsService.trackEvent('inbox', 'conversation', 'send-message', 0, {\n id: toFirestoreId(this.currentConversationDetail().conversation.conversationId),\n accountGroupId: this.accountGroupId(),\n partnerId: this.partnerId(),\n location: this.inboxService.platformLocation,\n channel: messageInfo.channel,\n });\n return result;\n }\n }\n\n /**\n * send message using the new Conversation µs\n * @param {MessageInfo} messageInfo - the message text and media\n */\n private async sendMessageViaConversation(messageInfo: MessageInfo): Promise {\n const channel = messageInfo.channel;\n const result = await this.conversationService.sendMessage(\n this.currentConversationDetail().conversation.conversationId,\n MessageType.MESSAGE_TYPE_MESSAGE,\n messageInfo.text,\n channel,\n this.inboxService.platformLocation,\n messageInfo.attachments,\n );\n this.ngZone.run(() => {\n this.inboxTextComponent?.clearText();\n });\n return result;\n }\n\n private async showTermsOfService(termsOfService: { terms: string }): Promise {\n const data = {\n termsOfService: termsOfService.terms,\n accepted: false,\n partner: {\n name: this.partnerBrandName,\n },\n };\n\n const dialogRef: MatDialogRef = this.dialog.open(\n InboxTermsOfServiceDialogComponent,\n {\n width: '600px',\n maxHeight: '90vh',\n autoFocus: false,\n data,\n },\n );\n\n const result = await firstValueFrom(dialogRef.afterClosed());\n if (!result?.accepted) return false;\n\n const success = await firstValueFrom(this.inboxTermsOfService.acceptTermsOfService$());\n return success;\n }\n\n /**\n * TODO - Remove it when creating the new message status system\n * marking read is setting a date in the `lastSeenAt` attribute and unread is setting null\n * @param {{ read: boolean }} event - the event\n * @return {boolean}\n */\n async updateReadStatus(event: { read: boolean }): Promise {\n const status = event?.read\n ? SetLastSeenRequestStatus.SET_LAST_SEEN_REQUEST_STATUS_READ\n : SetLastSeenRequestStatus.SET_LAST_SEEN_REQUEST_STATUS_UNREAD;\n\n await this.conversationService.setConversationLastSeen(\n this.currentConversationDetail()?.conversation.conversationId as string,\n status,\n );\n this.unseen$$.next({\n conversationId: this.currentConversationDetail()?.conversation.conversationId,\n read: event?.read,\n });\n }\n\n async updateFollowStatus(newFollowStatus: boolean): Promise {\n if (this.isBusinessApp) {\n return;\n }\n const conversationDetails = await firstValueFrom(this.currentConversationDetail$);\n const conversationId = conversationDetails.conversation.conversationId;\n try {\n if (newFollowStatus) {\n await firstValueFrom(this.viewService.addConversationToConversationView(conversationId));\n this.snackbarService.openSuccessSnack('INBOX.VIEWS.SUCCESS_FOLLOW');\n } else {\n await firstValueFrom(this.viewService.removeConversationFromConversationView(conversationId));\n }\n this.isFollowing$$.next(newFollowStatus);\n } catch (error) {\n this.snackbarService.openErrorSnack('INBOX.VIEWS.FAILED_FOLLOW');\n }\n }\n\n async updateOpenStatus(newOpenStatus: boolean): Promise {\n const conversationId = this.currentConversationDetail()?.conversation.conversationId;\n if (!conversationId) {\n return;\n }\n\n const conversation = await this.conversationService.setConversationOpenStatus(conversationId, newOpenStatus);\n this.isOpen.set(conversation.isOpen);\n }\n\n openSettings(): void {\n this.inboxNotificationService\n .turnOnOnlyMyEventsNotification$()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: () => {\n this.notificationWarningChat$$.next(false);\n this.snackbarService.openSuccessSnack('INBOX.WARNING.NOTIFICATION_UPDATE_SUCCESS');\n },\n error: () => {\n this.snackbarService.openErrorSnack('INBOX.WARNING.NOTIFICATION_UPDATE_ERROR');\n },\n });\n }\n\n async viewContact(): Promise {\n const conversationDetail = await firstValueFrom(this.currentConversationDetail$);\n const recipient = this.hostAppInterface.getRecipient(conversationDetail);\n const contactId = Array.isArray(recipient) ? recipient[0]?.internalParticipantId : recipient?.internalParticipantId;\n this.participantService.viewContact(\n contactId,\n ParticipantType.PARTICIPANT_TYPE_CUSTOMER,\n conversationDetail.conversation.conversationId,\n toFirestoreId(conversationDetail.conversation.conversationId),\n );\n }\n\n onClose(): void {\n this.notificationWarningChat$$.next(false);\n this.inboxNotificationService.setCookie();\n }\n}\n","
\n \n \n \n {{ bannerText }}\n \n \n \n \n \n {{ 'INBOX.ERROR.NO_PHONE_NUMBER_OR_EMAIL' | translate }}\n \n \n {{ 'INBOX.ERROR.NO_PHONE_NUMBER' | translate }}\n \n \n \n \n {{ 'INBOX.WARNING.TURN_ON_NOTIFICATIONS' | translate }}\n {{ 'INBOX.WARNING.TURN_ON_NOTIFICATIONS_DETAILS' | translate }}\n {{ 'INBOX.WARNING.NOTIFICATION_SETTINGS' | translate }}\n \n \n \n \n
\n \n \n \n {{ disabledAlert()?.description || '' | translate }}\n \n \n
\n \n \n \n
\n
\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { Location } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Inject,\n ViewChild,\n inject,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { PhoneInputComponent } from '@vendasta/galaxy/input';\nimport { SnackbarService } from '@vendasta/galaxy/snackbar-service';\nimport { ProductAnalyticsService } from '@vendasta/product-analytics';\nimport { Observable, firstValueFrom } from 'rxjs';\nimport {\n ACCOUNT_GROUP_ID_TOKEN,\n COMPANY_NAME_TOKEN,\n ConversationService,\n InboxContact,\n InboxService,\n PARTNER_ID_TOKEN,\n ParticipantService,\n} from '../../../../core/src/index';\n\n@Component({\n selector: 'inbox-create-contact-form',\n templateUrl: './create-contact-form.component.html',\n styleUrls: ['./create-contact-form.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CreateContactFormComponent implements AfterViewInit {\n @ViewChild('phoneInput') phoneInput: PhoneInputComponent;\n @ViewChild('firstNameInput') firstNameInput: ElementRef;\n\n readonly MIN_CHARACTERS = 2;\n\n readonly contactForm = this.formBuilder.group({\n firstName: ['', [Validators.required, Validators.minLength(this.MIN_CHARACTERS)]],\n lastName: [''],\n phone: [Number(null), [Validators.minLength(6)]],\n email: ['', [Validators.email, Validators.minLength(6)]],\n });\n\n get errors() {\n return {\n firstName: this.contactForm.controls.firstName.errors,\n lastName: this.contactForm.controls.lastName.errors,\n email: this.contactForm.controls.email.errors,\n phone: this.contactForm.controls.phone.errors,\n };\n }\n\n isLoading = false;\n isSubmitted = false;\n\n private readonly accountGroupId = toSignal(inject(ACCOUNT_GROUP_ID_TOKEN));\n private readonly partnerId = toSignal(inject(PARTNER_ID_TOKEN));\n\n constructor(\n private readonly focus: FocusMonitor,\n private readonly router: Router,\n private readonly activatedRoute: ActivatedRoute,\n private readonly location: Location,\n private cdRef: ChangeDetectorRef,\n @Inject(COMPANY_NAME_TOKEN) readonly companyName$: Observable,\n private readonly formBuilder: FormBuilder,\n private readonly conversationService: ConversationService,\n private readonly inboxService: InboxService,\n private readonly participantService: ParticipantService,\n private readonly snackbarService: SnackbarService,\n private readonly analyticsService: ProductAnalyticsService,\n ) {\n const currentNavigation = this.router.getCurrentNavigation();\n if (currentNavigation) {\n this.contactForm.patchValue(currentNavigation.extras.state);\n }\n }\n\n ngAfterViewInit(): void {\n this.focus.focusVia(this.firstNameInput, 'program');\n this.cdRef.detectChanges();\n }\n\n async submit(): Promise {\n this.phoneInput.rawInputControl.updateValueAndValidity();\n this.isSubmitted = true;\n\n if (!(this.contactForm.get('phone').value || this.contactForm.get('email').value)) {\n this.snackbarService.openErrorSnack('INBOX.ERROR.PHONE_OR_EMAIL_REQUIRED');\n return;\n }\n\n if (!this.contactForm.valid) {\n this.snackbarService.openErrorSnack('INBOX.ERROR.CORRECT_INVALID_REQUIRED_FIELDS');\n return;\n }\n\n this.startLoading();\n\n try {\n const formValue = this.contactForm.value;\n const newContact = await firstValueFrom(\n this.participantService.addContact({\n firstName: formValue.firstName,\n lastName: formValue.lastName,\n phone: `${formValue.phone}`,\n email: formValue.email,\n permissionToContact: true,\n accountGroupId: this.accountGroupId(),\n partnerId: this.partnerId(),\n }),\n );\n\n if (!newContact?.contactId) throw new Error('Contact not created');\n\n this.analyticsService.trackEvent('inbox', 'new-message', 'add-contact-success', 0, {\n accountGroupId: this.accountGroupId(),\n partnerId: this.partnerId(),\n location: this.inboxService.platformLocation,\n channel: this.conversationService.getConversationChannel(),\n });\n\n await this.returnToNewMessage(newContact);\n } catch (error) {\n console.warn('submit', error.message);\n if (error.status === 409) {\n this.snackbarService.openErrorSnack('INBOX.ERROR.CONTACT_EXISTS');\n } else {\n this.snackbarService.openErrorSnack('INBOX.ERROR.CREATE_CONTACT');\n }\n\n this.analyticsService.trackEvent('inbox', 'new-message', 'add-contact-error', 0, {\n accountGroupId: this.accountGroupId(),\n partnerId: this.partnerId(),\n location: this.inboxService.platformLocation,\n channel: this.conversationService.getConversationChannel(),\n message: error?.message,\n });\n }\n\n this.stopLoading();\n }\n\n private async returnToNewMessage(contact: InboxContact): Promise {\n contact.lastName = contact.lastName || '';\n\n this.router.navigate(['../new-message', contact], {\n relativeTo: this.activatedRoute,\n state: {\n contact: contact,\n },\n });\n }\n\n private startLoading(): void {\n this.isLoading = true;\n }\n\n private stopLoading(): void {\n this.isLoading = false;\n }\n\n close() {\n this.location.back();\n }\n}\n","\n
\n
\n

\n {{ 'INBOX.ADD_CONTACT.ADD_CONTACT_FORM_HEADER' | translate : { businessName: companyName$ | async } }}\n

\n\n close\n
\n \n \n {{ 'INBOX.NEW_MESSAGE.FIRST_NAME' | translate }}\n \n \n {{ 'INBOX.ERROR.REQUIRED_FIELD' | translate }}\n \n \n {{ 'INBOX.ERROR.INVALID_LENGTH_TOO_FEW_CHARACTERS' | translate : { min: MIN_CHARACTERS } }}\n \n \n \n {{ 'INBOX.NEW_MESSAGE.LAST_NAME' | translate }}\n \n \n \n \n \n {{ 'INBOX.NEW_MESSAGE.EMAIL' | translate }}\n \n \n {{ 'INBOX.ERROR.INVALID_EMAIL_ADDRESS' | translate }}\n \n \n
\n \n {{ 'INBOX.NEW_MESSAGE.ADD_CONTACT' | translate }}\n \n
\n\n","import { Location } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnInit, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { Router } from '@angular/router';\nimport { CustomerService, FieldMask } from '@vendasta/contacts';\nimport { ConversationChannel } from '@vendasta/conversation';\nimport { SnackbarService } from '@vendasta/galaxy/snackbar-service';\nimport { ProductAnalyticsService } from '@vendasta/product-analytics';\nimport { BehaviorSubject, Observable, firstValueFrom, map, take } from 'rxjs';\nimport {\n ACCOUNT_GROUP_ID_TOKEN,\n COMPANY_NAME_TOKEN,\n ConversationAvailableChannels,\n ConversationService,\n InboxContact,\n InboxService,\n MessageInfo,\n PARTNER_ID_TOKEN,\n ParticipantService,\n STANDARD_CRM_FIELD_EXTERNAL_IDS,\n USER_ID_TOKEN,\n redirectToConversationFactory,\n} from '../../../../core/src';\nimport { AlertOptions } from '../../../../core/src/lib/channels/conversation-channel.abstract';\nimport { SelectContactControl } from '../../components/inbox-select-contact/inbox-select-contact.component';\n\nconst DEFAULT_NEW_MESSAGE_AVAILABLE_CHANNELS = {\n availableChannels: [],\n preferredChannel: ConversationChannel.CONVERSATION_CHANNEL_UNDEFINED,\n};\n\n@Component({\n selector: 'inbox-new-message',\n templateUrl: './inbox-new-message.component.html',\n styleUrls: ['./inbox-new-message.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class InboxNewMessageComponent implements OnInit {\n isLoading = false;\n\n readonly selectControl = new SelectContactControl(null);\n\n readonly disabledAlert = signal(null);\n\n private readonly redirectToConversation = redirectToConversationFactory();\n\n private readonly accountGroupId = toSignal(inject(ACCOUNT_GROUP_ID_TOKEN), { requireSync: true });\n private readonly partnerId = toSignal(inject(PARTNER_ID_TOKEN).pipe(), { requireSync: true });\n private readonly userId = toSignal(inject(USER_ID_TOKEN), { requireSync: true });\n\n //TODO: MEGA-896 remove feature flag validation when the email channel feature is released\n private readonly hasEmailAccess = toSignal(this.inboxService.canAccessEmailChannel$);\n private readonly isSMSChannelAvailable$ = this.conversationService.isSMSChannelAvailableForOrg$;\n\n readonly availableChannels$ = this.isSMSChannelAvailable$.pipe(\n map((smsAvailable) => {\n const availableChannels = [\n ...(smsAvailable ? [ConversationChannel.CONVERSATION_CHANNEL_SMS] : []),\n ...(this.hasEmailAccess() ? [ConversationChannel.CONVERSATION_CHANNEL_EMAIL] : []),\n ];\n return {\n availableChannels: availableChannels,\n preferredChannel: availableChannels[0] || ConversationChannel.CONVERSATION_CHANNEL_UNDEFINED,\n };\n }),\n );\n\n private readonly channelsToShow$$ = new BehaviorSubject(\n DEFAULT_NEW_MESSAGE_AVAILABLE_CHANNELS,\n );\n readonly channelsToShow$ = this.channelsToShow$$.asObservable();\n\n private readonly trackingProps = this.inboxService.buildTemplateTrackProperties();\n\n constructor(\n @Inject(COMPANY_NAME_TOKEN) readonly companyName$: Observable,\n private router: Router,\n private snackbarService: SnackbarService,\n private location: Location,\n private conversationService: ConversationService,\n private readonly analyticsService: ProductAnalyticsService,\n private customerService: CustomerService,\n private participantService: ParticipantService,\n private inboxService: InboxService,\n private cdRef: ChangeDetectorRef,\n ) {\n const routeData = this.router.getCurrentNavigation();\n if (routeData?.extras?.state?.contact) {\n this.selectControl.setValue(routeData.extras.state.contact);\n this.selectContact(routeData.extras.state.contact);\n }\n\n this.selectControl.valueChanges.pipe(takeUntilDestroyed()).subscribe((value) => {\n if (typeof value === 'object' && value.contactId) {\n this.startConversation();\n }\n });\n }\n\n ngOnInit(): void {\n this.conversationService.setCurrentFirestoreConversationId('');\n this.analyticsService.trackEvent('inbox', 'new-message', 'view');\n }\n\n async onSubmitDraft(messageInfo: MessageInfo): Promise {\n this.isLoading = true;\n\n try {\n const contact = this.selectControl.value;\n if (!contact || typeof contact === 'string') {\n this.snackbarService.openWithOptions(\n this.hasEmailAccess() ? 'INBOX.ERROR.INVALID_CONTACT_SELECTED' : 'INBOX.ERROR.NO_CONTACT_SELECTED',\n );\n return;\n }\n\n if (!contact.contactId && (contact.phone || contact.email)) {\n await this.addContactAndStartConversation(contact.phone ?? '', contact.email ?? '', messageInfo);\n this.isLoading = false;\n return;\n }\n\n if (contact.contactId) {\n if (!contact.permissionToContact) {\n this.updateCustomerPermissionToContact(contact);\n }\n\n this.conversationService.draftMessages = messageInfo;\n await this.startConversation();\n this.isLoading = false;\n }\n } finally {\n this.isLoading = false;\n }\n }\n\n async selectContact(contact: InboxContact): Promise {\n if (contact && (contact?.phone !== '' || contact?.email !== '')) {\n await this.startConversation();\n this.isLoading = false;\n }\n }\n\n private async startConversation(): Promise {\n const contact = this.selectControl.value as InboxContact;\n if (!contact || typeof contact === 'string') {\n this.snackbarService.openWithOptions(\n this.hasEmailAccess() ? 'INBOX.ERROR.INVALID_CONTACT_SELECTED' : 'INBOX.ERROR.NO_CONTACT_SELECTED',\n );\n return;\n }\n\n if (contact.phone === '' && contact.email === '') {\n this.snackbarService.openErrorSnack(\n this.hasEmailAccess() ? 'NO_PHONE_NUMBER_OR_EMAIL' : 'INBOX.ERROR.NO_PHONE_NUMBER',\n );\n return;\n }\n\n if (contact) {\n const platformLocation = this.inboxService.platformLocation;\n const conversationChannel = contact.phone\n ? ConversationChannel.CONVERSATION_CHANNEL_SMS\n : ConversationChannel.CONVERSATION_CHANNEL_EMAIL;\n\n // TODO: Add an PartnerType participant when this component is exposed to partners (SMS/Email for partners)\n const participantOrganization = this.participantService.buildAccountGroup(\n this.partnerId(),\n this.accountGroupId(),\n );\n const participantRecipient = this.participantService.buildContactParticipant(\n contact.contactId ?? '',\n this.partnerId(),\n this.accountGroupId(),\n );\n const participantSender = this.participantService.buildIamUser(\n this.partnerId(),\n this.accountGroupId(),\n this.userId(),\n false,\n );\n\n const trackingProps = await this.inboxService.buildTemplateTrackProperties();\n\n return firstValueFrom(\n this.conversationService.createConversation(\n [participantOrganization, participantSender, participantRecipient],\n conversationChannel,\n platformLocation,\n ),\n )\n .then((response) => {\n if (response && response.conversation) {\n this.analyticsService.trackEvent('inbox', 'new-message', 'create-conversation-success', 0, {\n trackingProps,\n channel: conversationChannel,\n });\n this.redirectToConversation(response.conversation.conversationId);\n }\n })\n .catch((httpErrorResponse: HttpErrorResponse) => {\n console.warn('Error to create a conversation: ', httpErrorResponse);\n this.snackbarService.openErrorSnack(httpErrorResponse?.error?.message);\n\n this.analyticsService.trackEvent('inbox', 'new-message', 'create-conversation-error', 0, {\n trackingProps,\n channel: conversationChannel,\n message: httpErrorResponse?.error?.message,\n });\n });\n }\n }\n\n private handleAddContactError(): (error: HttpErrorResponse) => Promise {\n return async (error: HttpErrorResponse) => {\n console.warn('onSubmitAddContact', error.message);\n if (error.status === 409) {\n this.snackbarService.openErrorSnack('INBOX.ERROR.CONTACT_EXISTS');\n } else {\n this.snackbarService.openErrorSnack('INBOX.ERROR.CREATE_CONTACT');\n }\n\n const trackingProps = await this.inboxService.buildTemplateTrackProperties();\n this.analyticsService.trackEvent('inbox', 'new-message', 'add-contact-error', 0, {\n trackingProps,\n channel: this.conversationService.getConversationChannel(),\n message: error?.message,\n });\n };\n }\n\n close(): void {\n this.location.back();\n }\n\n private async addContactAndStartConversation(\n phoneNumber: string,\n email: string,\n messageInfo: MessageInfo,\n ): Promise {\n const trackingProps = await this.inboxService.buildTemplateTrackProperties();\n\n if (email !== '') {\n const existingContact = await this.getCrmContactByField(STANDARD_CRM_FIELD_EXTERNAL_IDS.email, email);\n if (existingContact?.contactId) {\n this.analyticsService.trackEvent('inbox', 'new-message', 'get-contact-success', 0, {\n trackingProps,\n channel: ConversationChannel.CONVERSATION_CHANNEL_EMAIL,\n });\n this.conversationService.draftMessages = messageInfo;\n this.selectControl.setValue(existingContact);\n return;\n }\n }\n\n return firstValueFrom(\n this.participantService.addContact({\n firstName: '',\n lastName: '',\n phone: phoneNumber,\n email: email,\n accountGroupId: this.accountGroupId(),\n partnerId: this.partnerId(),\n }),\n )\n .then((newContact) => {\n this.analyticsService.trackEvent('inbox', 'new-message', 'add-contact-success', 0, {\n trackingProps,\n channel: phoneNumber\n ? ConversationChannel.CONVERSATION_CHANNEL_SMS\n : ConversationChannel.CONVERSATION_CHANNEL_EMAIL,\n });\n if (!newContact?.lastName) {\n newContact.lastName = '';\n }\n\n if (newContact?.contactId === undefined) {\n this.snackbarService.openErrorSnack('INBOX.ERROR.CREATE_CONTACT');\n }\n\n if (newContact?.contactId) {\n this.conversationService.draftMessages = messageInfo;\n //Set newContact value to selectControl will trigger the subscription of it in constructor to call startConversation()\n this.selectControl.setValue(newContact);\n }\n })\n .catch(this.handleAddContactError());\n }\n\n private async getCrmContactByField(fieldId: string, value: string): Promise {\n const contacts = await firstValueFrom(\n this.participantService.getContactByField(this.accountGroupId(), fieldId, value),\n );\n return contacts?.[0] ?? ({} as InboxContact);\n }\n\n private updateCustomerPermissionToContact(contact: InboxContact): void {\n this.customerService\n .updateCustomer(\n contact.accountGroupId ?? '',\n contact.contactId ?? '',\n '',\n '',\n '',\n '',\n '',\n '',\n [],\n [],\n [],\n '',\n true,\n new FieldMask({ paths: ['PermissionToContact'] }),\n '',\n '',\n )\n .pipe(take(1))\n .subscribe();\n }\n\n async changeAvailableChannels(channel: ConversationChannel): Promise {\n const currentAvailableChannels = await firstValueFrom(this.availableChannels$);\n const channelsToShow = await firstValueFrom(this.channelsToShow$);\n this.disabledAlert.set(null);\n if (channel === ConversationChannel.CONVERSATION_CHANNEL_UNDEFINED) {\n if (channelsToShow.availableChannels.length > 0) {\n this.channelsToShow$$.next(DEFAULT_NEW_MESSAGE_AVAILABLE_CHANNELS);\n this.cdRef.markForCheck();\n return;\n }\n return;\n }\n\n if (currentAvailableChannels?.availableChannels.includes(channel)) {\n this.disabledAlert.set(null);\n this.channelsToShow$$.next({\n availableChannels: [channel],\n preferredChannel: channel,\n });\n } else {\n const alertMessage = await firstValueFrom(this.conversationService.displayAlertIfExists(null, channel));\n this.disabledAlert.set(alertMessage);\n }\n this.cdRef.markForCheck();\n return;\n }\n}\n","\n
\n
\n
\n

\n {{ 'INBOX.NEW_MESSAGE.NEW_MESSAGE_FROM' | translate }}:\n {{ companyName$ | async }}\n

\n
\n close\n
\n
\n \n
\n
\n \n {{ disabledAlert()?.title ?? '' | translate }}\n {{ disabledAlert()?.description ?? '' | translate }}\n \n
\n \n \n \n \n \n
\n","import { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { SendMessage } from '../../../../core/src/lib/interface/conversation.interface';\n\n@Injectable()\nexport class InboxSendMessageResolver {\n constructor(private router: Router) {}\n\n resolve(): SendMessage {\n return this.router.getCurrentNavigation().extras?.state as SendMessage;\n }\n}\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule, DatePipe } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatListModule } from '@angular/material/list';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { AddressAPIService } from '@vendasta/address';\nimport { GalaxyAlertModule } from '@vendasta/galaxy/alert';\nimport { GalaxyAvatarModule } from '@vendasta/galaxy/avatar';\nimport { GalaxyBadgeModule } from '@vendasta/galaxy/badge';\nimport { GalaxyChatModule } from '@vendasta/galaxy/chat';\nimport { GalaxyChatComposerModule } from '@vendasta/galaxy/chat-composer';\nimport { GalaxyCheckboxModule } from '@vendasta/galaxy/checkbox';\nimport { GalaxyEmptyStateModule } from '@vendasta/galaxy/empty-state';\nimport { GalaxyFormFieldModule } from '@vendasta/galaxy/form-field';\nimport { GalaxyInfiniteScrollTriggerModule } from '@vendasta/galaxy/infinite-scroll-trigger';\nimport { GalaxyInputModule } from '@vendasta/galaxy/input';\nimport { GalaxyLoadingSpinnerModule } from '@vendasta/galaxy/loading-spinner';\nimport { GalaxyNavLayoutModule } from '@vendasta/galaxy/nav-layout';\nimport { GalaxyPageNavModule } from '@vendasta/galaxy/page-nav';\nimport { GalaxyPipesModule } from '@vendasta/galaxy/pipes';\nimport { GalaxyPopoverModule } from '@vendasta/galaxy/popover';\nimport { GalaxyUploaderModule } from '@vendasta/galaxy/uploader';\nimport { InboxTermsOfService } from '../../core/src/lib/inbox-terms-of-service.service';\nimport { ListingService } from '../../core/src/lib/listing.service';\nimport { ConversationPipesModule } from '../../pipes';\nimport { InboxConversationPreviewComponent } from './components/inbox-conversation-preview/inbox-conversation-preview.component';\nimport { InboxConversationTitleComponent } from './components/inbox-conversation-title/inbox-conversation-title.component';\nimport { InboxPanePreviewComponent } from './components/inbox-pane-preview/inbox-pane-preview.component';\nimport { InboxPaneComponent } from './components/inbox-pane/inbox-pane.component';\nimport { InboxSelectContactComponent } from './components/inbox-select-contact/inbox-select-contact.component';\nimport { InboxViewsComponent } from './components/inbox-views/inbox-views.component';\nimport { InboxViewsEmptyComponent } from './components/inbox-views-empty/inbox-views-empty.component';\nimport { InboxWelcomeComponent } from './components/inbox-welcome/inbox-welcome.component';\nimport { ConversationUIRouting } from './conversation-ui.routing';\nimport { SmsAccessGuard } from './guards/sms-access.guard';\nimport { WebChatAccessGuard } from './guards/web-chat-access.guard';\nimport { InboxAiChatComponent } from './pages/inbox-ai-chat/inbox-ai-chat.component';\nimport { InboxTicketCardComponent } from './pages/inbox-chat/components/inbox-info-pane/inbox-ticket-card/inbox-ticket-card.component';\nimport { InboxTicketListComponent } from './pages/inbox-chat/components/inbox-info-pane/inbox-ticket/inbox-ticket-list.component';\nimport { InboxTicketComponent } from './pages/inbox-chat/components/inbox-info-pane/inbox-ticket/inbox-ticket.component';\nimport { InboxInsertPaymentLinkFormComponent } from './pages/inbox-chat/components/inbox-insert-payment-link/inbox-insert-payment-link-form.component';\nimport { InboxInsertPaymentLinkComponent } from './pages/inbox-chat/components/inbox-insert-payment-link/inbox-insert-payment-link.component';\nimport { InboxInsertReviewLinkComponent } from './pages/inbox-chat/components/inbox-insert-review-link/inbox-insert-review-link.component';\nimport { InboxMessageTextComponent } from './pages/inbox-chat/components/inbox-message-text/inbox-message-text.component';\nimport { InboxMessagesTopBarComponent } from './pages/inbox-chat/components/inbox-messages-top-bar/inbox-messages-top-bar.component';\nimport { InboxMessagesComponent } from './pages/inbox-chat/components/inbox-messages/inbox-messages.component';\nimport { InboxUploadFileComponent } from './pages/inbox-chat/components/inbox-upload-file/inbox-upload-file.component';\nimport { InboxUploadService } from './pages/inbox-chat/components/inbox-upload-file/inbox-upload.service';\nimport { InboxChatComponent } from './pages/inbox-chat/inbox-chat.component';\nimport { CreateContactFormComponent } from './pages/inbox-create-contact/create-contact-form.component';\nimport { InboxNewMessageComponent } from './pages/inbox-new-message/inbox-new-message.component';\nimport { InboxSendMessageComponent } from './pages/inbox-send-message/inbox-send-message.component';\nimport { InboxSendMessageResolver } from './pages/inbox-send-message/inbox-send-message.resolver';\nimport { TranslationModule } from './translation-module';\nimport { InboxInsertTemplateComponent } from './pages/inbox-chat/components/inbox-insert-template/inbox-insert-template.component';\nimport { MatSelectModule } from '@angular/material/select';\nimport { InboxZeroComponent } from './components/inbox-zero/inbox-zero.component';\n\nexport const MODULE_DECLARATIONS_EXPORTS = [\n InboxPaneComponent,\n InboxNewMessageComponent,\n InboxMessagesComponent,\n InboxWelcomeComponent,\n InboxMessageTextComponent,\n InboxConversationPreviewComponent,\n InboxSendMessageComponent,\n InboxChatComponent,\n InboxInsertReviewLinkComponent,\n InboxInsertPaymentLinkComponent,\n InboxInsertPaymentLinkFormComponent,\n InboxInsertTemplateComponent,\n InboxUploadFileComponent,\n InboxPanePreviewComponent,\n CreateContactFormComponent,\n InboxViewsComponent,\n InboxTicketComponent,\n InboxAiChatComponent,\n];\n\n// This list is used for compatibility reasons, as dependent components are\n// converted to standalone components, these should be removed from this list.\nconst STANDALONE_COMPONENTS = [\n InboxSelectContactComponent,\n InboxConversationTitleComponent,\n InboxMessagesTopBarComponent,\n InboxTicketCardComponent,\n InboxTicketListComponent,\n InboxZeroComponent,\n];\n@NgModule({\n imports: [\n CommonModule,\n TranslateModule,\n TranslationModule,\n FormsModule,\n MatInputModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatIconModule,\n MatProgressSpinnerModule,\n MatFormFieldModule,\n MatMenuModule,\n MatButtonModule,\n MatCardModule,\n MatSelectModule,\n GalaxyInputModule,\n GalaxyCheckboxModule,\n GalaxyBadgeModule,\n GalaxyUploaderModule,\n OverlayModule, // Requires by GalaxyPopoverModule\n GalaxyPopoverModule,\n ConversationUIRouting,\n GalaxyPipesModule,\n GalaxyChatModule,\n GalaxyInfiniteScrollTriggerModule,\n ConversationPipesModule,\n GalaxyChatComposerModule,\n MatTooltipModule,\n GalaxyLoadingSpinnerModule,\n MatDialogModule,\n GalaxyFormFieldModule,\n MatDividerModule,\n GalaxyEmptyStateModule,\n InboxViewsEmptyComponent,\n GalaxyAvatarModule,\n GalaxyAlertModule,\n MatProgressBarModule,\n MatAutocompleteModule,\n GalaxyPageNavModule,\n GalaxyNavLayoutModule,\n MatTabsModule,\n MatListModule,\n ...STANDALONE_COMPONENTS,\n ],\n declarations: MODULE_DECLARATIONS_EXPORTS,\n providers: [\n ListingService,\n SmsAccessGuard,\n WebChatAccessGuard,\n DatePipe,\n InboxTermsOfService,\n InboxSendMessageResolver,\n AddressAPIService,\n InboxUploadService,\n ],\n exports: MODULE_DECLARATIONS_EXPORTS,\n})\nexport class ConversationUIModule {}\n","import { CommonModule } from '@angular/common';\nimport { Component, OnInit, Optional } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { GalaxyLoadingSpinnerModule } from '@vendasta/galaxy/loading-spinner';\nimport { ProductAnalyticsService } from '@vendasta/product-analytics';\nimport { ConversationListService } from '../../../../core/src/lib/conversation-list.service';\nimport { isMobile } from '../../../../core/src/lib/inbox-utils';\nimport { ConversationUIModule } from '../../conversation-ui.module';\n\n@Component({\n selector: 'inbox-home',\n templateUrl: './inbox-home.component.html',\n styleUrls: ['./inbox-home.component.scss'],\n standalone: true,\n imports: [CommonModule, RouterModule, ConversationUIModule, GalaxyLoadingSpinnerModule],\n})\nexport class InboxHomeComponent implements OnInit {\n readonly organizationHasConversations$ = this.conversationListService.organizationHasConversations$;\n\n constructor(\n @Optional() private readonly analyticsService: ProductAnalyticsService,\n private conversationListService: ConversationListService,\n ) {}\n\n ngOnInit(): void {\n if (this.analyticsService) {\n this.analyticsService.trackEvent('inbox', 'home', 'view');\n }\n }\n\n get isMobile(): boolean {\n return isMobile();\n }\n}\n","\n\n\n \n\n\n\n \n\n"],"mappings":"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","names":["require_calendar","__commonJSMin","exports","module","t","a","n","d","e","o","s","i","f","l","InboxUploadService","GalaxyUploaderService","constructor","http","env","conversationId$$","ReplaySubject","conversationId$","asObservable","buildRequest","fileInfo","uploadUrl","getEnvironment","Environment","PROD","pipe","map","conversationId","HttpParams","set","switchMap","params","body","FormData","append","file","options","withCredentials","post","take","ɵɵinject","HttpClient","EnvironmentService","factory","ɵfac","_InboxUploadService","getMaxFileSize","chatSourceId","getAcceptFileTypes","getMaxFileSizeInMB","ConversationRoutePipe","constructor","viewModeService","routes","toSignal","inject","CONVERSATION_ROUTES_TOKEN","transform","conversationDetail","conversationPath","viewMode","firestoreId","toFirestoreId","conversation","conversationId","useModal","routerCommands","root","ɵɵdirectiveInject","ViewModeService","pure","_ConversationRoutePipe","ConversationBadgePipe","hostAppInterface","CONVERSATION_HOST_APP_INTERFACE_TOKEN","getConversationBadge","recipient","getRecipient","Array","isArray","map","subjectParticipant","getConversationBadgeByParticipant","isRecipientInternalInfoDeleted","filter","badge","participant","deleted","participantType","badgeColor","ParticipantType","PARTICIPANT_TYPE_VENDOR","PARTICIPANT_TYPE_ACCOUNT_GROUP","PARTICIPANT_TYPE_PARTNER","PARTICIPANT_TYPE_OPENAI_BOT","_ConversationBadgePipe","ConversationUnseenPipe","conversationService","conversationUnseen","ConversationService","_ConversationUnseenPipe","ConversationYourExpertPipe","isYourExpert","_ConversationYourExpertPipe","UnreadConversationsCountPipe","viewId","getUnreadConversationsCount","pipe","count","formatUnreadConversationsCount","_UnreadConversationsCountPipe","MaxFileSize","chatSourceId","getMaxFileSize","_MaxFileSize","AcceptedFileType","getAcceptFileTypes","_AcceptedFileType","FirebaseTimestampsToDatePipe","transform","firebaseTimestamp","toDate","pure","_FirebaseTimestampsToDatePipe","InArrayPipe","transform","value","dataSet","includes","pure","_InArrayPipe","MessageStatus","MessageStatusType","constructor","hostAppInterface","inject","CONVERSATION_HOST_APP_INTERFACE_TOKEN","transform","message","isSenderFromOrganization","Sent","Received","pure","_MessageStatusType","MessageFrom","translateService","messageFrom","ɵɵdirectiveInject","TranslateService","_MessageFrom","MessageVia","channel","ConversationChannel","CONVERSATION_CHANNEL_GOOGLE_BUSINESS_COMMUNICATIONS","CONVERSATION_CHANNEL_FACEBOOK","CONVERSATION_CHANNEL_SMS","CONVERSATION_CHANNEL_EMAIL","CONVERSATION_CHANNEL_WEB_CHAT","CONVERSATION_CHANNEL_INSTAGRAM","_MessageVia","MessageCodeBacktickPipe","blockPattern","inlinePattern","replace","_MessageCodeBacktickPipe","GetMessageMediaUrlPipe","environmentService","media","env","getEnvironmentString","mediaUrl","mediaLocationPath","EnvironmentService","_GetMessageMediaUrlPipe","IsFromYouPipe","userId","toSignal","USER_ID_TOKEN","messageGroup","isFromYou","_IsFromYouPipe","ChatSourceIconName","CONVERSATION_CHANNEL_INTERNAL","CONVERSATION_CHANNEL_OPENAI","Error","_ChatSourceIconName","ChatProfileIconPipe","unknownContact","lastMessage","notYou","_ChatProfileIconPipe","sender","participantType","ParticipantType","PARTICIPANT_TYPE_OPENAI_BOT","DEFAULT_WEBCHAT_BOT_NAME","DEFAULT_OPENAI_BOT_NAME","name","senderID","internalParticipantId","TrimDescriptionPipe","transform","text","length","substring","concat","pure","_TrimDescriptionPipe","import_dayjs","import_calendar","dayjs","extend","calendar","TimestampsPipe","transform","conversationDetail","timestamp","conversation","latestMsgSentTime","isSame","format","pure","_TimestampsPipe","MessageTime","constructor","translateService","messageTime","today","instant","yesterday","at","Date","sameDay","lastDay","lastWeek","sameElse","ɵɵdirectiveInject","TranslateService","_MessageTime","MessageBubbleTime","messageBubbleTime","now","diffInMinutes","diff","isSameDay","isSameYear","isYesterday","subtract","isWithinLastWeek","isAfter","justNowText","minsAgoText","atText","yesterdayText","_MessageBubbleTime","ViewNamePipe","transform","viewId","ALL_VIEW_ID","FOLLOWING_VIEW_ID","pure","_ViewNamePipe","ConversationPipesModule","CommonModule","_ConversationPipesModule","SmsAccessGuard","constructor","inboxService","canActivate","route","canAccessSMS$","pipe","take","switchMap","canAccessSMS","__async","createUrlTreeFromSnapshot","ɵɵinject","InboxService","factory","ɵfac","providedIn","_SmsAccessGuard","ɵɵelementContainerStart","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate1","ctx_r1","chatSourceLabel","currentChatSource","shortSourceName","sourceName","ɵɵelement","ɵɵtemplate","ChatComposerComponent_ng_container_6_ng_template_2_div_6_Template","ɵɵproperty","sourceMenu_r3","ɵɵclassMapInterpolate1","id","showFullSourceName","ChatComposerComponent_ng_container_6_ng_container_1_Template","ChatComposerComponent_ng_container_6_ng_template_2_Template","ɵɵtemplateRefExtractor","chatSources","length","showChatSourceSelect_r4","ɵɵlistener","ɵɵrestoreView","_r5","ɵɵnextContext","ɵɵresetView","sendMessage","ɵɵclassProp","customColor","state_r6","processing","disabled","ɵɵtextInterpolate","item_r8","account","_r7","$implicit","changeChatSourceId","ChatComposerComponent_ng_container_11_ng_container_7_Template","ChatComposerComponent","limitedActions","showExtendedActions","selectedChatSourceId","value","currentChatSourceId","initialized","constructor","elementRef","changeDetectorRef","class","messageText","placeholder","enterKeySendsMessage","textAreaMinRows","textAreaMaxRows","clearMessageTextOnSend","disableSendEmptyText","send","EventEmitter","selectedChatSourceIdChange","showDynamicContentMinWidthPx","showFullSourceNameMinWidthPx","showDynamicContentStore","showSourceNameStore","window","ResizeObserver","resizeObserver","entries","entry","Array","isArray","toggleDynamicContent","contentRect","width","toggleSourceName","observe","nativeElement","ngOnInit","firstChatSource","ngOnDestroy","disconnect","event","preventDefault","focusTextArea","trim","messageToSend","sourceId","emit","clearMessageText","label","composerTextArea","focus","emitChanges","newSource","find","obj","insertDynamicContent","dynamicContent","position","selectInsertedCurserText","textArea","spacing","startPos","selectionStart","endPos","selectionEnd","newValue","contentBefore","substr","contentAfter","endsWith","startsWith","setTimeout","setSelectionRange","curserPosition","updatedValue","detectChanges","ɵɵdirectiveInject","ElementRef","ChangeDetectorRef","selectors","viewQuery","rf","ctx","ɵɵclassMap","ɵɵtwoWayListener","$event","i0","_r1","ɵɵtwoWayBindingSet","ɵɵprojection","ChatComposerComponent_ng_container_6_Template","ChatComposerComponent_ng_container_8_Template","ChatComposerComponent_ng_container_11_Template","ɵɵpureFunction1","_c3","ɵɵtwoWayProperty","maxlength","_c4","_ChatComposerComponent","ɵɵelementStart","ɵɵlistener","ɵɵrestoreView","_r3","idx_r4","ɵɵnextContext","index","ctx_r1","ɵɵresetView","deleteLineItemAndCalculate","ɵɵtext","ɵɵelementEnd","ɵɵelementContainerStart","ɵɵelement","_r1","calculateSubTotalAndTax","ɵɵtemplate","InboxInsertPaymentLinkFormComponent_ng_container_8_button_10_Template","ɵɵadvance","ɵɵproperty","lineItemForm_r5","ɵɵpropertyInterpolate","ɵɵpipeBind1","ɵɵtextInterpolate1","currencySymbol","ɵɵtextInterpolate2","ɵɵpipeBind4","tax","CENTS_PER_DOLLAR","currencyCode","DIGITS_INFO","InboxInsertPaymentLinkFormComponent","constructor","data","ssoService","formBuilder","conversationService","merchantService","snackbarService","translateService","dialogRef","inboxService","hostAppInterface","inject","CONVERSATION_HOST_APP_INTERFACE_TOKEN","paymentLinkForm","group","lineItems","array","defaultLineItem","quantity","description","amount","subTotal","showTaxCalculation","partnerId$","PARTNER_ID_TOKEN","ngOnInit","initCurrency","push","isPartnerCenter","pipe","switchMap","partnerId","getMultiRetailConfigurations","take","subscribe","config","get","getCurrencySymbol","controls","addLineItem","removeAt","getLineItemsFormArray","getLineItemsFormControl","formatAmount","isNaN","toFixed","getLineItemsArray","forEach","formControl","idx","parseInt","value","at","setValue","reduce","acc","cur","calculatePaymentLinkTax","conversationDetail","taxAmount","requestPayment","createPaymentLink","paymentUrl","close","successMessage","instant","openWithOptions","action","actionCallback","window","open","openSuccessSnack","openErrorSnack","ɵɵdirectiveInject","MAT_DIALOG_DATA","SSOService","UntypedFormBuilder","ConversationService","MerchantService","SnackbarService","TranslateService","MatDialogRef","InboxService","selectors","decls","vars","consts","template","rf","ctx","InboxInsertPaymentLinkFormComponent_ng_container_8_Template","InboxInsertPaymentLinkFormComponent_ng_container_22_Template","ɵɵtextInterpolate","_InboxInsertPaymentLinkFormComponent","InboxInsertPaymentLinkComponent","constructor","modal","insertLink","EventEmitter","openInsertLinkModal","open","InboxInsertPaymentLinkFormComponent","width","data","conversationDetail","afterClosed","subscribe","res","emit","ɵɵdirectiveInject","MatDialog","selectors","inputs","outputs","decls","vars","template","rf","ctx","encapsulation","_InboxInsertPaymentLinkComponent","GetReviewSourceSettingsRequest","_GetReviewSourceSettingsRequest","proto","m","kwargs","toReturn","GetReviewSourceSettingsResponse","_GetReviewSourceSettingsResponse","ReviewSources","_ReviewSources","environment","hostMap","HostService","t","ɵɵdefineInjectable","ListingsApiService","http","hostService","HttpHeaders","r","request","GetReviewSourceSettingsRequest","map","resp","GetReviewSourceSettingsResponse","t","ɵɵinject","HttpClient","HostService","ɵɵdefineInjectable","ListingService","constructor","listingsApiService","accountGroupId$","pipe","takeUntilDestroyed","subscribe","accountGroupId","currentAccountGroupId","reviewLinks$","getReviewSourceSettings","map","response","reviewSources","filter","result","url","overriddenUrl","sort","a","b","sourceId","GOOGLE_SOURCE_ID","FACEBOOK_SOURCE_ID","sourceName","displayName","reviewUrl","ɵɵinject","ListingsApiService","ACCOUNT_GROUP_ID_TOKEN","factory","ɵfac","_ListingService","ɵɵelementContainer","ɵɵproperty","reviewLinks_r2","ɵɵpureFunction1","_c2","brandingInfo_r1","errorState_r3","ɵɵelementStart","ɵɵelementContainerStart","ɵɵtemplate","InboxInsertReviewLinkComponent_div_2_ng_container_3_Template","InboxInsertReviewLinkComponent_div_2_ng_container_4_Template","ɵɵelementEnd","ɵɵadvance","ɵɵpipeBind1","ctx_r3","cvPreferredSitesSettingsLink$","ɵɵtext","ɵɵlistener","ɵɵrestoreView","_r5","ɵɵnextContext","ɵɵresetView","sendMessage","ɵɵtextInterpolate1","ɵɵelement","reviewLink_r7","_r6","$implicit","useLink","sourceName","InboxInsertReviewLinkComponent_ng_template_16_ng_container_0_ng_container_10_ng_container_1_ng_container_1_button_1_Template","reviewLinks_r8","InboxInsertReviewLinkComponent_ng_template_16_ng_container_0_ng_container_10_ng_container_1_ng_container_1_Template","length","setupCustomerVoice_r9","InboxInsertReviewLinkComponent_ng_template_16_ng_container_0_ng_container_10_ng_container_1_Template","loading$","_r10","preferredSitesLink_r11","ngIf","openNewCVPreferredSitesSettingsTab","ɵɵpipeBind2","_c3","cvBrandingInfo_r12","name","InboxInsertReviewLinkComponent_ng_template_16_ng_container_0_glxy_loading_spinner_8_Template","InboxInsertReviewLinkComponent_ng_template_16_ng_container_0_ng_container_10_Template","InboxInsertReviewLinkComponent_ng_template_16_ng_container_0_ng_template_12_Template","ɵɵtemplateRefExtractor","iconUrl","ɵɵsanitizeUrl","reviewLinks$","InboxInsertReviewLinkComponent_ng_template_16_ng_container_0_Template","cvBrandingInfo_r13","InboxInsertReviewLinkComponent","constructor","conversationService","appPartnerService","listingService","ssoService","accountsService","featureFlagService","analyticsService","environmentService","inboxService","hostAppInterface","inject","CONVERSATION_HOST_APP_INTERFACE_TOKEN","participantService","ParticipantService","insertLink","EventEmitter","loading$$","BehaviorSubject","asObservable","accountGroupId$","ACCOUNT_GROUP_ID_TOKEN","partnerId$","PARTNER_ID_TOKEN","customerVoiceAppIsActive$","pipe","switchMap","accountGroupId","getMultiActivationStatuses","catchError","err","console","warn","EMPTY","defaultIfEmpty","map","res","filter","productId","CustomerVoiceAppIDs","getEnvironment","status","ActivationStatus","ACTIVATION_STATUS_ACTIVATED","combineLatest","customerVoiceAppIsActive","getEntryUrl","newAccountServiceContext","of","entryUrl","url","URL","replace","searchParams","set","toString","shareReplay","customerVoiceAppInfo$","marketId$","partnerId","marketId","getAppSettings","error","branding","enabled","appSettings","DEFAULT_CV_NAME","DEFAULT_CV_ICON","enableMessagePartnerFeature$","batchGetStatus","SMB_MESSAGE_PARTNER_FEATURE","ff","feature","refCount","bufferSize","next","results","reviewLink","__async","Promise","all","firstValueFrom","trackEvent","location","platformLocation","emit","reviewUrl","cvPreferredSitesSettingsLink","window","open","getInserReviewMenu","customerVoiceMenu","contactUsMenu","buildIAMUserParticipant","take","subscribe","currentIAMParticipant","redirectToInternalConversation","SubjectParticipant","internalParticipantId","participantType","GlobalParticipantType","GLOBAL_PARTICIPANT_TYPE_ACCOUNT_GROUP","GLOBAL_PARTICIPANT_TYPE_PARTNER","ConversationChannel","CONVERSATION_CHANNEL_INTERNAL","ɵɵdirectiveInject","ConversationService","AppPartnerService","ListingService","SSOService","AccountsService","FeatureFlagService","ProductAnalyticsService","EnvironmentService","InboxService","selectors","viewQuery","rf","ctx","InboxInsertReviewLinkComponent_div_2_Template","InboxInsertReviewLinkComponent_div_12_Template","InboxInsertReviewLinkComponent_ng_template_14_Template","InboxInsertReviewLinkComponent_ng_template_16_Template","InboxInsertReviewLinkComponent_ng_template_18_Template","tmp_6_0","emptyInsertLink_r14","_InboxInsertReviewLinkComponent","INBOX_NAVIGATION_LINK","outlets","inbox","INBOX_TEMPLATES_ROUTER_LINK","DEFAULT_MESSAGE_GROUPING_DURATION","DEFAULT_HOUR_GROUP_DURATION","ɵɵelementStart","ɵɵlistener","template_r3","ɵɵrestoreView","_r2","$implicit","ctx_r3","ɵɵnextContext","ɵɵresetView","selectTemplate","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate","name","content","ɵɵtemplate","InboxInsertTemplateComponent_ng_container_9_ng_container_1_mat_action_list_1_button_1_Template","ɵɵproperty","templateList_r5","ɵɵelementContainerStart","InboxInsertTemplateComponent_ng_container_9_ng_container_1_mat_action_list_1_Template","_r1","loadNext","length","emptyState_r6","InboxInsertTemplateComponent_ng_container_9_ng_container_1_Template","ɵɵpipeBind1","loading$","loadingTemplates_r7","ɵɵelement","ɵɵtextInterpolate1","InboxInsertTemplateComponent","constructor","dialogRef","scrollable","getScrollableList","templates$","items$","loading$$","BehaviorSubject","asObservable","templateService","inject","TemplateService","inboxService","InboxService","accountGroupId","toSignal","ACCOUNT_GROUP_ID_TOKEN","isBusinessApp","getEditRoute","INBOX_TEMPLATES_ROUTER_LINK","template","close","loadMore","Scrollable","of","_","cursor","listTemplates","TEMPLATES_PAGE_SIZE","pipe","map","response","next","items","templates","pagingMetadata","nextCursor","hasMore","catchError","ɵɵdirectiveInject","MatDialogRef","selectors","decls","vars","consts","rf","ctx","InboxInsertTemplateComponent_ng_container_9_Template","InboxInsertTemplateComponent_ng_template_11_Template","ɵɵtemplateRefExtractor","InboxInsertTemplateComponent_ng_template_13_Template","_InboxInsertTemplateComponent","CanEnableBusinessCommunicationsRequest","_CanEnableBusinessCommunicationsRequest","proto","m","kwargs","toReturn","CanEnableBusinessCommunicationsResponse","_CanEnableBusinessCommunicationsResponse","ConnectBusinessCommunicationsRequest","_ConnectBusinessCommunicationsRequest","GetBusinessLaunchStatusRequest","_GetBusinessLaunchStatusRequest","GetBusinessLaunchStatusResponse","_GetBusinessLaunchStatusResponse","UnlaunchBusinessCommunicationsAgentRequest","_UnlaunchBusinessCommunicationsAgentRequest","environment","hostMap","HostService","t","ɵɵdefineInjectable","BusinessCommunicationsApiService","http","hostService","HttpHeaders","r","request","ConnectBusinessCommunicationsRequest","__spreadProps","__spreadValues","UnlaunchBusinessCommunicationsAgentRequest","GetBusinessLaunchStatusRequest","map","resp","GetBusinessLaunchStatusResponse","CanEnableBusinessCommunicationsRequest","CanEnableBusinessCommunicationsResponse","t","ɵɵinject","HttpClient","HostService","ɵɵdefineInjectable","ConversationChannelService","BusinessMessagesEnabledState","ConversationGoogleService","ConversationChannelService","constructor","partnerId$","inject","PARTNER_ID_TOKEN","accountGroupId$","ACCOUNT_GROUP_ID_TOKEN","router","Router","googleMyBusinessService","BusinessCommunicationsApiService","googleBusinessMessagesAvailable$","CONVERSATION_GOOGLE_BUSINESS_MESSAGES_AVAILABLE_TOKEN","isGoogleBusinessMessagesEnabled$","combineLatest","pipe","switchMap","partnerId","accountGroupId","getBusinessLaunchStatus","map","res","isLaunched","catchError","of","getChatComposerAlert","conversationDetail","canSendGoogleBusinessMessage","canSend","IS_ENABLED","getGoogleBusinessMessagesError","enabledState","accountGroup","alert","NOT_ENABLED","title","description","INVALID_TOKEN","action","callback","navigate","CONVERSATION_EXPIRED","NOT_LAUNCHED","UNKNOWN_ERROR","expirationDate","addDays","latestMessage","updated","currentDate","Date","launchStatus$","error","HttpErrorResponse","status","HttpStatusCode","PreconditionFailed","googleBusinessMessagesAvailable","launched","isBefore","t","factory","ɵfac","_ConversationGoogleService","smsNotAvailableError","phoneNumber","email","country","translator","title","instant","countryCode","toUpperCase","phone","formatNumber","ConversationWebchatService","ConversationChannelService","constructor","translationService","inject","TranslateService","inboxService","InboxService","country$","CONVERSATION_COUNTRY_TOKEN","smsRegistrationService","isBusinessApp","SmsRegistrationService","conversationApiService","ConversationApiService","accountGroupId$","ACCOUNT_GROUP_ID_TOKEN","webchats$","pipe","switchMap","accountGroupId","listWidgets","namespace","map","widgets","shareReplay","bufferSize","refCount","catchError","__async","isAnyWebchatEnabled$","webchats","some","webchat","isEnabled","getChatComposerAlert","partnerId","conversationDetail","conversation","channel","ConversationChannel","CONVERSATION_CHANNEL_WEB_CHAT","of","participants","find","participant","participantType","ParticipantType","PARTICIPANT_TYPE_ANONYMOUS","contactInfoMissingError","customerParticipant","PARTICIPANT_TYPE_CUSTOMER","phoneNumber","email","country","smsNotAvailableError","combineLatest","SMSNumber$","registrationStage$","smsNumber","registrationStage","RegistrationStage","RegistrationComplete","title","t","factory","ɵfac","_ConversationWebchatService","INBOX_NOTIFICATION_TYPE_ID","TURN_ON_NOTIFICATION_COOKIE","InboxNotificationService","constructor","notificationsService","cookieService","userId$","partnerId$","inboxNotificationStatus$","combineLatest","pipe","switchMap","partnerId","userId","getNotificationSettingStatus$","user","userCookiesValue$$","BehaviorSubject","takeUntilDestroyed","subscribe","next","getCookie","get","getCookieStatus","getValue","setCookie","expiry","Date","setDate","getDate","set","turnOnOnlyMyEventsNotification$","context","emailSetting","notificationTypeId","notificationMedium","NotificationMedium","NOTIFICATION_MEDIUM_EMAIL","webSetting","NOTIFICATION_MEDIUM_WEB","saveSettingMulti$","ɵɵinject","NotificationsService","CookieService","USER_ID_TOKEN","PARTNER_ID_TOKEN","factory","ɵfac","_InboxNotificationService","localStorageKey","getDefaultViewId","localStorage","getItem","ALL_VIEW_ID","ViewService","constructor","analyticsService","conversationApiService","participantService","selectedViewId$$","BehaviorSubject","selectedViewId$","pipe","distinctUntilChanged","tap","selectedViewId","trackEvent","viewId","setItem","setViewId","next","loadViews","currentParticipant$","filter","participant","switchMap","getConversationViews","participantId","map","res","views","addConversationToConversationView","conversationId","combineLatest","currentUserParticipant","value","FOLLOWING_VIEW_ID","removeConversationFromConversationView","ɵɵinject","ProductAnalyticsService","ConversationApiService","ParticipantService","factory","ɵfac","_ViewService","ConversationListService","constructor","participantService","inject","ParticipantService","inboxService","InboxService","firestoreService","FirestoreService","conversationService","ConversationService","groupId$","GROUP_ID_TOKEN","currentParticipant$","filters$$","BehaviorSubject","loadMoreConversations$$","Subject","filterTerm$$","conversationsScrollable$","combineLatest","organizationId$","ViewService","selectedViewId$","showInboxViews$","isConversationSummaryEnabled$","pipe","observeOn","asyncScheduler","switchMap","currentParticipant","organizationId","viewId","showViews","filterTerm","filters","groupId","showConversationSummary","pageSize","conversations","startWith","q","FOLLOWING_VIEW_ID","getViewsConversationsQuery","participantId","setupBaseConversationsQuery","query","limit","fetchConversations","map","newConversations","filterConversations","loading","empty","length","of","takeUntilDestroyed","shareReplay","conversations$","scrollable","distinctUntilChanged","loadingConversations$","emptyConversations$","organizationHasConversations$","collectionData","res","organizationHasClosedConversations$","id","isOpen","isAnonymous","loadMoreConversations","next","conversationsCollection","getSummary","idField","cs","c","conversationId","filter","ids","getMultiConversationDetails","setFilterTerm","term","options","toUpperCase","conversationDetail","participantsFiltered","participants","participant","name","toLocaleUpperCase","includes","phoneNumber","updateFilters","factory","ɵfac","providedIn","_ConversationListService","InboxTermsOfService","constructor","partnerTermsOfApiService","partnerUserAgreementTermsOfApiService","conversationService","snackBar","partnerId$","userId$","inboxService","termsOfServiceAccepted$$","ReplaySubject","termsOfServiceAccepted$","asObservable","platformLocationToSKey$","of","getPlatformLocationToSKey","platformLocation","userAgreementTerms$","pipe","switchMap","platformLocationToSKey","getUserAgreement","feature","termsOfService$","getTermsOfService","partnerId","map","tos","termsOfService","getTermsOfServiceText$","combineLatest","userAgreementResponse","isNewTermsOfService","userAgreement","userAgreementTermsOfService","terms","userAgreementIsAccepted","hasTermsOfService","next","shareReplay","__spreadProps","__spreadValues","marketId","userId","getUserAgreementTermsOfService","catchError","e","console","warn","EMPTY","defaultIfEmpty","check","accepted","acceptedAt","createdOn","acceptTermsOfService$","setUserAgreementTermsOfService","Date","err","open","duration","ɵɵinject","PartnerTermsOfApiService","PartnerUserAgreementTermsOfApiService","ConversationService","MatSnackBar","PARTNER_ID_TOKEN","USER_ID_TOKEN","InboxService","factory","ɵfac","_InboxTermsOfService","MessageGroup","constructor","messageId","sender","messageType","channel","createdAt","id","messages","type","addMessage","message","push","lastMessage","length","ChatComposerActionButtonDirective","constructor","class","selectors","hostVars","hostBindings","rf","ctx","ɵɵclassMap","_ChatComposerActionButtonDirective","ɵɵelementContainerStart","ɵɵelementStart","ɵɵlistener","ɵɵrestoreView","_r2","ɵɵnextContext","hiddenUploader_r3","ɵɵreference","ɵɵresetView","browseForFiles","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵpropertyInterpolate","ɵɵpipeBind1","ɵɵproperty","ctx_r3","isRecording","ɵɵpureFunction1","_c0","_r5","toggleRecording","ɵɵtemplate","InboxUploadFileComponent_ng_container_1_mat_icon_5_Template","InboxUploadFileComponent_ng_container_1_ng_template_6_Template","ɵɵtemplateRefExtractor","disableVoiceRecording$","recordingState_r6","InboxUploadFileComponent","conversationDetail","value","inboxUploadService","conversationId$$","next","conversation","conversationId","conversationChannel$$","channel","constructor","snackbarService","analyticsService","participantService","inboxService","maxFiles","MAX_FILES","ReplaySubject","conversationChannel$","asObservable","chunks","files$$","pipe","map","files","length","enableVoiceRecording","fileChanged","EventEmitter","fileUploaded","file","__async","emitAnalyticsEvent","emit","uploadErrored","err","error","message","openErrorSnack","firstValueFrom","interpolateTranslateParams","maxFileSize","getMaxFileSizeInMB","selectedChatSourceId","toString","fileInfo","filesChanged","status","FileUploadStatus","Success","showUploadIcon","startRecording","stopRecording","navigator","mediaDevices","getUserMedia","audio","then","stream","recorder","MediaRecorder","ondataavailable","ev","push","data","start","recordingTimeout","window","setTimeout","MAX_RECORDING_TIME","catch","console","fileName","Date","toISOString","onstop","blob","Blob","type","File","name","Queued","setFiles","uploadQueuedFiles","clearTimeout","stop","getTracks","forEach","track","eventName","sender","Promise","all","currentParticipant$","trackEvent","accountGroupId","partnerId","location","platformLocation","mediaType","ngOnDestroy","clear","fileErrored$$","ɵɵdirectiveInject","SnackbarService","InboxUploadService","ProductAnalyticsService","ParticipantService","InboxService","selectors","viewQuery","rf","ctx","GalaxyUploaderComponent","provide","GALAXY_UPLOADER_SERVICE_TOKEN","useExisting","decls","vars","consts","template","InboxUploadFileComponent_ng_container_0_Template","InboxUploadFileComponent_ng_container_1_Template","$event","i0","_r1","_InboxUploadFileComponent","ChatComposerActionsDirective","constructor","class","selectors","hostVars","hostBindings","rf","ctx","ɵɵclassMap","_ChatComposerActionsDirective","ChatComposerBesideSendDirective","constructor","class","selectors","hostVars","hostBindings","rf","ctx","ɵɵclassMap","_ChatComposerBesideSendDirective","ɵɵelementStart","ɵɵlistener","ɵɵrestoreView","_r2","ctx_r2","ɵɵnextContext","ɵɵresetView","removeFile","ɵɵelementEnd","ɵɵproperty","files","ɵɵpureFunction1","_c4","length","_r4","_r6","closeChannelInfoPopover","ɵɵtext","ɵɵelement","showChannelInfoPopover","popoverOrigin_r8","ɵɵadvance","ɵɵtextInterpolate1","ɵɵpipeBind1","popoverConfig_r7","title","contentFirst","ɵɵsanitizeHtml","ɵɵtextInterpolate","contentSecond","_r5","toggleChannelInfoPopover","ɵɵtemplate","InboxMessageTextComponent_glxy_composer_beside_send_23_glxy_popover_5_Template","popoverConfig$","_r9","item_r10","$implicit","onClick","matMenu","icon","action","ɵɵelementContainerStart","InboxMessageTextComponent_ng_container_34_button_1_Template","visible","InboxMessageTextComponent","availableChannels","value","availableChannels$$","next","preferredChannel","ConversationChannel","CONVERSATION_CHANNEL_UNDEFINED","selectedChatSourceId","set","mapConversationChannelToChatSource","id","conversationDetail","conversationDetail$$","constructor","conversationService","featureFlagService","paymentService","partnerId$","accountGroupId$","inboxService","inboxUploadService","modal","analyticsService","hostAppInterface","inject","CONVERSATION_HOST_APP_INTERFACE_TOKEN","snackbarService","SnackbarService","isImpersonating","missingContactInformation","ReplaySubject","availableChannels$","asObservable","BehaviorSubject","conversationDetail$","sendMessage","EventEmitter","fileChange","signal","fileTypes","computed","file","type","includes","disableButtonForSendMsg$$","disableButtonForUploadFile$$","disableButton$","combineLatest","pipe","map","sendMsg","uploadFile","isComposerDisabled","undefined","currentConversationChannel$","isOpenAIChannel$","channel","CONVERSATION_CHANNEL_OPENAI","canAccessVoiceRecorder$","CONVERSATION_CHANNEL_INTERNAL","chatSourcesInfo$","switchMap","channels","of","chatSourcesInfo","getChatSourceInfo","first","forkJoin","availableChatSources$","chatSourceInfo","info","phoneNumber","v","Array","shareReplay","refCount","bufferSize","results","result","CONVERSATION_CHANNEL_SMS","setSMSChannelPopoverInfo","setInPlatformChannelPopoverInfo","CONVERSATION_CHANNEL_GOOGLE_BUSINESS_COMMUNICATIONS","setGoogleBusinessCommunicationsPopoverInfo","showPopover$","isOpenAIChannel","popoverConfig","TOOLTIP_BOTTOM_RIGHT","__spreadValues","PopoverPositions","TopRight","showImpersonatedPopover","composerCollapsedActions","showTemplates$","canAccessMessageTemplateSettingsCard$","takeUntilDestroyed","subscribe","conversation","conversationId","conversationId$$","canAccessPaymentLink$","partnerId","batchGetStatus","take","res","withLatestFrom","canAccess","accountGroupId","isBusinessApp","getRetailProvider","retailProvider","stripeConnectId","isPartnerCenter","effect","setComposerDisabled","allowSignalWrites","ngOnChanges","ngAfterViewInit","__async","push","inboxInsertReview","getInserReviewMenu","firstValueFrom","catch","inboxInsertPaymentLink","openInsertLinkModal","trackingProps","buildTemplateTrackProperties","trackEvent","openInsertTemplateModal","ch","getAppOptions","is_multilocation","currentConvoSMSNumber$","filter","resp","sendSMSNumber$","onSubmit","sentMessage","text","messageText","attachments","getMessageMediaInfo","mapChatSourceIdToConversationChannel","sourceId","messageInfo","trim","emit","media_content_type","media_location_path","media_file_name","media_file_size","data","mediaContentType","mediaLocationPath","mediaFileName","fileSize","showImpersonatedPopovers","hideImpersonatedPopovers","insertLink","reviewLink","shortenLink","shortenReviewLink","chatComposer","insertDynamicContent","composerTextArea","nativeElement","focus","setFile","status","FileUploadStatus","Queued","InProgress","Success","Fail","clear","fileErrored$$","clearText","clearMessageText","modalRef$","open","InboxInsertTemplateComponent","width","autoFocus","template","afterClosed","content","templateId","error","console","openErrorSnack","isMobile","ɵɵdirectiveInject","ConversationService","FeatureFlagService","PaymentService","PARTNER_ID_TOKEN","ACCOUNT_GROUP_ID_TOKEN","InboxService","InboxUploadService","MatDialog","ProductAnalyticsService","selectors","viewQuery","rf","ctx","provide","GALAXY_UPLOADER_SERVICE_TOKEN","useExisting","ɵɵNgOnChangesFeature","decls","vars","consts","InboxMessageTextComponent_glxy_uploader_list_0_Template","InboxMessageTextComponent_glxy_image_list_1_Template","$event","i0","_r1","InboxMessageTextComponent_glxy_composer_beside_send_23_Template","InboxMessageTextComponent_ng_container_34_Template","inboxUploadFile_r11","uploader","impersonatedPopover_r12","prefilledMessage","ɵɵpropertyInterpolate","dynamicContentMenu_r13","_InboxMessageTextComponent","CONVERSATION_CHANNEL_FACEBOOK","CONVERSATION_CHANNEL_WEB_CHAT","CONVERSATION_CHANNEL_EMAIL","CONVERSATION_CHANNEL_INSTAGRAM","Error","sourceName","account","shortSourceName","ɵɵelement","ɵɵproperty","ctx_r0","data","mediaUrl","ɵɵsanitizeUrl","ɵɵelementStart","ɵɵelementEnd","ɵɵadvance","mediaContentType","MediaDialogComponent","constructor","dialogRef","ɵɵdirectiveInject","MatDialogRef","MAT_DIALOG_DATA","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵtemplate","MediaDialogComponent_img_0_Template","MediaDialogComponent_video_1_Template","ɵɵtext","indexOf","ɵɵtextInterpolate1","ɵɵpipeBind1","CommonModule","NgIf","MatDialogModule","MatDialogClose","MatDialogActions","MatFormFieldModule","MatInputModule","FormsModule","MatButtonModule","MatButton","TranslateModule","TranslatePipe","encapsulation","_MediaDialogComponent","ResponseEvaluationDialogComponent","constructor","dialogRef","data","inject","MAT_DIALOG_DATA","icon","helpful","label","evaluationForm","FormGroup","comment","FormControl","submit","close","value","onClick","event","stopPropagation","ɵɵdirectiveInject","MatDialogRef","selectors","hostBindings","rf","ctx","ɵɵlistener","$event","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵelement","ɵɵadvance","ɵɵproperty","ɵɵtextInterpolate","ɵɵpipeBind1","ɵɵtextInterpolate1","CommonModule","GalaxyFormFieldModule","FormFieldComponent","LabelDirective","MatDialogModule","MatDialogClose","MatDialogActions","MatDialogContent","MatFormFieldModule","MatInputModule","MatInput","MatIconModule","ReactiveFormsModule","ɵNgNoValidate","DefaultValueAccessor","NgControlStatus","NgControlStatusGroup","FormGroupDirective","FormControlName","FormsModule","MatButtonModule","MatButton","TranslateModule","TranslatePipe","encapsulation","_ResponseEvaluationDialogComponent","ɵɵelement","ɵɵproperty","ctx_r0","RECEIVED","OPENAI_BOT_NAME","ɵɵpipeBind1","OPENAI_BOT_SVG_ICON","OPENAI_BOT_BACKGROUND_COLOR","ɵɵelementContainer","messageGroup_r3","ɵɵpureFunction1","_c1","item_r2","systemMessage_r4","_c2","ɵɵelementContainerStart","ɵɵtemplate","InboxMessagesComponent_ng_container_4_ng_container_1_ng_container_2_Template","InboxMessagesComponent_ng_container_4_ng_container_1_ng_container_3_Template","ɵɵadvance","type","MessageType","MESSAGE_TYPE_MESSAGE","MESSAGE_TYPE_SYSTEM","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵpipeBind2","happenedAt","ɵɵtextInterpolate1","labelKey","InboxMessagesComponent_ng_container_4_ng_container_1_Template","InboxMessagesComponent_ng_container_4_glxy_chat_event_2_Template","isConversationEvent","ɵɵlistener","ɵɵrestoreView","_r5","message_r6","ɵɵnextContext","$implicit","ɵɵresetView","openEvaluateModal","InboxMessagesComponent_ng_template_6_ng_container_10_glxy_chat_message_1_glxy_additional_metadata_4_Template","body","mapMessageStatus","created","messageGroup_r7","sender","participantType","OPENAI_BOT_TYPE","InboxMessagesComponent_ng_template_6_ng_container_10_glxy_chat_message_1_Template","mediaMessage_r8","createdAt","InboxMessagesComponent_ng_template_6_ng_container_10_Template","InboxMessagesComponent_ng_template_6_glxy_chat_divider_text_11_Template","lastMessage","profileImageUrl","defaultBackgroundColor","channel","messages","trackById","message_r9","ɵɵsanitizeHtml","_r10","media_r11","openInDialog","mediaUrl","mediaContentType","message_r12","message","addMessageIdToMediaErrors","id","ɵɵsanitizeUrl","_r13","_r14","InboxMessagesComponent_ng_template_10_ng_container_0_ng_container_5_ng_container_1_img_2_Template","InboxMessagesComponent_ng_template_10_ng_container_0_ng_container_5_ng_container_1_video_3_Template","InboxMessagesComponent_ng_template_10_ng_container_0_ng_container_5_ng_container_1_audio_4_Template","indexOf","InboxMessagesComponent_ng_template_10_ng_container_0_ng_container_5_ng_container_1_Template","acceptedMimeType","otherFile_r15","ɵɵtextInterpolate","ɵɵpropertyInterpolate","mediaUrl_r16","mediaFileName","InboxMessagesComponent_ng_template_10_ng_container_0_ng_template_7_a_0_Template","InboxMessagesComponent_ng_template_10_ng_container_0_ng_container_5_Template","InboxMessagesComponent_ng_template_10_ng_container_0_glxy_empty_state_6_Template","InboxMessagesComponent_ng_template_10_ng_container_0_ng_template_7_Template","ɵɵtemplateRefExtractor","ɵɵclassProp","mediaWithErrorsMessageIDs","InboxMessagesComponent_ng_template_10_ng_container_0_Template","media","InboxMessagesComponent","value","set","messages$$","next","events","events$$","conversation","conversationDetail$$","constructor","analytics","dialog","signal","DEFAULT_OPENAI_BOT_NAME","ParticipantType","PARTICIPANT_TYPE_OPENAI_BOT","BehaviorSubject","messages$","asObservable","conversationId$","pipe","map","conversationId","groupedMessages$","combineLatest","groupMessages","slice","reverse","loadingOpenAIReply","toSignal","ConversationChannel","CONVERSATION_CHANNEL_OPENAI","latestMessage","PARTICIPANT_TYPE_IAM_USER","conversationService","inject","ConversationService","aiIconService","GalaxyAiIconService","url","contentType","trackEvent","open","MediaDialogComponent","data","height","maxWidth","_","item","eventId","messageID","update","errors","helpful","__async","modalRef$","ResponseEvaluationDialogComponent","width","submission","firstValueFrom","afterClosed","sentiment","EvaluationSentiment","EVALUATION_SENTIMENT_POSITIVE","EVALUATION_SENTIMENT_NEGATIVE","evaluateResponse","messageId","comment","mapStatusForMessage","ɵɵdirectiveInject","ProductAnalyticsService","MatDialog","selectors","viewQuery","rf","ctx","InboxMessagesComponent_glxy_chat_message_group_3_Template","InboxMessagesComponent_ng_container_4_Template","InboxMessagesComponent_ng_template_6_Template","InboxMessagesComponent_ng_template_8_Template","InboxMessagesComponent_ng_template_10_Template","tmp_4_0","undefined","_InboxMessagesComponent","filter","Boolean","sort","a","b","aDate","toDate","getTime","bDate","reduce","list","isSystemMessage","previousGroup","length","canAddMessageToPreviousGroup","addMessage","newGroup","createNewGroupWithMessage","MessageGroup","isSameSender","participantId","isSameType","isSameChannel","isWithinDuration","DEFAULT_MESSAGE_GROUPING_DURATION","previousMessage","previousDate","messageDate","enoughTimeElapsed","DEFAULT_HOUR_GROUP_DURATION","ɵɵelement","InboxAiChatComponent","constructor","conversationService","inboxService","messages$","loadingMessages","toSignal","loadingMessages$","currentConversationDetail$","loadingConversation","signal","loading","computed","isImpersonating$","isUserImpersonated$","AIParticipantRecipient","participantType","ParticipantType","PARTICIPANT_TYPE_OPENAI_BOT","partnerId","userId$","inject","USER_ID_TOKEN","partnerId$","PARTNER_ID_TOKEN","senderParticipant$","combineLatest","pipe","map","user","partnerID","internalParticipantId","PARTICIPANT_TYPE_IAM_USER","isSubjectParticipant","availableChannels","ConversationChannel","CONVERSATION_CHANNEL_OPENAI","preferredChannel","ngOnInit","startConversation","__async","participants","firstValueFrom","resp","createConversation","PlatformLocation","PLATFORM_LOCATION_PARTNER_CENTER","setCurrentFirestoreConversationId","toFirestoreId","conversation","conversationId","error","console","warn","set","sendMessage","messageInfo","currentConversationDetail","filterNullAndUndefined","channel","MessageType","MESSAGE_TYPE_MESSAGE","text","platformLocation","attachments","inboxTextComponent","clearText","ɵɵdirectiveInject","ConversationService","InboxService","selectors","viewQuery","rf","ctx","ɵɵelementStart","ɵɵtemplate","InboxAiChatComponent_glxy_loading_spinner_1_Template","ɵɵlistener","$event","i0","ɵɵrestoreView","_r1","ɵɵresetView","ɵɵelementEnd","ɵɵadvance","ɵɵproperty","ɵɵpipeBind1","tmp_3_0","_InboxAiChatComponent","MODULE_IMPORTS","CommonModule","MatButtonModule","MatIconModule","TextFieldModule","MatMenuModule","MatTooltipModule","FormsModule","GalaxyButtonLoadingIndicatorModule","GalaxyChatComposerModule","MODULE_IMPORTS","_GalaxyChatComposerModule","InboxConversationPreviewComponent","constructor","conversationService","inject","ConversationService","conversationDetail$$","ReplaySubject","conversationDetail$","asObservable","previewContent$","pipe","switchMap","details","getPreviewContent","conversationDetail","value","next","selectors","inputs","decls","vars","consts","template","rf","ctx","ɵɵelement","ɵɵproperty","ɵɵpipeBind1","ɵɵsanitizeHtml","_InboxConversationPreviewComponent","InboxConversationTitleComponent","constructor","hostAppInterface","inject","CONVERSATION_HOST_APP_INTERFACE_TOKEN","title$$","BehaviorSubject","title$","asObservable","isInternalInfoDeleted","conversationClosed","displayOnTopBar","conversationDetail","value","title","getConversationTitleInfo","next","isRecipientInternalInfoDeleted","selectors","inputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵpropertyInterpolate","ɵɵpipeBind1","ɵɵproperty","ɵɵpureFunction1","_c0","ɵɵadvance","ɵɵtextInterpolate1","AsyncPipe","NgStyle","NgClass","TranslateModule","TranslatePipe","styles","changeDetection","_InboxConversationTitleComponent","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵproperty","ctx_r0","inboxRoute","ɵɵadvance","ɵɵtextInterpolate1","ɵɵpipeBind1","ɵɵelementContainerStart","ɵɵlistener","ɵɵrestoreView","_r2","ɵɵnextContext","ɵɵresetView","startNewMessage","ɵɵtextInterpolate","badge_r3","badgeColor","participantType","ɵɵtemplate","InboxPanePreviewComponent_mat_card_0_ng_template_10_div_2_a_1_div_6_div_1_Template","conversationDetail_r4","InboxPanePreviewComponent_mat_card_0_ng_template_10_div_2_a_1_div_6_Template","ɵɵelement","ɵɵpureFunction1","_c1","conversation","displayBadge","_c2","_c3","InboxPanePreviewComponent_mat_card_0_ng_template_10_div_2_a_1_Template","InboxPanePreviewComponent_mat_card_0_ng_template_10_div_2_Template","_c0","showEmptyState$","conversations$","trackConversationDetailsById","InboxPanePreviewComponent_mat_card_0_a_5_Template","InboxPanePreviewComponent_mat_card_0_ng_container_8_Template","InboxPanePreviewComponent_mat_card_0_ng_template_10_Template","ɵɵtemplateRefExtractor","listConversations_r5","InboxPanePreviewComponent","constructor","conversationService","inject","ConversationService","conversationListService","ConversationListService","inboxService","InboxService","firestoreService","FirestoreService","inboxNav","InboxNavigationService","isPartnerCenter","partnerId","accountGroupId","routes","toSignal","CONVERSATION_ROUTES_TOKEN","useInboxModal","computed","useModal","root","INBOX_NAVIGATION_LINK","ngOnInit","showInboxPreviewPane","fetchConversations","loadOrgRelatedConversationsQuery","pipe","shareReplay","bufferSize","refCount","map","conversations","length","i","conversationDetail","conversationId","gotoConversationChannel","SubjectParticipant","internalParticipantId","GlobalParticipantType","GLOBAL_PARTICIPANT_TYPE_PARTNER","GLOBAL_PARTICIPANT_TYPE_ACCOUNT_GROUP","ConversationChannel","CONVERSATION_CHANNEL_INTERNAL","selectors","inputs","decls","vars","consts","template","rf","ctx","InboxPanePreviewComponent_mat_card_0_Template","_InboxPanePreviewComponent","import_dayjs","import_utc","ɵɵelementStart","ɵɵelement","ɵɵelementEnd","ɵɵtext","InboxViewsEmptyComponent","constructor","viewService","inject","ViewService","selectedViewId$","allViewId","ALL_VIEW_ID","followingViewId","FOLLOWING_VIEW_ID","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelementContainerStart","ɵɵtemplate","InboxViewsEmptyComponent_div_2_Template","ɵɵproperty","ɵɵpipeBind1","ɵɵadvance","CommonModule","NgSwitch","NgSwitchCase","AsyncPipe","GalaxyEmptyStateModule","EmptyStateComponent","EmptyStateHeroDirective","styles","_InboxViewsEmptyComponent","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵproperty","ctx_r0","newMessageUrl","ɵɵtextInterpolate1","ɵɵpipeBind1","InboxZeroComponent","constructor","showNewMessageButton","routes","toSignal","inject","CONVERSATION_ROUTES_TOKEN","sendNewMessage","selectors","inputs","ɵɵInputFlags","HasDecoratorInputTransform","booleanAttribute","standalone","features","ɵɵInputTransformsFeature","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelement","ɵɵtemplate","InboxZeroComponent_glxy_empty_state_actions_18_Template","ɵɵtextInterpolate","CommonModule","NgIf","TranslateModule","TranslatePipe","MatButtonModule","MatAnchor","GalaxyEmptyStateModule","EmptyStateComponent","EmptyStateTitleDirective","EmptyStateActionsDirective","RouterLink","styles","_InboxZeroComponent","ɵɵelementStart","ɵɵlistener","ɵɵrestoreView","_r2","ctx_r2","ɵɵnextContext","ɵɵresetView","turnOnNotifications","onClose","ɵɵtext","ɵɵelementEnd","ɵɵpropertyInterpolate","ɵɵpipeBind1","ɵɵproperty","viewMode","ɵɵadvance","ɵɵtextInterpolate","ɵɵtextInterpolate1","view_r5","_r4","$implicit","showView","viewId","selectedViewId$","FOLLOW_VIEW_ID","InboxViewsComponent","constructor","router","conversationService","conversationListService","notificationsService","viewService","snackbarService","destroyRef","views$","loadViews","allViewId","ALL_VIEW_ID","notificationWarningView$$","ReplaySubject","notificationWarningView$","asObservable","removeLastConversationId","navigate","outlets","inbox","setViewId","conversationSelected","notificationWarningBannerStatus","viewSection","combineLatest","inboxNotificationStatus$","conversationSelected$","conversations$","pipe","takeUntilDestroyed","subscribe","notificationSetting","conversations","showNotificationWarningBanner","length","getCookieStatus","next","turnOnOnlyMyEventsNotification$","openSuccessSnack","error","openErrorSnack","setCookie","ɵɵdirectiveInject","Router","ConversationService","ConversationListService","InboxNotificationService","ViewService","SnackbarService","DestroyRef","selectors","inputs","decls","vars","consts","template","rf","ctx","ɵɵtemplate","InboxViewsComponent_glxy_alert_0_Template","i0","_r1","InboxViewsComponent_a_8_Template","ɵɵelement","tabPanel_r6","_InboxViewsComponent","ɵɵelement","ɵɵelementStart","ɵɵelementEnd","ɵɵadvance","ɵɵproperty","ɵɵpipeBind1","ɵɵtext","ɵɵclassProp","ctx_r0","showSearchBar","ɵɵtextInterpolate","ɵɵtemplate","InboxPaneComponent_div_2_glxy_form_field_1_Template","InboxPaneComponent_div_2_glxy_form_field_2_Template","formGroup","showFilters$","badge_r4","badgeColor","ɵɵtextInterpolate1","participantType","InboxPaneComponent_div_4_div_1_a_1_ng_container_2_div_5_div_1_Template","conversationDetail_r5","ɵɵelementContainerStart","InboxPaneComponent_div_4_div_1_a_1_ng_container_2_div_5_Template","InboxPaneComponent_div_4_div_1_a_1_ng_container_2_div_7_Template","conversation","displayBadge$","ɵɵclassMapInterpolate1","ɵɵpureFunction1","_c1","_c2","ɵɵlistener","ɵɵrestoreView","_r3","ɵɵnextContext","ɵɵresetView","conversationSelected","InboxPaneComponent_div_4_div_1_a_1_ng_container_2_Template","InboxPaneComponent_div_4_div_1_a_1_ng_template_4_Template","ɵɵtemplateRefExtractor","ɵɵpipeBind2","conversationPath","ɵɵpureFunction0","_c0","isBusinessApp","businessApp_r6","InboxPaneComponent_div_4_div_1_a_1_Template","InboxPaneComponent_div_4_div_1_Template","_r2","loadMoreConversations","InboxPaneComponent_div_4_glxy_loading_spinner_4_Template","filteredConversations$","trackConversationDetailsById","loadingConversations$","canAccessSMS$","dayjs","extend","utc","currentViewId","inject","ActivatedRoute","params","pipe","map","viewId","distinctUntilChanged","inboxViews","InboxPaneComponent","constructor","conversationService","inboxService","accountGroupId$","partnerId$","router","viewService","destroyRef","DestroyRef","activeRoute","conversationListService","ConversationListService","showInboxViews$","FormGroup","search","FormControl","nonNullable","view","getInitialView","conversations$","tap","now","routerState","currentConversationId","emptyConversations$","hasClosedConversations$","organizationHasClosedConversations$","viewId$","learnMoreUrl","emptyTitleMessage","emptySubtitleMessage","routes","toSignal","CONVERSATION_ROUTES_TOKEN","selectedViewId$","showToolbar$","showFilters","showEmptyView$","combineLatest","showInboxViews","emptyConversations","showInboxZero$","showEmptyView","hasClosedConversations","unfiltered","controls","value","ngOnInit","queryParamMap","takeUntilDestroyed","subscribe","updateFilters","isAnonymous","get","isOpen","currentUrlParts","url","split","length","isMobile","navigate","root","valueChanges","debounceTime","startWith","term","setFilterTerm","filter","queryParams","queryParamsHandling","selected","withinPreviousDayFirestoreTimestamp","timestamp","withinPreviousDay","toDate","date","diff","i","conversationDetail","conversationId","viewParam","snapshot","includes","ɵɵdirectiveInject","ConversationService","InboxService","ACCOUNT_GROUP_ID_TOKEN","PARTNER_ID_TOKEN","Router","ViewService","selectors","inputs","decls","vars","consts","template","rf","ctx","InboxPaneComponent_inbox_views_0_Template","InboxPaneComponent_div_2_Template","InboxPaneComponent_div_4_Template","InboxPaneComponent_inbox_views_empty_6_Template","InboxPaneComponent_inbox_zero_8_Template","_InboxPaneComponent","ɵɵelementStart","ɵɵlistener","ɵɵrestoreView","_r1","ctx_r1","ɵɵnextContext","ɵɵresetView","searchChanged","ɵɵelementEnd","ɵɵpropertyInterpolate","ɵɵpipeBind1","ɵɵproperty","control","auto_r3","_r4","ɵɵtext","ɵɵelement","contact_r5","ɵɵadvance","ɵɵtextInterpolate1","displayContactInfo","name","phoneAndEmail","_r6","openAddContactForm","SelectContactControl","FormControl","constructor","value","validator","validators","controlValidator","flat","isPhoneNumberAttempt","isNaN","Number","replace","isEmailAttempt","test","InboxSelectContactComponent","router","participantService","ngControl","inboxService","inject","InboxService","unsubscribe$","Subject","emailChannelSupported","toSignal","canAccessEmailChannel$","accountGroupId","ACCOUNT_GROUP_ID_TOKEN","routes","CONVERSATION_ROUTES_TOKEN","suggestedChannel","EventEmitter","ngOnInit","Error","contacts$","valueChanges","pipe","debounceTime","takeUntil","switchMap","term","contactId","of","searchTerm","getSearchTerm","searchContacts","skip","shareReplay","refCount","bufferSize","ngOnDestroy","next","complete","__async","contact","Validator","isEmail","length","setValue","email","parsed","parsePhoneNumber","isValid","phone","number","inputValue","navigate","root","state","__spreadValues","firstName","undefined","lastName","filter","s","join","countryCallingCode","formatNational","displayContact","getPhoneSearchTerm","cleanTerm","trim","startsWith","emailControlValue","phoneControlValue","emit","ConversationChannel","CONVERSATION_CHANNEL_SMS","CONVERSATION_CHANNEL_EMAIL","isPhoneNumber","CONVERSATION_CHANNEL_UNDEFINED","ɵɵdirectiveInject","Router","ParticipantService","NgControl","selectors","outputs","standalone","features","ɵɵProvidersFeature","provide","NG_VALUE_ACCESSOR","useClass","SelectControlValueAccessor","multi","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵtemplate","InboxSelectContactComponent_input_5_Template","InboxSelectContactComponent_input_6_Template","InboxSelectContactComponent_mat_option_9_Template","InboxSelectContactComponent_glxy_error_11_Template","InboxSelectContactComponent_glxy_error_12_Template","InboxSelectContactComponent_glxy_error_13_Template","InboxSelectContactComponent_button_14_Template","ɵɵtextInterpolate","hasError","CommonModule","NgForOf","NgIf","AsyncPipe","TranslateModule","TranslatePipe","FormsModule","DefaultValueAccessor","NgControlStatus","ReactiveFormsModule","FormControlDirective","MatButtonModule","MatButton","MatIconModule","MatIcon","MatFormFieldModule","MatInputModule","MatInput","MatProgressBarModule","MatAutocompleteModule","MatAutocomplete","MatOption","MatAutocompleteTrigger","GalaxyFormFieldModule","FormFieldComponent","LabelDirective","ErrorDirective","styles","changeDetection","_InboxSelectContactComponent","canAccessEmailChannel","invalidInputError","invalidInput","invalidSelection","validPhoneNumber","validEmail","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate1","ɵɵpipeBind2","ɵɵpureFunction1","_c0","partnerBrandName_r1","ɵɵtemplate","InboxWelcomeComponent_ng_container_4_section_3_p_4_Template","ɵɵpipeBind1","ɵɵproperty","ctx_r1","partnerBrandName$","settingsUrl$","ɵɵtextInterpolate","InboxWelcomeComponent_ng_container_4_section_4_li_5_Template","InboxWelcomeComponent_ng_container_4_section_4_li_7_Template","InboxWelcomeComponent_ng_container_4_section_4_li_9_Template","displayA2pLink$","displayGoogleLink$","displayWebchatLink$","ɵɵelementContainerStart","InboxWelcomeComponent_ng_container_4_section_3_Template","InboxWelcomeComponent_ng_container_4_section_4_Template","isOnlyPartnerChatAvailable$","ɵɵlistener","ɵɵrestoreView","_r3","ɵɵnextContext","ɵɵresetView","newMessage","_r4","optIn","InboxWelcomeComponent","constructor","analyticsService","router","inboxService","dialog","inboxApiService","inboxImageService","accountGroupId$","partnerId$","inboxConfig","googleBusinessMessagesAvailable$","conversationWebchatService","conversationGoogleService","smsEnabled$","groupId$","snackbarService","hostAppInterface","inject","CONVERSATION_HOST_APP_INTERFACE_TOKEN","inboxNav","InboxNavigationService","participantService","ParticipantService","isBusinessApp","smsRegistrationService","SmsRegistrationService","optInClicked","isPartnerChatEnabled$","allowSmbChatWithPartner$","displayA2pCard$","multiLocationEnabled$","combineLatest","getAccountGroupInfo$","pipe","map","info","napData","country","registrationStage$","shareReplay","bufferSize","refCount","displayA2pCard","registrationStage","RegistrationStage","RegistrationComplete","of","isGoogleBusinessMessagesEnabled$","googleBusinessMessagesAvailable","isGoogleBusinessMessagesEnabled","canAccessWebChatSettings$","switchMap","canAccessWebchat","isAnyWebchatEnabled$","isAnyWebchatEnabled","isMultiLocation","getAppOptions","is_multilocation","showNewMessage","hideNewMessageButton","platformLocation","allowPartnerChat","displayA2pLink","displayGoogleLink","displayWebchatLink","smsEnabled","filter","accountGroupId","routes","toSignal","CONVERSATION_ROUTES_TOKEN","ngOnInit","trackEvent","PlatformLocation","PLATFORM_LOCATION_BUSINESS_APP","messageFromBusinessCenter","PLATFORM_LOCATION_PARTNER_CENTER","PLATFORM_LOCATION_SALES_CENTER","messageFromPartnerCenter","PLATFORM_LOCATION_VENDOR_CENTER","messageFromVendorCenter","console","warn","canAccessSMS$","buildIAMUserParticipant","take","subscribe","partnerId","canAccessSMS","currentIAMParticipant","navigate","sendNewMessage","redirectToInternalConversation","SubjectParticipant","internalParticipantId","participantType","GlobalParticipantType","GLOBAL_PARTICIPANT_TYPE_ACCOUNT_GROUP","GLOBAL_PARTICIPANT_TYPE_PARTNER","ConversationChannel","CONVERSATION_CHANNEL_INTERNAL","open","BusinessSelectorDialogComponent","width","data","afterClosed","withLatestFrom","business","currentParticipant","gotoConversation","root","__async","groupId","firstValueFrom","upsertProductFeature","productFeature","multiLocationEnabled","fieldMask","paths","subjectParticipant","GLOBAL_PARTICIPANT_TYPE_GROUP","openSuccessSnack","duration","Infinity","openErrorSnack","ɵɵdirectiveInject","ProductAnalyticsService","Router","InboxService","MatDialog","InboxApiService","CONVERSATION_IMAGE_SERVICE_TOKEN","ACCOUNT_GROUP_ID_TOKEN","PARTNER_ID_TOKEN","CONVERSATION_CONFIG_TOKEN","CONVERSATION_GOOGLE_BUSINESS_MESSAGES_AVAILABLE_TOKEN","ConversationWebchatService","ConversationGoogleService","CONVERSATION_SMS_ENABLED_TOKEN","GROUP_ID_TOKEN","SnackbarService","selectors","decls","vars","consts","template","rf","ctx","ɵɵelement","InboxWelcomeComponent_ng_container_4_Template","InboxWelcomeComponent_ng_container_5_Template","InboxWelcomeComponent_button_7_Template","InboxWelcomeComponent_button_9_Template","_InboxWelcomeComponent","ConversationUIRouting","RouterModule","forChild","_ConversationUIRouting","WebChatAccessGuard","constructor","inboxService","canActivateChild","_","canAccessWebChatSettings$","ɵɵinject","InboxService","factory","ɵfac","providedIn","_WebChatAccessGuard","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate","ɵɵpipeBind2","ctx_r0","ticketInfo","description","ɵɵtextInterpolate1","ɵɵlistener","ɵɵrestoreView","_r2","ɵɵnextContext","ɵɵresetView","showMoreLess","ɵɵpipeBind1","_r3","InboxTicketCardComponent","constructor","isMinView","ticketCardInfo","ticket","selectors","inputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵtemplate","InboxTicketCardComponent_span_15_Template","InboxTicketCardComponent_span_16_Template","InboxTicketCardComponent_a_17_Template","InboxTicketCardComponent_a_18_Template","subject","ɵɵproperty","badgeColor","status","createdAt","groupName","channel","length","requester","ɵɵpropertyInterpolate","url","ɵɵsanitizeUrl","CommonModule","NgIf","GalaxyPipesModule","MatCardModule","MatCard","MatCardActions","MatCardContent","MatIconModule","MatIcon","TranslateModule","TranslatePipe","ConversationPipesModule","TrimDescriptionPipe","GalaxyBadgeModule","BadgeComponent","MatButtonModule","MatAnchor","styles","_InboxTicketCardComponent","VMF_INSTANCE","URL_REGEX","badgeColor","new","open","hold","pending","solved","closed","TicketInfo","constructor","ticket","id","toString","subject","description","formatDescription","status","requester","name","createdAt","substring","channel","via","groupName","group","url","concat","text","replace","ɵɵelementContainerStart","ɵɵelement","ɵɵelementContainer","ɵɵtemplate","InboxTicketListComponent_ng_container_0_ng_container_2_ng_container_1_Template","ɵɵadvance","ɵɵproperty","Error_r1","InboxTicketListComponent_ng_container_0_ng_container_3_ng_container_3_ng_container_3_ng_container_1_Template","NoTickets_r2","ɵɵelementStart","ɵɵelementEnd","ticketInfo_r3","InboxTicketListComponent_ng_container_0_ng_container_3_ng_container_3_ng_container_4_div_1_Template","ticketList_r4","value","tickets","ɵɵlistener","ɵɵrestoreView","_r5","ctx_r5","ɵɵnextContext","ɵɵresetView","loadClosed","ɵɵtext","ɵɵtextInterpolate","ɵɵpipeBind1","InboxTicketListComponent_ng_container_0_ng_container_3_ng_container_3_ng_container_3_Template","InboxTicketListComponent_ng_container_0_ng_container_3_ng_container_3_ng_container_4_Template","InboxTicketListComponent_ng_container_0_ng_container_3_ng_container_3_div_5_Template","ɵɵtextInterpolate2","title","total","continue","InboxTicketListComponent_ng_container_0_ng_container_3_glxy_loading_spinner_1_Template","InboxTicketListComponent_ng_container_0_ng_container_3_ng_container_3_Template","isLoading$","ɵɵtextInterpolate1","ɵɵpipeBind2","ɵɵpureFunction1","_c0","statusName","InboxTicketListComponent_ng_container_0_ng_container_1_Template","InboxTicketListComponent_ng_container_0_ng_container_2_Template","InboxTicketListComponent_ng_container_0_ng_container_3_Template","InboxTicketListComponent_ng_container_0_ng_template_4_Template","ɵɵtemplateRefExtractor","InboxTicketListComponent_ng_container_0_ng_template_6_Template","status","statusEnum","CLOSED_STATUS","SupportStatus","STATUS_CLOSED","STATUS_SOLVED","OPEN_STATUS","STATUS_HOLD","STATUS_NEW","STATUS_OPEN","STATUS_PENDING","PAGE","InboxTicketListComponent","partner","partnerId","partnerId$$","next","constructor","supportService","ReplaySubject","isLoading$$","BehaviorSubject","asObservable","showMore$$","nextPage$","tickets$","pipe","skipWhile","tap","switchMap","searchTickets","searchTerm","sortBy","OPEN","SortBy","SORT_BY_CREATED_AT","SORT_BY_UPDATED_AT","sortOrder","SortOrder","SORT_ORDER_DESC","statuses","map","res","ticket","TicketInfo","count","startWith","pagedTickets$","combineLatest","page","slice","ngOnInit","CLOSED","ɵɵdirectiveInject","SupportApiService","selectors","inputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","InboxTicketListComponent_ng_container_0_Template","CommonModule","NgForOf","NgIf","NgTemplateOutlet","NgSwitch","NgSwitchCase","AsyncPipe","GalaxyPipesModule","GalaxyAsyncStatusPipe","MatIconModule","TranslateModule","TranslatePipe","ConversationPipesModule","InboxTicketCardComponent","GalaxyFormFieldModule","LabelDirective","MatCardModule","MatCard","MatCardContent","MatCardSubtitle","GalaxyLoadingSpinnerModule","LoadingSpinnerComponent","GalaxyAlertModule","AlertComponent","styles","_InboxTicketListComponent","VMF_INSTANCE","InboxTicketComponent","constructor","hostAppInterface","inject","CONVERSATION_HOST_APP_INTERFACE_TOKEN","conversationSubject$$","BehaviorSubject","partnerAccountGroupId$","asObservable","pipe","skipWhile","detail","map","getConversationTitleInfo","secondarySubtitle","conversationDetails","conversationDetail","next","openCreateTicket","window","open","concat","selectors","inputs","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵlistener","ɵɵtext","ɵɵelementEnd","ɵɵelement","ɵɵadvance","ɵɵtextInterpolate1","ɵɵpipeBind1","ɵɵproperty","_InboxTicketComponent","ɵɵelement","ɵɵproperty","salesContact_r1","image","tmp_5_0","name","undefined","ɵɵelementContainerStart","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵtemplate","InboxConversationAssigneeComponent_ng_container_0_ng_container_1_glxy_avatar_5_Template","ɵɵadvance","ɵɵtextInterpolate1","ɵɵpipeBind1","ɵɵtextInterpolate","InboxConversationAssigneeComponent_ng_container_0_ng_container_1_Template","ctx_r1","assignedContact$","InboxConversationAssigneeComponent","conversationDetail","details","conversationDetails$$","next","constructor","accountGroupService","partnerApiService","conversationService","translateService","salespersonService","snackbarService","hostAppInterface","inject","CONVERSATION_HOST_APP_INTERFACE_TOKEN","ReplaySubject","conversationDetails$","asObservable","pipe","distinctUntilChanged","conversationInfo$","map","res","getRecipient","Array","isArray","length","Error","instant","catchError","error","openErrorSnack","of","shareReplay","bufferSize","refCount","partnerId","toSignal","PARTNER_ID_TOKEN","accountGroupPartnerId$","switchMap","accountGroupOrPartner","participantType","ParticipantType","PARTICIPANT_TYPE_PARTNER","SUPPORT_PID","MARKETING_SERVICES_PIDS","includes","getMappedAccountPartner","PARTICIPANT_TYPE_ACCOUNT_GROUP","accountGroupId","filterNullAndUndefined","getSalesPersonDetails","salesPerson","getSalesPersonContactInfo","salesPersonId","isAccountGroupPartnerType$","account","defaultIfEmpty","get","ProjectionFilter","accountGroupExternalIdentifiers","filter","externalIdentifiers","getMultiSalesperson","contact","firstName","lastName","join","trim","photoUrlHttps","getPartnerAccountGroupMapping","accountGroupPartnerId","accountGroupMapping","ɵɵdirectiveInject","AccountGroupService","PartnerApiService","ConversationService","TranslateService","SalespersonService","SnackbarService","selectors","inputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","InboxConversationAssigneeComponent_ng_container_0_Template","AsyncPipe","NgIf","TranslateModule","TranslatePipe","GalaxyAvatarModule","AvatarComponent","styles","changeDetection","_InboxConversationAssigneeComponent","InboxConversationSubtitleAccountComponent","constructor","hostAppInterface","inject","CONVERSATION_HOST_APP_INTERFACE_TOKEN","subtitle","conversationDetail","value","titleInfo","getConversationTitleInfo","selectors","inputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate1","ɵɵpipeBind1","ConversationPipesModule","MessageCodeBacktickPipe","styles","_InboxConversationSubtitleAccountComponent","InboxInfoDrawerService","constructor","isOpen$$","BehaviorSubject","isOpenDrawer$","asObservable","toggle","next","value","setIsOpen","isOpen","factory","ɵfac","providedIn","_InboxInfoDrawerService","SummarizeConversationDialogComponent","constructor","dialogRef","data","inject","MAT_DIALOG_DATA","ok","close","ɵɵdirectiveInject","MatDialogRef","selectors","standalone","features","ɵɵStandaloneFeature","attrs","_c0","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate1","ɵɵpipeBind1","summary","CommonModule","MatDialogModule","MatDialogClose","MatDialogTitle","MatDialogActions","MatDialogContent","MatButtonModule","MatButton","TranslateModule","TranslatePipe","encapsulation","_SummarizeConversationDialogComponent","ɵɵelementContainerStart","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵproperty","ɵɵtextInterpolate","ɵɵpipeBind1","ɵɵlistener","ɵɵrestoreView","_r3","ctx_r1","ɵɵnextContext","ɵɵresetView","toggleDetailsDrawer","ɵɵelement","conversationDetail$","_r5","updateFollowStatus","ɵɵattributeInterpolate1","useSidebarStyles$","isFollowing","ɵɵtextInterpolate1","_r4","ɵɵtemplate","InboxMessagesTopBarComponent_div_0_ng_container_18_button_7_Template","ɵɵpureFunction1","_c3","_r6","openConversationSummaryModal","_r7","markRead","_r8","_r9","action_r11","_r10","$implicit","action","title","_r1","back","InboxMessagesTopBarComponent_div_0_ng_container_13_Template","InboxMessagesTopBarComponent_div_0_button_14_Template","InboxMessagesTopBarComponent_div_0_inbox_conversation_account_15_Template","InboxMessagesTopBarComponent_div_0_inbox_conversation_assignee_16_Template","InboxMessagesTopBarComponent_div_0_ng_container_18_Template","InboxMessagesTopBarComponent_div_0_button_25_Template","InboxMessagesTopBarComponent_div_0_button_27_Template","InboxMessagesTopBarComponent_div_0_button_29_Template","InboxMessagesTopBarComponent_div_0_ng_container_30_Template","toggleConversationOpen","InboxMessagesTopBarComponent_div_0_ng_container_35_Template","_c0","_c1","showInboxViews$","_c2","isBusinessApp","isOpen","isInternalInfoDeleted","displayAssignee","menu_r12","showConversationSummary$","tmp_16_0","unseen$","read","markUnreadButton_r13","kabobAvailableActions$","_r14","markUnread","InboxMessagesTopBarComponent","unseen","value","unseen$$","next","constructor","router","conversationService","inboxService","viewModeService","inboxInfoDrawerService","hostAppInterface","dialog","conversationAPIService","snackbarService","translateService","currentConversationDetail$","pipe","switchMap","conversationDetail","getKabobAvailableActions","of","Array","BehaviorSubject","conversationId","asObservable","isSalesCenter","isPartnerCenter","isConversationSummaryEnabled$","viewMode$","map","viewMode","accountGroupId","groupId","markedUnread","EventEmitter","changeFollowStatus","changeOpenStatus","routes","toSignal","inject","CONVERSATION_ROUTES_TOKEN","useModal","removeLastConversationId","navigate","INBOX_NAVIGATION_LINK","queryParamsHandling","queryParams","inboxPrefilledMessage","navigateByUrl","emit","toggle","__async","conversation","firstValueFrom","data","summary","getConversationSummary","open","SummarizeConversationDialogComponent","width","openErrorSnack","instant","ɵɵdirectiveInject","Router","ConversationService","InboxService","ViewModeService","InboxInfoDrawerService","CONVERSATION_HOST_APP_INTERFACE_TOKEN","MatDialog","ConversationApiService","SnackbarService","TranslateService","selectors","inputs","outputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","InboxMessagesTopBarComponent_div_0_Template","InboxMessagesTopBarComponent_ng_template_2_Template","ɵɵtemplateRefExtractor","AsyncPipe","NgFor","NgIf","NgClass","MatButtonModule","MatButton","MatIconButton","MatIconModule","MatIcon","MatMenuModule","MatMenu","MatMenuItem","MatMenuTrigger","MatTooltipModule","MatTooltip","GalaxyBadgeModule","BadgeComponent","InboxConversationAssigneeComponent","InboxConversationTitleComponent","TranslateModule","TranslatePipe","InboxConversationSubtitleAccountComponent","styles","changeDetection","_InboxMessagesTopBarComponent","import_dompurify","ɵɵelementContainerStart","ɵɵelementStart","ɵɵtext","ɵɵlistener","ɵɵrestoreView","_r1","ctx_r1","ɵɵnextContext","ɵɵresetView","toggleTOS","ɵɵelementEnd","ɵɵtwoWayListener","$event","i0","ɵɵtwoWayBindingSet","checkedTerms","accepts","ɵɵadvance","ɵɵtextInterpolate1","ɵɵpipeBind1","ɵɵtwoWayProperty","ɵɵtextInterpolate","ɵɵproperty","ɵɵelement","_r3","data","termsOfService","ɵɵsanitizeHtml","SanitizePipe","constructor","sanitizer","transform","value","bypassSecurityTrustHtml","DOMPurify","sanitize","ADD_TAGS","ɵɵdirectiveInject","DomSanitizer","pure","standalone","_SanitizePipe","InboxTermsOfServiceDialogComponent","dialogRef","showFullTOS","ngOnInit","accepted","partner","replaceVariables","convertToHtml","escapeString","parser","DOMParser","parseFromString","body","textContent","close","replace","name","MatDialogRef","MAT_DIALOG_DATA","selectors","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵtemplate","InboxTermsOfServiceDialogComponent_ng_container_3_Template","InboxTermsOfServiceDialogComponent_ng_template_4_Template","ɵɵtemplateRefExtractor","fullTOS_r4","CommonModule","NgIf","TranslateModule","TranslatePipe","MatButtonModule","MatButton","MatCheckboxModule","MatCheckbox","MatDialogModule","MatDialogClose","MatDialogTitle","MatDialogActions","MatDialogContent","FormsModule","NgControlStatus","NgModel","styles","_InboxTermsOfServiceDialogComponent","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵproperty","ɵɵadvance","ɵɵtextInterpolate1","bannerText_r3","ɵɵelementContainerStart","ɵɵtemplate","InboxChatComponent_div_0_ng_container_4_glxy_alert_1_Template","ɵɵpipeBind1","ctx_r1","banners$","ɵɵlistener","ɵɵrestoreView","_r4","ɵɵnextContext","ɵɵresetView","viewContact","_r5","InboxChatComponent_div_0_ng_container_6_glxy_alert_3_Template","InboxChatComponent_div_0_ng_container_6_glxy_alert_4_Template","emailChannelSupported$","_r6","openSettings","onClose","ɵɵpropertyInterpolate","tmp_8_0","viewModel","undefined","ɵɵtextInterpolate","ɵɵelement","ɵɵpureFunction1","_c1","loadingMessages$","tmp_4_0","messages$","ɵɵpureFunction0","_c2","tmp_5_0","events$","currentConversationDetail_r7","conversation","disabledAlert","description","_r8","action","callback","InboxChatComponent_div_0_div_15_glxy_alert_extended_6_Template","_c3","isWebChatConversation$","tmp_6_0","title","tmp_7_0","ɵɵsanitizeHtml","$event","_r9","sendMessage","fileChange","termsOfServiceResult$","termsOfServiceAccepted","currentConversationDetail_r10","availableChannels$","tmp_9_0","isImpersonating$","tmp_10_0","inboxPrefilledMessage$","tmp_11_0","missingContactInformation$","InboxChatComponent_div_0_ng_container_16_inbox_message_text_1_Template","_r1","updateReadStatus","updateFollowStatus","updateOpenStatus","InboxChatComponent_div_0_ng_container_4_Template","InboxChatComponent_div_0_ng_container_6_Template","InboxChatComponent_div_0_glxy_alert_8_Template","InboxChatComponent_div_0_glxy_loading_spinner_10_Template","InboxChatComponent_div_0_inbox_messages_12_Template","InboxChatComponent_div_0_div_15_Template","InboxChatComponent_div_0_ng_container_16_Template","tmp_2_0","accountGroupId","tmp_3_0","groupId","unseen$","unseenDefault","isFollowing$","isOpen","isOpenAIChannel$","showContactAlert$","notificationWarningChat$","currentConversationDetail$","InboxChatComponent","id","value","conversationService","setCurrentFirestoreConversationId","constructor","router","route","snackbarService","analyticsService","inboxService","inboxTermsOfService","viewService","dialog","inboxNotificationService","inboxApiService","participantService","ngZone","hostAppInterface","inject","ConversationService","isBusinessApp","destroyRef","DestroyRef","notificationWarningChat$$","ReplaySubject","asObservable","signal","pipe","tap","conversationDetails","set","currentConversationDetail","toSignal","initialValue","fileChange$$","fileChange$","read","conversationId","unseen$$","BehaviorSubject","isFollowing$$","isUserImpersonated$","map","channel","ConversationChannel","CONVERSATION_CHANNEL_OPENAI","isNotGoogleNorFacebookChannel$","CONVERSATION_CHANNEL_GOOGLE_BUSINESS_COMMUNICATIONS","CONVERSATION_CHANNEL_FACEBOOK","combineLatest","getTermsOfServiceText$","termsOfServiceAccepted$","termsOfServiceTextMessage","isImpersonating","participants","filter","participant","isSubjectParticipant","internalParticipantId","participantType","ParticipantType","PARTICIPANT_TYPE_PARTNER","PARTICIPANT_TYPE_VENDOR","SubjectParticipant","GlobalParticipantType","GLOBAL_PARTICIPANT_TYPE_PARTNER","switchMap","length","of","getMultiConfiguration","subjectParticipants","configs","configurations","config","availabilityMessage","showAvailabilityMessage","queryParamMap","params","get","isRecipientDeleted$","filterNullAndUndefined","isRecipientInternalInfoDeleted","availableChannels","isContactInformationMissing","isRecipientDeleted","missingContactInformation","isNotGoogleNorFacebookChannel","CONVERSATION_CHANNEL_WEB_CHAT","accountGroupId$","ACCOUNT_GROUP_ID_TOKEN","partnerId$","PARTNER_ID_TOKEN","groupId$","GROUP_ID_TOKEN","partnerId","userId","USER_ID_TOKEN","routes","CONVERSATION_ROUTES_TOKEN","canAccessEmailChannel$","alertOptions$","convoDetails","displayAlertIfExists","takeUntilDestroyed","subscribe","orgId$","getAppOptions","is_multilocation","orgId","distinctUntilChanged","a","b","currentOrg","conversationDetail","some","p","loadConversation","removeLastConversationId","navigate","useModal","outlets","inbox","root","__async","trackEvent","toFirestoreId","location","platformLocation","sendDraftMessage","setConversationLastSeen","SetLastSeenRequestStatus","SET_LAST_SEEN_REQUEST_STATUS_READ","next","currentParticipant$","take","conversationViewIds","indexOf","getFollowViewID","participantId","notInFollowIDs","firstValueFrom","inboxTextComponent","clearText","removeFile","draftMessages","text","attachments","sendMessageConversation","messageInfo","tosResult","accepted","showTermsOfService","terms","termsOfServiceAccepted$$","result","following","simulateFollowingForBackgroundProccess","files","openSuccessSnack","sendMessageViaConversation","MessageType","MESSAGE_TYPE_MESSAGE","run","termsOfService","data","partner","name","partnerBrandName","dialogRef","open","InboxTermsOfServiceDialogComponent","width","maxHeight","autoFocus","afterClosed","acceptTermsOfService$","event","status","SET_LAST_SEEN_REQUEST_STATUS_UNREAD","newFollowStatus","addConversationToConversationView","removeConversationFromConversationView","openErrorSnack","newOpenStatus","setConversationOpenStatus","turnOnOnlyMyEventsNotification$","error","recipient","getRecipient","contactId","Array","isArray","PARTICIPANT_TYPE_CUSTOMER","setCookie","ɵɵdirectiveInject","Router","ActivatedRoute","SnackbarService","ProductAnalyticsService","InboxService","InboxTermsOfService","ViewService","MatDialog","InboxNotificationService","InboxApiService","ParticipantService","NgZone","CONVERSATION_HOST_APP_INTERFACE_TOKEN","selectors","viewQuery","rf","ctx","InboxChatComponent_div_0_Template","_InboxChatComponent","ɵɵelement","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate1","ɵɵpipeBind1","ɵɵpipeBind2","ɵɵpureFunction1","_c3","ctx_r1","MIN_CHARACTERS","CreateContactFormComponent","errors","firstName","contactForm","controls","lastName","email","phone","constructor","focus","router","activatedRoute","location","cdRef","companyName$","formBuilder","conversationService","inboxService","participantService","snackbarService","analyticsService","group","Validators","required","minLength","Number","isLoading","isSubmitted","accountGroupId","toSignal","inject","ACCOUNT_GROUP_ID_TOKEN","partnerId","PARTNER_ID_TOKEN","currentNavigation","getCurrentNavigation","patchValue","extras","state","ngAfterViewInit","focusVia","firstNameInput","detectChanges","submit","__async","phoneInput","rawInputControl","updateValueAndValidity","get","value","openErrorSnack","valid","startLoading","formValue","newContact","firstValueFrom","addContact","permissionToContact","contactId","Error","trackEvent","platformLocation","channel","getConversationChannel","returnToNewMessage","error","console","warn","message","status","stopLoading","contact","navigate","relativeTo","close","back","ɵɵdirectiveInject","FocusMonitor","Router","ActivatedRoute","Location","ChangeDetectorRef","COMPANY_NAME_TOKEN","FormBuilder","ConversationService","InboxService","ParticipantService","SnackbarService","ProductAnalyticsService","selectors","viewQuery","rf","ctx","ɵɵtemplate","CreateContactFormComponent_mat_progress_bar_0_Template","ɵɵlistener","i0","ɵɵrestoreView","_r1","ɵɵresetView","CreateContactFormComponent_glxy_error_16_Template","CreateContactFormComponent_glxy_error_17_Template","CreateContactFormComponent_glxy_error_31_Template","ɵɵproperty","_c2","ɵɵtextInterpolate","hasError","touched","ɵɵpropertyInterpolate","invalid","_CreateContactFormComponent","ɵɵelement","ɵɵelementStart","ɵɵlistener","tmp_3_0","ɵɵrestoreView","_r2","ctx_r2","ɵɵnextContext","ɵɵresetView","disabledAlert","action","callback","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵproperty","tmp_2_0","ɵɵpipeBind1","tmp_4_0","title","undefined","ɵɵtextInterpolate","tmp_5_0","tmp_6_0","description","ɵɵelementContainerStart","$event","_r4","onSubmitDraft","channelsToShow_r5","ɵɵtemplate","InboxNewMessageComponent_ng_template_13_ng_container_0_Template","channelsToShow$","DEFAULT_NEW_MESSAGE_AVAILABLE_CHANNELS","availableChannels","preferredChannel","ConversationChannel","CONVERSATION_CHANNEL_UNDEFINED","InboxNewMessageComponent","constructor","companyName$","router","snackbarService","location","conversationService","analyticsService","customerService","participantService","inboxService","cdRef","isLoading","selectControl","SelectContactControl","signal","redirectToConversation","redirectToConversationFactory","accountGroupId","toSignal","inject","ACCOUNT_GROUP_ID_TOKEN","requireSync","partnerId","PARTNER_ID_TOKEN","pipe","userId","USER_ID_TOKEN","hasEmailAccess","canAccessEmailChannel$","isSMSChannelAvailable$","isSMSChannelAvailableForOrg$","availableChannels$","map","smsAvailable","CONVERSATION_CHANNEL_SMS","CONVERSATION_CHANNEL_EMAIL","channelsToShow$$","BehaviorSubject","asObservable","trackingProps","buildTemplateTrackProperties","routeData","getCurrentNavigation","extras","state","contact","setValue","selectContact","valueChanges","takeUntilDestroyed","subscribe","value","contactId","startConversation","ngOnInit","setCurrentFirestoreConversationId","trackEvent","messageInfo","__async","openWithOptions","phone","email","addContactAndStartConversation","permissionToContact","updateCustomerPermissionToContact","draftMessages","openErrorSnack","platformLocation","conversationChannel","participantOrganization","buildAccountGroup","participantRecipient","buildContactParticipant","participantSender","buildIamUser","firstValueFrom","createConversation","then","response","conversation","channel","conversationId","catch","httpErrorResponse","console","warn","error","message","handleAddContactError","status","getConversationChannel","close","back","phoneNumber","existingContact","getCrmContactByField","STANDARD_CRM_FIELD_EXTERNAL_IDS","addContact","firstName","lastName","newContact","fieldId","getContactByField","updateCustomer","FieldMask","paths","take","changeAvailableChannels","currentAvailableChannels","channelsToShow","set","length","next","markForCheck","includes","alertMessage","displayAlertIfExists","ɵɵdirectiveInject","COMPANY_NAME_TOKEN","Router","SnackbarService","Location","ConversationService","ProductAnalyticsService","CustomerService","ParticipantService","InboxService","ChangeDetectorRef","selectors","decls","vars","consts","template","rf","ctx","InboxNewMessageComponent_mat_progress_bar_0_Template","i0","_r1","InboxNewMessageComponent_div_12_Template","InboxNewMessageComponent_ng_template_13_Template","ɵɵtemplateRefExtractor","ɵɵtextInterpolate2","composer_r6","_InboxNewMessageComponent","InboxSendMessageResolver","constructor","router","resolve","getCurrentNavigation","extras","state","ɵɵinject","Router","factory","ɵfac","_InboxSendMessageResolver","STANDALONE_COMPONENTS","InboxSelectContactComponent","InboxConversationTitleComponent","InboxMessagesTopBarComponent","InboxTicketCardComponent","InboxTicketListComponent","InboxZeroComponent","ConversationUIModule","ListingService","SmsAccessGuard","WebChatAccessGuard","DatePipe","InboxTermsOfService","InboxSendMessageResolver","AddressAPIService","InboxUploadService","imports","CommonModule","TranslateModule","TranslationModule","FormsModule","MatInputModule","ReactiveFormsModule","MatButtonModule","MatIconModule","MatProgressSpinnerModule","MatFormFieldModule","MatMenuModule","MatCardModule","MatSelectModule","GalaxyInputModule","GalaxyCheckboxModule","GalaxyBadgeModule","GalaxyUploaderModule","OverlayModule","GalaxyPopoverModule","ConversationUIRouting","GalaxyPipesModule","GalaxyChatModule","GalaxyInfiniteScrollTriggerModule","ConversationPipesModule","GalaxyChatComposerModule","MatTooltipModule","GalaxyLoadingSpinnerModule","MatDialogModule","GalaxyFormFieldModule","MatDividerModule","GalaxyEmptyStateModule","InboxViewsEmptyComponent","GalaxyAvatarModule","GalaxyAlertModule","MatProgressBarModule","MatAutocompleteModule","GalaxyPageNavModule","GalaxyNavLayoutModule","MatTabsModule","MatListModule","_ConversationUIModule","InboxTicketComponent","MatButton","AsyncPipe","TranslatePipe","ɵɵelementContainerStart","ɵɵelement","InboxHomeComponent","constructor","analyticsService","conversationListService","organizationHasConversations$","ngOnInit","trackEvent","isMobile","ɵɵdirectiveInject","ProductAnalyticsService","ConversationListService","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵtemplate","InboxHomeComponent_ng_container_0_Template","InboxHomeComponent_ng_template_2_Template","ɵɵtemplateRefExtractor","ɵɵproperty","ɵɵpipeBind1","welcomeScreen_r1","CommonModule","NgIf","AsyncPipe","RouterModule","ConversationUIModule","InboxPaneComponent","InboxWelcomeComponent","GalaxyLoadingSpinnerModule","styles","_InboxHomeComponent"],"x_google_ignoreList":[0,16,23]}