<template> <EntityReportCard :report-card-structure="reportCardStructure" :item-i-d="itemID" :store-module-name="storeModuleName" :entity-i-d="entityID" /> </template> <script> import { mapState } from 'vuex' import RequestNotifications from '@/web-components-submodule/utils/RequestNotifications.js' import EntityReportCard from '~/web-components-submodule/components/common/ReportCards/EntityReportCard.vue' import CompoundReportCardGenerator from '~/report_cards_structure/CompoundReportCardGenerator.js' import EntityNames from '~/web-components-submodule/standardisation/EntityNames.js' import ESProxyService from '~/web-components-submodule/services/ESProxyService.js' import IndexNames from '~/web-components-submodule/standardisation/IndexNames.js' import ObjectPropertyAccess from '~/web-components-submodule/utils/ObjectPropertyAccess.js' import ErrorTracking from '~/web-components-submodule/tracking/ErrorTracking.js' export default { components: { EntityReportCard, }, props: { itemID: { type: String, default: () => undefined, }, }, data() { return { storeModuleName: 'probeReportCard', entityID: EntityNames.EubopenCompound.entityID, } }, computed: mapState({ reportCardStructure(state) { return state[this.storeModuleName].reportCardStructure }, }), async mounted() { try { const paramsFromCompound = await this.getOptionalSectionsParams() const chemblID = await this.getChEMBLID() const showCellHeatlhAndViabilityData = await this.hasCellHeatlhAndViabilityData( chemblID ) const showQualityControlData = await this.hasQualityControlData(chemblID) const showActivityProfileData = await this.hasActivityProfileData( chemblID ) const reportCardStructure = CompoundReportCardGenerator.generateReportCardStructure( { itemID: this.itemID, chemblID, prefName: paramsFromCompound.prefName, isChemicalProbe: paramsFromCompound.isChemicalProbe, isNegativeControl: paramsFromCompound.isNegativeControl, showCellHeatlhAndViabilityData, showQualityControlData, showActivityProfileData, } ) this.$store.dispatch( `${this.storeModuleName}/setReportCardStructure`, reportCardStructure ) this.$store.dispatch(`${this.storeModuleName}/setStructureReady`, true) } catch (error) { ErrorTracking.trackError(error, this) RequestNotifications.dispatchRequestErrorNotification( error, this.$store.dispatch, `There was an error while loading the page structure` ) } }, methods: { async getOptionalSectionsParams() { const docSource = [ 'pref_name', '_metadata.eubopen.is_probe', '_metadata.eubopen.is_control', ] const entityID = EntityNames.EubopenCompound.entityID const indexName = IndexNames.getIndexNameFromEntityID(entityID) const compoundResponse = await ESProxyService.getESDocument( indexName, this.itemID, docSource ) const compoundData = compoundResponse.data._source const prefName = ObjectPropertyAccess.getPropertyPalue( compoundData, 'pref_name', '' ) const isChemicalProbe = ObjectPropertyAccess.getPropertyPalue( compoundData, '_metadata.eubopen.is_probe', false ) const isNegativeControl = ObjectPropertyAccess.getPropertyPalue( compoundData, '_metadata.eubopen.is_control', false ) return { prefName, isChemicalProbe, isNegativeControl, } }, async getChEMBLID() { const chemblIDResponse = await ESProxyService.getESDocument( IndexNames.getIndexNameFromEntityID( EntityNames.EubopenCompound.entityID ), this.itemID, ['molecule_chembl_id'] ) return chemblIDResponse.data._source.molecule_chembl_id }, async hasCellHeatlhAndViabilityData(chemblID) { const cellHeatlhAndViabilityDataPath = `/eubopen/visualisations/compound/cell_viability_and_health_data/${chemblID}` const cellHealthAndViabilityData = await ESProxyService.getGenericData( cellHeatlhAndViabilityDataPath ) const numDataPoints = cellHealthAndViabilityData.data.num_datapoints return numDataPoints > 0 }, async hasQualityControlData(chemblID) { const entityID = EntityNames.EubopenActivity.entityID const indexName = IndexNames.getIndexNameFromEntityID(entityID) const query = { size: 0, query: { bool: { must: [ { terms: { molecule_chembl_id: [chemblID] } }, { terms: { '_metadata.eubopen.assay_type.type.description': [ 'Cell Health Data', 'Incucyte cell viability', 'Thermal shift assay QC Liability', ], }, }, ], }, }, } const qtData = await ESProxyService.getESData(indexName, query) const numHits = qtData.data.es_response.hits.total.value return numHits > 0 }, async hasActivityProfileData(chemblID) { const entityID = EntityNames.EubopenActivity.entityID const indexName = IndexNames.getIndexNameFromEntityID(entityID) const query = { size: 0, query: { bool: { must: [{ terms: { molecule_chembl_id: [chemblID] } }], must_not: [ { terms: { '_metadata.eubopen.assay_type.type.description': [ 'Cell Health Data', 'Incucyte cell viability', 'Thermal shift assay QC Liability', ], }, }, ], }, }, } const qtData = await ESProxyService.getESData(indexName, query) const numHits = qtData.data.es_response.hits.total.value return numHits > 0 }, }, } </script> <style></style>