@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,406 +1,245 @@
1
1
  <template>
2
- <div>
3
- <div
4
- class="d-flex justify-content-center mb-3"
2
+ <div class="d-flex flex-column justify-content-center align-items-center">
3
+ <button
4
+ class="d-flex justify-content-center align-items-center mb-3 text-secondary btn-transparent"
5
5
  @click="showFilters = !showFilters"
6
6
  >
7
- <div class="text-secondary c-hand">{{ $t('Advanced filters') }}</div>
8
- <div
9
- class="text-secondary c-hand align-self-center large-font-size"
7
+ <div>{{ $t('Advanced filters') }}</div>
8
+ <div
9
+ class="saooti-down mx-1"
10
10
  :class="{ 'arrow-transform': showFilters }"
11
- >
12
- <div class="saooti-arrow_down saooti-arrow_down-margin"></div>
13
- </div>
14
- </div>
15
- <div class="advanced-search-container" v-show="showFilters">
11
+ />
12
+ </button>
13
+ <div
14
+ v-show="showFilters"
15
+ class="advanced-search-container"
16
+ >
16
17
  <div class="d-flex flex-column">
17
- <div class="primary-color mb-2">{{ $t('Filter') }}</div>
18
+ <div class="primary-darker mb-2">
19
+ {{ $t('Filter') }}
20
+ </div>
18
21
  <MonetizableFilter
22
+ v-if="sdkParameters.isMonetizableFilter && !isEducation"
23
+ :is-emission="isEmission"
19
24
  @updateMonetization="updateMonetization"
20
- :isEducation="isEducation"
21
- :isEmission="isEmission"
22
- v-if="isMonetizableFilter"
23
25
  />
24
- <div
25
- class="d-flex mt-3 align-items-center"
26
- v-if="organisationId && rubriquageDisplay"
27
- >
28
- <div class="checkbox-saooti flex-shrink">
29
- <input
30
- type="checkbox"
31
- class="custom-control-input"
32
- id="search-rubriquage-checkbox"
33
- v-model="isRubriquage"
34
- />
35
- <label
36
- class="custom-control-label"
37
- for="search-rubriquage-checkbox"
38
- >{{ $t('By topic') }}</label
39
- >
40
- </div>
41
- <template v-if="isRubriquage">
42
- <label class="wrap">
43
- <select
44
- class="basic-select ml-2 mb-0 border c-hand"
45
- v-model="rubriquageId"
46
- @change="onRubriquageSelected"
47
- >
48
- <option :value="-1" class="primary-dark">{{
49
- $t('Without topic')
50
- }}</option>
51
- <option
52
- v-for="rubriquage in rubriquageData"
53
- v-show="0 !== rubriquage.rubriques.length"
54
- :key="rubriquage.rubriquageId"
55
- :value="rubriquage.rubriquageId"
56
- >{{ rubriquage.title }}</option
57
- >
58
- </select>
59
- <div
60
- class="saooti-arrow_down octopus-arrow-down-2 classic-select"
61
- ></div>
62
- </label>
63
- <template v-if="rubriquageId && -1 !== rubriquageId">
64
- <div class="ml-3 flex-shrink">{{ $t('By rubric') }}</div>
65
- <RubriqueChooser
66
- class="ml-2"
67
- :multiple="false"
68
- :rubriquageId="rubriquageId"
69
- :allRubriques="getRubriques(rubriquageId)"
70
- :defaultanswer="$t('No rubric filter')"
71
- :reset="reset"
72
- :withoutRubrique="true"
73
- width="auto"
74
- @selected="onRubriqueSelected"
75
- />
76
- </template>
77
- </template>
78
- </div>
26
+ <CategoryFilter @updateCategory="updateCategory" />
27
+ <RubriqueFilter
28
+ :reset-rubriquage="resetRubriquage"
29
+ :organisation-id="organisationId"
30
+ @updateRubriquageFilter="updateRubriquageFilter"
31
+ />
79
32
  <div class="d-flex mt-3 align-items-center flex-wrap">
