@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,15 +1,22 @@
1
1
  <template>
2
- <div class="d-flex w-100" v-if="live">
2
+ <div
3
+ v-if="live"
4
+ class="d-flex w-100"
5
+ >
3
6
  <router-link
4
7
  class="live-date-box"
5
8
  :to="{
6
9
  name: 'podcast',
7
10
  params: { podcastId: live.podcastId },
8
- query: { productor: this.$store.state.filter.organisationId },
11
+ query: { productor: $store.state.filter.organisationId },
9
12
  }"
10
13
  >
11
- <div class="font-weight-bold">{{ date }}</div>
12
- <div class="font-weight-bold">{{ hours }}</div>
14
+ <div class="fw-bold">
15
+ {{ date }}
16
+ </div>
17
+ <div class="fw-bold">
18
+ {{ hours }}
19
+ </div>
13
20
  <div class="font-size-smaller">
14
21
  {{ $t('Duration', { duration: duration }) }}
15
22
  </div>
@@ -18,23 +25,23 @@
18
25
  :to="{
19
26
  name: 'podcast',
20
27
  params: { podcastId: live.podcastId },
21
- query: { productor: this.$store.state.filter.organisationId },
28
+ query: { productor: $store.state.filter.organisationId },
22
29
  }"
23
30
  >
24
31
  <PodcastImage
25
- class="mr-3"
32
+ class="me-3"
26
33
  :class="
27
34
  fetchConference &&
28
- 'null' !== fetchConference &&
29
- fetchConference.status
35
+ 'null' !== fetchConference &&
36
+ fetchConference.status
30
37
  ? fetchConference.status.toLowerCase() + '-shadow'
31
38
  : ''
32
39
  "
33
- v-bind:podcast="live"
34
- :hidePlay="false"
35
- :playingPodcast="false"
36
- :fetchConference="fetchConference"
37
- :isAnimatorLive="organisationRight"
40
+ :podcast="live"
41
+ :hide-play="false"
42
+ :playing-podcast="false"
43
+ :fetch-conference="fetchConference"
44
+ :is-animator-live="organisationRight"
38
45
  />
39
46
  </router-link>
40
47
  <div class="d-flex flex-column live-special-width">
@@ -43,19 +50,21 @@
43
50
  :to="{
44
51
  name: 'podcast',
45
52
  params: { podcastId: live.podcastId },
46
- query: { productor: this.$store.state.filter.organisationId },
53
+ query: { productor: $store.state.filter.organisationId },
47
54
  }"
48
- >{{ live.title }}</router-link
49
55
  >
56
+ {{ live.title }}
57
+ </router-link>
50
58
  <router-link
51
59
  class="link-info text-truncate"
52
60
  :to="{
53
61
  name: 'emission',
54
62
  params: { emissionId: live.emission.emissionId },
55
- query: { productor: this.$store.state.filter.organisationId },
63
+ query: { productor: $store.state.filter.organisationId },
56
64
  }"
57
- >{{ live.emission.name }}</router-link
58
65
  >
66
+ {{ live.emission.name }}
67
+ </router-link>
59
68
  <div
60
69
  :id="'description-live-container-' + live.podcastId"
61
70
  class="live-description-container html-wysiwyg-content"
@@ -63,22 +72,28 @@
63
72
  <div
64
73
  :id="'description-live-' + live.podcastId"
65
74
  v-html="urlify(description)"
66
- ></div>
75
+ />
67
76
  </div>
68
- <div class="comma" v-if="live.animators">
69
- {{ $t('Animated by : ') }}
77
+ <div
78
+ v-if="live.animators"
79
+ class="comma"
80
+ >
81
+ {{ $t('Animated by') }}<div class="mx-1">
82
+ :
83
+ </div>
70
84
  <router-link
85
+ v-for="animator in live.animators"
86
+ :key="animator.participantId"
71
87
  :aria-label="$t('Participant')"
72
88
  class="link-info"
