@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,110 +1,132 @@
1
1
  <template>
2
- <div class="d-flex flex-column" v-if="notEmpty">
3
- <h2 class="mb-4 mt-3">{{ $t('All live emission button') }}</h2>
4
- <ul class="podcast-list">
5
- <PodcastItem
6
- v-bind:podcast="l"
7
- v-for="l in lives"
8
- v-bind:key="l.podcastId"
9
- />
10
- </ul>
11
- <button
12
- class="btn"
13
- :class="buttonPlus ? 'btn-linkPlus mt-3' : 'btn-more'"
14
- @click="displayMore"
15
- v-show="!allFetched"
16
- :disabled="inFetching"
17
- :aria-label="$t('See more')"
2
+ <div
3
+ v-if="notEmpty"
4
+ class="p-3"
5
+ >
6
+ <h2 class="mb-0 mt-3">
7
+ {{ $t('All live emission button') }}
8
+ </h2>
9
+ <ListPaginate
10
+ id="liveListPaginate"
11
+ v-model:first="dfirst"
12
+ v-model:rowsPerPage="dsize"
13
+ v-model:isMobile="isMobile"
14
+ :total-count="totalCount"
15
+ :loading="false"
18
16
  >
19
- <template v-if="buttonPlus">{{ $t('See more') }}</template>
20
- <div class="saooti-plus"></div>
21
- </button>
17
+ <template #list>
18
+ <ul
19
+ class="podcast-list"
20
+ >
21
+ <template
22
+ v-for="p in displayArray"
23
+ :key="p.podcastId"
24
+ >
25
+ <PodcastItem
26
+ v-if="0!==p.podcastId"
27
+ :podcast="p"
28
+ />
29
+ </template>
30
+ </ul>
31
+ </template>
32
+ </ListPaginate>
22
33
  </div>
23
34
  </template>
24
35
 
25
- <style lang="scss"></style>
26
-
27
36
  <script lang="ts">
28
- const octopusApi = require('@saooti/octopus-api');
37
+ import ListPaginate from '../list/ListPaginate.vue';
38
+ import octopusApi from '@saooti/octopus-api';
29
39
  import PodcastItem from '../podcasts/PodcastItem.vue';
30
- import { state } from '../../../store/paramStore';
31
-
40
+ import { Podcast } from '@/store/class/general/podcast';
32
41
  import { defineComponent } from 'vue'
