{"version":3,"file":"PodcastSwiperList-O2tf3YdC.mjs","names":[],"sources":["../src/components/display/podcasts/PodcastSwiperList.vue","../src/components/display/podcasts/PodcastSwiperList.vue"],"sourcesContent":["<template>\n  <PodcastInlineListTemplate\n    v-if=\"loading || (!loading && 0 !== allPodcasts.length)\"\n    :display-arrow=\"false\"\n    :popular-sort=\"popularSort\"\n    :button-text=\"buttonText\"\n    :button-plus=\"buttonPlus\"\n    :title=\"title\"\n    :href=\"href\"\n    :iab-id=\"iabId\"\n    :rubrique-id=\"rubriqueId\"\n    :no-rubriquage-id=\"noRubriquageId\"\n    :title-tag=\"titleTag\"\n    :no-sort=\"noSort\"\n    @sort-chrono=\"sortChrono\"\n    @sort-popular=\"sortPopular\"\n  >\n    <template #list-inline>\n      <ClassicLoading\n        class=\"loading-size\"\n        :loading-text=\"loading ? t('Loading podcasts ...') : undefined\"\n      />\n      <SwiperList v-if=\"!loading\" :list-object=\"allPodcasts\">\n        <template #octopusSlide=\"{ option }\">\n          <PodcastItem\n            class=\"flex-shrink-0 item-phone-margin\"\n            :podcast=\"option\"\n          />\n        </template>\n      </SwiperList>\n    </template>\n  </PodcastInlineListTemplate>\n</template>\n\n<script setup lang=\"ts\">\nimport dayjs from \"dayjs\";\nimport PodcastInlineListTemplate from \"./PodcastInlineListTemplate.vue\";\nimport classicApi from \"../../../api/classicApi\";\nimport PodcastItem from \"./PodcastItem.vue\";\nimport ClassicLoading from \"../../form/ClassicLoading.vue\";\nimport SwiperList from \"../list/SwiperList.vue\";\nimport { useFilterStore } from \"../../../stores/FilterStore\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { computed, onBeforeMount, Ref, ref, watch } from \"vue\";\nimport { ListClassicReturn } from \"@/stores/class/general/listReturn\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \nconst props = defineProps({\n  organisationId: { default: () => [], type: Array as () => Array<string> },\n  emissionId: { default: undefined, type: Number },\n  iabId: { default: undefined, type: Number },\n  title: { default: \"\", type: String },\n  href: { default: undefined, type: String },\n  buttonText: { default: undefined, type: String },\n  isArrow: { default: false, type: Boolean },\n  requirePopularSort: { default: undefined, type: Boolean },\n  buttonPlus: { default: false, type: Boolean },\n  rubriqueId: { default: () => [], type: Array as () => Array<number> },\n  rubriquageId: { default: () => [], type: Array as () => Array<number> },\n  noRubriquageId: { default: () => [], type: Array as () => Array<number> },\n  query: { default: undefined, type: String },\n  /** Filter on season */\n  season: { default: undefined, type: Number },\n  lastThreeMonths: { default: false, type: Boolean },\n  titleTag: { default: \"h2\", type: String },\n  /** The podcast from which suggestions are made */\n  podcastId: { type: Number },\n  /** Hide sort options */\n  noSort: { default: false, type: Boolean }\n})\n\n//Emits\nconst emit = defineEmits([\"update:isArrow\"]);\n\n//Data \nconst loading = ref(true);\nconst popularSort = ref(false);\nconst allPodcasts: Ref<Array<Podcast>> = ref([]);\n\n\n//Composables\nconst { t } = useI18n();\nconst filterStore = useFilterStore();\n\n//Computed\nconst organisation = computed(() => {\n  if (props.organisationId.length) {\n    return props.organisationId;\n  }\n  return filterStore.filterOrgaId ? [filterStore.filterOrgaId] : [];\n});\nconst watchVariable = computed(() => {\n  return `${props.emissionId}|${props.organisationId}|${filterStore.filterOrgaId}|${props.iabId}|${props.rubriqueId}|${props.rubriquageId}|${props.query}`;\n});\n\n\n//Watch\nwatch(watchVariable, () => fetchNext(), {immediate:true});\n\nonBeforeMount(()=>{\n  if (undefined !== props.requirePopularSort) {\n    popularSort.value = props.requirePopularSort;\n  }\n  if (undefined !== props.isArrow) {\n    emit(\"update:isArrow\", true);\n  }\n})\n\n//Methods\nasync function fetchNext(): Promise<void> {\n  // TODO use podcastApi\n  const data = await classicApi.fetchData<ListClassicReturn<Podcast>>({\n    api: 0,\n    path: \"podcast/search\",\n    parameters: {\n      first: 0,\n      size: 12,\n      organisationId: organisation.value,\n      emissionId: props.emissionId,\n      iabId: props.iabId,\n      rubriqueId: props.rubriqueId.length ? props.rubriqueId : undefined,\n      rubriquageId: props.rubriquageId.length\n        ? props.rubriquageId\n        : undefined,\n      noRubriquageId: props.noRubriquageId.length\n        ? props.noRubriquageId\n        : undefined,\n      sort: popularSort.value ? \"POPULARITY\" : \"DATE\",\n      query: props.query,\n      includeStatus: [\"READY\", \"PROCESSING\"],\n      after: popularSort.value && props.lastThreeMonths\n          ? dayjs().subtract(3, \"months\").toISOString()\n          : undefined,\n      season: props.season\n    },\n    specialTreatement: true,\n  });\n  loading.value = true;\n  allPodcasts.value = data.result.filter(\n    // Exclude empty podcasts and current podcast\n    (pod: Podcast | null) => null !== pod && pod.podcastId !== props.podcastId\n  );\n  loading.value = false;\n}\nfunction sortPopular(): void {\n  if (popularSort.value) return;\n  popularSort.value = true;\n  fetchNext();\n}\nfunction sortChrono(): void {\n  if (!popularSort.value) return;\n  popularSort.value = false;\n  fetchNext();\n}\n</script>\n","<template>\n  <PodcastInlineListTemplate\n    v-if=\"loading || (!loading && 0 !== allPodcasts.length)\"\n    :display-arrow=\"false\"\n    :popular-sort=\"popularSort\"\n    :button-text=\"buttonText\"\n    :button-plus=\"buttonPlus\"\n    :title=\"title\"\n    :href=\"href\"\n    :iab-id=\"iabId\"\n    :rubrique-id=\"rubriqueId\"\n    :no-rubriquage-id=\"noRubriquageId\"\n    :title-tag=\"titleTag\"\n    :no-sort=\"noSort\"\n    @sort-chrono=\"sortChrono\"\n    @sort-popular=\"sortPopular\"\n  >\n    <template #list-inline>\n      <ClassicLoading\n        class=\"loading-size\"\n        :loading-text=\"loading ? t('Loading podcasts ...') : undefined\"\n      />\n      <SwiperList v-if=\"!loading\" :list-object=\"allPodcasts\">\n        <template #octopusSlide=\"{ option }\">\n          <PodcastItem\n            class=\"flex-shrink-0 item-phone-margin\"\n            :podcast=\"option\"\n          />\n        </template>\n      </SwiperList>\n    </template>\n  </PodcastInlineListTemplate>\n</template>\n\n<script setup lang=\"ts\">\nimport dayjs from \"dayjs\";\nimport PodcastInlineListTemplate from \"./PodcastInlineListTemplate.vue\";\nimport classicApi from \"../../../api/classicApi\";\nimport PodcastItem from \"./PodcastItem.vue\";\nimport ClassicLoading from \"../../form/ClassicLoading.vue\";\nimport SwiperList from \"../list/SwiperList.vue\";\nimport { useFilterStore } from \"../../../stores/FilterStore\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { computed, onBeforeMount, Ref, ref, watch } from \"vue\";\nimport { ListClassicReturn } from \"@/stores/class/general/listReturn\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \nconst props = defineProps({\n  organisationId: { default: () => [], type: Array as () => Array<string> },\n  emissionId: { default: undefined, type: Number },\n  iabId: { default: undefined, type: Number },\n  title: { default: \"\", type: String },\n  href: { default: undefined, type: String },\n  buttonText: { default: undefined, type: String },\n  isArrow: { default: false, type: Boolean },\n  requirePopularSort: { default: undefined, type: Boolean },\n  buttonPlus: { default: false, type: Boolean },\n  rubriqueId: { default: () => [], type: Array as () => Array<number> },\n  rubriquageId: { default: () => [], type: Array as () => Array<number> },\n  noRubriquageId: { default: () => [], type: Array as () => Array<number> },\n  query: { default: undefined, type: String },\n  /** Filter on season */\n  season: { default: undefined, type: Number },\n  lastThreeMonths: { default: false, type: Boolean },\n  titleTag: { default: \"h2\", type: String },\n  /** The podcast from which suggestions are made */\n  podcastId: { type: Number },\n  /** Hide sort options */\n  noSort: { default: false, type: Boolean }\n})\n\n//Emits\nconst emit = defineEmits([\"update:isArrow\"]);\n\n//Data \nconst loading = ref(true);\nconst popularSort = ref(false);\nconst allPodcasts: Ref<Array<Podcast>> = ref([]);\n\n\n//Composables\nconst { t } = useI18n();\nconst filterStore = useFilterStore();\n\n//Computed\nconst organisation = computed(() => {\n  if (props.organisationId.length) {\n    return props.organisationId;\n  }\n  return filterStore.filterOrgaId ? [filterStore.filterOrgaId] : [];\n});\nconst watchVariable = computed(() => {\n  return `${props.emissionId}|${props.organisationId}|${filterStore.filterOrgaId}|${props.iabId}|${props.rubriqueId}|${props.rubriquageId}|${props.query}`;\n});\n\n\n//Watch\nwatch(watchVariable, () => fetchNext(), {immediate:true});\n\nonBeforeMount(()=>{\n  if (undefined !== props.requirePopularSort) {\n    popularSort.value = props.requirePopularSort;\n  }\n  if (undefined !== props.isArrow) {\n    emit(\"update:isArrow\", true);\n  }\n})\n\n//Methods\nasync function fetchNext(): Promise<void> {\n  // TODO use podcastApi\n  const data = await classicApi.fetchData<ListClassicReturn<Podcast>>({\n    api: 0,\n    path: \"podcast/search\",\n    parameters: {\n      first: 0,\n      size: 12,\n      organisationId: organisation.value,\n      emissionId: props.emissionId,\n      iabId: props.iabId,\n      rubriqueId: props.rubriqueId.length ? props.rubriqueId : undefined,\n      rubriquageId: props.rubriquageId.length\n        ? props.rubriquageId\n        : undefined,\n      noRubriquageId: props.noRubriquageId.length\n        ? props.noRubriquageId\n        : undefined,\n      sort: popularSort.value ? \"POPULARITY\" : \"DATE\",\n      query: props.query,\n      includeStatus: [\"READY\", \"PROCESSING\"],\n      after: popularSort.value && props.lastThreeMonths\n          ? dayjs().subtract(3, \"months\").toISOString()\n          : undefined,\n      season: props.season\n    },\n    specialTreatement: true,\n  });\n  loading.value = true;\n  allPodcasts.value = data.result.filter(\n    // Exclude empty podcasts and current podcast\n    (pod: Podcast | null) => null !== pod && pod.podcastId !== props.podcastId\n  );\n  loading.value = false;\n}\nfunction sortPopular(): void {\n  if (popularSort.value) return;\n  popularSort.value = true;\n  fetchNext();\n}\nfunction sortChrono(): void {\n  if (!popularSort.value) return;\n  popularSort.value = false;\n  fetchNext();\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgDA,MAAM,QAAQ;EAyBd,MAAM,OAAO;EAGb,MAAM,UAAU,IAAI,IAAI;EACxB,MAAM,cAAc,IAAI,KAAK;EAC7B,MAAM,cAAmC,IAAI,CAAC,CAAC;EAI/C,MAAM,EAAE,MAAM,QAAQ;EACtB,MAAM,cAAc,eAAe;EAGnC,MAAM,eAAe,eAAe;GAClC,IAAI,MAAM,eAAe,QACvB,OAAO,MAAM;GAEf,OAAO,YAAY,eAAe,CAAC,YAAY,YAAY,IAAI,CAAC;EAClE,CAAC;EACD,MAAM,gBAAgB,eAAe;GACnC,OAAO,GAAG,MAAM,WAAW,GAAG,MAAM,eAAe,GAAG,YAAY,aAAa,GAAG,MAAM,MAAM,GAAG,MAAM,WAAW,GAAG,MAAM,aAAa,GAAG,MAAM;EACnJ,CAAC;EAID,MAAM,qBAAqB,UAAU,GAAG,EAAC,WAAU,KAAI,CAAC;EAExD,oBAAkB;GAChB,IAAI,KAAA,MAAc,MAAM,oBACtB,YAAY,QAAQ,MAAM;GAE5B,IAAI,KAAA,MAAc,MAAM,SACtB,KAAK,kBAAkB,IAAI;EAE/B,CAAC;EAGD,eAAe,YAA2B;GAExC,MAAM,OAAO,MAAM,mBAAW,UAAsC;IAClE,KAAK;IACL,MAAM;IACN,YAAY;KACV,OAAO;KACP,MAAM;KACN,gBAAgB,aAAa;KAC7B,YAAY,MAAM;KAClB,OAAO,MAAM;KACb,YAAY,MAAM,WAAW,SAAS,MAAM,aAAa,KAAA;KACzD,cAAc,MAAM,aAAa,SAC7B,MAAM,eACN,KAAA;KACJ,gBAAgB,MAAM,eAAe,SACjC,MAAM,iBACN,KAAA;KACJ,MAAM,YAAY,QAAQ,eAAe;KACzC,OAAO,MAAM;KACb,eAAe,CAAC,SAAS,YAAY;KACrC,OAAO,YAAY,SAAS,MAAM,kBAC5B,MAAM,EAAE,SAAS,GAAG,QAAQ,EAAE,YAAY,IAC1C,KAAA;KACN,QAAQ,MAAM;IAChB;IACA,mBAAmB;GACrB,CAAC;GACD,QAAQ,QAAQ;GAChB,YAAY,QAAQ,KAAK,OAAO,QAE7B,QAAwB,SAAS,OAAO,IAAI,cAAc,MAAM,SACnE;GACA,QAAQ,QAAQ;EAClB;EACA,SAAS,cAAoB;GAC3B,IAAI,YAAY,OAAO;GACvB,YAAY,QAAQ;GACpB,UAAU;EACZ;EACA,SAAS,aAAmB;GAC1B,IAAI,CAAC,YAAY,OAAO;GACxB,YAAY,QAAQ;GACpB,UAAU;EACZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QCxJU,OAAA,WAAO,CAAM,OAAA,WAAO,MAAU,OAAA,YAAY,UAAA,UAAA,GADlD,YA8B4B,OAAA,8BAAA;;EA5BzB,iBAAe;EACf,gBAAc,OAAA;EACd,eAAa,OAAA;EACb,eAAa,OAAA;EACb,OAAO,OAAA;EACP,MAAM,OAAA;EACN,UAAQ,OAAA;EACR,eAAa,OAAA;EACb,oBAAkB,OAAA;EAClB,aAAW,OAAA;EACX,WAAS,OAAA;EACT,cAAa,OAAA;EACb,eAAc,OAAA;;EAEJ,eAAW,cAIlB,CAHF,YAGE,OAAA,mBAAA;GAFA,OAAM;GACL,gBAAc,OAAA,UAAU,OAAA,EAAC,sBAAA,IAA2B,KAAA;kCAEpC,OAAA,WAAA,UAAA,GAAnB,YAOa,OAAA,eAAA;;GAPgB,eAAa,OAAA;;GAC7B,cAAY,SAInB,EAJuB,aAAM,CAC/B,YAGE,OAAA,gBAAA;IAFA,OAAM;IACL,SAAS"}