@saooti/octopus-sdk 40.2.18 → 41.0.0-SNAPSHOT

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/package.json +38 -39
  2. package/src/App.vue +68 -88
  3. package/src/components/composable/player/usePlayerLive.ts +12 -3
  4. package/src/components/composable/player/usePlayerLogic.ts +6 -6
  5. package/src/components/composable/podcasts/usePodcastView.ts +3 -3
  6. package/src/components/composable/useInit.ts +2 -2
  7. package/src/components/composable/useMetaTitleWatch.ts +2 -2
  8. package/src/components/display/accessibility/AccessibilityModal.vue +56 -68
  9. package/src/components/display/categories/CategoryChooser.vue +142 -145
  10. package/src/components/display/categories/CategoryFilter.vue +172 -198
  11. package/src/components/display/categories/CategoryList.vue +122 -147
  12. package/src/components/display/comments/CommentInput.vue +100 -122
  13. package/src/components/display/comments/CommentList.vue +169 -191
  14. package/src/components/display/comments/CommentName.vue +35 -45
  15. package/src/components/display/comments/CommentParentInfo.vue +28 -34
  16. package/src/components/display/comments/CommentPlayer.vue +38 -50
  17. package/src/components/display/comments/CommentSection.vue +85 -103
  18. package/src/components/display/comments/item/CommentBasicView.vue +48 -61
  19. package/src/components/display/comments/item/CommentItem.vue +101 -116
  20. package/src/components/display/comments/item/CommentMoreActions.vue +174 -189
  21. package/src/components/display/comments/item/CommentMoreActionsAdmin.vue +1 -3
  22. package/src/components/display/comments/like/LikeButton.vue +36 -41
  23. package/src/components/display/comments/like/LikeSection.vue +128 -136
  24. package/src/components/display/comments/modal/CheckIdentityModal.vue +35 -40
  25. package/src/components/display/comments/modal/EditCommentModal.vue +72 -78
  26. package/src/components/display/comments/modal/RecaptchaModal.vue +58 -63
  27. package/src/components/display/comments/modal/ReportAbuseModal.vue +59 -66
  28. package/src/components/display/edit/EditBox.vue +6 -9
  29. package/src/components/display/edit/EditBoxRadio.vue +1 -5
  30. package/src/components/display/emission/EmissionInlineList.vue +82 -97
  31. package/src/components/display/emission/EmissionItem.vue +56 -69
  32. package/src/components/display/emission/EmissionList.vue +192 -218
  33. package/src/components/display/emission/EmissionPlayerItem.vue +48 -65
  34. package/src/components/display/emission/EmissionPresentationItem.vue +44 -54
  35. package/src/components/display/emission/EmissionPresentationList.vue +51 -61
  36. package/src/components/display/filter/AdvancedSearch.vue +154 -176
  37. package/src/components/display/filter/CategorySearchFilter.vue +43 -46
  38. package/src/components/display/filter/DateFilter.vue +76 -91
  39. package/src/components/display/filter/MonetizableFilter.vue +27 -30
  40. package/src/components/display/filter/ProductorSearch.vue +87 -90
  41. package/src/components/display/filter/RubriqueChoice.vue +58 -63
  42. package/src/components/display/filter/RubriqueFilter.vue +154 -169
  43. package/src/components/display/filter/SearchOrder.vue +35 -35
  44. package/src/components/display/list/ListPaginate.vue +80 -93
  45. package/src/components/display/list/PaginateParams.vue +36 -40
  46. package/src/components/display/list/PaginateSection.vue +113 -124
  47. package/src/components/display/list/SwiperList.vue +97 -109
  48. package/src/components/display/live/CountDown.vue +15 -9
  49. package/src/components/display/live/CountdownOctopus.vue +16 -10
  50. package/src/components/display/live/LiveHorizontalList.vue +95 -103
  51. package/src/components/display/live/LiveItem.vue +65 -73
  52. package/src/components/display/live/LiveList.vue +125 -137
  53. package/src/components/display/live/RadioCurrently.vue +66 -73
  54. package/src/components/display/live/RadioImage.vue +40 -51
  55. package/src/components/display/live/RadioItem.vue +9 -14
  56. package/src/components/display/live/RadioList.vue +39 -53
  57. package/src/components/display/live/RadioPlanning.vue +211 -223
  58. package/src/components/display/organisation/OrganisationChooser.vue +117 -123
  59. package/src/components/display/organisation/OrganisationChooserLight.vue +44 -52
  60. package/src/components/display/participant/ParticipantInlineList.vue +42 -58
  61. package/src/components/display/participant/ParticipantItem.vue +66 -74
  62. package/src/components/display/participant/ParticipantList.vue +119 -141
  63. package/src/components/display/playlist/PlaylistItem.vue +33 -46
  64. package/src/components/display/playlist/PlaylistList.vue +118 -144
  65. package/src/components/display/playlist/PodcastList.vue +79 -101
  66. package/src/components/display/playlist/PodcastPlaylistInlineList.vue +58 -70
  67. package/src/components/display/podcastmaker/PodcastmakerHeader.vue +21 -22
  68. package/src/components/display/podcasts/AnimatorsItem.vue +15 -16
  69. package/src/components/display/podcasts/DownloadPodcastButton.vue +21 -29
  70. package/src/components/display/podcasts/ParticipantDescription.vue +22 -24
  71. package/src/components/display/podcasts/PodcastFilterList.vue +48 -53
  72. package/src/components/display/podcasts/PodcastImage.vue +96 -99
  73. package/src/components/display/podcasts/PodcastInlineList.vue +30 -28
  74. package/src/components/display/podcasts/PodcastInlineListTemplate.vue +107 -114
  75. package/src/components/display/podcasts/PodcastIsPlaying.vue +4 -12
  76. package/src/components/display/podcasts/PodcastItem.vue +48 -63
  77. package/src/components/display/podcasts/PodcastItemInfo.vue +19 -35
  78. package/src/components/display/podcasts/PodcastList.vue +183 -206
  79. package/src/components/display/podcasts/PodcastModuleBox.vue +100 -137
  80. package/src/components/display/podcasts/PodcastPlannedSpinner.vue +4 -6
  81. package/src/components/display/podcasts/PodcastPlayBar.vue +50 -61
  82. package/src/components/display/podcasts/PodcastPlayBasicButton.vue +38 -41
  83. package/src/components/display/podcasts/PodcastPlayButton.vue +164 -175
  84. package/src/components/display/podcasts/PodcastRawTranscript.vue +69 -80
  85. package/src/components/display/podcasts/PodcastRubriqueList.vue +35 -38
  86. package/src/components/display/podcasts/PodcastSwiperList.vue +100 -110
  87. package/src/components/display/podcasts/TagList.vue +49 -51
  88. package/src/components/display/podcasts/VideoModuleBox.vue +13 -24
  89. package/src/components/display/rubriques/RubriqueChooser.vue +135 -140
  90. package/src/components/display/rubriques/RubriqueList.vue +140 -160
  91. package/src/components/display/sharing/ChooseEpisodesNumber.vue +34 -33
  92. package/src/components/display/sharing/FormatSwitch.vue +16 -11
  93. package/src/components/display/sharing/PlayerAnonymousModal.vue +24 -27
  94. package/src/components/display/sharing/PlayerCommonParameters.vue +20 -13
  95. package/src/components/display/sharing/PlayerParameters.vue +69 -71
  96. package/src/components/display/sharing/QrCode.vue +55 -67
  97. package/src/components/display/sharing/ShareAnonymous.vue +160 -178
  98. package/src/components/display/sharing/ShareDistribution.vue +103 -117
  99. package/src/components/display/sharing/ShareNewsletter.vue +154 -161
  100. package/src/components/display/sharing/SharePlayer.vue +273 -295
  101. package/src/components/display/sharing/SharePlayerColors.vue +25 -16
  102. package/src/components/display/sharing/SharePlayerRadio.vue +61 -69
  103. package/src/components/display/sharing/SharePlayerTypes.vue +176 -176
  104. package/src/components/display/sharing/ShareSocialsButtons.vue +63 -75
  105. package/src/components/display/sharing/SubscribeButtons.vue +185 -209
  106. package/src/components/display/studio/RecordingItemButton.vue +1 -4
  107. package/src/components/form/ClassicCheckbox.vue +26 -30
  108. package/src/components/form/ClassicContentEditable.vue +37 -33
  109. package/src/components/form/ClassicCopyButton.vue +40 -44
  110. package/src/components/form/ClassicDatePicker.vue +114 -114
  111. package/src/components/form/ClassicEmojiPicker.vue +20 -28
  112. package/src/components/form/ClassicInputText.vue +116 -120
  113. package/src/components/form/ClassicLoading.vue +7 -12
  114. package/src/components/form/ClassicMultiselect.vue +106 -116
  115. package/src/components/form/ClassicRadio.vue +21 -16
  116. package/src/components/form/ClassicRadioLabel.vue +23 -22
  117. package/src/components/form/ClassicSearch.vue +24 -19
  118. package/src/components/form/ClassicSelect.vue +47 -38
  119. package/src/components/form/ClassicWysiwyg.vue +116 -123
  120. package/src/components/icons/AmazonMusicIcon.vue +7 -10
  121. package/src/components/icons/ApplePodcastIcon.vue +7 -11
  122. package/src/components/icons/BlueSkyIcon.vue +8 -11
  123. package/src/components/icons/DeezerIcon.vue +8 -11
  124. package/src/components/icons/EditFtpIcon.vue +8 -11
  125. package/src/components/icons/IHeartIcon.vue +8 -11
  126. package/src/components/icons/PlayVideoIcon.vue +7 -10
  127. package/src/components/icons/PlayerFmIcon.vue +7 -10
  128. package/src/components/icons/PocketCastIcon.vue +8 -11
  129. package/src/components/icons/PodcastAddictIcon.vue +7 -10
  130. package/src/components/icons/RadiolineIcon.vue +8 -11
  131. package/src/components/icons/TuninIcon.vue +8 -11
  132. package/src/components/icons/XIcon.vue +7 -10
  133. package/src/components/misc/AcpmImage.vue +6 -7
  134. package/src/components/misc/ClassicAccordion.vue +27 -32
  135. package/src/components/misc/ClassicLazy.vue +86 -90
  136. package/src/components/misc/ClassicNav.vue +16 -20
  137. package/src/components/misc/ClassicPopover.vue +266 -282
  138. package/src/components/misc/ClassicSpinner.vue +5 -27
  139. package/src/components/misc/ErrorMessage.vue +11 -12
  140. package/src/components/misc/FooterGarSection.vue +33 -41
  141. package/src/components/misc/FooterSection.vue +109 -130
  142. package/src/components/misc/HomeDropdown.vue +85 -108
  143. package/src/components/misc/MobileMenu.vue +102 -113
  144. package/src/components/misc/ProgressBar.vue +53 -62
  145. package/src/components/misc/TopBar.vue +97 -120
  146. package/src/components/misc/TopBarMainContent.vue +116 -135
  147. package/src/components/misc/modal/ClassicModal.vue +40 -33
  148. package/src/components/misc/modal/ClassicModalInBody.vue +34 -28
  149. package/src/components/misc/modal/ClipboardModal.vue +27 -30
  150. package/src/components/misc/modal/ContractPreviewModal.vue +64 -62
  151. package/src/components/misc/modal/MessageModal.vue +50 -47
  152. package/src/components/misc/modal/NewsletterModal.vue +30 -31
  153. package/src/components/misc/modal/QrCodeModal.vue +21 -21
  154. package/src/components/misc/modal/ShareModalPlayer.vue +43 -52
  155. package/src/components/misc/player/PlayerCompact.vue +6 -4
  156. package/src/components/misc/player/PlayerComponent.vue +8 -9
  157. package/src/components/misc/player/PlayerLarge.vue +9 -8
  158. package/src/components/misc/player/ads/AdsProgressBar.vue +8 -11
  159. package/src/components/misc/player/ads/AdsSkipButton.vue +24 -30
  160. package/src/components/misc/player/chaptering/ChapteringModal.vue +44 -54
  161. package/src/components/misc/player/chaptering/PlayerChaptering.vue +50 -62
  162. package/src/components/misc/player/elements/PlayerImage.vue +51 -57
  163. package/src/components/misc/player/elements/PlayerPlayButton.vue +81 -92
  164. package/src/components/misc/player/elements/PlayerSpeedButton.vue +23 -27
  165. package/src/components/misc/player/elements/PlayerTitle.vue +85 -111
  166. package/src/components/misc/player/progressbar/PlayerProgressBar.vue +18 -29
  167. package/src/components/misc/player/progressbar/PodcastProgressBar.vue +45 -56
  168. package/src/components/misc/player/radio/RadioHistory.vue +80 -99
  169. package/src/components/misc/player/radio/RadioProgressBar.vue +43 -54
  170. package/src/components/misc/player/video/PlayerVideo.vue +27 -40
  171. package/src/components/misc/player/video/PlayerVideoDigiteka.vue +32 -37
  172. package/src/components/misc/player/video/PlayerVideoHls.vue +199 -198
  173. package/src/components/misc/player/video/PlayerYoutubeEmbed.vue +10 -12
  174. package/src/components/pages/CategoryPage.vue +28 -33
  175. package/src/components/pages/EmissionPage.vue +98 -131
  176. package/src/components/pages/EmissionsPage.vue +2 -0
  177. package/src/components/pages/Error403Page.vue +22 -21
  178. package/src/components/pages/HomePage.vue +91 -100
  179. package/src/components/pages/LivesPage.vue +35 -37
  180. package/src/components/pages/MapPage.vue +209 -241
  181. package/src/components/pages/PageLogout.vue +8 -11
  182. package/src/components/pages/PageNotFound.vue +9 -5
  183. package/src/components/pages/ParticipantPage.vue +83 -111
  184. package/src/components/pages/ParticipantsPage.vue +3 -0
  185. package/src/components/pages/PlaylistPage.vue +98 -116
  186. package/src/components/pages/PlaylistsPage.vue +9 -2
  187. package/src/components/pages/PodcastPage.vue +223 -238
  188. package/src/components/pages/PodcastsPage.vue +9 -2
  189. package/src/components/pages/RadioPage.vue +56 -70
  190. package/src/components/pages/RubriquePage.vue +7 -3
  191. package/src/components/pages/SearchPage.vue +31 -36
  192. package/src/components/pages/TagPage.vue +11 -9
  193. package/src/components/pages/VideoPage.vue +14 -11
  194. package/src/helper/displayHelper.ts +1 -1
  195. package/src/i18n.ts +2 -2
  196. package/src/main.ts +1 -1
  197. package/src/stores/class/general/player.ts +1 -0
  198. package/public/css/fonts/icomoon.eot +0 -0
  199. package/public/css/fonts/icomoon.svg +0 -113
  200. package/public/css/fonts/icomoon.ttf +0 -0
  201. package/public/css/fonts/icomoon.woff +0 -0
  202. package/public/css/fonts/icomoon.woff2 +0 -0
  203. package/public/css/fonts/style.css +0 -352
  204. package/sonarqube-scanner.js +0 -10
