@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,552 +1,300 @@
1
1
  <template>
2
- <div>
3
- <div class="page-box" v-if="loaded && !error">
4
- <h1 v-if="!isOuestFrance">{{ titlePage }}</h1>
5
- <Countdown :timeRemaining="timeRemaining" v-if="isCounter" />
6
- <div class="d-flex">
2
+ <div class="page-box">
3
+ <template v-if="loaded && !error">
4
+ <div class="page-podcast-title">
5
+ <h1>{{ titlePage }}</h1>
6
+ <Countdown
7
+ v-if="isCounter"
8
+ :time-remaining="timeRemaining"
9
+ />
10
+ </div>
11
+ <div class="d-flex page-podcast">
7
12
  <div class="d-flex flex-column flex-super-grow">
8
13
  <RecordingItemButton
9
- class="module-box text-center-mobile flex-no-grow"
10
- :podcast="podcast"
11
- :live="true"
12
- :recording="fetchConference"
13
- @deleteItem="removeDeleted"
14
- @validatePodcast="updatePodcast"
15
14
  v-if="
16
15
  !!fetchConference &&
17
16
  isLiveReadyToRecord &&
18
17
  !isNotRecorded &&
19
18
  isOctopusAndAnimator
20
19
  "
21
- ></RecordingItemButton>
20
+ class="module-box text-center-mobile flex-grow-0"
21
+ :podcast="podcast"
22
+ :live="true"
23
+ :recording="fetchConference"
24
+ @deleteItem="removeDeleted"
25
+ @validatePodcast="updatePodcast"
26
+ />
22
27
  <EditBox
28
+ v-else-if="editRight && pageParameters.isEditBox"
23
29
  :podcast="podcast"
24
- v-else-if="editRight && isEditBox"
25
- :isReady="isReady"
26
30
  @validatePodcast="updatePodcast"
