@saooti/octopus-sdk 30.0.5 → 30.0.9

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 (88) hide show
  1. package/README.md +5 -0
  2. package/index.ts +13 -2
  3. package/package.json +1 -1
  4. package/src/assets/bootstrap-diff.scss +17 -25
  5. package/src/assets/form.scss +7 -52
  6. package/src/assets/general.scss +56 -170
  7. package/src/assets/live.scss +39 -0
  8. package/src/assets/modal.scss +14 -18
  9. package/src/assets/multiselect.scss +30 -77
  10. package/src/assets/octopus-library.scss +1 -0
  11. package/src/assets/share.scss +149 -267
  12. package/src/assets/transition.scss +95 -1
  13. package/src/components/display/categories/CategoryChooser.vue +1 -1
  14. package/src/components/display/categories/CategoryList.vue +2 -4
  15. package/src/components/display/comments/CommentInput.vue +2 -2
  16. package/src/components/display/comments/CommentItem.vue +7 -6
  17. package/src/components/display/comments/CommentParentInfo.vue +1 -1
  18. package/src/components/display/comments/CommentPlayer.vue +1 -1
  19. package/src/components/display/edit/EditCommentBox.vue +8 -16
  20. package/src/components/display/emission/EmissionChooser.vue +1 -3
  21. package/src/components/display/emission/EmissionInlineList.vue +12 -3
  22. package/src/components/display/emission/EmissionItem.vue +22 -64
  23. package/src/components/display/emission/EmissionList.vue +59 -68
  24. package/src/components/display/emission/EmissionPlayerItem.vue +10 -9
  25. package/src/components/display/filter/AdvancedSearch.vue +50 -150
  26. package/src/components/display/filter/CategoryFilter.vue +9 -13
  27. package/src/components/display/filter/MonetizableFilter.vue +3 -5
  28. package/src/components/display/filter/ProductorSearch.vue +20 -40
  29. package/src/components/display/filter/RubriqueChoice.vue +6 -8
  30. package/src/components/display/filter/RubriqueFilter.vue +8 -13
  31. package/src/components/display/live/CountDown.vue +4 -2
  32. package/src/components/display/live/LiveHorizontalList.vue +1 -1
  33. package/src/components/display/live/LiveItem.vue +4 -4
  34. package/src/components/display/live/LiveList.vue +84 -214
  35. package/src/components/display/organisation/OrganisationChooser.vue +5 -23
  36. package/src/components/display/organisation/OrganisationChooserLight.vue +8 -2
  37. package/src/components/display/participant/ParticipantItem.vue +7 -19
  38. package/src/components/display/participant/ParticipantList.vue +39 -52
  39. package/src/components/display/playlist/PlaylistItem.vue +2 -2
  40. package/src/components/display/playlist/PlaylistList.vue +8 -14
  41. package/src/components/display/playlist/PodcastList.vue +21 -40
  42. package/src/components/display/podcasts/AnimatorsItem.vue +0 -1
  43. package/src/components/display/podcasts/ParticipantDescription.vue +5 -16
  44. package/src/components/display/podcasts/PodcastFilterList.vue +20 -63
  45. package/src/components/display/podcasts/PodcastImage.vue +27 -84
  46. package/src/components/display/podcasts/PodcastInlineList.vue +14 -36
  47. package/src/components/display/podcasts/PodcastItem.vue +5 -5
  48. package/src/components/display/podcasts/PodcastList.vue +7 -14
  49. package/src/components/display/podcasts/PodcastModuleBox.vue +9 -28
  50. package/src/components/display/podcasts/TagList.vue +2 -3
  51. package/src/components/display/rubriques/RubriqueChooser.vue +2 -2
  52. package/src/components/display/rubriques/RubriqueList.vue +5 -25
  53. package/src/components/display/sharing/PlayerParameters.vue +30 -71
  54. package/src/components/display/sharing/ShareButtons.vue +22 -46
  55. package/src/components/display/sharing/ShareDistribution.vue +1 -7
  56. package/src/components/display/sharing/SharePlayer.vue +10 -19
  57. package/src/components/display/sharing/SharePlayerColors.vue +4 -8
  58. package/src/components/display/sharing/SharePlayerTypes.vue +1 -2
  59. package/src/components/display/sharing/SubscribeButtons.vue +2 -4
  60. package/src/components/form/ClassicCheckbox.vue +61 -0
  61. package/src/components/form/ClassicLoading.vue +28 -0
  62. package/src/components/form/ClassicRadio.vue +61 -0
  63. package/src/components/form/ClassicSearch.vue +82 -0
  64. package/src/components/misc/ErrorMessage.vue +4 -1
  65. package/src/components/misc/Footer.vue +26 -35
  66. package/src/components/misc/HomeDropdown.vue +42 -91
  67. package/src/components/misc/LeftMenu.vue +108 -141
  68. package/src/components/misc/Player.vue +15 -29
  69. package/src/components/misc/PlayerButtons.vue +14 -37
  70. package/src/components/misc/PlayerClockAndTimeline.vue +1 -1
  71. package/src/components/misc/PlayerProgressBar.vue +15 -50
  72. package/src/components/misc/Popover.vue +8 -2
  73. package/src/components/misc/TopBar.vue +140 -222
  74. package/src/components/misc/modal/NewsletterModal.vue +13 -27
  75. package/src/components/pages/Category.vue +3 -8
  76. package/src/components/pages/Emission.vue +12 -24
  77. package/src/components/pages/Emissions.vue +8 -17
  78. package/src/components/pages/Home.vue +1 -3
  79. package/src/components/pages/Lives.vue +1 -4
  80. package/src/components/pages/Participant.vue +19 -27
  81. package/src/components/pages/Participants.vue +7 -15
  82. package/src/components/pages/Playlist.vue +16 -29
  83. package/src/components/pages/Playlists.vue +1 -11
  84. package/src/components/pages/Podcast.vue +16 -30
  85. package/src/components/pages/Podcasts.vue +9 -23
  86. package/src/components/pages/Search.vue +26 -64
  87. package/src/sass/_variables.scss +0 -1
  88. package/src/store/class/general/media.ts +1 -1
