@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,75 +1,295 @@
1
1
  <template>
2
2
  <div
3
- class="img-box d-flex flex-column justify-content-start align-items-start position-relative justify rounded-lg flex-shrink float-left"
4
- :style="{ 'background-image': 'url(\'' + podcast.imageUrl + '\')' }"
5
3
  v-if="podcast"
4
+ class="img-box d-flex flex-column justify-content-start align-items-start position-relative justify rounded-lg flex-shrink float-start"
5
+ :style="{ 'background-image': 'url(\'' + podcast.imageUrl + '\')' }"
6
6
  >
7
+ <template v-if="isPodcastmaker">
8
+ <div
9
+ v-if="mainRubrique"
10
+ class="mainRubrique"
11
+ />
12
+ <div
13
+ v-else
14
+ class="notMainRubrique"
15
+ />
16
+ </template>
7
17
  <div
18
+ v-if="fetchConference"
8
19
  class="live-image-status"
9
20
  :class="
10
21
  fetchConference && 'null' !== fetchConference
11
22
  ? fetchConference.status.toLowerCase() + '-bg'
12
23
  : ''
13
24
  "
14
- v-if="fetchConference"
15
25
  >
16
26
  {{ statusText }}
17
27
  </div>
18
- <div class="live-image-status recording-bg" v-if="isRecordedInLive">
19
- {{ 'Enregistré en live' }}
28
+ <div
29
+ v-if="isRecordedInLive"
30
+ class="live-image-status recording-bg"
31
+ >
32
+ {{ $t('Recorded in live') }}
20
33
  </div>
21
34
  <div
22
- class="podcast-image-play-button"
23
- v-on:click="play"
24
35
  v-if="hidePlay || recordingLive"
36
+ class="podcast-image-play-button"
25
37
  :class="classicPodcastPlay ? '' : 'transparent-background'"
38
+ @click="play"
26
39
  >
27
- <div class="icon-container" v-if="!isLiveToBeRecorded">
40
+ <div
41
+ v-if="!isLiveToBeRecorded"
42
+ class="icon-container"
43
+ >
28
44
  <div
45
+ v-show="!playingPodcast"
29
46
  :aria-label="$t('Play')"
30
47
  class="saooti-play2-bounty primary-color"
31
- v-show="!playingPodcast"
32
- ></div>
48
+ />
33
49
  <div
50
+ v-if="!classicPodcastPlay"
34
51
  class="special-icon-play-button"
35
52
  :class="iconName"
36
- v-if="!classicPodcastPlay"
37
- ></div>
38
- <div class="bloc-paddle" v-show="playingPodcast">
39
- <span class="paddle1 primary-color"></span>
40
- <span class="paddle2 primary-color"></span>
41
- <span class="paddle3 primary-color"></span>
53
+ />
54
+ <div
55
+ v-show="playingPodcast"
56
+ class="bloc-paddle"
57
+ >
58
+ <span class="paddle1 primary-color" />
59
+ <span class="paddle2 primary-color" />
60
+ <span class="paddle3 primary-color" />
42
61
  </div>
43
62
  </div>
44
- <div class="icon-container error-icon" v-else>
63
+ <div
64
+ v-else
65
+ class="icon-container error-icon"
66
+ >
45
67
  <div
46
68
  :aria-label="textVisible"
47
69
  class="big-icon-error"
48
70
  :class="iconName"
49
- ></div>
71
+ />
50
72
  </div>
51
73
  <div
52
- class="small-Text mt-3 font-weight-bolder"
53
74
  v-if="!classicPodcastPlay"
75
+ class="small-Text mt-3 fw-bolder"
54
76
  >
55
77
  {{ textVisible }}
56
78
  </div>
57
79
  </div>
58
80
  <div
81
+ v-if="!isDescription && displayDescription && isMobile"
59
82
  class="background-icon saooti-arrow-up2"
60
83
  :aria-label="$t('Show description')"
61
- v-if="!isDescription && displayDescription && isMobile"
62
84
  @click="showDescription"
63
- ></div>
85
+ />
64
86
  <div
87
+ v-if="isDescription && displayDescription && isMobile"
65
88
  class="background-icon saooti-arrow-down2"
66
89
  :aria-label="$t('Hide description')"
67
- v-if="isDescription && displayDescription && isMobile"
68
90
  @click="showDescription"
69
- ></div>
91
+ />
70
92
  </div>
71
93
  </template>
72
94
 