27
- ></EditBox>
28
- <div class="module-box">
29
- <h2
30
- class="text-uppercase font-weight-bold title-page-podcast"
31
- v-if="!isOuestFrance"
32
- >
33
- {{ this.podcast.title }}
34
- </h2>
35
- <router-link
36
- :to="{
37
- name: 'emission',
38
- params: { emissionId: podcast.emission.emissionId },
39
- query: { productor: this.$store.state.filter.organisationId },
40
- }"
41
- v-else
42
- >
43
- <h1>{{ this.podcast.emission.name }}</h1>
44
- </router-link>
45
- <div class="mb-5 mt-3 d-flex">
46
- <div class="w-100">
47
- <PodcastImage
48
- :class="[
49
- !isOuestFrance && !isLiveReadyToRecord
50
- ? 'shadow-element'
51
- : '',
52
- isLiveReadyToRecord &&
53
- fetchConference &&
54
- 'null' !== fetchConference &&
55
- fetchConference.status
56
- ? fetchConference.status.toLowerCase() + '-shadow'
57
- : '',
58
- ]"
59
- class="mr-3"
60
- v-bind:podcast="podcast"
61
- :hidePlay="!isLiveReadyToRecord"
62
- :playingPodcast="playingPodcast"
63
- @playPodcast="playPodcast"
64
- :fetchConference="fetchConference"
65
- :isAnimatorLive="isOctopusAndAnimator"
66
- />
67
- <h3 v-if="isOuestFrance">{{ this.podcast.title }}</h3>
68
- <div
69
- class="date-text-zone"
70
- :class="isLiveReady ? 'justify-content-between' : ''"
71
- >
72
- <div
73
- :class="!isLiveReady ? 'mr-5' : ''"
74
- v-if="!isOuestFrance && 0 !== date.length"
75
- >
76
- {{ date }}
77
- </div>
78
- <div class="ml-2 mr-2 duration">
79
- <span class="saooti-clock3" v-if="isOuestFrance"></span
80
- >{{ $t('Duration', { duration: duration }) }}
81
- </div>
82
- <div class="text-danger" v-if="isLiveReady">
83
- {{ $t('Episode record in live') }}
84
- </div>
85
- </div>
86
- <div
87
- class="descriptionText html-wysiwyg-content"
88
- v-html="urlify(this.podcast.description)"
89
- ></div>
90
- <div class="mt-3 mb-3">
91
- <div class="comma" v-if="podcast.animators">
92
- {{ $t('Animated by : ') }}
93
- <router-link
94
- :aria-label="$t('Participant')"
95
- class="link-info"
96
- v-for="animator in podcast.animators"
97
- v-bind:key="animator.participantId"
98
- :to="{
99
- name: 'participant',
100
- params: { participantId: animator.participantId },
101
- query: {
102
- productor: this.$store.state.filter.organisationId,
103
- },
104
- }"
105
- >{{ getName(animator) }}</router-link
106
- >
107
- </div>
108
- <div v-if="!isOuestFrance">
109
- {{ $t('Emission') + ' : ' }}
110
- <router-link
111
- class="link-info"
112
- :to="{
113
- name: 'emission',
114
- params: { emissionId: podcast.emission.emissionId },
115
- query: {
116
- productor: this.$store.state.filter.organisationId,
117
- },
118
- }"
119
- >{{ this.podcast.emission.name }}</router-link
120
- >
121
- </div>
122
- <div v-if="!isPodcastmaker">
123
- {{ $t('Producted by : ') }}
124
- <router-link
125
- class="link-info"
126
- :to="{
127
- name: 'productor',
128
- params: { productorId: podcast.organisation.id },
129
- query: {
130
- productor: this.$store.state.filter.organisationId,
131
- },
132
- }"
133
- >{{ this.podcast.organisation.name }}</router-link
134
- >
135
- </div>
136
- <div class="comma" v-if="podcast.guests">
137
- {{ $t('Guests') + ' : ' }}
138
- <router-link
139
- class="link-info"
140
- v-for="guest in podcast.guests"
141
- v-bind:key="guest.participantId"
142
- :to="{
143
- name: 'participant',
144
- params: { participantId: guest.participantId },
145
- query: {
146
- productor: this.$store.state.filter.organisationId,
147
- },
148
- }"
149
- >{{ getName(guest) }}</router-link
150
- >
151
- </div>
152
- <div v-if="editRight && !isPodcastmaker">
153
- <div
154
- class="mr-5"
155
- v-if="podcast.annotations && podcast.annotations.RSS"
156
- >
157
- {{ $t('From RSS') }}
158
- </div>
159
- <ErrorMessage
160
- :message="$t('Podcast is not visible for listeners')"
161
- v-if="!podcast.availability.visibility"
162
- />
163
- <ErrorMessage
164
- :message="$t('Podcast in ERROR, please contact Saooti')"
165
- v-if="'ERROR' === podcast.processingStatus"
166
- />
167
- <ErrorMessage
168
- :message="$t('Podcast not validated')"
169
- v-if="podcastNotValid"
170
- />
171
- </div>
172
- <ShareButtons
173
- :podcast="podcast"
174
- :bigRound="true"
175
- :audioUrl="podcast.audioUrl"
176
- v-if="isDownloadButton"
177
- ></ShareButtons>
178
- </div>
179
- </div>
180
- </div>
181
- <TagList v-if="isTagList" :tagList="podcast.tags" />
182
- </div>
31
+ />
32
+ <PodcastModuleBox
33
+ :playing-podcast="playingPodcast"
34
+ :podcast="podcast"
35
+ :fetch-conference="fetchConference"
36
+ />
183
37
  <SubscribeButtons
38
+ v-if="pageParameters.isShareButtons && countLink >= 1"
184
39
  :emission="podcast.emission"
185
- v-if="isShareButtons && countLink >= 1"
186
40
  />
187
41
  </div>
188
42
  <div
189
- class="d-flex flex-column share-container"
190
- :class="authenticated || notExclusive ? 'flex-grow' : ''"
43
+ class="d-flex flex-column flex-grow-mobile"
191
44
  >