73
- v-for="animator in live.animators"
74
- v-bind:key="animator.participantId"
75
89
  :to="{
76
90
  name: 'participant',
77
91
  params: { participantId: animator.participantId },
78
- query: { productor: this.$store.state.filter.organisationId },
92
+ query: { productor: $store.state.filter.organisationId },
79
93
  }"
80
- >{{ getName(animator) }}</router-link
81
94
  >
95
+ {{ getName(animator) }}
96
+ </router-link>
82
97
  </div>
83
98
  <div v-if="!isPodcastmaker">
84
99
  {{ $t('Producted by : ') }}
@@ -87,192 +102,129 @@
87
102
  :to="{
88
103
  name: 'productor',
89
104
  params: { productorId: live.organisation.id },
90
- query: { productor: this.$store.state.filter.organisationId },
105
+ query: { productor: $store.state.filter.organisationId },
91
106
  }"
92
- >{{ live.organisation.name }}</router-link
93
107
  >
108
+ {{ live.organisation.name }}
109
+ </router-link>
94
110
  </div>
95
111
  <RecordingItemButton
112
+ v-if="fetchConference && organisationRight && isEditBox"
96
113
  :live="true"
97
114
  :recording="fetchConference"
98
115
  :podcast="live"
99
116
  @deleteItem="deleteItem"
100
117
  @validatePodcast="updatePodcast"
101
- v-if="fetchConference && organisationRight && isEditBox"
102
- ></RecordingItemButton>
118
+ />
103
119
  </div>
104
120
  </div>
105
121
  </template>
106
122
 
107
- <style lang="scss">
108
- .live-date-box {
109
- width: 200px;
110
- display: flex;
111
- flex-shrink: 0;
112
- flex-direction: column;
113
- }
114
- .font-size-smaller {
115
- font-size: smaller;
116
- }
117
- .live-image-status {
118
- text-align: center;
119
- width: 100%;
120
- font-size: 0.6rem;
121
- padding: 0.2rem 0;
122
- color: white;
123
- text-transform: uppercase;
124
- }
125
- .live-description-container {
126
- overflow: hidden;
127
- margin-top: 0.5em;
128
- word-break: break-word;
129
- max-height: 6rem;
130
- position: relative;
131
- &.after-live-description:after {
132
- content: '...';
133
- position: absolute;
134
- padding-left: 1rem;
135
- right: 0;
136
- bottom: 0;
137
- width: 100%;
138
- font-size: 1rem;
139
- font-weight: bolder;
140
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0), #f3f3f3 40%);
141
- }
142
- }
143
- .live-special-width {
144
- width: 0;
145
- flex-grow: 1;
146
- }
147
- .planned-bg {
148
- background: #f09653;
149
- }
150
- .pending-bg {
151
- background: #f1643e;
152
- }
153
- .recording-bg {
154
- background: #f34a4a;
155
- }
156
- .debriefing-bg {
157
- background: #6ec66e;
158
- }
159
- .done-bg {
160
- background: #679fe9;
161
- }
162
- .publishing-bg {
163
- background: #7d7d7d;
164
- }
165
- .planned-shadow {
166
- box-shadow: 0px 12px 48px 6px rgba(240, 151, 83, 0.2);
167
- }
168
- .pending-shadow {
169
- box-shadow: 0px 12px 48px 6px rgba(241, 101, 62, 0.2);
170
- }
171
- .recording-shadow {
172
- box-shadow: 0px 12px 48px 6px rgba(243, 74, 74, 0.2);
173
- }
174
- .debriefing-shadow {
175
- box-shadow: 0px 12px 48px 6px rgba(110, 198, 110, 0.2);
176
- }
177
- .publishing-shadow {
178
- box-shadow: 0px 12px 48px 6px rgba(125, 125, 125, 0.2);
179
- }
180
- </style>
181
-
182
123
  <script lang="ts">
183
124
  import { state } from '../../../store/paramStore';
184
125
  const octopusApi = require('@saooti/octopus-api');
