@saooti/octopus-sdk 1.0.0 → 1.1.1

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 (317) hide show
  1. package/README.md +261 -0
  2. package/index.d.ts +4 -0
  3. package/index.ts +55 -3
  4. package/package.json +53 -45
  5. package/public/config.ts +4 -0
  6. package/public/css/fonts/icomoon.eot +0 -0
  7. package/public/css/fonts/icomoon.svg +129 -0
  8. package/public/css/fonts/icomoon.ttf +0 -0
  9. package/public/css/fonts/icomoon.woff +0 -0
  10. package/public/css/fonts/style.css +186 -1224
  11. package/public/img/403.jpeg +0 -0
  12. package/public/img/404.svg +242 -0
  13. package/public/img/ACPM.png +0 -0
  14. package/public/img/ouest_france_logo.svg +12 -0
  15. package/src/App.vue +102 -31
  16. package/src/api/classicCrud.ts +34 -0
  17. package/src/api/initialize.ts +5 -2
  18. package/src/assets/bootstrap-diff.scss +197 -0
  19. package/src/assets/form.scss +77 -77
  20. package/src/assets/general.scss +284 -272
  21. package/src/assets/live.scss +39 -0
  22. package/src/assets/modal.scss +43 -50
  23. package/src/assets/multiselect.scss +522 -573
  24. package/src/assets/octopus-library.scss +18 -4
  25. package/src/assets/share.scss +243 -0
  26. package/src/assets/transition.scss +98 -2
  27. package/src/components/display/aggregator/RssSection.vue +3 -5
  28. package/src/components/display/categories/CategoryChooser.vue +151 -114
  29. package/src/components/display/categories/CategoryFilter.vue +162 -0
  30. package/src/components/display/categories/CategoryList.vue +149 -117
  31. package/src/components/display/comments/AddCommentModal.vue +103 -108
  32. package/src/components/display/comments/CommentBasicView.vue +95 -0
  33. package/src/components/display/comments/CommentInput.vue +195 -183
  34. package/src/components/display/comments/CommentItem.vue +170 -208
  35. package/src/components/display/comments/CommentList.vue +134 -228
  36. package/src/components/display/comments/CommentParentInfo.vue +28 -62
  37. package/src/components/display/comments/CommentPlayer.vue +53 -56
  38. package/src/components/display/comments/CommentSection.vue +52 -83
  39. package/src/components/display/edit/EditBox.vue +10 -4
  40. package/src/components/display/edit/EditCommentBox.vue +124 -38
  41. package/src/components/display/emission/EmissionChooser.vue +88 -108
  42. package/src/components/display/emission/EmissionInlineList.vue +156 -157
  43. package/src/components/display/emission/EmissionItem.vue +72 -226
  44. package/src/components/display/emission/EmissionList.vue +159 -201
  45. package/src/components/display/emission/EmissionPlayerItem.vue +203 -174
  46. package/src/components/display/filter/AdvancedSearch.vue +224 -432
  47. package/src/components/display/filter/CategoryFilter.vue +105 -0
  48. package/src/components/display/filter/MonetizableFilter.vue +18 -15
  49. package/src/components/display/filter/ProductorSearch.vue +153 -176
  50. package/src/components/display/filter/RubriqueChoice.vue +97 -0
  51. package/src/components/display/filter/RubriqueFilter.vue +232 -0
  52. package/src/components/display/list/ListPaginate.vue +145 -0
  53. package/src/components/display/list/Paginate.vue +218 -0
  54. package/src/components/display/live/CountDown.vue +31 -30
  55. package/src/components/display/live/LiveHorizontalList.vue +84 -62
  56. package/src/components/display/live/LiveItem.vue +161 -186
  57. package/src/components/display/live/LiveList.vue +184 -295
  58. package/src/components/display/organisation/OrganisationChooser.vue +124 -162
  59. package/src/components/display/organisation/OrganisationChooserLight.vue +53 -56
  60. package/src/components/display/participant/ParticipantItem.vue +91 -128
  61. package/src/components/display/participant/ParticipantList.vue +134 -121
  62. package/src/components/display/playlist/PlaylistItem.vue +60 -97
  63. package/src/components/display/playlist/PlaylistList.vue +99 -92
  64. package/src/components/display/playlist/PodcastList.vue +117 -132
  65. package/src/components/display/playlist/PodcastPlaylistInlineList.vue +191 -0
  66. package/src/components/display/podcasts/AnimatorsItem.vue +29 -37
  67. package/src/components/display/podcasts/ParticipantDescription.vue +82 -0
  68. package/src/components/display/podcasts/PodcastFilterList.vue +49 -102
  69. package/src/components/display/podcasts/PodcastImage.vue +208 -225
  70. package/src/components/display/podcasts/PodcastInlineList.vue +62 -355
  71. package/src/components/display/podcasts/PodcastInlineListClassic.vue +240 -0
  72. package/src/components/display/podcasts/PodcastInlineListTemplate.vue +167 -0
  73. package/src/components/display/podcasts/PodcastItem.vue +94 -218
  74. package/src/components/display/podcasts/PodcastItemInfo.vue +166 -0
  75. package/src/components/display/podcasts/PodcastList.vue +127 -178
  76. package/src/components/display/podcasts/PodcastModuleBox.vue +234 -0
  77. package/src/components/display/podcasts/PodcastPlayBar.vue +101 -0
  78. package/src/components/display/podcasts/PodcastSwiperList.vue +204 -0
  79. package/src/components/display/podcasts/TagList.vue +60 -38
  80. package/src/components/display/rubriques/RubriqueChooser.vue +144 -131
  81. package/src/components/display/rubriques/RubriqueList.vue +216 -0
  82. package/src/components/display/sharing/PlayerParameters.vue +111 -153
  83. package/src/components/display/sharing/QrCode.vue +96 -0
  84. package/src/components/display/sharing/ShareButtons.vue +63 -233
  85. package/src/components/display/sharing/ShareButtonsIntern.vue +225 -0
  86. package/src/components/display/sharing/ShareDistribution.vue +102 -166
  87. package/src/components/display/sharing/SharePlayer.vue +189 -353
  88. package/src/components/display/sharing/SharePlayerColors.vue +78 -0
  89. package/src/components/display/sharing/SharePlayerTypes.vue +112 -0
  90. package/src/components/display/sharing/SplitButton.vue +42 -0
  91. package/src/components/display/sharing/SubscribeButtons.vue +65 -118
  92. package/src/components/display/studio/RecordingItemButton.vue +3 -5
  93. package/src/components/form/ClassicCheckbox.vue +66 -0
  94. package/src/components/form/ClassicLoading.vue +28 -0
  95. package/src/components/form/ClassicRadio.vue +66 -0
  96. package/src/components/form/ClassicSearch.vue +86 -0
  97. package/src/components/form/ClassicSelect.vue +65 -0
  98. package/src/components/misc/ErrorMessage.vue +27 -18
  99. package/src/components/misc/Footer.vue +151 -108
  100. package/src/components/misc/HomeDropdown.vue +95 -154
  101. package/src/components/misc/LeftMenu.vue +137 -206
  102. package/src/components/misc/Popover.vue +118 -0
  103. package/src/components/misc/Snackbar.vue +73 -37
  104. package/src/components/misc/TopBar.vue +211 -314
  105. package/src/components/misc/modal/ClipboardModal.vue +34 -47
  106. package/src/components/misc/modal/MessageModal.vue +74 -53
  107. package/src/components/misc/modal/NewsletterModal.vue +272 -224
  108. package/src/components/misc/modal/QrCodeModal.vue +58 -0
  109. package/src/components/misc/modal/ShareModalPlayer.vue +140 -74
  110. package/src/components/misc/player/Player.vue +146 -0
  111. package/src/components/misc/player/PlayerCompact.vue +154 -0
  112. package/src/components/misc/player/PlayerLarge.vue +166 -0
  113. package/src/components/misc/player/PlayerProgressBar.vue +112 -0
  114. package/src/components/misc/player/PlayerTimeline.vue +61 -0
  115. package/src/components/mixins/functions.ts +21 -18
  116. package/src/components/mixins/handle403.ts +17 -0
  117. package/src/components/mixins/init.ts +24 -0
  118. package/src/components/mixins/orgaComputed.ts +15 -0
  119. package/src/components/mixins/organisationFilter.ts +41 -0
  120. package/src/components/mixins/player/playerComment.ts +98 -0
  121. package/src/components/mixins/player/playerDisplay.ts +113 -0
  122. package/src/components/mixins/player/playerLive.ts +111 -0
  123. package/src/components/mixins/player/playerLogic.ts +225 -0
  124. package/src/components/mixins/tagOfMixins.ts +19 -0
  125. package/src/components/pages/Category.vue +24 -28
  126. package/src/components/pages/Emission.vue +144 -177
  127. package/src/components/pages/Emissions.vue +94 -110
  128. package/src/components/pages/Error403Page.vue +60 -0
  129. package/src/components/pages/Home.vue +74 -21
  130. package/src/components/pages/Lives.vue +53 -58
  131. package/src/components/pages/PageNotFound.vue +55 -0
  132. package/src/components/pages/Participant.vue +113 -129
  133. package/src/components/pages/Participants.vue +25 -41
  134. package/src/components/pages/Playlist.vue +86 -86
  135. package/src/components/pages/Playlists.vue +33 -52
  136. package/src/components/pages/Podcast.vue +206 -478
  137. package/src/components/pages/Podcasts.vue +112 -156
  138. package/src/components/pages/Rubrique.vue +21 -27
  139. package/src/components/pages/Search.vue +37 -94
  140. package/src/helper/dom.ts +2 -2
  141. package/src/helper/duration.ts +18 -8
  142. package/src/helper/useEventListener.ts +18 -0
  143. package/src/i18n.ts +36 -0
  144. package/src/locale/de.ts +309 -0
  145. package/src/locale/educationen.ts +14 -0
  146. package/src/locale/en.ts +316 -1
  147. package/src/locale/es.ts +309 -0
  148. package/src/locale/fr.ts +47 -15
  149. package/src/locale/it.ts +307 -0
  150. package/src/locale/messages.ts +11 -2
  151. package/src/locale/sl.ts +309 -0
  152. package/src/main.ts +64 -55
  153. package/src/router/router.ts +192 -159
  154. package/src/sass/_variables.scss +10 -8
  155. package/src/shims-tsx.d.ts +15 -0
  156. package/src/shims-vue-recaptcha-v3.d.ts +9 -0
  157. package/src/shims-vue.d.ts +5 -6
  158. package/src/store/AppStore.ts +41 -173
  159. package/src/store/class/adserver/adserverConfig.ts +9 -0
  160. package/src/store/class/adserver/adserverOtherEmission.ts +13 -0
  161. package/src/store/class/adserver/adserverTiming.ts +10 -0
  162. package/src/store/class/cartouchier/cartouche.ts +15 -0
  163. package/src/store/class/cartouchier/cartouchier.ts +9 -0
  164. package/src/store/class/conference/conference.ts +35 -0
  165. package/src/store/class/conference/conferenceMessage.ts +10 -0
  166. package/src/store/class/conference/conferenceParticipant.ts +18 -0
  167. package/src/store/class/conference/pad.ts +15 -0
  168. package/src/store/class/conference/studioCall.ts +7 -0
  169. package/src/store/class/contract/contract.ts +7 -0
  170. package/src/store/class/contract/contractOrganisation.ts +7 -0
  171. package/src/store/class/ftp/ftpEmission.ts +41 -0
  172. package/src/store/class/ftp/ftpParam.ts +12 -0
  173. package/src/store/class/ftp/testFtpEmission.ts +5 -0
  174. package/src/store/class/general/audioView.ts +21 -0
  175. package/src/store/class/general/category.ts +10 -0
  176. package/src/store/class/general/comment.ts +16 -0
  177. package/src/store/class/general/customPlayer.ts +9 -0
  178. package/src/store/class/general/emission.ts +23 -0
  179. package/src/store/class/general/fetchParam.ts +3 -0
  180. package/src/store/class/general/initState.ts +25 -0
  181. package/src/store/class/general/interfacePageable.ts +16 -0
  182. package/src/store/class/general/ituneCategory.ts +5 -0
  183. package/src/store/class/general/media.ts +14 -0
  184. package/src/store/class/general/organisation.ts +20 -0
  185. package/src/store/class/general/pageable.ts +13 -0
  186. package/src/store/class/general/participant.ts +12 -0
  187. package/src/store/class/general/player.ts +14 -0
  188. package/src/store/class/general/playlist.ts +13 -0
  189. package/src/store/class/general/podcast.ts +43 -0
  190. package/src/store/class/general/sortPageable.ts +5 -0
  191. package/src/store/class/general/soundcastCategory.ts +8 -0
  192. package/src/store/class/ouestFrance/ofTag.ts +36 -0
  193. package/src/store/class/ouestFrance/ofTagInfo.ts +9 -0
  194. package/src/store/class/ouestFrance/ofTagPage.ts +7 -0
  195. package/src/store/class/ouestFrance/ofTagSeo.ts +7 -0
  196. package/src/store/class/ouestFrance/ofTagVente.ts +6 -0
  197. package/src/store/class/ouestFrance/ofTagWithParents.ts +26 -0
  198. package/src/store/class/rss/aggregator.ts +28 -0
  199. package/src/store/class/rss/rssEmission.ts +14 -0
  200. package/src/store/class/rss/rssInfo.ts +8 -0
  201. package/src/store/class/rubrique/rubriquage.ts +10 -0
  202. package/src/store/class/rubrique/rubriquageFilter.ts +6 -0
  203. package/src/store/class/rubrique/rubrique.ts +9 -0
  204. package/src/store/class/stat/statArrayIncome.ts +6 -0
  205. package/src/store/class/stat/statArrayObject.ts +34 -0
  206. package/src/store/class/stat/statGraph.ts +7 -0
  207. package/src/store/class/user/person.ts +15 -0
  208. package/src/store/class/user/profile.ts +12 -0
  209. package/src/store/class/user/userKeycloak.ts +24 -0
  210. package/src/store/paramStore.ts +222 -217
  211. package/src/store/typeAppStore.ts +186 -235
  212. package/src/vuex-shim.d.ts +8 -0
  213. package/tsconfig.json +4 -0
  214. package/vue.config.js +16 -0
  215. package/public/css/fonts/saooti-ui.eot +0 -0
  216. package/public/css/fonts/saooti-ui.svg +0 -829
  217. package/public/css/fonts/saooti-ui.ttf +0 -0
  218. package/public/css/fonts/saooti-ui.woff +0 -0
  219. package/public/css/fonts/stitcher-logo.svg +0 -83
  220. package/public/img/ACPM.PNG +0 -0
  221. package/src/api/comments.ts +0 -7
  222. package/src/api/emissions.ts +0 -7
  223. package/src/api/podcasts.ts +0 -7
  224. package/src/api/profile.ts +0 -8
  225. package/src/api/studio.ts +0 -1
  226. package/src/assets/bootstrap_scss/_alert.scss +0 -51
  227. package/src/assets/bootstrap_scss/_badge.scss +0 -54
  228. package/src/assets/bootstrap_scss/_breadcrumb.scss +0 -42
  229. package/src/assets/bootstrap_scss/_button-group.scss +0 -164
  230. package/src/assets/bootstrap_scss/_buttons.scss +0 -291
  231. package/src/assets/bootstrap_scss/_card.scss +0 -278
  232. package/src/assets/bootstrap_scss/_carousel.scss +0 -197
  233. package/src/assets/bootstrap_scss/_close.scss +0 -41
  234. package/src/assets/bootstrap_scss/_code.scss +0 -48
  235. package/src/assets/bootstrap_scss/_custom-forms.scss +0 -522
  236. package/src/assets/bootstrap_scss/_dropdown.scss +0 -201
  237. package/src/assets/bootstrap_scss/_forms.scss +0 -352
  238. package/src/assets/bootstrap_scss/_functions.scss +0 -134
  239. package/src/assets/bootstrap_scss/_grid.scss +0 -69
  240. package/src/assets/bootstrap_scss/_images.scss +0 -42
  241. package/src/assets/bootstrap_scss/_input-group.scss +0 -191
  242. package/src/assets/bootstrap_scss/_jumbotron.scss +0 -17
  243. package/src/assets/bootstrap_scss/_list-group.scss +0 -158
  244. package/src/assets/bootstrap_scss/_media.scss +0 -8
  245. package/src/assets/bootstrap_scss/_mixins.scss +0 -47
  246. package/src/assets/bootstrap_scss/_modal.scss +0 -243
  247. package/src/assets/bootstrap_scss/_nav.scss +0 -120
  248. package/src/assets/bootstrap_scss/_navbar.scss +0 -324
  249. package/src/assets/bootstrap_scss/_pagination.scss +0 -74
  250. package/src/assets/bootstrap_scss/_popover.scss +0 -170
  251. package/src/assets/bootstrap_scss/_print.scss +0 -141
  252. package/src/assets/bootstrap_scss/_progress.scss +0 -46
  253. package/src/assets/bootstrap_scss/_reboot.scss +0 -482
  254. package/src/assets/bootstrap_scss/_root.scss +0 -20
  255. package/src/assets/bootstrap_scss/_spinners.scss +0 -55
  256. package/src/assets/bootstrap_scss/_tables.scss +0 -185
  257. package/src/assets/bootstrap_scss/_toasts.scss +0 -44
  258. package/src/assets/bootstrap_scss/_tooltip.scss +0 -115
  259. package/src/assets/bootstrap_scss/_transitions.scss +0 -20
  260. package/src/assets/bootstrap_scss/_type.scss +0 -125
  261. package/src/assets/bootstrap_scss/_utilities.scss +0 -17
  262. package/src/assets/bootstrap_scss/_variables.scss +0 -1145
  263. package/src/assets/bootstrap_scss/bootstrap-grid.scss +0 -29
  264. package/src/assets/bootstrap_scss/bootstrap-reboot.scss +0 -12
  265. package/src/assets/bootstrap_scss/bootstrap.scss +0 -44
  266. package/src/assets/bootstrap_scss/mixins/_alert.scss +0 -13
  267. package/src/assets/bootstrap_scss/mixins/_background-variant.scss +0 -22
  268. package/src/assets/bootstrap_scss/mixins/_badge.scss +0 -17
  269. package/src/assets/bootstrap_scss/mixins/_border-radius.scss +0 -63
  270. package/src/assets/bootstrap_scss/mixins/_box-shadow.scss +0 -20
  271. package/src/assets/bootstrap_scss/mixins/_breakpoints.scss +0 -123
  272. package/src/assets/bootstrap_scss/mixins/_buttons.scss +0 -110
  273. package/src/assets/bootstrap_scss/mixins/_caret.scss +0 -62
  274. package/src/assets/bootstrap_scss/mixins/_clearfix.scss +0 -7
  275. package/src/assets/bootstrap_scss/mixins/_deprecate.scss +0 -10
  276. package/src/assets/bootstrap_scss/mixins/_float.scss +0 -14
  277. package/src/assets/bootstrap_scss/mixins/_forms.scss +0 -177
  278. package/src/assets/bootstrap_scss/mixins/_gradients.scss +0 -45
  279. package/src/assets/bootstrap_scss/mixins/_grid-framework.scss +0 -71
  280. package/src/assets/bootstrap_scss/mixins/_grid.scss +0 -69
  281. package/src/assets/bootstrap_scss/mixins/_hover.scss +0 -37
  282. package/src/assets/bootstrap_scss/mixins/_image.scss +0 -36
  283. package/src/assets/bootstrap_scss/mixins/_list-group.scss +0 -21
  284. package/src/assets/bootstrap_scss/mixins/_lists.scss +0 -7
  285. package/src/assets/bootstrap_scss/mixins/_nav-divider.scss +0 -11
  286. package/src/assets/bootstrap_scss/mixins/_pagination.scss +0 -22
  287. package/src/assets/bootstrap_scss/mixins/_reset-text.scss +0 -17
  288. package/src/assets/bootstrap_scss/mixins/_resize.scss +0 -6
  289. package/src/assets/bootstrap_scss/mixins/_screen-reader.scss +0 -34
  290. package/src/assets/bootstrap_scss/mixins/_size.scss +0 -7
  291. package/src/assets/bootstrap_scss/mixins/_table-row.scss +0 -39
  292. package/src/assets/bootstrap_scss/mixins/_text-emphasis.scss +0 -17
  293. package/src/assets/bootstrap_scss/mixins/_text-hide.scss +0 -11
  294. package/src/assets/bootstrap_scss/mixins/_text-truncate.scss +0 -8
  295. package/src/assets/bootstrap_scss/mixins/_transition.scss +0 -16
  296. package/src/assets/bootstrap_scss/mixins/_visibility.scss +0 -8
  297. package/src/assets/bootstrap_scss/utilities/_align.scss +0 -8
  298. package/src/assets/bootstrap_scss/utilities/_background.scss +0 -19
  299. package/src/assets/bootstrap_scss/utilities/_borders.scss +0 -75
  300. package/src/assets/bootstrap_scss/utilities/_clearfix.scss +0 -3
  301. package/src/assets/bootstrap_scss/utilities/_display.scss +0 -26
  302. package/src/assets/bootstrap_scss/utilities/_embed.scss +0 -39
  303. package/src/assets/bootstrap_scss/utilities/_flex.scss +0 -51
  304. package/src/assets/bootstrap_scss/utilities/_float.scss +0 -11
  305. package/src/assets/bootstrap_scss/utilities/_overflow.scss +0 -5
  306. package/src/assets/bootstrap_scss/utilities/_position.scss +0 -32
  307. package/src/assets/bootstrap_scss/utilities/_screenreaders.scss +0 -11
  308. package/src/assets/bootstrap_scss/utilities/_shadows.scss +0 -6
  309. package/src/assets/bootstrap_scss/utilities/_sizing.scss +0 -20
  310. package/src/assets/bootstrap_scss/utilities/_spacing.scss +0 -73
  311. package/src/assets/bootstrap_scss/utilities/_stretched-link.scss +0 -19
  312. package/src/assets/bootstrap_scss/utilities/_text.scss +0 -72
  313. package/src/assets/bootstrap_scss/utilities/_visibility.scss +0 -13
  314. package/src/assets/bootstrap_scss/vendor/_rfs.scss +0 -204
  315. package/src/components/misc/Player.vue +0 -792
  316. package/src/shims-vuex.d.ts +0 -7
  317. package/src/views/Home.vue +0 -18