95
+ <script lang="ts">
96
+ import { mapState } from 'vuex';
97
+ import { state } from '../../../store/paramStore';
98
+ import {StoreState} from '@/store/typeAppStore';
99
+ import { Podcast } from '@/store/class/podcast';
100
+ import { Conference } from '@/store/class/conference';
101
+ import { defineComponent } from 'vue'
102
+ export default defineComponent({
103
+ name: 'PodcastImage',
104
+ props: {
105
+ podcast: { default: ()=>({}), type: Object as ()=>Podcast},
106
+ hidePlay: { default: false, type: Boolean},
107
+ displayDescription: { default: undefined, type: String},
108
+ arrowDirection: { default: 'up', type: String},
109
+ isAnimatorLive: { default: false, type: Boolean},
110
+ fetchConference: { default: undefined, type: Object as ()=>Conference},
111
+ },
112
+ emits: ['hideDescription', 'showDescription'],
113
+ data() {
114
+ return {
115
+ isDescription: false as boolean,
116
+ };
117
+ },
118
+ computed: {
119
+ ...mapState({
120
+ playingPodcast(state: StoreState) {
121
+ return (
122
+ (state.player.podcast &&
123
+ state.player.podcast.podcastId === this.podcast.podcastId) ||
124
+ (this.fetchConference &&
125
+ 'null' !== this.fetchConference &&
126
+ state.player.live &&
127
+ state.player.live.conferenceId ===
128
+ this.fetchConference.conferenceId)
129
+ );
130
+ },
131
+ }),
132
+ mainRubrique(): boolean{
133
+ if(this.podcast && this.podcast.rubriqueIds && this.podcast.rubriqueIds.includes(state.podcastPage.mainRubrique)){
134
+ return true;
135
+ }else{
136
+ return false;
137
+ }
138
+ },
139
+ isPodcastmaker(): boolean {
140
+ return state.generalParameters.podcastmaker;
141
+ },
142
+ isMobile(): boolean {
143
+ return window.matchMedia('(hover: none)').matches;
144
+ },
145
+ isRecordedInLive(): boolean {
146
+ return (
147
+ undefined === this.fetchConference &&
148
+ undefined !== this.podcast.conferenceId &&
149
+ 'READY_TO_RECORD' !== this.podcast.processingStatus
150
+ );
151
+ },
152
+ isLiveToBeRecorded(): boolean {
153
+ return (
154
+ undefined === this.fetchConference &&
155
+ undefined !== this.podcast.conferenceId &&
156
+ 'READY_TO_RECORD' === this.podcast.processingStatus
157
+ );
158
+ },
159
+ classicPodcastPlay(): boolean {
160
+ return (
161
+ undefined!==this.podcast &&
162
+ false !== this.podcast.valid &&
163
+ ('READY_TO_RECORD' === this.podcast.processingStatus ||
164
+ 'READY' === this.podcast.processingStatus) &&
165
+ !this.isLiveToBeRecorded && undefined!==this.podcast.availability.visibility
166
+ && this.podcast.availability.visibility
167
+ );
168
+ },
169
+ iconName(): string {
170
+ if (this.isLiveToBeRecorded) return 'saooti-clock';
171
+ if ('READY' === this.podcast.processingStatus || this.fetchConference) {
172
+ if (false == this.podcast.valid) return 'saooti-checkmark';
173
+ if (
174
+ !this.podcast.availability.visibility &&
175
+ this.podcast.availability.date
176
+ )
177
+ return 'saooti-clock';
178
+ return 'saooti-eye-blocked';
179
+ }
180
+ if (
181
+ 'PLANNED' === this.podcast.processingStatus ||
182
+ 'PROCESSING' === this.podcast.processingStatus
183
+ )
184
+ return 'saooti-hourglass';
185
+ if ('CANCELED' === this.podcast.processingStatus)
186
+ return 'saooti-cancel-circle';
187
+ return 'saooti-warning';
188
+ },
189
+ textVisible(): string {
190
+ if (this.isLiveToBeRecorded)
191
+ return this.$t('Podcast linked to waiting live').toString();
192
+ if ('READY' === this.podcast.processingStatus || this.fetchConference) {
193
+ if (false == this.podcast.valid) return this.$t('Podcast to validate').toString();
194
+ if (
195
+ !this.podcast.availability.visibility &&
196
+ this.podcast.availability.date
197
+ )
198
+ return this.$t('Podcast publish in future').toString();
199
+ return this.$t('Podcast no visible').toString();
200
+ }
201
+ if (
202
+ 'PLANNED' === this.podcast.processingStatus ||
203
+ 'PROCESSING' === this.podcast.processingStatus
204
+ )
205
+ return this.$t('Podcast in process').toString();
206
+ if ('CANCELED' === this.podcast.processingStatus)
207
+ return this.$t('Podcast in cancelled status').toString();
208
+ return this.$t('Podcast in error').toString();
209
+ },
210
+ statusText(): string {
211
+ if (!this.fetchConference) return '';
212
+ switch (this.fetchConference.status) {
213
+ case 'PLANNED':
214
+ return this.$t('live in few time').toString();
215
+ case 'PENDING':
216
+ if (this.isAnimatorLive) return this.$t('Open studio').toString();
217
+ return this.$t('live upcoming').toString();
218
+ case 'RECORDING':
219
+ return this.$t('In live').toString();
220
+ case 'DEBRIEFING':
221
+ if (!this.isAnimatorLive) return '';
222
+ if ('READY_TO_RECORD' === this.podcast.processingStatus)
223
+ return this.$t('Not recording').toString();
224
+ return this.$t('Debriefing').toString();
225
+ case 'ERROR':
226
+ return this.$t('In error').toString();
227
+ case 'PUBLISHING':
228
+ return this.$t('Publishing').toString();
229
+ default:
230
+ return '';
231
+ }
232
+ },
233
+ recordingLive(): boolean {
234
+ return (
235
+ undefined !== this.fetchConference &&
236
+ -1 !== this.fetchConference.conferenceId &&
237
+ ('RECORDING' === this.fetchConference.status ||
238
+ 'PENDING' === this.fetchConference.status)
239
+ );
240
+ },
241
+ },
242
+ watch: {
243
+ arrowDirection(): void {
244
+ if ('up' === this.arrowDirection) {
245
+ this.isDescription = true;
246
+ this.showDescription();
247
+ } else {
248
+ this.isDescription = false;
249
+ this.showDescription();
250
+ }
251
+ },
252
+ },
253
+
254
+ methods: {
255
+ play(): void {
256
+ if (this.isLiveToBeRecorded) {
257
+ return;
258
+ }
259
+ if(this.playingPodcast){
260
+ if("PLAYING"===this.$store.state.player.status){
261
+ this.$store.commit('playerPause', true);
262
+ }else{
263
+ this.$store.commit('playerPause', false);
264
+ }
265
+ return;
266
+ }
267
+ if (!this.recordingLive) {
268
+ this.$store.commit('playerPlayPodcast', this.podcast);
269
+ return;
270
+ }
271
+ this.$store.commit('playerPlayPodcast', {
272
+ title: this.podcast.title,
273
+ audioUrl: this.podcast.audioUrl,
274
+ duration: this.podcast.duration,
275
+ conferenceId: this.fetchConference ? this.fetchConference.conferenceId : undefined,
276
+ livePodcastId: this.podcast.podcastId,
277
+ organisation: this.podcast.organisation.id,
278
+ });
279
+ },
280
+ showDescription(): void {
281
+ if (this.isDescription) {
282
+ this.$emit('hideDescription');
283
+ } else {
284
+ this.$emit('showDescription');
285
+ }
286
+ this.isDescription = !this.isDescription;
287
+ },
288
+ },
289
+ })
290
+ </script>
291
+
292
+
73
293
  <style lang="scss">
