diff --git a/src/components/Dropdown/Dropdown.global.vue b/src/components/Dropdown/Dropdown.global.vue
index d42b56f..f0ec7c5 100644
--- a/src/components/Dropdown/Dropdown.global.vue
+++ b/src/components/Dropdown/Dropdown.global.vue
@@ -8,12 +8,13 @@
-
{{ item.label }}
@@ -23,7 +24,7 @@
diff --git a/src/components/Icon/IconJson.global.vue b/src/components/Icon/IconJson.global.vue
new file mode 100644
index 0000000..901f7f0
--- /dev/null
+++ b/src/components/Icon/IconJson.global.vue
@@ -0,0 +1,13 @@
+
+
+
diff --git a/src/components/ImageViewer/ImageViewer.global.vue b/src/components/ImageViewer/ImageViewer.global.vue
index e746cb1..d6d1ad8 100644
--- a/src/components/ImageViewer/ImageViewer.global.vue
+++ b/src/components/ImageViewer/ImageViewer.global.vue
@@ -1,26 +1,28 @@
-
-
-
+
![]()
+ />
-
-
+
{
switch (key) {
@@ -125,15 +110,15 @@ const handleKeyboard = ({ key }) => {
if (props.previous) {
emit('previous')
}
- break;
+ break
case 'ArrowRight':
if (props.next) {
emit('next')
}
- break;
+ break
case 'Escape':
emit('close')
- break;
+ break
}
}
@@ -144,17 +129,17 @@ const image = computed(() => props.images[props.index])
document.addEventListener('keyup', handleKeyboard)
onMounted(() => {
- imageElement.value.addEventListener('load', () => isLoading.value = false)
+ imageElement.value.addEventListener('load', () => (isLoading.value = false))
document.body.classList.add('overflow-hidden')
})
-onUnmounted(() => {
+onUnmounted(() => {
document.removeEventListener('keyup', handleKeyboard)
document.body.classList.remove('overflow-hidden')
})
watch(
- () => props.index,
- () => isLoading.value = true
+ () => props.index,
+ () => (isLoading.value = true)
)
diff --git a/src/components/Modal/VModal.global.vue b/src/components/Modal/VModal.global.vue
new file mode 100644
index 0000000..1ddc78d
--- /dev/null
+++ b/src/components/Modal/VModal.global.vue
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+ emit('close')"
+ />
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/modules/otus/components/DWCDownload.vue b/src/modules/otus/components/DWCDownload.vue
index 86864f8..ae77638 100644
--- a/src/modules/otus/components/DWCDownload.vue
+++ b/src/modules/otus/components/DWCDownload.vue
@@ -1,7 +1,7 @@
diff --git a/src/modules/otus/components/Panel/PanelContent/PanelContent.vue b/src/modules/otus/components/Panel/PanelContent/PanelContent.vue
index 57aceab..d59489a 100644
--- a/src/modules/otus/components/Panel/PanelContent/PanelContent.vue
+++ b/src/modules/otus/components/Panel/PanelContent/PanelContent.vue
@@ -11,6 +11,7 @@
diff --git a/src/modules/otus/components/Panel/PanelNomenclature/PanelNomenclature.vue b/src/modules/otus/components/Panel/PanelNomenclature/PanelNomenclature.vue
index 8c3b367..09e2f6f 100644
--- a/src/modules/otus/components/Panel/PanelNomenclature/PanelNomenclature.vue
+++ b/src/modules/otus/components/Panel/PanelNomenclature/PanelNomenclature.vue
@@ -4,7 +4,6 @@
diff --git a/src/modules/otus/components/SiteMap.vue b/src/modules/otus/components/SiteMap.vue
new file mode 100644
index 0000000..a4deff3
--- /dev/null
+++ b/src/modules/otus/components/SiteMap.vue
@@ -0,0 +1,34 @@
+
+
+
+
+ Sitemap
+
+
+
+ Sitemap requests
+
+
+ -
+ {{ key }}: {{ item }}
+
+
+
+
+
+
+
diff --git a/src/modules/otus/helpers/useOtuPageRequest.js b/src/modules/otus/helpers/useOtuPageRequest.js
new file mode 100644
index 0000000..f426305
--- /dev/null
+++ b/src/modules/otus/helpers/useOtuPageRequest.js
@@ -0,0 +1,12 @@
+import { useOtuPageRequestStore } from '../store/request'
+
+export function useOtuPageRequest(key, requestFunction) {
+ const store = useOtuPageRequestStore()
+ const request = requestFunction()
+
+ request.then((response) => {
+ store.setRequest(key, response)
+ })
+
+ return request
+}
diff --git a/src/modules/otus/store/actions/loadCatalog.js b/src/modules/otus/store/actions/loadCatalog.js
index bde0dac..cf53b7d 100644
--- a/src/modules/otus/store/actions/loadCatalog.js
+++ b/src/modules/otus/store/actions/loadCatalog.js
@@ -1,19 +1,15 @@
import TaxonWorks from '../../services/TaxonWorks'
-
-function parseStats(obj) {
- return Object.entries(obj)
- .filter(([_, count]) => count)
- .map((item) => item.join(': '))
- .join('; ')
-}
+import { useOtuPageRequest } from '../../helpers/useOtuPageRequest'
export const actionLoadCatalog = {
async loadCatalog(taxonId) {
- const { data } = await TaxonWorks.getTaxonNameCitations(taxonId)
+ const response = await useOtuPageRequest('taxonomy', () =>
+ TaxonWorks.getTaxonNameCitations(taxonId)
+ )
this.catalog = {
- ...data,
- sources: data.sources.map(({ cached, url }) =>
+ ...response.data,
+ sources: response.data.sources.map(({ cached, url }) =>
cached.replace(url, `${url}`)
)
}
diff --git a/src/modules/otus/store/request.js b/src/modules/otus/store/request.js
new file mode 100644
index 0000000..750ddc5
--- /dev/null
+++ b/src/modules/otus/store/request.js
@@ -0,0 +1,33 @@
+import { defineStore } from 'pinia'
+
+export const useOtuPageRequestStore = defineStore('otuPageRequest', {
+ state: () => {
+ return {
+ requests: {}
+ }
+ },
+
+ getters: {
+ getRequest: (state) => {
+ return (key) => state.requests[key]
+ },
+
+ sitemap: (state) => {
+ const entries = Object.entries(state.requests).map(([key, value]) => [
+ key,
+ value.url
+ ])
+
+ return Object.fromEntries(entries)
+ }
+ },
+
+ actions: {
+ setRequest(key, response) {
+ this.requests[key] = {
+ url: response.request.responseURL,
+ data: response.data
+ }
+ }
+ }
+})
diff --git a/src/modules/otus/store/store.js b/src/modules/otus/store/store.js
index 75f6a5d..b467a29 100644
--- a/src/modules/otus/store/store.js
+++ b/src/modules/otus/store/store.js
@@ -1,5 +1,7 @@
import { defineStore } from 'pinia'
import TaxonWorks from '../services/TaxonWorks'
+import { useOtuPageRequest } from '../helpers/useOtuPageRequest'
+import { useOtuPageRequestStore } from './request'
import {
actionLoadDistribution,
actionLoadCatalog,
@@ -30,7 +32,9 @@ export const useOtuStore = defineStore('otuStore', {
},
actions: {
async loadTaxon(id) {
- const taxon = await TaxonWorks.summary(id)
+ const taxon = await useOtuPageRequest('summary', () =>
+ TaxonWorks.summary(id)
+ )
this.taxon = taxon.data
},
@@ -41,6 +45,10 @@ export const useOtuStore = defineStore('otuStore', {
},
async loadInit(otuId) {
+ const requestStore = useOtuPageRequestStore()
+
+ requestStore.$reset()
+
await this.loadOtu(otuId)
await this.loadTaxon(this.otu.taxon_name_id)
await this.loadCatalog(this.otu.taxon_name_id)
@@ -53,7 +61,11 @@ export const useOtuStore = defineStore('otuStore', {
otu_scope: ['all']
}
- this.images = (await TaxonWorks.getOtuImages(otuId, params)).data
+ this.images = (
+ await useOtuPageRequest('panel:images', () =>
+ TaxonWorks.getOtuImages(otuId, params)
+ )
+ ).data
},
...actionLoadDistribution,
diff --git a/src/modules/otus/views/Index.vue b/src/modules/otus/views/Index.vue
index 84db824..dbc2bf1 100644
--- a/src/modules/otus/views/Index.vue
+++ b/src/modules/otus/views/Index.vue
@@ -31,7 +31,8 @@
>
-