@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,359 +1,248 @@
1
1
  <template>
2
2
  <div
3
- class="d-flex flex-column align-items-center live-list-container"
4
3
  v-if="filterOrga || organisationId"
4
+ class="d-flex flex-column align-items-center"
5
5
  >
6
- <div class="d-flex justify-content-center" v-if="loading">
7
- <div class="spinner-border mr-3"></div>
8
- <h3 class="mt-2">{{ $t('Loading lives...') }}</h3>
9
- </div>
10
- <div
11
- v-if="
12
- loaded && !lives.length && !livesToBe.length && !livesTerminated.length
13
- "
14
- >
15
- <p>{{ $t('No live currently') }}</p>
16
- </div>
6
+ <ClassicLoading
7
+ :loading-text="loading?$t('Loading lives...'):undefined"
8
+ :error-text="isNoLive?$t('No live currently'):undefined"
9
+ />
17
10
  <div v-if="loaded && displayNextLiveMessage">
18
- <h3 class="text-danger">{{ displayNextLiveMessage }}</h3>
11
+ <h3 class="text-danger">
12
+ {{ displayNextLiveMessage }}
13
+ </h3>
19
14
  </div>
20
- <template v-if="lives.length">
21
- <div class="horizontal-separator"></div>
22
- <p class="live-list-category">{{ $t('In live') }}</p>
23
- <LiveItem
24
- class="mt-3"
25
- v-for="(l, index) in lives"
26
- :fetchConference="l"
27
- :key="l.podcastId"
28
- :index="index"
29
- @deleteItem="deleteLive"
30
- />
31
- </template>
32
- <template v-if="livesNotStarted.length">
33
- <div class="horizontal-separator"></div>
34
- <p class="live-list-category">{{ $t('This live is not started yet') }}</p>
35
- <LiveItem
36
- class="mt-3"
37
- v-for="(l, index) in livesNotStarted"
38
- :fetchConference="l"
39
- :key="l.podcastId"
40
- :index="index"
41
- @deleteItem="deleteLiveNotStarted"
42
- />
43
- </template>
44
- <template v-if="livesToBe.length">
45
- <div class="horizontal-separator"></div>
46
- <p class="live-list-category">{{ $t('Live to be') }}</p>
47
- <LiveItem
48
- class="mt-3"
49
- v-for="(l, index) in livesToBe"
50
- :fetchConference="l"
51
- :key="l.podcastId"
52
- :index="index"
53
- @deleteItem="deleteLiveToBe"
54
- />
55
- </template>
56
- <template v-if="livesTerminated.length">
57
- <div class="horizontal-separator"></div>
58
- <p class="live-list-category">{{ $t('Live terminated') }}</p>
59
- <LiveItem
60
- class="mt-3"
61
- v-for="(l, index) in livesTerminated"
62
- :fetchConference="l"
63
- :key="l.podcastId"
64
- :index="index"
65
- @deleteItem="deleteLiveTerminated"
66
- />
67
- </template>
68
- <template v-if="livesPublishing.length">
69
- <div class="horizontal-separator"></div>
70
- <p class="live-list-category">{{ $t('Publishing') }}</p>
71
- <LiveItem
72
- class="mt-3"
73
- v-for="(l, index) in livesPublishing"
74
- :fetchConference="l"
75
- :key="l.podcastId"
76
- :index="index"
77
- @deleteItem="deleteLivePublishing"
78
- />
79
- </template>
80
- <template v-if="livesError.length">
81
- <div class="horizontal-separator"></div>
82
- <p class="live-list-category">{{ $t('In error') }}</p>
83
- <LiveItem
84
- class="mt-3"
85
- v-for="(l, index) in livesError"
86
- :fetchConference="l"
87
- :key="l.podcastId"
88
- :index="index"
89
- @deleteItem="deleteLiveError"
90
- />
15
+ <template
16
+ v-for="(live, indexLive) in livesArray"
17
+ :key="live.status"
18
+ >
19
+ <template v-if="live.lives.length">
20
+ <hr class="w-100">
21
+ <p class="live-list-category">
22
+ {{ live.title }}
23
+ </p>
24
+ <LiveItem
25
+ v-for="(l, index) in live.lives"
26
+ :key="l.podcastId"
27
+ class="mt-3"
28
+ :fetch-conference="l"
29
+ :index="index"
30
+ @deleteItem="deleteLive(indexLive, $event)"
31
+ />
32
+ </template>
91
33
  </template>
