DigitalConsumer.FixMyGlass/src/digital-components/sierra-webchat/sierra-webchat.vue

140 lines
5.8 KiB
Vue

<template>
<div ref="sierraContainer"></div>
</template>
<script>
import analyticsMixin from "@/mixins/analytics-mixin";
export default {
name: "sierraWebchat",
mixins: [analyticsMixin],
methods: {
openSierraChatModal() {
const sierra = window.sierraChat || window.sierra || window.SierraChat;
if (sierra && typeof sierra.openChatModal === "function") {
sierra.openChatModal();
} else {
const launchLink = document.createElement("a");
launchLink.setAttribute("data-sierra-chat", "modal");
launchLink.style.display = "none";
document.body.appendChild(launchLink);
launchLink.click();
document.body.removeChild(launchLink);
}
this.pushEventForChatsToGA("support_chat", "chat_opened", "Scarlett", true);
},
createSierraConfig() {
return {
variables: { application: "funnel" },
display: "corner",
onLoad: () => this.openSierraChatModal(),
onOpen: () => {},
onClose: () => window.dispatchEvent(new CustomEvent("sierra-chat-closed")),
onTransfer: (transfer) =>
window.dispatchEvent(
new CustomEvent("sierra-chat-transfer", { detail: transfer })
),
};
},
launchSierraChat() {
window.sierraConfig = this.createSierraConfig();
// Preload CSS if not already present
if (!document.getElementById("sierra-chat-embed-css")) {
const link = document.createElement("link");
link.rel = "preload";
link.as = "style";
link.href =
"https://sierra.chat/agent/OxY5TbsBlJZsHxIBlJZsmCiQdcXfa2rePO38ZwOlx40/embed-css";
link.id = "sierra-chat-embed-css";
document.head.appendChild(link);
}
// Load script if not loaded, otherwise open modal directly
if (!document.getElementById("sierra-chat-embed")) {
const script = document.createElement("script");
script.type = "module";
script.id = "sierra-chat-embed";
script.src =
"https://sierra.chat/agent/OxY5TbsBlJZsHxIBlJZsmCiQdcXfa2rePO38ZwOlx40/embed";
document.body.appendChild(script);
} else {
this.openSierraChatModal();
}
},
triggerSierraChat() {
this.launchSierraChat();
},
closeSierraChat() {
const sierra = window.sierraChat || window.sierra || window.SierraChat;
if (sierra && typeof sierra.closeChatModal === "function") {
sierra.closeChatModal();
}
},
},
mounted() {
window.addEventListener("launch-sierra-webchat", this.triggerSierraChat);
// Listen for transfer event to close Sierra chat and open Salesforce chat
this._handleSierraTransfer = (event) => {
const sierra = window.sierraChat || window.sierra || window.SierraChat;
if (sierra && typeof sierra.closeChatModal === "function") {
sierra.closeChatModal();
}
// Pass data to Salesforce chat if available
const transfer = event.detail;
if (
window.embedded_svc &&
typeof window.embedded_svc.bootstrapEmbeddedService === "function"
) {
if (
transfer &&
transfer.data &&
transfer.data.first_name &&
transfer.data.last_name &&
transfer.data.email
) {
window.embedded_svc.settings.prepopulatedPrechatFields = {
FirstName: transfer.data.first_name,
LastName: transfer.data.last_name,
Email: transfer.data.email,
Subject: transfer.data.chat_summary,
};
window.embedded_svc.settings.extraPrechatFormDetails = [
{
label: "Scarlett AI Summary",
value: transfer.data.chat_summary,
transcriptFields: ["Scarlett_AI_Summary__c"],
displayToAgent: true,
},
];
if (
window.embedded_svc.liveAgentAPI &&
typeof window.embedded_svc.liveAgentAPI.startChat === "function"
) {
window.embedded_svc.liveAgentAPI.startChat();
return;
}
}
window.embedded_svc.bootstrapEmbeddedService();
}
};
window.addEventListener("sierra-chat-transfer", this._handleSierraTransfer);
// Notify funnel-header about Sierra chat open/close state
this._sierraChatContainerObserver = new MutationObserver(() => {
const isOpen = !!document.querySelector("[data-sierra-chat-container]");
window.dispatchEvent(
new CustomEvent("sierra-chat-visibility", { detail: { open: isOpen } })
);
});
this._sierraChatContainerObserver.observe(document.body, {
childList: true,
subtree: true,
});
},
beforeUnmount() {
window.removeEventListener("launch-sierra-webchat", this.triggerSierraChat);
window.removeEventListener("sierra-chat-transfer", this._handleSierraTransfer);
if (this._sierraChatContainerObserver) {
this._sierraChatContainerObserver.disconnect();
}
},
};
</script>