{"version":3,"file":"ExhibitionsPost-Dp4DEBVG.js","sources":["../../src/queries/ExhibitionQuery.js","../../src/components/exhibitions/ExhibitionsPost.vue"],"sourcesContent":["import gql from 'graphql-tag';\n\nexport const exhibitionQuery = gql`\n  query getExhibition($slug: ID!) {\n    exhibition(id: $slug, idType: SLUG) {\n      content\n      dates {\n          end {\n            day\n            month\n            year\n          }\n          start {\n            day\n            month\n            year\n          }\n          status\n          label\n      }\n      excerpt\n      featuredImage {\n        node {\n          altText\n          description\n          mediaDetails {\n            height\n            width\n          }\n          sourceUrl\n        }\n      }\n      featuredImageWidth\n      imageSrcset\n      mediaBanner {\n        altText\n        caption\n        carouselItems {\n          altText\n          caption\n          enableDescription\n          enableLink\n          enablePlayPause\n          enableSound\n          imageUrl\n          itemType\n          linksTo\n          muxLongVideoId\n          muxShortVideoId\n          muxVideoMobileId\n        }\n        enabled\n        enableDescription\n        enableLink\n        enablePlayPause\n        enableSound\n        imageUrl\n        itemType\n        linksTo\n        mediaType\n        muxLongVideoId\n        muxShortVideoId\n        muxVideoMobileId\n      }\n      ticketLink\n      title\n    }\n  }\n`;","<template>\n  <article v-if=\"exhibition && Object.keys(exhibition).length\">\n    <MediaBannerHandler\n      v-if=\"exhibition.mediaBanner && exhibition.mediaBanner.enabled\"\n      :media-banner=\"exhibition.mediaBanner\"\n      :is-header-banner=\"true\"\n    ></MediaBannerHandler>\n    <PostFeaturedImage\n      v-else-if=\"exhibition.featuredImage\"\n      :featured-image=\"exhibition.featuredImage.node\"\n      :ga4-event=\"\n        JSON.stringify({\n          click_type: 'hero',\n          component: 'ExhibitionsPost',\n          content_group: 'exhibition',\n          gtm_tag: 'image',\n          file_name: `${exhibition.featuredImage.node.sourceUrl.split('/').pop()}`,\n        })\n      \"\n      :is-wide=\"exhibition.featuredImageWidth === 'wide'\"\n      :srcset=\"exhibition.imageSrcset\"\n    ></PostFeaturedImage>\n    <section :class=\"$style.grid\">\n      <header>\n        <nav>\n          <BackLink\n            v-if=\"exhibition.dates\"\n            component=\"ExhibitionsPost\"\n            group=\"exhibition\"\n            :label=\"exhibition.dates.status !== 'past' ? 'Exhibitions' : 'Past Exhibitions'\"\n            :name=\"exhibition.dates.status !== 'past' ? 'ExhibitionsPage' : 'ExhibitionsPast'\"\n            :params=\"{ past: exhibition.dates.status === 'past' }\"\n          ></BackLink>\n        </nav>\n        <div :class=\"$style.content\">\n          <h1 v-html=\"exhibition.title\"></h1>\n          <span v-if=\"exhibition.dates.label\" :class=\"$style.subtitle\">\n            {{ exhibition.dates.label }}\n          </span>\n          <ExhibitionDate\n            v-else\n            :begin=\"exhibition.dates.start\"\n            :class=\"$style.subtitle\"\n            :end=\"exhibition.dates.end\"\n            :status=\"exhibition.dates.status\"\n          ></ExhibitionDate>\n          <a\n            v-if=\"buyTickets(exhibition)\"\n            :class=\"[$style.buy, 'button-primary']\"\n            :href=\"exhibition.ticketLink\"\n            :ga4-event=\"\n              JSON.stringify({\n                click_type: 'cta',\n                component: 'ExhibitionsPost',\n                content_group: 'exhibition',\n                gtm_tag: 'link',\n                link_text: 'Buy Tickets',\n                link_url: `${exhibition.ticketLink}`,\n              })\n            \"\n            target=\"_blank\"\n          >\n            Buy Tickets\n          </a>\n        </div>\n      </header>\n      <ProcessContent\n        v-if=\"exhibition && exhibition.content\"\n        :class=\"$style.content\"\n        :content=\"exhibition.content\"\n        wrapper=\"section\"\n      ></ProcessContent>\n    </section>\n  </article>\n</template>\n\n<script setup lang=\"ts\">\nimport BackLink from '@/components/common/BackLink.vue';\nimport { BootStrap } from '@/types/global.interface';\nimport { dataLoaded, useHandleError, useMetaData } from '@/composables/Common.js';\nimport { Exhibition } from '@/types/exhibition.interface';\nimport ExhibitionDate from '@/components/exhibitions/ExhibitionDate.vue';\nimport { exhibitionQuery } from '@/queries/ExhibitionQuery';\nimport { inject, ref } from 'vue';\nimport MediaBannerHandler from '@/components/mediaBanner/MediaBannerHandler.vue';\nimport PostFeaturedImage from '@/components/common/PostFeaturedImage.vue';\nimport ProcessContent from '@/components/common/ProcessContent.vue';\nimport { storeToRefs } from 'pinia';\nimport { useMainStore } from '@/stores/mainStore.js';\nimport { useQuery } from 'villus';\n\nconst props = defineProps<{\n  slug: string;\n}>();\n\nconst bootstrap = inject<BootStrap>('bootstrap');\n\nconst store = useMainStore();\nconst { useBootstrap } = storeToRefs(store);\nconst { handleError } = useHandleError();\nconst { setMetaDescription, setMetaTitle } = useMetaData();\n\nconst exhibition = ref<Exhibition>({});\nconst shouldSkip = ref(true);\n\nconst { data } = useQuery({\n  onData: (data) => {\n    if (data.exhibition && Object.keys(data.exhibition).length) {\n      exhibition.value = data.exhibition;\n      setMetaTitle(data.exhibition.title);\n      setMetaDescription(data.exhibition.excerpt);\n      dataLoaded();\n    }\n\n    if (!data.exhibition || Object.keys(data.exhibition).length === 0) {\n      handleError('ExhibitionsPost', props.slug);\n    }\n  },\n  query: exhibitionQuery,\n  skip: shouldSkip,\n  variables: { slug: props.slug },\n});\n\nif (useBootstrap.value) {\n  shouldSkip.value = true;\n\n  if (bootstrap.initial.queried_object) {\n    exhibition.value = bootstrap.initial.queried_object.pagedata;\n    setMetaTitle(exhibition.value.title);\n    setMetaDescription(exhibition.value.excerpt);\n    dataLoaded();\n  }\n\n  if (!bootstrap.initial.queried_object) {\n    shouldSkip.value = false;\n  }\n}\n\nif (!useBootstrap.value) {\n  shouldSkip.value = false;\n}\n\nfunction buyTickets(post): boolean {\n  return post.ticketLink && post.dates.status !== 'past';\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: exhibitionQuery,\n          variables: { slug: params.slug },\n        })\n        .then(() => resolve())\n        .catch((err) => reject(err));\n    });\n  },\n};\n</script>\n\n<style lang=\"scss\" module>\n.buy {\n  display: block;\n  margin-top: 1rem;\n  width: fit-content;\n}\n\n.subtitle {\n  display: block;\n  margin-top: 0;\n}\n\n.title {\n  margin-top: 4rem;\n}\n\n@media (min-width: $break-point) {\n  .content {\n    @include grid-content;\n  }\n}\n</style>\n"],"names":["exhibitionQuery","gql","__default__","params","villusClient","resolve","reject","err","props","__props","bootstrap","inject","store","useMainStore","useBootstrap","storeToRefs","handleError","useHandleError","setMetaDescription","setMetaTitle","useMetaData","exhibition","ref","shouldSkip","useQuery","data","dataLoaded","buyTickets","post"],"mappings":"gkBAEO,MAAMA,EAAkBC;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mDCkJhBC,EAAA,CACb,YAAYC,EAAQC,EAAc,CAChC,OAAO,IAAI,QAAc,CAACC,EAASC,IAAW,CAC5CF,EACG,aAAa,CACZ,MAAOJ,EACP,UAAW,CAAE,KAAMG,EAAO,IAAK,CAAA,CAChC,EACA,KAAK,IAAME,GAAS,EACpB,MAAOE,GAAQD,EAAOC,CAAG,CAAC,CAAA,CAC9B,CAAA,CAEL,8DArEA,MAAMC,EAAQC,EAIRC,EAAYC,EAAkB,WAAW,EAEzCC,EAAQC,EAAa,EACrB,CAAE,aAAAC,CAAA,EAAiBC,EAAYH,CAAK,EACpC,CAAE,YAAAI,CAAY,EAAIC,EAAe,EACjC,CAAE,mBAAAC,EAAoB,aAAAC,CAAa,EAAIC,EAAY,EAEnDC,EAAaC,EAAgB,EAAE,EAC/BC,EAAaD,EAAI,EAAI,EAEVE,EAAS,CACxB,OAASC,GAAS,CACZA,EAAK,YAAc,OAAO,KAAKA,EAAK,UAAU,EAAE,SAClDJ,EAAW,MAAQI,EAAK,WACXA,EAAAA,EAAK,WAAW,KAAK,EACfA,EAAAA,EAAK,WAAW,OAAO,EAC/BC,EAAA,IAGT,CAACD,EAAK,YAAc,OAAO,KAAKA,EAAK,UAAU,EAAE,SAAW,IAClDT,EAAA,kBAAmBR,EAAM,IAAI,CAE7C,EACA,MAAOR,EACP,KAAMuB,EACN,UAAW,CAAE,KAAMf,EAAM,IAAK,CAC/B,CAAA,EAEGM,EAAa,QACfS,EAAW,MAAQ,GAEfb,EAAU,QAAQ,iBACTW,EAAA,MAAQX,EAAU,QAAQ,eAAe,SACvCS,EAAAE,EAAW,MAAM,KAAK,EAChBH,EAAAG,EAAW,MAAM,OAAO,EAChCK,EAAA,GAGRhB,EAAU,QAAQ,iBACrBa,EAAW,MAAQ,KAIlBT,EAAa,QAChBS,EAAW,MAAQ,IAGrB,SAASI,EAAWC,EAAe,CACjC,OAAOA,EAAK,YAAcA,EAAK,MAAM,SAAW,MAAA"}