Simplify sierra's interaction with button visibility

The webchathelper already contained the ability to communicate between classes without events
This commit is contained in:
scottkiener-at-safelite 2026-02-05 10:31:12 -05:00
parent f2385c16f7
commit 6893aee155
4 changed files with 11 additions and 51 deletions

View file

@ -41,9 +41,6 @@ export default {
beforeUnmount() { beforeUnmount() {
// Clean up event listeners and observers // Clean up event listeners and observers
window.removeEventListener("sierra-chat-transfer", this._handleSierraToSalesforceTransfer); window.removeEventListener("sierra-chat-transfer", this._handleSierraToSalesforceTransfer);
if (this._salesforceChatOpenObserver) {
this._salesforceChatOpenObserver.disconnect();
}
}, },
methods: { methods: {
initializeSalesforceWebchat() { initializeSalesforceWebchat() {

View file

@ -59,14 +59,6 @@ describe("sierraWebchat.vue", () => {
expect(window.sierraChat.closeChatModal).toHaveBeenCalled(); 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", () => { it("dispatches sierra-chat-transfer on handleSierraOnTransfer", () => {
const eventSpy = jest.spyOn(window, "dispatchEvent"); const eventSpy = jest.spyOn(window, "dispatchEvent");
const transfer = { const transfer = {

View file

@ -12,6 +12,11 @@ import { webchatHelper } from "@/helpers/webchat-helper";
export default { export default {
name: "sierraWebchat", name: "sierraWebchat",
mixins: [analyticsMixin], mixins: [analyticsMixin],
data() {
return {
transferInProgress: false,
};
},
setup() { setup() {
const { webchatGlobalNonpersistedState, launchWebchat } = webchatHelper(); const { webchatGlobalNonpersistedState, launchWebchat } = webchatHelper();
return { webchatGlobalNonpersistedState, launchWebchat }; return { webchatGlobalNonpersistedState, launchWebchat };
@ -40,11 +45,12 @@ export default {
display: "corner", display: "corner",
onLoad: () => this.openSierraChatModal(), onLoad: () => this.openSierraChatModal(),
onOpen: () => {}, onOpen: () => {},
onClose: () => window.dispatchEvent(new CustomEvent("sierra-chat-closed")), onClose: () => {if (!this.transferInProgress) {this.webchatGlobalNonpersistedState.showWebchatButton = true; this.transferInProgress = false;}},
onTransfer: (transfer) => onTransfer: (transfer) => {this.transferInProgress = true;
window.dispatchEvent( window.dispatchEvent(
new CustomEvent("sierra-chat-transfer", { detail: transfer }) new CustomEvent("sierra-chat-transfer", { detail: transfer })
), );
},
}; };
}, },
getSierraContext() { getSierraContext() {
@ -163,25 +169,10 @@ export default {
} }
}; };
window.addEventListener("sierra-chat-transfer", this._handleSierraTransfer); 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() { beforeUnmount() {
window.removeEventListener("launch-sierra-webchat", this.triggerSierraChat); window.removeEventListener("launch-sierra-webchat", this.triggerSierraChat);
window.removeEventListener("sierra-chat-transfer", this._handleSierraTransfer); window.removeEventListener("sierra-chat-transfer", this._handleSierraTransfer);
if (this._sierraChatContainerObserver) {
this._sierraChatContainerObserver.disconnect();
}
}, },
}; };
</script> </script>

View file

@ -79,16 +79,7 @@ export default {
return this.getCmsContent(this.cmsWidgetName, "LogoImage"); return this.getCmsContent(this.cmsWidgetName, "LogoImage");
}, },
shouldShowWebchatButton() { shouldShowWebchatButton() {
// Hide the chat icon if Sierra chat is open return this.webchatGlobalNonpersistedState.showWebchatButton;
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
);
}, },
}, },
methods: { methods: {
@ -116,10 +107,6 @@ export default {
webchatClicked(event) { webchatClicked(event) {
event.preventDefault(); event.preventDefault();
this.launchWebchat(); this.launchWebchat();
// Only set sierraChatOpen if Sierra experiment is active
if (this.webchatGlobalNonpersistedState.shouldLaunchSierra) {
this.sierraChatOpen = true;
}
}, },
syncSierraExperimentFlag() { syncSierraExperimentFlag() {
const experiments = store.getters.applicationUser.experiments; const experiments = store.getters.applicationUser.experiments;
@ -159,11 +146,6 @@ export default {
unknownAlertEvent.displayAlert = true; unknownAlertEvent.displayAlert = true;
this.globalAlertMessages.push(unknownAlertEvent); 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 // Add scroll listener for header shadow effect
this._handleScroll = () => { this._handleScroll = () => {
@ -172,8 +154,6 @@ export default {
window.addEventListener("scroll", this._handleScroll); window.addEventListener("scroll", this._handleScroll);
}, },
beforeUnmount() { beforeUnmount() {
window.removeEventListener("sierra-chat-closed", this._handleSierraChatClosed);
window.removeEventListener("sierra-chat-visibility", this._handleSierraChatVisibility);
window.removeEventListener("sierra-chat-transfer", this._handleSierraToSalesforceTransfer); window.removeEventListener("sierra-chat-transfer", this._handleSierraToSalesforceTransfer);
window.removeEventListener("scroll", this._handleScroll); window.removeEventListener("scroll", this._handleScroll);
}, },