192
45
  <SharePlayer
46
+ v-if="pageParameters.isSharePlayer && (authenticated || notExclusive)"
193
47
  :podcast="podcast"
194
48
  :emission="podcast.emission"
195
49
  :exclusive="exclusive"
196
- :notExclusive="notExclusive"
197
- :organisationId="organisationId"
198
- :isEducation="isEducation"
199
- v-if="isSharePlayer && (authenticated || notExclusive)"
200
- ></SharePlayer>
50
+ :not-exclusive="notExclusive"
51
+ :organisation-id="myOrganisationId"
52
+ :is-education="isEducation"
53
+ />
201
54
  <ShareButtons
55
+ v-if="pageParameters.isShareButtons"
202
56
  :podcast="podcast"
203
- :notExclusive="notExclusive"
204
- v-if="isShareButtons"
205
- ></ShareButtons>
57
+ :not-exclusive="notExclusive"
58
+ />
206
59
  </div>
207
60
  </div>
208
- <template v-if="!isOuestFrance">
209
- <CommentSection
210
- :podcast="podcast"
211
- v-if="!isPodcastmaker"
212
- :fetchConference="fetchConference"
213
- ref="commentSection"
214
- />
215
- <PodcastInlineList
216
- :emissionId="this.podcast.emission.emissionId"
217
- :href="'/main/pub/emission/' + this.podcast.emission.emissionId"
218
- :title="$t('More episodes of this emission')"
219
- :buttonText="$t('All podcast emission button')"
220
- />
221
- <PodcastInlineList
222
- v-for="c in categories"
223
- :key="c.id"
224
- :iabId="c.id"
225
- :href="'/main/pub/category/' + c.id"
226
- :title="$t('More episodes of this category : ', { name: c.name })"
227
- :buttonText="$t('All podcast button', { name: c.name })"
228
- />
229
- </template>
230
- </div>
231
- <div class="d-flex justify-content-center" v-if="!loaded">
232
- <div class="spinner-border mr-3"></div>
233
- <h3 class="mt-2">{{ $t('Loading content ...') }}</h3>
234
- </div>
235
- <div class="text-center" v-if="error">
236
- <h3>{{ $t("Podcast doesn't exist") }}</h3>
237
- </div>
61
+ <CommentSection
62
+ v-if="!isPodcastmaker"
63
+ ref="commentSection"
64
+ :podcast="podcast"
65
+ :fetch-conference="fetchConference"
66
+ />
67
+ <PodcastInlineList
68
+ class="mt-4"
69
+ :emission-id="podcast.emission.emissionId"
70
+ :href="'/main/pub/emission/' + podcast.emission.emissionId"
71
+ :title="$t('More episodes of this emission')"
72
+ :button-text="$t('All podcast emission button')"
73
+ />
74
+ <PodcastInlineList
75
+ v-for="c in categories"
76
+ :key="c.id"
77
+ :iab-id="c.id"
78
+ :href="'/main/pub/category/' + c.id"
79
+ :title="$t('More episodes of this category : ', { name: c.name })"
80
+ :button-text="$t('All podcast button', { name: c.name })"
81
+ />
82
+ </template>
83
+ <ClassicLoading
84
+ :loading-text="!loaded?$t('Loading content ...'):undefined"
85
+ :error-text="error?$t(`Podcast doesn't exist`):undefined"
86
+ />
238
87
  </div>
239
88
  </template>
240
- <style lang="scss">
241
- .title-page-podcast {
242
- font-size: 0.9rem;
243
- }
244
89
 
245
- .date-text-zone {
246
- display: flex;
247
- flex-wrap: wrap;
248
- margin-bottom: 1rem;
249
- @media (max-width: 600px) {
250
- display: initial;
251
- .duration {
252
- margin-left: 0 !important;
253
- }
254
- }
255
- }
256
- .share-container {
257
- @media (max-width: 960px) {
258
- flex-grow: 1;
259
- }
260
- }
261
- </style>
262
90
  <script lang="ts">