80
- <div class="mr-2" v-if="isEmission">
33
+ <div
34
+ v-if="isEmission"
35
+ class="me-2"
36
+ >
81
37
  {{ $t('Emission with episode published :') }}
82
38
  </div>
83
39
  <div class="d-flex align-items-center">
84
- <div class="checkbox-saooti flex-shrink">
85
- <input
86
- type="checkbox"
87
- class="custom-control-input"
88
- id="search-from-checkbox"
89
- v-model="isFrom"
90
- />
91
- <label class="custom-control-label" for="search-from-checkbox">{{
92
- $t('From the :')
93
- }}</label>
94
- </div>
95
- <Datetime
96
- type="datetime"
97
- moment-locale="fr"
98
- v-model="fromDate"
99
- class="theme-saooti pl-3 pr-3"
100
- @input="updateFromDate"
101
- input-format="D/MM/YYYY [à] HH[h]mm"
102
- :i18n="lang"
40
+ <ClassicCheckbox
41
+ v-model:textInit="isFrom"
42
+ class="flex-shrink-0"
43
+ id-checkbox="search-from-checkbox"
44
+ :label="$t('From the :')"
103
45
  />
46
+ <DatePicker
47
+ v-model="fromDate"
48
+ class="ps-3 pe-3"
49
+ mode="dateTime"
50
+ color="green"
51
+ is24hr
52
+ @update:modelValue="updateFromDate()"
53
+ >
54
+ <template #default="{ inputValue, inputEvents }">
55
+ <input
56
+ class="px-2 py-1 border rounded focus:border-blue-300"
57
+ :value="inputValue"
58
+ v-on="inputEvents"
59
+ >
60
+ </template>
61
+ </DatePicker>
104
62
  </div>
105
63
  <div class="d-flex align-items-center">
106
- <div class="checkbox-saooti flex-shrink">
107
- <input
108
- type="checkbox"
109
- class="custom-control-input"
110
- id="search-to-checkbox"
111
- v-model="isTo"
112
- />
113
- <label class="custom-control-label" for="search-to-checkbox">{{
114
- $t('To the :')
115
- }}</label>
116
- </div>
117
- <Datetime
118
- type="datetime"
119
- moment-locale="fr"
120
- v-model="toDate"
121
- class="theme-saooti pl-3"
122
- @input="updateToDate"
123
- input-format="D/MM/YYYY [à] HH[h]mm"
124
- :i18n="lang"
64
+ <ClassicCheckbox
65
+ v-model:textInit="isTo"
66
+ class="flex-shrink-0"
67
+ id-checkbox="search-to-checkbox"
68
+ :label="$t('To the :')"
125
69
  />
70
+ <DatePicker
71
+ v-model="toDate"
72
+ class="ps-3"
73
+ mode="dateTime"
74
+ color="green"
75
+ is24hr
76
+ @update:modelValue="updateToDate()"
77
+ >
78
+ <template #default="{ inputValue, inputEvents }">
79
+ <input
80
+ class="px-2 py-1 border rounded focus:border-blue-300"
81
+ :value="inputValue"
82
+ v-on="inputEvents"
83
+ >
84
+ </template>
85
+ </DatePicker>
126
86
  </div>
127
87
  </div>
128
88
  <div
129
- class="d-flex flex-column mt-3"
130
89
  v-if="organisation && organisationRight && !isPodcastmaker"
90
+ class="d-flex flex-column mt-3"
131
91
  >