@@ -1,5 +1,99 @@
1
1
  .octopus-app{
2
2
  .transition-height {
3
- transition: height 1s;
3
+ transition: height 1s;
4
4
  }
5
+ .arrow-transform {
6
+ transform: rotate(180deg);
7
+ }
8
+ .bloc-paddle {
9
+ align-items: flex-end;
10
+ display: flex;
11
+ width: 2rem;
12
+ height: 2.6rem;
13
+ padding: 0.7rem;
14
+ justify-content: space-around;
15
+ align-content: flex-start;
16
+ border-radius: 50%;
17
+ background: transparent !important;
18
+
19
+ > span {
20
+ width: 0.1rem;
21
+ margin: 0.05rem;
22
+ background: #fff;
23
+ }
24
+
25
+ .paddle1 {
26
+ animation-duration: 0.6s;
27
+ animation-name: slidein;
28
+ animation-iteration-count: infinite;
29
+ animation-direction: alternate;
30
+ }
31
+
32
+ .paddle2 {
33
+ animation-duration: 0.3s;
34
+ animation-name: slidein2;
35
+ animation-iteration-count: infinite;
36
+ animation-direction: alternate;
37
+ }
38
+
39
+ .paddle3 {
40
+ animation-duration: 0.5s;
41
+ animation-name: slidein3;
42
+ animation-iteration-count: infinite;
43
+ animation-direction: alternate;
44
+ }
45
+ @keyframes slidein {
46
+ 0% {
47
+ height: 0;
48
+ }
49
+ 100% {
50
+ height: 1rem;
51
+ }
52
+ }
53
+
54
+ @keyframes slidein2 {
55
+ 0% {
56
+ height: 0.3rem;
57
+ }
58
+ 100% {
59
+ height: 1.2rem;
60
+ }
61
+ }
62
+
63
+ @keyframes slidein3 {
64
+ 0% {
65
+ height: 1.2rem;
66
+ }
67
+ 100% {
68
+ height: 0;
69
+ }
70
+ }
71
+ }
72
+ .out-left-enter-active,
73
+ .out-left-leave-active,
74
+ .out-right-enter-active,
75
+ .out-right-leave-active {
76
+ transition: all 0.3s ease;
77
+ }
78
+
79
+ .out-left-leave-to,
80
+ .out-right-enter {
81
+ transform: translateX(-110%);
82
+ opacity: 0;
83
+ }
84
+
85
+ .out-left-enter,
86
+ .out-right-leave-to {
87
+ transform: translateX(110%);
88
+ opacity: 0;
89
+ }
90
+
91
+ .out-left-leave-to,
92
+ .out-right-leave-to {
93
+ position: absolute;
94
+ }
95
+ .out-right-leave-to {
96
+ right: 5rem;
97
+ z-index: -1;
98
+ }
5
99
  }
