main.ts 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. // Copyright (C) 2012-2023 Zammad Foundation, https://zammad-foundation.org/
  2. import { createApp } from 'vue'
  3. import '#desktop/styles/main.scss'
  4. import { useSessionStore } from '#shared/stores/session.ts'
  5. import initializeStoreSubscriptions from '#shared/initializer/storeSubscriptions.ts'
  6. import { useApplicationStore } from '#shared/stores/application.ts'
  7. import { useLocaleStore } from '#shared/stores/locale.ts'
  8. import { useAppTheme } from '#shared/stores/theme.ts'
  9. import { useAuthenticationStore } from '#shared/stores/authentication.ts'
  10. import initializeStore from '#shared/stores/index.ts'
  11. import initializeGlobalComponents from '#shared/initializer/globalComponents.ts'
  12. import { initializeAppName } from '#shared/composables/useAppName.ts'
  13. import initializeGlobalProperties from '#shared/initializer/globalProperties.ts'
  14. import { initializeDesktopIcons } from '#desktop/initializer/initializeDesktopIcons.ts'
  15. import { initializeGlobalComponentStyles } from '#desktop/initializer/initializeGlobalComponentStyles.ts'
  16. import initializeApolloClient from '#desktop/server/apollo/index.ts'
  17. import initializeRouter from '#desktop/router/index.ts'
  18. import initializeForm from '#desktop/form/index.ts'
  19. import { ensureAfterAuth } from './pages/login/after-auth/composable/useAfterAuthPlugins.ts'
  20. import App from './AppDesktop.vue'
  21. export const mountApp = async () => {
  22. const app = createApp(App)
  23. initializeApolloClient(app)
  24. const router = initializeRouter(app)
  25. initializeStore(app)
  26. initializeDesktopIcons()
  27. initializeForm(app)
  28. initializeGlobalComponentStyles()
  29. initializeGlobalComponents(app)
  30. initializeAppName('desktop')
  31. initializeGlobalProperties(app)
  32. initializeStoreSubscriptions()
  33. const session = useSessionStore()
  34. const authentication = useAuthenticationStore()
  35. // If the session is invalid, clear the already set authentication flag from storage.
  36. if (!(await session.checkSession()) && authentication.authenticated) {
  37. authentication.authenticated = false
  38. }
  39. const application = useApplicationStore()
  40. const initalizeAfterSessionCheck: Array<Promise<unknown>> = [
  41. application.getConfig(),
  42. ]
  43. if (session.id) {
  44. authentication.authenticated = true
  45. initalizeAfterSessionCheck.push(session.getCurrentUser())
  46. }
  47. await Promise.all(initalizeAfterSessionCheck)
  48. if (session.id) session.initialized = true
  49. const locale = useLocaleStore()
  50. if (!locale.localeData) {
  51. await locale.setLocale()
  52. }
  53. // sync theme so the store is initialized and user (if exists) and DOM have the same value
  54. useAppTheme().syncTheme()
  55. if (VITE_TEST_MODE) {
  56. await import('#shared/initializer/initializeFakeTimer.ts')
  57. }
  58. app.mount('#app')
  59. if (session.afterAuth) {
  60. await ensureAfterAuth(router, session.afterAuth)
  61. }
  62. }