@@ -1,256 +1,221 @@
1
1
  <template>
2
- <div class="d-flex flex-column align-items-center">
3
- <div class="d-flex justify-content-center" v-if="loading">
4
- <div class="spinner-border mr-3"></div>
5
- <h3 class="mt-2">{{ $t('Loading emissions ...') }}</h3>
6
- </div>
7
- <div
8
- v-if="showCount && loaded && emissions.length > 1"
9
- class="text-secondary mb-2"
10
- >
11
- {{ $t('Number emissions', { nb: displayCount }) + sortText }}
12
- </div>
13
- <ul
14
- class="emission-list"
15
- :class="smallItems ? 'threeEmissions' : 'twoEmissions'"
16
- v-if="!itemPlayer"
17
- >
18
- <EmissionItem
19
- v-bind:emission="e"
20
- v-for="e in emissions"
21
- v-bind:key="e.emissionId"
22
- @emissionNotVisible="displayCount--"
23
- />
24
- </ul>
25
- <ul
26
- class="d-flex flex-wrap justify-content-around"
27
- v-show="
28
- (displayRubriquage && rubriques) || !(displayRubriquage && loaded)
29
- "
30
- v-else
31
- >
32
- <EmissionPlayerItem
33
- v-bind:emission="e"
34
- v-for="e in emissions"
35
- v-bind:key="e.emissionId"
36
- class="m-3 flex-shrink"
37
- :class="mainRubriquage(e)"
38
- :rubriqueName="rubriquesId(e)"
39
- @emissionNotVisible="displayCount--"
40
- />
41
- </ul>
42
- <button
43
- class="btn"
44
- :class="buttonPlus ? 'btn-linkPlus' : 'btn-more'"
45
- @click="displayMore"
46
- :disabled="inFetching"
47
- v-show="!allFetched && loaded"
48
- :aria-label="$t('See more')"
49
- >
50
- <template v-if="buttonPlus">{{ $t('See more') }}</template>
51
- <div class="saooti-plus"></div>
52
- </button>
53
- </div>
2
+ <ListPaginate
3
+ id="emissionListPaginate"
4
+ v-model:first="dfirst"
5
+ v-model:rowsPerPage="dsize"
6
+ v-model:isMobile="isMobile"
7
+ :text-count="showCount && emissions.length > 1 ? $t('Number emissions', { nb: displayCount }) + sortText : undefined"
8
+ :total-count="totalCount"
9
+ :loading="loading"
10
+ :loading-text="loading?$t('Loading emissions ...'):undefined"
11
+ >
12
+ <template #list>
13
+ <ul
14
+ v-if="!itemPlayer"
15
+ class="emission-list"
16
+ :class="smallItems ? 'three-emissions' : 'two-emissions'"
17
+ >
18
+ <template
19
+ v-for="e in displayArray"
20
+ :key="e.emissionId"
21
+ >
22
+ <EmissionItem
23
+ v-if="0!==e.emissionId"
24
+ :emission="e"
25
+ />
26
+ </template>
27
+ </ul>
28
+ <div
29
+ v-else
30
+ v-show="(displayRubriquage && rubriques)||!displayRubriquage"
31
+ class="d-flex flex-wrap justify-content-around"
32
+ >
33
+ <template
34
+ v-for="e in displayArray"
35
+ :key="e.emissionId"
36
+ >
37
+ <EmissionPlayerItem
38
+ v-if="0!==e.emissionId"
39
+ :emission="e"
40
+ class="m-3 flex-shrink-0"
41
+ :class="mainRubriquage(e)"
42
+ :rubrique-name="rubriquesId(e)"
43
+ @emissionNotVisible="displayCount--"
44
+ />
45
+ </template>
46
+ </div>
47
+ </template>
48
+ </ListPaginate>
54
49
  </template>
