From 7958f99523251803e9609f68895c9c212ed167db Mon Sep 17 00:00:00 2001 From: scottkiener-at-safelite Date: Thu, 5 Feb 2026 10:31:12 -0500 Subject: [PATCH] Simplify sierra's interaction with button visibility The webchathelper already contained the ability to communicate between classes without events --- .../salesforce-webchat/salesforce-webchat.vue | 3 -- .../sierra-webchat/sierra-webchat.spec.js | 8 ----- .../sierra-webchat/sierra-webchat.vue | 29 +++++++------------ .../funnel-header/funnel-header.vue | 22 +------------- 4 files changed, 11 insertions(+), 51 deletions(-) diff --git a/src/digital-components/salesforce-webchat/salesforce-webchat.vue b/src/digital-components/salesforce-webchat/salesforce-webchat.vue index da11702e3..db4f2e3b1 100644 --- a/src/digital-components/salesforce-webchat/salesforce-webchat.vue +++ b/src/digital-components/salesforce-webchat/salesforce-webchat.vue @@ -41,9 +41,6 @@ export default { beforeUnmount() { // Clean up event listeners and observers window.removeEventListener("sierra-chat-transfer", this._handleSierraToSalesforceTransfer); - if (this._salesforceChatOpenObserver) { - this._salesforceChatOpenObserver.disconnect(); - } }, methods: { initializeSalesforceWebchat() { diff --git a/src/digital-components/sierra-webchat/sierra-webchat.spec.js b/src/digital-components/sierra-webchat/sierra-webchat.spec.js index 964a4f52e..2fd3bd3a3 100644 --- a/src/digital-components/sierra-webchat/sierra-webchat.spec.js +++ b/src/digital-components/sierra-webchat/sierra-webchat.spec.js @@ -59,14 +59,6 @@ describe("sierraWebchat.vue", () => { expect(window.sierraChat.closeChatModal).toHaveBeenCalled(); }); - it("dispatches sierra-chat-closed on handleSierraOnClose", () => { - const eventSpy = jest.spyOn(window, "dispatchEvent"); - wrapper.vm.createSierraConfig().onClose(); - expect(eventSpy).toHaveBeenCalledWith( - expect.objectContaining({ type: "sierra-chat-closed" }) - ); - }); - it("dispatches sierra-chat-transfer on handleSierraOnTransfer", () => { const eventSpy = jest.spyOn(window, "dispatchEvent"); const transfer = { diff --git a/src/digital-components/sierra-webchat/sierra-webchat.vue b/src/digital-components/sierra-webchat/sierra-webchat.vue index b01755432..9383efe37 100644 --- a/src/digital-components/sierra-webchat/sierra-webchat.vue +++ b/src/digital-components/sierra-webchat/sierra-webchat.vue @@ -12,6 +12,11 @@ import { webchatHelper } from "@/helpers/webchat-helper"; export default { name: "sierraWebchat", mixins: [analyticsMixin], + data() { + return { + transferInProgress: false, + }; + }, setup() { const { webchatGlobalNonpersistedState, launchWebchat } = webchatHelper(); return { webchatGlobalNonpersistedState, launchWebchat }; @@ -40,11 +45,12 @@ export default { display: "corner", onLoad: () => this.openSierraChatModal(), onOpen: () => {}, - onClose: () => window.dispatchEvent(new CustomEvent("sierra-chat-closed")), - onTransfer: (transfer) => + onClose: () => {if (!this.transferInProgress) {this.webchatGlobalNonpersistedState.showWebchatButton = true; this.transferInProgress = false;}}, + onTransfer: (transfer) => {this.transferInProgress = true; window.dispatchEvent( - new CustomEvent("sierra-chat-transfer", { detail: transfer }) - ), + new CustomEvent("sierra-chat-transfer", { detail: transfer }) + ); + }, }; }, getSierraContext() { @@ -163,25 +169,10 @@ export default { } }; 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(); - } }, }; diff --git a/src/fmg-components/funnel-header/funnel-header.vue b/src/fmg-components/funnel-header/funnel-header.vue index 00df5db87..7bfa3eef6 100644 --- a/src/fmg-components/funnel-header/funnel-header.vue +++ b/src/fmg-components/funnel-header/funnel-header.vue @@ -79,16 +79,7 @@ export default { return this.getCmsContent(this.cmsWidgetName, "LogoImage"); }, shouldShowWebchatButton() { - // Hide the chat icon if Sierra chat is open - if (this.sierraChatOpen) { - return false; - } - // Show if either Sierra is enabled or Salesforce button is available and not hidden by page - return ( - (this.webchatGlobalNonpersistedState.shouldLaunchSierra || - this.webchatGlobalNonpersistedState.showWebchatButton) && - !this.shouldHideWebchatButtonOnPage - ); + return this.webchatGlobalNonpersistedState.showWebchatButton; }, }, methods: { @@ -116,10 +107,6 @@ export default { webchatClicked(event) { event.preventDefault(); this.launchWebchat(); - // Only set sierraChatOpen if Sierra experiment is active - if (this.webchatGlobalNonpersistedState.shouldLaunchSierra) { - this.sierraChatOpen = true; - } }, syncSierraExperimentFlag() { const experiments = store.getters.applicationUser.experiments; @@ -159,11 +146,6 @@ export default { unknownAlertEvent.displayAlert = true; this.globalAlertMessages.push(unknownAlertEvent); } - // Listen for Sierra chat open/close events from sierra-webchat - this._handleSierraChatVisibility = (event) => { - this.sierraChatOpen = !!(event.detail && event.detail.open); - }; - window.addEventListener("sierra-chat-visibility", this._handleSierraChatVisibility); // Add scroll listener for header shadow effect this._handleScroll = () => { @@ -172,8 +154,6 @@ export default { window.addEventListener("scroll", this._handleScroll); }, beforeUnmount() { - window.removeEventListener("sierra-chat-closed", this._handleSierraChatClosed); - window.removeEventListener("sierra-chat-visibility", this._handleSierraChatVisibility); window.removeEventListener("sierra-chat-transfer", this._handleSierraToSalesforceTransfer); window.removeEventListener("scroll", this._handleScroll); },