@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
@@ -0,0 +1,235 @@
1
+ <template>
2
+ <div
3
+ v-if="organisationId && rubriquageData"
4
+ class="d-flex mt-3 align-items-center"
5
+ >
6
+ <div class="flex-shrink">
7
+ <input
8
+ id="search-rubriquage-checkbox"
9
+ v-model="isRubriquage"
10
+ type="checkbox"
11
+ class="form-check-input"
12
+ >
13
+ <label
14
+ class="form-check-label"
15
+ for="search-rubriquage-checkbox"
16
+ >{{ $t('By topic') }}</label>
17
+ </div>
18
+ <div
19
+ v-if="isRubriquage"
20
+ class="d-flex flex-column"
21
+ >
22
+ <RubriqueChoice
23
+ v-for="(filter, index) in arrayFilter"
24
+ :key="index"
25
+ :index="index"
26
+ :rubriquage-display="getRubriquage(index)"
27
+ :rubrique-id-selected="filter.rubriqueId"
28
+ :rubriquage-id-selected="filter.rubriquageId"
29
+ @updateRubrique="updateRubrique"
30
+ @updateRubriquage="updateRubriquage"
31
+ @deleteRubriqueChoice="deleteRubriqueChoice(index)"
32
+ />
33
+ <button
34
+ v-if="availableRubriquage.length"
35
+ class="btn mt-2"
36
+ @click="addFilter"
37
+ >
38
+ {{ $t('Add a sort criterion by topic') }}
39
+ </button>
40
+ </div>
41
+ </div>
42
+ </template>
43
+
44
+ <script lang="ts">
45
+ const octopusApi = require('@saooti/octopus-api');
46
+ import { Rubriquage } from '@/store/class/rubriquage';
47
+ import { RubriquageFilter } from '@/store/class/rubriquageFilter';
48
+ import { defineComponent, defineAsyncComponent } from 'vue';
49
+ const RubriqueChoice = defineAsyncComponent(() => import('./RubriqueChoice.vue'));
50
+ export default defineComponent({
51
+ components: {
52
+ RubriqueChoice,
53
+ },
54
+ props: {
55
+ organisationId: { default: undefined, type: String},
56
+ resetRubriquage: { default: false, type: Boolean},
57
+ },
58
+ emits: ['updateRubriquageFilter'],
59
+
60
+ data() {
61
+ return {
62
+ isRubriquage: false as boolean,
63
+ rubriquageId: [] as Array<number>,
64
+ rubriqueId: [] as Array<number>,
65
+ arrayFilter: [] as Array<RubriquageFilter>,
66
+ rubriquageData: [] as Array<Rubriquage>,
67
+ reset: false as boolean,
68
+ saveOrganisation: "" as string,
69
+ isInit: true as boolean,
70
+ isInternChanged: false as boolean,
71
+ };
72
+ },
73
+
74
+ computed: {
75
+ filterOrga(): string {
76
+ return this.$store.state.filter.organisationId;
77
+ },
78
+ organisation(): string|undefined {
79
+ if (this.organisationId) return this.organisationId;
80
+ if (this.filterOrga) return this.filterOrga;
81
+ return undefined;
82
+ },
83
+ rubriqueFilter(): Array<RubriquageFilter>{
84
+ return this.$store.state.filter.rubriqueFilter;
85
+ },
86
+ availableRubriquage(): Array<Rubriquage>{
87
+ if(this.arrayFilter.length){
88
+ const rubriquageIdToNotShow = this.arrayFilter.map(a => a.rubriquageId);
89
+ return this.rubriquageData.filter((element)=>{
90
+ if(element.rubriquageId){
91
+ return !rubriquageIdToNotShow.includes(element.rubriquageId);
92
+ }
93
+ });
94
+ }
95
+ return this.rubriquageData;
96
+ }
97
+ },
98
+ watch: {
99
+ organisation(): void {
100
+ if(this.isRubriquage){
101
+ this.fetchTopics(true);
102
+ }
103
+ },
104
+ isRubriquage(): void {
105
+ if(this.isInternChanged ||this.isInit){
106
+ return;
107
+ }
108
+ this.isInternChanged = true;
109
+ if(this.isRubriquage){
110
+ if(this.saveOrganisation !== this.organisation){
111
+ this.fetchTopics(true);
112
+ }
113
+ this.$emit('updateRubriquageFilter', this.arrayFilter);
114
+ }else{
115
+ this.$emit('updateRubriquageFilter', []);
116
+ }
117
+ this.resetRubriqueFilter();
118
+ this.$nextTick(() => {
119
+ this.isInternChanged = false;
120
+ });
121
+ },
122
+ arrayFilter(): void{
123
+ if(this.isInternChanged ||this.isInit){
124
+ return;
125
+ }
126
+ this.isInternChanged = true;
127
+ this.resetRubriqueFilter();
128
+ if(this.isRubriquage){
129
+ this.$emit('updateRubriquageFilter', this.arrayFilter);
130
+ }
131
+ this.$nextTick(() => {
132
+ this.isInternChanged = false;
133
+ });
134
+ },
135
+ async rubriqueFilter(): Promise<void>{
136
+ if(this.isInternChanged){
137
+ return;
138
+ }
139
+ this.isInternChanged = true;
140
+ if(this.saveOrganisation !== this.filterOrga){
141
+ await this.fetchTopics(false);
142
+ }
143
+ if(this.rubriqueFilter.length){
144
+ this.arrayFilter = Array.from(this.rubriqueFilter);
145
+ this.isRubriquage = true;
146
+ }else if(this.rubriquageData[0].rubriquageId){
147
+ this.arrayFilter = [{rubriquageId: this.rubriquageData[0].rubriquageId, rubriqueId: 0, name:""}];
148
+ this.isRubriquage = false;
149
+ }
150
+ if(this.isRubriquage){
151
+ this.$emit('updateRubriquageFilter', this.arrayFilter);
152
+ }else{
153
+ this.$emit('updateRubriquageFilter', []);
154
+ }
155
+ this.$nextTick(() => {
156
+ this.isInternChanged = false;
157
+ });
158
+ },
159
+ resetRubriquage(): void {
160
+ this.isRubriquage = false;
161
+ },
162
+ },
163
+
164
+ created() {
165
+ if(this.rubriqueFilter.length){
166
+ this.arrayFilter = Array.from(this.rubriqueFilter);
167
+ this.isRubriquage = true;
168
+ }
169
+ this.fetchTopics(false);
170
+ this.$nextTick(() => {
171
+ this.isInit = false;
172
+ });
173
+ },
174
+ methods: {
175
+ deleteRubriqueChoice(index: number): void{
176
+ this.arrayFilter.splice(index,1);
177
+ },
178
+ getRubriquage(index: number){
179
+ const elementToNotShow = Array.from(this.arrayFilter);
180
+ elementToNotShow.splice(index, 1);
181
+ if(elementToNotShow.length){
182
+ const rubriquageIdToNotShow = elementToNotShow.map(a => a.rubriquageId);
183
+ return this.rubriquageData.filter((element)=>{
184
+ if(element.rubriquageId){
185
+ return !rubriquageIdToNotShow.includes(element.rubriquageId);
186
+ }
187
+ });
188
+ }
189
+ return this.rubriquageData;
190
+ },
191
+ addFilter(): void{
192
+ if(this.availableRubriquage[0].rubriquageId){
193
+ this.arrayFilter.push({rubriquageId: this.availableRubriquage[0].rubriquageId, rubriqueId: 0, name:""});
194
+ }
195
+ },
196
+ updateRubrique(newValue: {rubriqueId: number; index: number}): void{
197
+ const item = this.arrayFilter[newValue.index];
198
+ item.rubriqueId = newValue.rubriqueId;
199
+ this.arrayFilter.splice(newValue.index, 1, item);
200
+ },
201
+ updateRubriquage(newValue: {rubriquageId: number; index: number}): void{
202
+ const item = this.arrayFilter[newValue.index];
203
+ item.rubriquageId = newValue.rubriquageId;
204
+ this.arrayFilter.splice(newValue.index, 1, item);
205
+ },
206
+ async fetchTopics(initArrayFilter: boolean): Promise<void> {
207
+ if(initArrayFilter){
208
+ this.arrayFilter.length = 0;
209
+ }
210
+ if (!this.organisation) return;
211
+ const data = await octopusApi.fetchTopics(this.organisation);
212
+ this.rubriquageData = data.filter((element: Rubriquage)=>{
213
+ return element.rubriques.length;
214
+ });
215
+ this.saveOrganisation = this.organisation;
216
+ if (0 === this.rubriquageData.length) return;
217
+ if(initArrayFilter && this.rubriquageData[0].rubriquageId){
218
+ this.arrayFilter.push({rubriquageId: this.rubriquageData[0].rubriquageId, rubriqueId: 0, name:""});
219
+ }
220
+ },
221
+ resetRubriqueFilter(): void{
222
+ if(0===this.rubriqueFilter.length || this.isInit){
223
+ return;
224
+ }
225
+ const queries = this.$route.query;
226
+ if (queries.rubriquesId) {
227
+ this.$router.push({ query: {...queries, ...{rubriquesId: undefined} } });
228
+ }
229
+ this.$store.commit('filterRubrique', []);
230
+ }
231
+ },
232
+ })
233
+ </script>
234
+
235
+ <style lang="scss"></style>
@@ -1,7 +1,10 @@
1
1
  <template>
