{"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"}