Bug 32030: Fix pinia init
[koha-ffzg.git] / koha-tmpl / intranet-tmpl / prog / js / vue / main-erm.ts
1 import { createApp } from "vue";
2 import { createWebHistory, createRouter } from "vue-router";
3 import { createPinia } from "pinia";
4
5 import { library } from "@fortawesome/fontawesome-svg-core";
6 import {
7     faPlus,
8     faMinus,
9     faPencil,
10     faTrash,
11     faSpinner,
12 } from "@fortawesome/free-solid-svg-icons";
13 import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
14 import vSelect from "vue-select";
15
16 library.add(faPlus, faMinus, faPencil, faTrash, faSpinner);
17
18 import App from "./components/ERM/ERMMain.vue";
19
20 import { routes } from "./routes";
21
22 const router = createRouter({ history: createWebHistory(), routes });
23
24 import { useMainStore } from "./stores/main";
25 import { useVendorStore } from "./stores/vendors";
26 import { useAVStore } from "./stores/authorised_values";
27
28 import { createI18n } from "vue-i18n";
29
30 // FIXME How do we load the locale list?
31 import * as en from "./locales/en.json"; // We could async the load here, see https://vue-i18n.intlify.dev/guide/advanced/lazy.html
32 import * as de_DE from "./locales/de-DE.json";
33 import * as es_ES from "./locales/es-ES.json";
34 import * as fr_FR from "./locales/fr-FR.json";
35 const languages = { en, "de-DE": de_DE, "es-ES": es_ES, "fr-FR": fr_FR };
36 const messages = Object.assign(languages);
37 const i18n = createI18n({ locale: "en", messages });
38
39 const pinia = createPinia();
40 const app = createApp(App);
41
42 const rootComponent = app
43     .use(pinia)
44     .use(router)
45     .use(i18n)
46     .component("font-awesome-icon", FontAwesomeIcon)
47     .component("v-select", vSelect);
48
49 app.config.unwrapInjectedRef = true;
50 app.provide("vendorStore", useVendorStore(pinia));
51 const mainStore = useMainStore(pinia);
52 app.provide("mainStore", mainStore);
53 app.provide("AVStore", useAVStore(pinia));
54
55 app.mount("#erm");
56
57 const { removeMessages } = mainStore;
58 router.beforeEach((to, from) => {
59     removeMessages(); // This will actually flag the messages as displayed already
60 });