diff --git a/src/components/Clipboard/VClipboard.global.vue b/src/components/Clipboard/VClipboard.global.vue
new file mode 100644
index 0000000..6209603
--- /dev/null
+++ b/src/components/Clipboard/VClipboard.global.vue
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
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/IconCheck.global.vue b/src/components/Icon/IconCheck.global.vue
new file mode 100644
index 0000000..e14d285
--- /dev/null
+++ b/src/components/Icon/IconCheck.global.vue
@@ -0,0 +1,15 @@
+
+
+
diff --git a/src/components/Icon/IconClipboard.global.vue b/src/components/Icon/IconClipboard.global.vue
new file mode 100644
index 0000000..ae5a626
--- /dev/null
+++ b/src/components/Icon/IconClipboard.global.vue
@@ -0,0 +1,15 @@
+
+
+
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..f51a159
--- /dev/null
+++ b/src/components/Modal/VModal.global.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+ 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/PanelMap/PanelMap.vue b/src/modules/otus/components/Panel/PanelMap/PanelMap.vue
index 97f0700..e1b345a 100644
--- a/src/modules/otus/components/Panel/PanelMap/PanelMap.vue
+++ b/src/modules/otus/components/Panel/PanelMap/PanelMap.vue
@@ -10,15 +10,15 @@
:geojson="store.distribution.geojson"
@geojson:ready="() => (isLoading = false)"
/>
-
- (isOtuSearchVisible = true)"
- >
- Search
-
-
+
+ (isOtuSearchVisible = true)"
+ >
+ Search
+
+
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..9d158a0
--- /dev/null
+++ b/src/modules/otus/store/request.js
@@ -0,0 +1,35 @@
+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, { data, request }) {
+ const url = request.res?.responseUrl || request.responseURL
+
+ this.requests[key] = {
+ url,
+ 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..2335ccf 100644
--- a/src/modules/otus/views/Index.vue
+++ b/src/modules/otus/views/Index.vue
@@ -31,7 +31,10 @@
>
-
+
+
+
+
'
+ setup() {
+ return h('div')
+ }
})
filePaths.forEach((path) => {