funkwhale/front/src/main.ts

57 wiersze
1.7 KiB
TypeScript
Czysty Zwykły widok Historia

import router from '~/router'
import store, { key } from '~/store'
2022-06-30 02:30:32 +00:00
import { createApp, defineAsyncComponent, h } from 'vue'
2022-04-18 18:39:30 +00:00
import useLogger from '~/composables/useLogger'
2022-04-23 07:26:25 +00:00
import useTheme from '~/composables/useTheme'
// NOTE: Set the theme as fast as possible
2022-04-23 07:26:25 +00:00
useTheme()
2022-04-18 00:40:34 +00:00
2022-06-30 02:30:32 +00:00
// TODO (wvffle): Make sure V_FOR_REF works
// Search pattern: v-for([^>]|\n)+?[^h]ref
2022-04-18 18:39:30 +00:00
const logger = useLogger()
logger.info('Loading environment:', import.meta.env.MODE)
logger.debug('Environment variables:', import.meta.env)
const app = createApp({
name: 'Root',
data: () => ({ ready: false }),
mounted () {
this.ready = true
2022-04-17 23:24:50 +00:00
},
render () {
if (this.ready) {
return h(defineAsyncComponent(() => import('~/App.vue')))
2022-04-17 23:24:50 +00:00
}
return null
2022-04-17 23:24:50 +00:00
}
})
2022-04-18 16:17:51 +00:00
app.use(router)
app.use(store, key)
const modules: Array<Promise<unknown>> = []
2022-04-23 12:10:36 +00:00
for (const module of Object.values(import.meta.globEager('./init/*.ts'))) {
2022-04-17 23:24:50 +00:00
modules.push(module.install?.({
app,
router,
store
2022-04-17 23:24:50 +00:00
}))
}
2022-04-18 18:39:30 +00:00
// Wait for all modules to load
Promise.all(modules).finally(() => {
app.mount('#app')
2022-04-18 18:39:30 +00:00
logger.info('Everything loaded!')
})
2022-05-01 15:06:01 +00:00
// TODO (wvffle): Rename filters from useSharedLabels to filters from backend
2022-05-01 15:06:01 +00:00
// TODO (wvffle): Check for mixin merging: https://v3-migration.vuejs.org/breaking-changes/data-option.html#mixin-merge-behavior-change=
// TODO (wvffle): Use emits options: https://v3-migration.vuejs.org/breaking-changes/emits-option.html
2022-05-02 08:25:37 +00:00
// TODO (wvffle): Find all array watchers and make them deep
// TODO (wvffle): Migrate to <script setup lang="ts"> and remove allowJs from tsconfig.json
// TODO (wvffle): Replace `from '(../)+` with `from '~/`
// TODO (wvffle): Fix props not being available in template in IntelliJ Idea
// TODO (wvffle): Use navigation guards