185
126
  import PodcastImage from '../podcasts/PodcastImage.vue';
186
127
  import studioApi from '@/api/studio';
187
- import RecordingItemButton from '@/components/display/studio/RecordingItemButton.vue';
188
128
  const moment = require('moment');
189
129
  const humanizeDuration = require('humanize-duration');
190
130
  import { displayMethods } from '../../mixins/functions';
131
+ import { Podcast } from '@/store/class/podcast';
132
+ import { Participant } from '@/store/class/participant';
191
133
 
192
- import { defineComponent, nextTick } from 'vue'
134
+ import { defineComponent, defineAsyncComponent } from 'vue';
135
+ const RecordingItemButton = defineAsyncComponent(() => import('@/components/display/studio/RecordingItemButton.vue'));
193
136
  export default defineComponent({
194
137
  name: 'LiveItem',
195
138
 
196
- props: ['fetchConference', 'index'],
197
- emits: ['deleteItem'],
198
- mixins: [displayMethods],
199
-
200
139
  components: {
201
140
  RecordingItemButton,
202
141
  PodcastImage,
203
142
  },
204
-
205
- async created() {
206
- this.fetchPodcastData();
143
+ mixins: [displayMethods],
144
+ props: {
145
+ fetchConference: { default: undefined, type: Object as ()=>Podcast},
146
+ index: { default: undefined, type: Number},
207
147
  },
148
+ emits: ['deleteItem'],
208
149
 
209
150
  data() {
210
151
  return {
211
- live: undefined as any,
152
+ live: undefined as Podcast|undefined,
212
153
  };
213
154
  },
214
-
155
+
215
156
  computed: {
216
- isEditBox() {
157
+ isEditBox(): boolean {
217
158
  return state.podcastPage.EditBox;
218
159
  },
219
- isPodcastmaker() {
160
+ isPodcastmaker(): boolean {
220
161
  return state.generalParameters.podcastmaker;
221
162
  },
222
- hours():string {
163
+ hours(): string {
164
+ if(!this.live){ return ''; }
223
165
  return moment(this.live.pubDate).format('À HH[H]mm');
224
166
  },
225
- date():string {
167
+ date(): string {
168
+ if(!this.live){ return ''; }
226
169
  return moment(this.live.pubDate).format('D/MM/YYYY');
227
170
  },
228
- displayDate():string {
171
+ displayDate(): string {
172
+ if(!this.live){ return ''; }
229
173
  return moment(this.live.pubDate).format('X');
230
174
  },
231
- description():string {
232
- if (this.live.description) return this.live.description;
175
+ description(): string {
176
+ if (this.live && this.live.description) return this.live.description;
233
177
  return '';
234
178
  },
235
- myOrganisationId() {
179
+ myOrganisationId(): string {
236
180
  return state.generalParameters.organisationId;
237
181
  },
238
- organisationRight() {
182
+ organisationRight(): boolean {
239
183
  if (
240
- this.isRoleLive &&
184
+ this.isRoleLive && this.live &&
241
185
  this.myOrganisationId === this.live.organisation.id
242
186
  )
243
187
  return true;
244
188
  return false;
245
189
  },
246
- isRoleLive() {
190
+ isRoleLive(): boolean {
247
191
  return state.generalParameters.isRoleLive;
248
192
  },
249
-
250
- duration():string {
251
- if (this.live.duration <= 1) return '';
193
+ duration(): string {
194
+ if (!this.live || this.live.duration <= 1) return '';
252
195
  if (this.live.duration > 600000) {
253
196
  return humanizeDuration(this.live.duration, {
254
- language: 'fr',
197
+ language: this.$i18n.locale,
255
198
  largest: 1,
256
199
  round: true,
257
200
  });
258
201
  }
259
202
  return humanizeDuration(this.live.duration, {
260
- language: 'fr',
203
+ language: this.$i18n.locale,
261
204
  largest: 2,
262
205
  round: true,
263
206
  });
264
207
  },
265
208
  },
209
+ watch: {
210
+ live(): void {
211
+ this.handleDescription();
212
+ },
213
+ },
214
+
215
+ async created() {
216
+ this.fetchPodcastData();
217
+ },
266
218
  methods: {
267
- updatePodcast(podcastUpdated: any) {
219
+ updatePodcast(podcastUpdated: Podcast): void {
268
220
  this.live = podcastUpdated;
269
221
  },
270
- getName(person: any) {
222
+ getName(person: Participant): string {
271
223
  const first = person.firstName || '';
272
224
  const last = person.lastName || '';
273
225
  return (first + ' ' + last).trim();
274
226
  },
275
- async fetchPodcastData() {
227
+ async fetchPodcastData(): Promise<void> {
276
228
  if (!this.fetchConference || !this.fetchConference.podcastId) return;
277
229
  try {
278
230
  this.live = await octopusApi.fetchPodcast(
@@ -280,35 +232,71 @@ export default defineComponent({
280
232
  );
281
233
  } catch {
282
234
  this.$emit('deleteItem', this.index);
283
- studioApi.deleteConference(
284
- this.$store,
285
- this.fetchConference.conferenceId
286
- );
235
+ if(this.fetchConference.conferenceId){
236
+ studioApi.deleteConference(
237
+ this.$store.state,
238
+ this.fetchConference.conferenceId.toString()
239
+ );
240
+ }
287
241
  }
288
242
  },
289
- async handleDescription() {
290
- await nextTick();
291
- let liveDesc = document.getElementById(
292
- 'description-live-' + this.live.podcastId
293
- );
294
- let liveDescContainer:any = document.getElementById(
295
- 'description-live-container-' + this.live.podcastId
296
- );
297
- if (
298
- null !== liveDesc &&
299
- liveDesc.clientHeight > liveDescContainer.clientHeight
300
- ) {
301
- liveDescContainer.classList.add('after-live-description');
302
- }
243
+ async handleDescription(): Promise<void> {
244
+ this.$nextTick(() => {
245
+ if(!this.live){
246
+ return;
247
+ }
248
+ const liveDesc = document.getElementById(
249
+ 'description-live-' + this.live.podcastId
250
+ );
251
+ const liveDescContainer = document.getElementById(
252
+ 'description-live-container-' + this.live.podcastId
253
+ );
254
+ if (
255
+ null !== liveDesc && null !== liveDescContainer &&
256
+ liveDesc.clientHeight > liveDescContainer.clientHeight
257
+ ) {
258
+ liveDescContainer.classList.add('after-live-description');
259
+ }
260
+ });
303
261
  },
304
- deleteItem() {
262
+ deleteItem(): void {
305
263
  this.$emit('deleteItem', this.index);
306
264
  },
307
265
  },
308
- watch: {
309
- live() {
310
- this.handleDescription();
311
- },
312
- },
313
- });
266
+ })
314
267
  </script>
268
+
269
+ <style lang="scss">
270
+ .live-date-box {
271
+ width: 200px;
272
+ display: flex;
273
+ flex-shrink: 0;
274
+ flex-direction: column;
275
+ }
276
+ .font-size-smaller {
277
+ font-size: smaller;
278
+ }
279
+ .live-description-container {
280
+ overflow: hidden;
281
+ margin-top: 0.5em;
282
+ word-break: break-word;
283
+ max-height: 6rem;
284
+ position: relative;
285
+ &.after-live-description:after {
286
+ content: '...';
287
+ position: absolute;
288
+ padding-left: 1rem;
289
+ right: 0;
290
+ bottom: 0;
291
+ width: 100%;
292
+ font-size: 1rem;
293
+ font-weight: bolder;
294
+ background: linear-gradient(to bottom, rgba(255, 255, 255, 0), #f3f3f3 40%);
295
+ }
296
+ }
297
+ .live-special-width {
298
+ width: 0;
299
+ flex-grow: 1;
300
+ }
301
+
302
+ </style>