From d6bcb5a589f66288e7acf91ca4154e8d5a559f12 Mon Sep 17 00:00:00 2001 From: David Mendez <dmendez@ebi.ac.uk> Date: Fri, 8 Oct 2021 10:55:56 +0100 Subject: [PATCH] Create component to list properties and values for and item --- .../chemical_probe/CalculatedProperties.vue | 69 ++---------- .../PropertiesValuesInColumns.vue | 106 ++++++++++++++++++ web-components-submodule | 2 +- 3 files changed, 116 insertions(+), 61 deletions(-) create mode 100644 components/report_cards/shared/SingleItemProperties/PropertiesValuesInColumns.vue diff --git a/components/report_cards/chemical_probe/CalculatedProperties.vue b/components/report_cards/chemical_probe/CalculatedProperties.vue index 405e6e2..7858ac0 100644 --- a/components/report_cards/chemical_probe/CalculatedProperties.vue +++ b/components/report_cards/chemical_probe/CalculatedProperties.vue @@ -1,44 +1,22 @@ <template> <v-card> <v-card-text> - <v-skeleton-loader v-if="!dataLoaded" type="text@6"></v-skeleton-loader> - <v-row v-else dense no-gutters> - <v-col - v-for="item in calculatedProperties" - :key="item.propLabel" - cols="12" - sm="6" - lg="4" - xl="3" - > - <v-list dense> - <v-list-item :key="item.propLabel"> - <v-list-item-content> - <v-list-item-title> - <div class="d-flex justify-space-between"> - <div> - <b>{{ item.label }}:</b> - </div> - <div> - {{ item.value }} - </div> - </div> - </v-list-item-title> - </v-list-item-content> - </v-list-item> - <v-divider :key="`${item.propLabel}-divider`" /> - </v-list> - </v-col> - </v-row> + <PropertiesValuesInColumns + :entity-i-d="entityID" + :item-i-d="itemID" + properties-group="calculated_properties" + /> </v-card-text> </v-card> </template> <script> -import RequestNotifications from '@/web-components-submodule/utils/RequestNotifications.js' -import ItemPropertiesLoader from '~/web-components-submodule/utils/ItemPropertiesLoader.js' +import PropertiesValuesInColumns from '~/components/report_cards/shared/SingleItemProperties/PropertiesValuesInColumns.vue' export default { + components: { + PropertiesValuesInColumns, + }, props: { itemID: { type: String, @@ -49,35 +27,6 @@ export default { default: () => undefined, }, }, - data() { - return { - dataLoaded: false, - calculatedProperties: [], - } - }, - mounted() { - this.loadData() - }, - methods: { - loadData() { - ItemPropertiesLoader.getItemProperties( - this.entityID, - this.itemID, - 'calculated_properties' - ) - .then((response) => { - this.calculatedProperties = response - this.dataLoaded = true - }) - .catch((error) => { - RequestNotifications.dispatchRequestErrorNotification( - error, - this.$store.dispatch, - `There was an error while fetching the list of properties for the calculated properties!` - ) - }) - }, - }, } </script> diff --git a/components/report_cards/shared/SingleItemProperties/PropertiesValuesInColumns.vue b/components/report_cards/shared/SingleItemProperties/PropertiesValuesInColumns.vue new file mode 100644 index 0000000..6135266 --- /dev/null +++ b/components/report_cards/shared/SingleItemProperties/PropertiesValuesInColumns.vue @@ -0,0 +1,106 @@ +<template> + <div> + <v-skeleton-loader v-if="!dataLoaded" type="text@6"></v-skeleton-loader> + <v-row v-else dense no-gutters> + <v-col + v-for="item in shownProperties" + :key="item.propLabel" + cols="12" + sm="6" + lg="4" + xl="3" + > + <v-list dense> + <v-list-item :key="item.propLabel"> + <v-list-item-content> + <v-list-item-title> + <div class="d-flex justify-space-between"> + <div> + <b>{{ item.label }}:</b> + </div> + <div> + {{ item.value }} + </div> + </div> + </v-list-item-title> + </v-list-item-content> + </v-list-item> + <v-divider :key="`${item.propLabel}-divider`" /> + </v-list> + </v-col> + </v-row> + </div> +</template> + +<script> +import RequestNotifications from '@/web-components-submodule/utils/RequestNotifications.js' +import ItemPropertiesLoader from '~/web-components-submodule/utils/ItemPropertiesLoader.js' + +export default { + props: { + itemID: { + type: String, + default: () => undefined, + }, + entityID: { + type: String, + default: () => undefined, + }, + propertiesGroup: { + type: String, + default: () => undefined, + }, + useDefaultPropertySlot: { + type: Boolean, + default: () => true, + }, + }, + data() { + return { + dataLoaded: false, + loadedProperties: [], + } + }, + computed: { + shownProperties() { + return this.loadedProperties.filter((item) => item.show) + }, + item() { + const item = { + id: this.itemID, + data: {}, + highlight: {}, + } + for (const loadedProperty of this.loadedProperties) { + item.data[loadedProperty.propID] = loadedProperty.value + } + return item + }, + }, + mounted() { + this.loadData() + }, + methods: { + loadData() { + ItemPropertiesLoader.getItemProperties( + this.entityID, + this.itemID, + this.propertiesGroup + ) + .then((response) => { + this.loadedProperties = response + this.dataLoaded = true + }) + .catch((error) => { + RequestNotifications.dispatchRequestErrorNotification( + error, + this.$store.dispatch, + `There was an error while fetching the list of properties for the calculated properties!` + ) + }) + }, + }, +} +</script> + +<style></style> diff --git a/web-components-submodule b/web-components-submodule index a370e29..e2ad6bc 160000 --- a/web-components-submodule +++ b/web-components-submodule @@ -1 +1 @@ -Subproject commit a370e2950fc7e0531a23b06f70ecbef7b9664821 +Subproject commit e2ad6bcd5e141d1d893f188a12ab0a31cd52b084 -- GitLab