@saooti/octopus-sdk 37.0.49 → 37.0.51

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@saooti/octopus-sdk",
3
- "version": "37.0.49",
3
+ "version": "37.0.51",
4
4
  "private": false,
5
5
  "description": "Javascript SDK for using octopus",
6
6
  "author": "Saooti",
@@ -1,47 +1,19 @@
1
1
  <template>
2
2
  <div class="d-flex flex-column p-3 list-episode">
3
- <div v-if="!overflowScroll" class="d-flex justify-content-end">
4
- <div class="hide-phone">
5
- <button
6
- class="btn admin-button m-1 saooti-left"
7
- :class="{ disabled: !previousAvailable }"
8
- :title="$t('Display previous')"
9
- @click="displayPrevious()"
10
- />
11
- <button
12
- class="btn admin-button m-1 saooti-right"
13
- :class="{ disabled: !nextAvailable }"
14
- :title="$t('Display next')"
15
- @click="displayNext()"
16
- />
17
- </div>
18
- </div>
19
3
  <ClassicLoading
20
4
  :loading-text="loading ? $t('Loading emissions ...') : undefined"
21
5
  />
22
- <transition-group
23
- v-show="
24
- (displayRubriquage && rubriques) || !(displayRubriquage && loaded)
25
- "
26
- :name="transitionName"
27
- class="element-list-inline"
28
- tag="div"
29
- :class="[
30
- alignLeft ? 'justify-content-start' : '',
31
- overflowScroll ? 'overflowScroll' : '',
32
- ]"
33
- :css="isInlineAnimation"
34
- >
35
- <EmissionPlayerItem
36
- v-for="e in emissions"
37
- :key="e.emissionId"
38
- class="flex-shrink-0 item-phone-margin"
39
- :emission="e"
40
- :class="[alignLeft ? 'me-3' : '', mainRubriquage(e)]"
41
- :nb-podcasts="nbPodcasts"
42
- :rubrique-name="rubriquesId(e)"
43
- />
44
- </transition-group>
6
+ <SwiperList v-if="(displayRubriquage && rubriques) || !(displayRubriquage && loaded)" :sizeItemOverload="itemSize" :list-object="allEmissions">
7
+ <template #octopusSlide="{ option }">
8
+ <EmissionPlayerItem
9
+ class="flex-shrink-0 item-phone-margin"
10
+ :emission="option"
11
+ :class="[mainRubriquage(option)]"
12
+ :nb-podcasts="nbPodcasts"
13
+ :rubrique-name="rubriquesId(option)"
14
+ />
15
+ </template>
16
+ </SwiperList>
45
17
  <router-link
46
18
  :to="href"
47
19
  class="btn btn-primary align-self-center width-fit-content m-4"
@@ -52,12 +24,11 @@
52
24
  </template>
53
25
 
54
26
  <script lang="ts">
27
+ import SwiperList from "../list/SwiperList.vue";
55
28
  import octopusApi from "@saooti/octopus-api";
56
- import domHelper from "../../../helper/dom";
57
29
  import EmissionPlayerItem from "./EmissionPlayerItem.vue";
58
30
  import { state } from "../../../stores/ParamSdkStore";
59
31
  import { handle403 } from "../../mixins/handle403";
60
- const PHONE_WIDTH = 960;
61
32
  import ClassicLoading from "../../form/ClassicLoading.vue";
62
33
  import { Emission } from "@/stores/class/general/emission";
63
34
  import { Rubrique } from "@/stores/class/rubrique/rubrique";
