@saooti/octopus-sdk 1.0.0 → 29.0.2

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 (230) hide show
  1. package/README.md +73 -0
  2. package/index.d.ts +4 -0
  3. package/index.ts +12 -0
  4. package/package.json +61 -39
  5. package/public/css/fonts/saooti-ui.eot +0 -0
  6. package/public/css/fonts/saooti-ui.svg +30 -19
  7. package/public/css/fonts/saooti-ui.ttf +0 -0
  8. package/public/css/fonts/saooti-ui.woff +0 -0
  9. package/public/css/fonts/style.css +48 -5
  10. package/public/img/ACPM.png +0 -0
  11. package/public/img/article.png +0 -0
  12. package/src/App.vue +97 -31
  13. package/src/api/comments.ts +3 -1
  14. package/src/api/emissions.ts +5 -2
  15. package/src/api/initialize.ts +3 -2
  16. package/src/api/podcasts.ts +5 -2
  17. package/src/api/profile.ts +4 -2
  18. package/src/api/studio.ts +12 -1
  19. package/src/assets/bootstrap-diff.scss +265 -0
  20. package/src/assets/form.scss +23 -0
  21. package/src/assets/general.scss +47 -20
  22. package/src/assets/modal.scss +9 -10
  23. package/src/assets/multiselect.scss +19 -2
  24. package/src/assets/octopus-library.scss +16 -4
  25. package/src/assets/share.scss +343 -0
  26. package/src/components/display/aggregator/RssSection.vue +4 -4
  27. package/src/components/display/categories/CategoryChooser.vue +152 -105
  28. package/src/components/display/categories/CategoryFilter.vue +108 -0
  29. package/src/components/display/categories/CategoryList.vue +138 -109
  30. package/src/components/display/comments/AddCommentModal.vue +104 -87
  31. package/src/components/display/comments/CommentInput.vue +137 -118
  32. package/src/components/display/comments/CommentItem.vue +155 -137
  33. package/src/components/display/comments/CommentList.vue +142 -120
  34. package/src/components/display/comments/CommentParentInfo.vue +39 -35
  35. package/src/components/display/comments/CommentPlayer.vue +54 -48
  36. package/src/components/display/comments/CommentSection.vue +57 -58
  37. package/src/components/display/edit/EditBox.vue +4 -4
  38. package/src/components/display/edit/EditCommentBox.vue +25 -31
  39. package/src/components/display/emission/EmissionChooser.vue +82 -80
  40. package/src/components/display/emission/EmissionInlineList.vue +118 -105
  41. package/src/components/display/emission/EmissionItem.vue +66 -167
  42. package/src/components/display/emission/EmissionList.vue +96 -122
  43. package/src/components/display/emission/EmissionPlayerItem.vue +131 -126
  44. package/src/components/display/filter/AdvancedSearch.vue +306 -372
  45. package/src/components/display/filter/CategoryFilter.vue +117 -0
  46. package/src/components/display/filter/MonetizableFilter.vue +24 -10
  47. package/src/components/display/filter/ProductorSearch.vue +131 -135
  48. package/src/components/display/filter/RubriqueChoice.vue +104 -0
  49. package/src/components/display/filter/RubriqueFilter.vue +235 -0
  50. package/src/components/display/live/CountDown.vue +30 -29
  51. package/src/components/display/live/LiveHorizontalList.vue +40 -34
  52. package/src/components/display/live/LiveItem.vue +146 -158
  53. package/src/components/display/live/LiveList.vue +167 -154
  54. package/src/components/display/organisation/OrganisationChooser.vue +125 -124
  55. package/src/components/display/organisation/OrganisationChooserLight.vue +40 -47
  56. package/src/components/display/participant/ParticipantItem.vue +92 -108
  57. package/src/components/display/participant/ParticipantList.vue +76 -69
  58. package/src/components/display/playlist/PlaylistItem.vue +45 -56
  59. package/src/components/display/playlist/PlaylistList.vue +57 -48
  60. package/src/components/display/playlist/PodcastList.vue +94 -70
  61. package/src/components/display/podcasts/AnimatorsItem.vue +26 -23
  62. package/src/components/display/podcasts/ParticipantDescription.vue +115 -0
  63. package/src/components/display/podcasts/PodcastFilterList.vue +84 -85
  64. package/src/components/display/podcasts/PodcastImage.vue +244 -208
  65. package/src/components/display/podcasts/PodcastInlineList.vue +145 -207
  66. package/src/components/display/podcasts/PodcastItem.vue +150 -132
  67. package/src/components/display/podcasts/PodcastList.vue +89 -110
  68. package/src/components/display/podcasts/TagList.vue +23 -16
  69. package/src/components/display/rubriques/RubriqueChooser.vue +137 -123
  70. package/src/components/display/rubriques/RubriqueList.vue +227 -0
  71. package/src/components/display/sharing/PlayerParameters.vue +154 -106
  72. package/src/components/display/sharing/QrCode.vue +58 -0
  73. package/src/components/display/sharing/ShareButtons.vue +214 -92
  74. package/src/components/display/sharing/ShareDistribution.vue +110 -121
  75. package/src/components/display/sharing/SharePlayer.vue +245 -190
  76. package/src/components/display/sharing/SubscribeButtons.vue +130 -66
  77. package/src/components/display/studio/RecordingItemButton.vue +4 -4
  78. package/src/components/misc/ErrorMessage.vue +21 -16
  79. package/src/components/misc/Footer.vue +131 -66
  80. package/src/components/misc/HomeDropdown.vue +166 -123
  81. package/src/components/misc/LeftMenu.vue +151 -134
  82. package/src/components/misc/Player.vue +332 -328
  83. package/src/components/misc/Snackbar.vue +27 -29
  84. package/src/components/misc/TopBar.vue +204 -174
  85. package/src/components/misc/modal/ClipboardModal.vue +46 -26
  86. package/src/components/misc/modal/MessageModal.vue +67 -51
  87. package/src/components/misc/modal/NewsletterModal.vue +179 -136
  88. package/src/components/misc/modal/QrCodeModal.vue +83 -0
  89. package/src/components/misc/modal/ShareModalPlayer.vue +133 -74
  90. package/src/components/mixins/functions.ts +21 -18
  91. package/src/components/mixins/init.ts +24 -0
  92. package/src/components/mixins/organisationFilter.ts +24 -0
  93. package/src/components/pages/Category.vue +26 -26
  94. package/src/components/pages/Emission.vue +120 -92
  95. package/src/components/pages/Emissions.vue +109 -86
  96. package/src/components/pages/Home.vue +70 -16
  97. package/src/components/pages/Lives.vue +57 -47
  98. package/src/components/pages/Participant.vue +93 -77
  99. package/src/components/pages/Participants.vue +44 -31
  100. package/src/components/pages/Playlist.vue +63 -52
  101. package/src/components/pages/Playlists.vue +41 -39
  102. package/src/components/pages/Podcast.vue +265 -251
  103. package/src/components/pages/Podcasts.vue +135 -104
  104. package/src/components/pages/Rubrique.vue +25 -19
  105. package/src/components/pages/Search.vue +71 -67
  106. package/src/helper/dom.ts +2 -2
  107. package/src/helper/duration.ts +18 -8
  108. package/src/locale/educationen.ts +14 -0
  109. package/src/locale/en.ts +299 -1
  110. package/src/locale/fr.ts +25 -10
  111. package/src/locale/messages.ts +3 -2
  112. package/src/main.ts +54 -32
  113. package/src/router/router.ts +184 -159
  114. package/src/shims-tsx.d.ts +13 -0
  115. package/src/shims-vue-recaptcha-v3.d.ts +9 -0
  116. package/src/shims-vue.d.ts +5 -6
  117. package/src/store/AppStore.ts +36 -171
  118. package/src/store/class/category.ts +8 -0
  119. package/src/store/class/comment.ts +17 -0
  120. package/src/store/class/conference.ts +27 -0
  121. package/src/store/class/customPlayer.ts +8 -0
  122. package/src/store/class/emission.ts +20 -0
  123. package/src/store/class/fetchParam.ts +16 -0
  124. package/src/store/class/media.ts +13 -0
  125. package/src/store/class/organisation.ts +19 -0
  126. package/src/store/class/participant.ts +12 -0
  127. package/src/store/class/person.ts +13 -0
  128. package/src/store/class/player.ts +12 -0
  129. package/src/store/class/playlist.ts +15 -0
  130. package/src/store/class/podcast.ts +37 -0
  131. package/src/store/class/rubriquage.ts +9 -0
  132. package/src/store/class/rubriquageFilter.ts +5 -0
  133. package/src/store/class/rubrique.ts +8 -0
  134. package/src/store/paramStore.ts +70 -29
  135. package/src/store/typeAppStore.ts +171 -237
  136. package/src/vuex-shim.d.ts +8 -0
  137. package/tsconfig.json +4 -0
  138. package/vue.config.js +14 -0
  139. package/public/img/ACPM.PNG +0 -0
  140. package/src/assets/bootstrap_scss/_alert.scss +0 -51
  141. package/src/assets/bootstrap_scss/_badge.scss +0 -54
  142. package/src/assets/bootstrap_scss/_breadcrumb.scss +0 -42
  143. package/src/assets/bootstrap_scss/_button-group.scss +0 -164
  144. package/src/assets/bootstrap_scss/_buttons.scss +0 -291
  145. package/src/assets/bootstrap_scss/_card.scss +0 -278
  146. package/src/assets/bootstrap_scss/_carousel.scss +0 -197
  147. package/src/assets/bootstrap_scss/_close.scss +0 -41
  148. package/src/assets/bootstrap_scss/_code.scss +0 -48
  149. package/src/assets/bootstrap_scss/_custom-forms.scss +0 -522
  150. package/src/assets/bootstrap_scss/_dropdown.scss +0 -201
  151. package/src/assets/bootstrap_scss/_forms.scss +0 -352
  152. package/src/assets/bootstrap_scss/_functions.scss +0 -134
  153. package/src/assets/bootstrap_scss/_grid.scss +0 -69
  154. package/src/assets/bootstrap_scss/_images.scss +0 -42
  155. package/src/assets/bootstrap_scss/_input-group.scss +0 -191
  156. package/src/assets/bootstrap_scss/_jumbotron.scss +0 -17
  157. package/src/assets/bootstrap_scss/_list-group.scss +0 -158
  158. package/src/assets/bootstrap_scss/_media.scss +0 -8
  159. package/src/assets/bootstrap_scss/_mixins.scss +0 -47
  160. package/src/assets/bootstrap_scss/_modal.scss +0 -243
  161. package/src/assets/bootstrap_scss/_nav.scss +0 -120
  162. package/src/assets/bootstrap_scss/_navbar.scss +0 -324
  163. package/src/assets/bootstrap_scss/_pagination.scss +0 -74
  164. package/src/assets/bootstrap_scss/_popover.scss +0 -170
  165. package/src/assets/bootstrap_scss/_print.scss +0 -141
  166. package/src/assets/bootstrap_scss/_progress.scss +0 -46
  167. package/src/assets/bootstrap_scss/_reboot.scss +0 -482
  168. package/src/assets/bootstrap_scss/_root.scss +0 -20
  169. package/src/assets/bootstrap_scss/_spinners.scss +0 -55
  170. package/src/assets/bootstrap_scss/_tables.scss +0 -185
  171. package/src/assets/bootstrap_scss/_toasts.scss +0 -44
  172. package/src/assets/bootstrap_scss/_tooltip.scss +0 -115
  173. package/src/assets/bootstrap_scss/_transitions.scss +0 -20
  174. package/src/assets/bootstrap_scss/_type.scss +0 -125
  175. package/src/assets/bootstrap_scss/_utilities.scss +0 -17
  176. package/src/assets/bootstrap_scss/_variables.scss +0 -1145
  177. package/src/assets/bootstrap_scss/bootstrap-grid.scss +0 -29
  178. package/src/assets/bootstrap_scss/bootstrap-reboot.scss +0 -12
  179. package/src/assets/bootstrap_scss/bootstrap.scss +0 -44
  180. package/src/assets/bootstrap_scss/mixins/_alert.scss +0 -13
  181. package/src/assets/bootstrap_scss/mixins/_background-variant.scss +0 -22
  182. package/src/assets/bootstrap_scss/mixins/_badge.scss +0 -17
  183. package/src/assets/bootstrap_scss/mixins/_border-radius.scss +0 -63
  184. package/src/assets/bootstrap_scss/mixins/_box-shadow.scss +0 -20
  185. package/src/assets/bootstrap_scss/mixins/_breakpoints.scss +0 -123
  186. package/src/assets/bootstrap_scss/mixins/_buttons.scss +0 -110
  187. package/src/assets/bootstrap_scss/mixins/_caret.scss +0 -62
  188. package/src/assets/bootstrap_scss/mixins/_clearfix.scss +0 -7
  189. package/src/assets/bootstrap_scss/mixins/_deprecate.scss +0 -10
  190. package/src/assets/bootstrap_scss/mixins/_float.scss +0 -14
  191. package/src/assets/bootstrap_scss/mixins/_forms.scss +0 -177
  192. package/src/assets/bootstrap_scss/mixins/_gradients.scss +0 -45
  193. package/src/assets/bootstrap_scss/mixins/_grid-framework.scss +0 -71
  194. package/src/assets/bootstrap_scss/mixins/_grid.scss +0 -69
  195. package/src/assets/bootstrap_scss/mixins/_hover.scss +0 -37
  196. package/src/assets/bootstrap_scss/mixins/_image.scss +0 -36
  197. package/src/assets/bootstrap_scss/mixins/_list-group.scss +0 -21
  198. package/src/assets/bootstrap_scss/mixins/_lists.scss +0 -7
  199. package/src/assets/bootstrap_scss/mixins/_nav-divider.scss +0 -11
  200. package/src/assets/bootstrap_scss/mixins/_pagination.scss +0 -22
  201. package/src/assets/bootstrap_scss/mixins/_reset-text.scss +0 -17
  202. package/src/assets/bootstrap_scss/mixins/_resize.scss +0 -6
  203. package/src/assets/bootstrap_scss/mixins/_screen-reader.scss +0 -34
  204. package/src/assets/bootstrap_scss/mixins/_size.scss +0 -7
  205. package/src/assets/bootstrap_scss/mixins/_table-row.scss +0 -39
  206. package/src/assets/bootstrap_scss/mixins/_text-emphasis.scss +0 -17
  207. package/src/assets/bootstrap_scss/mixins/_text-hide.scss +0 -11
  208. package/src/assets/bootstrap_scss/mixins/_text-truncate.scss +0 -8
  209. package/src/assets/bootstrap_scss/mixins/_transition.scss +0 -16
  210. package/src/assets/bootstrap_scss/mixins/_visibility.scss +0 -8
  211. package/src/assets/bootstrap_scss/utilities/_align.scss +0 -8
  212. package/src/assets/bootstrap_scss/utilities/_background.scss +0 -19
  213. package/src/assets/bootstrap_scss/utilities/_borders.scss +0 -75
  214. package/src/assets/bootstrap_scss/utilities/_clearfix.scss +0 -3
  215. package/src/assets/bootstrap_scss/utilities/_display.scss +0 -26
  216. package/src/assets/bootstrap_scss/utilities/_embed.scss +0 -39
  217. package/src/assets/bootstrap_scss/utilities/_flex.scss +0 -51
  218. package/src/assets/bootstrap_scss/utilities/_float.scss +0 -11
  219. package/src/assets/bootstrap_scss/utilities/_overflow.scss +0 -5
  220. package/src/assets/bootstrap_scss/utilities/_position.scss +0 -32
  221. package/src/assets/bootstrap_scss/utilities/_screenreaders.scss +0 -11
  222. package/src/assets/bootstrap_scss/utilities/_shadows.scss +0 -6
  223. package/src/assets/bootstrap_scss/utilities/_sizing.scss +0 -20
  224. package/src/assets/bootstrap_scss/utilities/_spacing.scss +0 -73
  225. package/src/assets/bootstrap_scss/utilities/_stretched-link.scss +0 -19
  226. package/src/assets/bootstrap_scss/utilities/_text.scss +0 -72
  227. package/src/assets/bootstrap_scss/utilities/_visibility.scss +0 -13
  228. package/src/assets/bootstrap_scss/vendor/_rfs.scss +0 -204
  229. package/src/shims-vuex.d.ts +0 -7
  230. package/src/views/Home.vue +0 -18