2
2
  <div class="d-flex flex-column align-items-center text-danger">
3
3
  <h3>{{ $t('This live will start') }}</h3>
4
- <h3 ref="countdown" v-if="countdownTimer">
4
+ <h3
5
+ v-if="countdownTimer"
6
+ ref="countdown"
7
+ >
5
8
  {{
6
9
  $t('In days hours minutes seconds', {
7
10
  days: pad(days),
@@ -11,48 +14,44 @@
11
14
  })
12
15
  }}
13
16
  </h3>
14
- <h3 v-else>{{ $t('In a moment') }}</h3>
17
+ <h3 v-else>
18
+ {{ $t('In a moment') }}
19
+ </h3>
15
20
  </div>
16
21
  </template>
17
- <style lang="scss"></style>
22
+
18
23
  <script lang="ts">
19
24
  import { defineComponent } from 'vue'
20
25
  export default defineComponent({
21
- components: {},
22
-
23
- mounted() {
24
- if (!this.timeRemaining || this.timeRemaining <= 0) return;
25
-
26
- this.seconds = this.timeRemaining;
27
- this.countdownTimer = setInterval(() => {
28
- this.timer();
29
- }, 1000);
26
+ props: {
27
+ timeRemaining: { default: undefined, type: Number},
30
28
  },
31
-
32
- props: ['timeRemaining'],
33
-
34
29
  data() {
35
30
  return {
36
- seconds: undefined as any,
31
+ seconds: 0 as number,
37
32
  countdownTimer: undefined as any,
38
- days: 0,
39
- hours: 0,
40
- minutes: 0,
41
- remainingSeconds: 0,
33
+ days: 0 as number,
34
+ hours: 0 as number,
35
+ minutes: 0 as number,
36
+ remainingSeconds: 0 as number,
42
37
  };
43
38
  },
44
-
45
39
  computed: {},
46
-
40
+ mounted() {
41
+ if (!this.timeRemaining || this.timeRemaining <= 0) return;
42
+ this.seconds = this.timeRemaining;
43
+ this.countdownTimer = setInterval(() => {
44
+ this.timer();
45
+ }, 1000);
46
+ },
47
47
  methods: {
48
- timer() {
48
+ timer(): void {
49
49
  this.days = Math.floor(this.seconds / 24 / 60 / 60);
50
- var hoursLeft = Math.floor(this.seconds - this.days * 86400);
50
+ const hoursLeft = Math.floor(this.seconds - this.days * 86400);
51
51
  this.hours = Math.floor(hoursLeft / 3600);
52
- var minutesLeft = Math.floor(hoursLeft - this.hours * 3600);
52
+ const minutesLeft = Math.floor(hoursLeft - this.hours * 3600);
53
53
  this.minutes = Math.floor(minutesLeft / 60);
54
54
  this.remainingSeconds = this.seconds % 60;
55
-
56
55
  /* this.$refs.countdown.innerHTML = this.pad(days) + ":" + this.pad(hours) + ":" + this.pad(minutes) + ":" + this.pad(remainingSeconds); */
57
56
  if (0 === this.seconds) {
58
57
  clearInterval(this.countdownTimer);
@@ -61,9 +60,11 @@ export default defineComponent({
61
60
  this.seconds--;
62
61
  }
63
62
  },
64
- pad(n: string|number) {
65
- return n < 10 ? '0' + n : n;
63
+ pad(n: number): string {
64
+ return n < 10 ? '0' + n : n.toString();
66
65
  },
67
66
  },
68
- });
67
+ })
69
68
  </script>
69
+
70
+ <style lang="scss"></style>
@@ -1,81 +1,87 @@
1
1
  <template>
2
- <div class="d-flex flex-column" v-if="notEmpty">
3
- <h2 class="mb-4 mt-3">{{ $t('All live emission button') }}</h2>
2
+ <div
3
+ v-if="notEmpty"
4
+ class="d-flex flex-column"
5
+ >
6
+ <h2 class="mb-4 mt-3">
7
+ {{ $t('All live emission button') }}
8
+ </h2>
4
9
  <ul class="podcast-list">
5
10
  <PodcastItem
6
- v-bind:podcast="l"
7
11
  v-for="l in lives"
8
- v-bind:key="l.podcastId"
12
+ :key="l.podcastId"
13
+ :podcast="l"
9
14
  />
10
15
  </ul>
11
16
  <button
17
+ v-show="!allFetched"
12
18
  class="btn"
13
19
  :class="buttonPlus ? 'btn-linkPlus mt-3' : 'btn-more'"
14
- @click="displayMore"
15
- v-show="!allFetched"
16
20
  :disabled="inFetching"
17
21
  :aria-label="$t('See more')"
22
+ @click="displayMore"
18
23
  >
19
- <template v-if="buttonPlus">{{ $t('See more') }}</template>
20
- <div class="saooti-plus"></div>
24
+ <template v-if="buttonPlus">
25
+ {{ $t('See more') }}
26
+ </template>
27
+ <div class="saooti-plus" />
21
28
  </button>
22
29
  </div>
23
30
  </template>
24
31
 
25
- <style lang="scss"></style>
26
-
27
32
  <script lang="ts">
28
33
  const octopusApi = require('@saooti/octopus-api');
29
34
  import PodcastItem from '../podcasts/PodcastItem.vue';
30
35
  import { state } from '../../../store/paramStore';
31
36
 
37
+ import { Podcast } from '@/store/class/podcast';
32
38
  import { defineComponent } from 'vue'
33
39
  export default defineComponent({
34
40
  name: 'LiveHorizontalList',
35
41
 
36
- props: {
37
- first: { default: 0 },
38
- size: { default: 12 },
39
- emissionId: { default: undefined as any },
40
- },
41
-
42
42
  components: {
43
43
  PodcastItem,
44
44
  },
45
45
 
46
- created() {
47
- this.fetchContent(true);
46
+ props: {
47
+ first: { default: 0, type: Number },
48
+ size: { default: 12, type: Number },
49
+ emissionId: { default: undefined, type: Number},
48
50
  },
49
51
 
50
52
  data() {
51
53
  return {
52
- dfirst: this.$props.first,
53
- dsize: this.$props.size,
54
- totalCount: 0,
55
- lives: [] as any,
56
- notEmpty: false,
57
- inFetching: false,
54
+ dfirst: this.first as number,
55
+ dsize: this.size as number,
56
+ totalCount: 0 as number,
57
+ lives: [] as Array<Podcast>,
58
+ notEmpty: false as boolean,
59
+ inFetching: false as boolean,
58
60
  };
59
61
  },
60
62
 
63
+
61
64
  computed: {
62
- allFetched():boolean {
65
+ allFetched(): boolean {
63
66
  return this.dfirst >= this.totalCount;
64
67
  },
65
- buttonPlus() {
68
+ buttonPlus(): boolean {
66
69
  return state.generalParameters.buttonPlus;
67
70
  },
68
71
  },
69
72
 
73
+ created() {
74
+ this.fetchContent(true);
75
+ },
70
76
  methods: {
71
- async fetchContent(reset: boolean) {
77
+ async fetchContent(reset: boolean): Promise<void> {
72
78
  this.inFetching = true;
73
79
  if (reset) {
74
80
  this.lives.length = 0;
75
81
  this.dfirst = 0;
76
82
  this.notEmpty = false;
77
83
  }
78
- let param = {
84
+ const param = {
79
85
  first: this.dfirst,
80
86
  size: this.dsize,
81
87
  emissionId: this.emissionId,
@@ -84,13 +90,12 @@ export default defineComponent({
84
90
  const data = await octopusApi.fetchLives(param);
85
91
  this.afterFetching(reset, data);
86
92
  },
87
-
88
- afterFetching(reset: any, data: { result: any; count: number; }) {
93
+ afterFetching(reset: boolean, data: any): void {
89
94
  if (reset) {
90
95
  this.lives.length = 0;
91
96
  this.dfirst = 0;
92
97
  }
93
- this.lives = this.lives.concat(data.result).filter((l: null) => {
98
+ this.lives = this.lives.concat(data.result).filter((l: Podcast | null) => {
94
99
  return null !== l;
95
100
  });
96
101
  this.dfirst += this.dsize;
@@ -100,11 +105,12 @@ export default defineComponent({
100
105
  }
101
106
  this.inFetching = false;
102
107
  },
103
-
104
- displayMore(event: { preventDefault: () => void; }) {
108
+ displayMore(event: { preventDefault: () => void }): void {
105
109
  event.preventDefault();
106
110
  this.fetchContent(false);
107
111
  },
108
112
  },
109
- });
113
+ })
110
114
  </script>
115
+
116
+ <style lang="scss"></style>