Files
2FAuth/resources/js/app.js

108 lines
2.6 KiB
JavaScript
Vendored

import '@2fauth/styles/src/app.scss';
import i18n from './i18n'
import Notifications from '@kyvg/vue3-notification'
import App from './App.vue'
import router from './router'
import FontAwesomeIcon from './icons'
// import helpers from './helpers'
const app = createApp(App)
// Immutable app properties provided by the laravel blade view
const $2fauth = {
prefix: '2fauth_',
config: window.appConfig,
version: window.appVersion,
isDemoApp: window.isDemoApp,
isTestingApp: window.isTestingApp,
langs: window.appLocales,
urls: window.urls,
context: 'webapp',
}
app.provide('2fauth', readonly($2fauth))
// Localization
app.use(i18n)
// Stores
const pinia = createPinia()
pinia.use(({ store }) => {
store.$2fauth = $2fauth;
store.$i18n = i18n
})
app.use(pinia)
// Router
app.use(router)
// Notifications
app.use(Notifications)
// Global components registration
import Kicker from '@/components/Kicker.vue'
import {
FormField,
FormPasswordField,
FormFieldError,
FormCheckbox,
FormSelect,
FormToggle,
FormButtons,
NavigationButton,
VueButton
} from '@2fauth/formcontrols'
import {
FormWrapper,
Modal,
ResponsiveWidthWrapper,
VueFooter,
} from '@2fauth/ui'
app
.component('FontAwesomeIcon', FontAwesomeIcon)
.component('ResponsiveWidthWrapper', ResponsiveWidthWrapper)
.component('FormWrapper', FormWrapper)
.component('VueFooter', VueFooter)
.component('Modal', Modal)
.component('VueButton', VueButton)
.component('NavigationButton', NavigationButton)
.component('FormFieldError', FormFieldError)
.component('FormField', FormField)
.component('FormPasswordField', FormPasswordField)
.component('FormSelect', FormSelect)
.component('FormToggle', FormToggle)
.component('FormCheckbox', FormCheckbox)
.component('FormButtons', FormButtons)
.component('Kicker', Kicker)
// Global error handling
// import { useNotify } from '@2fauth/ui'
// if (process.env.NODE_ENV != 'development') {
// app.config.errorHandler = (err) => {
// useNotify().parse(err)
// router.push({ name: 'genericError' })
// }
// }
// Helpers
// app.config.globalProperties.$helpers = helpers
// App mounting
app.mount('#app')
// App inject for footer
// TODO : Try to avoid those global injection
import { useUserStore } from '@/stores/user'
import { useAppSettingsStore } from '@/stores/appSettings'
const user = useUserStore()
const appSettings = useAppSettingsStore()
user.applyUserPrefs()
app.provide('userStore', user)
app.provide('appSettingsStore', appSettings)