Merge branch 'feature/Digital/CASH-761' of https://github.com/Safelite/DigitalConsumer.FixMyGlass into feature/Digital/CASH-761
This commit is contained in:
commit
aa78c9cc93
6 changed files with 107 additions and 24 deletions
|
|
@ -34,6 +34,29 @@ export default {
|
||||||
script.src = "https://service.force.com/embeddedservice/5.0/esw.min.js";
|
script.src = "https://service.force.com/embeddedservice/5.0/esw.min.js";
|
||||||
script.onload = this.initializeSalesforceWebchat;
|
script.onload = this.initializeSalesforceWebchat;
|
||||||
document.body.appendChild(script);
|
document.body.appendChild(script);
|
||||||
|
|
||||||
|
// Notify funnel-header about Salesforce chat open/close state
|
||||||
|
this._salesforceChatOpenObserver = new MutationObserver(() => {
|
||||||
|
const isOpen = !!document.querySelector(".embeddedServiceSidebar");
|
||||||
|
window.dispatchEvent(
|
||||||
|
new CustomEvent("salesforce-chat-visibility", { detail: { open: isOpen } })
|
||||||
|
);
|
||||||
|
});
|
||||||
|
this._salesforceChatOpenObserver.observe(document.body, {
|
||||||
|
childList: true,
|
||||||
|
subtree: true,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
beforeUnmount() {
|
||||||
|
// Clean up event listeners and observers
|
||||||
|
window.removeEventListener(
|
||||||
|
"salesforce-chat-visibility",
|
||||||
|
this._handleSalesforceChatVisibility
|
||||||
|
);
|
||||||
|
window.removeEventListener("sierra-chat-transfer", this._handleSierraToSalesforceTransfer);
|
||||||
|
if (this._salesforceChatOpenObserver) {
|
||||||
|
this._salesforceChatOpenObserver.disconnect();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
initializeSalesforceWebchat() {
|
initializeSalesforceWebchat() {
|
||||||
|
|
|
||||||
|
|
@ -93,7 +93,6 @@ export default {
|
||||||
Email: transfer.data.email,
|
Email: transfer.data.email,
|
||||||
Subject: transfer.data.chat_summary, // for now passing in chat_summery in Subject. But this will be changed in future.
|
Subject: transfer.data.chat_summary, // for now passing in chat_summery in Subject. But this will be changed in future.
|
||||||
};
|
};
|
||||||
// Start chat immediately if required fields are present
|
|
||||||
if (
|
if (
|
||||||
window.embedded_svc.liveAgentAPI &&
|
window.embedded_svc.liveAgentAPI &&
|
||||||
typeof window.embedded_svc.liveAgentAPI.startChat === "function"
|
typeof window.embedded_svc.liveAgentAPI.startChat === "function"
|
||||||
|
|
@ -106,10 +105,25 @@ 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>
|
||||||
|
|
|
||||||
|
|
@ -208,8 +208,9 @@ export default {
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
background: $blue-100;
|
background: $blue-100;
|
||||||
border-radius: 3rem;
|
border-radius: 3rem;
|
||||||
box-shadow: 0px 0px 4px 1px rgba(0, 112, 209, 1) inset;
|
box-shadow: inset 0px 2px 4px 0px rgba(0, 112, 209, 0.2);
|
||||||
font-size: 0.875rem;
|
font-size: 0.875rem;
|
||||||
|
border: 1px solid $blue;
|
||||||
.label {
|
.label {
|
||||||
position: relative;
|
position: relative;
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
|
|
@ -231,7 +232,7 @@ export default {
|
||||||
left: -2rem;
|
left: -2rem;
|
||||||
background: $blue;
|
background: $blue;
|
||||||
border-radius: 3rem;
|
border-radius: 3rem;
|
||||||
box-shadow: 0px 0px 0px 1px rgba(0, 112, 209, 1) inset;
|
box-shadow: 0px 3px 4px 0px rgba(66, 68, 90, 0.2);
|
||||||
transition: transform 750ms cubic-bezier(0.02, 0.94, 0.09, 0.97);
|
transition: transform 750ms cubic-bezier(0.02, 0.94, 0.09, 0.97);
|
||||||
transform: translate3d(2rem, 0, 0);
|
transform: translate3d(2rem, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -55,6 +55,8 @@ export default {
|
||||||
return {
|
return {
|
||||||
globalAlertMessages: [],
|
globalAlertMessages: [],
|
||||||
sierraChatOpen: false,
|
sierraChatOpen: false,
|
||||||
|
salesforceChatOpen: false,
|
||||||
|
isSalesforceTransferInProgress: false,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
|
|
@ -73,16 +75,19 @@ export default {
|
||||||
return this.getCmsContent(this.cmsWidgetName, "LogoImage");
|
return this.getCmsContent(this.cmsWidgetName, "LogoImage");
|
||||||
},
|
},
|
||||||
shouldShowWebchatButton() {
|
shouldShowWebchatButton() {
|
||||||
// Always update experiment flag before computing visibility
|
// Hide the chat icon if Sierra chat is open
|
||||||
this.syncSierraExperimentFlag();
|
if (this.sierraChatOpen) {
|
||||||
// Show if Sierra experiment is active and chat is not open
|
return false;
|
||||||
if (this.webchatGlobalNonpersistedState.shouldLaunchSierra) {
|
|
||||||
return !this.sierraChatOpen;
|
|
||||||
}
|
}
|
||||||
// Otherwise, use Salesforce logic
|
// Hide the chat icon if Salesforce chat is open or transfer is in progress
|
||||||
|
if (this.salesforceChatOpen || this.isSalesforceTransferInProgress) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// Show if either Sierra is enabled or Salesforce button is available and not hidden by page
|
||||||
return (
|
return (
|
||||||
!this.shouldHideWebchatButtonOnPage &&
|
(this.webchatGlobalNonpersistedState.shouldLaunchSierra ||
|
||||||
this.webchatGlobalNonpersistedState.showWebchatButton
|
this.webchatGlobalNonpersistedState.showWebchatButton) &&
|
||||||
|
!this.shouldHideWebchatButtonOnPage
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -123,6 +128,7 @@ export default {
|
||||||
progressBar,
|
progressBar,
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
this.syncSierraExperimentFlag();
|
||||||
// Check if alert event is on the bus
|
// Check if alert event is on the bus
|
||||||
const alertEvent = eventBus.readAndPopEventFromBus(
|
const alertEvent = eventBus.readAndPopEventFromBus(
|
||||||
globalEvents.Categories.GLOBAL_ALERT,
|
globalEvents.Categories.GLOBAL_ALERT,
|
||||||
|
|
@ -144,14 +150,47 @@ export default {
|
||||||
unknownAlertEvent.displayAlert = true;
|
unknownAlertEvent.displayAlert = true;
|
||||||
this.globalAlertMessages.push(unknownAlertEvent);
|
this.globalAlertMessages.push(unknownAlertEvent);
|
||||||
}
|
}
|
||||||
// Listen for Sierra chat close event to re-enable the chat button if needed
|
// Listen for Sierra chat open/close events from sierra-webchat
|
||||||
this._handleSierraChatClosed = () => {
|
this._handleSierraChatVisibility = (event) => {
|
||||||
this.sierraChatOpen = false;
|
this.sierraChatOpen = !!(event.detail && event.detail.open);
|
||||||
|
if (this.sierraChatOpen) {
|
||||||
|
this.isSalesforceTransferInProgress = false;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
window.addEventListener("sierra-chat-closed", this._handleSierraChatClosed);
|
window.addEventListener("sierra-chat-visibility", this._handleSierraChatVisibility);
|
||||||
|
|
||||||
|
// Listen for Salesforce chat open/close events from salesforce-webchat
|
||||||
|
this._handleSalesforceChatVisibility = (event) => {
|
||||||
|
this.salesforceChatOpen = !!(event.detail && event.detail.open === true);
|
||||||
|
};
|
||||||
|
window.addEventListener("salesforce-chat-visibility", this._handleSalesforceChatVisibility);
|
||||||
|
|
||||||
|
// Listen for transfer event to set transfer-in-progress flag
|
||||||
|
this._handleSierraToSalesforceTransfer = () => {
|
||||||
|
this.isSalesforceTransferInProgress = true;
|
||||||
|
};
|
||||||
|
window.addEventListener("sierra-chat-transfer", this._handleSierraToSalesforceTransfer);
|
||||||
|
|
||||||
|
// Reset transfer flag when Salesforce chat opens
|
||||||
|
this._handleSalesforceChatOpened = (event) => {
|
||||||
|
if (event.detail && event.detail.open === true) {
|
||||||
|
this.isSalesforceTransferInProgress = false;
|
||||||
|
this.salesforceChatOpen = true;
|
||||||
|
} else {
|
||||||
|
this.salesforceChatOpen = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
window.addEventListener("salesforce-chat-visibility", this._handleSalesforceChatOpened);
|
||||||
},
|
},
|
||||||
beforeUnmount() {
|
beforeUnmount() {
|
||||||
window.removeEventListener("sierra-chat-closed", this._handleSierraChatClosed);
|
window.removeEventListener("sierra-chat-closed", this._handleSierraChatClosed);
|
||||||
|
window.removeEventListener("sierra-chat-visibility", this._handleSierraChatVisibility);
|
||||||
|
window.removeEventListener(
|
||||||
|
"salesforce-chat-visibility",
|
||||||
|
this._handleSalesforceChatVisibility
|
||||||
|
);
|
||||||
|
window.removeEventListener("sierra-chat-transfer", this._handleSierraToSalesforceTransfer);
|
||||||
|
window.removeEventListener("salesforce-chat-visibility", this._handleSalesforceChatOpened);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ import { checkLogParam } from "@/helpers/debug-log-helper";
|
||||||
import { debugLog } from "@/helpers/debug-log-helper";
|
import { debugLog } from "@/helpers/debug-log-helper";
|
||||||
import { handleHeritageReturn } from "@/router/methods/helpers/handle-heritage-return";
|
import { handleHeritageReturn } from "@/router/methods/helpers/handle-heritage-return";
|
||||||
import { isVirtualRoute } from "@/router/methods/helpers/is-virtual-route";
|
import { isVirtualRoute } from "@/router/methods/helpers/is-virtual-route";
|
||||||
|
import router from "@/router";
|
||||||
|
|
||||||
export async function beforeEach(to, from) {
|
export async function beforeEach(to, from) {
|
||||||
try {
|
try {
|
||||||
|
|
@ -49,6 +50,9 @@ export async function beforeEach(to, from) {
|
||||||
const exceptionPages = [FUNNEL_START_PAGE.name, routeData.CONFIRMATION.name];
|
const exceptionPages = [FUNNEL_START_PAGE.name, routeData.CONFIRMATION.name];
|
||||||
|
|
||||||
if (!exceptionPages.some((name) => to.name === name) && !isVirtualRoute(to.name)) {
|
if (!exceptionPages.some((name) => to.name === name) && !isVirtualRoute(to.name)) {
|
||||||
|
router.push({
|
||||||
|
name: routeData.CONFIRMATION.name,
|
||||||
|
});
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,19 @@
|
||||||
import analyticsMixin from "@/mixins/analytics-mixin";
|
import analyticsMixin from "@/mixins/analytics-mixin";
|
||||||
import { routeData } from "@/router/constants/routes";
|
import { routeData } from "@/router/constants/routes";
|
||||||
import router from "@/router";
|
import router from "@/router";
|
||||||
|
import store from "@/store";
|
||||||
|
import { storeActions } from "@/constants/store-actions";
|
||||||
|
import { deleteFunnelCookie } from "@/helpers/heritage-integration/cookie-helper";
|
||||||
|
|
||||||
export async function bailout(errorPayload, forceRestart = false) {
|
export async function bailout(errorPayload, forceRestart = false) {
|
||||||
|
if (forceRestart) {
|
||||||
|
await store.dispatch(storeActions.RESET_STATE);
|
||||||
|
deleteFunnelCookie();
|
||||||
|
}
|
||||||
|
|
||||||
analyticsMixin.methods.pushPageErrorToDataLayer(errorPayload);
|
analyticsMixin.methods.pushPageErrorToDataLayer(errorPayload);
|
||||||
|
|
||||||
if (forceRestart) {
|
router.push({
|
||||||
router.push({
|
name: routeData.ERROR.name,
|
||||||
name: routeData.RESTART.name,
|
});
|
||||||
});
|
|
||||||
} else {
|
|
||||||
router.push({
|
|
||||||
name: routeData.ERROR.name,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue