Skip to content
Snippets Groups Projects
_id.vue 3.77 KiB
Newer Older
  <ChemicalProbeReportCard :item-i-d="itemID" />
</template>

<script>
import MetadataTagsGenerator from '@chembl/metadata-tags-generator'
import ChemicalProbeReportCard from '~/components/report_cards/chemical_probe/ChemicalProbeReportCard.vue'
import MetadataLoader from '~/web-components-submodule/metadata/MetadataLoader.js'
import EntityNames from '~/web-components-submodule/standardisation/EntityNames.js'
import ObjectPropertyAccess from '~/web-components-submodule/utils/ObjectPropertyAccess.js'
import StringUtils from '~/web-components-submodule/utils/StringUtils.js'
export default {
  components: {
    ChemicalProbeReportCard,
  },
  async asyncData({ $axios, error, params }) {
    try {
      const docSource = [
        'molecule_chembl_id',
        'pref_name',
        'molecule_synonyms',
        '_metadata.compound_generated.image_file',
      ]
      const result = await MetadataLoader.getMetadataForEntity(
        EntityNames.EubopenCompound.entityID,
        params.id,
        docSource
      )
      const itemURL = `https://gateway.eubopen.org/compound/${params.id}`
      const imgBaseURL = 'https://www.ebi.ac.uk/chembl/api/data/image'
      const fallbackImgBaseURL = ''
      const bioschemasMetadata = await MetadataTagsGenerator.EUbOPEN.CompoundMetadata.getBioschemasMetadata(
        {
          itemID: params.id,
          itemURL,
          imgBaseURL,
          fallbackImgBaseURL,
        }
      )
      return {
        rawMetadata: result.data._source,
        bioschemasJSONLD: bioschemasMetadata,
      }
    } catch (e) {
      error({
        statusCode: 404,
        message: `No ${EntityNames.EubopenCompound.singularEntityName} found with id ${params.id}`,
      })
    }
  },
  head() {
    const name = this.rawMetadata.pref_name || this.itemID
    const synonymsList = this.rawMetadata.molecule_synonyms
      .filter((synonym) => synonym.syn_type !== 'TRADE_NAME')
      .map((synonym) => synonym.molecule_synonym)
    const synonymsText =
      synonymsList.length === 0 ? '' : `Synonyms: ${synonymsList.join(', ')}`
    const descriptionText = StringUtils.truncateString(
      `Explore ${name} ${this.rawMetadata.pref_name} in EUbOPEN. ${synonymsText}`,
      170
    )
    const titleText = `${EntityNames.EubopenCompound.singularEntityName} ${name}`
    const canonicalURL =
      `https://${process.env.canonicalDomain}` + this.$route.path
    const chemblID = this.rawMetadata.molecule_chembl_id
    const generatedImageFilePath = ObjectPropertyAccess.getPropertyPalue(
      this.rawMetadata,
      '_metadata.compound_generated.image_file',
      undefined,
      true
    )
    if (generatedImageFilePath == null) {
      imgURL = `${process.env.chemblWSBaseUrl}/image/${chemblID}.svg`
    } else {
      imgURL = `${process.env.fallbackIMGsBaseUrl}/compound_placeholders/${this.generatedImageFilePath}`
    }
    return {
      title: titleText,
      meta: [
        {
          hid: 'description',
          name: 'description',
          content: descriptionText,
        },
        { hid: 'og:title', name: 'og:title', content: titleText },
        {
          hid: 'og:description',
          name: 'og:description',
          content: descriptionText,
        },
        { hid: 'og:type', name: 'og:type', content: 'object' },
        { hid: 'og:url', name: 'og:url', content: canonicalURL },
        { hid: 'og:image', name: 'og:image', content: imgURL },
      ],
      link: [
        {
          rel: 'canonical',
          href: canonicalURL,
        },
      ],
      script: [
        {
          id: 'JSON_LD',
          type: 'application/ld+json',
          json: this.bioschemasJSONLD,
        },
      ],
    }
  },
  computed: {
    itemID() {
      return this.$route.params.id
    },
  },
}
</script>

<style></style>