74
294
  .no-visible-img {
75
295
  width: 3rem;
@@ -200,188 +420,4 @@
200
420
  }
201
421
  }
202
422
  }
203
- </style>
204
-
205
- <script lang="ts">
206
- import { mapState } from 'vuex';
207
-
208
- import { defineComponent } from 'vue';
209
- export default defineComponent({
210
- name: 'PodcastImage',
211
-
212
- props: [
213
- 'podcast',
214
- 'hidePlay',
215
- 'displayDescription',
216
- 'arrowDirection',
217
- 'fetchConference',
218
- 'isAnimatorLive',
219
- ],
220
- emits: ['hideDescription', 'showDescription'],
221
- computed: {
222
- ...mapState({
223
- playingPodcast(state:any) {
224
- return (
225
- (state.player.podcast &&
226
- state.player.podcast.podcastId === this.podcast.podcastId) ||
227
- (this.fetchConference &&
228
- 'null' !== this.fetchConference &&
229
- state.player.live &&
230
- state.player.live.conferenceId ===
231
- this.fetchConference.conferenceId)
232
- );
233
- },
234
- }),
235
-
236
- isMobile() {
237
- return window.matchMedia('(hover: none)').matches;
238
- },
239
-
240
- isRecordedInLive():boolean {
241
- return (
242
- undefined === this.fetchConference &&
243
- undefined !== this.podcast.conferenceId &&
244
- 'READY_TO_RECORD' !== this.podcast.processingStatus
245
- );
246
- },
247
-
248
- isLiveToBeRecorded():boolean {
249
- return (
250
- undefined === this.fetchConference &&
251
- undefined !== this.podcast.conferenceId &&
252
- 'READY_TO_RECORD' === this.podcast.processingStatus
253
- );
254
- },
255
- classicPodcastPlay():boolean {
256
- return (
257
- this.podcast &&
258
- false !== this.podcast.valid &&
259
- ('READY_TO_RECORD' === this.podcast.processingStatus ||
260
- 'READY' === this.podcast.processingStatus) &&
261
- !this.isLiveToBeRecorded &&
262
- this.podcast.availability.visibility
263
- );
264
- },
265
- iconName() {
266
- if (this.isLiveToBeRecorded) return 'saooti-clock';
267
- if ('READY' === this.podcast.processingStatus || this.fetchConference) {
268
- if (false == this.podcast.valid) return 'saooti-checkmark';
269
- if (
270
- !this.podcast.availability.visibility &&
271
- this.podcast.availability.date
272
- )
273
- return 'saooti-clock';
274
- return 'saooti-eye-blocked';
275
- }
276
- if (
277
- 'PLANNED' === this.podcast.processingStatus ||
278
- 'PROCESSING' === this.podcast.processingStatus
279
- )
280
- return 'saooti-hourglass';
281
- if ('CANCELED' === this.podcast.processingStatus)
282
- return 'saooti-cancel-circle';
283
- return 'saooti-warning';
284
- },
285
- textVisible():string {
286
- if (this.isLiveToBeRecorded)
287
- return this.$t('Podcast linked to waiting live');
288
- if ('READY' === this.podcast.processingStatus || this.fetchConference) {
289
- if (false == this.podcast.valid) return this.$t('Podcast to validate');
290
- if (
291
- !this.podcast.availability.visibility &&
292
- this.podcast.availability.date
293
- )
294
- return this.$t('Podcast publish in future');
295
- return this.$t('Podcast no visible');
296
- }
297
- if (
298
- 'PLANNED' === this.podcast.processingStatus ||
299
- 'PROCESSING' === this.podcast.processingStatus
300
- )
301
- return this.$t('Podcast in process');
302
- if ('CANCELED' === this.podcast.processingStatus)
303
- return this.$t('Podcast in cancelled status');
304
- return this.$t('Podcast in error');
305
- },
306
-
307
- statusText():string {
308
- if (!this.fetchConference) return '';
309
- switch (this.fetchConference.status) {
310
- case 'PLANNED':
311
- return this.$t('live in few time');
312
- case 'PENDING':
313
- if (this.isAnimatorLive) return this.$t('Open studio');
314
- return this.$t('live upcoming');
315
- case 'RECORDING':
316
- return this.$t('In live');
317
- case 'DEBRIEFING':
318
- if (!this.isAnimatorLive) return '';
319
- if ('READY_TO_RECORD' === this.podcast.processingStatus)
320
- return this.$t('Not recording');
321
- return this.$t('Debriefing');
322
- case 'ERROR':
323
- return this.$t('In error');
324
- case 'PUBLISHING':
325
- return this.$t('Publishing');
326
- default:
327
- return '';
328
- }
329
- },
330
-
331
- recordingLive():boolean {
332
- return (
333
- this.fetchConference &&
334
- 'null' !== this.fetchConference &&
335
- ('RECORDING' === this.fetchConference.status ||
336
- 'PENDING' === this.fetchConference.status)
337
- );
338
- },
339
- },
340
-
341
- data() {
342
- return {
343
- isDescription: false,
344
- };
345
- },
346
-
347
- methods: {
348
- play() {
349
- if (this.isLiveToBeRecorded) {
350
- return;
351
- }
352
- if (!this.recordingLive) {
353
- this.$store.commit('playerPlayPodcast', this.podcast);
354
- return;
355
- }
356
- this.$store.commit('playerPlayPodcast', {
357
- title: this.podcast.title,
358
- audioUrl: this.podcast.audioUrl,
359
- duration: this.podcast.duration,
360
- conferenceId: this.fetchConference.conferenceId,
361
- livePodcastId: this.podcast.podcastId,
362
- organisation: this.podcast.organisation.id,
363
- });
364
- },
365
- showDescription() {
366
- if (this.isDescription) {
367
- this.$emit('hideDescription');
368
- } else {
369
- this.$emit('showDescription');
370
- }
371
- this.isDescription = !this.isDescription;
372
- },
373
- },
374
-
375
- watch: {
376
- arrowDirection(newValue) {
377
- if ('up' === newValue) {
378
- this.isDescription = true;
379
- this.showDescription();
380
- } else {
381
- this.isDescription = false;
382
- this.showDescription();
383
- }
384
- },
385
- },
386
- });
387
- </script>
423
+ </style>