@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
@@ -1,143 +1,86 @@
1
1
  <template>
2
2
  <div
3
- class="d-flex flex-column p-3 list-episode"
4
3
  v-if="loading || (!loading && 0 !== allPodcasts.length)"
4
+ class="d-flex flex-column p-3 list-episode"
5
5
  >
6
6
  <h2>{{ title }}</h2>
7
7
  <div class="d-flex justify-content-between">
8
- <div class="d-flex" v-if="undefined === requirePopularSort">
8
+ <div class="d-flex">
9
9
  <button
10
10
  class="btn btn-underline"
11
- @click="sortPopular()"
12
11
  :class="{ active: popularSort }"
12
+ @click="sortPopular()"
13
13
  >
14
14
  {{ $t('Most popular') }}
15
15
  </button>
16
16
  <button
17
17
  class="btn btn-underline"
18
- @click="sortChrono()"
19
18
  :class="{ active: !popularSort }"
19
+ @click="sortChrono()"
20
20
  >
21
21
  {{ $t('Last added') }}
22
22
  </button>
23
23
  </div>
24
- <div v-else></div>
25
- <div class="hide-phone" v-if="!isArrow">
24
+ <div
25
+ v-if="!isArrow"
26
+ class="hide-phone"
27
+ >
26
28
  <button
27
29
  class="btn btn-arrow"
28
- @click="displayPrevious()"
29
30
  :class="{ disabled: !previousAvailable }"
30
31
  :aria-label="$t('Display previous')"
32
+ @click="displayPrevious()"
31
33
  >
32
- <div class="saooti-arrow-left2"></div>
34
+ <div class="saooti-arrow-left2" />
33
35
  </button>
34
36
  <button
35
37
  class="btn btn-arrow"
36
- @click="displayNext()"
37
38
  :class="{ disabled: !nextAvailable }"
38
39
  :aria-label="$t('Display next')"
40
+ @click="displayNext()"
39
41
  >
40
- <div class="saooti-arrow-right2"></div>
42
+ <div class="saooti-arrow-right2" />
41
43
  </button>
42
44
  </div>
43
45
  </div>
44
- <div class="d-flex justify-content-center" v-if="loading">
45
- <div class="spinner-border mr-3"></div>
46
- <h3 class="mt-2">{{ $t('Loading podcasts ...') }}</h3>
46
+ <div
47
+ v-if="loading"
48
+ class="d-flex justify-content-center"
49
+ >
50
+ <div class="spinner-border me-3" />
51
+ <h3 class="mt-2">
52
+ {{ $t('Loading podcasts ...') }}
53
+ </h3>
47
54
  </div>
48
55
  <transition-group
56
+ v-show="loaded"
49
57
  :name="transitionName"
50
58
  class="podcast-list-inline"
51
59
  tag="ul"
52
- v-show="loaded"
53
60
  :class="[alignLeft ? 'justify-content-start' : '']"
54
61
  >
55
62
  <PodcastItem
56
- class="flex-shrink item-phone-margin"
57
- v-bind:podcast="p"
58
63
  v-for="p in podcasts"
59
- v-bind:key="p.podcastId"
60
- :class="[alignLeft ? 'mr-3' : '']"
64
+ :key="p.podcastId"
65
+ class="flex-shrink item-phone-margin"
66
+ :podcast="p"
67
+ :class="[alignLeft ? 'me-3' : '']"
61
68
  />
62
69
  </transition-group>
63
70
  <router-link
64
71
  class="btn btn-link"
65
72
  :class="buttonPlus ? 'btn-linkPlus' : ''"
66
73
  :to="refTo"
67
- >{{ buttonText }}
68
- <div class="saooti-plus" v-if="buttonPlus"></div
69
- ></router-link>
74
+ >
75
+ {{ buttonText }}
76
+ <div
77
+ v-if="buttonPlus"
78
+ class="saooti-plus"
79
+ />
80
+ </router-link>
70
81
  </div>
71
82
  </template>
72
83
 
