{"version":3,"file":"PreChatInvitation.chunk.b296cedeb4feb17e40de.js","mappings":"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","sources":["webpack://apexchatwidgets/./widgets/templates/invitations/RDPlusTheme/prechat/prechat_template.ejs","webpack://apexchatwidgets/./widgets/templates/question_types/RDPlusTheme/prechat_rounded_theme/greeting_template.ejs","webpack://apexchatwidgets/./widgets/templates/invitations/RDPlusTheme/prechat/prechat_plain_text_template.ejs","webpack://apexchatwidgets/./widgets/templates/invitations/RDTheme/prechat/prechat_template.ejs","webpack://apexchatwidgets/./widgets/prechat/MessageHandler.js","webpack://apexchatwidgets/./widgets/prechat/PreChatMessageHandler.js","webpack://apexchatwidgets/./widgets/core/imports/ImportPrechatTemplateFactory.js","webpack://apexchatwidgets/./widgets/core/hooks/appendGreeting.js","webpack://apexchatwidgets/./widgets/prechat/PreChatInvitation.js"],"sourcesContent":["module.exports = function(obj) {\nobj || (obj = {});\nvar __t, __p = '';\nwith (obj) {\n__p += '
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Online Agent\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Close\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
';\n\n}\nreturn __p\n}","module.exports = function(obj) {\nobj || (obj = {});\nvar __t, __p = '';\nwith (obj) {\n__p += '
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n ' +\n((__t = (text)) == null ? '' : __t) +\n',\\r\\n
\\r\\n
';\n\n}\nreturn __p\n}","module.exports = function(obj) {\nobj || (obj = {});\nvar __t, __p = '';\nwith (obj) {\n__p += '';\n\n}\nreturn __p\n}","module.exports = function(obj) {\nobj || (obj = {});\nvar __t, __p = '';\nwith (obj) {\n__p += '
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Online Agent\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Close\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n

\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
';\n\n}\nreturn __p\n}","import BaseClass from '../core/BaseClass';\r\nimport WidgetTypes from '../core/enums/WidgetTypes';\r\nimport TempCache from '../core/enums/TempCache';\r\nimport { PreChatMessageAnimation } from '../core/enums/Enum';\r\nimport getHeightOfElement from '../core/hooks/getHeightOfElement';\r\nimport MessageStatus from '../core/hooks/MessageStatus';\r\nimport MessageVisibility from '../core/hooks/MessageVisibility';\r\nimport PreChatMessageAnimations from '../core/hooks/PreChatMessageAnimations';\r\nimport MessageView from '../core/MessageView';\r\n\r\nexport default class MessageHandler extends BaseClass {\r\n // inheriting with BaseClass\r\n constructor(options) {\r\n super(options);\r\n this.options = Object.assign(options, {\r\n objectType: WidgetTypes.MessageHandler,\r\n ADAHandler: options.ADAHandler,\r\n context: options.context,\r\n prechatModel: options.prechatModel\r\n });\r\n\r\n this.messages = [];\r\n }\r\n\r\n /* @param {any} model\r\n summary: push actually does few tasks like; renders, animates previous and upcoming msgs. */\r\n push(model) {\r\n // push is not array push, its taking model as argument and doing several tasks.\r\n const self = this;\r\n const msg = new MessageView({\r\n context: this.options.context,\r\n wrap: this.options.wrap,\r\n targetElementSelector: this.options.targetElementSelector,\r\n renderOninit: this.options.renderOninit,\r\n model,\r\n template: model.template,\r\n index: this.messages.length,\r\n status: MessageStatus.Unread,\r\n visibility: MessageVisibility.Visible\r\n });\r\n const last = this.getLastMessage();\r\n\r\n if (this.messages.length > 0) {\r\n msg.isFirstMessage = false;\r\n this.messages[this.messages.length - 1].isLastMessage = false;\r\n }\r\n this.messages.push(msg);\r\n msg.view.removeClass('apexchat_prechat_show_message_fade_out');\r\n // getting lastMsg's duration of being on screen.\r\n const lastMsgModel = self.options.prechatModel.preChatMessages.filter((prechatMsgArray) => {\r\n if (last) {\r\n return prechatMsgArray.id === last.view.model.id;\r\n }\r\n });\r\n const duration = lastMsgModel[0] || { duration: 1 }; // Default:1//getting lastMsg's duration of being on screen.\r\n const animationConfig = {};\r\n // we are defining some configs for animations as we have similar animations Stacking & Mobile-Stacking\r\n // both are similar just few differences, like; faddingout timing, effect, close button difference, etc.\r\n if (this.options.preChatMessageAnimation == PreChatMessageAnimation.Stacking) {\r\n // defining config for Stacking\r\n animationConfig.StartFaddingOutAfter = 1000; // msg fadeout time\r\n animationConfig.HideMessageAfter = animationConfig.StartFaddingOutAfter; // hide the msg (which will resize iframe too)\r\n animationConfig.IFrameResizeAfterFaddingOut = animationConfig.StartFaddingOutAfter + 20; // adding 20ms in timeout for iframe resizing\r\n animationConfig.closeButtonSupported = 'No'; // close button is not supported in Stacking\r\n } else if (\r\n this.options.preChatMessageAnimation == PreChatMessageAnimation.MobileStacking\r\n ) {\r\n // defining config for MobileStacking\r\n animationConfig.HideMessageAfter = duration.duration * 1000; // msg fadeout time\r\n animationConfig.StartFaddingOutAfter = 0.4 * 1000; // hide the msg (which will resize iframe too)\r\n animationConfig.closeButtonHeight = 30; // close button Height\r\n animationConfig.IFrameResizeAfterFaddingOut = 1000 + 20; // 20ms more // hide the msg (which will resize iframe too)\r\n animationConfig.closeButtonSupported = 'Yes'; // close button is supported in Mobile-Stacking\r\n }\r\n const heightCalculation = this.heightCalculation({\r\n me: this,\r\n currentMsgView: msg.view,\r\n lastMsg: last,\r\n animationConfig,\r\n model\r\n });\r\n if (msg.isFirstMessage) {\r\n // FIRST Message\r\n // encapsulated the whole logic to make the clean implementation..\r\n heightCalculation.fixFirstElement();\r\n // Adding Animation to First/current msg.\r\n msg.animate(PreChatMessageAnimations.First, 0);\r\n } else {\r\n // NORMAL Messaging\r\n\r\n if (model.isFromHistory && me.isPageRefreshed()) {\r\n // encapsulated the whole logic to make the clean implementation..\r\n heightCalculation.fixFirstElement(duration);\r\n } else {\r\n // encapsulated the whole logic to make the clean implementation..\r\n heightCalculation.fixUpComingElement(duration);\r\n // Adding Animation to previous msgs and fading them after user's defined time.\r\n // duration of being on screen.\r\n if (last.animate) {\r\n last.animate(PreChatMessageAnimations.Previous, 0);\r\n last.animate(\r\n PreChatMessageAnimations.FadeOut,\r\n animationConfig.StartFaddingOutAfter || 0\r\n );\r\n }\r\n }\r\n // Adding Animation to current msg.\r\n msg.animate(PreChatMessageAnimations.Upcoming, 0);\r\n }\r\n }\r\n\r\n heightCalculation(options) {\r\n const self = this;\r\n self.elementObj = options;\r\n const { animationConfig } = options;\r\n const { me } = options;\r\n const extraHeight = 5;\r\n const msgPopupElementFirst = function () {\r\n // we need this timeout as DOM takes time to render, without timeout.\r\n // ApexChat.getStyle giving wrong values without timeout.\r\n setTimeout(() => {\r\n const { currentMsgView } = self.elementObj;\r\n const ele = heightCalculation.context?.getElementById(currentMsgView.identifier) // me.$(`#${currentMsgView.identifier}`, currentMsgView.context);\r\n if (ele[0]) {\r\n // jquery selector element[0] returns default DOM html ele obj.\r\n // we need calculations here for placing msg popup with animation one over the other.\r\n me.postMessage({\r\n event: 'prechat-auto-resizing',\r\n data: {\r\n currentMsgHeight: getHeightOfElement(ele[0]),\r\n isSingleMsg: true\r\n }\r\n });\r\n const calcCurrentMsgHeight =\r\n TempCache.PRECHAT_Rounded_Message_Popup_Current_Height -\r\n getHeightOfElement(ele[0]) +\r\n extraHeight;\r\n ele.css(\r\n 'top',\r\n `${calcCurrentMsgHeight + (animationConfig.closeButtonHeight || 0)}px`\r\n );\r\n }\r\n }, 50);\r\n };\r\n const msgPopupElementUpcoming = function (duration) {\r\n const { currentMsgView } = self.elementObj;\r\n const last = self.elementObj.lastMsg;\r\n // Its obvious that UpComing msg scenario, FirstMsg or Prev has already been executed.\r\n // removing classes of first and upcoming msg from previous popup\r\n if (last.view.removeClass) {\r\n last.view.removeClass('apexchat_prechat_show_message_fade_out');\r\n last.view.removeClass(PreChatMessageAnimations.First);\r\n last.view.removeClass(PreChatMessageAnimations.Upcoming);\r\n }\r\n\r\n // duration timeout to keep them in vision according to user defined time.\r\n setTimeout(() => {\r\n last.view.context.getElementById(last.view.identifier).style.display = \"none\"\r\n me.$(`#${last.view.identifier}`, last.view.context).hide();\r\n }, animationConfig.HideMessageAfter);\r\n const elementlast = last.view.context.getElementById(last.view.identifier) // me.$(`#${last.view.identifier}`, last.view.context);\r\n const elementmsg = currentMsgView.context.getElementById(currentMsgView.identifier) //me.$(`#${currentMsgView.identifier}`, currentMsgView.context);\r\n // we need this timeout as DOM takes time to render, without timeout.\r\n // ApexChat.getStyle giving wrong values without timeout.\r\n setTimeout(() => {\r\n if (elementlast[0]) {\r\n // we need calculations here for placing msg popup with animation one over the other.\r\n // Resizing IFrame incase of Stack Msgs and making IFrame Wide enough to show the Stacked Msgs.\r\n me.postMessage({\r\n event: 'prechat-auto-resizing',\r\n data: {\r\n currentMsgHeight: getHeightOfElement(elementmsg[0]),\r\n prevMsgHeight: getHeightOfElement(elementlast[0]),\r\n dontAnimateClosebutton: true\r\n }\r\n });\r\n const calcLastMsgHeight =\r\n TempCache.PRECHAT_Rounded_Message_Popup_Last_Height -\r\n getHeightOfElement(elementmsg[0]) -\r\n getHeightOfElement(elementlast[0]); //\r\n const calcCurrentMsgHeight =\r\n TempCache.PRECHAT_Rounded_Message_Popup_Current_Height -\r\n getHeightOfElement(elementmsg[0]) -\r\n 20; //\r\n elementlast.animate({ top: calcLastMsgHeight }, 300);\r\n elementmsg.css(\r\n 'top',\r\n calcCurrentMsgHeight + (animationConfig.closeButtonHeight || 0)\r\n );\r\n }\r\n }, 50);\r\n // After fadding out of msg we need to decrease the IFrame size again.\r\n iFrameResizeOnFadeOut(elementmsg);\r\n };\r\n const lastMsgOnPageRefresh = function () {\r\n const { currentMsgView } = self.elementObj;\r\n const elementmsg = me.$(`#${currentMsgView.identifier}`, currentMsgView.context);\r\n const elementlast = me.$(`#${last.view.identifier}`, last.view.context);\r\n // we need this timeout as DOM takes time to render, without timeout.\r\n // ApexChat.getStyle giving wrong values without timeout.\r\n setTimeout(() => {\r\n // Resizing IFrame incase of Stack Msgs and making IFrame Wide enough to show the Stacked Msgs.\r\n me.postMessage({\r\n event: 'prechat-auto-resizing',\r\n data: {\r\n currentMsgHeight: getHeightOfElement(elementmsg[0]),\r\n prevMsgHeight: getHeightOfElement(elementlast[0])\r\n }\r\n });\r\n if (elementmsg[0]) {\r\n // we need calculations here for placing msg popup with animation one over the other.\r\n const calcCurrentHeight =\r\n TempCache.PRECHAT_Rounded_Message_Popup_Current_Height -\r\n getHeightOfElement(elementmsg[0]);\r\n elementmsg.css('top', calcCurrentHeight, 'height');\r\n }\r\n }, 50);\r\n // After fadding out of msg we need to decrease the IFrame size again.\r\n // _iFrameResize(elementmsg[0]);\r\n };\r\n let iFrameResizeOnFadeOut = function (ele) {\r\n let { IFrameResizeAfterFaddingOut } = animationConfig;\r\n if (me.isPageRefreshed() && !me.noLastMessageOnRefresh) {\r\n me.noLastMessageOnRefresh = true;\r\n IFrameResizeAfterFaddingOut = 1;\r\n }\r\n setTimeout(() => {\r\n me.postMessage({\r\n event: 'prechat-auto-resizing',\r\n data: {\r\n currentMsgHeight: getHeightOfElement(ele[0]),\r\n isSingleMsg: true,\r\n closeButtonSupported: animationConfig.closeButtonSupported\r\n }\r\n });\r\n ele.animate({ top: 15 + (animationConfig.closeButtonHeight || 0) }, 1);\r\n }, IFrameResizeAfterFaddingOut); // for Iframe resizing (animating msg and iframe was causing a glitch).\r\n };\r\n return {\r\n fixFirstElement: msgPopupElementFirst,\r\n fixUpComingElement: msgPopupElementUpcoming,\r\n fixLastMsgOnPageRefresh: lastMsgOnPageRefresh\r\n };\r\n }\r\n\r\n getMessageCount() {\r\n return this.messages ? this.messages.length : 0;\r\n }\r\n}\r\n","/*\r\n The class used to encapsulate PreChat specific logic to show and hide messages and hanlde state management \r\n */\r\nimport MessageHandler from './MessageHandler';\r\nimport WidgetTypes from '../core/enums/WidgetTypes';\r\nimport { ScriptsQuestionType } from '../core/enums/Enum';\r\nimport WebStorage from '../core/hooks/WebStorage';\r\n\r\nexport default class PreChatMessageHandler extends MessageHandler {\r\n constructor(options) {\r\n super(options);\r\n this.options = Object.assign(options, {\r\n objectType: WidgetTypes.PreChatMessageHandler\r\n });\r\n\r\n this.options.wrap = true; // create a wrapper div; use targetElement instead queried through targetElementSelector\r\n this.options.targetElementSelector = '#apexchat_prechat_message_popup_container'; // '#apexchat_prechat_message';//this will be the placeholder for all messages to render\r\n this.options.renderOninit = false; /* with this we stop auto-rendering and give the control to the caller(i.e. PreChatMessageHandler) to take care of rendering: in this case QuestionTypeRenderer */\r\n // reset storageAPI to use sessionStorage\r\n this.storageAPI = WebStorage({ type: 'session' });\r\n ApexChat.sessionAPI = this.storageAPI;\r\n\r\n this.loadAll(); // this will fetch the cashed messages from sessionStorage and parse them back and put them in this.messages; also render them\r\n }\r\n\r\n /* @param {any} model\r\n * used to show and save new messages\r\n summary: push actually takes model and call its parent push function which does whole job.. */\r\n push(model) {\r\n // push is not array push, its taking model as argument and doing several tasks.\r\n const template = this.getTemplate(model.messageType); // for now it does not matter for QR types\r\n this.options.renderOninit = model.questionType == ScriptsQuestionType.None; // render plain text messages or else let something else render it; e.g. questionTypeRenderer\r\n\r\n super.push(\r\n Object.assign(model, {\r\n template: this.messageTemplate || model.template,\r\n userId: model.userId || 0,\r\n participantDisplayName: model.participantDisplayName || '',\r\n createdOn: new Date()\r\n })\r\n );\r\n this.saveAll();\r\n }\r\n\r\n // a must-call method before push()\r\n setMessageTemplate(template) {\r\n this.messageTemplate = template;\r\n }\r\n\r\n // currently this is void; we are using this.messageTemplate already\r\n getTemplate(messageType) {\r\n const template = null;\r\n return template;\r\n }\r\n\r\n /* summary: returns the last msg view object frequently used for\r\n * taking previous msg in prechat to animate its html in unique style.\r\n */\r\n getLastMessage() {\r\n // returns view of LastMsg\r\n for (let i = 0; i < this.messages.length; i++) {\r\n if (this.messages[i].isLastMessage) {\r\n return this.messages[i];\r\n }\r\n }\r\n }\r\n\r\n getFirstMessage() {\r\n for (let i = 0; i < this.messages.length; i++) {\r\n if (this.messages[i].isFirstMessage) {\r\n return this.messages[i];\r\n }\r\n }\r\n }\r\n\r\n saveAll() {\r\n this.storageAPI.Store('livechat_prechat_messages_store', JSON.stringify(this.messages));\r\n }\r\n\r\n // makes sense only in reload scenarios\r\n loadAll() {\r\n const self = this;\r\n const cache = this.storageAPI.Get('livechat_prechat_messages_store');\r\n this.messages = cache ? JSON.parse(cache) : this.messages;\r\n const _render = function (messageObj) {\r\n messageObj.isFromHistory = true;\r\n self.push(messageObj);\r\n };\r\n\r\n for (let i = 0; i < self.messages.length; i++) {\r\n if (self.isChatActive() && self.isPageRefreshed()) {\r\n if (i == self.messages.length - 1) {\r\n // TODO: When Chat is started and is in progress, If the Prechat message is appeared doesnt remain appeared.\r\n // _render(this.messages[i]);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import prechatRDPlusThemeTemplate from '../../templates/invitations/RDPlusTheme/prechat/prechat_template.ejs';\r\nimport prechatRDThemeTemplate from '../../templates/invitations/RDTheme/prechat/prechat_template.ejs';\r\nimport { ThemeStyle } from '../enums/Enum';\r\n\r\nconst importPrechatTemplateFactory = (options = {}) => {\r\n let prechatTemplate;\r\n if (ApexChat.options.skinThemeStyle == ThemeStyle.Rounded_Dynamic_Plus) {\r\n prechatTemplate = prechatRDPlusThemeTemplate(options)\r\n } else {\r\n prechatTemplate = prechatRDThemeTemplate(options)\r\n }\r\n return {\r\n prechatTemplate\r\n }\r\n};\r\nexport default importPrechatTemplateFactory;\r\n","import checkSpanishLanguage from \"./checkSpanishLanguage\";\r\nimport ScriptsQuestionTypeToolTips from \"./ScriptsQuestionTypeToolTips\";\r\nimport preChatGreetingTemplate from '../../templates/question_types/RDPlusTheme/prechat_rounded_theme/greeting_template.ejs';\r\n\r\nconst appendGreeting = (wrapper, options) => {\r\n if (!wrapper || ApexChat.prechatGreetingFlashed) return; // Ensure wrapper exists\r\n\r\n // Select existing greeting div if already present\r\n const existingGreeting = wrapper.querySelector('.livechat_prechat_greeting');\r\n\r\n // Check if the text is empty or whitespace\r\n if (!options?.preChatHeaderTemplate?.trim()) {\r\n // If text is empty and greeting exists, remove it\r\n if (existingGreeting) {\r\n existingGreeting.remove();\r\n }\r\n return;\r\n }\r\n\r\n // If text is valid, insert or update greeting\r\n const preChatGreeting = preChatGreetingTemplate({\r\n text: options.preChatHeaderTemplate,\r\n });\r\n\r\n if (existingGreeting) {\r\n existingGreeting.outerHTML = preChatGreeting; // Replace existing greeting\r\n } else {\r\n wrapper.insertAdjacentHTML('afterbegin', preChatGreeting); // Insert new greeting\r\n }\r\n ApexChat.prechatGreetingFlashed = true;\r\n};\r\nexport default appendGreeting;","//import QuestionTypeRendererExtentions from '../questiontypes/QuestionTypeRendererExtension';\r\n// import '../styles/v3/v3-iframes.css';\r\n// import '../styles/prechat/base_prechat_template.css'\r\n// import '../styles/prechat/prechat_responsive.css'\r\n// import '../styles/prechat/prechat_template.css'\r\n// import '../styles/questiontype.scss'\r\n\r\nimport preChatPlainTextTemplate from '../templates/invitations/RDPlusTheme/prechat/prechat_plain_text_template.ejs';\r\n\r\nimport PreChatMessageHandler from './PreChatMessageHandler';\r\nimport WidgetTypes from '../core/enums/WidgetTypes';\r\nimport WidgetView from '../core/WidgetView';\r\nimport TempCache from '../core/enums/TempCache';\r\nimport PubSub from '../core/events/PubSub';\r\nimport { BaseWidget } from '../core/BaseWidget';;\r\nimport SourceType from '../core/enums/SourceTypes';\r\nimport BrandingWidget from '../core/enums/BrandingWidget';\r\nimport ParticipantIds from '../core/enums/ParticipantIds';\r\nimport GlobalVariables from '../core/GlobalVariables';\r\nimport cleanInvalidHtml from '../core/hooks/cleanInvalidHtml';\r\nimport ChatMode from '../core/hooks/ChatMode';\r\nimport PipedMessageHandler from '../core/hooks/PipedMessageHandler';\r\nimport addStyleTextInIframe from '../core/hooks/addStyleTextInIframe';\r\nimport { Position, PreChatMessageAnimation, PreChatMessageType, ScriptVisitorResponseStatus, ScriptsQuestionType } from '../core/enums/Enum';\r\nimport parseTemplate from '../core/hooks/parseTemplate';\r\nimport Branding from '../core/hooks/Branding';\r\nimport getStyle from '../core/hooks/getStyle';\r\nimport removeMultipleCSSClasses from '../core/hooks/removeMultipleCSSClasses';\r\nimport encodeHTML from '../core/hooks/encodeHTML';\r\nimport decodeHTML from '../core/hooks/decodeHTML';\r\nimport removeTextFollowedByColon from '../core/hooks/removeTextFollowedByColon';\r\nimport stringify from '../core/hooks/stringify';\r\nimport addOptionProperty from '../core/hooks/addOptionProperty';\r\nimport AgentImageHandler from '../core/hooks/AgentImageHandler';\r\nimport setPrechatStyles from '../core/hooks/setPrechatStyles';\r\nimport RunAfter from '../core/hooks/RunAfter';\r\nimport Cookies from '../core/hooks/Cookies';\r\nimport ChatEvents from '../core/hooks/ChatEvents';\r\nimport WidgetStates from '../core/hooks/WidgetStates';\r\nimport getCookieValue from '../core/hooks/getCookieValue';\r\nimport getStorageAPIValue from '../core/hooks/getStorageAPIValue';\r\nimport storageAPIExists from '../core/hooks/storageAPIExists';\r\nimport showElement from '../core/hooks/showElement';\r\nimport hideElement from '../core/hooks/hideElement';\r\nimport removeClass from '../core/hooks/removeClass';\r\nimport addClass from '../core/hooks/addClass';\r\nimport localstorageAPIExists from '../core/hooks/localstorageAPIExists';\r\nimport logIt from '../../logIt';\r\nimport localStorageAPIGet from '../core/hooks/localStorageAPIGet';\r\nimport importPrechatTemplateFactory from '../core/imports/ImportPrechatTemplateFactory';\r\nimport appendGreeting from '../core/hooks/appendGreeting';\r\nimport RunAsSoonAsWithDelay from '../core/hooks/RunAsSoonAsWithDelay';\r\n\r\n\r\nexport default class PreChatInvitation extends BaseWidget {\r\n constructor(options) {\r\n options.widget = WidgetTypes.PreChat;\r\n options.styleName = 'prechat'\r\n super(options);\r\n this.templateRenderer = null;\r\n if (!options.preChat) {\r\n console.log('pre chat not enabled');\r\n return;\r\n }\r\n const me = this;\r\n me.options = options;\r\n\r\n if (me.options.preChat.chatbotGreetingMessages) {\r\n var script = structuredClone(me.options.preChat.chatbotGreetingMessages[0]);\r\n me.options.preChat.chatbotGreetingMessages[0].agentScript = script\r\n delete me.options.preChat.chatbotGreetingMessages[0].agentScript.agentScript // remove circular properties\r\n me.options.preChat.chatbotGreetingMessages[0].agentScript.options = JSON.stringify(me.options.preChat.chatbotGreetingMessages[0].agentScript.options)\r\n me.options.preChat.preChatMessages = me.options.preChat.chatbotGreetingMessages\r\n }\r\n\r\n\r\n me.pipeMessageHandler = new PipedMessageHandler(options);\r\n me.DEFAULT_PRECHAT_CONFIG = {\r\n general: { template: 'Simple Style' },\r\n outerObject: {\r\n hideOuterObject: false,\r\n showImage: false,\r\n backgroundImage: '',\r\n background1Color: '#5FADD1',\r\n background2Color: '#5FADD1',\r\n borderColor: '#FFFFFF',\r\n borderWidth: '0px',\r\n borderRadius: '60px',\r\n padding: '20px 20px 20px 20px'\r\n },\r\n innerObject: {\r\n hideInnerObject: false,\r\n showImage: true,\r\n defaultImage: 'chat-icon-simple.png',\r\n backgroundImage: '',\r\n background1Color: '',\r\n background2Color: '',\r\n borderColor: '#FFFFFF',\r\n borderWidth: '0px',\r\n borderRadius: '0px',\r\n padding: '5px 5px 5px 5px'\r\n },\r\n messagePopup: {\r\n font: {\r\n italic: false,\r\n bold: false,\r\n underline: false,\r\n family: 'inherit',\r\n size: '18px',\r\n color: '#202024'\r\n },\r\n backgroundColor: '#feffe0',\r\n padding: '11.2px 11.2px 11.2px 11.2px',\r\n borderColor: '#e5e6c8',\r\n closeIcon: '/contents/themes/skinnable/invitation/close.png',\r\n closeIconSize: { width: '12px', height: '12px' },\r\n shadowDepth: '0px',\r\n borderRadius: '6px',\r\n borderWidth: '1px'\r\n },\r\n messageCounter: {\r\n font: {\r\n italic: false,\r\n bold: false,\r\n underline: false,\r\n family: 'inherit',\r\n size: '10px',\r\n color: '#FFFFFF'\r\n },\r\n backgroundColor: '#823710',\r\n counterTop: '7px',\r\n counterRight: '3px'\r\n }\r\n };\r\n const TemplateRenderer = function () {\r\n const self = this;\r\n self.heightPosition = 20;\r\n self.notificationContainer = 'apexchat_prechat_typing_div';\r\n self.typingIndicator = 'apexchat_rd_prechat_invitation_typing_dots';\r\n self.showAgentName = function () {\r\n // no need to implement this function for default templetes\r\n };\r\n self.animateMessagePopup = function (el, position) {\r\n removeClass(el, 'apexchat_prechat_show_message_fade_out');\r\n addClass(el, 'apexchat_prechat_show_message_fade_in');\r\n };\r\n self.showTypingIndicator = function () {\r\n const containerElement = me.DOM.getElementById(self.notificationContainer);\r\n if (containerElement) {\r\n showElement(containerElement);\r\n }\r\n };\r\n self.hideTypingIndicator = function () {\r\n const containerElement = me.DOM.getElementById(self.notificationContainer);\r\n if (containerElement) {\r\n hideElement(containerElement);\r\n }\r\n };\r\n self.displayMessageCounter = function () {\r\n const messageCounter = me.getMessageCounterCache();\r\n me.DOM.getElementById('apexchat_prechat_message_count').innerHTML = messageCounter;\r\n me.DOM.getElementById('apexchat_prechat_message_count').style.display = 'flex';\r\n if (messageCounter === 0) {\r\n self.hideMessageCounter();\r\n }\r\n };\r\n self.hideTalkBubbleIcon = function () {\r\n // no need to implement this function for default templetes\r\n };\r\n self.hideMessagePopup = function () {\r\n // me.DOM.getElementById('apexchat_prechat_message_popup').style.display = 'none';\r\n removeMultipleCSSClasses(\r\n me.DOM.getElementById('apexchat_prechat_message_popup'),\r\n 'prechat_zoom_in_animation_left prechat_zoom_in_animation_right'\r\n );\r\n removeMultipleCSSClasses(\r\n me.DOM.getElementById('apexchat_prechat_typing_div'),\r\n 'prechat_zoom_in_animation_left prechat_zoom_in_animation_right'\r\n );\r\n const roundedMessagePopup =\r\n me.DOM.getElementsByClassName('apexchat_prechat_message_bubble')\r\n // me.$(me.DOM.getElementById('apexchat_prechat_message_popup_container'))\r\n // .find('.apexchat_prechat_message_bubble');\r\n if (roundedMessagePopup.length > 0) {\r\n hideElement(roundedMessagePopup[roundedMessagePopup.length - 1]);\r\n } else {\r\n addClass(\r\n me.DOM.getElementById('apexchat_prechat_message_popup'),\r\n 'apexchat_prechat_show_message_fade_out'\r\n );\r\n }\r\n me.displayMessageCounter();\r\n // resize iframe\r\n // me.postMessage({ event: 'prechat-size', data: { width: me.iconWidth, height: me.iconHeight } });\r\n };\r\n self.hideMessageCounter = function () {\r\n me.DOM.getElementById('apexchat_prechat_message_count').style.display = 'none';\r\n };\r\n self.widgetWidth = 295;\r\n self.renderOnLeftPosition = function () {\r\n addClass(\r\n me.DOM.getElementById('apexchat_prechat_message_popup'),\r\n 'apexchat_prechat_tri_left apexchat_prechat_left_bottom'\r\n );\r\n addClass(\r\n me.DOM.getElementById('apexchat_prechat_main_container'),\r\n 'apexchat_prechat_bottom'\r\n );\r\n addClass(\r\n me.DOM.getElementById('apexchat_prechat_main_bg'),\r\n 'apexchat_prechat_bottom'\r\n );\r\n addClass(\r\n me.DOM.getElementById('apexchat_prechat_close_message_popup'),\r\n 'apexchat_prechat_x_right'\r\n );\r\n // Mobile responsive\r\n addClass(\r\n me.DOM.getElementById('apexchat_prechat_message_popup'),\r\n 'apexchat_prechat_talk_bubbleMsg_left'\r\n );\r\n };\r\n self.renderOnRightPosition = function () {\r\n addClass(\r\n me.DOM.getElementById('apexchat_prechat_message_popup'),\r\n 'apexchat_prechat_tri_right apexchat_prechat_right_bottom'\r\n );\r\n addClass(\r\n me.DOM.getElementById('apexchat_prechat_main_bg'),\r\n 'apexchat_prechat_right'\r\n );\r\n addClass(\r\n me.DOM.getElementById('apexchat_prechat_main_container'),\r\n 'apexchat_prechat_bottom'\r\n );\r\n addClass(\r\n me.DOM.getElementById('apexchat_prechat_main_bg'),\r\n 'apexchat_prechat_bottom'\r\n );\r\n addClass(\r\n me.DOM.getElementById('apexchat_prechat_close_message_popup'),\r\n 'apexchat_prechat_x_left'\r\n );\r\n // Mobile responsive\r\n addClass(\r\n me.DOM.getElementById('apexchat_prechat_message_popup'),\r\n 'apexchat_prechat_talk_bubbleMsg_right'\r\n );\r\n };\r\n self.showOnlineAgentTag = function () {\r\n const agentName = me.DOM.getElementsByClassName('online-agent-tag');\r\n agentName[0].innerHTML = me.options.preChat.preChatAgentStatusText;\r\n agentName[0].style.display = 'block';\r\n // hide online tag and glow invitation aftr 45 seconds\r\n setTimeout(() => {\r\n // hide tag\r\n addClass(\r\n me.DOM.getElementById('apexchat_prechat_chat_icon'),\r\n 'glow_pre_chat_icon'\r\n );\r\n }, 45000);\r\n };\r\n self.popupUI = function () {\r\n const _render = function (message) {\r\n if (!message.message && message.text) {\r\n message.message = message.text;\r\n }\r\n me.DOM.getElementById('apexchat_prechat_message').innerHTML = message.message;\r\n me.DOM.getElementById('apexchat_prechat_message_popup_container').classList.add('livechat_prechat_message_show');\r\n };\r\n const _clearContent = function () {\r\n me.DOM.getElementById('apexchat_prechat_message').innerHTML = '';\r\n };\r\n const _doNothing = function () {\r\n // do nothing..\r\n };\r\n const _questionTypeUIConfiguration = function (questionType) {\r\n me.setAllowBackgroundClick(questionType);\r\n me.$('.apexchat_question_type_close_button', me.DOM).attr(\r\n 'style',\r\n 'display:none !important'\r\n );\r\n me.$('#apexchat_click_instruction', me.DOM).attr(\r\n 'style',\r\n 'display: none !important'\r\n );\r\n me.DOM.querySelector('#apexchat_participant_display_name').setAttribute(\r\n 'style',\r\n 'display: none !important'\r\n );\r\n me.$('#apexchat_participant_display_col', me.DOM).attr(\r\n 'style',\r\n 'display: none !important'\r\n );\r\n };\r\n return {\r\n render: _render,\r\n clear: _clearContent,\r\n setMessageTemplate: _doNothing,\r\n questionTypeUIConfiguration: _questionTypeUIConfiguration\r\n };\r\n };\r\n };\r\n const RoundedTemplateRenderer = function (renderer, heightPosition) {\r\n const self = this;\r\n self.agentNameImageId = 'agent_name_prechat_rounded_theme';\r\n self.heightPosition = heightPosition;\r\n self.renderer = renderer;\r\n self.animateMessagePopup = function (el, position) { };\r\n self.showAgentName = function () {\r\n // me.$(`#${self.agentNameImageId}`, me.DOM).html(me.options.agentName);\r\n me.DOM.getElementById(self.agentNameImageId)?.innerHTML = me.options.agentName;\r\n };\r\n self.showTypingIndicatorInnerGlider = function () {\r\n me.DOM.getElementsByClassName(self.renderer.typingIndicator)[0].style.display =\r\n 'inline-block';\r\n const elem = me.DOM.getElementsByClassName(renderer.typingIndicator);\r\n for (let i = 0; i < elem.length; i++) {\r\n elem[i].style.display = 'inline-block';\r\n }\r\n };\r\n self.hideMessagePopup = function () {\r\n self.renderer.hideMessagePopup();\r\n };\r\n self.showTypingIndicator = function () {\r\n const containerElement = me.DOM.getElementById(renderer.notificationContainer);\r\n if (containerElement) {\r\n showElement(containerElement);\r\n self.showTypingIndicatorInnerGlider();\r\n me.DOM.getElementById('apexchat_prechat_message_count').style.display = 'none';\r\n containerElement.classList.remove('disabled');\r\n //me.$(containerElement, me.context).removeClass('disabled');\r\n }\r\n };\r\n self.widgetWidth = 98;\r\n self.hideTypingIndicatorInnerGlider = function () {\r\n me.DOM.getElementsByClassName(self.renderer.typingIndicator)[0].style.display =\r\n 'none';\r\n const elem = me.DOM.getElementsByClassName(renderer.typingIndicator);\r\n for (let i = 0; i < elem.length; i++) {\r\n hideElement(elem[i]);\r\n }\r\n };\r\n self.hideTypingIndicator = function () {\r\n // self.hideTypingIndicatorInnerGlider();\r\n const messageCounter = me.getMessageCounterCache();\r\n if (messageCounter > 0) {\r\n self.displayMessageCounter();\r\n return;\r\n }\r\n const containerElement = me.DOM.getElementById(renderer.notificationContainer);\r\n if (containerElement) {\r\n // hideElement(containerElement);\r\n //me.$(containerElement, me.context).addClass('disabled');\r\n containerElement.classList.add('disabled')\r\n }\r\n };\r\n self.displayMessageCounter = function () {\r\n const messageCounter = me.getMessageCounterCache();\r\n if (messageCounter > 0) {\r\n me.DOM.getElementById('apexchat_prechat_message_count').innerHTML =\r\n messageCounter;\r\n me.DOM.getElementById('apexchat_prechat_typing_div').style.display = 'flex';\r\n me.DOM.getElementById('apexchat_prechat_message_count').style.display = 'flex';\r\n self.hideTypingIndicatorInnerGlider();\r\n } else {\r\n self.hideMessageCounter();\r\n self.hideTalkBubbleIcon();\r\n }\r\n //me.$('#apexchat_prechat_typing_div', me.DOM).removeClass('disabled');\r\n me.DOM.getElementById('apexchat_prechat_typing_div').classList.remove('disabled');\r\n };\r\n self.hideMessageCounter = function () {\r\n me.DOM.getElementById('apexchat_prechat_message_count').style.display = 'none'\r\n //me.$('#apexchat_prechat_message_count', me.DOM).hide();\r\n };\r\n self.hideTalkBubbleIcon = function () {\r\n //me.$('#apexchat_prechat_typing_div', me.DOM).hide();\r\n me.DOM.getElementById('apexchat_prechat_typing_div').style.display = 'none'\r\n };\r\n self.renderOnLeftPosition = function () {\r\n renderer.renderOnLeftPosition();\r\n addClass(\r\n me.DOM.getElementById('apexchat_prechat_message_popup_container'),\r\n 'apexchat_prechat_rounded_theme_left'\r\n );\r\n addClass(\r\n me.DOM.getElementById('apexchat_prechat_typing_div'),\r\n 'talk_bubble_left'\r\n );\r\n addClass(\r\n me.DOM.getElementById('apexchat_prechat_main_container'),\r\n 'apexchat_prechat_left'\r\n );\r\n removeClass(\r\n me.DOM.getElementById('apexchat_prechat_typing_div'),\r\n 'talk_bubble_right'\r\n );\r\n };\r\n self.renderOnRightPosition = function () {\r\n renderer.renderOnRightPosition();\r\n addClass(\r\n me.DOM.getElementById('apexchat_prechat_message_popup_container'),\r\n 'apexchat_prechat_rounded_theme_right'\r\n );\r\n addClass(\r\n me.DOM.getElementById('apexchat_prechat_typing_div'),\r\n 'talk_bubble_right'\r\n );\r\n removeClass(\r\n me.DOM.getElementById('apexchat_prechat_typing_div'),\r\n 'talk_bubble_left'\r\n );\r\n };\r\n self.popupUI = function (isPreChatRoundedTheme) {\r\n const _container = me.DOM.getElementById('apexchat_prechat_message');// me.$('#apexchat_prechat_message', me.DOM);\r\n const _setMessageTemplate = function () {\r\n if (!isPreChatRoundedTheme) {\r\n return;\r\n }\r\n if (!ApexChat.preChatMsgTemplate) {\r\n // we need to replace Close button according to animationType\r\n switch (me.options.preChatMessageAnimation) {\r\n case PreChatMessageAnimation.Default:\r\n case PreChatMessageAnimation.Stacking:\r\n _hideCloseButton();\r\n break;\r\n case PreChatMessageAnimation.MobileStacking:\r\n _hideCloseCrossSymbol();\r\n break;\r\n }\r\n // const message = document.createTextNode('##message##'); // Create a text node\r\n // me.DOM.getElementById('apexchat_prechat_message').innerHTML = message;\r\n me.DOM.getElementById('apexchat_prechat_message').innerHTML = preChatPlainTextTemplate({\r\n text: '##message##',\r\n hidden: true\r\n });\r\n me.DOM.getElementById('apexchat_prechat_message_popup_container').classList.add('livechat_prechat_message_show');\r\n\r\n //me.$('#apexchat_prechat_message', me.DOM).html(message);\r\n\r\n const participants = ApexChat.localStorageAPI.Get(\r\n 'livechat_chat_participants'\r\n );\r\n let participantInfo = JSON.parse(participants || '{}');\r\n participantInfo = participantInfo[participantInfo.length - 1];\r\n // if participants found then we need to update the image and agent name of the next pre-chat pop-up message\r\n if (\r\n participants &&\r\n participantInfo &&\r\n participantInfo.userId !== ParticipantIds.visitor\r\n ) {\r\n // Dont run for visitor case\r\n if (participantInfo.handlerImageUrl) {\r\n // me.$(\r\n // '.agent_image_prechat_rounded_theme .apexchat_prechat_chat_icon',\r\n // me.DOM\r\n // ).css(\r\n // 'background-image',\r\n // `url(${participantInfo.handlerImageUrl})`\r\n // );\r\n me.DOM.querySelector('.apexchat_prechat_chat_icon')?.style.backgroundImage =\r\n `url(${AgentImageHandler(participantInfo.handlerImageUrl)})`\r\n }\r\n me.DOM.querySelector('.agent_name_prechat_rounded_theme')?.innerHTML = participantInfo.displayName\r\n } else {\r\n me.DOM.querySelector('.agent_name_prechat_rounded_theme')?.innerHTML = me.options.agentName\r\n }\r\n ApexChat.preChatMsgTemplate = '
' + me.DOM.querySelector('#apexchat_prechat_message_popup').cloneNode(true).innerHTML + '
';\r\n me.DOM.getElementById('apexchat_prechat_message_popup_container').classList.add('apexchat_prechat_default_animation')\r\n ApexChat.sessionAPI.Store(\r\n 'livechat_prechat_msg_template',\r\n ApexChat.preChatMsgTemplate\r\n );\r\n me.messenger.setMessageTemplate(ApexChat.preChatMsgTemplate);\r\n }\r\n };\r\n var _hideCloseButton = function () {\r\n me.DOM.getElementById('apexchat_prechat_rd_close_btn_icon').style.display = 'none';\r\n };\r\n var _hideCloseCrossSymbol = function () {\r\n me.DOM.getElementById('apexchat_prechat_close_message_popup').style.display = 'none';\r\n me.DOM.getElementById('apexchat_prechat_rd_close_btn_icon').style.display = 'block';\r\n\r\n };\r\n const _push = function (message) {\r\n if (!isPreChatRoundedTheme) {\r\n return;\r\n }\r\n if (!message.message && message.text) {\r\n message.message = message.text;\r\n }\r\n message.message = decodeHTML(\r\n cleanInvalidHtml(\r\n removeTextFollowedByColon(message.message)\r\n )\r\n );\r\n // message.message = removeTextFollowedByColon(message.message);\r\n // on this switch we will take decision.\r\n switch (me.options.preChatMessageAnimation) {\r\n case PreChatMessageAnimation.Default:\r\n _renderDefault(message);\r\n break;\r\n case PreChatMessageAnimation.Stacking:\r\n case PreChatMessageAnimation.MobileStacking:\r\n _renderStacking(message);\r\n break;\r\n }\r\n // check chatMsg variable is exists and ApexChat.preChatElement is not undefined livechat_participant_display_text\r\n if (message.questionType == ScriptsQuestionType.None) {\r\n _setTabIndex();\r\n } else {\r\n _removeTabIndex();\r\n }\r\n };\r\n var _setTabIndex = function () {\r\n _container.setAttribute('tabindex', 0);\r\n };\r\n var _removeTabIndex = function () {\r\n _container.setAttribute('tabindex', -1);\r\n };\r\n var _renderDefault = function (message) {\r\n // IFrame resizing on Clicking Action of QuestionType\r\n me.postMessage({\r\n // no need to send 0 currentMsgHeight\r\n event: 'prechat-auto-resizing',\r\n data: {\r\n isSingleMsg: true\r\n }\r\n });\r\n if (!message.dontAppendExisitngContent && message?.message) {\r\n // me.$('#apexchat_prechat_message', me.DOM).html(message.message);\r\n me.DOM.getElementById('apexchat_prechat_message').innerHTML = preChatPlainTextTemplate({\r\n text: message.message,\r\n hidden: false\r\n });\r\n const questionWrapper = me.DOM.querySelector('.livechat_prechat_plain_text_greet');\r\n appendGreeting(questionWrapper, me.options);\r\n me.DOM.getElementById('apexchat_prechat_message_popup_container').classList.add('livechat_prechat_message_show');\r\n\r\n } else {\r\n me.DOM.getElementById('apexchat_prechat_message').innerHTML = ''\r\n }\r\n\r\n // we are showing with opacity 0; because we cant calculate dynamic height differences If element is Hidden,\r\n // Initially, we were adding CSS Class for making Opacity 0 & 1 but adding and removing class was making a jerk we needed the animation effect between 0 to 1, in decimal manner like 0.1, 0.2, 0.3... to 0.9, 1\r\n //me.$('#apexchat_prechat_message_popup', me.DOM).show().css({ opacity: 0 });\r\n const ele = me.DOM.getElementById('apexchat_prechat_message_popup');\r\n ele.style.display = 'block';\r\n ele.style.opacity = 0;\r\n // we need this timeout as DOM takes time to render, without timeout.\r\n // ApexChat.getStyle giving wrong values without timeout.\r\n };\r\n var _renderStacking = function (message) {\r\n me.messenger.push(message);\r\n };\r\n const _doNothing = function () { };\r\n const _questionTypeUIConfiguration = function (questionType) {\r\n me.setAllowBackgroundClick(questionType);\r\n me.DOM.querySelector('.apexchat_question_type_close_button')?.style.setProperty('display', 'none', 'important');\r\n me.DOM.querySelector('.apexchat_participant_display_text#apexchat_participant_display_name')?.style.setProperty('display', 'none', 'important');\r\n me.DOM.querySelector('.apexchat_participant_display_text#apexchat_participant_display_col')?.style.setProperty('display', 'none', 'important');\r\n console.log('Rounded Template renderer _questionTypeUIConfiguration');\r\n };\r\n return {\r\n setMessageTemplate: _setMessageTemplate,\r\n render: _push,\r\n clear: _doNothing,\r\n questionTypeUIConfiguration: _questionTypeUIConfiguration\r\n };\r\n };\r\n };\r\n let renderer = new TemplateRenderer();\r\n if (me.options.preChat.preChatThemeSetting) {\r\n if (\r\n JSON.parse(options.preChat.preChatThemeSetting).general.template === GlobalVariables.preChatRoundedThemeName\r\n ) {\r\n me.options.isPreChatRoundedTheme = true;\r\n renderer = new RoundedTemplateRenderer(renderer, 130);\r\n }\r\n }\r\n\r\n me.templateRenderer = renderer;\r\n\r\n if (me.options.chatMode == ChatMode.Windowed) {\r\n this.mode = WidgetTypes.Windowed;\r\n } else if (me.options.chatMode == ChatMode.DOM) {\r\n this.mode = WidgetTypes.DOM;\r\n }\r\n this.lastMessageStoreName = 'livechat_prechat_lastmessage';\r\n this.messageCounterStoreName = 'livechat_prechat_messagecounter';\r\n // super(\r\n // Object.assign(me.options, {\r\n // widget: WidgetTypes.PreChat\r\n // })\r\n // );\r\n this.subscribe(\r\n WidgetTypes.VideoGreetInvitation + WidgetStates.ShownMaximized,\r\n (args) => {\r\n if (me.options && me.options.videoGreetEnabled) {\r\n me.hide();\r\n }\r\n }\r\n );\r\n this.subscribe('videogreet-init', () => {\r\n const lastVGState = me.state.getStateValue(WidgetTypes.VideoGreetInvitation); // get video greet state\r\n me.isVideoGreet = true;\r\n if (lastVGState != WidgetStates.Hidden) {\r\n // check video greet maximize\r\n me.isVideoGreetMax = true;\r\n }\r\n });\r\n if (me.isPageRefreshed()) {\r\n me.ready();\r\n if (me.options && me.options.videoGreetEnabled) {\r\n me.postMessage({\r\n event: 'videogreet-gif-file-loaded',\r\n data: {\r\n imageUrl: me.options.videoGreet.animatedImageUrl\r\n }\r\n });\r\n }\r\n } else {\r\n const preChatDuration =\r\n me.options && me.options.videoGreetEnabled\r\n ? 1000\r\n : me.options.preChat.preChatLoadTimeout * 1000;\r\n //setTimeout(() => {\r\n me.ready();\r\n //}, preChatDuration);\r\n }\r\n me.messageArray = [];\r\n }\r\n\r\n ready() {\r\n super.ready();\r\n const me = this;\r\n me.create();\r\n me.templateRenderer.hideTypingIndicator();\r\n me.subscribe('new-pre-chat-message-arriving', (args) => {\r\n me.templateRenderer.showTypingIndicator();\r\n });\r\n me.subscribe(WidgetTypes.DOM + WidgetStates.ShownMinimized, (args) => {\r\n me.templateRenderer.hideTypingIndicator();\r\n });\r\n me.subscribe(WidgetTypes.ChatRoom + ChatEvents.OnChatJoined, (args) => {\r\n // CHAT-6280-Handle PreChat hits, subscribed onChatJoined method from chatroom-v3.js\r\n });\r\n me.subscribe('videogreet-gif-file-loaded', (data) => {\r\n if (data.imageUrl) {\r\n const image = me.DOM.getElementById('apexchat_prechat_chat_icon');\r\n image.classList.add('video_greet_animated_gif');\r\n image.style.backgroundImage = `url('${data.imageUrl}')`;\r\n }\r\n });\r\n me.subscribe(WidgetTypes.DOM + WidgetStates.ShownMinimized, (args) => {\r\n me.templateRenderer.hideTypingIndicator();\r\n });\r\n me.subscribe(WidgetTypes.ChatRoom + ChatEvents.OnChatJoined, (args) => {\r\n // CHAT-6280-Handle PreChat hits, subscribed onChatJoined method from chatroom-v3.js\r\n });\r\n\r\n /* messenger is taking instance of PreChatMessageHandler with few important arguments\r\n * */\r\n me.messenger = new PreChatMessageHandler( // encapsulated message handler for PreChat\r\n Object.assign(me.options, {\r\n context: me.DOM,\r\n prechatTemplate: importPrechatTemplateFactory(me.options)?.prechatTemplate,\r\n // prechatTemplate: preChatTemplate({\r\n\r\n // }),\r\n prechatModel: me.options.preChat\r\n })\r\n );\r\n }\r\n\r\n create() {\r\n super.create();\r\n const me = this;\r\n me.view = new WidgetView({\r\n dom: this.DOM,\r\n identifier: WidgetTypes.PreChat,\r\n templates: [\r\n {\r\n key: WidgetStates.ShownMaximized,\r\n // tpl: preChatTemplate({\r\n // title: 'My Webpage',\r\n // }),\r\n tpl: importPrechatTemplateFactory({\r\n title: 'My Webpage',\r\n })?.prechatTemplate,\r\n model: me.options.preChat,\r\n async afterRender(tpl) {\r\n me.messagesContainer = me.DOM.getElementById('apexchat_prechat_message');\r\n\r\n me.templateRenderer.showAgentName();\r\n const handleQuestionTypeResponse = async (res) => {\r\n const module = await import(/* webpackChunkName: \"handlePrechatQuestionType\" */ './handlePrechatQuestionType')\r\n const handlePrechatQuestionType = module.default;\r\n handlePrechatQuestionType(me, res.res || res);\r\n };\r\n if (!me.QTRendererExt) {\r\n const module = await import(/* webpackChunkName: \"questionTypeRendererExtension\" */ '../questiontypes/QuestionTypeRendererExtension')\r\n const QuestionTypeRendererExtentions = module.default;\r\n me.QTRendererExt = new QuestionTypeRendererExtentions();\r\n await me.QTRendererExt.initComponent(\r\n Object.assign(me.options.preChat, {\r\n isUpdateSupported: false,\r\n context: me.DOM,\r\n messagesContainer: me.messagesContainer,\r\n responseCallback: handleQuestionTypeResponse,\r\n enableFullTextLogic: true,\r\n widgetType: WidgetTypes.PreChat,\r\n countryCode: me.options.countryCode\r\n })\r\n );\r\n }\r\n\r\n const isPreChatMaximized =\r\n me.state.getStateValue(WidgetTypes.PreChat) ===\r\n WidgetStates.ShownMaximized;\r\n // JIRA_7493 & 7477 ChatId Null issue\r\n me.options.chatId = me.options.chatId || me.getChatId();\r\n if (\r\n me.isChatActive() &&\r\n me.isPageRefreshed() &&\r\n isPreChatMaximized &&\r\n me.options.chatId\r\n ) {\r\n import(/* webpackChunkName: \"liveChatRoom\" */ '../core/LiveChatRoom').then((module) => {\r\n const LiveChatRoom = module.default;\r\n // Creating ChatRoom object for sending the prechat Agent Script's replies to dashboard via websync.\r\n me.prechatRoom = new LiveChatRoom(\r\n Object.assign(me.options, me.options.model)\r\n );\r\n\r\n // We don't need to subscribe this channel if exit-popup is in maximize state and user refresh the page,\r\n // if we do that the last message of the user will show as a duplicate message on exit-popup\r\n me.prechatRoom.subscribeToChatChannel(me.options.chatId);\r\n let participants = ApexChat.localStorageAPI.Get(\r\n 'livechat_chat_participants'\r\n );\r\n if (participants) {\r\n participants = JSON.parse(participants);\r\n me.onParticipantsChanged(participants);\r\n }\r\n });\r\n }\r\n // pasre/apply pre chat theme setting\r\n me.skin = JSON.parse(me.options.preChat.preChatThemeSetting);\r\n if (!me.skin) {\r\n me.skin = me.DEFAULT_PRECHAT_CONFIG;\r\n }\r\n me.handleADA(\r\n me.DOM.querySelector('#apexchat_prechat_close_message_popup'),\r\n async (e) => {\r\n await me.preChatCloseMessagePopup(me, e);\r\n }\r\n );\r\n me.handleADA(\r\n me.DOM.querySelector('#apexchat_prechat_rd_close_btn_icon'),\r\n async (e) => {\r\n await me.preChatCloseMessagePopup(me, e);\r\n }\r\n );\r\n // me.handleADA(\r\n // me.$('#apexchat_prechat_rd_close_btn_icon', me.DOM)[0],\r\n // (e) => {\r\n // me.closeMessagePopup(e);\r\n // }\r\n // );\r\n\r\n\r\n me.options.handlerImageUrl = AgentImageHandler(me.options.handlerImageUrl)\r\n\r\n // if the user name has a space then we need to enclose the image URL in single quote.\r\n me.skin.handlerImageUrl = `${AgentImageHandler(me.options.handlerImageUrl)}`;\r\n const rdThemeSettings =\r\n me.options && me.options.rdThemeSettings\r\n ? ApexChat.TryParse(me.options.rdThemeSettings)\r\n : null;\r\n let skinJson = {\r\n container: '',\r\n preChat: me.skin\r\n };\r\n skinJson.rdThemeSettings = rdThemeSettings;\r\n /* Branding - PreChat */\r\n const brandingInfo = skinJson.rdThemeSettings.branding || {};\r\n if (brandingInfo.brandingIsEnabled) {\r\n var branding = new Branding()\r\n skinJson.global = { branding: brandingInfo };\r\n branding.init({\r\n widget: BrandingWidget.RD_PreChat,\r\n brandConfig: skinJson\r\n })\r\n skinJson = branding.getBrandedConfig();\r\n }\r\n setPrechatStyles(me.DOM, skinJson);\r\n addStyleTextInIframe(\r\n me.options.invitationWidgetStyleCustom,\r\n 'apexchat_custom_fontAwesome',\r\n undefined,\r\n me.DOM\r\n );\r\n\r\n // // set UI configuration\r\n // Utils.fontsLoaded({\r\n // fontName: 'Avenir',\r\n // context: me.DOM,\r\n // window: me.iFrameWindow,\r\n // onSuccess() {\r\n // me.UIConfiguration();\r\n // }\r\n // });\r\n\r\n me.UIConfiguration().then(() => {\r\n if (me.DOM && me.DOM.getElementById('apexchat_prechat_chat_icon')) {\r\n let backgroundImage = getStyle(\r\n me.DOM.getElementById('apexchat_prechat_chat_icon'),\r\n 'background-image'\r\n );\r\n if (backgroundImage && backgroundImage.indexOf('.png') === -1) {\r\n me.DOM.querySelector('#apexchat_prechat_main_bg').classList.add(\r\n 'apexchat_css_background_transparent'\r\n );\r\n }\r\n }\r\n });\r\n //await me.UIConfiguration();\r\n\r\n\r\n // hideElement(\r\n // me.DOM.getElementById('apexchat_prechat_message_popup')\r\n // ); // Hide the initial popup\r\n\r\n // CHAT_8288 - Remove white background for all image extension and added for .png only\r\n\r\n }\r\n }\r\n ],\r\n initialState: WidgetStates.ShownMaximized\r\n });\r\n }\r\n\r\n postPreChatMessages(res) {\r\n const me = this;\r\n // We need to prevent multiple posting of same ChatLogID, created an array and saving the chatlogId\r\n me.postedPreChatMessagesArray = me.postedPreChatMessagesArray || [];\r\n // if the chatlogId is already being posted, preventing it to repost which was making text appear twice in dashboard\r\n if (\r\n res.chatLogId &&\r\n me.postedPreChatMessagesArray.indexOf(res.chatLogId) !== -1 &&\r\n !(res.questionType != ScriptsQuestionType.Text)\r\n ) {\r\n return false;\r\n }\r\n // saving chatlogId is array\r\n // check checklogid exists or not\r\n if (res.chatLogId && me.postedPreChatMessagesArray.indexOf(res.chatLogId) !== -1) {\r\n me.postedPreChatMessagesArray.push(res.chatLogId);\r\n }\r\n me.postMessage({\r\n event: WidgetTypes.PreChat + WidgetStates.MessageSent,\r\n data: res\r\n });\r\n\r\n const pubSub = new PubSub();\r\n const domRendered = pubSub.allSubscriptions()[WidgetTypes.DOMUIController]; // DOM has not opened?\r\n // We only need to send the PreChat Agent Script's replies to dashboard via 'prechatRoom' object until DOM appeared.\r\n me.startChatFromPreChat(); /* <--CHAT-6961 - Open Chat window, no need to continue mapping on prechat */\r\n if (!domRendered) {\r\n me.prechatRoom.setWebSyncClient();\r\n me.prechatRoom.publishQuestionTypeResponse(res);\r\n // Set the visitor selection of question type\r\n res.visitorSelectedOptions = res.answers;\r\n res.questionType = me.QTRendererExt.questionTypeRenderer.renderer.model.questionType;\r\n res.questionTypeDisplayListForVisitor =\r\n me.QTRendererExt.questionTypeRenderer.renderer.model.questionTypeDisplayListForVisitor;\r\n res.id = res.chatLogId;\r\n\r\n res.visitorScriptAnswer = res.answers;\r\n res.visitorResponseStatus = res.isSkipped\r\n ? ScriptVisitorResponseStatus.Skipped\r\n : ScriptVisitorResponseStatus.Answered;\r\n me.QTRendererExt.questionTypeRenderer.setVisitorSelection(res);\r\n me.prechatRoom.sendMessage({\r\n chatMsg: res.msgText,\r\n questionTypeChatLogIdToBeUpdated: res.questionTypeChatLogIdToBeUpdated\r\n });\r\n }\r\n }\r\n\r\n isChatAlreadyStartedFromPreChat() {\r\n // ref. CHAT-4589\r\n const lastDOMState = this.state.getStateValue(WidgetTypes.DOM);\r\n const currentPreChatState = this.getCurrentState();\r\n // the following condition ensures that:\r\n return (\r\n this.isChatInProgress() && // 1. Chat was started on PreChat or PreChatMessage Click\r\n lastDOMState == WidgetStates.ShownMinimized && // 2. Then DOM was minimized\r\n currentPreChatState == WidgetStates.ShownMaximized\r\n ); // 3. and PreChat has appeared back in Max/default state\r\n }\r\n\r\n startChatFromPreChat(e, config) {\r\n const me = this;\r\n\r\n // is there a srcElement passed and it has a data attribute named shouldStartChat with value = false? return.\r\n if (\r\n (config && !config.srcElement) ||\r\n (config && config.srcElement && !config.srcElement.getAttribute('data-should-start-chat'))\r\n ) {\r\n return false;\r\n }\r\n // me.postMessage({ event: WidgetTypes.PreChat + WidgetStates.Clicked, data: {} });\r\n // me.initiatedBy = 'PreChat';\r\n me.state.changeState({\r\n toState: WidgetStates.Clicked,\r\n value: { initiatedBy: 'PreChat' }\r\n });\r\n if (me.isWindowedStarted() || me.options.chatMode == ChatMode.Windowed) {\r\n me.options.chatInitiatedBy = 'PreChat';\r\n me.startWindowedChat(\r\n Object.assign(me.options, {\r\n shouldContinueMapping: ApexChat.shouldContinueMapping,\r\n FullTextVisitorResponse: ApexChat.FullTextVisitorResponse\r\n })\r\n ); // pass parameter as a querystring\r\n }\r\n me.closePreChatUI();\r\n }\r\n\r\n closePreChatUI() {\r\n const me = this;\r\n ApexChat.preChatElement = null;\r\n // when closing prechat msg IFrame should resize.\r\n me.postMessage({\r\n event: 'prechat-auto-resizing',\r\n data: {\r\n isResetIframe: true,\r\n isSingleMsg: true,\r\n hideCloseButton: true // we need to hide close button\r\n }\r\n });\r\n }\r\n\r\n async UIConfiguration() {\r\n const me = this;\r\n const position = me.options.preChat.preChatPosition;\r\n // get width/height of prechat object without popup message\r\n const el = me.DOM.getElementById('apexchat_prechat_chat_icon');\r\n if (el) {\r\n me.iconWidth = (el.offsetWidth ? el.offsetWidth : 80) + 30;\r\n me.iconHeight =\r\n (el.offsetHeight ? el.offsetHeight : 80) +\r\n (me.skin.outerObject.hideOuterObject ? 0 : 20);\r\n ApexChat.PreChatIconDimensions = {\r\n Width: me.iconWidth,\r\n Height: me.iconHeight\r\n };\r\n }\r\n\r\n me.templateRenderer.hideMessagePopup();\r\n // apply css class to prechat object base on position\r\n me.applyCssClass(position);\r\n if (!me.isVideoGreetMax) {\r\n // check video greet maximize\r\n // notify iframe for resize\r\n me.postMessage({\r\n event: 'prechat-size',\r\n data: {\r\n width: me.iconWidth,\r\n height: me.iconHeight,\r\n onCreateSizing: true,\r\n addValue: me.templateRenderer.heightPosition\r\n }\r\n });\r\n }\r\n if (!me.isChatInProgress()) {\r\n // ref. CHAT-4589: we should stop pre-chat message popups on susequent page reloads\r\n if (me.options && !me.options.preChat.disablePrechatPopup) {\r\n await me.queueAutoMessaging();\r\n }\r\n }\r\n const popupSelector = me.DOM.querySelector('#apexchat_prechat_close_message_popup')\r\n // bind close button\r\n if (me.options.isMobile) {\r\n //me.$(popupSelector, me.DOM).show();\r\n popupSelector.style.display = 'block';\r\n }\r\n popupSelector.addEventListener('click', async (e) => {\r\n await me.preChatCloseMessagePopup(me, e);\r\n })\r\n me.DOM.querySelector('#apexchat_prechat_rd_close_btn_icon').addEventListener('click', async (e) => {\r\n await me.preChatCloseMessagePopup(me, e);\r\n });\r\n //binding event on DOM because elements are not generated the time when this code runs\r\n me.DOM.addEventListener('click', function (e) {\r\n if (e.target.closest('.apexchat_mc_ata_list') || e.target.closest('.live_chat_scheduler_bg')) {\r\n me.startChatFromPreChat(); // click on option DOM window open\r\n }\r\n // me.DOM.getElementById('apexchat_prechat_message').classList.remove(\"livechat_prechat_first_message\");\r\n });\r\n me.eventSubscription();\r\n // get icon object for start chat event binding default use inner object but if inner object is hide then use outer object\r\n let startChatDiv = 'apexchat_prechat_chat_icon';\r\n if (me.skin.innerObject.hideInnerObject) {\r\n startChatDiv = 'apexchat_prechat_main_bg';\r\n }\r\n this.options.containerId = startChatDiv;\r\n\r\n me.setClickCallToAction(startChatDiv, 'PreChat', {\r\n shouldContinueMapping: ApexChat.shouldContinueMapping,\r\n FullTextVisitorResponse: ApexChat.FullTextVisitorResponse\r\n }); // pass parameter to send via query string\r\n const domState = me.state.getStateValue(WidgetTypes.DOM);\r\n const videGreetState = me.state.getStateValue(WidgetTypes.VideoGreetInvitation)\r\n if ((domState == WidgetStates.ShownMinimized || domState == WidgetStates.Closed) && !me.isChatActive()) {\r\n // when dom is minimized/closed and chat is inactive we need to show prechat widget\r\n me.show();\r\n } else if ((me.options && me.options.videoGreetEnabled && videGreetState === undefined) || (me.getCurrentState() == WidgetStates.Hidden && me.isChatActive())) {\r\n me.hide();\r\n } else {\r\n // Stop to show the prechat initial messages and hide the widget when chat started already.\r\n if (domState == WidgetStates.ShownMaximized) {\r\n me.resetMessageCounterCache();\r\n me.options.preChat.preChatMessages = [];\r\n me.hide();\r\n } else {\r\n me.show();\r\n }\r\n }\r\n }\r\n\r\n async preChatCloseMessagePopup(me, e) {\r\n const module = await import(/* webpackChunkName: \"preChatCloseMessagePopup\" */ './preChatCloseMessagePopup')\r\n const preChatCloseMessagePopup = module.default;\r\n preChatCloseMessagePopup(me, e);\r\n }\r\n\r\n eventSubscription() {\r\n const me = this;\r\n const hideIt = function () {\r\n me.isChatStartedFromPreChat = true; // CHAT-7681 Iphone prechat double greeting Issue\r\n if (me.options.chatMode == ChatMode.DOM) {\r\n // do not hide for iphone.\r\n // in case of hiding, the dom is not reading some defined values\r\n // CHAT-6151\r\n if (me.options.isMobile && /iPad|iPhone|iPod/.test(navigator.userAgent)) {\r\n // reset message counter\r\n // this is a hack for the release\r\n // mahad will come up with better solution for this later.\r\n me.pipeMessageHandler.reset(); // stop all processing of pipe messages if its running for iphone\r\n me.resetMessageCounterCache();\r\n me.templateRenderer.hideMessagePopup();\r\n me.hide();\r\n return;\r\n }\r\n me.hide();\r\n me.closePreChatUI(); // CHAT-7155 - Closing PreChat UI When opening DOM for context resolving issues.\r\n } else {\r\n window.clearTimeout(me.messageTimeout);\r\n me.resetMessageCounterCache();\r\n me.templateRenderer.hideMessagePopup();\r\n }\r\n };\r\n const chatStartedFromExitPopup = function () {\r\n me.hide();\r\n };\r\n const chatStartedFromPrechat = function () {\r\n me.isChatStartedFromPreChat = true; // CHAT-7681 Iphone prechat double greeting Issue\r\n // CHAT-6794 // need to remove the last stored mapped question because another parent question has appeared.\r\n ApexChat.storageAPI.Remove(TempCache.APEXCHAT_PRECHAT_MAPPED_QUESTION_COOKIE);\r\n // Show Windowed Widget instead DOM, when Windowed chat already started\r\n if (me.options.chatMode === ChatMode.DOM) {\r\n me.closePreChatUI();\r\n hideIt();\r\n }\r\n };\r\n const cleanUp = function () {\r\n // JIRA_6472 - Greeting was not appearing on reinitializing\r\n // summary: Removing the PreChat Message Sent helped the greeting to appear it again.\r\n ApexChat.storageAPI.Remove(TempCache.PreChat_Message_Sent);\r\n };\r\n const showIt = function () {\r\n const domState = me.state.getStateValue(WidgetTypes.DOM);\r\n if (domState == WidgetStates.ShownMaximized) {\r\n return;\r\n }\r\n me.show();\r\n };\r\n // subscribe for chat Message and typing indicator when chat mode has set to dom\r\n if (me.options.chatMode == ChatMode.DOM) {\r\n me.subscribe(WidgetTypes.ChatRoom + ChatEvents.OnMessageArrived, (args) => {\r\n if (\r\n me.state.getStateValue(WidgetTypes.PreChat) ===\r\n WidgetStates.ShownMaximized &&\r\n me.options.preChatMessageAnimation !== PreChatMessageAnimation.Default\r\n ) {\r\n // specifically for Stacking and Mobile Stacking Animation, we dont need runAfter for that animation\r\n me.onMessageArrived(args.m, args.initialLoad, args.index); // BUG-CHAT-7457 Minimize PreChat for Stacking not working properly\r\n } else {\r\n RunAfter(\r\n () => {\r\n me.onMessageArrived(args.m, args.initialLoad, args.index);\r\n },\r\n me.state.getStateValue(WidgetTypes.PreChat) ===\r\n WidgetStates.ShownMaximized\r\n ? 0\r\n : 1000\r\n );\r\n }\r\n });\r\n me.subscribe(WidgetTypes.ChatRoom + ChatEvents.OnTypingArrived, (args) => {\r\n me.onTypingArrived(args);\r\n });\r\n\r\n me.subscribe(WidgetTypes.DOM + WidgetStates.Closed, showIt);\r\n me.subscribe(WidgetTypes.DOM + WidgetStates.ShownMinimized, showIt);\r\n }\r\n // subscribe for start chat event from any invitation\r\n me.subscribe(\r\n WidgetTypes.ExitPopup + WidgetStates.ShownMaximized,\r\n chatStartedFromExitPopup\r\n );\r\n me.subscribe(WidgetTypes.ExitPopup + WidgetStates.Closed, showIt);\r\n me.subscribe(WidgetTypes.DropDown + WidgetStates.Clicked, hideIt);\r\n me.subscribe(WidgetTypes.Bar + WidgetStates.Clicked, hideIt);\r\n me.subscribe(WidgetTypes.Tab + WidgetStates.Clicked, hideIt);\r\n me.subscribe(WidgetTypes.PreChat + WidgetStates.Clicked, chatStartedFromPrechat);\r\n me.subscribe(\r\n WidgetTypes.ChatRoom + ChatEvents.OnParticipantsChanged,\r\n (participants) => {\r\n me.onParticipantsChanged(participants);\r\n }\r\n );\r\n me.subscribe(WidgetTypes.VideoGreetInvitation + WidgetStates.Closed, async () => {\r\n me.postMessage({\r\n event: 'videogreet-gif-file-loaded',\r\n data: {\r\n imageUrl: me.options.videoGreet.animatedImageUrl\r\n }\r\n });\r\n me.isVideoGreetMax = false;\r\n me.isVideoGreet = true;\r\n showIt();\r\n await me.preChatCloseMessagePopup(me);\r\n });\r\n // When Chat Session Ends, On very next message from Visitor, an overlay mask for starting new chat appears,\r\n // & visitor starts the chat at this point we need to delete few cookies for PreChat.\r\n me.subscribe(WidgetTypes.ChatRoom + ChatEvents.OnSendMessageFailure, cleanUp);\r\n }\r\n\r\n onParticipantsChanged(participants) {\r\n const me = this;\r\n ApexChat.localStorageAPI.Store('livechat_chat_participants', JSON.stringify(participants));\r\n ApexChat.preChatMsgTemplate = null;\r\n const image = me.DOM.getElementById('apexchat_prechat_chat_icon');\r\n // get old url for comparison\r\n const prevUrl = image.style.backgroundImage;\r\n for (let i = 0; i < participants.length; i++) {\r\n // change image if operator joins for the first time\r\n if (\r\n participants[i].userId > 0 &&\r\n prevUrl != participants[i].handlerImageUrl &&\r\n participants[i].handlerImageUrl\r\n ) {\r\n const imageUrl = AgentImageHandler(participants[i].handlerImageUrl);\r\n image.style.backgroundImage = `url('${imageUrl}')`;\r\n }\r\n }\r\n }\r\n\r\n applyCssClass(position) {\r\n // apply css classes base on pre chat position\r\n const me = this;\r\n // remove default classes\r\n removeClass(\r\n me.DOM.getElementById('apexchat_prechat_main_container'),\r\n 'apexchat_prechat_theme_margin'\r\n );\r\n removeClass(\r\n me.DOM.getElementById('apexchat_prechat_message_popup'),\r\n 'apexchat_prechat_tri_left'\r\n );\r\n removeClass(\r\n me.DOM.getElementById('apexchat_prechat_message_popup'),\r\n 'apexchat_prechat_left_top'\r\n );\r\n removeClass(\r\n me.DOM.getElementById('apexchat_prechat_close_message_popup'),\r\n 'apexchat_prechat_x_right'\r\n );\r\n removeClass(\r\n me.DOM.getElementById('apexchat_prechat_message_popup'),\r\n 'apexchat_prechat_tri_left_theme'\r\n );\r\n addClass(\r\n me.DOM.getElementById('apexchat_prechat_close_message_popup'),\r\n 'apexchat_prechat_x'\r\n );\r\n\r\n me.DOM.getElementById('apexchat_prechat_main_container').style.position = 'relative';\r\n me.DOM.getElementById('apexchat_prechat_main_bg').style.position = 'fixed';\r\n switch (position) {\r\n case Position.Left:\r\n me.templateRenderer.renderOnLeftPosition();\r\n break;\r\n case Position.Right:\r\n me.templateRenderer.renderOnRightPosition();\r\n break;\r\n }\r\n }\r\n showMessagePopupAndPublishAutoResize() {\r\n const me = this;\r\n const ele = me.DOM.getElementById('apexchat_prechat_message_popup');\r\n const padding = 15; // increased 15px// CHAT-5979 [V3] Pre - chat with default animation is cutting of shadow on top.\r\n ele.style.transition = 'opacity 0.3s, top 0.3s';\r\n ele.style.opacity = 1\r\n ele.style.display = \"block\"\r\n ele.style.top = padding + 'px'\r\n if (ele) {\r\n // we need calculations here for placing msg popup with animation one over the other.\r\n try {\r\n let timeout = 0;\r\n RunAsSoonAsWithDelay(() => {\r\n const calcCurrentMsgHeight = ele.scrollHeight;\r\n console.log('Prechat popUpUI calcCurrentMsgHeight:: ' + calcCurrentMsgHeight)\r\n me.postMessage({\r\n event: 'prechat-auto-resizing',\r\n data: {\r\n currentMsgHeight: calcCurrentMsgHeight,\r\n isSingleMsg: true\r\n }\r\n });\r\n timeout += 200\r\n }, () => ele.scrollHeight > 52 || timeout > 3000, 200);\r\n } catch (error) {\r\n console.error(\"prechat bubble size error::\", error);\r\n }\r\n let timeout = 0;\r\n }\r\n }\r\n async autoMessageRendering(options) {\r\n const me = this;\r\n const { message } = options;\r\n const { chatMsg } = options;\r\n const { index } = options;\r\n // as we are making Mock JSON for Pipe messaging, In case of Default Animation, we need to prevent the appending of content\r\n if (me.options.preChatMessageAnimation === PreChatMessageAnimation.Default) {\r\n if (message && message.messageType !== PreChatMessageType.plain_Text) {\r\n message.dontAppendExisitngContent = true;\r\n message.isFirstPreChatMessage = index === 0;\r\n }\r\n if (chatMsg && chatMsg.messageType !== PreChatMessageType.plain_Text) {\r\n chatMsg.dontAppendExisitngContent = true;\r\n chatMsg.isFirstPreChatMessage = index === 0;\r\n }\r\n }\r\n if (index == 0 && !ApexChat.prechatGreetingFlashed) {\r\n me.DOM.getElementById('apexchat_prechat_message').classList.add(\"livechat_prechat_first_message\");\r\n } else {\r\n me.DOM.getElementById('apexchat_prechat_message').classList.remove(\"livechat_prechat_first_message\");\r\n }\r\n ApexChat.isFirstPreChatMessage = index === 0;\r\n // check message type is script message or plain message\r\n if (\r\n (index == -1 && chatMsg) ||\r\n (message &&\r\n message.messageType == PreChatMessageType.agent_Script &&\r\n message.agentScript)\r\n ) {\r\n const questionType = chatMsg ? chatMsg.questionType : message.questionType;\r\n me.messagePopupUI.render(chatMsg || message);\r\n me.messagePopupUI.clear();\r\n await me.renderScriptMessage(chatMsg || message.agentScript);\r\n me.messagePopupUI.questionTypeUIConfiguration(questionType);\r\n } else {\r\n // create model for message logging\r\n const messageLog = {};\r\n messageLog.visitorId =\r\n me.options.visitorId || getCookieValue('livechat_visitor_id') || 0;\r\n messageLog.visitorId |= 0;\r\n messageLog.text = message.message;\r\n messageLog.sourceType = SourceType.PreChat;\r\n await me.logMessageOnServer(messageLog);\r\n // render plain text message\r\n me.messagePopupUI.render(message);\r\n }\r\n me.showMessagePopupAndPublishAutoResize();\r\n // check message is prechat or chat flow\r\n if (\r\n !options.isPipedMessage &&\r\n message &&\r\n message.questionType == ScriptsQuestionType.None\r\n ) {\r\n const timeout = setTimeout(async () => {\r\n await me.queueNextMessage(index + 1, message.duration * 1000);\r\n clearTimeout(timeout);\r\n }, message.duration * 1000);\r\n }\r\n if (options.cb) {\r\n options.cb();\r\n }\r\n }\r\n\r\n async displayMessagePopup(index, isPreChatMessage, chatMsg) {\r\n const me = this;\r\n logIt('displayMessagePopup');\r\n const isMessage = chatMsg?.message || chatMsg?.text;\r\n if (me.isWindowedStarted()) {\r\n return; // no pop message if Windowed has started\r\n }\r\n // if chat started from prechat and chatmsg is undefined and isPreChatMessage true appears thats means its a prechat messages appearing so we dont need it to show because chat has already been started\r\n // Also, on windowed mode if chat started then we dont need to show popup while windowed mode is on.\r\n if (!chatMsg && me.isChatStartedFromPreChat && isPreChatMessage) {\r\n me.templateRenderer.hideTypingIndicator();\r\n return;\r\n }\r\n const isFromHistory = chatMsg && chatMsg.isFromHistory;\r\n const preChatMsg = me.options.preChat.preChatMessages[index];\r\n // CHAT-7226 Next Mapped Question Logic Change\r\n // as option property removed from backend now we explicity add option property to our msg.options object,\r\n // because all QT UI depend upon that property.\r\n if (\r\n preChatMsg &&\r\n preChatMsg.questionType != ScriptsQuestionType.None &&\r\n preChatMsg.agentScript &&\r\n preChatMsg.agentScript.options\r\n ) {\r\n preChatMsg.agentScript.options = addOptionProperty(\r\n preChatMsg.agentScript.options\r\n );\r\n }\r\n // increase and display message counter\r\n // JIRA_4241 - in case of Last PreChatMessage no need to add counter!\r\n if (\r\n me.options.preChat.preChatMessages[index] &&\r\n !me.options.preChat.preChatMessages[index].isLastPreChatMessage &&\r\n !isFromHistory\r\n ) {\r\n const questionTypeId = ApexChat.storageAPI.Get('questionTypeId'); // check if question exists\r\n if (!isMessage && questionTypeId &&\r\n questionTypeId == me.options.preChat.preChatMessages[index].agentScriptAnswerId) {\r\n me.setMessageCounterCache(0);\r\n } else {\r\n me.setMessageCounterCache(1);\r\n }\r\n }\r\n me.messagePopupUI = me.templateRenderer.popupUI(me.options.isPreChatRoundedTheme);\r\n me.messagePopupUI.setMessageTemplate();\r\n me.displayMessageCounter();\r\n me.isPreChatMessage = isPreChatMessage;\r\n me.agentScriptAnswerId = 0;\r\n me.allowBackgroundClick = true;\r\n /// Wait for the flag/setting called “re-show after” which wipes the cookies after X amount of minutes and will treat them as a new visitor\r\n me.prechatStartedTimeout = window.setTimeout(() => {\r\n ApexChat.storageAPI.StoreTemp('livechat_prechat_started', false);\r\n }, me.options.reShowIntervalMinutes * 60 * 1000);\r\n // checking message type is prechat message or chat message\r\n if (isPreChatMessage && !me.isChatStartedFromPreChat) {\r\n // get prechat message\r\n var message = me.options.preChat.preChatMessages[index];\r\n if (message) {\r\n message.message = parseTemplate(\r\n removeTextFollowedByColon(message.message),\r\n me.options\r\n );\r\n }\r\n message.text = message.text || message.message;\r\n const msgObject = {\r\n m: message.agentScript || message\r\n };\r\n\r\n if (me.pipeMessageHandler.isValidPipedMessage(msgObject)) {\r\n me.hideMessageCounter(); // Hide counter in case of Pipe messages\r\n msgObject.isSplitMessage = true; // if message is piped define isSplitMessage to true\r\n // CHAT-7351- Split Message send as a one message on server.\r\n // in below logic we just send a pipe message as one message to server\r\n const messageLog = {};\r\n // create model for message logging\r\n messageLog.visitorId =\r\n me.options.visitorId || getCookieValue('livechat_visitor_id') || 0;\r\n messageLog.text = removeTextFollowedByColon(msgObject.m.text);\r\n messageLog.scriptAnswerId = msgObject.m.id;\r\n messageLog.questionType = msgObject.m.questionType;\r\n messageLog.isNextQuestionMapped = msgObject.m.isNextQuestionMapped;\r\n messageLog.visitorResponseType = msgObject.m.visitorResponseType;\r\n messageLog.options = msgObject.m.options;\r\n messageLog.visitorResponseStatus = ScriptVisitorResponseStatus.UnAnswered;\r\n messageLog.questionTypeDisplayListForVisitor = msgObject.m.displayListForVisitor;\r\n messageLog.sourceType = SourceType.PreChat;\r\n messageLog.agentScriptDocuments = msgObject.m.isDocument && msgObject.m.agentScriptDocuments ? JSON.stringify(msgObject.m.agentScriptDocuments) : '';\r\n messageLog.isDocument = msgObject.m.isDocument;\r\n messageLog.isSmsTransfer = msgObject.m.isSmsTransfer || message.isSmsTransfer;\r\n await me.logMessageOnServer(messageLog); // logging message to server\r\n me.pipeMessageHandler.startPolling({\r\n messageDisplayDuration:\r\n message.duration > 100 ? message.duration : message.duration * 1000, // detecting either Its Seconds or Milliseconds\r\n init() {\r\n me.onTypingArrived({ indicator: true });\r\n },\r\n async startPollingCallback(m) {\r\n m.message = m.text;\r\n await me.autoMessageRendering({\r\n chatMsg: m,\r\n index: -1,\r\n isPipedMessage: true\r\n });\r\n // In Piped messages the message can be QT we need QT to not to start chat IF user clicks on their DIV HTML Element\r\n const shouldStartChat = m.questionType == ScriptsQuestionType.None;\r\n me.bindPopupForStartingChat({\r\n popupSelector: me.DOM.querySelector('.apexchat_prechat_message_bubble'),\r\n shouldStartChat\r\n });\r\n },\r\n async lastPollingCallback(args) {\r\n me.onTypingArrived({ indicator: false });\r\n const { m } = args;\r\n m.message = m.text;\r\n await me.autoMessageRendering({\r\n chatMsg: m,\r\n index: -1,\r\n isPipedMessage: true,\r\n cb: args.cb\r\n });\r\n // In Piped messages the last message can be QT we need QT to not to start chat IF user clicks on their DIV HTML Element\r\n const shouldStartChat = m.questionType == ScriptsQuestionType.None;\r\n me.bindPopupForStartingChat({\r\n popupSelector: me.DOM.querySelector('.apexchat_prechat_message_bubble'),\r\n shouldStartChat\r\n });\r\n }\r\n });\r\n return;\r\n } else {\r\n await me.autoMessageRendering({\r\n message,\r\n chatMsg,\r\n index\r\n });\r\n }\r\n // checking chatroom msg is script message aur text message\r\n } else if (\r\n (chatMsg.scriptAnswerId > 0 || chatMsg.questionType == ScriptsQuestionType.AppointmentScheduler) &&\r\n // chatMsg.questionType != ScriptsQuestionType.None &&\r\n (!chatMsg.agentScriptDocuments && !chatMsg.isDocument\r\n ? chatMsg.questionType != ScriptsQuestionType.None\r\n : true) &&\r\n chatMsg.visitorResponseStatus == ScriptVisitorResponseStatus.UnAnswered\r\n ) {\r\n logIt(chatMsg);\r\n me.agentScriptAnswerId = -1;\r\n chatMsg.dontAppendExisitngContent = true; // we need detection here for QT is from Dashboard to handle animation.\r\n me.messagePopupUI.clear();\r\n me.messagePopupUI.render(chatMsg);\r\n await me.QTRendererExt.questionTypeRenderer.renderMessage(\r\n chatMsg,\r\n me.QTRendererExt.afterRenderMessage.bind2(me.QTRendererExt)\r\n );\r\n me.messagePopupUI.questionTypeUIConfiguration(chatMsg.questionType);\r\n } else {\r\n me.messagePopupUI.render(chatMsg);\r\n }\r\n // me.setAllowBackgroundClick();\r\n\r\n me.showMessagePopup(!me.options.isPreChatRoundedTheme, chatMsg || message);\r\n }\r\n\r\n endChat(m) {\r\n const me = this;\r\n me.resetMessageCounterCache();\r\n }\r\n\r\n async queueAutoMessaging() {\r\n const me = this;\r\n if (me.options.preChat.preChatMessages.length > 0) {\r\n let lastPreChatPopoutMessage = me.getLastMessageCache();\r\n if (!lastPreChatPopoutMessage) {\r\n // It means the next message is first to be display\r\n lastPreChatPopoutMessage = {\r\n index: 0,\r\n duration: me.options.preChat.preChatFirstMessageTimeout\r\n ? 1000 * me.options.preChat.preChatFirstMessageTimeout\r\n : 1000\r\n };\r\n } else {\r\n me.setMessageCounterCache(-1);\r\n }\r\n // set online agent always\r\n const roundedMessagePopup = me.DOM.getElementsByClassName('apexchat_prechat_message_bubble');\r\n // .$(me.DOM.getElementById('apexchat_prechat_message_popup_container'))\r\n // .find('.apexchat_prechat_message_bubble');\r\n if (roundedMessagePopup.length > 0) {\r\n me.templateRenderer.renderer.showOnlineAgentTag();\r\n }\r\n // CHAT-6794 [PreChat] - Mapped Question on Page Refresh not appearing\r\n // summary: if mapped question has appeared, in case of refresh it should appear again instead of parent question\r\n const hasMappedQuestionAppeared = storageAPIExists(\r\n TempCache.APEXCHAT_PRECHAT_MAPPED_QUESTION_COOKIE\r\n );\r\n let lastMappedQuestion;\r\n if (hasMappedQuestionAppeared) {\r\n lastMappedQuestion = JSON.parse(\r\n getStorageAPIValue(TempCache.APEXCHAT_PRECHAT_MAPPED_QUESTION_COOKIE)\r\n );\r\n }\r\n await me.queueNextMessage(\r\n lastPreChatPopoutMessage.index,\r\n lastPreChatPopoutMessage.duration,\r\n lastMappedQuestion\r\n );\r\n }\r\n }\r\n\r\n async queueNextMessage(index, duration, lastMappedQuestion) {\r\n // show next message if available\r\n const me = this;\r\n if (me.options.preChat.preChatMessages.length == index) {\r\n return;\r\n }\r\n if (index < 0) {\r\n // Do not show the next message if somebody close the message and then refresh the page\r\n // In message close event we are setting the index of the last message = -1\r\n return;\r\n }\r\n me.postMessage({ event: 'new-pre-chat-message-arriving' });\r\n if (me.options.preChat.preChatMessages.length > index) {\r\n // CHAT-6794 [PreChat] - Mapped Question on Page Refresh not appearing\r\n // summary: Once a mapped question appears and the visitor decides to refresh the page, rather than the parent question appearing, the visitor will now see the mapped question.\r\n // lastMappedQuestion: Its only for Predefined messages.\r\n // it will be always 'NULL' in case of running Chat session,\r\n // It could be 'Object' only if the last prechat msg was not Parent Question.\r\n //me.messageTimeout = window.setTimeout(() => {\r\n await me.displayMessagePopup(index, true, lastMappedQuestion, duration);\r\n // }, duration);\r\n }\r\n // summary: isPlainText is the plain text when user adds plain text from edit profile not agent scripted plain text.\r\n const isPlainText =\r\n me.options.preChat.preChatMessages[index - 1] &&\r\n me.options.preChat.preChatMessages[index - 1].messageType ==\r\n PreChatMessageType.plain_Text;\r\n // isAgentScript means its agent script.\r\n const isAgentScript =\r\n me.options.preChat.preChatMessages[index - 1] &&\r\n me.options.preChat.preChatMessages[index - 1].messageType ==\r\n PreChatMessageType.agent_Script;\r\n // isQuestionType and None means Plain Text.\r\n const isQTNone =\r\n me.options.preChat.preChatMessages[index - 1] &&\r\n me.options.preChat.preChatMessages[index - 1].questionType ==\r\n ScriptsQuestionType.None;\r\n // JIRA_4241 - Checking that Prechat message is Last, Plain Text and prevent multi-rendering.\r\n if (\r\n me.options.preChat.preChatMessages.length == index && // To Make sure Last PreChat Msg\r\n (isPlainText || (isAgentScript && isQTNone)) &&\r\n !me.options.preChat.preChatMessages[index - 1].isLastPreChatMessage\r\n ) {\r\n // prevent multi-rendering\r\n me.options.preChat.preChatMessages[index - 1].isLastPreChatMessage = true;\r\n //me.messageTimeout = window.setTimeout(() => {\r\n await me.displayMessagePopup(index - 1, true);\r\n me.showMessagePopupAndPublishAutoResize()\r\n //}, duration);\r\n return;\r\n }\r\n me.setLastMessageCache(index, duration);\r\n }\r\n\r\n bindPopupForStartingChat(options) {\r\n const me = this;\r\n const { popupSelector } = options;\r\n const { message } = options;\r\n var popupSelectorElement = popupSelector;\r\n if (popupSelectorElement) {\r\n popupSelectorElement.setAttribute('data-should-start-chat', options.shouldStartChat);\r\n //me.$(popupSelector, me.DOM).data('shouldStartChat', options.shouldStartChat);\r\n popupSelectorElement.addEventListener('click', function (e) {\r\n // if (e.target.matches('.startchat')) {\r\n me.startChatFromPreChat(e, {\r\n srcElement: this,\r\n message\r\n });\r\n //}\r\n });\r\n me.handleADA(\r\n popupSelectorElement,\r\n me.startChatFromPreChat.bind2(this, {\r\n srcElement: popupSelectorElement,\r\n message\r\n })\r\n );\r\n }\r\n\r\n }\r\n\r\n // As we have Rounded Prechat Theme, so the old prechat theme we are calling Classical PreChat\r\n showMessagePopup(isPreChatForClassicalTheme, message) {\r\n if (!message?.message) return\r\n // Default OR Classical\r\n const me = this;\r\n // we need different popupSelector for both Classical and Rounded Theme\r\n const popupSelector = isPreChatForClassicalTheme\r\n ? '#apexchat_prechat_message_popup'\r\n : '.apexchat_prechat_message_bubble';\r\n // if question type is none then it return true and store in data attribute\r\n const isQTText =\r\n (message && message.questionType === ScriptsQuestionType.None) ||\r\n message.questionType === ScriptsQuestionType.Time ||\r\n message.questionType === ScriptsQuestionType.TimeCalendar ||\r\n message.questionType === ScriptsQuestionType.CalendarDate;\r\n const popupMessageElement = me.DOM.querySelector(popupSelector);\r\n popupMessageElement.setAttribute('data-should-start-chat', isQTText);\r\n me.setAllowBackgroundClick(message.questionType)\r\n if (me.allowBackgroundClick) {\r\n me.bindPopupForStartingChat({\r\n shouldStartChat: isQTText,\r\n popupSelector: popupMessageElement,\r\n message\r\n });\r\n } else {\r\n // var clonedElement = popupMessageElement.cloneNode(true);\r\n // popupMessageElement.parentNode.replaceChild(clonedElement, popupMessageElement);\r\n //me.$(popupSelector, me.DOM).unbind('click');\r\n }\r\n // me.DOM.getElementById('apexchat_prechat_typing_div').style.display = 'none';\r\n me.DOM.getElementById('apexchat_prechat_main_container').style.width = `${me.iconWidth + 265\r\n }px`;\r\n // update UI object\r\n const el = me.DOM.getElementById('apexchat_prechat_message_popup');\r\n const position = me.options.preChat.preChatPosition;\r\n el.style.display = 'inline-block';\r\n me.templateRenderer.animateMessagePopup(el, position);\r\n // el.style.width = messagePopupWidth;\r\n me.DOM.getElementById('apexchat_prechat_message_div').style.display = 'block';\r\n // me.DOM.getElementById('apexchat_prechat_typing_div').style.display = 'none';\r\n // resize iframe\r\n me.postMessage({\r\n event: 'prechat-size',\r\n data: {\r\n width: me.iconWidth + me.templateRenderer.widgetWidth,\r\n height: me.iconHeight > el.offsetHeight ? me.iconHeight + 10 : el.offsetHeight + 20,\r\n addValue: me.templateRenderer.heightPosition\r\n }\r\n });\r\n me.templateRenderer.hideTypingIndicator();\r\n\r\n }\r\n\r\n async renderScriptMessage(message) {\r\n const me = this;\r\n logIt('renderScriptMessage' + message.text)\r\n me.options.preChat.language = me.options.language || 'eng';\r\n const messageLog = {};\r\n message.text = removeTextFollowedByColon(message.text);\r\n me.agentScriptAnswerId = message.id;\r\n // create model for message logging\r\n messageLog.visitorId =\r\n me.options.visitorId || getCookieValue('livechat_visitor_id') || 0;\r\n messageLog.text = message.text;\r\n messageLog.scriptAnswerId = message.id;\r\n messageLog.questionType = message.questionType;\r\n messageLog.isNextQuestionMapped = message.isNextQuestionMapped;\r\n messageLog.options = message.options;\r\n messageLog.agentScriptDocuments = message.isDocument && message.agentScriptDocuments ? JSON.stringify(message.agentScriptDocuments) : '';\r\n messageLog.isDocument = message.isDocument;\r\n messageLog.visitorResponseStatus = ScriptVisitorResponseStatus.UnAnswered;\r\n messageLog.visitorResponseType = message.visitorResponseType;\r\n messageLog.questionTypeDisplayListForVisitor = message.displayListForVisitor;\r\n messageLog.isSplitMessage = message.isSplitMessage;\r\n messageLog.sourceType = SourceType.PreChat;\r\n messageLog.isSmsTransfer = message.isSmsTransfer;\r\n await me.logMessageOnServer(messageLog);\r\n if (message.questionType == ScriptsQuestionType.FullText) {\r\n message.userId = message.userId || 0;\r\n message.participantDisplayName = message.participantDisplayName || '';\r\n message.createdOn = new Date();\r\n await me.QTRendererExt.questionTypeRenderer.renderMessage(\r\n message,\r\n me.QTRendererExt.afterRenderMessage.bind2(me.QTRendererExt)\r\n );\r\n const questionWrapper = me.DOM.querySelector('.livechat_prechat_full_text_greet');\r\n appendGreeting(questionWrapper, me.options);\r\n } else if (message.questionType == ScriptsQuestionType.None && !message.agentScriptDocuments && message.text) {\r\n // me.DOM.getElementById('apexchat_prechat_message').innerHTML = message.text;\r\n me.DOM.getElementById('apexchat_prechat_message').innerHTML = preChatPlainTextTemplate({\r\n text: message.text,\r\n hidden: false\r\n });\r\n const questionWrapper = me.DOM.querySelector('.livechat_prechat_plain_text_greet');\r\n appendGreeting(questionWrapper, me.options);\r\n me.DOM.getElementById('apexchat_prechat_message_popup_container').classList.add('livechat_prechat_message_show');\r\n\r\n } else {\r\n // render agent script message\r\n me.DOM.getElementById('apexchat_prechat_message').innerHTML = '';\r\n message.userId = message.userId || 0;\r\n message.participantDisplayName = message.participantDisplayName || '';\r\n message.createdOn = new Date();\r\n message.questionTypeDisplayListForVisitor = message.displayListForVisitor;\r\n await me.QTRendererExt.questionTypeRenderer.renderMessage(message);\r\n me.questionTypeUIConfiguration();\r\n }\r\n // here, we make sure we grab the messages which have been shown\r\n // while prechat is displayed/not hidden\r\n const m = message;\r\n const currentPreChatState = me.getCurrentState();\r\n m.isShown = currentPreChatState === WidgetStates.ShownMaximized;\r\n ApexChat.prechatMessagesDisplayed = ApexChat.prechatMessagesDisplayed || [];\r\n if (m.isShown) {\r\n ApexChat.prechatMessagesDisplayed.push(m);\r\n }\r\n }\r\n\r\n setAllowBackgroundClick(questionType) {\r\n const me = this;\r\n if (\r\n questionType >= 0 &&\r\n questionType != ScriptsQuestionType.None &&\r\n questionType != ScriptsQuestionType.Text &&\r\n questionType != ScriptsQuestionType.Time &&\r\n questionType != ScriptsQuestionType.TimeCalendar &&\r\n questionType != ScriptsQuestionType.CalendarDate\r\n ) {\r\n me.allowBackgroundClick = false;\r\n }\r\n }\r\n\r\n questionTypeUIConfiguration(questionType) {\r\n const me = this;\r\n me.setAllowBackgroundClick(questionType);\r\n //TODO\r\n // ADACompliant.push(me.$('.apexchat_ada_compliance', me.DOM)).apply();\r\n me.DOM.querySelector('.apexchat_question_type_close_button')?.style.setProperty('display', 'none', 'important');\r\n me.DOM.querySelector('#apexchat_click_instruction')?.style.setProperty('display', 'none', 'important');\r\n me.DOM.querySelector('#apexchat_participant_display_name')?.style.setProperty('display', 'none', 'important');\r\n me.DOM.querySelector('#apexchat_participant_display_col')?.style.setProperty('display', 'none', 'important');\r\n const questionWrapper = me.DOM.querySelector('.livechat_question_text');\r\n appendGreeting(questionWrapper, me.options);\r\n }\r\n\r\n\r\n async logMessageOnServer(log) {\r\n const me = this;\r\n if (me.options.videoGreetEnabled) {\r\n return;\r\n }\r\n if (localstorageAPIExists('livechat_prechat_msg_array')) {\r\n me.messageArray = JSON.parse(localStorageAPIGet('livechat_prechat_msg_array'));\r\n }\r\n if (log.isSplitMessage) {\r\n // if message is splitted message then we dont need to log on server because we already did it\r\n return;\r\n }\r\n const preChatMsgObj = me.getDuplicatedObjectFromArray(me.messageArray, log.text, 'text');\r\n if (preChatMsgObj) {\r\n me.preChatMessageId = preChatMsgObj.id;\r\n return; // duplicated message.\r\n }\r\n const url = `${GlobalVariables.ApexChatBaseUrl}api/prechat/messages`;\r\n // encode just in case there are any HTML tags to avoid request failure due to CSRF\r\n const encodedLog = encodeHTML(JSON.stringify(log));\r\n const response = await fetch(url, {\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json; charset=utf-8'\r\n },\r\n method: \"POST\",\r\n body: encodedLog\r\n })\r\n const res = await response.json();\r\n me.preChatMessageId = res.id;\r\n me.messageArray.push({\r\n id: me.preChatMessageId,\r\n text: log.text\r\n });\r\n ApexChat.localStorageAPI.Store(\r\n 'livechat_prechat_msg_array',\r\n JSON.stringify(me.messageArray)\r\n );\r\n me.setPreChatMessageIdsCache(me.preChatMessageId);\r\n }\r\n\r\n getDuplicatedObjectFromArray(array, msg, property) {\r\n let i = array.length;\r\n while (i--) {\r\n if (array[i][property] === msg) {\r\n return array[i];\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n setLastMessageCache(index, duration) {\r\n const me = this;\r\n const message = { index, duration };\r\n Cookies.set(me.lastMessageStoreName, JSON.stringify(message));\r\n }\r\n\r\n getLastMessageCache() {\r\n const me = this;\r\n const message = Cookies.get(me.lastMessageStoreName);\r\n return message ? JSON.parse(message) : null;\r\n }\r\n\r\n /**\r\n * Set the message counter\r\n * @param {value} counter value\r\n */\r\n setMessageCounterCache(value) {\r\n const me = this;\r\n const oldValue = me.getMessageCounterCache();\r\n let newValue = oldValue + value;\r\n if (newValue < 0) {\r\n newValue = 0;\r\n }\r\n Cookies.set(me.messageCounterStoreName, newValue);\r\n }\r\n\r\n getMessageCounterCache() {\r\n const me = this;\r\n const counter = Cookies.get(me.messageCounterStoreName) || 0;\r\n return parseInt(counter);\r\n }\r\n\r\n resetMessageCounterCache() {\r\n const me = this;\r\n Cookies.del(me.messageCounterStoreName);\r\n }\r\n\r\n setPreChatMessageCache(message) {\r\n // store pre chat message data in local storage\r\n const storeName = 'livechat_prechat_messages';\r\n const storeData = Cookies.get(storeName);\r\n let storeJson = JSON.parse(storeData);\r\n if (!storeJson) {\r\n storeJson = [];\r\n }\r\n storeJson.push(message);\r\n Cookies.set(storeName, JSON.stringify(storeJson));\r\n }\r\n\r\n setPreChatMessageIdsCache(id) {\r\n // store pre chat message data in local storage\r\n const storeData = getCookieValue(TempCache.APEXCHAT_PRECHAT_MESSAGE_IDS_COOKIE);\r\n if (storeData) {\r\n var storeJson = JSON.parse(storeData);\r\n }\r\n if (!storeJson) {\r\n storeJson = [];\r\n }\r\n storeJson.push(id);\r\n Cookies.set(\r\n TempCache.APEXCHAT_PRECHAT_MESSAGE_IDS_COOKIE,\r\n stringify(storeJson)\r\n );\r\n }\r\n\r\n displayMessageCounter() {\r\n const me = this;\r\n const messageCounter = me.getMessageCounterCache();\r\n me.templateRenderer.displayMessageCounter(messageCounter);\r\n }\r\n\r\n hideMessageCounter() {\r\n const me = this;\r\n me.templateRenderer.hideMessageCounter();\r\n me.templateRenderer.hideTalkBubbleIcon();\r\n }\r\n\r\n show() {\r\n const me = this;\r\n // check video greet maximize\r\n // Do not show prechat if exitpopup is shown\r\n if (me.state.getStateValue(WidgetTypes.ExitPopup) !== WidgetStates.ShownMaximized) {\r\n super.show();\r\n this.maximize();\r\n }\r\n me.isVideoGreetMax = false;\r\n // we dont need anymore to show last message from history because now we use delay on MessageArrived\r\n // this.displayLastMessageFromHistory(); //when preChat widget appear after dom minimize,show last message on popup from cookie\r\n }\r\n\r\n // CHAT-7300 - Message not appearing when minimizing the preChat\r\n // To Display Last Message from chat history\r\n // async displayLastMessageFromHistory() {\r\n // const me = this;\r\n // const lastMessage = ApexChat.TryParse(Cookies.get('livechat_chat_lastmessage')); // get last message of chat from cookies\r\n // if (\r\n // lastMessage &&\r\n // lastMessage.questionType !== ScriptsQuestionType.None &&\r\n // (!me.lastMessageDisplayed ||\r\n // (me.lastMessageDisplayed && me.lastMessageDisplayed.id != lastMessage.id))\r\n // ) {\r\n // // check if message is question type and message is not appear before so show it\r\n // if (lastMessage.text.indexOf('||') > -1) {\r\n // // we are not handling pipe message here, as this is perfectly render by onMessageArrived\r\n // return;\r\n // }\r\n // if (lastMessage.options) {\r\n // lastMessage.options = addOptionProperty(lastMessage.options);\r\n // }\r\n // me.lastMessageDisplayed = lastMessage;\r\n // me.templateRenderer.showTypingIndicator();\r\n // //window.setTimeout(() => {\r\n // await me.displayMessagePopup(0, false, lastMessage);\r\n // //}, lastMessage.questionTypeDelaySeconds * 1000);\r\n // }\r\n // }\r\n\r\n hide() {\r\n super.hide();\r\n // resize iframe\r\n this.postMessage(\r\n {\r\n event: WidgetTypes.PreChat + WidgetStates.Hidden,\r\n data: {}\r\n },\r\n '*'\r\n );\r\n window.clearTimeout(this.messageTimeout);\r\n this.pipeMessageHandler.reset(); // stop all processing of pipe messages if its running\r\n // reset message counter\r\n this.resetMessageCounterCache();\r\n this.templateRenderer.hideMessagePopup();\r\n }\r\n\r\n maximize() {\r\n super.maximize();\r\n }\r\n\r\n onMessageArrived(m, initialLoad, index) {\r\n\r\n const me = this;\r\n m.isFromHistory = initialLoad;\r\n // CHAT-7226 Next Mapped Question Logic Change\r\n // as option property removed from backend now we explicity add option property to our msg.options object,\r\n // because all QT UI depend upon that property.\r\n if (m.questionType != ScriptsQuestionType.None && m.options) {\r\n m.options = addOptionProperty(m.options);\r\n }\r\n // summary: If msg is from History & the previous message was CLOSED by user no need to show it again on Page Refresh.\r\n const isPreviousMessageClosed =\r\n m.isFromHistory && !me.getMessageCounterCache() && me.isPageRefreshed();\r\n // System messages always less than 0 & when visitor sends message visitor userId always 0\r\n // For preChat messages we dont need to return,in CHAT-7300 all preChat message and all mapped questions associated with it has preChat userId\r\n // CHAT-7325 Poke Message should not return\r\n // Stop showing \"The visitor has returned to the chat\" message\r\n if (\r\n (m.userId <= 0 &&\r\n !me.isPreChatMessage &&\r\n m.userId !== ParticipantIds.prechat &&\r\n m.userId !== ParticipantIds.pokeMessage) ||\r\n isPreviousMessageClosed ||\r\n m.shouldShowChatEndedMessage ||\r\n m.userId === ParticipantIds.bot || // \"All visitors have left the chat\" message\r\n m.userId === ParticipantIds.nonVisitorSystem // shelve chat message\r\n ) {\r\n // Avoid showing system/visitor messages\r\n return false;\r\n }\r\n // 0.001 second PIPE_QUESTION_TYPE_DELAY_SECOND is no more needed..commenting it for now.\r\n // if (m.questionTypeDelay === ApexChat.PIPE_QUESTION_TYPE_DELAY_SECOND) { //for pipe message we have mentioned 0.001 second but we need that only for DOM for prechat we define 3 seconds\r\n // m.questionTypeDelay = me.options.questionTypeDelay * 1000; // set delay as per profile settings\r\n // }\r\n if (\r\n me.state.getStateValue(WidgetTypes.DOM) === WidgetStates.ShownMinimized ||\r\n me.state.getStateValue(WidgetTypes.ExitPopup) === WidgetStates.Closed\r\n ) {\r\n // todo close/hide event\r\n if (m.isChatEnded) {\r\n me.endChat(m);\r\n } else {\r\n if (m.questionType === ScriptsQuestionType.VideoGreet) {\r\n return;\r\n }\r\n m.isFromPreChat = true;\r\n me.displayMessagePopup(0, false, m);\r\n // do not show the prechat message in windowed mode\r\n if (!me.isWindowedStarted() && (m?.message || m?.text)) {\r\n me.showMessagePopupAndPublishAutoResize();\r\n }\r\n // TODO:The below code is not needed for now commenting let QA test then I'll remove this. (Mahad)\r\n // m.isLastSplitMessage: No typing indicator and delay required.\r\n // if (m.isLastSplitMessage || !me.options.questionTypeDelay) {\r\n // me.displayMessagePopup(0, false, m);\r\n // } else {\r\n // me.templateRenderer.showTypingIndicator();\r\n // window.setTimeout(function () {\r\n // me.displayMessagePopup(0, false, m);\r\n // }, me.options.questionTypeDelay * 1000);\r\n // }\r\n }\r\n }\r\n }\r\n\r\n onTypingArrived(args, self) {\r\n const me = this;\r\n // if (me.state.getStateValue(WidgetTypes.DOM) == WidgetStates.ShownMinimized) { // todo close/hide event\r\n if (args.indicator) {\r\n // me.DOM.getElementById('apexchat_prechat_typing_div').style.display = 'block';\r\n me.templateRenderer.showTypingIndicator();\r\n // me.templateRenderer.displayMessageCounter();\r\n } else {\r\n // me.DOM.getElementById('apexchat_prechat_typing_div').style.display = 'none';\r\n me.templateRenderer.hideTypingIndicator();\r\n }\r\n // }\r\n }\r\n}\r\n"],"names":["module","exports","obj","__t","__p","hidden","MessageHandler","BaseClass","constructor","options","super","this","Object","assign","objectType","WidgetTypes","ADAHandler","context","prechatModel","messages","push","model","msg","MessageView","wrap","targetElementSelector","renderOninit","template","index","length","status","MessageStatus","Unread","visibility","MessageVisibility","Visible","last","getLastMessage","isFirstMessage","isLastMessage","view","removeClass","duration","preChatMessages","filter","prechatMsgArray","id","animationConfig","preChatMessageAnimation","PreChatMessageAnimation","Stacking","StartFaddingOutAfter","HideMessageAfter","IFrameResizeAfterFaddingOut","closeButtonSupported","MobileStacking","closeButtonHeight","heightCalculation","me","currentMsgView","lastMsg","fixFirstElement","animate","PreChatMessageAnimations","First","isFromHistory","isPageRefreshed","fixUpComingElement","Previous","FadeOut","Upcoming","self","elementObj","setTimeout","ele","getElementById","identifier","postMessage","event","data","currentMsgHeight","getHeightOfElement","isSingleMsg","calcCurrentMsgHeight","TempCache","PRECHAT_Rounded_Message_Popup_Current_Height","css","style","display","$","hide","elementlast","elementmsg","prevMsgHeight","dontAnimateClosebutton","calcLastMsgHeight","PRECHAT_Rounded_Message_Popup_Last_Height","top","noLastMessageOnRefresh","iFrameResizeOnFadeOut","fixLastMsgOnPageRefresh","calcCurrentHeight","getMessageCount","PreChatMessageHandler","storageAPI","WebStorage","type","ApexChat","sessionAPI","loadAll","getTemplate","messageType","questionType","ScriptsQuestionType","None","messageTemplate","userId","participantDisplayName","createdOn","Date","saveAll","setMessageTemplate","i","getFirstMessage","Store","JSON","stringify","cache","Get","parse","isChatActive","prechatTemplate","arguments","undefined","skinThemeStyle","ThemeStyle","Rounded_Dynamic_Plus","prechatRDPlusThemeTemplate","prechatRDThemeTemplate","appendGreeting","wrapper","prechatGreetingFlashed","existingGreeting","querySelector","preChatHeaderTemplate","trim","remove","preChatGreeting","preChatGreetingTemplate","text","outerHTML","insertAdjacentHTML","PreChatInvitation","BaseWidget","widget","PreChat","styleName","templateRenderer","preChat","console","log","chatbotGreetingMessages","script","structuredClone","agentScript","pipeMessageHandler","PipedMessageHandler","DEFAULT_PRECHAT_CONFIG","general","outerObject","hideOuterObject","showImage","backgroundImage","background1Color","background2Color","borderColor","borderWidth","borderRadius","padding","innerObject","hideInnerObject","defaultImage","messagePopup","font","italic","bold","underline","family","size","color","backgroundColor","closeIcon","closeIconSize","width","height","shadowDepth","messageCounter","counterTop","counterRight","renderer","heightPosition","notificationContainer","typingIndicator","showAgentName","animateMessagePopup","el","position","addClass","showTypingIndicator","containerElement","DOM","showElement","hideTypingIndicator","hideElement","displayMessageCounter","getMessageCounterCache","innerHTML","hideMessageCounter","hideTalkBubbleIcon","hideMessagePopup","removeMultipleCSSClasses","roundedMessagePopup","getElementsByClassName","widgetWidth","renderOnLeftPosition","renderOnRightPosition","showOnlineAgentTag","agentName","preChatAgentStatusText","popupUI","render","message","classList","add","clear","questionTypeUIConfiguration","setAllowBackgroundClick","attr","setAttribute","preChatThemeSetting","GlobalVariables","preChatRoundedThemeName","isPreChatRoundedTheme","agentNameImageId","_me$DOM$getElementByI","showTypingIndicatorInnerGlider","elem","hideTypingIndicatorInnerGlider","_container","preChatMsgTemplate","Default","preChatPlainTextTemplate","participants","localStorageAPI","participantInfo","_me$DOM$querySelector2","_me$DOM$querySelector","_me$DOM$querySelector3","ParticipantIds","visitor","handlerImageUrl","AgentImageHandler","displayName","cloneNode","messenger","decodeHTML","cleanInvalidHtml","removeTextFollowedByColon","dontAppendExisitngContent","questionWrapper","opacity","_renderDefault","_renderStacking","setProperty","chatMode","ChatMode","Windowed","mode","lastMessageStoreName","messageCounterStoreName","subscribe","VideoGreetInvitation","WidgetStates","ShownMaximized","args","videoGreetEnabled","lastVGState","state","getStateValue","isVideoGreet","Hidden","isVideoGreetMax","ready","imageUrl","videoGreet","animatedImageUrl","preChatLoadTimeout","messageArray","create","ShownMinimized","ChatRoom","ChatEvents","OnChatJoined","image","importPrechatTemplateFactory","WidgetView","dom","templates","key","tpl","title","afterRender","messagesContainer","handleQuestionTypeResponse","async","handlePrechatQuestionType","default","res","QTRendererExt","QuestionTypeRendererExtentions","initComponent","isUpdateSupported","responseCallback","enableFullTextLogic","widgetType","countryCode","isPreChatMaximized","chatId","getChatId","then","LiveChatRoom","prechatRoom","subscribeToChatChannel","onParticipantsChanged","skin","handleADA","preChatCloseMessagePopup","e","rdThemeSettings","TryParse","skinJson","container","brandingInfo","branding","brandingIsEnabled","Branding","global","init","BrandingWidget","RD_PreChat","brandConfig","getBrandedConfig","setPrechatStyles","addStyleTextInIframe","invitationWidgetStyleCustom","UIConfiguration","getStyle","indexOf","initialState","postPreChatMessages","postedPreChatMessagesArray","chatLogId","Text","MessageSent","domRendered","PubSub","allSubscriptions","DOMUIController","startChatFromPreChat","setWebSyncClient","publishQuestionTypeResponse","visitorSelectedOptions","answers","questionTypeRenderer","questionTypeDisplayListForVisitor","visitorScriptAnswer","visitorResponseStatus","isSkipped","ScriptVisitorResponseStatus","Skipped","Answered","setVisitorSelection","sendMessage","chatMsg","msgText","questionTypeChatLogIdToBeUpdated","isChatAlreadyStartedFromPreChat","lastDOMState","currentPreChatState","getCurrentState","isChatInProgress","config","srcElement","getAttribute","changeState","toState","Clicked","value","initiatedBy","isWindowedStarted","chatInitiatedBy","startWindowedChat","shouldContinueMapping","FullTextVisitorResponse","closePreChatUI","preChatElement","isResetIframe","hideCloseButton","preChatPosition","iconWidth","offsetWidth","iconHeight","offsetHeight","PreChatIconDimensions","Width","Height","applyCssClass","onCreateSizing","addValue","disablePrechatPopup","queueAutoMessaging","popupSelector","isMobile","addEventListener","target","closest","eventSubscription","startChatDiv","containerId","setClickCallToAction","domState","videGreetState","Closed","resetMessageCounterCache","show","hideIt","isChatStartedFromPreChat","test","navigator","userAgent","reset","window","clearTimeout","messageTimeout","showIt","OnMessageArrived","onMessageArrived","m","initialLoad","RunAfter","OnTypingArrived","onTypingArrived","ExitPopup","DropDown","Bar","Tab","Remove","APEXCHAT_PRECHAT_MAPPED_QUESTION_COOKIE","OnParticipantsChanged","OnSendMessageFailure","PreChat_Message_Sent","prevUrl","Position","Left","Right","showMessagePopupAndPublishAutoResize","transition","timeout","RunAsSoonAsWithDelay","scrollHeight","error","autoMessageRendering","PreChatMessageType","plain_Text","isFirstPreChatMessage","agent_Script","messagePopupUI","renderScriptMessage","messageLog","visitorId","getCookieValue","sourceType","SourceType","logMessageOnServer","isPipedMessage","queueNextMessage","cb","displayMessagePopup","isPreChatMessage","logIt","isMessage","preChatMsg","addOptionProperty","isLastPreChatMessage","questionTypeId","agentScriptAnswerId","setMessageCounterCache","allowBackgroundClick","prechatStartedTimeout","StoreTemp","reShowIntervalMinutes","parseTemplate","msgObject","isValidPipedMessage","isSplitMessage","scriptAnswerId","isNextQuestionMapped","visitorResponseType","UnAnswered","displayListForVisitor","agentScriptDocuments","isDocument","isSmsTransfer","startPolling","messageDisplayDuration","indicator","startPollingCallback","shouldStartChat","bindPopupForStartingChat","lastPollingCallback","AppointmentScheduler","renderMessage","afterRenderMessage","bind2","showMessagePopup","endChat","lastMappedQuestion","lastPreChatPopoutMessage","getLastMessageCache","preChatFirstMessageTimeout","storageAPIExists","getStorageAPIValue","isPlainText","isAgentScript","isQTNone","setLastMessageCache","popupSelectorElement","isPreChatForClassicalTheme","isQTText","Time","TimeCalendar","CalendarDate","popupMessageElement","language","FullText","isShown","prechatMessagesDisplayed","localstorageAPIExists","localStorageAPIGet","preChatMsgObj","getDuplicatedObjectFromArray","preChatMessageId","url","ApexChatBaseUrl","encodedLog","encodeHTML","response","fetch","headers","method","body","json","setPreChatMessageIdsCache","array","property","Cookies","set","get","newValue","counter","parseInt","del","setPreChatMessageCache","storeName","storeData","storeJson","APEXCHAT_PRECHAT_MESSAGE_IDS_COOKIE","maximize","isPreviousMessageClosed","prechat","pokeMessage","shouldShowChatEndedMessage","bot","nonVisitorSystem","isChatEnded","VideoGreet","isFromPreChat"],"sourceRoot":""}