@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
@@ -0,0 +1,105 @@
1
+ <template>
2
+ <div class="d-flex mt-3 align-items-center">
3
+ <ClassicCheckbox
4
+ v-model:textInit="isCategory"
5
+ class="flex-shrink-0 me-2"
6
+ id-checkbox="search-category-checkbox"
7
+ :label="$t('By category')"
8
+ />
9
+ <CategoryChooser
10
+ v-model:categorySelected="iabId"
11
+ width="auto"
12
+ :defaultanswer="$t('No category filter')"
13
+ />
14
+ </div>
15
+ </template>
16
+
17
+ <script lang="ts">
18
+ import ClassicCheckbox from '../../form/ClassicCheckbox.vue';
19
+ import CategoryChooser from '../categories/CategoryChooser.vue';
20
+ import { Category } from '@/store/class/general/category';
21
+ import { defineComponent } from 'vue'
22
+ export default defineComponent({
23
+ components: {
24
+ CategoryChooser,
25
+ ClassicCheckbox
26
+ },
27
+ emits: ['updateCategory'],
28
+ data() {
29
+ return {
30
+ isCategory: false as boolean,
31
+ iabId: 0 as number,
32
+ isInternChanged: false as boolean,
33
+ isInit: true as boolean,
34
+ };
35
+ },
36
+ computed: {
37
+ categoryFilter(): Category|undefined{
38
+ return this.$store.state.filter.iab;
39
+ },
40
+ },
41
+ watch: {
42
+ isCategory(): void {
43
+ if(this.isInternChanged ||this.isInit){
44
+ return;
45
+ }
46
+ this.isInternChanged = true;
47
+ this.$emit('updateCategory', this.isCategory?this.iabId:0);
48
+ this.resetCategoryFilter();
49
+ this.$nextTick(() => {
50
+ this.isInternChanged = false;
51
+ });
52
+ },
53
+ iabId(): void {
54
+ if(this.isInternChanged ||this.isInit){
55
+ return;
56
+ }
57
+ this.isInternChanged = true;
58
+ this.resetCategoryFilter();
59
+ if(this.isCategory){
60
+ this.$emit('updateCategory', this.iabId);
61
+ }
62
+ this.$nextTick(() => {
63
+ this.isInternChanged = false;
64
+ });
65
+ },
66
+ categoryFilter:{
67
+ deep: true,
68
+ handler(){
69
+ if(this.isInternChanged){
70
+ return;
71
+ }
72
+ this.isInternChanged = true;
73
+ this.iabId = this.categoryFilter ? this.categoryFilter.id : 0;
74
+ this.isCategory = this.categoryFilter ? true : false;
75
+ this.$emit('updateCategory', this.iabId);
76
+ this.$nextTick(() => {
77
+ this.isInternChanged = false;
78
+ });
79
+ }
80
+ },
81
+ },
82
+
83
+ created() {
84
+ if(this.categoryFilter){
85
+ this.iabId = this.categoryFilter.id;
86
+ this.isCategory = true;
87
+ }
88
+ this.$nextTick(() => {
89
+ this.isInit = false;
90
+ });
91
+ },
92
+ methods: {
93
+ resetCategoryFilter(): void{
94
+ if(!this.categoryFilter || this.isInit){
95
+ return;
96
+ }
97
+ const queries = this.$route.query;
98
+ if (queries.iabId) {
99
+ this.$router.replace({ query: {...queries, ...{iabId: undefined} } });
100
+ }
101
+ this.$store.commit('filterIab', undefined);
102
+ }
103
+ },
104
+ })
105
+ </script>
@@ -1,41 +1,44 @@
1
1
  <template>
2
- <div class="d-flex align-items-center" v-if="!isEducation">
2
+ <div class="d-flex align-items-center">
3
3
  <div>{{ $t('Advertising') + ' :' }}</div>
4
- <label class="wrap">
4
+ <label class="position-relative">
5
5
  <select
6
6
  ref="select"
7
- class="basic-select ml-2 mb-0 border c-hand"
8
7
  v-model="monetization"
8
+ class="ms-2 mb-0 c-hand"
9
9
  @change="onChange"
10
10
  >
11
- <option value="UNDEFINED" v-if="isEmission">{{
12
- $t('All emissions')
13
- }}</option>
14
- <option value="UNDEFINED" v-else>{{ $t('All podcasts') }}</option>
11
+ <option value="UNDEFINED">{{ allString }}</option>
15
12
  <option value="YES">{{ $t('Authorized advertising') }}</option>
16
13
  <option value="NO">{{ $t('Prohibited advertising') }}</option>
17
14
  </select>