132
- <div class="checkbox-saooti flex-shrink">
133
- <input
134
- type="checkbox"
135
- class="custom-control-input"
136
- id="search-future-checkbox"
137
- v-model="isNotVisible"
138
- :disabled="isCheckboxNotValidate && isNotValidate"
139
- />
140
- <label class="custom-control-label" for="search-future-checkbox">{{
141
- textNotVisible
142
- }}</label>
143
- </div>
92
+ <ClassicCheckbox
93
+ v-model:textInit="isNotVisible"
94
+ class="flex-shrink-0"
95
+ id-checkbox="search-future-checkbox"
96
+ :label="textNotVisible"
97
+ :is-disabled="isCheckboxNotValidate && isNotValidate"
98
+ />
144
99
  </div>
145
- <div class="d-flex flex-column mt-3" v-if="isCheckboxNotValidate">
146
- <div class="checkbox-saooti flex-shrink">
147
- <input
148
- type="checkbox"
149
- class="custom-control-input"
150
- id="search-not-validate-checkbox"
151
- v-model="isNotValidate"
152
- />
153
- <label
154
- class="custom-control-label"
155
- for="search-not-validate-checkbox"
156
- >{{ textNotValidate }}</label
157
- >
158
- </div>
100
+ <div
101
+ v-if="isCheckboxNotValidate"
102
+ class="d-flex flex-column mt-3"
103
+ >
104
+ <ClassicCheckbox
105
+ v-model:textInit="isNotValidate"
106
+ class="flex-shrink-0"
107
+ id-checkbox="search-not-validate-checkbox"
108
+ :label="textNotValidate"
109
+ />
159
110
  </div>
160
111
  </div>
161
112
  <div class="d-flex flex-column">
162
- <div class="primary-color mb-2 padding-left-custom-radio">
113
+ <div class="primary-darker mb-2">
163
114
  {{ $t('Sort') }}
164
115
  </div>
165
- <b-form-group>
166
- <b-form-radio-group v-model="sort" class="d-flex flex-column">
167
- <b-form-radio value="SCORE" v-if="isSearchBar">{{
168
- $t('Sort score')
169
- }}</b-form-radio>
170
- <b-form-radio value="LAST_PODCAST_DESC" v-if="isEmission">{{
171
- $t('Sort last')
172
- }}</b-form-radio>
173
- <b-form-radio value="DATE" v-else>{{
174
- $t('Sort last')
175
- }}</b-form-radio>
176
- <b-form-radio value="NAME">{{ $t('Sort name') }}</b-form-radio>
177
- </b-form-radio-group>
178
- </b-form-group>
116
+ <ClassicRadio
117
+ v-model:textInit="sort"
118
+ id-radio="sort-radio"
119
+ :options="isSearchBar? [{title:$t('Sort score'), value:'SCORE'},
120
+ {title:$t('Sort last'), value:isEmission?'LAST_PODCAST_DESC':'DATE'},
121
+ {title:$t('Sort name'), value:'NAME'}]:
122
+ [{title:$t('Sort last'), value:isEmission?'LAST_PODCAST_DESC':'DATE'},
123
+ {title:$t('Sort name'), value:'NAME'}]"
124
+ />
179
125
  </div>
180
126
  </div>
181
127
  </div>
182
128
  </template>
