diff --git a/package-lock.json b/package-lock.json
index c1a108055..343d23645 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -24,6 +24,8 @@
"markdown-it": "12.3.2",
"markdown-it-decorate": "1.2.2",
"openseadragon": "^4.1.0",
+ "pinia": "2.1.7",
+ "pinia-plugin-persistedstate": "3.2.1",
"socket.io-client": "4.7.5",
"svg-overlay": "github:openseadragon/svg-overlay",
"uuid": "3.4.0",
@@ -37,8 +39,6 @@
"vue-matomo": "^4.2.0",
"vue-router": "3.1.5",
"vue-slider-component": "^3.1.1",
- "vuex": "3.1.2",
- "vuex-persistedstate": "2.7.0",
"webfontloader": "1.6.28"
},
"devDependencies": {
@@ -12233,6 +12233,11 @@
"integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
"dev": true
},
+ "node_modules/@vue/devtools-api": {
+ "version": "6.6.1",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.1.tgz",
+ "integrity": "sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA=="
+ },
"node_modules/@vue/eslint-config-airbnb": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/@vue/eslint-config-airbnb/-/eslint-config-airbnb-5.3.0.tgz",
@@ -17045,6 +17050,7 @@
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
"integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
+ "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -27916,6 +27922,64 @@
"node": ">=6"
}
},
+ "node_modules/pinia": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.1.7.tgz",
+ "integrity": "sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==",
+ "dependencies": {
+ "@vue/devtools-api": "^6.5.0",
+ "vue-demi": ">=0.14.5"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/posva"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.4.0",
+ "typescript": ">=4.4.4",
+ "vue": "^2.6.14 || ^3.3.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ },
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/pinia-plugin-persistedstate": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-3.2.1.tgz",
+ "integrity": "sha512-MK++8LRUsGF7r45PjBFES82ISnPzyO6IZx3CH5vyPseFLZCk1g2kgx6l/nW8pEBKxxd4do0P6bJw+mUSZIEZUQ==",
+ "peerDependencies": {
+ "pinia": "^2.0.0"
+ }
+ },
+ "node_modules/pinia/node_modules/vue-demi": {
+ "version": "0.14.8",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.8.tgz",
+ "integrity": "sha512-Uuqnk9YE9SsWeReYqK2alDI5YzciATE0r2SkA6iMAtuXvNTMNACJLJEXNXaEy94ECuBe4Sk6RzRU80kjdbIo1Q==",
+ "hasInstallScript": true,
+ "bin": {
+ "vue-demi-fix": "bin/vue-demi-fix.js",
+ "vue-demi-switch": "bin/vue-demi-switch.js"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.0.0-rc.1",
+ "vue": "^3.0.0-0 || ^2.6.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
+ }
+ },
"node_modules/pinkie": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
@@ -31955,12 +32019,6 @@
"dev": true,
"optional": true
},
- "node_modules/shvl": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shvl/-/shvl-2.0.0.tgz",
- "integrity": "sha512-WbpzSvI5XgVGJ3A4ySGe8hBxj0JgJktfnoLhhJmvITDdK21WPVWwgG8GPlYEh4xqdti3Ff7PJ5G0QrRAjNS0Ig==",
- "deprecated": "older versions vulnerable to prototype pollution"
- },
"node_modules/side-channel": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
@@ -33915,7 +33973,7 @@
"version": "4.9.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz",
"integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==",
- "dev": true,
+ "devOptional": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -35005,25 +35063,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/vuex": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.1.2.tgz",
- "integrity": "sha512-ha3jNLJqNhhrAemDXcmMJMKf1Zu4sybMPr9KxJIuOpVcsDQlTBYLLladav2U+g1AvdYDG5Gs0xBTb0M5pXXYFQ=="
- },
- "node_modules/vuex-persistedstate": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/vuex-persistedstate/-/vuex-persistedstate-2.7.0.tgz",
- "integrity": "sha512-mpko65DUMBY4mF4sSGsgrqjE7fwO373LFZeuNrC55glRuBBAK4dkgzjr4j4Bij7WtMoKuo2t2w0NGenjauISaQ==",
- "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
- "dependencies": {
- "deepmerge": "^4.2.2",
- "shvl": "^2.0.0"
- },
- "peerDependencies": {
- "vue": "^2.0.0",
- "vuex": "^2.0.0 || ^3.0.0"
- }
- },
"node_modules/w3c-hr-time": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
@@ -45264,6 +45303,11 @@
}
}
},
+ "@vue/devtools-api": {
+ "version": "6.6.1",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.1.tgz",
+ "integrity": "sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA=="
+ },
"@vue/eslint-config-airbnb": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/@vue/eslint-config-airbnb/-/eslint-config-airbnb-5.3.0.tgz",
@@ -49147,7 +49191,8 @@
"deepmerge": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
- "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg=="
+ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
+ "dev": true
},
"default-browser-id": {
"version": "1.0.4",
@@ -57730,6 +57775,29 @@
"integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
"dev": true
},
+ "pinia": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.1.7.tgz",
+ "integrity": "sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==",
+ "requires": {
+ "@vue/devtools-api": "^6.5.0",
+ "vue-demi": ">=0.14.5"
+ },
+ "dependencies": {
+ "vue-demi": {
+ "version": "0.14.8",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.8.tgz",
+ "integrity": "sha512-Uuqnk9YE9SsWeReYqK2alDI5YzciATE0r2SkA6iMAtuXvNTMNACJLJEXNXaEy94ECuBe4Sk6RzRU80kjdbIo1Q==",
+ "requires": {}
+ }
+ }
+ },
+ "pinia-plugin-persistedstate": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-3.2.1.tgz",
+ "integrity": "sha512-MK++8LRUsGF7r45PjBFES82ISnPzyO6IZx3CH5vyPseFLZCk1g2kgx6l/nW8pEBKxxd4do0P6bJw+mUSZIEZUQ==",
+ "requires": {}
+ },
"pinkie": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
@@ -60863,11 +60931,6 @@
"dev": true,
"optional": true
},
- "shvl": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shvl/-/shvl-2.0.0.tgz",
- "integrity": "sha512-WbpzSvI5XgVGJ3A4ySGe8hBxj0JgJktfnoLhhJmvITDdK21WPVWwgG8GPlYEh4xqdti3Ff7PJ5G0QrRAjNS0Ig=="
- },
"side-channel": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
@@ -62436,7 +62499,7 @@
"version": "4.9.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz",
"integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==",
- "dev": true
+ "devOptional": true
},
"uberproto": {
"version": "2.0.6",
@@ -63259,20 +63322,6 @@
"integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
"dev": true
},
- "vuex": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.1.2.tgz",
- "integrity": "sha512-ha3jNLJqNhhrAemDXcmMJMKf1Zu4sybMPr9KxJIuOpVcsDQlTBYLLladav2U+g1AvdYDG5Gs0xBTb0M5pXXYFQ=="
- },
- "vuex-persistedstate": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/vuex-persistedstate/-/vuex-persistedstate-2.7.0.tgz",
- "integrity": "sha512-mpko65DUMBY4mF4sSGsgrqjE7fwO373LFZeuNrC55glRuBBAK4dkgzjr4j4Bij7WtMoKuo2t2w0NGenjauISaQ==",
- "requires": {
- "deepmerge": "^4.2.2",
- "shvl": "^2.0.0"
- }
- },
"w3c-hr-time": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
diff --git a/package.json b/package.json
index 04e70850b..43ee2be85 100644
--- a/package.json
+++ b/package.json
@@ -49,9 +49,9 @@
"vue-matomo": "^4.2.0",
"vue-router": "3.1.5",
"vue-slider-component": "^3.1.1",
- "vuex": "3.1.2",
- "vuex-persistedstate": "2.7.0",
- "webfontloader": "1.6.28"
+ "webfontloader": "1.6.28",
+ "pinia": "2.1.7",
+ "pinia-plugin-persistedstate": "3.2.1"
},
"devDependencies": {
"@babel/core": "^7.20.7",
diff --git a/src/App.vue b/src/App.vue
index 7e8aabbc4..3e5c23167 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -43,6 +43,10 @@ import { CommonQueryParameters } from './router/util'
import { joinFiltersWithItems, optimizeFilters, serializeFilters } from './logic/filters'
import { searchQueryGetter } from './logic/queryParams'
import { filtersItems } from './services'
+import { mapStores } from 'pinia'
+import { useSettingsStore } from '@/stores/settings'
+import { useUserStore } from '@/stores/user'
+import { useNotificationsStore } from '@/stores/notifications'
export default {
name: 'app',
@@ -71,6 +75,7 @@ export default {
},
},
computed: {
+ ...mapStores(useSettingsStore, useUserStore, useNotificationsStore),
searchQuery: {
...searchQueryGetter(),
},
@@ -80,14 +85,14 @@ export default {
return this.searchQuery.filters
},
termsAgreed() {
- console.info('Terms agreement:', this.$store.state.settings.termsAgreed)
- if (this.$store.state.user.userData) {
+ console.info('Terms agreement:', this.settingsStore.termsAgreed)
+ if (this.userStore.userData) {
return true
}
- return this.$store.state.settings.termsAgreed
+ return this.settingsStore.termsAgreed
},
is_locked() {
- return this.$store.state.processingLocked
+ return this.notificationsStore.processingLocked
},
},
methods: {
diff --git a/src/components/Autocomplete.vue b/src/components/Autocomplete.vue
index 3aea7e44c..3d9b88104 100644
--- a/src/components/Autocomplete.vue
+++ b/src/components/Autocomplete.vue
@@ -106,7 +106,10 @@
diff --git a/src/components/modals/CookieDisclaimer.vue b/src/components/modals/CookieDisclaimer.vue
index 348b503b8..315b91b4c 100644
--- a/src/components/modals/CookieDisclaimer.vue
+++ b/src/components/modals/CookieDisclaimer.vue
@@ -11,10 +11,13 @@
diff --git a/src/components/modules/CollectionAddTo.vue b/src/components/modules/CollectionAddTo.vue
index d97f0d9e5..99aa89a26 100644
--- a/src/components/modules/CollectionAddTo.vue
+++ b/src/components/modules/CollectionAddTo.vue
@@ -21,7 +21,10 @@
diff --git a/src/components/modules/CollectionAddToList.vue b/src/components/modules/CollectionAddToList.vue
index 58db13a9c..fad840706 100644
--- a/src/components/modules/CollectionAddToList.vue
+++ b/src/components/modules/CollectionAddToList.vue
@@ -70,6 +70,10 @@
diff --git a/src/components/modules/SearchResultsListItem.vue b/src/components/modules/SearchResultsListItem.vue
index 4904a3b00..47a6fd01a 100644
--- a/src/components/modules/SearchResultsListItem.vue
+++ b/src/components/modules/SearchResultsListItem.vue
@@ -109,11 +109,14 @@