42
+ import { emptyPodcastData } from '@/store/typeAppStore';
33
43
  export default defineComponent({
34
44
  name: 'LiveHorizontalList',
35
45
 
36
- props: {
37
- first: { default: 0 },
38
- size: { default: 12 },
39
- emissionId: { default: undefined as any },
40
- },
41
-
42
46
  components: {
43
47
  PodcastItem,
48
+ ListPaginate
44
49
  },
45
50
 
46
- created() {
47
- this.fetchContent(true);
51
+ props: {
52
+ first: { default: 0, type: Number },
53
+ size: { default: 30, type: Number },
54
+ emissionId: { default: undefined, type: Number},
48
55
  },
49
56
 
50
57
  data() {
51
58
  return {
52
- dfirst: this.$props.first,
53
- dsize: this.$props.size,
54
- totalCount: 0,
55
- lives: [] as any,
56
- notEmpty: false,
57
- inFetching: false,
59
+ dfirst: this.first as number,
60
+ dsize: this.size as number,
61
+ totalCount: 0 as number,
62
+ lives: [] as Array<Podcast>,
63
+ notEmpty: false as boolean,
64
+ inFetching: false as boolean,
65
+ isMobile: false as boolean,
58
66
  };
59
67
  },
60
68
 
69
+
61
70
  computed: {
62
- allFetched():boolean {
63
- return this.dfirst >= this.totalCount;
64
- },
65
- buttonPlus() {
66
- return state.generalParameters.buttonPlus;
67
- },
71
+ displayArray(): Array<Podcast>{
72
+ if(this.isMobile){
73
+ return this.lives;
74
+ }
75
+ return this.lives.slice(this.dfirst, Math.min(this.dfirst + this.dsize,this.totalCount));
76
+ },
77
+ },
78
+ watch: {
79
+ dsize():void{
80
+ this.reloadList();
81
+ },
82
+ dfirst(): void{
83
+ if(!this.lives[this.dfirst] || 0===this.lives[this.dfirst].podcastId){
84
+ this.fetchContent(false);
85
+ }
86
+ },
68
87
  },
69
88
 
89
+ created() {
90
+ this.fetchContent(true);
91
+ },
70
92
  methods: {
71
- async fetchContent(reset: boolean) {
93
+ reloadList(){
94
+ this.dfirst = 0;
95
+ this.fetchContent(true);
96
+ },
97
+ async fetchContent(reset: boolean): Promise<void> {
72
98
  this.inFetching = true;
73
99
  if (reset) {
74
- this.lives.length = 0;
75
- this.dfirst = 0;
76
100
  this.notEmpty = false;
77
101
  }
78
- let param = {
102
+ const data = await octopusApi.fetchDataWithParams<{count: number;result:Array<Podcast>;sort: string;}>(0, 'podcast/search',{
79
103
  first: this.dfirst,
80
104
  size: this.dsize,
81
105
  emissionId: this.emissionId,
82
106
  sort: 'DATE',
83
- };
84
- const data = await octopusApi.fetchLives(param);
107
+ includeStatus:'READY_TO_RECORD'
108
+ }, true);
85
109
  this.afterFetching(reset, data);
86
110
  },
87
-
88
- afterFetching(reset: any, data: { result: any; count: number; }) {
111
+ afterFetching(reset: boolean, data: {count: number, result: Array<Podcast>, sort: string}): void {
89
112
  if (reset) {
90
113
  this.lives.length = 0;
91
- this.dfirst = 0;
92
114
  }
93
- this.lives = this.lives.concat(data.result).filter((l: null) => {
115
+ if(this.dfirst > this.lives.length){
116
+ for (let i = this.lives.length-1, len = this.dfirst + this.dsize; i < len; i++) {
117
+ this.lives.push(emptyPodcastData());
118
+ }
119
+ }
120
+ const responseLives = data.result.filter((l: Podcast | null) => {
94
121
  return null !== l;
95
122
  });
96
- this.dfirst += this.dsize;
123
+ this.lives = this.lives.slice(0, this.dfirst).concat(responseLives).concat(this.lives.slice(this.dfirst+this.dsize, this.lives.length));
97
124
  this.totalCount = data.count;
98
125
  if (0 !== this.lives.length) {
99
126
  this.notEmpty = true;
100
127
  }
101
128
  this.inFetching = false;
102
129
  },
103
-
104
- displayMore(event: { preventDefault: () => void; }) {
105
- event.preventDefault();
106
- this.fetchContent(false);
107
- },
108
130
  },
109
- });
110
- </script>
131
+ })
132
+ </script>
@@ -1,15 +1,22 @@
1
1
  <template>
2
- <div class="d-flex w-100" v-if="live">
2
+ <div
3
+ v-if="live"
4
+ class="d-flex w-100"
5
+ >
3
6
  <router-link
4
7
  class="live-date-box"
5
8
  :to="{
6
9
  name: 'podcast',
7
10
  params: { podcastId: live.podcastId },
8
- query: { productor: this.$store.state.filter.organisationId },
11
+ query: { productor: $store.state.filter.organisationId },
9
12
  }"
10
13
  >
11
- <div class="font-weight-bold">{{ date }}</div>
12
- <div class="font-weight-bold">{{ hours }}</div>
14
+ <div class="fw-bold">
15
+ {{ date }}
16
+ </div>
17
+ <div class="fw-bold">
18
+ {{ hours }}
19
+ </div>
13
20
  <div class="font-size-smaller">
14
21
  {{ $t('Duration', { duration: duration }) }}
15
22
  </div>
@@ -18,297 +25,265 @@
18
25
  :to="{
19
26
  name: 'podcast',
20
27
  params: { podcastId: live.podcastId },
21
- query: { productor: this.$store.state.filter.organisationId },
28
+ query: { productor: $store.state.filter.organisationId },
22
29
  }"
23
30
  >
24
31
  <PodcastImage
25
- class="mr-3"
32
+ class="me-3"
26
33
  :class="
27
34
  fetchConference &&
28
- 'null' !== fetchConference &&
29
- fetchConference.status
35
+ 'null' !== fetchConference &&
36
+ fetchConference.status
30
37
  ? fetchConference.status.toLowerCase() + '-shadow'
31
38
  : ''
32
39
  "
33
- v-bind:podcast="live"
34
- :hidePlay="false"
35
- :playingPodcast="false"
36
- :fetchConference="fetchConference"
37
- :isAnimatorLive="organisationRight"
40
+ :podcast="live"
41
+ :hide-play="false"
42
+ :playing-podcast="false"
43
+ :fetch-conference="fetchConference"
44
+ :is-animator-live="organisationRight"
38
45
  />
39
46
  </router-link>
40
47
  <div class="d-flex flex-column live-special-width">
41
48
  <router-link
42
- class="text-uppercase link-info text-truncate"
49
+ class="text-uppercase fw-bold text-truncate"
43
50
  :to="{
44
51
  name: 'podcast',
45
52
  params: { podcastId: live.podcastId },
46
- query: { productor: this.$store.state.filter.organisationId },
53
+ query: { productor: $store.state.filter.organisationId },
47
54
  }"