73
- <style lang="scss">
74
- .list-episode {
75
- padding: 2rem 0rem 1rem !important;
76
- @media (max-width: 450px) {
77
- padding: 0.5rem 0rem 1rem !important;
78
- }
79
- h2 {
80
- margin-bottom: 1rem;
81
- }
82
- }
83
-
84
- .podcast-list-inline {
85
- align-self: stretch;
86
- flex-grow: 1;
87
- margin: 0;
88
- padding: 0;
89
- display: flex;
90
- flex-wrap: nowrap;
91
- justify-content: space-between;
92
- display: grid;
93
- grid-auto-flow: column;
94
- grid-gap: 1rem;
95
- grid-row: 1;
96
- }
97
- .out-left-enter-active,
98
- .out-left-leave-active,
99
- .out-right-enter-active,
100
- .out-right-leave-active {
101
- transition: all 0.3s ease;
102
- }
103
-
104
- .out-left-leave-to,
105
- .out-right-enter {
106
- transform: translateX(-110%);
107
- opacity: 0;
108
- }
109
-
110
- .out-left-enter,
111
- .out-right-leave-to {
112
- transform: translateX(110%);
113
- opacity: 0;
114
- }
115
-
116
- .out-left-leave-to,
117
- .out-right-leave-to {
118
- position: absolute;
119
- }
120
- .out-right-leave-to {
121
- right: 5rem;
122
- z-index: -1;
123
- }
124
- /** PHONES*/
125
- @media (max-width: 960px) {
126
- .podcast-list-inline {
127
- display: flex;
128
- flex-wrap: nowrap;
129
- overflow-y: scroll;
130
- -webkit-overflow-scrolling: touch;
131
- scroll-behavior: smooth;
132
- padding-bottom: 1rem;
133
- width: 100%;
134
- .item-phone-margin {
135
- margin: 0 0.5rem !important;
136
- }
137
- }
138
- }
139
- </style>
140
-
141
84
  <script lang="ts">
142
85
  const octopusApi = require('@saooti/octopus-api');
143
86
  import domHelper from '../../../helper/dom';
@@ -145,95 +88,136 @@ import PodcastItem from './PodcastItem.vue';
145
88
 
146
89
  const PHONE_WIDTH = 960;
147
90
 
91
+ import { Podcast } from '@/store/class/podcast';
92
+ import { RubriquageFilter } from '@/store/class/rubriquageFilter';
148
93
  import { defineComponent } from 'vue'