55
50
 
56
- <style lang="scss">
57
- .loading-title {
58
- margin: 0.4rem 0 0;
59
- }
60
- .emission-list {
61
- align-self: stretch;
62
- flex-grow: 1;
63
- margin: 0;
64
- padding: 0;
65
- /*For ie11 */
66
- display: flex;
67
- flex-wrap: wrap;
68
- /* end */
69
-
70
- display: grid; /* 1 */
71
- grid-gap: 1rem; /* 3 */
72
- justify-content: space-between; /* 4 */
73
- }
74
- .twoEmissions {
75
- grid-template-columns: repeat(auto-fill, 49%); /* 2 */
76
- }
77
-
78
- .threeEmissions {
79
- grid-template-columns: repeat(auto-fill, 32%); /* 2 */
80
- }
81
-
82
- /** PHONES*/
83
- @media (max-width: 1200px) {
84
- .emission-list {
85
- grid-template-columns: auto;
86
- }
87
- }
88
- </style>
89
-
90
51
  <script lang="ts">
91
- const octopusApi = require('@saooti/octopus-api');
92
- import emissionApi from '@/api/emissions';
93
- import EmissionItem from './EmissionItem.vue';
94
- import EmissionPlayerItem from './EmissionPlayerItem.vue';
95
-
52
+ import ListPaginate from '../list/ListPaginate.vue';
53
+ import octopusApi from '@saooti/octopus-api';
54
+ import { handle403 } from '../../mixins/handle403';
96
55
  import { state } from '../../../store/paramStore';