92
34
  </div>
93
35
  </template>
94
36
 
95
- <style lang="scss">
96
- .live-list-container .horizontal-separator {
97
- border-top: 1px solid #cccccc;
98
- width: 100%;
99
- margin: 2rem;
100
- }
101
- .live-list-category {
102
- align-self: flex-start;
103
- text-transform: uppercase;
104
- font-weight: bold;
105
- }
106
-
107
- @media (max-width: 450px) {
108
- .live-list-container h3 {
109
- text-align: center;
110
- font-size: 1rem;
111
- }
112
- .live-list-container .horizontal-separator {
113
- margin: 1rem;
114
- }
115
- }
116
- </style>
117
-
118
37
  <script lang="ts">
119
- import studioApi from '@/api/studio';
38
+ import ClassicLoading from '../../form/ClassicLoading.vue';
120
39
  import LiveItem from './LiveItem.vue';
121
- const octopusApi = require('@saooti/octopus-api');
122
- const moment = require('moment');
40
+ import { handle403 } from '../../mixins/handle403';
41
+ import octopusApi from '@saooti/octopus-api';
42
+ import moment from 'moment';
123
43
  import { state } from '../../../store/paramStore';
124
-
44
+ import { Conference } from '@/store/class/conference/conference';
125
45
  import { defineComponent } from 'vue'