@@ -4,157 +4,144 @@
4
4
  class="d-flex justify-content-center mb-3"
5
5
  @click="showFilters = !showFilters"
6
6
  >
7
- <div class="text-secondary c-hand">{{ $t('Advanced filters') }}</div>
7
+ <div class="text-secondary c-hand">
8
+ {{ $t('Advanced filters') }}
9
+ </div>
8
10
  <div
9
11
  class="text-secondary c-hand align-self-center large-font-size"
10
12
  :class="{ 'arrow-transform': showFilters }"
11
13
  >
12
- <div class="saooti-arrow_down saooti-arrow_down-margin"></div>
14
+ <div class="saooti-arrow_down saooti-arrow_down-margin" />
13
15
  </div>
14
16
  </div>
15
- <div class="advanced-search-container" v-show="showFilters">
17
+ <div
18
+ v-show="showFilters"
19
+ class="advanced-search-container"
20
+ >
16
21
  <div class="d-flex flex-column">
17
- <div class="primary-color mb-2">{{ $t('Filter') }}</div>
22
+ <div class="primary-color mb-2">
23
+ {{ $t('Filter') }}
24
+ </div>
18
25
  <MonetizableFilter
19
- @updateMonetization="updateMonetization"
20
- :isEducation="isEducation"
21
- :isEmission="isEmission"
22
26
  v-if="isMonetizableFilter"