@@ -72,6 +43,7 @@ export default defineComponent({
72
43
  components: {
73
44
  EmissionPlayerItem,
74
45
  ClassicLoading,
46
+ SwiperList
75
47
  },
76
48
 
77
49
  mixins: [handle403, imageProxy, resizePhone],
@@ -83,69 +55,21 @@ export default defineComponent({
83
55
  rubriqueId: { default: undefined, type: Number },
84
56
  rubriquageId: { default: undefined, type: Number },
85
57
  nbPodcasts: { default: undefined, type: Number },
86
- itemSize: { default: 13, type: Number },
58
+ itemSize: { default: undefined, type: Number },
87
59
  },
88
60
 
89
61
  data() {
90
62
  return {
91
63
  loading: true as boolean,
92
- loaded: true as boolean,
93
- index: 0 as number,
94
- first: 0 as number,
95
- size: 5 as number,
96
- totalCount: 0 as number,
97
- popularSort: true as boolean,
98
64
  allEmissions: [] as Array<Emission>,
99
- direction: 1 as number,
100
- alignLeft: false as boolean,
101
65
  rubriques: undefined as Array<Rubrique> | undefined,
102
- isPhone: false as boolean,
103
- windowWidth: 0 as number,
104
66
  };
105
67
  },
106
68
 
107
69
  computed: {
108
- emissions(): Array<Emission> {
109
- return this.allEmissions.slice(this.index, this.index + this.size);
110
- },
111
- overflowScroll(): boolean {
112
- return state.emissionsPage.overflowScroll as boolean;
113
- },
114
- previousAvailable(): boolean {
115
- return this.index > 0;
116
- },
117
- nextAvailable(): boolean {
118
- return this.index + this.size < this.totalCount;
119
- },
120
70
  displayRubriquage(): number | undefined {
121
71
  return state.emissionsPage.rubriquage;
122
72
  },
123
- transitionName(): string {
124
- return this.direction > 0 ? "out-left" : "out-right";
125
- },
126
- isInlineAnimation(): boolean {
127
- return state.generalParameters.isInlineAnimation as boolean;
128
- },
129
- },
130
-
131
- watch: {
132
- sizeItem() {
133
- this.handleResize();
134
- },
135
- windowWidth() {
136
- if (!this.$el) return;
137
- if (this.overflowScroll) {
138
- this.size = 20;
139
- return;
140
- }
141
- if (window.innerWidth <= PHONE_WIDTH) {
142
- this.size = 10;
143
- return;
144
- }
145
- const width = (this.$el as HTMLElement).offsetWidth;
146
- const sixteen = domHelper.convertRemToPixels(this.itemSize + 0.7);
147
- this.size = Math.floor(width / sixteen);
148
- },
149
73
  },
150
74
 
151
75
  mounted() {
@@ -165,8 +89,8 @@ export default defineComponent({
165
89
  0,
166
90
  "emission/search",
167
91
  {
168
- first: this.first,
169
- size: this.size + 1,
92
+ first: 0,
93
+ size: 10,
170
94
  organisationId: this.organisationId,
171
95
  rubriqueId: this.rubriqueId ? [this.rubriqueId] : [],
172
96
  rubriquageId: this.rubriquageId ? [this.rubriquageId] : [],
@@ -174,52 +98,19 @@ export default defineComponent({
174
98
  },
175
99
  true,
176
100
  );
177
-
101
+ this.allEmissions = this.allEmissions.concat(
102
+ data.result.filter((em: Emission | null) => null !== em),
103
+ );
178
104
  this.loading = false;
179
- this.loaded = true;
180
- this.totalCount = data.count;
181
- if (this.allEmissions.length + data.result.length < this.totalCount) {
182
- const nexEl = data.result.pop() as Emission;
183
- this.preloadImage(nexEl.imageUrl ? nexEl.imageUrl : "");
184
- }
185
- this.allEmissions = this.allEmissions.concat(data.result);
186
- if (this.allEmissions.length <= 3) {
187
- this.alignLeft = true;
188
- }
189
- this.first += this.size;
190
105
  } catch (error) {
191
106
  this.handle403(error as AxiosError);
192
107
  }
193
108
  },
194
- displayPrevious(): void {
195
- this.direction = -1;
196
- if (this.previousAvailable) {
197
- this.index -= 1;
198
- }
199
- },
200
- displayNext(): void {
201
- this.direction = 1;
202
- if (!this.nextAvailable) return;
203
- if (
204
- this.first - (this.index + this.size) < 2 &&
205
- this.allEmissions.length < this.totalCount
206
- ) {
207
- this.fetchNext();
208
- }
209
- this.index += 1;
210
- },
109
+
211
110
  reset(): void {
212
111
  this.loading = true;
213
- this.loaded = true;
214
- this.index = 0;
215
- this.first = 0;
216
- this.totalCount = 0;
217
112
  this.allEmissions.length = 0;
218
113
  },
219
- preloadImage(url: string): void {
220
- const img = new Image();
221
- img.src = this.proxyImageUrl(url, "330");
222
- },
223
114
  async fetchRubriques(): Promise<void> {
224
115
  const data = await octopusApi.fetchData<Rubriquage>(
225
116
  0,
@@ -24,21 +24,8 @@
24
24
  {{ emission.name }}
25
25
  </div>
26
26
  </div>
27
- <div class="d-flex flex-column p-2">
28
- <div class="fw-bold text-uppercase text-truncate">
29
- {{ emission.name }}
30
- </div>
31
- <div
32
- ref="descriptionEmissionContainer"
33
- class="emission-description html-wysiwyg-content"
34
- >
35
- <!-- eslint-disable vue/no-v-html -->
36
- <div
37
- ref="descriptionEmission"
38
- v-html="urlify(emission.description)"
39
- />
40
- <!-- eslint-enable -->
41
- </div>
27
+ <div class="fw-bold text-uppercase text-truncate p-2">
28
+ {{ emission.name }}
42
29
  </div>
43
30
  </router-link>
44
31
  <div
@@ -66,22 +53,11 @@
66
53
  params: { podcastId: p.podcastId },
67
54
  query: { productor: filterOrgaId },
68
55
  }"
69
- class="d-flex flex-column define-width text-dark"
56
+ class="d-flex flex-grow-1 align-items-center define-width text-dark"
70
57
  >
71
58
  <div class="fw-bold text-truncate">
72
59
  {{ p.title }}
73
60
  </div>
74
- <div
75
- :ref="'descriptionPodcastContainer' + p.podcastId"
76
- class="emission-description html-wysiwyg-content"
77
- >
78
- <!-- eslint-disable vue/no-v-html -->
79
- <div
80
- :ref="'descriptionPodcast' + p.podcastId"
81
- v-html="urlify(p.description)"
82
- />
83
- <!-- eslint-enable -->
84
- </div>
85
61
  </router-link>
86
62
  <PodcastPlayBar :podcast-id="p.podcastId" :duration="p.duration" />
87
63
  </div>
@@ -180,18 +156,6 @@ export default defineComponent({
180
156
  created() {
181
157
  this.loadPodcasts();
182
158
  },
183
- mounted() {
184
- const emissionDesc = this.$refs.descriptionEmission as HTMLElement;
185
- const emissionDescContainer = this.$refs
186
- .descriptionEmissionContainer as HTMLElement;
187
- if (
188
- null !== emissionDesc &&
189
- null !== emissionDescContainer &&
190
- emissionDesc.clientHeight > emissionDescContainer.clientHeight
191
- ) {
192
- emissionDescContainer.classList.add("after-emission-description");
193
- }
194
- },
195
159
  methods: {
196
160
  ...mapActions(usePlayerStore, ["playerPlay", "playerChangeStatus"]),
197
161
  play(podcast: Podcast): void {
@@ -224,29 +188,6 @@ export default defineComponent({
224
188
  this.activeEmission = false;
225
189
  }
226
190
  this.podcasts = data.result;
227
- this.$nextTick(() => {
228
- for (let index = 0, len = this.podcasts.length; index < len; index++) {
229
- const podcastDesc =
230
- (
231
- this.$refs[
232
- "descriptionPodcast" + this.podcasts[index].podcastId
233
- ] as Array<HTMLElement>
234
- )?.[0] ?? null;
235
- const podcastDescContainer =
236
- (
237
- this.$refs[
238
- "descriptionPodcastContainer" + this.podcasts[index].podcastId
239
- ] as Array<HTMLElement>
240
- )?.[0] ?? null;
241
- if (
242
- null !== podcastDesc &&
243
- null !== podcastDescContainer &&
244
- podcastDesc.clientHeight > podcastDescContainer.clientHeight
245
- ) {
246
- podcastDescContainer.classList.add("after-emission-description");
247
- }
248
- }
249
- });
250
191
  },
251
192
  },
252
193
  });
@@ -268,25 +209,6 @@ export default defineComponent({
268
209
  .emission-item-border-color {
269
210
  border-color: #ddd;
270
211
  }
271
- .emission-description {
272
- overflow: hidden;
273
- margin-top: 0.5em;
274
- word-break: break-word;
275
- max-height: 3.5rem;
276
- position: relative;
277
- &.after-emission-description:after {
278
- content: "...";
279
- position: absolute;
280
- padding-left: 1rem;
281
- right: 0;
282
- bottom: 0;
283
- width: 100%;
284
- font-size: 1rem;
285
- font-weight: bolder;
286
- text-align: center;
287
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0), #fff 40%);
288
- }
289
- }
290
212
  .define-width {
291
213
  width: 9rem;
292
214
  }
@@ -53,28 +53,27 @@
53
53
  :label="$t('Podcasts still available')"
54
54
  />
55
55
  </template>
56
- <template v-if="displayClassicParameter">
57
- <ClassicCheckbox
58
- v-if="displayArticleParam"
59
- :text-init="displayArticle"
60
- @update:text-init="$emit('update:displayArticle', $event)"
61
- id-checkbox="display-article-checkbox"
62
- :label="$t('Display associated article')"
63
- />
64
- <ClassicCheckbox
65
- v-if="displayTranscriptParam"
66
- :text-init="displayTranscript"
67
- @update:text-init="$emit('update:displayTranscript', $event)"
68
- id-checkbox="display-transcript-checkbox"
69
- :label="$t('If the transcript is available, show it')"
70
- />
71
- <ClassicCheckbox
72
- :text-init="displayWave"
73
- @update:text-init="$emit('update:displayWave', $event)"
74
- id-checkbox="display-wave-checkbox"
75
- :label="$t('Show animated wave')"
76
- />
77
- </template>
56
+ <ClassicCheckbox
57
+ v-if="displayArticleParam"
58
+ :text-init="displayArticle"
59
+ @update:text-init="$emit('update:displayArticle', $event)"
60
+ id-checkbox="display-article-checkbox"
61
+ :label="$t('Display associated article')"
62
+ />
63
+ <ClassicCheckbox
64
+ v-if="displayTranscriptParam"
65
+ :text-init="displayTranscript"
66
+ @update:text-init="$emit('update:displayTranscript', $event)"
67
+ id-checkbox="display-transcript-checkbox"
68
+ :label="$t('If the transcript is available, show it')"
69
+ />
70
+ <ClassicCheckbox
71
+ v-if="displayWaveParam"
72
+ :text-init="displayWave"
73
+ @update:text-init="$emit('update:displayWave', $event)"
74
+ id-checkbox="display-wave-checkbox"
75
+ :label="$t('Show animated wave')"
76
+ />
78
77
  <ClassicCheckbox
79
78
  :text-init="playerAutoPlay"
80
79
  @update:text-init="$emit('update:playerAutoPlay', $event)"
@@ -93,7 +92,7 @@ export default defineComponent({
93
92
  props: {
94
93
  isVisible: { default: false, type: Boolean },
95
94
  choseNumberEpisode: { default: false, type: Boolean },
96
- displayClassicParameter: { default: true, type: Boolean },
95
+ displayWaveParam: { default: true, type: Boolean },
97
96
  displayChoiceAllEpisodes: { default: false, type: Boolean },
98
97
  displayTranscriptParam: { default: false, type: Boolean },
99
98
  displayArticleParam: { default: false, type: Boolean },
@@ -51,7 +51,7 @@
51
51
  :display-choice-all-episodes="displayChoiceAllEpisodes"
52
52
  :display-transcript-param="displayTranscriptParam"
53
53
  :display-article-param="displayArticleParam"
54
- :display-classic-parameter="isPlayerParameter"
54
+ :display-wave-param="displayWaveParam"
55
55
  v-model:display-article="displayArticle"
56
56
  v-model:display-transcript="displayTranscript"
57
57
  v-model:display-wave="displayWave"
@@ -142,7 +142,7 @@ export default defineComponent({
142
142
  isVisible: false as boolean,
143
143
  displayArticle: true as boolean,
144
144
  displayTranscript: true as boolean,
145
- displayWave: true as boolean,
145
+ displayWave: false as boolean,
146
146
  playerAutoPlay: false as boolean,
147
147
  orgaAttributes: undefined as
148
148
  | { [key: string]: string | number | boolean | undefined }
@@ -152,6 +152,9 @@ export default defineComponent({
152
152
 
153
153
  computed: {
154
154
  ...mapState(useAuthStore, ["authOrganisation"]),
155
+ displayWaveParam(): boolean {
156
+ return !this.iFrameModel.includes('large');
157
+ },
155
158
  displayArticleParam(): boolean {
156
159
  return (
157
160
  undefined !== this.podcast &&
@@ -285,17 +288,6 @@ export default defineComponent({
285
288
  if (this.playlist) return this.playlist.playlistId;
286
289
  return 0;
287
290
  },
288
- isPlayerParameter(): boolean {
289
- return (
290
- (!this.podcast ||
291
- this.displayArticleParam ||
292
- this.isEmission ||
293
- this.isLargeEmission ||
294
- this.isLargeSuggestion ||
295
- this.displayTranscriptParam) &&
296
- !this.playlist
297
- );
298
- },
299
291
  },
300
292
  async created() {
301
293
  const orgaId =
@@ -22,6 +22,9 @@
22
22
  :month-picker="monthPicker"
23
23
  @update:model-value="$emit('updateDate', $event)"
24
24
  >
25
+ <template v-if="time" #input-icon>
26
+ <div class="ms-2 saooti-clock"/>
27
+ </template>
25
28
  </VueDatePicker>
26
29
  </template>
27
30