{"version":3,"file":"PublicationAuthors-BUVrLWDZ.js","sources":["../../src/components/publication/PublicationAuthors.vue"],"sourcesContent":["<template>\n  <div>\n    <div :class=\"$style.authors\">\n      <ul v-if=\"filteredAuthors(data, 'primary_author').length\" class=\"body-1\">\n        <li\n          v-for=\"(author, index) in filteredAuthors(data, 'primary_author')\"\n          :key=\"index\"\n          :class=\"$style.author\"\n        >\n          <router-link\n            :to=\"{\n              name: 'PublicationTaxSection',\n              params: {\n                slug: author.slug,\n                subtype: 'publication_author',\n              },\n            }\"\n            :ga4-event=\"\n              JSON.stringify({\n                click_type: 'author_name',\n                component: `${parent}`,\n                content_group: 'publication',\n                gtm_tag: 'link',\n                link_text: `${author.name}`,\n                link_url: `${author.slug}`,\n              })\n            \"\n          >\n            {{ author.name }}\n          </router-link>\n        </li>\n      </ul>\n      <div v-if=\"filteredAuthors(data, 'primary_editor').length\">\n        <span class=\"body-1\">Edited by&nbsp;</span>\n        <ul class=\"body-1\">\n          <li\n            v-for=\"(author, index) in filteredAuthors(data, 'primary_editor').sort((a, b) =>\n              a.sort.localeCompare(b.sort)\n            )\"\n            :key=\"index\"\n            :class=\"$style.author\"\n          >\n            <router-link\n              :to=\"{\n                name: 'PublicationTaxSection',\n                params: {\n                  slug: author.slug,\n                  subtype: 'publication_author',\n                },\n              }\"\n              :ga4-event=\"\n                JSON.stringify({\n                  click_type: 'author_name',\n                  component: `${parent}`,\n                  content_group: 'publication',\n                  gtm_tag: 'link',\n                  link_text: `${author.name}`,\n                  link_url: `${author.slug}`,\n                })\n              \"\n            >\n              {{ author.name }}\n            </router-link>\n          </li>\n        </ul>\n      </div>\n      <div v-if=\"filteredAuthors(data, 'contributor').length\">\n        <span class=\"body-1\">With contributions by&nbsp;</span>\n        <ul class=\"body-1\">\n          <li\n            v-for=\"(author, index) in prepareContributors(data)\"\n            :key=\"index\"\n            :class=\"$style.author\"\n          >\n            <router-link\n              :to=\"{\n                name: 'PublicationTaxSection',\n                params: {\n                  slug: author.slug,\n                  subtype: 'publication_author',\n                },\n              }\"\n              :ga4-event=\"\n                JSON.stringify({\n                  click_type: 'author_name',\n                  component: `${parent}`,\n                  content_group: 'publication',\n                  gtm_tag: 'link',\n                  link_text: `${author.name}`,\n                  link_url: `${author.slug}`,\n                })\n              \"\n            >\n              {{ author.name }}\n            </router-link>\n          </li>\n        </ul>\n        <span\n          v-if=\"filteredAuthors(data, 'contributor').length > 6 && (isArchive || isSummary)\"\n        >\n          &nbsp;&hellip;\n        </span>\n      </div>\n    </div>\n    <p v-if=\"!isSummary\" class=\"body-1 space-12-16-above\">\n      Published in {{ data[getPubData].publication_year }}\n    </p>\n    <div v-if=\"!isSummary\" class=\"body-1 space-12-16-above\">\n      <div v-if=\"data[getPubData].num_pages\">\n        {{ data[getPubData].num_pages }} pages<span v-if=\"data[getPubData].fully_illustrated\">, fully illustrated</span>\n        <span v-if=\"data[getPubData].fully_illustrated && data[getPubData].num_illustrations\">&nbsp;</span>\n        <span v-if=\"data[getPubData].num_illustrations\">\n          with {{ data[getPubData].num_illustrations }} illustrations\n        </span>\n      </div>\n      <div v-if=\"data[getPubData].hardcover || data[getPubData].softcover\">\n        <span v-if=\"data[getPubData].hardcover\">Hardcover</span>\n        <span v-if=\"data[getPubData].hardcover && data[getPubData].softcover\">, </span>\n        <span v-if=\"data[getPubData].softcover\">Softcover</span>\n      </div>\n      <div v-if=\"data[getPubData].height && data[getPubData].width\">\n        {{ data[getPubData].width }} &times; {{ data[getPubData].height }} inches\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { Publication } from '@/types/publication.interface';\nimport { useRouteParent } from '@/composables/Common.js';\n\nconst props = defineProps<{\n  data: Publication;\n  isArchive?: boolean;\n  isSummary?: boolean;\n  search?: boolean;\n}>();\n\nconst { parent } = useRouteParent();\n\nconst getPubData = computed(() => (props.search ? 'publication_data' : 'publicationData'));\n\nfunction filteredAuthors(pub: Publication, filterby: string): Array<Publication> {\n  const authors = [];\n  const filteredAuthors = pub[getPubData.value].authors.filter(\n    (author) => author.type === filterby\n  );\n  const searchTarget = props.search ? pub.publication_author : pub.publicationAuthors.nodes;\n  const searchId = props.search ? 'id' : 'publication_authorId';\n\n  filteredAuthors.forEach((author) => {\n    const match = searchTarget.find((pubauth) => pubauth[searchId] === parseInt(author.author));\n\n    if (match) {\n      authors.push(match);\n    }\n  });\n\n  return authors;\n}\n\nfunction prepareContributors(data: Publication): Publication {\n  const contributors = filteredAuthors(data, 'contributor').sort((a, b) =>\n    a.sort.localeCompare(b.sort)\n  );\n\n  if (contributors.length > 6 && (props.isArchive || props.isSummary)) {\n    return contributors.slice(0, 6);\n  }\n\n  return contributors;\n}\n</script>\n\n<style lang=\"scss\" module>\n.author {\n  display: inline-block;\n  list-style: none;\n\n  a {\n    text-decoration: underline;\n\n    &:focus {\n      color: $white;\n      text-decoration: underline;\n    }\n  }\n\n  &:hover {\n    text-decoration: underline;\n  }\n\n  &:not(:last-of-type)::after {\n    content: ',';\n    margin-right: px-to-rem(4.25); // 0.25em\n  }\n}\n\n.authors {\n  ul {\n    display: inline;\n    margin-left: 0;\n    margin-top: 0;\n    padding-left: 0;\n  }\n}\n</style>\n"],"names":["props","__props","parent","useRouteParent","getPubData","computed","filteredAuthors","pub","filterby","authors","author","searchTarget","searchId","match","pubauth","prepareContributors","data","contributors","a","b"],"mappings":"8kBAoIA,MAAMA,EAAQC,EAOR,CAAE,OAAAC,CAAO,EAAIC,EAAe,EAE5BC,EAAaC,EAAS,IAAOL,EAAM,OAAS,mBAAqB,iBAAkB,EAEhF,SAAAM,EAAgBC,EAAkBC,EAAsC,CAC/E,MAAMC,EAAU,CAAC,EACXH,EAAkBC,EAAIH,EAAW,KAAK,EAAE,QAAQ,OACnDM,GAAWA,EAAO,OAASF,CAC9B,EACMG,EAAeX,EAAM,OAASO,EAAI,mBAAqBA,EAAI,mBAAmB,MAC9EK,EAAWZ,EAAM,OAAS,KAAO,uBAEvCM,OAAAA,EAAgB,QAASI,GAAW,CAC5B,MAAAG,EAAQF,EAAa,KAAMG,GAAYA,EAAQF,CAAQ,IAAM,SAASF,EAAO,MAAM,CAAC,EAEtFG,GACFJ,EAAQ,KAAKI,CAAK,CACpB,CACD,EAEMJ,CAAA,CAGT,SAASM,EAAoBC,EAAgC,CAC3D,MAAMC,EAAeX,EAAgBU,EAAM,aAAa,EAAE,KAAK,CAACE,EAAGC,IACjED,EAAE,KAAK,cAAcC,EAAE,IAAI,CAC7B,EAEA,OAAIF,EAAa,OAAS,IAAMjB,EAAM,WAAaA,EAAM,WAChDiB,EAAa,MAAM,EAAG,CAAC,EAGzBA,CAAA"}