+
{{ labels.logout }}
-
-
-
-
+
+
+
{{ labels.login }}
-
-
-
+
+
-
{{ labels.signup }}
-
-
+
+
diff --git a/front/src/components/notifications/NotificationRow.vue b/front/src/components/notifications/NotificationRow.vue
index 9668d5351..e524241ca 100644
--- a/front/src/components/notifications/NotificationRow.vue
+++ b/front/src/components/notifications/NotificationRow.vue
@@ -9,11 +9,17 @@
+ >
+
+
{
+ this.$store.commit('playlists/showModal', false)
+ this.showDuplicateTrackAddConfirmation = false
+ }
+
+ onBeforeRouteUpdate(guard)
+ onBeforeRouteLeave(guard)
+ },
data () {
return {
formKey: String(new Date()),
@@ -238,10 +248,6 @@ export default {
}
},
watch: {
- '$store.state.route.path' () {
- this.$store.commit('playlists/showModal', false)
- this.showDuplicateTrackAddConfirmation = false
- },
'$store.state.playlists.showModal' () {
this.formKey = String(new Date())
this.showDuplicateTrackAddConfirmation = false
diff --git a/front/src/main.ts b/front/src/main.ts
index 48d8011db..6044ef3bc 100644
--- a/front/src/main.ts
+++ b/front/src/main.ts
@@ -2,21 +2,14 @@ import logger from '~/logging'
import router from '~/router'
import VueLazyload from 'vue-lazyload'
import store from '~/store'
-import { sync } from 'vuex-router-sync'
-import Vue, { createApp } from 'vue'
+import { createApp } from 'vue'
import useTheme from '~/composables/useTheme'
useTheme()
-Vue.config.devtools = true
-
logger.default.info('Loading environment:', import.meta.env.MODE)
logger.default.debug('Environment variables:', import.meta.env)
-sync(store, router)
-
const app = createApp({
- store,
- router,
components: {
App: () => import('~/App.vue')
},
@@ -34,6 +27,8 @@ const app = createApp({
}
})
+app.use(router)
+app.use(store)
app.use(VueLazyload)
const modules: Promise[] = []
diff --git a/front/src/router/index.ts b/front/src/router/index.ts
index abe769935..46979fc50 100644
--- a/front/src/router/index.ts
+++ b/front/src/router/index.ts
@@ -1,9 +1,6 @@
-import Vue from 'vue'
-import Router from 'vue-router'
+import {createRouter, createWebHistory} from 'vue-router'
import store from '~/store'
-Vue.use(Router)
-
function adminPermissions (to, from, next) {
if (store.state.auth.authenticated === true && store.state.auth.availablePermissions.settings === true) {
next()
@@ -32,10 +29,9 @@ function libraryPermissions (to, from, next) {
}
console.log('PROCESS', import.meta.env)
-export default new Router({
- mode: 'history',
+export default createRouter({
+ history: createWebHistory(import.meta.env.VUE_APP_ROUTER_BASE_URL as string ?? '/'),
linkActiveClass: 'active',
- base: import.meta.env.VUE_APP_ROUTER_BASE_URL || '/',
scrollBehavior (to, from, savedPosition) {
if (to.meta.preserveScrollPosition) {
return savedPosition
@@ -1018,11 +1014,11 @@ export default new Router({
)
},
{
- path: '*/index.html',
+ path: '/index.html',
redirect: '/'
},
{
- path: '*',
+ path: '/:pathMatch(.*)*',
name: '404',
component: () =>
import('~/components/PageNotFound.vue')
diff --git a/front/src/store/index.ts b/front/src/store/index.ts
index d6ebf7a0d..457d37164 100644
--- a/front/src/store/index.ts
+++ b/front/src/store/index.ts
@@ -1,5 +1,4 @@
-import Vue from 'vue'
-import Vuex, { Store } from 'vuex'
+import { createStore, Store } from 'vuex'
import createPersistedState from 'vuex-persistedstate'
import favorites from './favorites'
@@ -14,9 +13,7 @@ import player from './player'
import playlists from './playlists'
import ui from './ui'
-Vue.use(Vuex)
-
-export default > new Vuex.Store({
+export default > createStore({
modules: {
ui,
auth,
diff --git a/front/src/views/admin/Settings.vue b/front/src/views/admin/Settings.vue
index 99ef2e55c..a5f5414e9 100644
--- a/front/src/views/admin/Settings.vue
+++ b/front/src/views/admin/Settings.vue
@@ -46,11 +46,24 @@ import axios from 'axios'
import $ from 'jquery'
import SettingsGroup from '~/components/admin/SettingsGroup.vue'
+import { nextTick } from 'vue'
+import { useRoute } from 'vue-router'
export default {
components: {
SettingsGroup
},
+ async setup () {
+ await this.fetchSettings()
+ await nextTick()
+
+ const route = useRoute()
+ if (route.hash) {
+ this.scrollTo(route.hash.slice(1))
+ }
+
+ $('select.dropdown').dropdown()
+ },
data () {
return {
isLoading: false,
@@ -189,23 +202,12 @@ export default {
})
}
},
- created () {
- const self = this
- this.fetchSettings().then(r => {
- self.$nextTick(() => {
- if (self.$store.state.route.hash) {
- self.scrollTo(self.$store.state.route.hash.substr(1))
- }
- $('select.dropdown').dropdown()
- })
- })
- },
methods: {
scrollTo (id) {
this.current = id
document.getElementById(id).scrollIntoView()
},
- fetchSettings () {
+ async fetchSettings () {
const self = this
self.isLoading = true
return axios.get('instance/admin/settings/').then(response => {
diff --git a/front/src/views/auth/Login.vue b/front/src/views/auth/Login.vue
index 2c2305a00..b8dca80a1 100644
--- a/front/src/views/auth/Login.vue
+++ b/front/src/views/auth/Login.vue
@@ -1,3 +1,28 @@
+
+
-
-
diff --git a/front/yarn.lock b/front/yarn.lock
index 65d27b3ec..4c720c081 100644
--- a/front/yarn.lock
+++ b/front/yarn.lock
@@ -1858,7 +1858,7 @@
"@vue/compiler-dom" "3.2.38"
"@vue/shared" "3.2.38"
-"@vue/devtools-api@^6.2.1":
+"@vue/devtools-api@^6.0.0", "@vue/devtools-api@^6.0.0-beta.11", "@vue/devtools-api@^6.2.1":
version "6.2.1"
resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.2.1.tgz#6f2948ff002ec46df01420dfeff91de16c5b4092"
integrity sha512-OEgAMeQXvCoJ+1x8WyQuVZzFo0wcyCmUR3baRVLmKBo1LmYZWMlRiXlux5jd0fqVJu6PfDbOrZItVqUEzLobeQ==
@@ -6748,10 +6748,12 @@ vue-plyr@7.0.0:
plyr "github:sampotts/plyr#develop"
vue "^2.6.12"
-vue-router@3.5.4:
- version "3.5.4"
- resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.5.4.tgz#c453c0b36bc75554de066fefc3f2a9c3212aca70"
- integrity sha512-x+/DLAJZv2mcQ7glH2oV9ze8uPwcI+H+GgTgTmb5I55bCgY3+vXWIsqbYUzbBSZnwFHEJku4eoaH/x98veyymQ==
+vue-router@4.0.14:
+ version "4.0.14"
+ resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.0.14.tgz#ce2028c1c5c33e30c7287950c973f397fce1bd65"
+ integrity sha512-wAO6zF9zxA3u+7AkMPqw9LjoUCjSxfFvINQj3E/DceTt6uEz1XZLraDhdg2EYmvVwTBSGlLYsUw8bDmx0754Mw==
+ dependencies:
+ "@vue/devtools-api" "^6.0.0"
vue-template-compiler@2.6.14:
version "2.6.14"
@@ -6823,10 +6825,12 @@ vuex-router-sync@5.0.0:
resolved "https://registry.yarnpkg.com/vuex-router-sync/-/vuex-router-sync-5.0.0.tgz#1a225c17a1dd9e2f74af0a1b2c62072e9492b305"
integrity sha512-Mry2sO4kiAG64714X1CFpTA/shUH1DmkZ26DFDtwoM/yyx6OtMrc+MxrU+7vvbNLO9LSpgwkiJ8W+rlmRtsM+w==
-vuex@3.6.2:
- version "3.6.2"
- resolved "https://registry.yarnpkg.com/vuex/-/vuex-3.6.2.tgz#236bc086a870c3ae79946f107f16de59d5895e71"
- integrity sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw==
+vuex@4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/vuex/-/vuex-4.0.2.tgz#f896dbd5bf2a0e963f00c67e9b610de749ccacc9"
+ integrity sha512-M6r8uxELjZIK8kTKDGgZTYX/ahzblnzC4isU1tpmEuOIIKmV+TRdc+H4s8ds2NuZ7wpUTdGRzJRtoj+lI+pc0Q==
+ dependencies:
+ "@vue/devtools-api" "^6.0.0-beta.11"
w3c-hr-time@^1.0.2:
version "1.0.2"
|