@@ -6,15 +6,15 @@
6
6
  v-model:is-mobile="isMobile"
7
7
  :text-count="
8
8
  showCount && podcasts.length > 1
9
- ? $t('Number podcasts', { nb: totalCount }) + sortText
9
+ ? t('Number podcasts', { nb: totalCount }) + sortText
10
10
  : undefined
11
11
  "
12
12
  :total-count="totalCount"
13
13
  :loading="loading"
14
- :loading-text="loading ? $t('Loading podcasts ...') : undefined"
14
+ :loading-text="loading ? t('Loading podcasts ...') : undefined"
15
15
  :error-text="
16
16
  !loading && !podcasts.length
17
- ? $t(`No podcast match your query`)
17
+ ? t(`No podcast match your query`)
18
18
  : undefined
19
19
  "
20
20
  :just-size-chosen="justSizeChosen"
@@ -34,7 +34,7 @@
34
34
  name: 'podcast',
35
35
  params: { podcastId: p.podcastId },
36
36
  }"
37
- :title="$t('Episode name page', { name: p.title })"
37
+ :title="t('Episode name page', { name: p.title })"
38
38
  >
39
39
  {{ p.title }}
40
40
  </router-link>
@@ -45,222 +45,199 @@
45
45
  </ListPaginate>
