66 lines
2.4 KiB
JavaScript
66 lines
2.4 KiB
JavaScript
import {createApp, h, defineAsyncComponent} from 'vue';
|
|
import {Head, createInertiaApp, Link as ILink} from '@inertiajs/vue3';
|
|
import axios from 'axios';
|
|
import VueAxios from 'vue-axios';
|
|
import {Plugin as FloatingVue, options as FloatingVueOptions} from './lib/floatingVue.js';
|
|
import {createPinia, PiniaVuePlugin} from 'pinia';
|
|
import Echo from './lib/echo.js';
|
|
import requireModules from './lib/requireModules.js';
|
|
|
|
import AppLayout from './layouts/AppLayout.vue';
|
|
import hasModule from './mixins/hasModule.js';
|
|
import hasFlash from './mixins/hasFlash.js';
|
|
import {Toast, options as toastOptions, interceptor as toastInterceptor} from './lib/toast.js';
|
|
|
|
// ---------------------------------- Assets -----------------------------------
|
|
import '../css/app.css';
|
|
import 'vue-toastification/dist/index.css';
|
|
import.meta.glob(['../img/**']);
|
|
|
|
// ----------------------------------- init ------------------------------------
|
|
const pinia = createPinia();
|
|
var views = import.meta.glob('./views/**/*.vue');
|
|
|
|
axios.interceptors.response.use(...toastInterceptor);
|
|
window.Echo = Echo;
|
|
|
|
createInertiaApp({
|
|
title: (title) => `${title} | Adrema`,
|
|
resolve: async (name) => {
|
|
var page = (await views[`./views/${name}.vue`]()).default;
|
|
|
|
if (page.layout === undefined) {
|
|
page.layout = AppLayout;
|
|
}
|
|
|
|
return page;
|
|
},
|
|
setup({el, App, props, plugin}) {
|
|
var app = createApp({pinia, render: () => h(App, props)})
|
|
.use(plugin)
|
|
.use(FloatingVue, FloatingVueOptions)
|
|
.use(Toast, toastOptions)
|
|
.use(VueAxios, axios)
|
|
.use(PiniaVuePlugin)
|
|
.component('ILink', ILink)
|
|
.component('Head', Head)
|
|
.mixin(hasModule)
|
|
.mixin(hasFlash);
|
|
|
|
requireModules(import.meta.glob('./components/form/*.vue'), app, 'f');
|
|
requireModules(import.meta.glob('./components/ui/*.vue'), app, 'ui');
|
|
requireModules(import.meta.glob('./components/page/*.vue', {eager: true}), app, 'page');
|
|
app.component(
|
|
'FSinglefile',
|
|
defineAsyncComponent(() => import('!/medialibrary-helper/assets/components/SingleFile.vue'))
|
|
);
|
|
app.component(
|
|
'FMultiplefiles',
|
|
defineAsyncComponent(() => import('!/medialibrary-helper/assets/components/MultipleFiles.vue'))
|
|
);
|
|
|
|
app.provide('axios', app.config.globalProperties.axios);
|
|
app.mount(el);
|
|
},
|
|
});
|