mirror of
https://github.com/sabjorn7/meetguru.git
synced 2025-08-12 04:56:58 +03:00
121 lines
3.2 KiB
JavaScript
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;
|