18
- <div class="saooti-arrow_down octopus-arrow-down-2 classic-select"></div>
15
+ <div class="saooti-down octopus-arrow-down" />
19
16
  </label>
20
17
  </div>
21
18
  </template>
22
- <style lang="scss"></style>
19
+
23
20
  <script lang="ts">
24
21
  import { defineComponent } from 'vue'
25
22
  export default defineComponent({
26
- props: ['isEmission', 'isEducation'],
23
+ props: {
24
+ isEmission: { default: false, type: Boolean},
25
+ },
27
26
  emits: ['updateMonetization'],
28
27
 
29
28
  data() {
30
29
  return {
31
- monetization: 'UNDEFINED',
30
+ monetization: 'UNDEFINED' as string,
32
31
  };
33
32
  },
34
-
33
+ computed:{
34
+ allString(): string{
35
+ return this.isEmission? this.$t('All emissions') : this.$t('All podcasts');
36
+ }
37
+ },
35
38
  methods: {
36
- onChange() {
39
+ onChange(): void {
37
40
  this.$emit('updateMonetization', this.monetization);
38
41
  },
39
42
  },
40
- });
41
- </script>
43
+ })
44
+ </script>
@@ -1,26 +1,27 @@
1
1
  <template>
2
- <div class="d-flex align-items-center">
2
+ <div class="d-flex align-items-center my-3">
3
3
  <div
4
- class="filter-organisation-chooser"
5
4
  v-if="!isPodcastmaker && !filterOrga"
5
+ class="filter-organisation-chooser"
6
6
  >
7
7
  <OrganisationChooser
8
8
  :defaultanswer="$t('No organisation filter')"
9
- @selected="onOrganisationSelected"
10
9
  :value="organisationId"
11
- :all="true"
10
+ @selected="onOrganisationSelected"
12
11
  />