48
- >{{ live.title }}</router-link
49
55
  >
56
+ {{ live.title }}
57
+ </router-link>
50
58
  <router-link
51
- class="link-info text-truncate"
59
+ class="fw-bold text-truncate"
52
60
  :to="{
53
61
  name: 'emission',
54
62
  params: { emissionId: live.emission.emissionId },
55
- query: { productor: this.$store.state.filter.organisationId },
63
+ query: { productor: $store.state.filter.organisationId },
56
64
  }"
57
- >{{ live.emission.name }}</router-link
58
65
  >
66
+ {{ live.emission.name }}
67
+ </router-link>
59
68
  <div
60
- :id="'description-live-container-' + live.podcastId"
69
+ ref="descriptionLiveContainer"
61
70
  class="live-description-container html-wysiwyg-content"
62
71
  >
72
+ <!-- eslint-disable vue/no-v-html -->
63
73
  <div
64
- :id="'description-live-' + live.podcastId"
74
+ ref="descriptionLive"
65
75
  v-html="urlify(description)"
66
- ></div>
76
+ />
77
+ <!-- eslint-enable -->
67
78
  </div>
68
- <div class="comma" v-if="live.animators">
69
- {{ $t('Animated by : ') }}
79
+ <div
80
+ v-if="live.animators"
81
+ class="comma"
82
+ >
83
+ {{ $t('Animated by') }}<div class="mx-1">
84
+ :
85
+ </div>
70
86
  <router-link
71
- :aria-label="$t('Participant')"
72
- class="link-info"
73
87
  v-for="animator in live.animators"
74
- v-bind:key="animator.participantId"
88
+ :key="animator.participantId"
89
+ :title="$t('Participant')"
90
+ class="fw-bold"
75
91
  :to="{
76
92
  name: 'participant',
77
93
  params: { participantId: animator.participantId },
78
- query: { productor: this.$store.state.filter.organisationId },
94
+ query: { productor: $store.state.filter.organisationId },
79
95
  }"
80
- >{{ getName(animator) }}</router-link
81
96
  >
97
+ {{ getName(animator) }}
98
+ </router-link>
82
99
  </div>
83
100
  <div v-if="!isPodcastmaker">
84
101
  {{ $t('Producted by : ') }}
85
102
  <router-link
86
- class="link-info"
103
+ class="fw-bold"
87
104
  :to="{