183
- <style lang="scss">
184
- /* input {
185
- border: 0.1rem solid #dee2e6;
186
- border-radius: 0.3rem;
187
- padding: 0.5rem;
188
- } */
189
- .saooti-arrow_down-margin {
190
- margin: 3px 0 0;
191
- }
192
- .padding-left-custom-radio {
193
- padding-left: 1.5rem;
194
- @media (max-width: 720px) {
195
- padding-left: 0;
196
- margin-top: 1rem;
197
- }
198
- }
199
- .large-font-size {
200
- font-size: 1.3rem;
201
- }
202
- .arrow-transform {
203
- transform: rotate(180deg);
204
- }
205
- .advanced-search-container {
206
- background: #fff;
207
- border-radius: 0.8rem;
208
- display: flex;
209
- width: 100%;
210
- padding: 1rem 2rem;
211
- margin-bottom: 1rem;
212
- justify-content: space-around;
213
- @media (max-width: 720px) {
214
- flex-wrap: wrap;
215
- justify-content: flex-start;
216
- }
217
- .checkbox-saooti .custom-control-label::after {
218
- top: 0.22rem;
219
- }
220
- .checkbox-saooti .custom-control-label::before {
221
- top: 0.22rem;
222
- }
223
-
224
- @media (max-width: 450px) {
225
- flex-direction: column;
226
- .vdatetime {
227
- padding: 0.5em 0 !important;
228
- width: 100%;
229
- input {
230
- width: 100%;
231
- }
232
- }
233
129
 
234
- .checkbox-saooti {
235
- margin-left: 0rem !important;
236
- }
237
- padding: 1rem;
238
- .basic-select {
239
- width: 100%;
240
- margin: 0 !important;
241
- }
242
-
243
- label.wrap {
244
- width: 100%;
245
- margin: 0.5em 0;
246
- position: relative;
247
- }
248
- }
249
-
250
- @media (min-width: 401px) {
251
- label.wrap {
252
- position: relative;
253
- margin: 0;
254
- }
255
- }
256
- input:not([id*='rubriqueChooser']) {
257
- border: 1px solid #ddd;
258
- border-radius: 5px;
259
- padding: 0.2em 0.5em;
260
- }
261
- select {
262
- -webkit-appearance: none;
263
- -moz-appearance: none;
264
- appearance: none;
265
- }
266
- }
267
- </style>
268
130
  <script lang="ts">
269
- // @ is an alias to /src
270
-
271
- import MonetizableFilter from './MonetizableFilter.vue';
272
- import RubriqueChooser from '../rubriques/RubriqueChooser.vue';
273
- import Datetime from 'vue-datetime';
274
131
  import { state } from '../../../store/paramStore';