46
46
  </template>
47
47
 
48
- <script lang="ts">
48
+ <script setup lang="ts">
49
49
  import ListPaginate from "../list/ListPaginate.vue";
50
50
  import {useErrorHandler} from "../../composable/useErrorHandler";
51
51
  import classicApi from "../../../api/classicApi";
52
52
  import PodcastItem from "./PodcastItem.vue";
53
53
  import ClassicLazy from "../../misc/ClassicLazy.vue";
54
- import { useAuthStore } from "../../../stores/AuthStore";
55
54
  import { useFilterStore } from "../../../stores/FilterStore";
56
- import { mapState } from "pinia";
57
55
  import { Podcast, emptyPodcastData } from "@/stores/class/general/podcast";
58
- import { defineComponent } from "vue";
56
+ import { computed, onBeforeMount, Ref, ref, watch } from "vue";
59
57
  import { FetchParam } from "@/stores/class/general/fetchParam";
60
58
  import { AxiosError } from "axios";
61
59
  import { ListClassicReturn } from "@/stores/class/general/listReturn";
62
- export default defineComponent({
63
- name: "PodcastList",
60
+ import { useI18n } from "vue-i18n";
64
61
 
65
- components: {
66
- PodcastItem,
67
- ListPaginate,
68
- ClassicLazy,
69
- },
70
62
 
71
- props: {
72
- first: { default: 0, type: Number },
73
- size: { default: 30, type: Number },
74
- organisationId: { default: () => [], type: Array as () => Array<string> },
75
- emissionId: { default: undefined, type: Number },
76
- iabId: { default: undefined, type: Number },
77
- participantId: { default: undefined, type: Number },
78
- query: { default: undefined, type: String },
79
- monetisable: { default: undefined, type: String },
80
- popularSort: { default: false, type: Boolean },
81
- reload: { default: false, type: Boolean },
82
- before: { default: undefined, type: String },
83
- after: { default: undefined, type: String },
84
- includeHidden: { default: false, type: Boolean },
85
- showCount: { default: false, type: Boolean },
86
- displaySortText: { default: true, type: Boolean },
87
- sortCriteria: { default: undefined, type: String },
88
- validity: { default: 'true', type: String },
89
- rubriqueId: { default: () => [], type: Array as () => Array<number> },
90
- rubriquageId: { default: () => [], type: Array as () => Array<number> },
91
- noRubriquageId: { default: () => [], type: Array as () => Array<number> },
92
- justSizeChosen: { default: false, type: Boolean },
93
- withVideo: { default: undefined, type: Boolean },
94
- includeTag:{ default: () => [], type: Array as () => Array<string> },
95
- },
96
- emits: ["fetch", "emptyList"],
63
+ //Props
64
+ const props = defineProps({
65
+ first: { default: 0, type: Number },
66
+ size: { default: 30, type: Number },
67
+ organisationId: { default: () => [], type: Array as () => Array<string> },
68
+ emissionId: { default: undefined, type: Number },
69
+ iabId: { default: undefined, type: Number },
70
+ participantId: { default: undefined, type: Number },
71
+ query: { default: undefined, type: String },
72
+ monetisable: { default: undefined, type: String },
73
+ popularSort: { default: false, type: Boolean },
74
+ reload: { default: false, type: Boolean },
75
+ before: { default: undefined, type: String },
76
+ after: { default: undefined, type: String },
77
+ includeHidden: { default: false, type: Boolean },
78
+ showCount: { default: false, type: Boolean },
79
+ displaySortText: { default: true, type: Boolean },
80
+ sortCriteria: { default: undefined, type: String },
81
+ validity: { default: 'true', type: String },
82
+ rubriqueId: { default: () => [], type: Array as () => Array<number> },
83
+ rubriquageId: { default: () => [], type: Array as () => Array<number> },
84
+ noRubriquageId: { default: () => [], type: Array as () => Array<number> },
85
+ justSizeChosen: { default: false, type: Boolean },
86
+ withVideo: { default: undefined, type: Boolean },
87
+ includeTag:{ default: () => [], type: Array as () => Array<string> },
88
+ })
97
89
 
98
- setup(){
99
- const {handle403} = useErrorHandler();
100
- return { handle403 }
101
- },
90
+ //Emits
91
+ const emit = defineEmits(["fetch", "emptyList"]);
102
92
 
103
- data() {
104
- return {
105
- loading: true as boolean,
106
- dfirst: this.first,
107
- dsize: this.size,
108
- totalCount: 0 as number,
109
- podcasts: [] as Array<Podcast>,
110
- isMobile: false as boolean,
111
- };
112
- },
93
+ //Data
94
+ const loading = ref(true);
95
+ const dfirst = ref(props.first);
96
+ const dsize = ref(props.size);
97
+ const totalCount = ref(0);
98
+ const isMobile = ref(false);
99
+ const podcasts: Ref<Array<Podcast>> = ref([]);
113
100
 
114
- computed: {
115
- ...mapState(useFilterStore, ["filterOrgaId"]),
116
- ...mapState(useAuthStore, ["authProfile", "isRoleProduction"]),
117
- displayArray(): Array<Podcast> {
118
- if (this.isMobile || this.justSizeChosen) {
119
- return this.podcasts;
120
- }
121
- return this.podcasts.slice(
122
- this.dfirst,
123
- Math.min(this.dfirst + this.dsize, this.totalCount),
124
- );
125
- },
126
- changePaginate(): string {
127
- return `${this.first}|${this.size}`;
128
- },
129
- changed(): string {
130
- return `${this.organisation}|${this.emissionId}|${this.sortCriteria}|${this.sort}
131
- ${this.iabId}|${this.participantId}|${this.query}|${this.monetisable}|${this.popularSort}|
132
- ${this.rubriqueId}|${this.rubriquageId}|${this.before}|${this.after}|${this.includeHidden}|${this.noRubriquageId}|${this.validity}|
133
- ${this.withVideo}|${this.includeTag}`;
134
- },
135
- organisation(): Array<string> {
136
- if (this.organisationId) {
137
- return this.organisationId;
138
- }
139
- return this.filterOrgaId ? [this.filterOrgaId] : [];
140
- },
141
- sort(): string {
142
- return this.popularSort ? "POPULARITY" : (this.sortCriteria ?? "DATE");
143
- },
144
- sortText(): string {
145
- if (!this.displaySortText) {
146
- return "";
147
- }
148
- switch (this.sortCriteria) {
149
- case "SCORE":
150
- return " " + this.$t("sort by score");
151
- case "DATE":
152
- return " " + this.$t("sort by date");
153
- case "NAME":
154
- return " " + this.$t("sort by alphabetical");
155
- default:
156
- return " " + this.$t("sort by date");
157
- }
158
- },
159
- },
160
- watch: {
161
- changePaginate() {
162
- this.dfirst = this.first;
163
- this.dsize = this.size;
164
- },
165
- changed(): void {
166
- this.reloadList();
167
- },
168
- reload(): void {
169
- this.reloadList();
170
- },
171
- dsize(): void {
172
- this.reloadList();
173
- },
174
- dfirst(): void {
175
- if (
176
- !this.podcasts[this.dfirst] ||
177
- 0 === this.podcasts[this.dfirst].podcastId
178
- ) {
179
- this.fetchContent(false);
180
- }
181
- },
182
- },
183
- created() {
184
- this.fetchContent(true);
185
- },
186
- methods: {
187
- reloadList() {
188
- this.dfirst = 0;
189
- this.fetchContent(true);
190
- },
191
- async fetchContent(reset: boolean): Promise<void> {
192
- this.loading = true;
193
- const param: FetchParam = {
194
- first: this.dfirst,
195
- size: this.dsize,
196
- organisationId: this.organisation,
197
- emissionId: this.emissionId,
198
- iabId: this.iabId,
199
- participantId: this.participantId,
200
- query: this.query,
201
- monetisable: this.monetisable,
202
- sort: this.sort,
203
- before: this.before,
204
- after: this.after,
205
- noRubriquageId: this.noRubriquageId.length
206
- ? this.noRubriquageId
207
- : undefined,
208
- rubriqueId: this.rubriqueId.length ? this.rubriqueId : undefined,
209
- rubriquageId: this.rubriquageId.length ? this.rubriquageId : undefined,
210
- includeHidden: this.includeHidden,
211
- validity: this.validity,
212
- /* publisherId:
213
- !this.onlyValid && !this.isRoleProduction
214
- ? this.authProfile?.userId
215
- : undefined, */
216
- includeStatus: ["READY", "PROCESSING"],
217
- withVideo: this.withVideo,
218
- includeTag: this.includeTag.length ? this.includeTag : undefined,
219
- };
220
- try {
221
- const data = await classicApi.fetchData<ListClassicReturn<Podcast>>({
222
- api: 0,
223
- path: "podcast/search",
224
- parameters: param,
225
- specialTreatement: true,
226
- });
227
- this.afterFetching(reset, data);
228
- } catch (error) {
229
- this.handle403(error as AxiosError);
230
- }
231
- },
232
- afterFetching(
233
- reset: boolean,
234
- data: { count: number; result: Array<Podcast>; sort: string },
235
- ): void {
236
- if (reset) {
237
- this.podcasts.length = 0;
238
- }
239
- if (this.dfirst > this.podcasts.length) {
240
- for (
241
- let i = this.podcasts.length - 1, len = this.dfirst + this.dsize;
242
- i < len;
243
- i++
244
- ) {
245
- this.podcasts.push(emptyPodcastData());
246
- }
247
- }
248
- const responsePodcasts = data.result.filter((p: Podcast | null) => {
249
- return null !== p;
250
- });
251
- this.podcasts = this.podcasts
252
- .slice(0, this.dfirst)
253
- .concat(responsePodcasts)
254
- .concat(
255
- this.podcasts.slice(this.dfirst + this.dsize, this.podcasts.length),
256
- );
257
- this.$emit("fetch", this.podcasts);
258
- this.totalCount = this.justSizeChosen ? this.size : data.count;
259
- if (0 === this.podcasts.length) {
260
- this.$emit("emptyList");
261
- }
262
- this.loading = false;
263
- },
264
- },
101
+ //Composables
102
+ const { t } = useI18n();
103
+ const {handle403} = useErrorHandler();
104
+ const filterStore = useFilterStore();
105
+
106
+ //Computed
107
+ const displayArray = computed(() => {
108
+ if (isMobile.value || props.justSizeChosen) {
109
+ return podcasts.value;
110
+ }
111
+ return podcasts.value.slice(
112
+ dfirst.value,
113
+ Math.min(dfirst.value + dsize.value, totalCount.value),
114
+ );
115
+ });
116
+ const changePaginate = computed(() => `${props.first}|${props.size}`);
117
+ const changed = computed(() => {
118
+ return `${organisation.value}|${props.emissionId}|${props.sortCriteria}|${sort.value}
119
+ ${props.iabId}|${props.participantId}|${props.query}|${props.monetisable}|${props.popularSort}|
120
+ ${props.rubriqueId}|${props.rubriquageId}|${props.before}|${props.after}|${props.includeHidden}|${props.noRubriquageId}|${props.validity}|
121
+ ${props.withVideo}|${props.includeTag}`;
122
+ });
123
+ const organisation = computed(() => {
124
+ if (props.organisationId) {
125
+ return props.organisationId;
126
+ }
127
+ return filterStore.filterOrgaId ? [filterStore.filterOrgaId] : [];
265
128
  });
129
+ const sort = computed(() => props.popularSort ? "POPULARITY" : (props.sortCriteria ?? "DATE"));
130
+ const sortText = computed(() => {
131
+ if (!props.displaySortText) {
132
+ return "";
133
+ }
134
+ switch (props.sortCriteria) {
135
+ case "SCORE":
136
+ return " " + t("sort by score");
137
+ case "DATE":
138
+ return " " + t("sort by date");
139
+ case "NAME":
140
+ return " " + t("sort by alphabetical");
141
+ default:
142
+ return " " + t("sort by date");
143
+ }
144
+ });
145
+
146
+ //Watch
147
+ watch(changePaginate, () => {
148
+ dfirst.value = props.first;
149
+ dsize.value = props.size;
150
+ });
151
+ watch(changed, () => reloadList());
152
+ watch(()=>props.reload, () => reloadList());
153
+ watch(dsize, () => reloadList());
154
+ watch(dfirst, () => {
155
+ if (
156
+ !podcasts.value[dfirst.value] ||
157
+ 0 === podcasts.value[dfirst.value].podcastId
158
+ ) {
159
+ fetchContent(false);
160
+ }
161
+ });
162
+
163
+ onBeforeMount(()=>fetchContent(true))
164
+
165
+ //Methods
166
+ function reloadList() {
167
+ dfirst.value = 0;
168
+ fetchContent(true);
169
+ }
170
+ async function fetchContent(reset: boolean): Promise<void> {
171
+ loading.value = true;
172
+ const param: FetchParam = {
173
+ first: dfirst.value,
174
+ size: dsize.value,
175
+ organisationId: organisation.value,
176
+ emissionId: props.emissionId,
177
+ iabId: props.iabId,
178
+ participantId: props.participantId,
179
+ query: props.query,
180
+ monetisable: props.monetisable,
181
+ sort: sort.value,
182
+ before: props.before,
183
+ after: props.after,
184
+ noRubriquageId: props.noRubriquageId.length
185
+ ? props.noRubriquageId
186
+ : undefined,
187
+ rubriqueId: props.rubriqueId.length ? props.rubriqueId : undefined,
188
+ rubriquageId: props.rubriquageId.length ? props.rubriquageId : undefined,
189
+ includeHidden: props.includeHidden,
190
+ validity: props.validity,
191
+ /* publisherId:
192
+ !this.onlyValid && !authStore.isRoleProduction
193
+ ? authStore.authProfile?.userId
194
+ : undefined, */
195
+ includeStatus: ["READY", "PROCESSING"],
196
+ withVideo: props.withVideo,
197
+ includeTag: props.includeTag.length ? props.includeTag : undefined,
198
+ };
199
+ try {
200
+ const data = await classicApi.fetchData<ListClassicReturn<Podcast>>({
201
+ api: 0,
202
+ path: "podcast/search",
203
+ parameters: param,
204
+ specialTreatement: true,
205
+ });
206
+ afterFetching(reset, data);
207
+ } catch (error) {
208
+ handle403(error as AxiosError);
209
+ }
210
+ }
211
+ function afterFetching(
212
+ reset: boolean,
213
+ data: { count: number; result: Array<Podcast>; sort: string },
214
+ ): void {
215
+ if (reset) {
216
+ podcasts.value.length = 0;
217
+ }
218
+ if (dfirst.value > podcasts.value.length) {
219
+ for (
220
+ let i = podcasts.value.length - 1, len = dfirst.value + dsize.value;
221
+ i < len;
222
+ i++
223
+ ) {
224
+ podcasts.value.push(emptyPodcastData());
225
+ }
226
+ }
227
+ const responsePodcasts = data.result.filter((p: Podcast | null) => {
228
+ return null !== p;
229
+ });
230
+ podcasts.value = podcasts.value
231
+ .slice(0, dfirst.value)
232
+ .concat(responsePodcasts)
233
+ .concat(
234
+ podcasts.value.slice(dfirst.value + dsize.value, podcasts.value.length),
235
+ );
236
+ emit("fetch", podcasts.value);
237
+ totalCount.value = props.justSizeChosen ? props.size : data.count;
238
+ if (0 === podcasts.value.length) {
239
+ emit("emptyList");
240
+ }
241
+ loading.value = false;
242
+ }
266
243
  </script>