{"version":3,"file":"ExhibitionsArchive-r4cCrsNa.js","sources":["../../src/queries/ExhibitionsArchiveQuery.js","../../src/queries/ExhibitionsNavQuery.js","../../src/queries/ExhibitionsArchive.js","../../src/components/exhibitions/ExhibitionsNav.vue","../../src/components/exhibitions/ExhibitionsArchive.vue"],"sourcesContent":["export const exhibitionsArchiveQuery = `\n nodes {\n dates {\n end {\n day\n month\n year\n }\n label\n start {\n day\n month\n year\n }\n status\n }\n excerpt\n featuredImage {\n node {\n altText\n sourceUrl\n }\n }\n imageSrcset\n slug\n title\n }\n`;\n","export const exhibitionsNavQuery = `\n exhibitionYears(first: 100, where: { hideEmpty: true }) {\n nodes {\n name\n slug\n }\n }\n sites(first: 100, where: { hideEmpty: true }) {\n nodes {\n name\n slug\n }\n }\n`;\n","import { exhibitionsArchiveQuery } from '@/queries/ExhibitionsArchiveQuery';\nimport { exhibitionsNavQuery } from '@/queries/ExhibitionsNavQuery';\nimport gql from 'graphql-tag';\nimport { paginationQuery } from '@/queries/PaginationQuery';\n\nexport const exhibitionsArchiveFullQuery = gql`\n query getExhibitions(\n $filter: String,\n $paged: Int,\n $past: Boolean,\n $site: String,\n $subType: String\n $subTypeValue: String\n $type: String\n $year: String\n ) {\n exhibitions(first: 8, where: { paged: $paged, past: $past, site: $site, year: $year }) {\n ${exhibitionsArchiveQuery}\n }\n ${exhibitionsNavQuery}\n ${paginationQuery}\n }\n`;\n","<template>\n <nav v-if=\"menu.sites && menu.sites.nodes.length\" class=\"nav-bar\">\n <ul>\n <li :class=\"[{ active: selected === 'venues' }, 'nav-subtypes']\">\n <button\n :class=\"['button-filter', selected === 'venues' ? 'up' : 'down']\"\n :ga4-event=\"\n JSON.stringify({\n filter_location: 'exhibitions',\n filter_type: 'venue',\n filter_value: 'Venues',\n gtm_tag: 'filter',\n })\n \"\n @click.stop.prevent=\"select('venues')\"\n >\n Venues\n </button>\n <ul v-if=\"selected === 'venues'\" id=\"venues\" ref=\"venuesDropdown\" class=\"nav-items\">\n <li\n v-for=\"(venue, key) in menu.sites.nodes\"\n :key=\"key\"\n :class=\"{ pressed: term === venue.slug }\"\n >\n <router-link\n :ga4-event=\"\n JSON.stringify({\n filter_location: 'exhibitions',\n filter_type: 'venue',\n filter_value: `${venue.name}`,\n gtm_tag: 'filter',\n })\n \"\n :to=\"{\n name: 'ExhibitionsArchiveTerm',\n params: {\n from,\n name: venue.name,\n type: 'site',\n term: venue.slug,\n },\n }\"\n >\n {{ venue.name }}\n </router-link>\n </li>\n </ul>\n </li>\n <li :class=\"[{ active: selected === 'years' }, 'nav-subtypes']\">\n <button\n :class=\"['button-filter', selected === 'venues' ? 'up' : 'down']\"\n :ga4-event=\"\n JSON.stringify({\n filter_location: 'exhibitions',\n filter_type: 'year',\n filter_value: 'Years',\n gtm_tag: 'filter',\n })\n \"\n @click.stop.prevent=\"select('years')\"\n >\n Exhibition Year\n </button>\n <ul v-if=\"selected === 'years'\" id=\"years\" ref=\"yearsDropdown\" class=\"nav-items\">\n <li\n v-for=\"(exhibitionYear, key) in menu.exhibitionYears.nodes\"\n :key=\"key\"\n :class=\"{ pressed: term === exhibitionYear.slug }\"\n >\n <router-link\n :ga4-event=\"\n JSON.stringify({\n filter_location: 'exhibitions',\n filter_type: 'year',\n filter_value: `${exhibitionYear.name}`,\n gtm_tag: 'filter',\n })\n \"\n :to=\"{\n name: 'ExhibitionsArchiveTerm',\n params: {\n from,\n name: exhibitionYear.name,\n type: 'year',\n term: exhibitionYear.slug,\n },\n }\"\n >\n {{ exhibitionYear.name }}\n </router-link>\n </li>\n </ul>\n </li>\n </ul>\n </nav>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { useFilterInteractions } from '@/composables/Common.js';\n\ndefineProps<{\n from: string;\n menu: object;\n name?: string;\n term?: string;\n type?: string;\n}>();\n\nconst selected = ref('');\nconst venuesDropdown = ref(null);\nconst yearsDropdown = ref(null);\n\nconst { selectNav } = useFilterInteractions(selected);\n\nfunction select(index): void {\n selectNav(index, [venuesDropdown.value, yearsDropdown.value]);\n}\n</script>\n\n<style lang=\"scss\">\n@use '@/styles/navigation.module.scss' as *;\n</style>\n","<template>\n <section v-if=\"results.exhibitions.nodes.length\">\n <ExhibitionsNav\n :from=\"past || from === 'past' ? 'past' : ''\"\n :menu=\"menu\"\n :name=\"name\"\n :term=\"term\"\n :type=\"type\"\n ></ExhibitionsNav>\n <header :class=\"$style.content\">\n <nav :class=\"$style.back\">\n <BackLink\n v-if=\"site || year\"\n component=\"ExhibitionsArchive\"\n group=\"exhibition\"\n :label=\"from === 'past' ? 'Past Exhibitions' : 'Exhibitions'\"\n :name=\"from === 'past' ? 'ExhibitionsPast' : 'ExhibitionsArchive'\"\n :params=\"{ past: from === 'past' }\"\n ></BackLink>\n </nav>\n <h1 :class=\"{ [$style.isArchive]: !site && !year }\" v-html=\"getTitle()\"></h1>\n </header>\n <div :class=\"$style.content\">\n <article\n v-for=\"(item, key) in results.exhibitions.nodes\"\n :key=\"key\"\n :class=\"$style.exhibition\"\n >\n <figure>\n <router-link\n v-if=\"item.featuredImage\"\n class=\"aspect-container\"\n :to=\"{ name: 'ExhibitionsPost', params: { slug: item.slug } }\"\n :ga4-event=\"\n JSON.stringify({\n click_type: 'image',\n component: 'ExhibitionsArchive',\n content_group: 'exhibition',\n gtm_tag: 'linked_image',\n file_name: `${item.featuredImage.node.sourceUrl.split('/').pop()}`,\n link_url: `${item.slug}`,\n })\n \"\n >\n <picture>\n <img\n :alt=\"item.featuredImage.node.altText\"\n :src=\"proxySource(item.featuredImage.node.sourceUrl)\"\n :srcset=\"item.imageSrcset\"\n class=\"aspect-image\"\n loading=\"lazy\"\n sizes=\"(min-width: 960px) 870px, 100vw\"\n />\n </picture>\n </router-link>\n <figcaption>\n <h2>\n <router-link\n :to=\"{ name: 'ExhibitionsPost', params: { slug: item.slug } }\"\n :ga4-event=\"\n JSON.stringify({\n click_type: 'title',\n component: 'ExhibitionsArchive',\n content_group: 'exhibition',\n gtm_tag: 'link',\n link_text: `${item.title}`,\n link_url: `${item.slug}`,\n })\n \"\n v-html=\"item.title\"\n ></router-link>\n </h2>\n <span v-if=\"item.dates && item.dates.label\" class=\"subtitle-2 space-8-10-above\">\n {{ item.dates.label }}\n </span>\n <ExhibitionDate\n v-else-if=\"item.dates\"\n :begin=\"item.dates.start\"\n :end=\"item.dates.end\"\n class=\"space-8-10-above\"\n ></ExhibitionDate>\n <p :class=\"$style.excerpt\" v-html=\"item.excerpt\"></p>\n </figcaption>\n </figure>\n </article>\n <GuggenPagination\n :bootstrap-total=\"+total\"\n :current-page=\"page\"\n :filter=\"past ? 'past' : null\"\n :has-bootstrap=\"total > 0\"\n :per-page=\"limit\"\n :sub-type=\"type\"\n :sub-type-value=\"term\"\n :total-page-count=\"pageCount\"\n post-type=\"exhibition\"\n ></GuggenPagination>\n </div>\n </section>\n</template>\n\n<script setup lang=\"ts\">\nimport BackLink from '@/components/common/BackLink.vue';\nimport { BootStrap } from '@/types/global.interface';\nimport { computed, inject, onMounted, ref } from 'vue';\nimport { dataLoaded, useHandleError, useImageProxy, useMetaData } from '@/composables/Common.js';\nimport { Exhibition } from '@/types/exhibition.interface';\nimport ExhibitionDate from '@/components/exhibitions/ExhibitionDate.vue';\nimport { exhibitionsArchiveFullQuery } from '@/queries/ExhibitionsArchive';\nimport ExhibitionsNav from '@/components/exhibitions/ExhibitionsNav.vue';\nimport GuggenPagination from '@/components/GuggenPagination.vue';\nimport { onBeforeRouteLeave } from 'vue-router';\nimport { slugToTitle } from '@/utils';\nimport { storeToRefs } from 'pinia';\nimport { useMainStore } from '@/stores/mainStore.js';\nimport { useQuery } from 'villus';\n\ninterface Exhibitions {\n exhibitions: {\n nodes: Array<Exhibition>;\n };\n}\n\nconst props = withDefaults(\n defineProps<{\n from?: string;\n name?: string;\n page?: number;\n past?: boolean;\n term?: string;\n type?: string;\n }>(),\n {\n page: 1,\n past: false,\n }\n);\n\nconst bootstrap = inject<BootStrap>('bootstrap');\n\nconst store = useMainStore();\nconst { useBootstrap } = storeToRefs(store);\n\nconst { handleError } = useHandleError();\nconst { proxySource } = useImageProxy();\nconst { setMetaDescription, setMetaTitle } = useMetaData();\n\nconst limit = 8;\nconst menu = ref({\n exhibitionYears: {\n nodes: [],\n },\n sites: {\n nodes: [],\n },\n});\nconst results = ref<Exhibitions>({\n exhibitions: {\n nodes: [],\n },\n});\nconst shouldSkip = ref(true);\nconst site = ref(null);\nconst title = props.past ? 'Past Exhibitions' : 'Exhibitions';\nconst total = ref(0);\nconst year = ref(null);\n\nconst pageCount = computed(() => Math.ceil(total.value / limit));\n\nonMounted(() => {\n if (useBootstrap.value) {\n shouldSkip.value = true;\n\n if (\n bootstrap.initial.main.posts &&\n bootstrap.initial.main.posts.exhibitions &&\n bootstrap.initial.main.posts.exhibitions.nodes &&\n Object.keys(bootstrap.initial.main.posts.exhibitions.nodes).length\n ) {\n results.value.exhibitions.nodes = bootstrap.initial.main.posts.exhibitions.nodes;\n menu.value = bootstrap.initial.main.posts.menus;\n total.value = bootstrap.initial.main.pagination.total_posts;\n setMetaTitle(title);\n setMetaDescription();\n dataLoaded();\n }\n\n if (\n !bootstrap.initial.main.posts ||\n !bootstrap.initial.main.posts.exhibitions ||\n !bootstrap.initial.main.posts.exhibitions.nodes\n ) {\n handleError(\n `ExhibitionsArchive,\n paged ${props.page},\n past ${props.past},\n site ${site.value},\n year ${year.value}`\n );\n }\n }\n\n if (!useBootstrap.value) {\n shouldSkip.value = false;\n }\n});\n\nonBeforeRouteLeave((to, from, next) => {\n if (to.path.indexOf('/exhibitions/past') === 0) {\n to.params.past = String(props.past);\n }\n\n next();\n});\n\nif (props.type) {\n switch (props.type) {\n case 'year':\n year.value = props.name || props.term;\n break;\n case 'site':\n site.value = props.name || props.term;\n break;\n }\n}\n\nconst queryVariables = {\n filter: props.past ? 'past' : null,\n paged: +props.page,\n past: !!props.past,\n site: site.value,\n subType: props.type,\n subTypeValue: props.term,\n type: 'exhibition',\n year: year.value,\n};\nconst { data } = useQuery({\n onData: data => {\n if (Object.keys(data).length) {\n if (data.exhibitions.nodes.length) {\n results.value.exhibitions.nodes = data.exhibitions.nodes;\n menu.value = { exhibitionYears: data.exhibitionYears, sites: data.sites };\n total.value = data.totalCount;\n setMetaTitle(getTitle());\n setMetaDescription();\n dataLoaded();\n }\n if (data.exhibitions.nodes.length === 0) {\n handleError(\n `ExhibitionsArchive,\n paged ${props.page},\n past ${props.past},\n site ${site.value},\n year ${year.value}`\n );\n }\n }\n },\n query: exhibitionsArchiveFullQuery,\n skip: isNaN(props.page) || shouldSkip,\n variables: queryVariables,\n});\n\nif (isNaN(props.page)) {\n handleError(\n `ExhibitionsArchive,\n paged ${props.page},\n past ${props.past},\n site ${site.value},\n year ${year.value}`\n );\n}\n\nfunction getTitle(): string {\n if (year.value) {\n return year.value;\n }\n\n if (site.value) {\n return slugToTitle(site.value);\n }\n\n return title;\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n beforeRoute(params, villusClient) {\n let site = null;\n let year = null;\n\n if (params.type) {\n switch (params.type) {\n case 'year':\n year = params.name || params.term;\n break;\n case 'site':\n site = params.name || params.term;\n break;\n }\n }\n\n return new Promise<void>((resolve, reject) => {\n villusClient\n .executeQuery({\n query: exhibitionsArchiveFullQuery,\n variables: {\n filter: params.past ? 'past' : null,\n paged: params.page ? +params.page : 1,\n past: !!params.past,\n site: site,\n subType: params.type,\n subTypeValue: params.term,\n type: 'exhibition',\n year: year,\n },\n })\n .then(() => resolve())\n .catch((err) => reject(err));\n });\n },\n};\n</script>\n\n<style lang=\"scss\" module>\n.back {\n margin-top: 0.5rem;\n}\n\n.content {\n article:first-of-type {\n margin-top: 0;\n }\n}\n\n.exhibition {\n margin-top: 4rem;\n\n figcaption {\n span,\n time {\n display: block;\n }\n }\n h2 {\n margin-top: 1rem;\n\n a {\n text-decoration: none;\n\n &:focus {\n color: $white;\n }\n\n &:hover {\n text-decoration: underline;\n }\n }\n }\n}\n\n@media (min-width: $break-point) {\n .back {\n margin-top: 0;\n }\n\n .content {\n @include grid;\n\n h1.isArchive {\n margin-top: 0;\n }\n\n > * {\n grid-column: 1 / span 8;\n }\n > nav {\n grid-column: span 12;\n }\n }\n\n .exhibition {\n figure {\n display: grid;\n grid-column-gap: $column-gutter-large;\n grid-template-columns: repeat(8, 1fr);\n\n a {\n grid-column: span 8;\n }\n\n figcaption {\n grid-column: 1 / span 8;\n }\n }\n }\n}\n</style>\n"],"names":["exhibitionsArchiveQuery","exhibitionsNavQuery","exhibitionsArchiveFullQuery","gql","paginationQuery","selected","ref","venuesDropdown","yearsDropdown","selectNav","useFilterInteractions","select","index","__default__","params","villusClient","site","year","resolve","reject","err","props","__props","bootstrap","inject","store","useMainStore","useBootstrap","storeToRefs","handleError","useHandleError","proxySource","useImageProxy","setMetaDescription","setMetaTitle","useMetaData","limit","menu","results","shouldSkip","title","total","pageCount","computed","onMounted","dataLoaded","onBeforeRouteLeave","to","from","next","queryVariables","useQuery","data","getTitle","slugToTitle"],"mappings":"klBAAO,MAAMA,GAA0B;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,ECA1BC,GAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECKtBC,EAA8BC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAYnCH,EAAuB;AAAA;AAAA,MAEzBC,EAAmB;AAAA,MACnBG,EAAe;AAAA;AAAA,sJCyFf,MAAAC,EAAWC,EAAI,EAAE,EACjBC,EAAiBD,EAAI,IAAI,EACzBE,EAAgBF,EAAI,IAAI,EAExB,CAAE,UAAAG,CAAA,EAAcC,EAAsBL,CAAQ,EAEpD,SAASM,EAAOC,EAAa,CAC3BH,EAAUG,EAAO,CAACL,EAAe,MAAOC,EAAc,KAAK,CAAC,CAAA,o6DC0K/CK,GAAA,CACb,YAAYC,EAAQC,EAAc,CAChC,IAAIC,EAAO,KACPC,EAAO,KAEX,GAAIH,EAAO,KACT,OAAQA,EAAO,KAAM,CACnB,IAAK,OACIG,EAAAH,EAAO,MAAQA,EAAO,KAC7B,MACF,IAAK,OACIE,EAAAF,EAAO,MAAQA,EAAO,KAC7B,KAAA,CAIN,OAAO,IAAI,QAAc,CAACI,EAASC,IAAW,CAC5CJ,EACG,aAAa,CACZ,MAAOb,EACP,UAAW,CACT,OAAQY,EAAO,KAAO,OAAS,KAC/B,MAAOA,EAAO,KAAO,CAACA,EAAO,KAAO,EACpC,KAAM,CAAC,CAACA,EAAO,KACf,KAAAE,EACA,QAASF,EAAO,KAChB,aAAcA,EAAO,KACrB,KAAM,aACN,KAAAG,CAAA,CACF,CACD,EACA,KAAK,IAAMC,GAAS,EACpB,MAAOE,GAAQD,EAAOC,CAAG,CAAC,CAAA,CAC9B,CAAA,CAEL,2IAvMA,MAAMC,EAAQC,EAeRC,EAAYC,EAAkB,WAAW,EAEzCC,EAAQC,EAAa,EACrB,CAAE,aAAAC,CAAA,EAAiBC,GAAYH,CAAK,EAEpC,CAAE,YAAAI,CAAY,EAAIC,EAAe,EACjC,CAAE,YAAAC,CAAY,EAAIC,EAAc,EAChC,CAAE,mBAAAC,EAAoB,aAAAC,CAAa,EAAIC,EAAY,EAEnDC,EAAQ,EACRC,EAAO/B,EAAI,CACf,gBAAiB,CACf,MAAO,CAAA,CACT,EACA,MAAO,CACL,MAAO,CAAA,CAAC,CACV,CACD,EACKgC,EAAUhC,EAAiB,CAC/B,YAAa,CACX,MAAO,CAAA,CAAC,CACV,CACD,EACKiC,EAAajC,EAAI,EAAI,EACrBU,EAAOV,EAAI,IAAI,EACfkC,EAAQnB,EAAM,KAAO,mBAAqB,cAC1CoB,EAAQnC,EAAI,CAAC,EACbW,EAAOX,EAAI,IAAI,EAEfoC,EAAYC,GAAS,IAAM,KAAK,KAAKF,EAAM,MAAQL,CAAK,CAAC,EAgD/D,GA9CAQ,GAAU,IAAM,CACVjB,EAAa,QACfY,EAAW,MAAQ,GAGjBhB,EAAU,QAAQ,KAAK,OACvBA,EAAU,QAAQ,KAAK,MAAM,aAC7BA,EAAU,QAAQ,KAAK,MAAM,YAAY,OACzC,OAAO,KAAKA,EAAU,QAAQ,KAAK,MAAM,YAAY,KAAK,EAAE,SAE5De,EAAQ,MAAM,YAAY,MAAQf,EAAU,QAAQ,KAAK,MAAM,YAAY,MAC3Ec,EAAK,MAAQd,EAAU,QAAQ,KAAK,MAAM,MAC1CkB,EAAM,MAAQlB,EAAU,QAAQ,KAAK,WAAW,YAChDW,EAAaM,CAAK,EACCP,EAAA,EACRY,EAAA,IAIX,CAACtB,EAAU,QAAQ,KAAK,OACxB,CAACA,EAAU,QAAQ,KAAK,MAAM,aAC9B,CAACA,EAAU,QAAQ,KAAK,MAAM,YAAY,QAE1CM,EACE;AAAA,gBACQR,EAAM,IAAI;AAAA,eACXA,EAAM,IAAI;AAAA,eACVL,EAAK,KAAK;AAAA,eACVC,EAAK,KAAK,EACnB,GAICU,EAAa,QAChBY,EAAW,MAAQ,GACrB,CACD,EAEkBO,GAAA,CAACC,EAAIC,EAAMC,IAAS,CACjCF,EAAG,KAAK,QAAQ,mBAAmB,IAAM,IAC3CA,EAAG,OAAO,KAAO,OAAO1B,EAAM,IAAI,GAG/B4B,EAAA,CAAA,CACN,EAEG5B,EAAM,KACR,OAAQA,EAAM,KAAM,CAClB,IAAK,OACEJ,EAAA,MAAQI,EAAM,MAAQA,EAAM,KACjC,MACF,IAAK,OACEL,EAAA,MAAQK,EAAM,MAAQA,EAAM,KACjC,KAAA,CAIN,MAAM6B,EAAiB,CACrB,OAAQ7B,EAAM,KAAO,OAAS,KAC9B,MAAO,CAACA,EAAM,KACd,KAAM,CAAC,CAACA,EAAM,KACd,KAAML,EAAK,MACX,QAASK,EAAM,KACf,aAAcA,EAAM,KACpB,KAAM,aACN,KAAMJ,EAAK,KACb,EACiBkC,GAAS,CACxB,OAAQC,GAAQ,CACV,OAAO,KAAKA,CAAI,EAAE,SAChBA,EAAK,YAAY,MAAM,SACzBd,EAAQ,MAAM,YAAY,MAAQc,EAAK,YAAY,MACnDf,EAAK,MAAQ,CAAE,gBAAiBe,EAAK,gBAAiB,MAAOA,EAAK,KAAM,EACxEX,EAAM,MAAQW,EAAK,WACnBlB,EAAamB,GAAU,EACJpB,EAAA,EACRY,EAAA,GAETO,EAAK,YAAY,MAAM,SAAW,GACpCvB,EACE;AAAA,kBACQR,EAAM,IAAI;AAAA,iBACXA,EAAM,IAAI;AAAA,iBACVL,EAAK,KAAK;AAAA,iBACVC,EAAK,KAAK,EACnB,EAGN,EACA,MAAOf,EACP,KAAM,MAAMmB,EAAM,IAAI,GAAKkB,EAC3B,UAAWW,CACZ,CAAA,EAEG,MAAM7B,EAAM,IAAI,GAClBQ,EACE;AAAA,YACQR,EAAM,IAAI;AAAA,WACXA,EAAM,IAAI;AAAA,WACVL,EAAK,KAAK;AAAA,WACVC,EAAK,KAAK,EACnB,EAGF,SAASoC,GAAmB,CAC1B,OAAIpC,EAAK,MACAA,EAAK,MAGVD,EAAK,MACAsC,EAAYtC,EAAK,KAAK,EAGxBwB,CAAA"}