88
105
  name: 'productor',
89
106
  params: { productorId: live.organisation.id },
90
- query: { productor: this.$store.state.filter.organisationId },
107
+ query: { productor: $store.state.filter.organisationId },
91
108
  }"
92
- >{{ live.organisation.name }}</router-link
93
109
  >
110
+ {{ live.organisation.name }}
111
+ </router-link>
94
112
  </div>
95
113
  <RecordingItemButton
114
+ v-if="fetchConference && organisationRight && isEditBox"
96
115
  :live="true"
97
116
  :recording="fetchConference"
98
117
  :podcast="live"
99
118
  @deleteItem="deleteItem"
100
119
  @validatePodcast="updatePodcast"
101
- v-if="fetchConference && organisationRight && isEditBox"
102
- ></RecordingItemButton>
120
+ />
103
121
  </div>
104
122
  </div>
105
123
  </template>
106
124
 
107
- <style lang="scss">
108
- .live-date-box {
109
- width: 200px;
110
- display: flex;
111
- flex-shrink: 0;
112
- flex-direction: column;
113
- }
114
- .font-size-smaller {
115
- font-size: smaller;
116
- }
117
- .live-image-status {
118
- text-align: center;
119
- width: 100%;
120
- font-size: 0.6rem;
121
- padding: 0.2rem 0;
122
- color: white;
123
- text-transform: uppercase;
124
- }
125
- .live-description-container {
126
- overflow: hidden;
127
- margin-top: 0.5em;
128
- word-break: break-word;
129
- max-height: 6rem;
130
- position: relative;
131
- &.after-live-description:after {
132
- content: '...';
133
- position: absolute;
134
- padding-left: 1rem;
135
- right: 0;
136
- bottom: 0;
137
- width: 100%;
138
- font-size: 1rem;
139
- font-weight: bolder;
140
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0), #f3f3f3 40%);
141
- }
142
- }
143
- .live-special-width {
144
- width: 0;
145
- flex-grow: 1;
146
- }
147
- .planned-bg {
148
- background: #f09653;
149
- }
150
- .pending-bg {
151
- background: #f1643e;
152
- }
153
- .recording-bg {
154
- background: #f34a4a;
155
- }
156
- .debriefing-bg {
157
- background: #6ec66e;
158
- }
159
- .done-bg {
160
- background: #679fe9;
161
- }
162
- .publishing-bg {
163
- background: #7d7d7d;
164
- }
165
- .planned-shadow {
166
- box-shadow: 0px 12px 48px 6px rgba(240, 151, 83, 0.2);
167
- }
168
- .pending-shadow {
169
- box-shadow: 0px 12px 48px 6px rgba(241, 101, 62, 0.2);
170
- }
171
- .recording-shadow {
172
- box-shadow: 0px 12px 48px 6px rgba(243, 74, 74, 0.2);
173
- }
174
- .debriefing-shadow {
175
- box-shadow: 0px 12px 48px 6px rgba(110, 198, 110, 0.2);
176
- }
177
- .publishing-shadow {
178
- box-shadow: 0px 12px 48px 6px rgba(125, 125, 125, 0.2);
179
- }
180
- </style>
181
-
182
125
  <script lang="ts">
183
126
  import { state } from '../../../store/paramStore';
184
- const octopusApi = require('@saooti/octopus-api');
127
+ import octopusApi from '@saooti/octopus-api';
185
128
  import PodcastImage from '../podcasts/PodcastImage.vue';
186
- import studioApi from '@/api/studio';
187
- import RecordingItemButton from '@/components/display/studio/RecordingItemButton.vue';
188
- const moment = require('moment');
189
- const humanizeDuration = require('humanize-duration');
129
+ import crudApi from '@/api/classicCrud';
130
+ import moment from 'moment';
131
+ // @ts-ignore
132
+ import humanizeDuration from 'humanize-duration';
190
133
  import { displayMethods } from '../../mixins/functions';
