meetguru/src/_front/main.js
Arseny Sazhin (via WeWeb) ee7c2cf4d1 v72 - 1
2025-07-11 10:27:13 +03:00

121 lines
3.2 KiB
JavaScript

import { createApp, createSSRApp } from 'vue';
import axios from 'axios';
import { VueCookieNext } from 'vue-cookie-next';
import { isEqual, isEmpty, cloneDeep, get, set, merge } from 'lodash';
/* wwFront:start */
import { createHead } from '@vueuse/head';
/* wwFront:end */
import App from '@/_front/App.vue';
import router from '@/_front/router.js';
let store;
let pinia;
/* wwFront:start */
// Set theme class before first global context computation to avoid flickering and wrong computed colors
if (window.localStorage?.getItem('ww-app-theme') === 'dark')
document.documentElement.classList.add('ww-app-theme-dark');
else if (window.localStorage?.getItem('ww-app-theme') === 'light')
document.documentElement.classList.remove('ww-app-theme-dark');
import storeImport from '@/store';
import wwLibImport from '@/wwLib';
import { createPinia } from 'pinia';
store = storeImport;
pinia = createPinia();
window.wwLib = wwLibImport;
if ('serviceWorker' in navigator) {
if (window.wwg_disableManifest) {
navigator.serviceWorker.getRegistrations().then(registrations => {
for (const registration of registrations) {
registration.unregister();
}
});
} else {
const baseTag = window.wwg_designInfo?.baseTag;
let href = baseTag?.href || null;
if (href) {
if (!href.startsWith('/')) href = `/${href}`;
if (!href.endsWith('/')) href = `${href}/`;
}
navigator.serviceWorker
.register(`${href ?? '/'}serviceworker.js?_wwcv=${window.wwg_cacheVersion}`)
.catch(error => {
console.error('Service worker registration failed:', error);
});
}
}
/* wwFront:end */
import wwElements from '@/_front/components/index.js';
import { addMediaQueriesListener } from '../helpers/mediaQueriesListener.js';
import globalServices from '@/_common/plugins/globalServices.js';
import '@/assets/css';
//Set window libraries
window._ = {
isEqual,
isEmpty,
cloneDeep,
get,
set,
merge,
};
window.axios = axios.create({});
const app = createApp(App);
const init = async function () {
window.vm = app;
app.use(pinia);
app.use(store);
app.use(VueCookieNext);
app.use(wwElements);
app.use(globalServices);
app.config.unwrapInjectedRef = true;
/* wwFront:start */
app.use(createHead());
/* wwFront:end */
await wwLib.initFront({ store, router });
app.use(router);
addMediaQueriesListener(wwLib.$store.getters['front/getScreenSizes'], (screenSize, isActive) => {
wwLib.$store.dispatch('front/setIsScreenSizeActive', { screenSize, isActive });
});
await router.isReady();
// We select ourself app element, because Vue does not know how to do it properly (Editor + Front Iframe)
const el = document.getElementById('app');
app.mount(el);
/* wwFront:start */
// Needed or reactivity is not working in deployed app
wwLib.scrollStore.setValues();
/* wwFront:end */
wwLib.$emit('wwLib:isMounted');
wwLib.isMounted = true;
};
init();
/* wwFront:start */
wwLib.getFrontWindow().addEventListener('beforeinstallprompt', e => {
e.preventDefault();
wwLib.installPwaPrompt = e;
});
/* wwFront:end */
export default app;