<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" />
</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";

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,
    },
};

// 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;
};
</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>