275
- const octopusApi = require('@saooti/octopus-api');
276
- const moment = require('moment');
277
-
278
- import { defineComponent } from 'vue';
132
+ import { orgaComputed } from '../../mixins/orgaComputed';
133
+ import moment from 'moment';
134
+ import CategoryFilter from './CategoryFilter.vue';
135
+ import RubriqueFilter from './RubriqueFilter.vue';
136
+ import ClassicCheckbox from '../../form/ClassicCheckbox.vue';
137
+ import ClassicRadio from '../../form/ClassicRadio.vue';
138
+ import { RubriquageFilter } from '@/store/class/rubrique/rubriquageFilter';
139
+ import { DatePicker } from 'v-calendar';
140
+ import { defineComponent, defineAsyncComponent } from 'vue';
141
+ const MonetizableFilter = defineAsyncComponent(() => import('./MonetizableFilter.vue'));
279
142
  export default defineComponent({
280
143
  components: {
281
144
  MonetizableFilter,
282
- RubriqueChooser,
283
- Datetime,
284
- },
285
-
286
- props: [
287
- 'organisationId',
288
- 'isEmission',
289
- 'resetRubriquage',
290
- 'isSearchBar',
291
- 'sortCriteria',
292
- 'isEducation',
293
- 'includeHidden',
294
- ],
295
- emits: ['updateFromDate', 'updateToDate', 'updateRubrique', 'updateRubriquage', 'updateMonetization', 'updateSortCriteria', 'includeHidden', 'notValid'],
296
-
297
- created() {
298
- this.fetchTopics();
299
- if (!this.isEmission) {
300
- this.isNotVisible = this.includeHidden;
301
- }
145
+ DatePicker,
146
+ CategoryFilter,
147
+ RubriqueFilter,
148
+ ClassicCheckbox,
149
+ ClassicRadio
302
150
  },
303
-
304
- mounted() {
305
- this.sort = this.sortCriteria;
151
+ mixins: [orgaComputed],
152
+ props: {
153
+ organisationId: { default: undefined, type: String},
154
+ isEmission: { default: false, type: Boolean},
155
+ resetRubriquage: { default: false, type: Boolean},
156
+ isSearchBar: { default: false, type: Boolean},
157
+ isEducation: { default: false, type: Boolean},
158
+ includeHidden: { default: false, type: Boolean},
159
+ sortCriteria: { default: 'DATE', type: String},
306
160
  },
307
161
 
162
+ emits: ['updateToDate',
163
+ 'updateFromDate',
164
+ 'updateMonetization',
165
+ 'updateCategory',
166
+ 'updateSortCriteria',
167
+ 'includeHidden',
168
+ 'notValid',
169
+ 'updateRubriquageFilter'],
308
170
  data() {
309
171
  return {
310
- isRubriquage: false,
311
- rubriquageId: undefined as any,
312
- rubriqueId: undefined as any,
313
- rubriquageData: [] as any,
314
- isFrom: false,
315
- isTo: false,
316
- lang: {
317
- ok: this.$t('Validate'),
318
- cancel: this.$t('Cancel'),
319
- },
320
- fromDate: moment()
321
- .subtract(10, 'days')
322
- .toISOString(),
323
- toDate: moment().toISOString(),
324
- isNotVisible: false,
325
- isNotValidate: false,
326
- showFilters: false,
327
- reset: false,
328
- sort: '',
172
+ isFrom: false as boolean,
173
+ isTo: false as boolean,
174
+ fromDate: moment().subtract(10, 'days').toISOString() as string,
175
+ toDate: moment().toISOString() as string,
176
+ isNotVisible: this.includeHidden as boolean,
177
+ isNotValidate: false as boolean,
178
+ showFilters: false as boolean,
179
+ sort: this.sortCriteria as string,
329
180
  };
330
181
  },
331
182
 
332
183
  computed: {
333
- isMonetizableFilter() {
334
- return state.podcastsPage.MonetizableFilter;
184
+ isPodcastmaker(): boolean {
185
+ return (state.generalParameters.podcastmaker as boolean);
335
186
  },
336
- rubriquageDisplay() {
337
- if (0 === this.rubriquageData.length) return false;
338
- let found = false;
339
- for (
340
- let index = 0, len = this.rubriquageData.length;
341
- index < len;
342
- index++
343
- ) {
344
- if (0 !== this.rubriquageData[index].rubriques.length) {
345
- found = true;
346
- break;
347
- }
187
+ sdkParameters(){
188
+ return {
189
+ isMonetizableFilter : (state.podcastsPage.MonetizableFilter as boolean),
190
+ isProduction : (state.generalParameters.isProduction as boolean),
191
+ isContribution : (state.generalParameters.isContribution as boolean)
348
192
  }
349
- return found;
350
- },
351
- myOrganisationId() {
352
- return state.generalParameters.organisationId;
353
- },
354
- authenticated():boolean {
355
- return state.generalParameters.authenticated;
356
- },
357
- isProduction() {
358
- return state.generalParameters.isProduction;
359
- },
360
- isContribution() {
361
- return state.generalParameters.isContribution;
362
- },
363
- organisationRight() {
364
- if (
365
- (this.authenticated && this.myOrganisationId === this.organisationId) ||
366
- state.generalParameters.isAdmin
367
- )
368
- return true;
369
- return false;
370
193
  },
371
- isPodcastmaker() {
372
- return state.generalParameters.podcastmaker;
194
+ organisationRight(): boolean {
195
+ return (true===this.authenticated && this.myOrganisationId === this.organisationId) ||
196
+ true === state.generalParameters.isAdmin;
373
197
  },
374
- filterOrga():any {
375
- return this.$store.state.filter.organisationId;
198
+ organisation(): string|undefined {
199
+ return this.organisationId??this.filterOrga;
376
200
  },
377
- organisation():any {
378
- if (this.organisationId) return this.organisationId;
379
- if (this.filterOrga) return this.filterOrga;
380
- return undefined;
201
+ textNotVisible(): string {
202
+ return this.isEmission? this.$t('Consider podcasts no visible') : this.$t('See podcasts no visible');
381
203
  },
382
- textNotVisible():string {
383
- if (this.isEmission) return this.$t('Consider podcasts no visible');
384
- return this.$t('See podcasts no visible');
385
- },
386
- isCheckboxNotValidate():boolean {
204
+ isCheckboxNotValidate(): boolean {
387
205
  return (
388
- this.organisation &&
206
+ undefined!==this.organisation &&
389
207
  this.organisationRight &&
390
- this.isContribution &&
208
+ this.sdkParameters.isContribution &&
391
209
  !this.isPodcastmaker &&
392
210
  !this.isEmission &&
393
211
  this.isNotVisible
394
212
  );
395
213
  },
396
- textNotValidate():string {
397
- if (this.isProduction) return this.$t('Display all podcasts to validate');
398
- return this.$t('Display my podcasts to validate');
214
+ textNotValidate(): string {
215
+ return this.sdkParameters.isProduction? this.$t('Display all podcasts to validate') : this.$t('Display my podcasts to validate');
216
+ },
217
+ },
218
+ watch: {
219
+ organisation(): void {
220
+ this.isNotVisible = undefined!==this.organisation && this.organisationRight && !this.isEmission;
221
+ },
222
+ isFrom(): void {
223
+ this.$emit('updateFromDate', this.isFrom ? moment(this.fromDate).toISOString(true) : undefined);
224
+ },
225
+ isTo(): void {
226
+ this.$emit('updateToDate', this.isTo ? moment(this.toDate).toISOString(true) : undefined);
227
+ },
228
+ sort(): void {
229
+ this.$emit('updateSortCriteria', this.sort);
230
+ },
231
+ isNotVisible(): void{
232
+ this.$emit('includeHidden', this.isNotVisible);
233
+ },
234
+ isNotValidate(): void {
235
+ this.$emit('notValid', this.isNotValidate);
236
+ },
237
+ sortCriteria(): void {
238
+ this.sort = this.sortCriteria;
399
239
  },
400
240
  },
401
-
402
241
  methods: {
403
- updateFromDate() {
242
+ updateFromDate(): void {
404
243
  if (
405
244
  moment(this.fromDate)
406
245
  .startOf('minute')
@@ -411,14 +250,13 @@ export default defineComponent({
411
250
  .toISOString()
412
251
  )
413
252
  return;
414
-
415
253
  if (this.isFrom) {
416
- this.$emit('updateFromDate', this.fromDate);
254
+ this.$emit('updateFromDate', moment(this.fromDate).toISOString(true));
417
255
  } else {
418
256
  this.isFrom = true;
419
257
  }
420
258
  },
421
- updateToDate() {
259
+ updateToDate(): void {
422
260
  if (
423
261
  moment(this.toDate)
424
262
  .startOf('minute')
@@ -428,102 +266,56 @@ export default defineComponent({
428
266
  .toISOString()
429
267
  )
430
268
  return;
431
-
432
269
  if (this.isTo) {
433
- this.$emit('updateToDate', this.toDate);
270
+ this.$emit('updateToDate', moment(this.toDate).toISOString(true));
434
271
  } else {
435
272
  this.isTo = true;
436
273
  }
437
274
  },
438
- getRubriques(rubriquageId: any) {
439
- let topicIndex = this.rubriquageData.findIndex(
440
- ( element: any) => element.rubriquageId === rubriquageId
441
- );
442
- return this.rubriquageData[topicIndex].rubriques;
443
- },
444
- onRubriqueSelected(rubrique: any) {
445
- if (rubrique.rubriqueId === this.rubriqueId) return;
446
- this.rubriqueId = rubrique.rubriqueId;
447
- if (0 === this.rubriqueId) {
448
- this.$emit('updateRubrique', undefined);
449
- } else {
450
- this.$emit('updateRubrique', rubrique.rubriqueId);
451
- }
452
- },
453
- onRubriquageSelected() {
454
- this.reset = !this.reset;
455
- this.rubriqueId = 0;
456
- if (this.isRubriquage) {
457
- this.$emit('updateRubriquage', this.rubriquageId);
458
- }
459
- },
460
- updateMonetization(value: any) {
275
+ updateMonetization(value: string): void {
461
276
  this.$emit('updateMonetization', value);
462
277
  },
463
- async fetchTopics() {
464
- if (!this.organisation) return;
465
- const data = await octopusApi.fetchTopics(this.organisation);
466
- this.rubriquageData = data;
467
- if (0 === data.length) return;
468
-
469
- for (
470
- let index = 0, len = this.rubriquageData.length;
471
- index < len;
472
- index++
473
- ) {
474
- if (0 !== this.rubriquageData[index].rubriques.length) {
475
- this.rubriquageId = this.rubriquageData[index].rubriquageId;
476
- break;
477
- }
478
- }
479
- },
480
- },
481
- watch: {
482
- organisation() {
483
- if (this.organisation && this.organisationRight && !this.isEmission) {
484
- this.isNotVisible = true;
485
- } else {
486
- this.isNotVisible = false;
487
- }
488
- this.fetchTopics();
278
+ updateCategory(value: number){
279
+ this.$emit('updateCategory', 0!==value ? value : undefined);
489
280
  },
490
- isFrom(newVal) {
491
- if (newVal) {
492
- this.$emit('updateFromDate', this.fromDate);
493
- } else {
494
- this.$emit('updateFromDate', undefined);
495
- }
496
- },
497
- isTo(newVal) {
498
- if (newVal) {
499
- this.$emit('updateToDate', this.toDate);
500
- } else {
501
- this.$emit('updateToDate', undefined);
502
- }
503
- },
504
- isRubriquage(newVal) {
505
- if (newVal) {
506
- this.$emit('updateRubriquage', this.rubriquageId);
507
- } else {
508
- this.$emit('updateRubriquage', undefined);
509
- this.$emit('updateRubrique', undefined);
510
- }
511
- },
512
- sort(newVal) {
513
- this.$emit('updateSortCriteria', newVal);
514
- },
515
- resetRubriquage() {
516
- this.isRubriquage = false;
517
- },
518
- isNotVisible(newVal) {
519
- this.$emit('includeHidden', newVal);
520
- },
521
- isNotValidate(newVal) {
522
- this.$emit('notValid', newVal);
523
- },
524
- sortCriteria() {
525
- this.sort = this.sortCriteria;
281
+ updateRubriquageFilter(value: Array<RubriquageFilter>){
282
+ this.$emit('updateRubriquageFilter', value);
526
283
  },
527
284
  },
528
- });
285
+ })
529
286
  </script>
287
+
288
+ <style lang="scss">
289
+ .octopus-app{
290
+ .advanced-search-container {
291
+ background: #fff;
292
+ border-radius: 0.8rem;
293
+ display: flex;
294
+ width: 100%;
295
+ padding: 1rem 2rem;
296
+ margin-bottom: 1rem;
297
+ justify-content: space-around;
298
+ @media (max-width: 720px) {
299
+ flex-wrap: wrap;
300
+ justify-content: flex-start;
301
+ }
302
+ @media (max-width: 450px) {
303
+ flex-direction: column;
304
+ padding: 1rem;
305
+ .vdatetime, label {
306
+ padding: 0.5rem 0 !important;
307
+ width: 100%;
308
+ input {
309
+ width: 100%;
310
+ }
311
+ }
312
+ }
313
+ select {
314
+ -webkit-appearance: none;
315
+ -moz-appearance: none;
316
+ appearance: none;
317
+ padding-right: 40px;
318
+ }
319
+ }
320
+ }
321
+ </style>