263
- // @ is an alias to /src
264
- import RecordingItemButton from '@/components/display/studio/RecordingItemButton.vue';
265
- import EditBox from '@/components/display/edit/EditBox.vue';
266
- import SharePlayer from '../display/sharing/SharePlayer.vue';
267
- import ShareButtons from '../display/sharing/ShareButtons.vue';
91
+ import { orgaComputed } from '../mixins/orgaComputed';
268
92
  import PodcastInlineList from '../display/podcasts/PodcastInlineList.vue';
269
- import PodcastImage from '../display/podcasts/PodcastImage.vue';
270
- import CommentSection from '../display/comments/CommentSection.vue';
271
- import TagList from '../display/podcasts/TagList.vue';
272
- import SubscribeButtons from '../display/sharing/SubscribeButtons.vue';
273
- import Countdown from '../display/live/CountDown.vue';
274
- const octopusApi = require('@saooti/octopus-api');
275
- import studioApi from '@/api/studio';
93
+ import PodcastModuleBox from '../display/podcasts/PodcastModuleBox.vue';
94
+ import ClassicLoading from '../form/ClassicLoading.vue';
95
+ import octopusApi from '@saooti/octopus-api';
96
+ import crudApi from '@/api/classicCrud';
276
97
  import { state } from '../../store/paramStore';