46
+ import { AxiosError } from 'axios';
126
47
  export default defineComponent({
127
48
  name: 'LiveList',
128
-
129
- props: {
130
- conferenceWatched: { default: [] },
131
- organisationId: { default: undefined as any },
132
- },
133
- emits: ['initConferenceIds'],
134
-
135
49
  components: {
136
50
  LiveItem,
51
+ ClassicLoading
137
52
  },
138
53
 
139
- async created() {
140
- const isLive = await octopusApi.liveEnabledOrganisation(
141
- this.filterOrgaUsed
142
- );
143
- if (isLive) {
144
- this.fetchContent();
145
- } else {
146
- this.loading = false;
147
- this.loaded = true;
148
- }
149
- },
54
+ mixins: [handle403],
150
55
 
56
+ props: {
57
+ conferenceWatched: { default: () => [], type: Array as ()=>Array<Conference>},
58
+ organisationId: { default: undefined, type: String},
59
+ },
60
+ emits: ['initConferenceIds'],
151
61
  data() {
152
62
  return {
153
- loading: true,
154
- loaded: true,
155
- lives: [] as any,
156
- livesNotStarted: [] as any,
157
- livesToBe: [] as any,
158
- livesTerminated: [] as any,
159
- livesError: [] as any,
160
- livesPublishing: [] as any,
63
+ loading: true as boolean,
64
+ loaded: true as boolean,
161
65
  };
162
66
  },
163
-
67
+
164
68
  computed: {
165
- filterOrgaUsed():any {
166
- if (this.filterOrga) return this.filterOrga;
167
- if (this.organisationId) return this.organisationId;
168
- return undefined;
169
- },
170
- filterOrga():any {
69
+ livesArray(): Array<{status:string, title:string, lives:Array<Conference>}>{
70
+ return [
71
+ {status: "RECORDING", title:this.$t('In live'), lives:[]},
72
+ {status: "PENDING", title:this.$t('This live is not started yet'), lives:[]},
73
+ {status: "PLANNED", title:this.$t('Live to be'), lives:[]},
74
+ {status: "DEBRIEFING", title:this.$t('Live terminated'), lives:[]},
75
+ {status: "PUBLISHING", title:this.$t('Publishing'), lives:[]},
76
+ {status: "ERROR", title:this.$t('In error'), lives:[]}
77
+ ];
78
+ },
79
+ isNoLive(): boolean{
80
+ return this.loaded && !this.livesArray[0].lives.length && !this.livesArray[2].lives.length && !this.livesArray[3].lives.length;
81
+ },
82
+ filterOrgaUsed(): string|undefined {
83
+ return this.filterOrga??this.organisationId;
84
+ },
85
+ filterOrga(): string {
171
86
  return this.$store.state.filter.organisationId;
172
87
  },
173
- displayNextLiveMessage():string {
174
- if (0 !== this.lives.length) return '';
175
- if (this.livesNotStarted.length > 0)
88
+ displayNextLiveMessage(): string {
89
+ if (0 !== this.livesArray[0].lives.length) return '';
90
+ if (this.livesArray[1].lives.length > 0)
176
91
  return this.$t('A live can start any moment');
177
- if (this.livesToBe.length > 0)
178
- return this.$t('Next live date', {
179
- date: moment(this.livesToBe[0].date).format('LLLL'),
180
- });
92
+ if (this.livesArray[2].lives.length > 0)
93
+ return this.$t('Next live date', {date: moment(this.livesArray[2].lives[0].date).format('LLLL'),});
181
94
  return '';
182
95
  },
183
- myOrganisationId() {
96
+ myOrganisationId(): string|undefined {
184
97
  return state.generalParameters.organisationId;
185
98
  },
186
- organisationRight() {
187
- if (this.isRoleLive && this.myOrganisationId === this.filterOrgaUsed)
188
- return true;
189
- return false;
99
+ organisationRight(): boolean {
100
+ return this.isRoleLive && this.myOrganisationId === this.filterOrgaUsed;
190
101
  },
191
- isRoleLive() {
192
- return state.generalParameters.isRoleLive;
102
+ isRoleLive(): boolean {
103
+ return (state.generalParameters.isRoleLive as boolean);
193
104
  },
194
105
  },
195
-
196
- methods: {
197
- initArrays() {
198
- this.lives.length = 0;
199
- this.livesNotStarted.length = 0;
200
- this.livesToBe.length = 0;
201
- this.livesTerminated.length = 0;
202
- this.livesError.length = 0;
203
- this.livesPublishing.length = 0;
204
- },
205
- async fetchContent() {
206
- if (!this.filterOrgaUsed) {
106
+ watch: {
107
+ async organisationId(): Promise<void> {
108
+ if(!this.organisationId){return;}
109
+ const isLive = await octopusApi.fetchData<boolean>(0, 'organisation/liveEnabled/'+this.organisationId);
110
+ if (isLive) {
111
+ if(!this.loading){
112
+ this.fetchContent();
113
+ }
114
+ } else {
115
+ this.initArrays();
207
116
  this.loading = false;
208
117
  this.loaded = true;
209
- return;
210
- }
211
- this.loading = true;
212
- this.loaded = false;
213
- let dataLives = await studioApi.listConferences(
214
- this.$store,
215
- true,
216
- this.filterOrgaUsed,
217
- 'RECORDING'
218
- );
219
- this.lives = dataLives.filter((p:any) => {
220
- return null !== p;
221
- });
222
- let dataLivesToBe = await studioApi.listConferences(
223
- this.$store,
224
- true,
225
- this.filterOrgaUsed,
226
- 'PENDING'
227
- );
228
- let indexPast = 0;
229
- for (let index = 0, len = dataLivesToBe.length; index < len; index++) {
230
- if (moment(dataLivesToBe[index].date).isBefore(moment())) {
231
- this.livesNotStarted.push(dataLivesToBe[index]);
232
- indexPast = index + 1;
233
- } else {
234
- break;
235
- }
236
- }
237
- let dataLivesPlanned = await studioApi.listConferences(
238
- this.$store,
239
- true,
240
- this.filterOrgaUsed,
241
- 'PLANNED'
242
- );
243
- this.livesToBe = dataLivesToBe
244
- .slice(indexPast)
245
- .concat(dataLivesPlanned)
246
- .filter((p: null) => {
247
- return null !== p;
248
- });
249
- if (this.organisationRight) {
250
- let dataLivesTerminated = await studioApi.listConferences(
251
- this.$store,
252
- true,
253
- this.filterOrgaUsed,
254
- 'DEBRIEFING'
255
- );
256
- this.livesTerminated = dataLivesTerminated.filter((p:any) => {
257
- return null !== p;
258
- });
259
- let dataLivesError = await studioApi.listConferences(
260
- this.$store,
261
- true,
262
- this.filterOrgaUsed,
263
- 'ERROR'
264
- );
265
- this.livesError = dataLivesError.filter((p:any) => {
266
- return null !== p;
267
- });
268
- let dataLivesPublishing = await studioApi.listConferences(
269
- this.$store,
270
- true,
271
- this.filterOrgaUsed,
272
- 'PUBLISHING'
273
- );
274
- this.livesPublishing = dataLivesPublishing.filter((p:any) => {
275
- return null !== p;
276
- });
277
118
  }
278
- let listIds = this.lives
279
- .concat(this.livesToBe)
280
- .concat(this.livesNotStarted);
281
- this.$emit('initConferenceIds', listIds);
282
- this.loading = false;
283
- this.loaded = true;
284
119
  },
285
- deleteLive(index: any) {
286
- this.lives.splice(index, 1);
287
- },
288
- deleteLiveToBe(index: any) {
289
- this.livesToBe.splice(index, 1);
120
+ filterOrga(): void {
121
+ if(!this.loading){
122
+ this.fetchContent();
123
+ }
290
124
  },
291
- deleteLiveTerminated(index: any) {
292
- this.livesTerminated.splice(index, 1);
125
+ conferenceWatched: {
126
+ handler(): void {
127
+ this.updateLiveLocal();
128
+ },
129
+ deep: true,
293
130
  },
294
- deleteLiveError(index: any) {
295
- this.livesError.splice(index, 1);
131
+ },
132
+
133
+ async created() {
134
+ if(!this.filterOrgaUsed){
135
+ return;
136
+ }
137
+ const isLive = await octopusApi.fetchData<boolean>(0, 'organisation/liveEnabled/'+this.filterOrgaUsed);
138
+ if (isLive) {
139
+ this.fetchContent();
140
+ } else {
141
+ this.loading = false;
142
+ this.loaded = true;
143
+ }
144
+ },
145
+ methods: {
146
+ initArrays(): void {
147
+ for (let i = 0, len = this.livesArray.length; i < len; i++) {
148
+ this.livesArray[i].lives.length = 0;
149
+ }
296
150
  },
297
- deleteLiveNotStarted(index: any) {
298
- this.livesNotStarted.splice(index, 1);
151
+ async fetchContent(): Promise<void> {
152
+ try {
153
+ this.initArrays();
154
+ if (!this.filterOrgaUsed) {
155
+ this.loading = false;
156
+ this.loaded = true;
157
+ return;
158
+ }
159
+ this.loading = true;
160
+ this.loaded = false;
161
+ let indexPast = 0;
162
+ let dataLivesToBe: Array<Conference> = [];
163
+ for (let i = 0, len = this.livesArray.length; i < len; i++) {
164
+ if (!this.organisationRight &&
165
+ ("DEBRIEFING"===this.livesArray[i].status ||"ERROR"===this.livesArray[i].status ||"PUBLISHING"===this.livesArray[i].status)) {
166
+ continue;
167
+ }
168
+ const dataLives = await octopusApi.fetchDataWithParams<Array<Conference>>(9, 'conference/list',{
169
+ organisationId: this.filterOrgaUsed,
170
+ withPodcastId: true,
171
+ status: this.livesArray[i].status,
172
+ });
173
+ if("PLANNED"!==this.livesArray[i].status && "PENDING"!==this.livesArray[i].status){
174
+ this.livesArray[i].lives = dataLives.filter((p: Conference | null) => {
175
+ return null !== p;
176
+ });
177
+ }else if("PENDING"===this.livesArray[i].status){
178
+ dataLivesToBe = dataLives;
179
+ for (let index = 0, len = dataLives.length; index < len; index++) {
180
+ if (moment(dataLives[index].date).isBefore(moment())) {
181
+ this.livesArray[i].lives.push(dataLives[index]);
182
+ indexPast = index + 1;
183
+ } else {break;}
184
+ }
185
+ }else{
186
+ this.livesArray[i].lives = dataLivesToBe
187
+ .slice(indexPast)
188
+ .concat(dataLives)
189
+ .filter((p: Conference | null) => {
190
+ return null !== p;
191
+ });
192
+ }
193
+ }
194
+ const listIds = this.livesArray[0].lives
195
+ .concat(this.livesArray[1].lives)
196
+ .concat(this.livesArray[2].lives);
197
+ this.$emit('initConferenceIds', listIds);
198
+ } catch (error) {
199
+ this.handle403((error as AxiosError));
200
+ }
201
+ this.loading = false;
202
+ this.loaded = true;
299
203
  },
300
- deleteLivePublishing(index: any) {
301
- this.livesPublishing.splice(index, 1);
204
+ deleteLive(indexLives: number, index: number): void {
205
+ this.livesArray[indexLives].lives.splice(index, 1);
302
206
  },
303
- updateLiveLocal() {
207
+ updateLiveLocal(): void {
304
208
  for (
305
209
  let index = 0, len = this.conferenceWatched.length;
306
210
  index < len;
307
211
  index++
308
212
  ) {
309
- const element:any = this.conferenceWatched[index];
310
- let indexLivesToBe = this.livesToBe.findIndex(
311
- ( el: { conferenceId: any; }) => el.conferenceId === element.conferenceId
213
+ const element = this.conferenceWatched[index];
214
+ const indexLivesToBe = this.livesArray[1].lives.findIndex(
215
+ (el: Conference) => el.conferenceId === element.conferenceId
312
216
  );
313
217
  if (-1 === indexLivesToBe) {
314
- let indexLives = this.lives.findIndex(
315
- ( el: { conferenceId: any; }) => el.conferenceId === element.conferenceId
218
+ const indexLives = this.livesArray[0].lives.findIndex(
219
+ (el: Conference) => el.conferenceId === element.conferenceId
316
220
  );
317
221
  if (-1 === indexLives || 'DEBRIEFING' !== element.status) continue;
318
- let newConf = this.lives[indexLives];
222
+ const newConf = this.livesArray[0].lives[indexLives];
319
223
  newConf.status = element.status;
320
- this.lives.splice(indexLives, 1);
321
- this.livesTerminated.push(newConf);
224
+ this.livesArray[0].lives.splice(indexLives, 1);
225
+ this.livesArray[3].lives.push(newConf);
322
226
  break;
323
227
  }
324
228
  if ('RECORDING' !== element.status) continue;
325
- let newConf = this.livesToBe[indexLivesToBe];
229
+ const newConf = this.livesArray[1].lives[indexLivesToBe];
326
230
  newConf.status = element.status;
327
- this.livesToBe.splice(indexLivesToBe, 1);
328
- this.lives.push(newConf);
231
+ this.livesArray[1].lives.splice(indexLivesToBe, 1);
232
+ this.livesArray[0].lives.push(newConf);
329
233
  break;
330
234
  }
331
235
  },
332
236
  },
333
-
334
- watch: {
335
- async organisationId() {
336
- this.initArrays();
337
- const isLive = await octopusApi.liveEnabledOrganisation(
338
- this.organisationId
339
- );
340
- if (isLive) {
341
- this.fetchContent();
342
- } else {
343
- this.loading = false;
344
- this.loaded = true;
345
- }
346
- },
347
- filterOrga():any {
348
- this.initArrays();
349
- this.fetchContent();
350
- },
351
- conferenceWatched: {
352
- handler() {
353
- this.updateLiveLocal();
354
- },
355
- deep: true,
356
- },
357
- },
358
- });
237
+ })
359
238
  </script>
239
+
240
+ <style lang="scss">
241
+ .octopus-app{
242
+ .live-list-category {
243
+ align-self: flex-start;
244
+ text-transform: uppercase;
245
+ font-weight: bold;
246
+ }
247
+ }
248
+ </style>