27
+ :is-education="isEducation"
28
+ :is-emission="isEmission"
29
+ @updateMonetization="updateMonetization"
30
+ />
31
+ <CategoryFilter @updateCategory="updateCategory" />
32
+
33
+ <RubriqueFilter
34
+ :reset-rubriquage="resetRubriquage"
35
+ :organisation-id="organisationId"
36
+ @updateRubriquageFilter="updateRubriquageFilter"
23
37
  />
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>
79
38
  <div class="d-flex mt-3 align-items-center flex-wrap">
80
- <div class="mr-2" v-if="isEmission">
39
+ <div
40
+ v-if="isEmission"
41
+ class="me-2"
42
+ >
81
43
  {{ $t('Emission with episode published :') }}
82
44
  </div>
83
45
  <div class="d-flex align-items-center">
84
- <div class="checkbox-saooti flex-shrink">
46
+ <div class="flex-shrink">
85
47
  <input
86
- type="checkbox"
87
- class="custom-control-input"
88
48
  id="search-from-checkbox"
89
49
  v-model="isFrom"
90
- />
91
- <label class="custom-control-label" for="search-from-checkbox">{{
50
+ type="checkbox"
51
+ class="form-check-input"
52
+ >
53
+ <label
54
+ class="form-check-label"
55
+ for="search-from-checkbox"
56
+ >{{
92
57
  $t('From the :')
93
58
  }}</label>
94
59
  </div>
95
- <Datetime
96
- type="datetime"
97
- moment-locale="fr"
60
+ <DatePicker
98
61
  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"
103
- />
62
+ class="ps-3 pe-3"
63
+ mode="dateTime"
64
+ color="green"
65
+ is24hr
66
+ @input="updateFromDate()"
67
+ >
68
+ <template #default="{ inputValue, inputEvents }">
69
+ <input
70
+ class="px-2 py-1 border rounded focus:outline-none focus:border-blue-300"
71
+ :value="inputValue"
72
+ v-on="inputEvents"
73
+ >
74
+ </template>
75
+ </DatePicker>
104
76
  </div>
105
77
  <div class="d-flex align-items-center">
106
- <div class="checkbox-saooti flex-shrink">
78
+ <div class="flex-shrink">
107
79
  <input
108
- type="checkbox"
109
- class="custom-control-input"
110
80
  id="search-to-checkbox"
111
81
  v-model="isTo"
112
- />
113
- <label class="custom-control-label" for="search-to-checkbox">{{
82
+ type="checkbox"
83
+ class="form-check-input"
84
+ >
85
+ <label
86
+ class="form-check-label"
87
+ for="search-to-checkbox"
88
+ >{{
114
89
  $t('To the :')
115
90
  }}</label>
116
91
  </div>
117
- <Datetime
118
- type="datetime"
119
- moment-locale="fr"
92
+ <DatePicker
120
93
  v-model="toDate"
121
- class="theme-saooti pl-3"
122
- @input="updateToDate"
123
- input-format="D/MM/YYYY [à] HH[h]mm"
124
- :i18n="lang"
125
- />
94
+ class="ps-3"
95
+ mode="dateTime"
96
+ color="green"
97
+ is24hr
98
+ @input="updateToDate()"
99
+ >
100
+ <template #default="{ inputValue, inputEvents }">
101
+ <input
102
+ class="px-2 py-1 border rounded focus:outline-none focus:border-blue-300"
103
+ :value="inputValue"
104
+ v-on="inputEvents"
105
+ >
106
+ </template>
107
+ </DatePicker>
126
108
  </div>
127
109
  </div>
128
110
  <div
129
- class="d-flex flex-column mt-3"
130
111
  v-if="organisation && organisationRight && !isPodcastmaker"
112
+ class="d-flex flex-column mt-3"
131
113
  >
132
- <div class="checkbox-saooti flex-shrink">
114
+ <div class="flex-shrink">
133
115
  <input
134
- type="checkbox"
135
- class="custom-control-input"
136
116
  id="search-future-checkbox"
137
117
  v-model="isNotVisible"
118
+ type="checkbox"
119
+ class="form-check-input"
138
120
  :disabled="isCheckboxNotValidate && isNotValidate"
139
- />
140
- <label class="custom-control-label" for="search-future-checkbox">{{
121
+ >
122
+ <label
123
+ class="form-check-label"
124
+ for="search-future-checkbox"
125
+ >{{
141
126
  textNotVisible
142
127
  }}</label>
143
128
  </div>
144
129
  </div>
145
- <div class="d-flex flex-column mt-3" v-if="isCheckboxNotValidate">
146
- <div class="checkbox-saooti flex-shrink">
130
+ <div
131
+ v-if="isCheckboxNotValidate"
132
+ class="d-flex flex-column mt-3"
133
+ >
134
+ <div class="flex-shrink">
147
135
  <input
148
- type="checkbox"
149
- class="custom-control-input"
150
136
  id="search-not-validate-checkbox"
151
137
  v-model="isNotValidate"
152
- />
138
+ type="checkbox"
139
+ class="form-check-input"
140
+ >
153
141
  <label
154
- class="custom-control-label"
142
+ class="form-check-label"
155
143
  for="search-not-validate-checkbox"
156
- >{{ textNotValidate }}</label
157
- >
144
+ >{{ textNotValidate }}</label>
158
145
  </div>
159
146
  </div>
160
147
  </div>
@@ -162,205 +149,124 @@
162
149
  <div class="primary-color mb-2 padding-left-custom-radio">
163
150
  {{ $t('Sort') }}
164
151
  </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>
152
+ <div
153
+ v-if="isSearchBar"
154
+ class="form-check"
155
+ >
156
+ <input
157
+ id="radio_score"
158
+ v-model="sort"
159
+ class="form-check-input"
160
+ type="radio"
161
+ name="sortRadio"
162
+ value="SCORE"
163
+ >
164
+ <label
165
+ class="form-check-label"
166
+ for="radio_score"
167
+ >{{ $t('Sort score') }}</label>
168
+ </div>
169
+ <div class="form-check">
170
+ <input
171
+ id="radio_podcast"
172
+ v-model="sort"
173
+ class="form-check-input"
174
+ type="radio"
175
+ name="sortRadio"
176
+ :value="isEmission?'LAST_PODCAST_DESC':'DATE'"
177
+ >
178
+ <label
179
+ class="form-check-label"
180
+ for="radio_podcast"
181
+ >{{ $t('Sort last') }}</label>
182
+ </div>
183
+ <div class="form-check">
184
+ <input
185
+ id="radio_name"
186
+ v-model="sort"
187
+ class="form-check-input"
188
+ type="radio"
189
+ name="sortRadio"
190
+ value="NAME"
191
+ >
192
+ <label
193
+ class="form-check-label"
194
+ for="radio_name"
195
+ >{{ $t('Sort name') }}</label>
196
+ </div>
179
197
  </div>
180
198
  </div>
181
199
  </div>
182
200
  </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
-
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
201
 
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
202
  <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
203
  import { state } from '../../../store/paramStore';
275
- const octopusApi = require('@saooti/octopus-api');
276
204
  const moment = require('moment');
277
-
278
- import { defineComponent } from 'vue';
205
+ import CategoryFilter from './CategoryFilter.vue';
206
+ import RubriqueFilter from './RubriqueFilter.vue';
207
+ import { RubriquageFilter } from '@/store/class/rubriquageFilter';
208
+ import { DatePicker } from 'v-calendar';
209
+ import { defineComponent, defineAsyncComponent } from 'vue';
210
+ const MonetizableFilter = defineAsyncComponent(() => import('./MonetizableFilter.vue'));
279
211
  export default defineComponent({
280
212
  components: {
281
213
  MonetizableFilter,
282
- RubriqueChooser,
283
- Datetime,
214
+ DatePicker,
215
+ CategoryFilter,
216
+ RubriqueFilter
284
217
  },
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
- }
302
- },
303
-
304
- mounted() {
305
- this.sort = this.sortCriteria;
218
+ props: {
219
+ organisationId: { default: undefined, type: String},
220
+ isEmission: { default: false, type: Boolean},
221
+ resetRubriquage: { default: false, type: Boolean},
222
+ isSearchBar: { default: false, type: Boolean},
223
+ isEducation: { default: false, type: Boolean},
224
+ includeHidden: { default: false, type: Boolean},
225
+ sortCriteria: { default: 'DATE', type: String},
306
226
  },
307
227
 
228
+ emits: ['updateToDate',
229
+ 'updateFromDate',
230
+ 'updateMonetization',
231
+ 'updateCategory',
232
+ 'updateSortCriteria',
233
+ 'includeHidden',
234
+ 'notValid',
235
+ 'updateRubriquageFilter'],
308
236
  data() {
309
237
  return {
310
- isRubriquage: false,
311
- rubriquageId: undefined as any,
312
- rubriqueId: undefined as any,
313
- rubriquageData: [] as any,
314
- isFrom: false,
315
- isTo: false,
238
+ isFrom: false as boolean,
239
+ isTo: false as boolean,
316
240
  lang: {
317
- ok: this.$t('Validate'),
318
- cancel: this.$t('Cancel'),
241
+ ok: this.$t('Validate') as string,
242
+ cancel: this.$t('Cancel') as string,
319
243
  },
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: '',
244
+ fromDate: moment().subtract(10, 'days').toISOString() as string,
245
+ toDate: moment().toISOString() as string,
246
+ isNotVisible: false as boolean,
247
+ isNotValidate: false as boolean,
248
+ showFilters: false as boolean,
249
+ sort: '' as string,
329
250
  };
330
251
  },
331
252
 
332
253
  computed: {
333
- isMonetizableFilter() {
254
+ isMonetizableFilter(): boolean {
334
255
  return state.podcastsPage.MonetizableFilter;
335
256
  },
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
- }
348
- }
349
- return found;
350
- },
351
- myOrganisationId() {
257
+ myOrganisationId(): string {
352
258
  return state.generalParameters.organisationId;
353
259
  },
354
- authenticated():boolean {
260
+ authenticated(): boolean {
355
261
  return state.generalParameters.authenticated;
356
262
  },
357
- isProduction() {
263
+ isProduction(): boolean {
358
264
  return state.generalParameters.isProduction;
359
265
  },
360
- isContribution() {
266
+ isContribution(): boolean {
361
267
  return state.generalParameters.isContribution;
362
268
  },
363
- organisationRight() {
269
+ organisationRight(): boolean {
364
270
  if (
365
271
  (this.authenticated && this.myOrganisationId === this.organisationId) ||
366
272
  state.generalParameters.isAdmin
@@ -368,24 +274,24 @@ export default defineComponent({
368
274
  return true;
369
275
  return false;
370
276
  },
371
- isPodcastmaker() {
277
+ isPodcastmaker(): boolean {
372
278
  return state.generalParameters.podcastmaker;
373
279
  },
374
- filterOrga():any {
280
+ filterOrga(): string {
375
281
  return this.$store.state.filter.organisationId;
376
282
  },
377
- organisation():any {
283
+ organisation(): string|undefined {
378
284
  if (this.organisationId) return this.organisationId;
379
285
  if (this.filterOrga) return this.filterOrga;
380
286
  return undefined;
381
287
  },
382
- textNotVisible():string {
383
- if (this.isEmission) return this.$t('Consider podcasts no visible');
384
- return this.$t('See podcasts no visible');
288
+ textNotVisible(): string {
289
+ if (this.isEmission) return this.$t('Consider podcasts no visible').toString();
290
+ return this.$t('See podcasts no visible').toString();
385
291
  },
386
- isCheckboxNotValidate():boolean {
292
+ isCheckboxNotValidate(): boolean {
387
293
  return (
388
- this.organisation &&
294
+ undefined!==this.organisation &&
389
295
  this.organisationRight &&
390
296
  this.isContribution &&
391
297
  !this.isPodcastmaker &&
@@ -393,14 +299,58 @@ export default defineComponent({
393
299
  this.isNotVisible
394
300
  );
395
301
  },
396
- textNotValidate():string {
397
- if (this.isProduction) return this.$t('Display all podcasts to validate');
398
- return this.$t('Display my podcasts to validate');
302
+ textNotValidate(): string {
303
+ if (this.isProduction) return this.$t('Display all podcasts to validate').toString();
304
+ return this.$t('Display my podcasts to validate').toString();
305
+ },
306
+ },
307
+ watch: {
308
+ organisation(): void {
309
+ if (this.organisation && this.organisationRight && !this.isEmission) {
310
+ this.isNotVisible = true;
311
+ } else {
312
+ this.isNotVisible = false;
313
+ }
314
+ },
315
+ isFrom(): void {
316
+ if (this.isFrom) {
317
+ this.$emit('updateFromDate', moment(this.fromDate).toISOString(true));
318
+ } else {
319
+ this.$emit('updateFromDate', undefined);
320
+ }
321
+ },
322
+ isTo(): void {
323
+ if (this.isTo) {
324
+ this.$emit('updateToDate', moment(this.toDate).toISOString(true));
325
+ } else {
326
+ this.$emit('updateToDate', undefined);
327
+ }
328
+ },
329
+ sort(): void {
330
+ this.$emit('updateSortCriteria', this.sort);
331
+ },
332
+ isNotVisible(): void{
333
+ this.$emit('includeHidden', this.isNotVisible);
334
+ },
335
+ isNotValidate(): void {
336
+ this.$emit('notValid', this.isNotValidate);
337
+ },
338
+ sortCriteria(): void {
339
+ this.sort = this.sortCriteria;
399
340
  },
400
341
  },
401
342
 
343
+ created() {
344
+ if (!this.isEmission) {
345
+ this.isNotVisible = this.includeHidden;
346
+ }
347
+ },
348
+
349
+ mounted() {
350
+ this.sort = this.sortCriteria;
351
+ },
402
352
  methods: {
403
- updateFromDate() {
353
+ updateFromDate(): void {
404
354
  if (
405
355
  moment(this.fromDate)
406
356
  .startOf('minute')
@@ -411,14 +361,13 @@ export default defineComponent({
411
361
  .toISOString()
412
362
  )
413
363
  return;
414
-
415
364
  if (this.isFrom) {
416
- this.$emit('updateFromDate', this.fromDate);
365
+ this.$emit('updateFromDate', moment(this.fromDate).toISOString(true));
417
366
  } else {
418
367
  this.isFrom = true;
419
368
  }
420
369
  },
421
- updateToDate() {
370
+ updateToDate(): void {
422
371
  if (
423
372
  moment(this.toDate)
424
373
  .startOf('minute')
@@ -428,102 +377,87 @@ export default defineComponent({
428
377
  .toISOString()
429
378
  )
430
379
  return;
431
-
432
380
  if (this.isTo) {
433
- this.$emit('updateToDate', this.toDate);
381
+ this.$emit('updateToDate', moment(this.toDate).toISOString(true));
434
382
  } else {
435
383
  this.isTo = true;
436
384
  }
437
385
  },
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) {
386
+ updateMonetization(value: string): void {
461
387
  this.$emit('updateMonetization', value);
462
388
  },
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
- }
389
+ updateCategory(value: number){
390
+ if(0!==value){
391
+ this.$emit('updateCategory', value);
392
+ }else{
393
+ this.$emit('updateCategory', undefined);
478
394
  }
479
395
  },
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();
489
- },
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;
396
+ updateRubriquageFilter(value: Array<RubriquageFilter>){
397
+ this.$emit('updateRubriquageFilter', value);
526
398
  },
527
399
  },
528
- });
400
+ })
529
401
  </script>
402
+
403
+ <style lang="scss">
404
+
405
+ .padding-left-custom-radio {
406
+ padding-left: 1.5rem;
407
+ @media (max-width: 720px) {
408
+ padding-left: 0;
409
+ margin-top: 1rem;
410
+ }
411
+ }
412
+ .large-font-size {
413
+ font-size: 1.3rem;
414
+ }
415
+
416
+ .advanced-search-container {
417
+ background: #fff;
418
+ border-radius: 0.8rem;
419
+ display: flex;
420
+ width: 100%;
421
+ padding: 1rem 2rem;
422
+ margin-bottom: 1rem;
423
+ justify-content: space-around;
424
+ @media (max-width: 720px) {
425
+ flex-wrap: wrap;
426
+ justify-content: flex-start;
427
+ }
428
+
429
+ @media (max-width: 450px) {
430
+ flex-direction: column;
431
+ .vdatetime {
432
+ padding: 0.5em 0 !important;
433
+ width: 100%;
434
+ input {
435
+ width: 100%;
436
+ }
437
+ }
438
+ padding: 1rem;
439
+ .basic-select {
440
+ width: 100%;
441
+ margin: 0 !important;
442
+ }
443
+
444
+ label.wrap {
445
+ width: 100%;
446
+ margin: 0.5em 0;
447
+ position: relative;
448
+ }
449
+ }
450
+
451
+ @media (min-width: 401px) {
452
+ label.wrap {
453
+ position: relative;
454
+ margin: 0;
455
+ }
456
+ }
457
+ select {
458
+ -webkit-appearance: none;
459
+ -moz-appearance: none;
460
+ appearance: none;
461
+ }
462
+ }
463
+ </style>