Skip to content
Snippets Groups Projects
Commit b0937a6d authored by Orlin Malkja's avatar Orlin Malkja
Browse files

Merge branch 'omalkja/convert-ItemMeta,ManifestMeta,MetaItem-Typescript' into 'develop'

refactor a few components of Metadata: ItemMetadata.vue, ManifestMetadata.vue, MetadataItem.vue

See merge request !304
parents fd6a251f ad648d20
No related branches found
No related tags found
1 merge request!304refactor a few components of Metadata: ItemMetadata.vue, ManifestMetadata.vue, MetadataItem.vue
Pipeline #467504 passed
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
</div> </div>
</template> </template>
<script setup> <script setup lang="ts">
import { computed } from 'vue'; import { computed } from 'vue';
import { useStore } from 'vuex'; import { useStore } from 'vuex';
...@@ -15,13 +15,13 @@ import MetadataItem from '@/components/metadata/MetadataItem.vue'; ...@@ -15,13 +15,13 @@ import MetadataItem from '@/components/metadata/MetadataItem.vue';
const store = useStore(); const store = useStore();
const item = computed(() => store.getters['contents/item']); const item = computed<Item>(() => store.getters['contents/item']);
const itemUrl = computed(() => store.getters['contents/itemUrl']); const itemUrl = computed<string>(() => store.getters['contents/itemUrl']);
const manifest = computed(() => store.getters['contents/manifest']); const manifest = computed<Manifest>(() => store.getters['contents/manifest']);
const itemsCount = computed(() => manifest.value?.sequence.length); const itemsCount = computed<number>(() => manifest.value?.sequence.length);
const labels = computed(() => store.getters['config/config'].labels); const labels = computed<Labels>(() => store.getters['config/config'].labels);
const number = computed(() => (manifest.value ? manifest.value.sequence.findIndex(({ id }) => id === itemUrl.value) + 1 : 1)); const number = computed<number>(() => (manifest.value ? manifest.value.sequence.findIndex(({ id }) => id === itemUrl.value) + 1 : 1));
const total = computed(() => itemsCount.value ?? 1); const total = computed<number>(() => itemsCount.value ?? 1);
const metadata = computed(() => ( const metadata = computed(() => (
[ [
{ key: 'label', value: item.value.n }, { key: 'label', value: item.value.n },
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
</div> </div>
</template> </template>
<script setup> <script setup lang="ts">
import { computed } from 'vue'; import { computed } from 'vue';
import { useStore } from 'vuex'; import { useStore } from 'vuex';
import MetadataItem from '@/components/metadata/MetadataItem.vue'; import MetadataItem from '@/components/metadata/MetadataItem.vue';
...@@ -16,12 +16,12 @@ import Actor from '@/components/metadata/Actor.vue'; ...@@ -16,12 +16,12 @@ import Actor from '@/components/metadata/Actor.vue';
const store = useStore(); const store = useStore();
const manifest = computed(() => store.getters['contents/manifest']); const manifest = computed<Manifest>(() => store.getters['contents/manifest']);
const manifests = computed(() => store.getters['contents/manifests']); const manifests = computed<Manifest[]>(() => store.getters['contents/manifests']);
const manifestHasItems = computed(() => manifest.value?.sequence.length > 0); const manifestHasItems = computed<boolean>(() => manifest.value?.sequence.length > 0);
const number = computed(() => (manifests.value !== null ? manifests.value.findIndex(({ id }) => id === manifest.value.id) + 1 : 1)); const number = computed<number>(() => (manifests.value !== null ? manifests.value.findIndex(({ id }) => id === manifest.value.id) + 1 : 1));
const total = computed(() => (manifests.value !== null ? manifests.value.length : 1)); const total = computed<number>(() => (manifests.value !== null ? manifests.value.length : 1));
const labels = computed(() => store.getters['config/config'].labels); const labels = computed<Labels>(() => store.getters['config/config'].labels);
const metadata = computed(() => { const metadata = computed(() => {
if (!manifest.value) return []; if (!manifest.value) return [];
return [ return [
...@@ -33,7 +33,7 @@ const metadata = computed(() => { ...@@ -33,7 +33,7 @@ const metadata = computed(() => {
...(manifest.value.metadata || []), ...(manifest.value.metadata || []),
]; ];
}); });
const actor = computed(() => manifest.value?.actor); const actor = computed<Actor[] | undefined>(() => manifest.value?.actor);
</script> </script>
<style scoped> <style scoped>
......
...@@ -9,19 +9,19 @@ ...@@ -9,19 +9,19 @@
</div> </div>
</template> </template>
<script setup> <script setup lang="ts">
import { computed } from 'vue'; import { computed } from 'vue';
import MetadataLink from '@/components/metadata/MetadataLink.vue'; import MetadataLink from '@/components/metadata/MetadataLink.vue';
import MetadataValue from '@/components/metadata/MetadataValue.vue'; import MetadataValue from '@/components/metadata/MetadataValue.vue';
const props = defineProps({ const props = defineProps<{
item: Object, item: Metadata,
}); }>();
const label = computed(() => props.item?.key || 'other'); const label = computed<string>(() => props.item?.key || 'other');
const childItems = computed(() => props.item?.metadata || []); const childItems = computed(<Metadata>() => props.item?.metadata || []);
function isLink() { function isLink(): boolean {
const regex = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|])/ig; const regex = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|])/ig;
const matches = (typeof props.item?.key === 'string') ? props.item?.key?.match(regex) : null; const matches = (typeof props.item?.key === 'string') ? props.item?.key?.match(regex) : null;
......
...@@ -22,7 +22,14 @@ declare global { ...@@ -22,7 +22,14 @@ declare global {
modules?: Module[] modules?: Module[]
} }
interface Content {
'@context': string,
url: string,
type: string,
integrity?: DataIntegrity
}
interface DataIntegrity { interface DataIntegrity {
type: string, type: string,
value: string value: string
...@@ -42,6 +49,29 @@ declare global { ...@@ -42,6 +49,29 @@ declare global {
license: License license: License
} }
interface Item {
'@context': string,
textapi: string,
id: string,
title?: Title[],
type: ItemType,
n?: string,
lang: ItemLangCode[],
langAlt?: string[],
content: Content[],
description?: string,
image?: Image,
annotationCollection?: string,
modules?: Module[]
}
type ItemType = 'section' | 'page' | 'full'
type ItemLangCode = 'eng' | 'fra' | 'deu' | 'ara' | 'arb' | 'arz' | 'apc' | 'acm' | 'zho' | 'cmn' | 'yue' | 'nan' | 'tha' | 'sou' | 'nod' | 'khb' | 'lao/tts' | 'pht'
interface Labels {
item: string,
manifest?: string
}
interface License { interface License {
id: string, id: string,
notes?: string notes?: string
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment