86 lines
3.1 KiB
Vue
86 lines
3.1 KiB
Vue
<template>
|
|
<router-view v-slot="{ Component }" ref="router-view">
|
|
<transition :duration="{ enter: 200, leave: 200 }" name="route-fade" mode="out-in">
|
|
<!-- The above durations should be kept in sync with the global css class "fade-on-route-transition" -->
|
|
<component :is="Component" ref="component" @focusin="handleAnyComponentFocus" />
|
|
</transition>
|
|
</router-view>
|
|
<funnelFooter />
|
|
<loadingModal :showLoader="shouldShowLoader" :showTextCarousel="shouldShowTextCarousel" />
|
|
<salesforceWebchat />
|
|
<sierra-webchat />
|
|
</template>
|
|
|
|
<script>
|
|
import { handleAnyComponentFocus } from "@/helpers/button-question-focus-helper";
|
|
import loadingModal from "@/fmg-components/loading-modal/loading-modal.vue";
|
|
import { showFmgLoadingModal } from "@/helpers/loading-modal-helper";
|
|
import funnelFooter from "@/fmg-components/funnel-footer/funnel-footer.vue";
|
|
import salesforceWebchat from "./digital-components/salesforce-webchat/salesforce-webchat.vue";
|
|
import sierraWebchat from "./digital-components/sierra-webchat/sierra-webchat.vue";
|
|
|
|
export default {
|
|
name: "app",
|
|
setup() {
|
|
const { globalNonpersistedState } = showFmgLoadingModal();
|
|
return { globalNonpersistedState };
|
|
},
|
|
methods: {
|
|
handleAnyComponentFocus: handleAnyComponentFocus,
|
|
},
|
|
computed: {
|
|
shouldShowLoader() {
|
|
return this.globalNonpersistedState.showLoadingModal;
|
|
},
|
|
shouldShowTextCarousel() {
|
|
return this.globalNonpersistedState.showTextCarousel;
|
|
},
|
|
},
|
|
components: {
|
|
loadingModal,
|
|
funnelFooter,
|
|
salesforceWebchat,
|
|
sierraWebchat,
|
|
},
|
|
mounted() {
|
|
showFmgLoadingModal(true);
|
|
},
|
|
};
|
|
|
|
// Add a global Javascript exception handler for logging exceptions, this handler will log when there is an uncaught exception
|
|
window.onerror = (msg, url, line, col, error) => {
|
|
// Log the windows error
|
|
// Note that col & error are new to the HTML 5 spec and may not be
|
|
// supported in every browser. It worked for me in Chrome.
|
|
global.$logger.logError(msg, {
|
|
url: url,
|
|
line: line,
|
|
column: col ?? "",
|
|
error: error ?? "",
|
|
});
|
|
|
|
// If you return true, then error alerts (like in older versions of
|
|
// Internet Explorer) will be suppressed.
|
|
var suppressErrorAlert = true;
|
|
return suppressErrorAlert;
|
|
};
|
|
|
|
// Log Promise rejections that are never handled (.catch / await try/catch), e.g. fire-and-forget async.
|
|
window.addEventListener("unhandledrejection", (event) => {
|
|
const reason = event.reason;
|
|
const message = reason instanceof Error ? reason.message : String(reason);
|
|
global.$logger.logError(`unhandledrejection: ${message}`, {
|
|
stack: reason instanceof Error ? reason.stack : undefined,
|
|
reason: reason instanceof Error ? undefined : reason,
|
|
});
|
|
});
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
@import "./node_modules/bootstrap/scss/bootstrap";
|
|
@import "@/styles/common-styles.scss";
|
|
@import "@/styles/common-typography-styles.scss";
|
|
@import "@/styles/common-error-styles.scss";
|
|
@import "@/styles/common-animations.scss";
|
|
@import "@/styles/shared-input-button-styles.scss";
|
|
</style>
|