149
94
  export default defineComponent({
150
95
  name: 'PodcastInlineList',
151
-
152
- props: [
153
- 'organisationId',
154
- 'emissionId',
155
- 'iabId',
156
- 'title',
157
- 'href',
158
- 'buttonText',
159
- 'requirePopularSort',
160
- 'isArrow',
161
- 'buttonPlus',
162
- 'rubriqueId',
163
- 'rubriquageId',
164
- ],
165
- emits: ['update:isArrow'],
166
-
96
+
167
97
  components: {
168
- PodcastItem,
98
+ PodcastItem
169
99
  },
170
100
 
171
- created() {
172
- if (undefined !== this.requirePopularSort) {
173
- this.popularSort = this.requirePopularSort;
174
- }
175
- if (undefined !== this.isArrow) {
176
- this.$emit('update:isArrow', true)
177
- }
178
- window.addEventListener('resize', this.handleResize);
179
- },
180
-
181
- unmounted() {
182
- window.removeEventListener('resize', this.handleResize);
183
- },
184
-
185
- mounted() {
186
- this.handleResize();
187
- this.fetchNext();
101
+ props: {
102
+ organisationId: { default: undefined, type: String},
103
+ emissionId: { default: undefined, type: Number},
104
+ iabId: { default: undefined, type: Number},
105
+ title: { default: '', type: String},
106
+ href: { default: undefined, type: String},
107
+ buttonText: { default: undefined, type: String},
108
+ isArrow: { default: false, type: Boolean},
109
+ requirePopularSort: { default:undefined, type: Boolean},
110
+ buttonPlus: { default:false, type: Boolean},
111
+ rubriqueId: { default: () => [], type: Array as ()=> Array<number> },
112
+ rubriquageId:{ default: () => [], type: Array as ()=> Array<number> },
188
113
  },
114
+ emits: ['update:isArrow'],
189
115
 
190
116
  data() {
191
117
  return {
192
- loading: true,
193
- loaded: true,
194
- index: 0,
195
- first: 0,
196
- size: 5,
197
- totalCount: 0,
198
- popularSort: true,
199
- allPodcasts: [] as any,
200
- direction: 1,
201
- alignLeft: false,
118
+ loading: true as boolean,
119
+ loaded: true as boolean,
120
+ index: 0 as number,
121
+ first: 0 as number,
122
+ size: 5 as number,
123
+ totalCount: 0 as number,
124
+ popularSort: true as boolean,
125
+ allPodcasts: [] as Array<Podcast>,
126
+ direction: 1 as number,
127
+ alignLeft: false as boolean,
202
128
  };
203
129
  },
204
-
205
130
  computed: {
206
- podcasts():any {
131
+ podcasts(): Array<Podcast> {
207
132
  return this.allPodcasts.slice(this.index, this.index + this.size);
208
133
  },
209
- filterOrga():any {
134
+ filterOrga(): string {
210
135
  return this.$store.state.filter.organisationId;
211
136
  },
212
- organisation():any {
137
+ organisation(): string|undefined {
213
138
  if (this.organisationId) return this.organisationId;
214
139
  if (this.filterOrga) return this.filterOrga;
215
140
  return undefined;
216
141
  },
217
- refTo():any {
142
+ rubriqueQueryParam(): string|undefined{
143
+ if(this.$store.state.filter && this.$store.state.filter.rubriqueFilter && this.$store.state.filter.rubriqueFilter.length){
144
+ return this.$store.state.filter.rubriqueFilter.map((value: RubriquageFilter) => value.rubriquageId+':'+value.rubriqueId).join();
145
+ }
146
+ return undefined;
147
+ },
148
+ refTo(): any {
218
149
  if (this.href) return this.href;
150
+ if(this.iabId){
151
+ return {
152
+ name: 'category',
153
+ params: { iabId: this.iabId },
154
+ query: { productor: this.$store.state.filter.organisationId },
155
+ };
156
+ }
219
157
  return {
220
- name: 'category',
221
- params: { iabId: this.iabId },
222
- query: { productor: this.$store.state.filter.organisationId },
223
- };
158
+ name: 'podcasts',
159
+ query: { productor: this.$store.state.filter.organisationId,
160
+ iabId: this.$store.state.filter.iab ? this.$store.state.filter.iab.id : undefined,
161
+ rubriquesId: this.rubriqueQueryParam},
162
+ };
224
163
  },
225
- previousAvailable():boolean {
164
+ previousAvailable(): boolean {
226
165
  return this.index > 0;
227
166
  },
228
- nextAvailable():boolean {
167
+ nextAvailable(): boolean {
229
168
  return this.index + this.size < this.totalCount;
230
169
  },
231
- transitionName: ({ direction }:any) =>
232
- direction > 0 ? 'out-left' : 'out-right',
170
+ transitionName(): string {
171
+ return this.direction > 0 ? 'out-left' : 'out-right';
172
+ }
173
+ },
174
+ watch: {
175
+ emissionId(): void {
176
+ this.reset();
177
+ this.fetchNext();
178
+ },
179
+ organisationId(): void {
180
+ this.reset();
181
+ this.fetchNext();
182
+ },
183
+ filterOrga(): void {
184
+ this.reset();
185
+ this.fetchNext();
186
+ },
187
+ iabId(): void {
188
+ this.reset();
189
+ this.fetchNext();
190
+ },
191
+ rubriqueId(): void {
192
+ this.reset();
193
+ this.fetchNext();
194
+ },
195
+ rubriquageId(): void {
196
+ this.reset();
197
+ this.fetchNext();
198
+ },
199
+ },
200
+
201
+ created() {
202
+ if (undefined !== this.requirePopularSort) {
203
+ this.popularSort = this.requirePopularSort;
204
+ }
205
+ if (undefined !== this.isArrow) {
206
+ this.$emit('update:isArrow', true);
207
+ }
208
+ window.addEventListener('resize', this.handleResize);
233
209
  },
234
210
 
211
+ unmounted() {
212
+ window.removeEventListener('resize', this.handleResize);
213
+ },
214
+
215
+ mounted() {
216
+ this.handleResize();
217
+ this.fetchNext();
218
+ },
235
219
  methods: {
236
- async fetchNext() {
220
+ async fetchNext(): Promise<void> {
237
221
  const data = await octopusApi.fetchPodcasts({
238
222
  first: this.first,
239
223
  size: this.size + 1,
@@ -248,11 +232,11 @@ export default defineComponent({
248
232
  this.loaded = true;
249
233
  this.totalCount = data.count;
250
234
  if (this.allPodcasts.length + data.result.length < this.totalCount) {
251
- let nexEl = data.result.pop();
235
+ const nexEl = data.result.pop();
252
236
  this.preloadImage(nexEl.imageUrl);
253
237
  }
254
238
  this.allPodcasts = this.allPodcasts.concat(
255
- data.result.filter((pod:any) => null !== pod)
239
+ data.result.filter((pod: Podcast|null) => null !== pod)
256
240
  );
257
241
  if (this.allPodcasts.length <= 3) {
258
242
  this.alignLeft = true;
@@ -261,15 +245,13 @@ export default defineComponent({
261
245
  }
262
246
  this.first += this.size;
263
247
  },
264
-
265
- displayPrevious() {
248
+ displayPrevious(): void {
266
249
  this.direction = -1;
267
250
  if (this.previousAvailable) {
268
251
  this.index -= 1;
269
252
  }
270
253
  },
271
-
272
- displayNext() {
254
+ displayNext(): void {
273
255
  this.direction = 1;
274
256
  if (!this.nextAvailable) return;
275
257
  if (
@@ -280,35 +262,29 @@ export default defineComponent({
280
262
  }
281
263
  this.index += 1;
282
264
  },
283
-
284
- handleResize() {
265
+ handleResize(): void {
285
266
  if (!this.$el) return;
286
267
  if (window.innerWidth <= PHONE_WIDTH) {
287
268
  this.size = 10;
288
269
  return;
289
270
  }
290
- const width = this.$el.offsetWidth;
271
+ const width = (this.$el as HTMLElement).offsetWidth;
291
272
  const sixteen = domHelper.convertRemToPixels(13.7);
292
273
  this.size = Math.floor(width / sixteen);
293
274
  },
294
-
295
- sortPopular() {
275
+ sortPopular(): void {
296
276
  if (this.popularSort) return;
297
-
298
277
  this.popularSort = true;
299
278
  this.reset();
300
279
  this.fetchNext();
301
280
  },
302
-
303
- sortChrono() {
281
+ sortChrono(): void {
304
282
  if (!this.popularSort) return;
305
-
306
283
  this.popularSort = false;
307
284
  this.reset();
308
285
  this.fetchNext();
309
286
  },
310
-
311
- reset() {
287
+ reset(): void {
312
288
  this.loading = true;
313
289
  this.loaded = true;
314
290
  this.index = 0;
@@ -316,50 +292,12 @@ export default defineComponent({
316
292
  this.totalCount = 0;
317
293
  this.allPodcasts.length = 0;
318
294
  },
319
-
320
- preloadImage(url:string) {
321
- let img = new Image();
295
+ preloadImage(url: string): void {
296
+ const img = new Image();
322
297
  img.src = url;
323
298
  },
324
299
  },
325
-
326
- watch: {
327
- emissionId: {
328
- handler() {
329
- this.reset();
330
- this.fetchNext();
331
- },
332
- },
333
- organisationId: {
334
- handler() {
335
- this.reset();
336
- this.fetchNext();
337
- },
338
- },
339
- filterOrga: {
340
- handler() {
341
- this.reset();
342
- this.fetchNext();
343
- },
344
- },
345
- iabId: {
346
- handler() {
347
- this.reset();
348
- this.fetchNext();
349
- },
350
- },
351
- rubriqueId: {
352
- handler() {
353
- this.reset();
354
- this.fetchNext();
355
- },
356
- },
357
- rubriquageId: {
358
- handler() {
359
- this.reset();
360
- this.fetchNext();
361
- },
362
- },
363
- },
364
- });
300
+ })
365
301
  </script>
302
+
303
+ <style lang="scss"></style>