audon/audon-fe/src/main.js

86 wiersze
2.1 KiB
JavaScript
Czysty Zwykły widok Historia

2022-12-03 03:20:49 +00:00
import { createApp } from "vue";
import { createPinia } from "pinia";
import { createVuetify } from "vuetify";
import { aliases, mdi } from "vuetify/iconsets/mdi-svg";
2022-12-17 02:30:46 +00:00
import { createI18n } from "vue-i18n";
import messages from "@intlify/unplugin-vue-i18n/messages";
2022-12-04 05:19:41 +00:00
import axios from "axios";
2022-12-17 02:30:46 +00:00
import { split } from "lodash-es";
2022-12-04 05:19:41 +00:00
2022-12-03 03:20:49 +00:00
import App from "./App.vue";
import router from "./router";
2022-12-06 13:20:36 +00:00
import { useMastodonStore } from "./stores/mastodon";
2022-12-03 03:20:49 +00:00
import "./assets/style.css";
import "vuetify/styles";
const vuetify = createVuetify({
theme: {
defaultTheme: "dark",
},
icons: {
2022-12-07 05:45:05 +00:00
defaultSet: "mdi",
2022-12-03 03:20:49 +00:00
aliases,
sets: {
mdi,
},
},
});
2022-12-17 02:30:46 +00:00
const userLocale =
navigator.languages && navigator.languages.length
? navigator.languages[0]
: navigator.language;
const prefLocale = localStorage.getItem("locale");
const i18n = createI18n({
locale: prefLocale ?? split(userLocale, "-", 1)[0],
fallbackLocale: "en",
messages,
});
2022-12-06 08:57:20 +00:00
axios.defaults.withCredentials = true;
2022-12-07 05:45:05 +00:00
2022-12-06 13:20:36 +00:00
// if audon server returns 401, display the login form
2022-12-06 08:57:20 +00:00
axios.interceptors.response.use(undefined, (error) => {
if (error.response?.status === 401) {
2022-12-06 13:20:36 +00:00
const donStore = useMastodonStore();
donStore.$reset();
2022-12-06 08:57:20 +00:00
}
return Promise.reject(error);
});
2022-12-07 05:45:05 +00:00
router.beforeEach(async (to) => {
const donStore = useMastodonStore();
if ((!to.meta.noauth || to.name === "login") && !donStore.authorized) {
2022-12-07 05:45:05 +00:00
try {
if (!donStore.client) await donStore.fetchToken();
2022-12-07 05:45:05 +00:00
} catch (error) {
if (error.response?.status === 401) {
donStore.$reset();
}
}
}
});
2023-01-25 06:37:31 +00:00
router.afterEach((to) => {
2022-12-06 13:20:36 +00:00
const donStore = useMastodonStore();
if (!to.meta.noauth && !donStore.authorized) {
2022-12-17 02:30:46 +00:00
const query = to.name !== "home" ? { l: to.path } : {};
2022-12-09 14:59:37 +00:00
router.push({ name: "login", query }); // need to push in afterEach to get nonempty lastPath in LoginView.vue
} else if (to.name === "login" && donStore.authorized) {
router.replace({ name: "home" });
2022-12-06 13:20:36 +00:00
}
});
2022-12-03 03:20:49 +00:00
const app = createApp(App);
2022-12-17 02:30:46 +00:00
app.use(i18n);
2022-12-03 03:20:49 +00:00
app.use(createPinia());
app.use(vuetify);
app.use(router);
2022-12-06 06:09:15 +00:00
// app.config.compilerOptions.delimiters = ["{%", "%}"];
2022-12-03 03:20:49 +00:00
app.mount("#app");