277
- import ErrorMessage from '../misc/ErrorMessage.vue';
278
- const moment = require('moment');
279
- const humanizeDuration = require('humanize-duration');
280
- import { displayMethods } from '../mixins/functions';
281
-
282
- import { defineComponent, ref } from 'vue'
98
+ import moment from 'moment';
99
+ import { Podcast } from '@/store/class/general/podcast';
100
+ import { Conference } from '@/store/class/conference/conference';
101
+ import { handle403 } from '../mixins/handle403';
102
+ import { defineComponent, defineAsyncComponent } from 'vue';
103
+ import CommentSectionVue from '../display/comments/CommentSection.vue';
104
+ import { CommentPodcast } from '@/store/class/general/comment';
105
+ import { Category } from '@/store/class/general/category';
106
+ import { AxiosError } from 'axios';
107
+ const ShareButtons = defineAsyncComponent(() => import('../display/sharing/ShareButtons.vue'));
108
+ const SharePlayer = defineAsyncComponent(() => import('../display/sharing/SharePlayer.vue'));
109
+ const EditBox = defineAsyncComponent(() => import('@/components/display/edit/EditBox.vue'));
110
+ const SubscribeButtons = defineAsyncComponent(() => import('../display/sharing/SubscribeButtons.vue'));
111
+ const RecordingItemButton = defineAsyncComponent(() => import('@/components/display/studio/RecordingItemButton.vue'));
112
+ const Countdown = defineAsyncComponent(() => import('../display/live/CountDown.vue'));
113
+ const CommentSection = defineAsyncComponent(() => import('../display/comments/CommentSection.vue'));
283
114
  export default defineComponent({
115
+ name: "Podcast",
284
116
  components: {
285
117
  PodcastInlineList,
286
- PodcastImage,
287
118
  ShareButtons,
288
119
  SharePlayer,
289
120
  EditBox,
290
- TagList,
291
121
  SubscribeButtons,
292
122
  RecordingItemButton,
293
123
  Countdown,
294
124
  CommentSection,
295
- ErrorMessage,
125
+ PodcastModuleBox,
126
+ ClassicLoading
296
127
  },
297
128
 
298
- mixins: [displayMethods],
299
- emits: ['podcastTitle', 'playPodcast', 'initConferenceId'],
129
+ mixins: [handle403, orgaComputed],
300
130
 
301
- async mounted() {
302
- await this.getPodcastDetails(this.podcastId);
303
- if (!this.isLiveReadyToRecord) return;
304
- if (this.isOctopusAndAnimator) {
305
- let data = await studioApi.getConference(
306
- this.$store,
307
- this.podcast.conferenceId
308
- );
309
- if ('' !== data.data) {
310
- this.fetchConference = data.data;
311
- } else {
312
- this.fetchConference = 'null';
313
- }
314
- } else {
315
- let data = await studioApi.getRealConferenceStatus(
316
- this.$store,
317
- this.podcast.conferenceId
318
- );
319
- this.fetchConference = {
320
- status: data.data,
321
- conferenceId: this.podcast.conferenceId,
322
- };
323
- }
324
- if (
325
- 'null' !== this.fetchConference &&
326
- 'PUBLISHING' !== this.fetchConference.status &&
327
- 'DEBRIEFING' !== this.fetchConference.status
328
- ) {
329
- this.$emit('initConferenceId', this.podcast.conferenceId);
330
- }
131
+ props: {
132
+ updateStatus: { default: undefined, type: String},
133
+ playingPodcast: { default: undefined, type: Object as ()=> Podcast},
134
+ podcastId: { default: 0, type: Number},
135
+ isEducation: { default: false, type: Boolean},
331
136
  },
332
137
 
333
- props: ['podcastId', 'playingPodcast', 'updateStatus', 'isEducation'],
138
+ emits: ['initConferenceId', 'podcastTitle'],
334
139
 
335
140
  data() {
336
141
  return {
337
- loaded: false,
338
- podcast: undefined as any,
339
- error: false,
340
- exclusive: false,
341
- notExclusive: false,
342
- fetchConference: undefined as any,
343
- };
344
- },
345
- setup() {
346
- const commentSection:any =ref(null);
347
- return {
348
- commentSection,
142
+ loaded: false as boolean,
143
+ podcast: undefined as Podcast|undefined,
144
+ error: false as boolean,
145
+ exclusive: false as boolean,
146
+ notExclusive: false as boolean,
147
+ fetchConference: undefined as Conference|undefined,
349
148
  };
350
149
  },
351
150
 
352
151
  computed: {
353
- isPodcastmaker() {
354
- return state.generalParameters.podcastmaker;
355
- },
356
- isEditBox() {
357
- return state.podcastPage.EditBox;
358
- },
359
- isShareButtons() {
360
- return state.podcastPage.ShareButtons;
361
- },
362
- isSharePlayer() {
363
- return state.podcastPage.SharePlayer;
364
- },
365
- allCategories() {
366
- return state.generalParameters.allCategories;
367
- },
368
- organisationId() {
369
- return state.generalParameters.organisationId;
370
- },
371
- authenticated():boolean {
372
- return state.generalParameters.authenticated;
373
- },
374
- isOuestFrance() {
375
- return state.podcastPage.ouestFranceStyle;
376
- },
377
- isTagList() {
378
- return state.podcastPage.tagList;
379
- },
380
- isDownloadButton() {
381
- return state.podcastPage.downloadButton;
152
+ isPodcastmaker(): boolean {
153
+ return (state.generalParameters.podcastmaker as boolean);
154
+ },
155
+ pageParameters(){
156
+ return {
157
+ isEditBox : (state.podcastPage.EditBox as boolean),
158
+ isShareButtons: (state.podcastPage.ShareButtons as boolean),
159
+ isSharePlayer: (state.podcastPage.SharePlayer as boolean),
160
+ };
382
161
  },
383
- emissionMainCategory():any {
384
- if (
385
- this.podcast.emission.annotations &&
386
- this.podcast.emission.annotations.mainIabId
387
- ) {
388
- return parseInt(this.podcast.emission.annotations.mainIabId, 10);
389
- } else if (
390
- this.podcast.emission.iabIds &&
391
- this.podcast.emission.iabIds.length
392
- ) {
162
+ emissionMainCategory(): number {
163
+ if(!this.podcast){return 0;}
164
+ if (this.podcast.emission.annotations?.mainIabId) {
165
+ return parseInt((this.podcast.emission.annotations.mainIabId as string), 10);
166
+ } else if (this.podcast.emission.iabIds?.length) {
393
167
  return this.podcast.emission.iabIds[0];
394
168
  }
395
169
  return 0;
396
170
  },
397
-
398
- categories():any {
399
- if ('undefined' === typeof this.podcast) return '';
400
- return this.allCategories
401
- .filter((item:any) => {
402
- return (
403
- this.podcast.emission.iabIds &&
171
+ categories(): Array<Category> {
172
+ if ('undefined' === typeof this.podcast) return [];
173
+ return this.$store.state.categories
174
+ .filter((item: Category) => {
175
+ return ( this.podcast?.emission.iabIds &&
404
176
  -1 !== this.podcast.emission.iabIds.indexOf(item.id)
405
177
  );
406
178
  })
407
- .sort((a:any, b:any) => {
179
+ .sort((a: Category, b: Category) => {
408
180
  if (a.id === this.emissionMainCategory) return -1;
409
181
  if (b.id === this.emissionMainCategory) return 1;
410
182
  return 0;
411
183
  });
412
184
  },
413
-
414
- date():string {
415
- if (1970 !== moment(this.podcast.pubDate).year())
416
- return moment(this.podcast.pubDate).format('D MMMM YYYY [à] HH[h]mm');
417
- return '';
185
+ editRight(): boolean {
186
+ return (true ===this.authenticated &&this.myOrganisationId === this.podcast?.organisation.id) ||true===state.generalParameters.isAdmin;
418
187
  },
419
-
420
- duration():string {
421
- if (this.podcast.duration <= 1) return '';
422
- if (this.podcast.duration > 600000) {
423
- return humanizeDuration(this.podcast.duration, {
424
- language: 'fr',
425
- largest: 1,
426
- round: true,
427
- });
428
- }
429
- return humanizeDuration(this.podcast.duration, {
430
- language: 'fr',
431
- largest: 2,
432
- round: true,
433
- });
434
- },
435
-
436
- editRight() {
437
- if (
438
- (this.authenticated &&
439
- this.organisationId === this.podcast.organisation.id) ||
440
- state.generalParameters.isAdmin
441
- )
442
- return true;
443
- return false;
444
- },
445
- isReady() {
446
- /* if(this.podcast && this.podcast.processingStatus !== "PLANNED" && this.podcast.processingStatus !== "PROCESSING"){
447
- return true;
448
- }else{
449
- return false;
450
- } */
451
- return true;
452
- },
453
- countLink() {
188
+ countLink(): number {
189
+ const platformShare = ['amazon','googlePodcasts','applePodcast', 'deezer', 'spotify', 'tunein',
190
+ 'radioline', 'podcastAddict', 'playerFm', 'stitcher', 'pocketCasts'];
454
191
  let count = 0;
455
- if (this.podcast.emission && this.podcast.emission.annotations) {
456
- if (undefined !== this.podcast.emission.annotations.applePodcast)
457
- count++;
458
- if (undefined !== this.podcast.emission.annotations.deezer) count++;
459
- if (undefined !== this.podcast.emission.annotations.spotify) count++;
460
- if (undefined !== this.podcast.emission.annotations.tunein) count++;
461
- if (undefined !== this.podcast.emission.annotations.tootak) count++;
462
- if (undefined !== this.podcast.emission.annotations.radioline) count++;
192
+ for (let i = 0, len = platformShare.length; i < len; i++) {
193
+ if (undefined !== this.podcast?.emission?.annotations?.[platformShare[i]]) count++;
463
194
  }
464
195
  return count;
465
196
  },
466
- isLiveReadyToRecord():boolean {
467
- return (
468
- this.podcast.conferenceId &&
469
- 0 !== this.podcast.conferenceId &&
470
- 'READY_TO_RECORD' === this.podcast.processingStatus
471
- );
472
- },
473
- isLiveReady():boolean {
474
- return (
475
- this.podcast.conferenceId &&
476
- 0 !== this.podcast.conferenceId &&
477
- 'READY' === this.podcast.processingStatus
478
- );
197
+ isLiveReadyToRecord(): boolean {
198
+ return (undefined!==this.podcast?.conferenceId && 0 !== this.podcast?.conferenceId && 'READY_TO_RECORD' === this.podcast?.processingStatus);
479
199
  },
480
- isCounter():boolean {
200
+ isCounter(): boolean {
481
201
  return (
482
202
  this.isLiveReadyToRecord &&
483
- this.fetchConference &&
203
+ undefined!==this.fetchConference &&
484
204
  ('PLANNED' === this.fetchConference.status ||
485
205
  'PENDING' === this.fetchConference.status)
486
206
  );
487
207
  },
488
- isNotRecorded():boolean {
208
+ isNotRecorded(): boolean {
489
209
  return (
490
210
  this.isLiveReadyToRecord &&
491
- this.fetchConference &&
211
+ undefined!==this.fetchConference &&
492
212
  'DEBRIEFING' === this.fetchConference.status
493
213
  );
494
214
  },
495
- isOctopusAndAnimator() {
215
+ isOctopusAndAnimator(): boolean {
496
216
  return (
497
217
  !this.isPodcastmaker &&
498
218
  this.editRight &&
499
- state.generalParameters.isRoleLive
219
+ (state.generalParameters.isRoleLive as boolean)
500
220
  );
501
221
  },
502
- titlePage():string {
503
- if (this.isLiveReadyToRecord) return this.$t('Live episode');
504
- return this.$t('Episode');
222
+ titlePage(): string {
223
+ return this.isLiveReadyToRecord ?this.$t('Live episode'): this.$t('Episode');
505
224
  },
506
- timeRemaining():string {
507
- return moment(this.podcast.pubDate).diff(moment(), 'seconds');
225
+ timeRemaining(): string {
226
+ return !this.podcast ? "":moment(this.podcast.pubDate).diff(moment(), 'seconds').toString();
508
227
  },
509
- podcastNotValid() {
510
- if (
511
- this.podcast &&
512
- this.podcast.availability &&
513
- false === this.podcast.valid
514
- )
515
- return true;
516
- return false;
228
+ },
229
+ watch: {
230
+ updateStatus(): void {
231
+ if (this.fetchConference && null !== this.fetchConference) {
232
+ this.fetchConference.status = this.updateStatus;
233
+ }
234
+ },
235
+ podcastId: {
236
+ immediate: true,
237
+ async handler() {
238
+ await this.getPodcastDetails();
239
+ this.initConference();
240
+ },
517
241
  },
518
242
  },
519
-
243
+
520
244
  methods: {
521
- updatePodcast(podcastUpdated: any) {
245
+ async initConference(){
246
+ if (!this.podcast || !this.isLiveReadyToRecord) return;
247
+ if (this.isOctopusAndAnimator && undefined!==this.podcast.conferenceId) {
248
+ const data = await crudApi.fetchData<Conference>(this.$store.state,9,'conference/'+this.podcast.conferenceId);
249
+ this.fetchConference = data ? data : {conferenceId:-1, title:''};
250
+ } else if(undefined!==this.podcast.conferenceId){
251
+ const data = await octopusApi.fetchData<string>(9, 'conference/realstatus/'+this.podcast.conferenceId);
252
+ this.fetchConference = {
253
+ status: data,
254
+ conferenceId: this.podcast.conferenceId,
255
+ title:'',
256
+ };
257
+ }
258
+ if (
259
+ this.fetchConference &&
260
+ -1 !== this.fetchConference.conferenceId &&
261
+ 'PUBLISHING' !== this.fetchConference.status &&
262
+ 'DEBRIEFING' !== this.fetchConference.status
263
+ ) {
264
+ this.$emit('initConferenceId', this.podcast.conferenceId);
265
+ }
266
+ },
267
+ updatePodcast(podcastUpdated: Podcast): void {
522
268
  this.podcast = podcastUpdated;
523
269
  },
524
- async getPodcastDetails(podcastId: any) {
270
+ initError():void{
271
+ this.error = true;
272
+ this.loaded = true;
273
+ },
274
+ handleAnnotations(){
275
+ if(!this.podcast){return;}
276
+ if (this.podcast.emission.annotations?.exclusive) {
277
+ this.exclusive ='true' === this.podcast.emission.annotations.exclusive;
278
+ this.exclusive =
279
+ this.exclusive &&
280
+ this.myOrganisationId !== this.podcast.organisation.id;
281
+ }
282
+ if (this.podcast.emission.annotations?.notExclusive) {
283
+ this.notExclusive ='true' === this.podcast.emission.annotations.notExclusive;
284
+ }
285
+ },
286
+ async getPodcastDetails(): Promise<void> {
287
+ this.loaded = false;
288
+ this.error = false;
525
289
  try {
526
- let data = await octopusApi.fetchPodcast(podcastId);
290
+ const data : Podcast = await octopusApi.fetchData<Podcast>(0, 'podcast/'+this.podcastId);
291
+ if("PUBLIC"!==data.organisation.privacy && this.filterOrga!==data.organisation.id){
292
+ this.initError();
293
+ return;
294
+ }
527
295
  this.podcast = data;
528
296
  this.$emit('podcastTitle', this.podcast.title);
529
- if (
530
- this.podcast.emission.annotations &&
531
- this.podcast.emission.annotations.exclusive
532
- ) {
533
- this.exclusive =
534
- 'true' === this.podcast.emission.annotations.exclusive
535
- ? true
536
- : false;
537
- this.exclusive =
538
- this.exclusive &&
539
- this.organisationId !== this.podcast.organisation.id;
540
- }
541
- if (
542
- this.podcast.emission.annotations &&
543
- this.podcast.emission.annotations.notExclusive
544
- ) {
545
- this.notExclusive =
546
- 'true' === this.podcast.emission.annotations.notExclusive
547
- ? true
548
- : false;
549
- }
297
+ this.handleAnnotations();
550
298
  if (
551
299
  (!this.podcast.availability.visibility ||
552
300
  ('READY_TO_RECORD' !== this.podcast.processingStatus &&
@@ -557,41 +305,21 @@ export default defineComponent({
557
305
  this.error = true;
558
306
  }
559
307
  this.loaded = true;
560
- } catch {
561
- this.error = true;
562
- this.loaded = true;
308
+ } catch(error) {
309
+ this.handle403((error as AxiosError));
310
+ this.initError();
563
311
  }
564
312
  },
565
- getName(person: { firstName: string; lastName: string; }) {
566
- const first = person.firstName || '';
567
- const last = person.lastName || '';
568
- return (first + ' ' + last).trim();
569
- },
570
- playPodcast(podcast: any) {
571
- this.$emit('playPodcast', podcast);
572
- },
573
- removeDeleted() {
313
+ removeDeleted(): void {
574
314
  if (window.history.length > 1) {
575
315
  this.$router.go(-1);
576
316
  } else {
577
317
  this.$router.push('/');
578
318
  }
579
319
  },
580
- receiveCommentEvent(event: any) {
581
- this.commentSection.receiveCommentEvent(event);
582
- },
583
- },
584
- watch: {
585
- updateStatus() {
586
- if (this.fetchConference && null !== this.fetchConference) {
587
- this.fetchConference.status = this.updateStatus;
588
- }
589
- },
590
- podcastId(val) {
591
- this.loaded = false;
592
- this.error = false;
593
- this.getPodcastDetails(val);
320
+ receiveCommentEvent(event:{type: string; comment: CommentPodcast; oldStatus?:string } ): void {
321
+ (this.$refs.commentSection as InstanceType<typeof CommentSectionVue>).receiveCommentEvent(event);
594
322
  },
595
323
  },
596
- });
597
- </script>
324
+ })
325
+ </script>