@@ -56,7 +56,7 @@
56
56
  <template #caret="">
57
57
  <div class="position-relative">
58
58
  <span
59
- class="saooti-arrow_down octopus-arrow-down-2 octopus-arrow-down-top"
59
+ class="saooti-arrow_down octopus-arrow-down"
60
60
  />
61
61
  </div>
62
62
  </template>
@@ -19,13 +19,11 @@
19
19
  class="dropdown btn-group"
20
20
  >
21
21
  <button
22
- class="btn dropdown-toggle btn-secondary text-decoration-none text-dark category-item category-item-plus dropdown-toggle-no-caret"
22
+ class="btn dropdown-toggle category-rubrique-item-plus dropdown-toggle-no-caret saooti-plus"
23
23
  data-bs-toggle="dropdown"
24
24
  aria-expanded="false"
25
25
  :aria-label="$t('See more')"
26
- >
27
- <i class="saooti-plus" />
28
- </button>
26
+ />
29
27
  <ul class="dropdown-menu dropdown-menu-right px-4">
30
28
  <div
31
29
  v-for="category in hidenCategories"
@@ -5,7 +5,7 @@
5
5
  >
6
6
  <b
7
7
  v-if="knownIdentity && !editName"
8
- class="small-Text mt-1 c-hand"
8
+ class="small-text mt-1 c-hand"
9
9
  @click="changeIdentity"
10
10
  >{{ knownIdentity }}</b>
11
11
  <div
@@ -14,7 +14,7 @@
14
14
  >
15
15
  <input
16
16
  v-model="temporaryName"
17
- class="small-Text mt-1"
17
+ class="small-text mt-1"
18
18
  type="text"
19
19
  :class="{ 'border border-danger': temporaryName.length < 2 }"
20
20
  >
@@ -1,13 +1,13 @@
1
1
  <template>
2
2
  <div class="d-flex flex-column mt-2 mb-1 item-comment">
3
- <div class="d-flex small-Text">
3
+ <div class="d-flex small-text">
4
4
  <template v-if="!isEditing">
5
5
  <b
6
6
  v-if="
7
7
  recordingInLive &&
8
8
  ('Live' === comment.phase || 'Prelive' === comment.phase)
9
9
  "
10
- class="recording-bg me-1 text-light p-01"
10
+ class="recording-bg me-1 text-light p-1"
11
11
  >{{ $t('Live') }}</b>
12
12
  <b
13
13
  v-if="editRight || comment.status == 'Valid'"
@@ -18,6 +18,7 @@
18
18
  <template v-else>
19
19
  <b
20
20
  :id="'popover-comment' + comment.comId"
21
+ tabindex="-1"
21
22
  class="mr-2 text-danger"
