import { createApp } from 'vue'; import { createPinia } from 'pinia'; import { DateTime } from 'luxon'; import App from '@/App.vue'; import SetupAssistant from '@/SetupAssistant.vue'; import autoreload from '@/autoreloader'; import router from '@/router/index'; import setupAssistantRouter from '@/router/setup-assistant'; import { MetaApi } from '@/manager-api'; import { newBareAPIClient } from '@/api-client'; import * as urls from '@/urls'; // Ensure Tabulator can find `luxon`, which it needs for sorting by // date/time/datetime. window.DateTime = DateTime; // plain removes any Vue reactivity. window.plain = (x) => JSON.parse(JSON.stringify(x)); // objectEmpty returns whether the object is empty or not. window.objectEmpty = (o) => !o || Object.entries(o).length == 0; // Automatically reload the window after a period of inactivity from the user. autoreload(); const pinia = createPinia(); function normalMode() { const app = createApp(App); app.use(pinia); app.use(router); app.mount('#app'); } function setupAssistantMode() { console.log('Flamenco Setup Assistant is starting'); const app = createApp(SetupAssistant); app.use(pinia); app.use(setupAssistantRouter); app.mount('#app'); } /* This cannot use the client from '@/stores/api-query-count', as that would * require Pinia, which is unavailable until the app is actually started. And to * know which app to start, this API call needs to return data. */ const apiClient = newBareAPIClient(); const metaAPI = new MetaApi(apiClient); metaAPI .getConfiguration() .then((config) => { if (config.isFirstRun) setupAssistantMode(); else normalMode(); }) .catch((error) => { console.warn('Error getting Manager configuration:', error); });