97
-
98
- import { defineComponent } from 'vue'
56
+ import { Emission } from '@/store/class/general/emission';
57
+ import { Rubrique } from '@/store/class/rubrique/rubrique';
58
+ import { defineComponent, defineAsyncComponent } from 'vue';
59
+ import { FetchParam } from '@/store/class/general/fetchParam';
60
+ import { AxiosError } from 'axios';
61
+ import { emptyEmissionData } from '@/store/typeAppStore';
62
+ import { Rubriquage } from '@/store/class/rubrique/rubriquage';
63
+ const EmissionItem = defineAsyncComponent(() => import('./EmissionItem.vue'));
64
+ const EmissionPlayerItem = defineAsyncComponent(() => import('./EmissionPlayerItem.vue'));
99
65
  export default defineComponent({
100
66
  name: 'EmissionList',
101
67
 
102
- props: [
103
- 'first',
104
- 'size',
105
- 'query',
106
- 'organisationId',
107
- 'monetization',
108
- 'rubriqueId',
109
- 'rubriquageId',
110
- 'before',
111
- 'after',
112
- 'sort',
113
- 'showCount',
114
- 'noRubrique',
115
- 'includeHidden',
116
- ],
117
-
118
68
  components: {
119
69
  EmissionItem,
120
70
  EmissionPlayerItem,
71
+ ListPaginate
121
72
  },
122
73
 
123
- mounted() {
124
- this.fetchContent(true);
125
- if (this.displayRubriquage) {
126
- this.fetchRubriques();
127
- }
74
+ mixins: [handle403],
75
+
76
+ props: {
77
+ first: { default: 0, type: Number },
78
+ size: { default: 30, type: Number },
79
+ query: { default: undefined, type: String},
80
+ iabId: { default: undefined, type: Number },
81
+ organisationId: { default: undefined, type: String},
82
+ monetization: { default: 'UNDEFINED', type: String},
83
+ before: { default: undefined, type: String},
84
+ after: { default: undefined, type: String},
85
+ sort: { default: 'DATE', type: String},
86
+ showCount: { default: false, type: Boolean },
87
+ includeHidden: { default: false, type: Boolean },
88
+ rubriqueId: { default: () => [], type: Array as ()=> Array<number> },
89
+ rubriquageId:{ default: () => [], type: Array as ()=> Array<number> },
90
+ noRubriquageId: { default: () => [], type: Array as ()=> Array<number> },
128
91
  },
129
92
 
130
93
  data() {
131
94
  return {
132
- loading: true,
133
- loaded: true,
134
- dfirst: this.$props.first,
135
- dsize: this.$props.size,
136
- totalCount: 0,
137
- displayCount: 0,
138
- emissions: [] as any,
139
- rubriques: undefined as any,
140
- inFetching: false,
95
+ loading: true as boolean,
96
+ dfirst: this.first as number,
97
+ dsize: this.size as number,
98
+ totalCount: 0 as number,
99
+ displayCount: 0 as number,
100
+ emissions: [] as Array<Emission>,
101
+ rubriques: undefined as Array<Rubrique>|undefined,
102
+ isMobile: false as boolean,
141
103
  };
142
104
  },
143
105
 
144
106
  computed: {
145
- allFetched():boolean {
146
- return this.dfirst >= this.totalCount;
147
- },
148
- buttonPlus() {
149
- return state.generalParameters.buttonPlus;
150
- },
151
- smallItems() {
152
- return state.emissionsPage.smallItems;
107
+ displayArray(): Array<Emission>{
108
+ if(this.isMobile){
109
+ return this.emissions;
110
+ }
111
+ return this.emissions.slice(this.dfirst, Math.min(this.dfirst + this.dsize,this.totalCount));
112
+ },
113
+ smallItems(): boolean {
114
+ return (state.emissionsPage.smallItems as boolean);
153
115
  },
154
- itemPlayer() {
155
- return state.emissionsPage.itemPlayer;
116
+ itemPlayer(): boolean {
117
+ return (state.emissionsPage.itemPlayer as boolean);
156
118
  },
157
- displayRubriquage() {
119
+ displayRubriquage(): number|undefined {
158
120
  return state.emissionsPage.rubriquage;
159
121
  },
160
- changed():any {
122
+ changed(): string {
161
123
  return `${this.first}|${this.size}|${this.organisationId}|${this.query}|${this.monetization}|${this.includeHidden}
162
- ${this.rubriqueId}|${this.rubriquageId}|${this.before}|${this.after}|${this.sort}|${this.noRubrique}`;
124
+ ${this.iabId}|${this.rubriqueId}|${this.rubriquageId}|${this.before}|${this.after}|${this.sort}|${this.noRubriquageId}`;
163
125
  },
164
- sortText():string {
126
+ sortText(): string {
165
127
  switch (this.sort) {
166
128
  case 'SCORE':
167
- return this.$t('sort by score');
129
+ return " "+this.$t('sort by score');
168
130
  case 'LAST_PODCAST_DESC':
169
- return this.$t('sort by date');
131
+ return " "+this.$t('sort by date');
170
132
  case 'NAME':
171
- return this.$t('sort by alphabetical');
133
+ return " "+this.$t('sort by alphabetical');
172
134
  default:
173
- return this.$t('sort by date');
135
+ return " "+this.$t('sort by date');
174
136
  }
175
137
  },
176
- filterOrga():any {
177
- return this.$store.state.filter.organisationId;
178
- },
179
- organisation():any {
180
- if (this.organisationId) return this.organisationId;
181
- if (this.filterOrga) return this.filterOrga;
182
- return undefined;
138
+ organisation(): string|undefined {
139
+ return this.organisationId ?? this.$store.state.filter.organisationId;
183
140
  },
184
141
  },
142
+ watch: {
143
+ changed(): void {
144
+ this.reloadList();
145
+ },
146
+ dsize():void{
147
+ this.reloadList();
148
+ },
149
+ dfirst(): void{
150
+ if(!this.emissions[this.dfirst] || 0===this.emissions[this.dfirst].emissionId){
151
+ this.fetchContent(false);
152
+ }
153
+ },
154
+ },
185
155
 
156
+ mounted() {
157
+ this.fetchContent(true);
158
+ if (this.displayRubriquage) {
159
+ this.fetchRubriques();
160
+ }
161
+ },
186
162
  methods: {
187
- async fetchContent(reset: boolean) {
188
- this.inFetching = true;
189
- if (reset) {
190
- this.emissions.length = 0;
191
- this.dfirst = 0;
192
- this.loading = true;
193
- this.loaded = false;
194
- }
195
- let param:any = {
163
+ reloadList(){
164
+ this.dfirst = 0;
165
+ this.fetchContent(true);
166
+ },
167
+ async fetchContent(reset: boolean): Promise<void> {
168
+ this.loading = true;
169
+ const param: FetchParam = {
196
170
  first: this.dfirst,
197
171
  size: this.dsize,
198
172
  query: this.query,
199
173
  organisationId: this.organisation,
200
174
  monetisable: this.monetization,
201
- rubriqueId: this.rubriqueId,
202
- rubriquageId: this.rubriquageId,
175
+ iabId: this.iabId,
203
176
  before: this.before,
204
177
  after: this.after,
205
178
  sort: this.sort,
206
- noRubrique: this.noRubrique,
179
+ noRubriquageId: this.noRubriquageId.length ? this.noRubriquageId : undefined,
180
+ rubriqueId: this.rubriqueId.length ? this.rubriqueId : undefined,
181
+ rubriquageId: this.rubriquageId.length ? this.rubriquageId : undefined,
182
+ includeHidden:this.includeHidden,
207
183
  };
208
- if (this.includeHidden) {
209
- param.includeHidden = this.includeHidden;
210
- const data = await emissionApi.fetchEmissionsAdmin(this.$store, param);
211
- this.afterFetching(reset, data);
212
- } else {
213
- const data = await octopusApi.fetchEmissions(param);
184
+ try {
185
+ const data = await octopusApi.fetchDataWithParams<{count: number;result:Array<Emission>;sort: string;}>(0, 'emission/search',param, true);
214
186
  this.afterFetching(reset, data);
187
+ } catch (error) {
188
+ this.handle403((error as AxiosError));
215
189
  }
216
190
  },
217
-
218
- afterFetching(reset: any, data: any) {
191
+ afterFetching(reset: boolean, data: {count: number, result: Array<Emission>, sort: string}): void {
219
192
  if (reset) {
220
193
  this.emissions.length = 0;
221
- this.dfirst = 0;
222
194
  }
223
- this.loading = false;
224
- this.loaded = true;
195
+ if(this.dfirst > this.emissions.length){
196
+ for (let i = this.emissions.length-1, len = this.dfirst + this.dsize; i < len; i++) {
197
+ this.emissions.push(emptyEmissionData());
198
+ }
199
+ }
225
200
  this.displayCount = data.count;
226
- this.emissions = this.emissions.concat(data.result).filter((e:any) => {
201
+ const responseEmissions = data.result.filter((e: Emission|null) => {
227
202
  if (null === e) {
228
203
  this.displayCount--;
229
204
  }
230
205
  return null !== e;
231
206
  });
232
- this.dfirst += this.dsize;
207
+ this.emissions = this.emissions.slice(0, this.dfirst).concat(responseEmissions).concat(this.emissions.slice(this.dfirst+this.dsize, this.emissions.length));
233
208
  this.totalCount = data.count;
234
- this.inFetching = false;
235
- },
236
-
237
- displayMore(event: { preventDefault: () => void; }) {
238
- event.preventDefault();
239
- this.fetchContent(false);
209
+ this.loading = false;
240
210
  },
241
- async fetchRubriques() {
242
- const data = await octopusApi.fetchTopic(this.displayRubriquage);
211
+ async fetchRubriques(): Promise<void> {
212
+ const data = await octopusApi.fetchData<Rubriquage>(0, 'rubriquage/'+this.displayRubriquage);
243
213
  this.rubriques = data.rubriques;
244
214
  },
245
- mainRubriquage(emission: { rubriqueIds: any[]; }) {
246
- if (
247
- emission.rubriqueIds &&
248
- emission.rubriqueIds[0] === state.emissionsPage.mainRubrique
249
- )
250
- return 'partenaireRubrique';
251
- return '';
215
+ mainRubriquage(emission: Emission): string {
216
+ return emission.rubriqueIds?.[0] === state.emissionsPage.mainRubrique? 'partenaireRubrique': '';
252
217
  },
253
- rubriquesId(emission: { rubriqueIds: string|any[]; }) {
218
+ rubriquesId(emission: Emission): string|undefined {
254
219
  if (
255
220
  !this.displayRubriquage ||
256
221
  !emission.rubriqueIds ||
@@ -259,19 +224,12 @@ export default defineComponent({
259
224
  !this.rubriques.length
260
225
  )
261
226
  return undefined;
262
- let rubrique = this.rubriques.find(
263
- ( element: { rubriqueId: any; }) => element.rubriqueId === emission.rubriqueIds[0]
227
+ const rubrique = this.rubriques.find(
228
+ (element: Rubrique) => element.rubriqueId === emission.rubriqueIds[0]
264
229
  );
230
+ if(!rubrique){ return undefined; }
265
231
  return rubrique.name;
266
232
  },
267
233
  },
268
-
269
- watch: {
270
- changed: {
271
- handler() {
272
- this.fetchContent(true);
273
- },
274
- },
275
- },
276
- });
277
- </script>
234
+ })
235
+ </script>