134
+ import { Podcast } from '@/store/class/general/podcast';
135
+ import { Participant } from '@/store/class/general/participant';
191
136
 
192
- import { defineComponent, nextTick } from 'vue'
137
+ import { defineComponent, defineAsyncComponent } from 'vue';
138
+ const RecordingItemButton = defineAsyncComponent(() => import('@/components/display/studio/RecordingItemButton.vue'));
193
139
  export default defineComponent({
194
140
  name: 'LiveItem',
195
141
 
196
- props: ['fetchConference', 'index'],
197
- emits: ['deleteItem'],
198
- mixins: [displayMethods],
199
-
200
142
  components: {
201
143
  RecordingItemButton,
202
144
  PodcastImage,
203
145
  },
204
-
205
- async created() {
206
- this.fetchPodcastData();
146
+ mixins: [displayMethods],
147
+ props: {
148
+ fetchConference: { default: undefined, type: Object as ()=>Podcast},
149
+ index: { default: undefined, type: Number},
207
150
  },
151
+ emits: ['deleteItem'],
208
152
 
209
153
  data() {
210
154
  return {
211
- live: undefined as any,
155
+ live: undefined as Podcast|undefined,
212
156
  };
213
157
  },
214
-
158
+
215
159
  computed: {
216
- isEditBox() {
217
- return state.podcastPage.EditBox;
160
+ isEditBox(): boolean {
161
+ return (state.podcastPage.EditBox as boolean);
218
162
  },
219
- isPodcastmaker() {
220
- return state.generalParameters.podcastmaker;
163
+ isPodcastmaker(): boolean {
164
+ return (state.generalParameters.podcastmaker as boolean);
221
165
  },
222
- hours():string {
223
- return moment(this.live.pubDate).format('À HH[H]mm');
166
+ hours(): string {
167
+ return !this.live?'': moment(this.live.pubDate).format('HH[H]mm');
224
168
  },
225
- date():string {
226
- return moment(this.live.pubDate).format('D/MM/YYYY');
169
+ date(): string {
170
+ return !this.live? '': moment(this.live.pubDate).format('D/MM/YYYY');
227
171
  },
228
- displayDate():string {
229
- return moment(this.live.pubDate).format('X');
172
+ displayDate(): string {
173
+ return !this.live? '':moment(this.live.pubDate).format('X');
230
174
  },
231
- description():string {
232
- if (this.live.description) return this.live.description;
233
- return '';
175
+ description(): string {
176
+ return this.live?.description??'';
234
177
  },
235
- myOrganisationId() {
178
+ myOrganisationId(): string|undefined {
236
179
  return state.generalParameters.organisationId;
237
180
  },
238
- organisationRight() {
239
- if (
240
- this.isRoleLive &&
241
- this.myOrganisationId === this.live.organisation.id
242
- )
243
- return true;
244
- return false;
181
+ organisationRight(): boolean {
182
+ return true===this.isRoleLive && this.myOrganisationId === this.live?.organisation.id;
245
183
  },
246
- isRoleLive() {
247
- return state.generalParameters.isRoleLive;
184
+ isRoleLive(): boolean {
185
+ return (state.generalParameters.isRoleLive as boolean);
248
186
  },
249
-
250
- duration():string {
251
- if (this.live.duration <= 1) return '';
187
+ duration(): string {
188
+ if (!this.live || this.live.duration <= 1) return '';
252
189
  if (this.live.duration > 600000) {
253
190
  return humanizeDuration(this.live.duration, {
254
- language: 'fr',
191
+ language: this.$i18n.locale,
255
192
  largest: 1,
256
193
  round: true,
257
194
  });
258
195
  }
259
196
  return humanizeDuration(this.live.duration, {
260
- language: 'fr',
197
+ language: this.$i18n.locale,
261
198
  largest: 2,
262
199
  round: true,
263
200
  });
264
201
  },
265
202
  },
203
+ watch: {
204
+ live: {
205
+ deep: true,
206
+ handler(){
207
+ this.handleDescription();
208
+ }
209
+ },
210
+ },
211
+
212
+ async created() {
213
+ this.fetchPodcastData();
214
+ },
266
215
  methods: {
267
- updatePodcast(podcastUpdated: any) {
216
+ updatePodcast(podcastUpdated: Podcast): void {
268
217
  this.live = podcastUpdated;
269
218
  },
270
- getName(person: any) {
271
- const first = person.firstName || '';
272
- const last = person.lastName || '';
273
- return (first + ' ' + last).trim();
219
+ getName(person: Participant): string {
220
+ return (`${person.firstName??''} ${person.lastName??''}`).trim();
274
221
  },
275
- async fetchPodcastData() {
222
+ async fetchPodcastData(): Promise<void> {
276
223
  if (!this.fetchConference || !this.fetchConference.podcastId) return;
277
224
  try {
278
- this.live = await octopusApi.fetchPodcast(
279
- this.fetchConference.podcastId
280
- );
225
+ this.live = await octopusApi.fetchData<Podcast>(0, 'podcast/'+this.fetchConference.podcastId);
281
226
  } catch {
282
227
  this.$emit('deleteItem', this.index);
283
- studioApi.deleteConference(
284
- this.$store,
285
- this.fetchConference.conferenceId
286
- );
228
+ if(this.fetchConference.conferenceId){
229
+ await crudApi.deleteData(this.$store.state, 9 ,'conference/'+this.fetchConference.conferenceId);
230
+ }
287
231
  }
288
232
  },
289
- async handleDescription() {
290
- await nextTick();
291
- let liveDesc = document.getElementById(
292
- 'description-live-' + this.live.podcastId
293
- );
294
- let liveDescContainer:any = document.getElementById(
295
- 'description-live-container-' + this.live.podcastId
296
- );
297
- if (
298
- null !== liveDesc &&
299
- liveDesc.clientHeight > liveDescContainer.clientHeight
300
- ) {
301
- liveDescContainer.classList.add('after-live-description');
302
- }
233
+ async handleDescription(): Promise<void> {
234
+ this.$nextTick(() => {
235
+ if(!this.live){
236
+ return;
237
+ }
238
+ const liveDesc = (this.$refs.descriptionLive as HTMLElement);
239
+ const liveDescContainer = (this.$refs.descriptionLiveContainer as HTMLElement);
240
+ if (
241
+ null !== liveDesc && null !== liveDescContainer &&
242
+ liveDesc.clientHeight > liveDescContainer.clientHeight
243
+ ) {
244
+ liveDescContainer.classList.add('after-live-description');
245
+ }
246
+ });
303
247
  },
304
- deleteItem() {
248
+ deleteItem(): void {
305
249
  this.$emit('deleteItem', this.index);
306
250
  },
307
251
  },
308
- watch: {
309
- live() {
310
- this.handleDescription();
311
- },
312
- },
313
- });
252
+ })
314
253
  </script>
254
+
255
+ <style lang="scss">
256
+ .octopus-app{
257
+ .live-date-box {
258
+ width: 200px;
259
+ display: flex;
260
+ flex-shrink: 0;
261
+ flex-direction: column;
262
+ }
263
+ .font-size-smaller {
264
+ font-size: smaller;
265
+ }
266
+ .live-description-container {
267
+ overflow: hidden;
268
+ margin-top: 0.5em;
269
+ word-break: break-word;
270
+ max-height: 6rem;
271
+ position: relative;
272
+ &.after-live-description:after {
273
+ content: '...';
274
+ position: absolute;
275
+ padding-left: 1rem;
276
+ right: 0;
277
+ bottom: 0;
278
+ width: 100%;
279
+ font-size: 1rem;
280
+ font-weight: bolder;
281
+ background: linear-gradient(to bottom, rgba(255, 255, 255, 0), #f3f3f3 40%);
282
+ }
283
+ }
284
+ .live-special-width {
285
+ width: 0;
286
+ flex-grow: 1;
287
+ }
288
+ }
289
+ </style>