22
23
  >{{
23
24
  comment.name
@@ -91,7 +92,7 @@
91
92
  >
92
93
  <button
93
94
  v-if="null === comment.commentIdReferer && 'Valid' === comment.status"
94
- class="btn btn-answer primary-color me-2"
95
+ class="btn py-1 px-3 primary-color me-2"
95
96
  :data-selenium="'answer-button-comment-' + seleniumFormat(comment.name)"
96
97
  @click="answerComment"
97
98
  >
@@ -103,7 +104,7 @@
103
104
  (isFlat && comment.commentIdReferer)
104
105
  "
105
106
  :id="'commentItem'+comment.comId"
106
- class="primary-color c-hand d-flex align-items-center small-Text input-no-outline"
107
+ class="primary-color c-hand d-flex align-items-center small-text input-no-outline"
107
108
  type="button"
108
109
  data-bs-toggle="collapse"
109
110
  :data-bs-target="'#commentItemDetail'+comment.comId"
@@ -123,7 +124,7 @@
123
124
  <div v-else>
124
125
  {{ $t('In response to') }}
125
126
  </div>
126
- <span class="saooti-arrow_down saooti-arrow_down-margin" />
127
+ <span class="saooti-arrow_down" />
127
128
  </div>
128
129
  <div class="d-flex align-items-center when-opened">
129
130
  <div v-if="comment.relatedComments">
@@ -133,7 +134,7 @@
133
134
  {{ $t('In response to') }}
134
135
  </div>
135
136
  <span
136
- class="saooti-arrow_down saooti-arrow_down-margin arrow-transform me-2"
137
+ class="saooti-arrow_down arrow-transform me-2"
137
138
  />
138
139
  </div>
139
140
  </div>
@@ -10,7 +10,7 @@
10
10
  </div>
11
11
  </div>
12
12
  <div v-else>
13
- <div class="d-flex small-Text">
13
+ <div class="d-flex small-text">
14
14
  <b class="me-2">{{ comment.name }}</b>
15
15
  <img
16
16
  v-if="comment.certified"
@@ -22,7 +22,7 @@
22
22
  v-if="displayContent"
23
23
  class="comment-content"
24
24
  >
25
- <div class="primary-color flex-shrink">
25
+ <div class="primary-color flex-shrink-0">
26
26
  {{ displayContent.name }}
27
27
  </div>
28
28
  <div class="ms-1 me-1">
@@ -1,35 +1,27 @@
1
1
  <template>
2
2
  <div class="d-flex">
3
3
  <button
4
- class="btn btn-circle primary-color me-1"
4
+ class="btn btn-comment-edit saooti-edit-bounty"
5
5
  aria-label="edit"
6
6
  @click="editComment"
7
- >
8
- <span class="saooti-edit-bounty" />
9
- </button>
7
+ />
10
8
  <button
11
9
  v-if="'Pending' === comment.status || 'Invalid' === comment.status"
12
- class="btn btn-circle primary-color me-1"
10
+ class="btn btn-comment-edit saooti-valid-stud"
13
11
  aria-label="valid"
14
12
  @click="validComment"
15
- >
16
- <span class="saooti-valid-stud" />
17
- </button>
13
+ />
18
14
  <button
19
15
  v-if="'Pending' === comment.status || 'Valid' === comment.status"
20
- class="btn btn-circle primary-color me-1"
16
+ class="btn btn-comment-edit saooti-cross"
21
17
  aria-label="invalid"
22
18
  @click="invalidComment"
23
- >
24
- <span class="saooti-cross" />
25
- </button>
19
+ />
26
20
  <button
27
- class="btn btn-circle primary-color me-1"
21
+ class="btn btn-comment-edit saooti-bin"
28
22
  aria-label="delete"
29
23
  @click="deleteComment"
30
- >
31
- <span class="saooti-bin" />
32
- </button>
24
+ />
33
25
  </div>
34
26
  </template>
35
27
 
@@ -1,7 +1,6 @@
1
1
  <template>
2
2
  <div
3
3
  class="default-multiselect-width"
4
- :class="{ 'multiselect-hide-arrow': !displayArrow }"
5
4
  :style="{ width: width }"
6
5
  >
7
6
  <label
@@ -72,7 +71,7 @@
72
71
  <template #caret="">
73
72
  <div class="position-relative">
74
73
  <span
75
- class="saooti-arrow_down octopus-arrow-down-2 octopus-arrow-down-top"
74
+ class="saooti-arrow_down octopus-arrow-down"
76
75
  />
77
76
  </div>
78
77
  </template>
@@ -120,7 +119,6 @@ export default defineComponent({
120
119
  defaultanswer: { default: '', type: String },
121
120
  organisationId: { default: undefined, type: String},
122
121
  emissionChosen: { default: undefined, type: Object as ()=>Emission},
123
- displayArrow: { default: true, type: Boolean },
124
122
  distributedBy: { default: undefined, type: String},
125
123
  organisationDistributedBy: { default: undefined, type: String},
126
124
  reset: { default: false, type: Boolean },
@@ -37,7 +37,7 @@
37
37
  (displayRubriquage && rubriques) || !(displayRubriquage && loaded)
38
38
  "
39
39
  :name="transitionName"
40
- class="podcast-list-inline"
40
+ class="element-list-inline"
41
41
  tag="ul"
42
42
  :class="[
43
43
  alignLeft ? 'justify-content-start' : '',
@@ -47,7 +47,7 @@
47
47
  <EmissionPlayerItem
48
48
  v-for="e in emissions"
49
49
  :key="e.emissionId"
50
- class="flex-shrink item-phone-margin"
50
+ class="flex-shrink-0 item-phone-margin"
51
51
  :emission="e"
52
52
  :class="[alignLeft ? 'me-3' : '', mainRubriquage(e)]"
53
53
  :nb-podcasts="nbPodcasts"
@@ -257,7 +257,16 @@ export default defineComponent({
257
257
  </script>
258
258
 
259
259
  <style lang="scss">
260
- .podcast-list-inline.overflowScroll {
260
+ .list-episode {
261
+ padding: 2rem 0rem 1rem !important;
262
+ @media (max-width: 450px) {
263
+ padding: 0.5rem 0rem 1rem !important;
264
+ }
265
+ h2 {
266
+ margin-bottom: 1rem;
267
+ }
268
+ }
269
+ .element-list-inline.overflowScroll {
261
270
  display: flex;
262
271
  flex-wrap: wrap;
263
272
  -webkit-overflow-scrolling: touch;
@@ -1,11 +1,6 @@
1
1
  <template>
2
2
  <li
3
- class="mt-3"
4
- :class="
5
- lightItems
6
- ? 'noList emission-light-max-size'
7
- : 'emission-item-container shadow-element'
8
- "
3
+ class="mt-3 emission-item-container shadow-element"
9
4
  >
10
5
  <router-link
11
6
  :to="{
@@ -14,40 +9,14 @@
14
9
  query: { productor: $store.state.filter.organisationId },
15
10
  }"
16
11
  :aria-label="$t('Emission')"
17
- class="text-dark"
12
+ class="d-flex text-dark"
18
13
  >
19
14
  <div
20
- v-if="!lightItems"
21
15
  class="img-box"
22
16
  :style="{ 'background-image': 'url(\'' + emission.imageUrl + '\')' }"
23
17
  />
24
- <div
25
- v-else
26
- class="d-flex"
27
- >
18
+ <div class="emission-item-text">
28
19
  <div
29
- class="img-box-light flex-shrink"
30
- :style="{ 'background-image': 'url(\'' + emission.imageUrl + '\')' }"
31
- />
32
- <div class="emission-light-title">
33
- {{ name }}
34
- </div>
35
- </div>
36
- </router-link>
37
- <div
38
- class="emission-item-text"
39
- :class="lightItems ? 'p-0' : ''"
40
- >
41
- <router-link
42
- :to="{
43
- name: 'emission',
44
- params: { emissionId: emission.emissionId },
45
- query: { productor: $store.state.filter.organisationId },
46
- }"
47
- class="text-dark"
48
- >
49
- <div
50
- v-if="!lightItems"
51
20
  class="emission-name"
52
21
  >
53
22
  <img
@@ -55,36 +24,34 @@
55
24
  class="icon-caution"
56
25
  src="/img/caution.png"
57
26
  :title="$t('Emission have not podcasts')"
58
- >{{ name }}
27
+ >{{ emission.name }}
59
28
  </div>
60
29
  <div
61
30
  :id="'description-emission-container-' + emission.emissionId"
62
31
  class="emission-description htms-wysiwyg-content"
63
- :class="lightItems ? 'emission-small-description' : ''"
64
32
  >
65
33
  <!-- eslint-disable vue/no-v-html -->
66
34
  <div
67
35
  :id="'description-emission-' + emission.emissionId"
68
- v-html="urlify(description)"
36
+ v-html="urlify(emission.description|| '')"
69
37
  />
70
- <!-- eslint-enable -->
71
- </div>
72
- </router-link>
73
- <div class="flex-grow" />
74
- <router-link
75
- v-if="!isPodcastmaker"
76
- :to="{
77
- name: 'productor',
78
- params: { productorId: emission.orga.id },
79
- query: { productor: $store.state.filter.organisationId },
80
- }"
81
- class="text-dark"
82
- >
83
- <div class="emission-producer primary-color">
84
- © {{ emission.orga.name }}
38
+ <!-- eslint-enable -->
85
39
  </div>
86
- </router-link>
87
- </div>
40
+ <div class="flex-grow-1" />
41
+ <router-link
42
+ v-if="!isPodcastmaker"
43
+ :to="{
44
+ name: 'productor',
45
+ params: { productorId: emission.orga.id },
46
+ query: { productor: $store.state.filter.organisationId },
47
+ }"
48
+ >
49
+ <div class="emission-producer">
50
+ © {{ emission.orga.name }}
51
+ </div>
52
+ </router-link>
53
+ </div>
54
+ </router-link>
88
55
  </li>
89
56
  </template>
90
57
 
@@ -115,19 +82,10 @@ export default defineComponent({
115
82
  },
116
83
  organisation(): string {
117
84
  if(this.emission && this.emission.publisher && this.emission.publisher.organisation){
118
- return '' + this.emission.publisher.organisation.name;
85
+ return this.emission.publisher.organisation.name;
119
86
  }
120
87
  return '';
121
88
  },
122
- lightItems(): boolean {
123
- return (state.emissionsPage.lightItems as boolean);
124
- },
125
- description(): string {
126
- return this.emission.description || '';
127
- },
128
- name(): string {
129
- return this.emission.name;
130
- },
131
89
  organisationId(): string|undefined {
132
90
  return state.generalParameters.organisationId;
133
91
  },
@@ -1,68 +1,64 @@
1
1
  <template>
2
2
  <div class="d-flex flex-column align-items-center">
3
- <div
4
- v-if="loading"
5
- class="d-flex justify-content-center"
6
- >
7
- <div class="spinner-border me-3" />
8
- <h3 class="mt-2">
9
- {{ $t('Loading emissions ...') }}
10
- </h3>
11
- </div>
12
- <div
13
- v-if="showCount && loaded && emissions.length > 1"
14
- class="text-secondary mb-2"
15
- >
16
- {{ $t('Number emissions', { nb: displayCount }) + sortText }}
17
- </div>
18
- <ul
19
- v-if="!itemPlayer"
20
- class="emission-list"
21
- :class="smallItems ? 'threeEmissions' : 'twoEmissions'"
22
- >
23
- <EmissionItem
24
- v-for="e in emissions"
25
- :key="e.emissionId"
26
- :emission="e"
27
- />
28
- </ul>
29
- <ul
30
- v-show="
31
- (displayRubriquage && rubriques) || !(displayRubriquage && loaded)
32
- "
33
- v-else
34
- class="d-flex flex-wrap justify-content-around"
35
- >
36
- <EmissionPlayerItem
37
- v-for="e in emissions"
38
- :key="e.emissionId"
39
- :emission="e"
40
- class="m-3 flex-shrink"
41
- :class="mainRubriquage(e)"
42
- :rubrique-name="rubriquesId(e)"
43
- @emissionNotVisible="displayCount--"
44
- />
45
- </ul>
46
- <button
47
- v-show="!allFetched && loaded"
48
- class="btn"
49
- :class="buttonPlus ? 'btn-linkPlus' : 'btn-more'"
50
- :disabled="inFetching"
51
- :aria-label="$t('See more')"
52
- @click="displayMore"
53
- >
54
- <template v-if="buttonPlus">
55
- {{ $t('See more') }}
56
- </template>
57
- <div class="saooti-plus" />
58
- </button>
3
+ <ClassicLoading
4
+ :loading-text="loading?$t('Loading emissions ...'):undefined"
5
+ />
6
+ <template v-if="isLoadingMoreOrFinished">
7
+ <div
8
+ v-if="showCount && emissions.length > 1"
9
+ class="text-secondary mb-2"
10
+ >
11
+ {{ $t('Number emissions', { nb: displayCount }) + sortText }}
12
+ </div>
13
+ <ul
14
+ v-if="!itemPlayer"
15
+ class="emission-list"
16
+ :class="smallItems ? 'three-emissions' : 'two-emissions'"
17
+ >
18
+ <EmissionItem
19
+ v-for="e in emissions"
20
+ :key="e.emissionId"
21
+ :emission="e"
22
+ />
23
+ </ul>
24
+ <div
25
+ v-show="
26
+ (displayRubriquage && rubriques) || !(displayRubriquage)
27
+ "
28
+ v-else
29
+ class="d-flex flex-wrap justify-content-around"
30
+ >
31
+ <EmissionPlayerItem
32
+ v-for="e in emissions"
33
+ :key="e.emissionId"
34
+ :emission="e"
35
+ class="m-3 flex-shrink-0"
36
+ :class="mainRubriquage(e)"
37
+ :rubrique-name="rubriquesId(e)"
38
+ @emissionNotVisible="displayCount--"
39
+ />
40
+ </div>
41
+ <button
42
+ v-show="!allFetched"
43
+ class="btn"
44
+ :class="buttonPlus ? 'btn-link-plus' : 'btn-more'"
45
+ :disabled="loading"
46
+ :aria-label="$t('See more')"
47
+ @click="fetchContent(false)"
48
+ >
49
+ <template v-if="buttonPlus">
50
+ {{ $t('See more') }}
51
+ </template>
52
+ <div class="saooti-plus" />
53
+ </button>
54
+ </template>
59
55
  </div>
60
56
  </template>
61
57
 
62
58
  <script lang="ts">
63
59
  import octopusApi from '@saooti/octopus-api';
64
60
  import { state } from '../../../store/paramStore';
65
-
61
+ import ClassicLoading from '../../form/ClassicLoading.vue';
66
62
  import { Emission } from '@/store/class/general/emission';
67
63
  import { Rubrique } from '@/store/class/rubrique/rubrique';
68
64
  import { defineComponent, defineAsyncComponent } from 'vue';
@@ -75,6 +71,7 @@ export default defineComponent({
75
71
  components: {
76
72
  EmissionItem,
77
73
  EmissionPlayerItem,
74
+ ClassicLoading
78
75
  },
79
76
 
80
77
  props: {
@@ -97,18 +94,19 @@ export default defineComponent({
97
94
  data() {
98
95
  return {
99
96
  loading: true as boolean,
100
- loaded: false as boolean,
101
97
  dfirst: this.first as number,
102
98
  dsize: this.size as number,
103
99
  totalCount: 0 as number,
104
100
  displayCount: 0 as number,
105
101
  emissions: [] as Array<Emission>,
106
102
  rubriques: undefined as Array<Rubrique>|undefined,
107
- inFetching: false as boolean,
108
103
  };
109
104
  },
110
105
 
111
106
  computed: {
107
+ isLoadingMoreOrFinished():boolean{
108
+ return !this.loading || this.emissions.length > 1;
109
+ },
112
110
  allFetched(): boolean {
113
111
  return this.dfirst >= this.totalCount;
114
112
  },
@@ -165,12 +163,10 @@ export default defineComponent({
165
163
  },
166
164
  methods: {
167
165
  async fetchContent(reset: boolean): Promise<void> {
168
- this.inFetching = true;
166
+ this.loading = true;
169
167
  if (reset) {
170
168
  this.emissions.length = 0;
171
169
  this.dfirst = 0;
172
- this.loading = true;
173
- this.loaded = false;
174
170
  }
175
171
  const param: FetchParam = {
176
172
  first: this.dfirst,
@@ -196,7 +192,6 @@ export default defineComponent({
196
192
  this.dfirst = 0;
197
193
  }
198
194
  this.loading = false;
199
- this.loaded = true;
200
195
  this.displayCount = data.count;
201
196
  this.emissions = this.emissions.concat(data.result).filter((e: Emission|null) => {
202
197
  if (null === e) {
@@ -206,11 +201,7 @@ export default defineComponent({
206
201
  });
207
202
  this.dfirst += this.dsize;
208
203
  this.totalCount = data.count;
209
- this.inFetching = false;
210
- },
211
- displayMore(event: { preventDefault: () => void }): void {
212
- event.preventDefault();
213
- this.fetchContent(false);
204
+ this.loading = false;
214
205
  },
215
206
  async fetchRubriques(): Promise<void> {
216
207
  const data = await octopusApi.fetchTopic(this.displayRubriquage);