13
- <div class="checkbox-saooti m-3" v-if="!!organisationId">
14
- <input
15
- type="checkbox"
16
- class="custom-control-input"
17
- id="orgaCheck"
18
- v-model="keepOrganisation"
19
- @click="onKeepOrganisation"
20
- />
21
- <label class="custom-control-label" for="orgaCheck"></label>
22
- </div>
23
- <div class="filter-speech-bubble" v-if="showBubble">
12
+ <ClassicCheckbox
13
+ v-if="!!organisationId"
14
+ v-model:textInit="keepOrganisation"
15
+ class="m-3"
16
+ :label="$t('check this box if you want to keep this filter for the rest of your visit')"
17
+ :display-label="false"
18
+ id-checkbox="organisation-checkbox"
19
+ @clickAction="onKeepOrganisation"
20
+ />
21
+ <div
22
+ v-if="showBubble"
23
+ class="filter-speech-bubble"
24
+ >
24
25
  {{
25
26
  $t(
26
27
  'check this box if you want to keep this filter for the rest of your visit'
@@ -28,208 +29,184 @@
28
29
  }}
29
30
  </div>
30
31
  </div>
31
- <div class="d-flex align-items-center flex-grow">
32
- <label for="search" class="d-inline" :aria-label="$t('Search')"></label>
33
- <input
34
- id="search"
35
- class="filter-search-input input-no-outline"
36
- :placeholder="searchText"
37
- :value="searchPattern"
38
- ref="search"
39
- v-on:input="
40
- event => this.$emit('updateSearchPattern', event.target.value)
41
- "
42
- />
43
- </div>
32
+ <ClassicSearch
33
+ v-model:textInit="queryIntern"
34
+ class="d-flex align-items-center flex-grow-1"
35
+ :autofocus="true"
36
+ id-checkbox="productor-search-input"
37
+ :label="searchText"
38
+ />
44
39
  </div>
45
40
  </template>
46
- <style lang="scss">
47
- @import '../../../sass/_variables.scss';
48
41
 
49
- .filter-speech-bubble {
50
- position: absolute;
51
- background: $octopus-primary-color;
52
- border-radius: 0.4em;
53
- width: 10rem;
54
- right: 4rem;
55
- padding: 5px;
56
- -webkit-animation: fadein 1s;
57
- -moz-animation: fadein 1s;
58
- animation: fadein 1s;
59
- color: white;
60
- }
61
-
62
- .filter-speech-bubble:after {
63
- content: '';
64
- position: absolute;
65
- right: 0;
66
- top: 50%;
67
- width: 0;
68
- height: 0;
69
- border: 18px solid transparent;
70
- border-left-color: $octopus-primary-color;
71
- border-right: 0;
72
- border-bottom: 0;
73
- margin-top: -9px;
74
- margin-right: -18px;
75
- -webkit-animation: fadein 1s;
76
- -moz-animation: fadein 1s;
77
- animation: fadein 1s;
78
- }
79
- @keyframes fadein {
80
- from {
81
- opacity: 0;
82
- }
83
- to {
84
- opacity: 1;
85
- }
86
- }
87
- @-moz-keyframes fadein {
88
- from {
89
- opacity: 0;
90
- }
91
- to {
92
- opacity: 1;
93
- }
94
- }
95
- @-webkit-keyframes fadein {
96
- from {
97
- opacity: 0;
98
- }
99
- to {
100
- opacity: 1;
101
- }
102
- }
103
- .filter-organisation-chooser {
104
- display: flex;
105
- align-items: center;
106
- flex-grow: 1;
107
- margin-right: 10%;
108
- position: relative;
109
- @media (max-width: 500px) {
110
- margin-right: 0;
111
- }
112
- }
113
- </style>
114
42
  <script lang="ts">
115
- // @ is an alias to /src
116
- import OrganisationChooser from '../organisation/OrganisationChooser.vue';
43
+ import ClassicSearch from '../../form/ClassicSearch.vue';
117
44
  import { state } from '../../../store/paramStore';
118
- const octopusApi = require('@saooti/octopus-api');
119
-
120
- import { defineComponent, ref } from 'vue'
45
+ import { orgaFilter } from '../../mixins/organisationFilter';
46
+ import { Organisation } from '@/store/class/general/organisation';
47
+ import { defineComponent, defineAsyncComponent } from 'vue';
48
+ const OrganisationChooser = defineAsyncComponent(() => import('../organisation/OrganisationChooser.vue'));
49
+ const ClassicCheckbox = defineAsyncComponent(() => import('../../form/ClassicCheckbox.vue'));
121
50
  export default defineComponent({
122
51
  components: {
123
52
  OrganisationChooser,
53
+ ClassicSearch,
54
+ ClassicCheckbox
124
55
  },
56
+ mixins:[orgaFilter],
125
57
 
126
58
  props: {
127
- organisationId: { default: undefined as any },
128
- searchPattern: { default: '' },
129
- type: { default: 'podcast' },
59
+ organisationId: { default: undefined, type: String},
60
+ searchPattern: { default: '', type: String },
61
+ type: { default: 'podcast', type: String },
130
62
  },
131
63
  emits: ['updateOrganisationId', 'updateSearchPattern'],
132
- setup() {
133
- const search : any = ref(null);
134
- return {
135
- search,
136
- };
137
- },
138
-
139
- async created() {
140
- if (!this.organisationId) return;
141
- this.$store.commit('filterOrga', { orgaId: this.organisationId });
142
- const isLive = await octopusApi.liveEnabledOrganisation(
143
- this.organisationId
144
- );
145
- this.$store.commit('filterOrgaLive', isLive);
146
- this.keepOrganisation = true;
147
- if (!this.$route.query.productor) {
148
- this.$router.replace({ query: { productor: this.organisationId } });
149
- }
150
- },
151
-
152
- mounted() {
153
- if (this.search) {
154
- this.search.focus();
155
- }
156
- },
157
64
 
158
65
  data() {
159
66
  return {
160
- keepOrganisation: false,
161
- showBubble: false,
162
- imgUrl: undefined as any,
67
+ keepOrganisation: false as boolean,
68
+ showBubble: false as boolean,
69
+ queryIntern: '' as string,
163
70
  };
164
71
  },
165
-
72
+
166
73
  computed: {
167
- isPodcastmaker() {
168
- return state.generalParameters.podcastmaker;
74
+ isPodcastmaker(): boolean {
75
+ return (state.generalParameters.podcastmaker as boolean);
169
76
  },
170
- searchText():string {
77
+ searchText(): string {
171
78
  if ('emission' === this.type) return this.$t('Look for emission name');
172
- if ('participant' === this.type)
173
- return this.$t('Look for participant name');
79
+ if ('participant' === this.type)return this.$t('Look for participant name');
174
80
  if ('playlist' === this.type) return this.$t('Look for playlist name');
175
81
  return this.$t('Look for podcast name');
176
82
  },
177
- filterOrga():any {
83
+ filterOrga(): string {
178
84
  return this.$store.state.filter.organisationId;
179
85
  },
180
86
  },
181
-
87
+ watch: {
88
+ queryIntern(): void {
89
+ if(this.queryIntern !== this.searchPattern){
90
+ this.$emit('updateSearchPattern', this.queryIntern);
91
+ }
92
+ },
93
+ filterOrga():void{
94
+ this.keepOrganisation = undefined!==this.filterOrga;
95
+ if (this.filterOrga) {
96
+ this.$emit('updateOrganisationId', this.filterOrga);
97
+ }
98
+ },
99
+ },
100
+ async created() {
101
+ if(this.searchPattern){
102
+ this.queryIntern=this.searchPattern;
103
+ }
104
+ if (!this.organisationId) return;
105
+ if(this.$store.state.filter.organisationId === this.organisationId){
106
+ this.keepOrganisation = true;
107
+ }
108
+ },
182
109
  methods: {
183
- onOrganisationSelected(organisation: any) {
110
+ onOrganisationSelected(organisation: Organisation): void {
184
111
  if (this.$route.query.productor) {
185
112
  this.$router.push({ query: { productor: undefined } });
186
113
  }
187
- this.imgUrl = organisation.imageUrl;
188
- this.$store.commit('filterOrga', {
189
- orgaId: undefined as any,
190
- imgUrl: this.imgUrl,
191
- });
114
+ this.$store.commit('filterOrga', {orgaId: undefined});
192
115
  this.keepOrganisation = false;
193
116
  if (organisation && organisation.id) {
194
- this.showBubble = true;
195
- setTimeout(() => {
196
- this.showBubble = false;
197
- }, 6000);
198
117
  this.$emit('updateOrganisationId', organisation.id);
118
+ if("PUBLIC"!==organisation.privacy){
119
+ this.$nextTick(() => {
120
+ this.onKeepOrganisation();
121
+ });
122
+ } else{
123
+ this.showBubble = true;
124
+ setTimeout(() => {
125
+ this.showBubble = false;
126
+ }, 6000);
127
+ }
199
128
  } else {
200
129
  this.$emit('updateOrganisationId', undefined);
201
130
  }
202
131
  },
203
- async onKeepOrganisation() {
132
+ async onKeepOrganisation(): Promise<void> {
133
+ if(!this.organisationId){return}
204
134
  if (!this.keepOrganisation) {
205
- if (this.$route.query.productor !== this.organisationId) {
206
- this.$router.push({ query: { productor: this.organisationId } });
207
- }
208
- this.$store.commit('filterOrga', {
209
- orgaId: this.organisationId,
210
- imgUrl: this.imgUrl,
211
- });
212
- const isLive = await octopusApi.liveEnabledOrganisation(
213
- this.organisationId
214
- );
215
- this.$store.commit('filterOrgaLive', isLive);
135
+ await this.selectOrganisation(this.organisationId);
216
136
  return;
217
137
  }
218
- if (this.$route.query.productor) {
219
- this.$router.push({ query: { productor: undefined } });
220
- }
221
- this.$store.commit('filterOrga', { orgaId: undefined });
222
- },
223
- },
224
- watch: {
225
- filterOrga():any {
226
- if (this.filterOrga) {
227
- this.keepOrganisation = true;
228
- this.$emit('updateOrganisationId', this.filterOrga);
229
- } else {
230
- this.keepOrganisation = false;
231
- }
138
+ this.removeSelectedOrga();
232
139
  },
233
140
  },
234
- });
141
+ })
235
142
  </script>
143
+
144
+ <style lang="scss">
145
+ @import '../../../sass/_variables.scss';
146
+ .octopus-app{
147
+ .filter-speech-bubble {
148
+ position: absolute;
149
+ background: $octopus-primary-dark;
150
+ border-radius: 0.4em;
151
+ width: 10rem;
152
+ right: 4rem;
153
+ padding: 5px;
154
+ -webkit-animation: fadein 1s;
155
+ -moz-animation: fadein 1s;
156
+ animation: fadein 1s;
157
+ color: white;
158
+ }
159
+
160
+ .filter-speech-bubble:after {
161
+ content: '';
162
+ position: absolute;
163
+ right: 0;
164
+ top: 50%;
165
+ width: 0;
166
+ height: 0;
167
+ border: 18px solid transparent;
168
+ border-left-color: $octopus-primary-dark;
169
+ border-right: 0;
170
+ border-bottom: 0;
171
+ margin-top: -9px;
172
+ margin-right: -18px;
173
+ -webkit-animation: fadein 1s;
174
+ -moz-animation: fadein 1s;
175
+ animation: fadein 1s;
176
+ }
177
+ @keyframes fadein {
178
+ from {
179
+ opacity: 0;
180
+ }
181
+ to {
182
+ opacity: 1;
183
+ }
184
+ }
185
+ @-moz-keyframes fadein {
186
+ from {
187
+ opacity: 0;
188
+ }
189
+ to {
190
+ opacity: 1;
191
+ }
192
+ }
193
+ @-webkit-keyframes fadein {
194
+ from {
195
+ opacity: 0;
196
+ }
197
+ to {
198
+ opacity: 1;
199
+ }
200
+ }
201
+ .filter-organisation-chooser {
202
+ display: flex;
203
+ align-items: center;
204
+ flex-grow: 1;
205
+ margin-right: 10%;
206
+ position: relative;
207
+ @media (max-width: 500px) {
208
+ margin-right: 0;
209
+ }
210
+ }
211
+ }
212
+ </style>
@@ -0,0 +1,97 @@
1
+ <template>
2
+ <div class="d-flex align-items-center">
3
+ <label class="position-relative">
4
+ <select
5
+ v-model="rubriquageId"
6
+ class="ms-2 mb-0 c-hand"
7
+ @change="onRubriquageSelected"
8
+ >
9
+ <option
10
+ v-for="rubriquage in rubriquageDisplay"
11
+ :key="rubriquage.rubriquageId"
12
+ :value="rubriquage.rubriquageId"
13
+ >{{ rubriquage.title }}</option>
14
+ </select>
15
+ <div
16
+ class="saooti-down octopus-arrow-down"
17
+ />
18
+ </label>
19
+ <template v-if="rubriquageId">
20
+ <div class="ms-3 flex-shrink-0">
21
+ {{ $t('By rubric') }}
22
+ </div>
23
+ <RubriqueChooser
24
+ v-if="getRubriques(rubriquageId).length"
25
+ class="ms-2"
26
+ :multiple="false"
27
+ :rubriquage-id="rubriquageId"
28
+ :rubrique-selected="0 < rubriqueIdSelected? rubriqueIdSelected : undefined"
29
+ :all-rubriques="getRubriques(rubriquageId)"
30
+ :defaultanswer="$t('No rubric filter')"
31
+ :reset="reset"
32
+ :without-rubrique="true"
33
+ width="auto"
34
+ @selected="onRubriqueSelected"
35
+ />
36
+ </template>
37
+ <button
38
+ v-if="index"
39
+ class="btn admin-button ms-1 saooti-bin"
40
+ title="delete"
41
+ @click="deleteRubriquage"
42
+ />
43
+ </div>
44
+ </template>
45
+
46
+ <script lang="ts">
47
+ import { Rubriquage } from '@/store/class/rubrique/rubriquage';
48
+ import { Rubrique } from '@/store/class/rubrique/rubrique';
49
+ import { defineComponent, defineAsyncComponent } from 'vue';
50
+ const RubriqueChooser = defineAsyncComponent(() => import('../rubriques/RubriqueChooser.vue'));
51
+ export default defineComponent({
52
+ components: {
53
+ RubriqueChooser,
54
+ },
55
+ props: {
56
+ rubriquageDisplay: { default: () => [], type: Array as ()=>Array<Rubriquage>},
57
+ rubriquageIdSelected:{default: 0, type: Number},
58
+ rubriqueIdSelected: { default: 0, type: Number},
59
+ index: { default: 0, type: Number},
60
+ },
61
+ emits: ['deleteRubriqueChoice', 'updateRubrique', 'updateRubriquage'],
62
+
63
+ data() {
64
+ return {
65
+ rubriquageId: undefined as number|undefined,
66
+ rubriqueId: undefined as number|undefined,
67
+ reset: false as boolean,
68
+ };
69
+ },
70
+
71
+ created(){
72
+ this.rubriquageId = this.rubriquageIdSelected;
73
+ },
74
+
75
+ methods: {
76
+ deleteRubriquage(){
77
+ this.$emit('deleteRubriqueChoice');
78
+ },
79
+ getRubriques(rubriquageId: number): Array<Rubrique> {
80
+ const topicIndex = this.rubriquageDisplay.findIndex(
81
+ ( element: Rubriquage) => element.rubriquageId === rubriquageId
82
+ );
83
+ return -1 !== topicIndex ? this.rubriquageDisplay[topicIndex].rubriques : [];
84
+ },
85
+ onRubriqueSelected(rubrique: Rubrique): void {
86
+ if (rubrique.rubriqueId === this.rubriqueId) return;
87
+ this.rubriqueId = rubrique.rubriqueId;
88
+ this.$emit('updateRubrique', {rubriqueId : rubrique.rubriqueId, index: this.index});
89
+ },
90
+ onRubriquageSelected(): void {
91
+ this.reset = !this.reset;
92
+ this.rubriqueId = 0;
93
+ this.$emit('updateRubriquage', {rubriquageId : this.rubriquageId, index: this.index});
94
+ },
95
+ },
96
+ })
97
+ </script>