Skip to content

Commit 03dc3c8

Browse files
committed
Better storage:schemes rendering
1 parent a487a84 commit 03dc3c8

File tree

2 files changed

+63
-2
lines changed

2 files changed

+63
-2
lines changed

src/components/metadata/MetadataEntry.vue

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
<MetadataTable v-bind="$props" />
88
</b-col>
99
<b-col v-else md="9" class="value">
10-
<div v-html="formatted" />
10+
<Histogram v-if="field === 'histogram' && isObject" :data="value" />
11+
<StorageSchemes v-else-if="field === 'storage:schemes' && isObject" :data="value" />
12+
<div v-else v-html="formatted" />
1113
</b-col>
1214
</b-row>
1315
</template>
@@ -26,14 +28,19 @@ const FORCE_TABLE = [
2628
export default {
2729
name: "MetadataEntry",
2830
components: {
29-
MetadataTable: () => import('./MetadataTable.vue')
31+
Histogram: () => import('./Histogram.vue'),
32+
MetadataTable: () => import('./MetadataTable.vue'),
33+
StorageSchemes: () => import('./StorageSchemes.vue')
3034
},
3135
mixins: [
3236
EntryMixin
3337
],
3438
computed: {
3539
showTable() {
3640
return FORCE_TABLE.includes(this.field) || this.itemOrder.length > 0 && Utils.size(this.value) >= 3;
41+
},
42+
isObject() {
43+
return Utils.isObject(this.value);
3744
}
3845
}
3946
};
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<template>
2+
<div class="storage-schemes mb-4">
3+
<ul>
4+
<li v-for="(scheme, id) in data" :key="id">
5+
<p><strong>{{ scheme.title || id }}</strong> (<code>{{ id }}</code>)</p>
6+
<Description v-if="scheme.description" :description="scheme.description" />
7+
<dl>
8+
<template v-for="(entry, key) in formatted[id]">
9+
<dt :key="key">{{ entry.label }}</dt>
10+
<dd :key="key" v-html="entry.value" />
11+
</template>
12+
</dl>
13+
</li>
14+
</ul>
15+
</div>
16+
</template>
17+
18+
<script>
19+
import { Registry, format, formatKey } from '@radiantearth/stac-fields';
20+
21+
export default {
22+
name: "StorageSchemes",
23+
components: {
24+
Description: () => import('../Description.vue')
25+
},
26+
props: {
27+
data: {
28+
type: Object,
29+
required: true
30+
}
31+
},
32+
computed: {
33+
spec() {
34+
return Registry.getSpecification('storage:schemes');
35+
},
36+
formatted() {
37+
const obj = {};
38+
for (const id in this.data) {
39+
obj[id] = {};
40+
for (const key in this.data[id]) {
41+
if (key == 'title' || key == 'description') {
42+
continue;
43+
}
44+
obj[id][key] = {
45+
label: formatKey(key),
46+
value: format(this.data[id][key], key, null, null, null, this.spec?.items[key])
47+
};
48+
}
49+
}
50+
return obj;
51+
}
52+
}
53+
};
54+
</script>

0 commit comments

Comments
 (0)