{"version":3,"file":"PublicationPost-7nXzhaeK.js","sources":["../../src/queries/GetPublicationPost.js","../../src/components/publication/PublicationPost.vue"],"sourcesContent":["import gql from 'graphql-tag';\n\nexport const publicationPostQuery = gql`\n  query getPublication($slug: ID!) {\n    publication(id: $slug, idType: SLUG) {\n      content\n      featuredImage {\n        node {\n          altText\n          caption\n          description\n          mediaDetails {\n            height\n            width\n          }\n          sourceUrl\n        }\n      }\n      imageSrcset\n      publicationData {\n        authors {\n          author\n          type\n        }\n        fully_illustrated\n        hardcover\n        height\n        num_illustrations\n        num_pages\n        publication_year\n        purchase_url\n        softcover\n        width\n      }\n      publicationAuthors(first: 100) {\n        nodes {\n          name\n          publication_authorId\n          slug\n          sort\n        }\n      }\n      publicationSubjects {\n        nodes {\n          name\n          slug\n        }\n      }\n      slug\n      title\n    }\n  }\n`;\n","<template>\n  <article v-if=\"post && Object.keys(post).length\" :class=\"[$style.publication, 'container']\">\n    <PostFeaturedImage\n      v-if=\"post.featuredImage\"\n      :is-aspect=\"true\"\n      :featured-image=\"post.featuredImage.node\"\n      :srcset=\"post.imageSrcset\"\n      :class=\"$style.featuredImage\"\n      :ga4-data=\"\n        JSON.stringify({\n          click_type: 'hero',\n          component: 'PublicationPost',\n          content_group: 'publication',\n          gtm_tag: 'image',\n          file_name: `${post.featuredImage.node.sourceUrl.split('/').pop()}`,\n        })\n      \"\n    ></PostFeaturedImage>\n    <header :class=\"$style.header\">\n      <nav>\n        <BackLink\n          component=\"PublicationPost\"\n          group=\"publication\"\n          label=\"Publications\"\n          name=\"PublicationSection\"\n        ></BackLink>\n      </nav>\n      <h1 class=\"space-24-32-above\" v-html=\"post.title\"></h1>\n      <PublicationAuthors :data=\"post\"></PublicationAuthors>\n      <a\n        v-if=\"post.publicationData.purchase_url\"\n        class=\"button-primary\"\n        :href=\"post.publicationData.purchase_url\"\n        target=\"_blank\"\n      >\n        Buy the Catalogue\n      </a>\n    </header>\n    <ProcessContent\n      ref=\"mainContent\"\n      :class=\"$style.content\"\n      :content=\"post.content\"\n      wrapper=\"section\"\n    ></ProcessContent>\n    <footer :class=\"$style.footer\">\n      <p class=\"info\">Subject:</p>\n      <ul class=\"tags\">\n        <li v-for=\"(subject, index) in post.publicationSubjects.nodes\" :key=\"index\">\n          <router-link\n            :to=\"{\n              name: 'PublicationTaxSection',\n              params: {\n                slug: subject.slug,\n                subtype: 'publication_subject',\n              },\n            }\"\n            :ga4-event=\"\n              JSON.stringify({\n                click_type: 'taxonomy',\n                component: 'PublicationPost',\n                content_group: 'publication',\n                gtm_tag: 'link',\n                link_text: `${subject.name}`,\n                link_url: `${subject.slug}`,\n              })\n            \"\n          >\n            {{ subject.name }}\n          </router-link>\n        </li>\n      </ul>\n    </footer>\n  </article>\n</template>\n\n<script setup lang=\"ts\">\nimport BackLink from '@/components/common/BackLink.vue';\nimport { dataLoaded, useHandleError, useMetaData } from '@/composables/Common.js';\nimport PostFeaturedImage from '@/components/common/PostFeaturedImage.vue';\nimport ProcessContent from '@/components/common/ProcessContent.vue';\nimport { Publication } from '@/types/publication.interface';\nimport PublicationAuthors from '@/components/publication/PublicationAuthors.vue';\nimport { publicationPostQuery } from '@/queries/GetPublicationPost';\nimport { ref } from 'vue';\nimport { useQuery } from 'villus';\n\nconst props = defineProps<{\n  slug: string;\n}>();\n\nconst { handleError } = useHandleError();\nconst { setMetaDescription, setMetaTitle } = useMetaData();\n\nconst post = ref<Publication>({});\n\nconst { data } = useQuery({\n  onData: data => {\n    if (data.publication && Object.keys(data.publication).length) {\n      post.value = data.publication;\n      setMetaTitle(data.publication.title);\n      setMetaDescription(data.publication.excerpt);\n      dataLoaded();\n    }\n\n    if (!data.publication || Object.keys(data.publication).length === 0) {\n      handleError('PublicationPost', props.slug);\n    }\n  },\n  query: publicationPostQuery,\n  variables: { slug: props.slug },\n});\n</script>\n\n<script lang=\"ts\">\nexport default {\n  beforeRoute(params, villusClient) {\n    return new Promise<void>((resolve, reject) => {\n      villusClient\n        .executeQuery({\n          query: publicationPostQuery,\n          variables: {\n            slug: params.slug,\n          },\n        })\n        .then(() => resolve())\n        .catch((err) => reject(err));\n    });\n  },\n};\n</script>\n\n<style lang=\"scss\" module>\n.publication {\n  @include space-0-above;\n}\n\n@media (min-width: $break-point) {\n  .content,\n  .footer,\n  .more {\n    grid-column: 1 / span 8;\n  }\n\n  .featured-image,\n  .header {\n    grid-column: span 12;\n  }\n\n  .header {\n    @include grid;\n\n    > * {\n      grid-column: 1 / span 8;\n    }\n\n    a {\n      margin-left: 0;\n      width: fit-content;\n    }\n\n    nav {\n      grid-column: span 12;\n    }\n  }\n\n  .publication {\n    @include grid;\n  }\n}\n</style>\n"],"names":["publicationPostQuery","gql","__default__","params","villusClient","resolve","reject","err","props","__props","handleError","useHandleError","setMetaDescription","setMetaTitle","useMetaData","post","ref","useQuery","data","dataLoaded"],"mappings":"sfAEO,MAAMA,EAAuBC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8CCgHrBC,EAAA,CACb,YAAYC,EAAQC,EAAc,CAChC,OAAO,IAAI,QAAc,CAACC,EAASC,IAAW,CAC5CF,EACG,aAAa,CACZ,MAAOJ,EACP,UAAW,CACT,KAAMG,EAAO,IAAA,CACf,CACD,EACA,KAAK,IAAME,GAAS,EACpB,MAAOE,GAAQD,EAAOC,CAAG,CAAC,CAAA,CAC9B,CAAA,CAEL,8DA1CA,MAAMC,EAAQC,EAIR,CAAE,YAAAC,CAAY,EAAIC,EAAe,EACjC,CAAE,mBAAAC,EAAoB,aAAAC,CAAa,EAAIC,EAAY,EAEnDC,EAAOC,EAAiB,EAAE,EAEf,OAAAC,EAAS,CACxB,OAAQC,GAAQ,CACVA,EAAK,aAAe,OAAO,KAAKA,EAAK,WAAW,EAAE,SACpDH,EAAK,MAAQG,EAAK,YACLA,EAAAA,EAAK,YAAY,KAAK,EAChBA,EAAAA,EAAK,YAAY,OAAO,EAChCC,EAAA,IAGT,CAACD,EAAK,aAAe,OAAO,KAAKA,EAAK,WAAW,EAAE,SAAW,IACpDR,EAAA,kBAAmBF,EAAM,IAAI,CAE7C,EACA,MAAOR,EACP,UAAW,CAAE,KAAMQ,EAAM,IAAK,CAC/B,CAAA"}