@saooti/octopus-sdk 40.2.19 → 41.0.0

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 (214) hide show
  1. package/index.ts +2 -1
  2. package/package.json +4 -3
  3. package/src/App.vue +71 -95
  4. package/src/components/composable/player/usePlayerLive.ts +13 -4
  5. package/src/components/composable/player/usePlayerLogic.ts +6 -6
  6. package/src/components/composable/player/usePlayerVast.ts +7 -7
  7. package/src/components/composable/podcasts/usePodcastView.ts +3 -3
  8. package/src/components/composable/route/useAdvancedParamInit.ts +1 -1
  9. package/src/components/composable/route/useRouteUpdateParams.ts +4 -4
  10. package/src/components/composable/route/useSimplePageParam.ts +15 -8
  11. package/src/components/composable/useInit.ts +2 -2
  12. package/src/components/composable/useMetaTitleWatch.ts +2 -2
  13. package/src/components/display/accessibility/AccessibilityModal.vue +56 -68
  14. package/src/components/display/categories/CategoryChooser.vue +144 -145
  15. package/src/components/display/categories/CategoryFilter.vue +172 -198
  16. package/src/components/display/categories/CategoryList.vue +122 -147
  17. package/src/components/display/comments/CommentInput.vue +100 -122
  18. package/src/components/display/comments/CommentList.vue +169 -191
  19. package/src/components/display/comments/CommentName.vue +35 -45
  20. package/src/components/display/comments/CommentParentInfo.vue +28 -34
  21. package/src/components/display/comments/CommentPlayer.vue +38 -50
  22. package/src/components/display/comments/CommentSection.vue +85 -103
  23. package/src/components/display/comments/item/CommentBasicView.vue +48 -61
  24. package/src/components/display/comments/item/CommentItem.vue +104 -115
  25. package/src/components/display/comments/item/CommentMoreActions.vue +174 -189
  26. package/src/components/display/comments/item/CommentMoreActionsAdmin.vue +1 -3
  27. package/src/components/display/comments/like/LikeButton.vue +36 -41
  28. package/src/components/display/comments/like/LikeSection.vue +128 -136
  29. package/src/components/display/comments/modal/CheckIdentityModal.vue +35 -40
  30. package/src/components/display/comments/modal/EditCommentModal.vue +72 -78
  31. package/src/components/display/comments/modal/RecaptchaModal.vue +58 -63
  32. package/src/components/display/comments/modal/ReportAbuseModal.vue +59 -66
  33. package/src/components/display/edit/EditBox.vue +9 -8
  34. package/src/components/display/edit/EditBoxRadio.vue +1 -5
  35. package/src/components/display/emission/EmissionInlineList.vue +82 -97
  36. package/src/components/display/emission/EmissionItem.vue +57 -69
  37. package/src/components/display/emission/EmissionList.vue +189 -218
  38. package/src/components/display/emission/EmissionPlayerItem.vue +47 -64
  39. package/src/components/display/emission/EmissionPresentationItem.vue +44 -54
  40. package/src/components/display/emission/EmissionPresentationList.vue +51 -61
  41. package/src/components/display/filter/AdvancedSearch.vue +151 -176
  42. package/src/components/display/filter/CategorySearchFilter.vue +43 -46
  43. package/src/components/display/filter/DateFilter.vue +76 -91
  44. package/src/components/display/filter/MonetizableFilter.vue +27 -30
  45. package/src/components/display/filter/ProductorSearch.vue +87 -90
  46. package/src/components/display/filter/RubriqueChoice.vue +58 -63
  47. package/src/components/display/filter/RubriqueFilter.vue +154 -169
  48. package/src/components/display/filter/SearchOrder.vue +35 -35
  49. package/src/components/display/list/ListPaginate.vue +72 -93
  50. package/src/components/display/list/PaginateParams.vue +36 -40
  51. package/src/components/display/list/PaginateSection.vue +113 -124
  52. package/src/components/display/list/SwiperList.vue +97 -109
  53. package/src/components/display/live/CountDown.vue +15 -9
  54. package/src/components/display/live/CountdownOctopus.vue +16 -10
  55. package/src/components/display/live/LiveHorizontalList.vue +95 -103
  56. package/src/components/display/live/LiveItem.vue +64 -73
  57. package/src/components/display/live/LiveList.vue +125 -137
  58. package/src/components/display/live/RadioCurrently.vue +66 -73
  59. package/src/components/display/live/RadioImage.vue +39 -50
  60. package/src/components/display/live/RadioItem.vue +9 -14
  61. package/src/components/display/live/RadioList.vue +39 -53
  62. package/src/components/display/live/RadioPlanning.vue +210 -222
  63. package/src/components/display/organisation/OrganisationChooser.vue +116 -122
  64. package/src/components/display/organisation/OrganisationChooserLight.vue +44 -52
  65. package/src/components/display/participant/ParticipantInlineList.vue +42 -58
  66. package/src/components/display/participant/ParticipantItem.vue +66 -74
  67. package/src/components/display/participant/ParticipantList.vue +116 -141
  68. package/src/components/display/playlist/PlaylistItem.vue +33 -46
  69. package/src/components/display/playlist/PlaylistList.vue +115 -144
  70. package/src/components/display/playlist/PodcastList.vue +90 -103
  71. package/src/components/display/playlist/PodcastPlaylistInlineList.vue +58 -70
  72. package/src/components/display/podcastmaker/PodcastmakerHeader.vue +21 -22
  73. package/src/components/display/podcasts/AnimatorsItem.vue +15 -16
  74. package/src/components/display/podcasts/DownloadPodcastButton.vue +21 -29
  75. package/src/components/display/podcasts/ParticipantDescription.vue +22 -24
  76. package/src/components/display/podcasts/PodcastFilterList.vue +62 -56
  77. package/src/components/display/podcasts/PodcastImage.vue +96 -99
  78. package/src/components/display/podcasts/PodcastInlineList.vue +30 -28
  79. package/src/components/display/podcasts/PodcastInlineListTemplate.vue +107 -114
  80. package/src/components/display/podcasts/PodcastIsPlaying.vue +4 -12
  81. package/src/components/display/podcasts/PodcastItem.vue +48 -63
  82. package/src/components/display/podcasts/PodcastItemInfo.vue +19 -35
  83. package/src/components/display/podcasts/PodcastList.vue +182 -206
  84. package/src/components/display/podcasts/PodcastModuleBox.vue +100 -137
  85. package/src/components/display/podcasts/PodcastPlannedSpinner.vue +4 -6
  86. package/src/components/display/podcasts/PodcastPlayBar.vue +50 -61
  87. package/src/components/display/podcasts/PodcastPlayBasicButton.vue +38 -41
  88. package/src/components/display/podcasts/PodcastPlayButton.vue +164 -175
  89. package/src/components/display/podcasts/PodcastRawTranscript.vue +69 -80
  90. package/src/components/display/podcasts/PodcastRubriqueList.vue +35 -38
  91. package/src/components/display/podcasts/PodcastSwiperList.vue +100 -110
  92. package/src/components/display/podcasts/TagList.vue +48 -50
  93. package/src/components/display/podcasts/VideoModuleBox.vue +13 -24
  94. package/src/components/display/rubriques/RubriqueChooser.vue +135 -140
  95. package/src/components/display/rubriques/RubriqueList.vue +140 -160
  96. package/src/components/display/sharing/ChooseEpisodesNumber.vue +34 -33
  97. package/src/components/display/sharing/FormatSwitch.vue +16 -11
  98. package/src/components/display/sharing/PlayerAnonymousModal.vue +24 -27
  99. package/src/components/display/sharing/PlayerCommonParameters.vue +20 -13
  100. package/src/components/display/sharing/PlayerParameters.vue +69 -71
  101. package/src/components/display/sharing/QrCode.vue +55 -67
  102. package/src/components/display/sharing/ShareAnonymous.vue +160 -178
  103. package/src/components/display/sharing/ShareDistribution.vue +103 -117
  104. package/src/components/display/sharing/ShareNewsletter.vue +154 -161
  105. package/src/components/display/sharing/SharePlayer.vue +273 -295
  106. package/src/components/display/sharing/SharePlayerColors.vue +25 -16
  107. package/src/components/display/sharing/SharePlayerRadio.vue +61 -69
  108. package/src/components/display/sharing/SharePlayerTypes.vue +176 -176
  109. package/src/components/display/sharing/ShareSocialsButtons.vue +63 -75
  110. package/src/components/display/sharing/SubscribeButtons.vue +184 -207
  111. package/src/components/display/studio/RecordingItemButton.vue +1 -4
  112. package/src/components/form/ClassicCheckbox.vue +26 -30
  113. package/src/components/form/ClassicContentEditable.vue +37 -33
  114. package/src/components/form/ClassicCopyButton.vue +40 -44
  115. package/src/components/form/ClassicDatePicker.vue +114 -114
  116. package/src/components/form/ClassicEmojiPicker.vue +20 -28
  117. package/src/components/form/ClassicInputText.vue +116 -120
  118. package/src/components/form/ClassicLoading.vue +7 -12
  119. package/src/components/form/ClassicMultiselect.vue +115 -117
  120. package/src/components/form/ClassicRadio.vue +21 -16
  121. package/src/components/form/ClassicRadioLabel.vue +23 -22
  122. package/src/components/form/ClassicSearch.vue +24 -19
  123. package/src/components/form/ClassicSelect.vue +47 -38
  124. package/src/components/form/ClassicWysiwyg.vue +116 -123
  125. package/src/components/icons/AmazonMusicIcon.vue +7 -10
  126. package/src/components/icons/ApplePodcastIcon.vue +7 -11
  127. package/src/components/icons/BlueSkyIcon.vue +8 -11
  128. package/src/components/icons/DeezerIcon.vue +8 -11
  129. package/src/components/icons/EditFtpIcon.vue +8 -11
  130. package/src/components/icons/IHeartIcon.vue +8 -11
  131. package/src/components/icons/PlayVideoIcon.vue +7 -10
  132. package/src/components/icons/PlayerFmIcon.vue +7 -10
  133. package/src/components/icons/PocketCastIcon.vue +8 -11
  134. package/src/components/icons/PodcastAddictIcon.vue +7 -10
  135. package/src/components/icons/RadiolineIcon.vue +8 -11
  136. package/src/components/icons/TuninIcon.vue +8 -11
  137. package/src/components/icons/XIcon.vue +7 -10
  138. package/src/components/misc/AcpmImage.vue +6 -7
  139. package/src/components/misc/ClassicAccordion.vue +26 -31
  140. package/src/components/misc/ClassicLazy.vue +86 -90
  141. package/src/components/misc/ClassicNav.vue +16 -20
  142. package/src/components/misc/ClassicPopover.vue +271 -282
  143. package/src/components/misc/ClassicSpinner.vue +5 -27
  144. package/src/components/misc/ErrorMessage.vue +11 -12
  145. package/src/components/misc/FooterGarSection.vue +33 -41
  146. package/src/components/misc/FooterSection.vue +94 -131
  147. package/src/components/misc/HomeDropdown.vue +83 -105
  148. package/src/components/misc/MobileMenu.vue +101 -111
  149. package/src/components/misc/ProgressBar.vue +53 -62
  150. package/src/components/misc/TopBar.vue +98 -120
  151. package/src/components/misc/TopBarMainContent.vue +114 -133
  152. package/src/components/misc/modal/ClassicModal.vue +40 -33
  153. package/src/components/misc/modal/ClassicModalInBody.vue +34 -28
  154. package/src/components/misc/modal/ClipboardModal.vue +27 -30
  155. package/src/components/misc/modal/ContractPreviewModal.vue +64 -62
  156. package/src/components/misc/modal/MessageModal.vue +50 -47
  157. package/src/components/misc/modal/NewsletterModal.vue +30 -31
  158. package/src/components/misc/modal/QrCodeModal.vue +21 -21
  159. package/src/components/misc/modal/ShareModalPlayer.vue +43 -52
  160. package/src/components/misc/player/PlayerCompact.vue +6 -4
  161. package/src/components/misc/player/PlayerComponent.vue +8 -9
  162. package/src/components/misc/player/PlayerLarge.vue +9 -8
  163. package/src/components/misc/player/ads/AdsProgressBar.vue +8 -11
  164. package/src/components/misc/player/ads/AdsSkipButton.vue +24 -30
  165. package/src/components/misc/player/chaptering/ChapteringModal.vue +44 -54
  166. package/src/components/misc/player/chaptering/PlayerChaptering.vue +50 -62
  167. package/src/components/misc/player/elements/PlayerImage.vue +51 -57
  168. package/src/components/misc/player/elements/PlayerPlayButton.vue +81 -92
  169. package/src/components/misc/player/elements/PlayerSpeedButton.vue +23 -27
  170. package/src/components/misc/player/elements/PlayerTitle.vue +85 -111
  171. package/src/components/misc/player/progressbar/PlayerProgressBar.vue +18 -29
  172. package/src/components/misc/player/progressbar/PodcastProgressBar.vue +45 -56
  173. package/src/components/misc/player/radio/RadioHistory.vue +80 -99
  174. package/src/components/misc/player/radio/RadioProgressBar.vue +43 -54
  175. package/src/components/misc/player/video/PlayerVideo.vue +27 -40
  176. package/src/components/misc/player/video/PlayerVideoDigiteka.vue +32 -37
  177. package/src/components/misc/player/video/PlayerVideoHls.vue +199 -198
  178. package/src/components/misc/player/video/PlayerYoutubeEmbed.vue +10 -12
  179. package/src/components/pages/CategoryPage.vue +28 -33
  180. package/src/components/pages/EmissionPage.vue +113 -132
  181. package/src/components/pages/EmissionsPage.vue +2 -0
  182. package/src/components/pages/Error403Page.vue +21 -20
  183. package/src/components/pages/HomePage.vue +91 -100
  184. package/src/components/pages/LivesPage.vue +35 -37
  185. package/src/components/pages/MapPage.vue +209 -241
  186. package/src/components/pages/PageLogout.vue +8 -11
  187. package/src/components/pages/PageNotFound.vue +9 -5
  188. package/src/components/pages/ParticipantPage.vue +96 -110
  189. package/src/components/pages/ParticipantsPage.vue +3 -0
  190. package/src/components/pages/PlaylistPage.vue +112 -117
  191. package/src/components/pages/PlaylistsPage.vue +9 -2
  192. package/src/components/pages/PodcastPage.vue +224 -238
  193. package/src/components/pages/PodcastsPage.vue +9 -2
  194. package/src/components/pages/RadioPage.vue +56 -70
  195. package/src/components/pages/RubriquePage.vue +7 -3
  196. package/src/components/pages/SearchPage.vue +31 -36
  197. package/src/components/pages/TagPage.vue +11 -9
  198. package/src/components/pages/VideoPage.vue +14 -11
  199. package/src/helper/displayHelper.ts +1 -1
  200. package/src/helper/loadScript.ts +4 -4
  201. package/src/i18n.ts +2 -2
  202. package/src/main.ts +1 -1
  203. package/src/router/router.ts +17 -4
  204. package/src/stores/AuthStore.ts +12 -12
  205. package/src/stores/FilterStore.ts +1 -1
  206. package/src/stores/VastStore.ts +2 -2
  207. package/src/stores/class/general/player.ts +1 -0
  208. package/public/css/fonts/icomoon.eot +0 -0
  209. package/public/css/fonts/icomoon.svg +0 -113
  210. package/public/css/fonts/icomoon.ttf +0 -0
  211. package/public/css/fonts/icomoon.woff +0 -0
  212. package/public/css/fonts/icomoon.woff2 +0 -0
  213. package/public/css/fonts/style.css +0 -352
  214. package/sonarqube-scanner.js +0 -10
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div class="position-relative w-100">
2
+ <div ref="root" class="position-relative w-100">
3
3
  <template v-if="!isPhone">
4
4
  <swiper
5
5
  :key="manualReload"
@@ -26,7 +26,7 @@
26
26
  </div>
27
27
  </template>
28
28
 
29
- <script lang="ts">
29
+ <script setup lang="ts">
30
30
  import domHelper from "../../../helper/domHelper";
31
31
  import { state } from "../../../stores/ParamSdkStore";
32
32
  import { Swiper, SwiperSlide } from "swiper/vue";
@@ -34,114 +34,102 @@ import { Navigation } from "swiper/modules";
34
34
  import "swiper/css";
35
35
  import "swiper/css/navigation";
36
36
  import {useResizePhone} from "../../composable/useResizePhone";
37
- import { defineComponent } from "vue";
38
- export default defineComponent({
39
- name: "SwiperList",
40
-
41
- components: {
42
- Swiper,
43
- SwiperSlide,
44
- },
45
-
46
- props: {
47
- listObject: { default: () => [], type: Array as () => Array<unknown> },
48
- sizeItemOverload: { default: undefined, type: Number },
49
- },
50
- setup(){
51
- const { isPhone, windowWidth } = useResizePhone();
52
- return { isPhone, windowWidth }
53
- },
54
-
55
- data() {
56
- return {
57
- manualReload: 0 as number,
58
- modules: [Navigation],
59
- numberItem: 5 as number,
60
- offsetSwiper: 40 as number,
61
- widthSwiperUsable: 0 as number,
62
- itemSizeWithoutRecalculed: 0 as number,
63
- composableInit: false as boolean,
64
- };
65
- },
66
- computed: {
67
- sizeItem(): number {
68
- if (this.sizeItemOverload) {
69
- return this.sizeItemOverload;
70
- }
71
- if (this.windowWidth <= 450) {
72
- return 12.5;
73
- }
74
- return state.generalParameters.podcastItem
75
- ? state.generalParameters.podcastItem
76
- : 13.5;
77
- },
78
- /* isLoop(): boolean {
79
- return this.listObject.length >= this.numberItem;
80
- }, */
81
- itemRecalculizedSize(): number {
82
- return this.widthSwiperUsable / this.numberItem;
83
- },
84
- },
85
- watch: {
86
- windowWidth() {
87
- if (!this.$el) return;
88
- this.widthSwiperUsable =
89
- (this.$el as HTMLElement).offsetWidth - this.offsetSwiper * 2;
90
- const sixteen = domHelper.convertRemToPixels(this.sizeItem + 0.5);
91
- this.numberItem = Math.max(
92
- 1,
93
- Math.floor(this.widthSwiperUsable / sixteen),
94
- );
95
- this.itemSizeWithoutRecalculed =
96
- (this.$el as HTMLElement).offsetWidth / this.numberItem;
97
- },
98
- listObject: {
99
- deep: true,
100
- handler() {
101
- this.manualReload += 1;
102
- },
103
- },
104
- },
105
- mounted(){
106
- this.$nextTick(() => {
107
- this.composableInit = true;
108
- });
109
- },
110
-
111
- methods: {
112
- slidesUpdated() {
113
- if (!this.$el) return;
114
- const slides = this.$el.getElementsByClassName("swiper-slide");
115
- for (const slide of slides) {
116
- slide.style.width = this.itemRecalculizedSize + "px";
117
- }
118
- },
119
- slideChange() {
120
- if (!this.$el) return;
121
- const wrapper = this.$el.getElementsByClassName("swiper-wrapper")[0];
122
- if (wrapper.style.transform.includes("translate3d(40px")) {
123
- return;
124
- }
125
- const matches = /^^translate3d\((-*\d+\.*\d*)px/.exec(
126
- wrapper.style.transform,
127
- );
128
- if (!matches || matches.length <= 1) {
129
- return;
130
- }
131
- const transformPixel = parseFloat(matches[1]) - this.offsetSwiper;
132
- const nbTransformItems = Math.round(
133
- transformPixel / this.itemSizeWithoutRecalculed,
134
- );
135
- wrapper.style.transform =
136
- "translate3d(" +
137
- (nbTransformItems * this.itemRecalculizedSize + this.offsetSwiper) +
138
- "px, 0px, 0px)";
139
- },
140
- slidePrevButton() {
141
- this.$el.querySelector(".swiper").swiper.slidePrev();
142
- },
143
- },
37
+ import { computed, nextTick, onMounted, ref, useTemplateRef, watch } from "vue";
38
+
39
+ //Props
40
+ const props = defineProps({
41
+ listObject: { default: () => [], type: Array as () => Array<unknown> },
42
+ sizeItemOverload: { default: undefined, type: Number },
43
+ })
44
+
45
+ //Data
46
+ const manualReload = ref(0);
47
+ const modules = ref([Navigation]);
48
+ const numberItem = ref(5);
49
+ const offsetSwiper = ref(40);
50
+ const widthSwiperUsable = ref(0);
51
+ const itemSizeWithoutRecalculed = ref(0);
52
+ const composableInit = ref(false);
53
+ const rootRef = useTemplateRef('root');
54
+
55
+
56
+ //Composables
57
+ const { isPhone, windowWidth } = useResizePhone();
58
+
59
+
60
+ //Computed
61
+ const sizeItem = computed(() => {
62
+ if (props.sizeItemOverload) {
63
+ return props.sizeItemOverload;
64
+ }
65
+ if (windowWidth.value <= 450) {
66
+ return 12.5;
67
+ }
68
+ return state.generalParameters.podcastItem
69
+ ? state.generalParameters.podcastItem
70
+ : 13.5;
144
71
  });
72
+ const itemRecalculizedSize = computed(() => widthSwiperUsable.value / numberItem.value);
73
+
74
+
75
+ //Watch
76
+ watch(windowWidth, () => onWindowResize());
77
+ watch(()=>props.listObject, () => {
78
+ manualReload.value += 1;
79
+ }, {deep:true});
80
+
81
+
82
+ onMounted(()=>{
83
+ nextTick(() => {
84
+ onWindowResize();
85
+ composableInit.value = true;
86
+ });
87
+ })
88
+
89
+
90
+ //Methods
91
+ function onWindowResize(){
92
+ const el = rootRef?.value as HTMLElement;
93
+ if (!el) return;
94
+ widthSwiperUsable.value =el.offsetWidth - offsetSwiper.value * 2;
95
+ const sixteen = domHelper.convertRemToPixels(sizeItem.value + 0.5);
96
+ numberItem.value = Math.max(
97
+ 1,
98
+ Math.floor(widthSwiperUsable.value / sixteen),
99
+ );
100
+ itemSizeWithoutRecalculed.value =el.offsetWidth / numberItem.value;
101
+ }
102
+ function slidesUpdated() {
103
+ const el = rootRef?.value as HTMLElement;
104
+ if (!el) return;
105
+ const slides = el.getElementsByClassName("swiper-slide") as Array<HTMLElement>;
106
+ for (const slide of slides) {
107
+ slide.style.width = itemRecalculizedSize.value + "px";
108
+ }
109
+ }
110
+ function slideChange() {
111
+ const el = rootRef?.value as HTMLElement;
112
+ if (!el) return;
113
+ const wrapper = el.getElementsByClassName("swiper-wrapper")[0] as HTMLElement;
114
+ if (wrapper.style.transform.includes("translate3d(40px")) {
115
+ return;
116
+ }
117
+ const matches = /^^translate3d\((-*\d+\.*\d*)px/.exec(
118
+ wrapper.style.transform,
119
+ );
120
+ if (!matches || matches.length <= 1) {
121
+ return;
122
+ }
123
+ const transformPixel = parseFloat(matches[1]) - offsetSwiper.value;
124
+ const nbTransformItems = Math.round(
125
+ transformPixel / itemSizeWithoutRecalculed.value,
126
+ );
127
+ wrapper.style.transform =
128
+ "translate3d(" +
129
+ (nbTransformItems * itemRecalculizedSize.value + offsetSwiper.value) +
130
+ "px, 0px, 0px)";
131
+ }
132
+
145
133
  </script>
146
134
  <style lang="scss">
147
135
 
@@ -1,21 +1,27 @@
1
1
  <template>
2
2
  <div class="d-flex flex-column align-items-center bg-warning p-3 mb-3">
3
- <div>{{ $t("This live will start") }}</div>
3
+ <div>{{ t("This live will start") }}</div>
4
4
  <div v-if="countdownTimer">
5
5
  {{
6
- $t("In days hours minutes seconds",countdownValues)
6
+ t("In days hours minutes seconds",countdownValues)
7
7
  }}
8
8
  </div>
9
9
  <div v-else>
10
- {{ $t("In a moment") }}
10
+ {{ t("In a moment") }}
11
11
  </div>
12
12
  </div>
13
13
  </template>
14
14
 
15
- <script lang="ts" setup>
16
- import {useCountdown} from "../../composable/podcasts/useCountdown";
17
- const props = defineProps({
18
- timeRemaining:{ default: undefined, type: Number },
19
- })
20
- const { countdownValues, countdownTimer } = useCountdown(props.timeRemaining);
15
+ <script setup lang="ts">
16
+ import { useI18n } from "vue-i18n";
17
+ import {useCountdown} from "../../composable/podcasts/useCountdown";
18
+
19
+ //Props
20
+ const props = defineProps({
21
+ timeRemaining:{ default: undefined, type: Number },
22
+ })
23
+
24
+ //Composables
25
+ const { t } = useI18n();
26
+ const { countdownValues, countdownTimer } = useCountdown(props.timeRemaining);
21
27
  </script>
@@ -9,15 +9,15 @@
9
9
  </div>
10
10
  <div class="thought">
11
11
  <template v-if="!props.overrideText">
12
- {{ $t("This live will start") }}
12
+ {{ t("This live will start") }}
13
13
  <span class="text-lowercase">
14
14
  <template v-if="countdownTimer">
15
15
  {{
16
- $t("In days hours minutes seconds", countdownValues)
16
+ t("In days hours minutes seconds", countdownValues)
17
17
  }}
18
18
  </template>
19
19
  <template v-else>
20
- {{ $t("In a moment") }}
20
+ {{ t("In a moment") }}
21
21
  </template>
22
22
  </span>
23
23
  </template>
@@ -27,13 +27,19 @@
27
27
  </div>
28
28
  </div>
29
29
  </template>
30
- <script lang="ts" setup>
31
- import {useCountdown} from "../../composable/podcasts/useCountdown";
32
- const props = defineProps({
33
- timeRemaining:{ default: undefined, type: Number },
34
- overrideText: { default: undefined, type: String },
35
- })
36
- const { countdownValues, countdownTimer } = useCountdown(props.timeRemaining);
30
+ <script setup lang="ts">
31
+ import { useI18n } from "vue-i18n";
32
+ import {useCountdown} from "../../composable/podcasts/useCountdown";
33
+
34
+ //Props
35
+ const props = defineProps({
36
+ timeRemaining:{ default: undefined, type: Number },
37
+ overrideText: { default: undefined, type: String },
38
+ })
39
+
40
+ //Composables
41
+ const { t } = useI18n();
42
+ const { countdownValues, countdownTimer } = useCountdown(props.timeRemaining);
37
43
  </script>
38
44
 
39
45
  <style lang="scss">
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <div v-if="notEmpty">
3
3
  <h3 class="mb-0 mt-3">
4
- {{ $t("All live emission button") }}
4
+ {{ t("All live emission button") }}
5
5
  </h3>
6
6
  <ListPaginate
7
7
  id="liveListPaginate"
@@ -23,117 +23,109 @@
23
23
  </div>
24
24
  </template>
25
25
 
26
- <script lang="ts">
26
+ <script setup lang="ts">
27
27
  import ListPaginate from "../list/ListPaginate.vue";
28
28
  import classicApi from "../../../api/classicApi";
29
29
  import PodcastItem from "../podcasts/PodcastItem.vue";
30
30
  import { Podcast, emptyPodcastData } from "@/stores/class/general/podcast";
31
- import { defineComponent } from "vue";
31
+ import { computed, onBeforeMount, Ref, ref, watch } from "vue";
32
32
  import { ListClassicReturn } from "@/stores/class/general/listReturn";
33
- export default defineComponent({
34
- name: "LiveHorizontalList",
33
+ import { useI18n } from "vue-i18n";
35
34
 
36
- components: {
37
- PodcastItem,
38
- ListPaginate,
39
- },
40
35
 
41
- props: {
42
- first: { default: 0, type: Number },
43
- size: { default: 30, type: Number },
44
- emissionId: { default: undefined, type: Number },
45
- },
36
+ //Props
37
+ const props = defineProps({
38
+ first: { default: 0, type: Number },
39
+ size: { default: 30, type: Number },
40
+ emissionId: { default: undefined, type: Number },
41
+ })
46
42
 
47
- data() {
48
- return {
49
- dfirst: this.first,
50
- dsize: this.size,
51
- totalCount: 0 as number,
52
- lives: [] as Array<Podcast>,
53
- notEmpty: false as boolean,
54
- inFetching: false as boolean,
55
- isMobile: false as boolean,
56
- };
57
- },
43
+ //Data
44
+ const dfirst = ref(props.first);
45
+ const dsize = ref(props.size);
46
+ const totalCount = ref(0);
47
+ const lives: Ref<Array<Podcast>> = ref([]);
48
+ const notEmpty = ref(false);
49
+ const inFetching = ref(false);
50
+ const isMobile = ref(false);
58
51
 
59
- computed: {
60
- displayArray(): Array<Podcast> {
61
- if (this.isMobile) {
62
- return this.lives;
63
- }
64
- return this.lives.slice(
65
- this.dfirst,
66
- Math.min(this.dfirst + this.dsize, this.totalCount),
67
- );
68
- },
69
- },
70
- watch: {
71
- dsize(): void {
72
- this.reloadList();
73
- },
74
- dfirst(): void {
75
- if (!this.lives[this.dfirst] || 0 === this.lives[this.dfirst].podcastId) {
76
- this.fetchContent(false);
77
- }
78
- },
79
- },
52
+ //Composables
53
+ const { t } = useI18n();
80
54
 
81
- created() {
82
- this.fetchContent(true);
83
- },
84
- methods: {
85
- reloadList() {
86
- this.dfirst = 0;
87
- this.fetchContent(true);
88
- },
89
- async fetchContent(reset: boolean): Promise<void> {
90
- this.inFetching = true;
91
- if (reset) {
92
- this.notEmpty = false;
93
- }
94
- const data = await classicApi.fetchData<ListClassicReturn<Podcast>>({
95
- api: 0,
96
- path: "podcast/search",
97
- parameters: {
98
- first: this.dfirst,
99
- size: this.dsize,
100
- emissionId: this.emissionId,
101
- sort: "DATE",
102
- includeStatus: "READY_TO_RECORD",
103
- },
104
- specialTreatement: true,
105
- });
106
- this.afterFetching(reset, data);
107
- },
108
- afterFetching(
109
- reset: boolean,
110
- data: { count: number; result: Array<Podcast>; sort: string },
111
- ): void {
112
- if (reset) {
113
- this.lives.length = 0;
114
- }
115
- if (this.dfirst > this.lives.length) {
116
- for (
117
- let i = this.lives.length - 1, len = this.dfirst + this.dsize;
118
- i < len;
119
- i++
120
- ) {
121
- this.lives.push(emptyPodcastData());
122
- }
123
- }
124
- const responseLives = data.result.filter((l: Podcast | null) => {
125
- return null !== l;
126
- });
127
- this.lives = this.lives
128
- .slice(0, this.dfirst)
129
- .concat(responseLives)
130
- .concat(this.lives.slice(this.dfirst + this.dsize, this.lives.length));
131
- this.totalCount = data.count;
132
- if (0 !== this.lives.length) {
133
- this.notEmpty = true;
134
- }
135
- this.inFetching = false;
136
- },
137
- },
55
+ //Computed
56
+ const displayArray = computed(() => {
57
+ if (isMobile.value) {
58
+ return lives.value;
59
+ }
60
+ return lives.value.slice(
61
+ dfirst.value,
62
+ Math.min(dfirst.value + dsize.value, totalCount.value),
63
+ );
138
64
  });
65
+
66
+
67
+ //Watch
68
+ watch(dsize, () => reloadList());
69
+ watch(dfirst, () => {
70
+ if (!lives.value[dfirst.value] || 0 === lives.value[dfirst.value].podcastId) {
71
+ fetchContent(false);
72
+ }
73
+ });
74
+
75
+ onBeforeMount(()=>fetchContent(true))
76
+
77
+
78
+ //Methods
79
+ function reloadList() {
80
+ dfirst.value = 0;
81
+ fetchContent(true);
82
+ }
83
+ async function fetchContent(reset: boolean): Promise<void> {
84
+ inFetching.value = true;
85
+ if (reset) {
86
+ notEmpty.value = false;
87
+ }
88
+ const data = await classicApi.fetchData<ListClassicReturn<Podcast>>({
89
+ api: 0,
90
+ path: "podcast/search",
91
+ parameters: {
92
+ first: dfirst.value,
93
+ size: dsize.value,
94
+ emissionId: props.emissionId,
95
+ sort: "DATE",
96
+ includeStatus: "READY_TO_RECORD",
97
+ },
98
+ specialTreatement: true,
99
+ });
100
+ afterFetching(reset, data);
101
+ }
102
+ function afterFetching(
103
+ reset: boolean,
104
+ data: { count: number; result: Array<Podcast>; sort: string },
105
+ ): void {
106
+ if (reset) {
107
+ lives.value.length = 0;
108
+ }
109
+ if (dfirst.value > lives.value.length) {
110
+ for (
111
+ let i = lives.value.length - 1, len = dfirst.value + dsize.value;
112
+ i < len;
113
+ i++
114
+ ) {
115
+ lives.value.push(emptyPodcastData());
116
+ }
117
+ }
118
+ const responseLives = data.result.filter((l: Podcast | null) => {
119
+ return null !== l;
120
+ });
121
+ lives.value = lives.value
122
+ .slice(0, dfirst.value)
123
+ .concat(responseLives)
124
+ .concat(lives.value.slice(dfirst.value + dsize.value, lives.value.length));
125
+ totalCount.value = data.count;
126
+ if (0 !== lives.value.length) {
127
+ notEmpty.value = true;
128
+ }
129
+ inFetching.value = false;
130
+ }
139
131
  </script>
@@ -6,89 +6,80 @@
6
6
  />
7
7
  </template>
8
8
 
9
- <script lang="ts">
9
+ <script setup lang="ts">
10
10
  import classicApi from "../../../api/classicApi";
11
11
  import PodcastItem from "../podcasts/PodcastItem.vue";
12
12
  import { Podcast } from "@/stores/class/general/podcast";
13
- import { defineComponent } from "vue";
13
+ import {onBeforeMount, onUnmounted, ref, Ref } from "vue";
14
14
  import {
15
15
  Conference,
16
16
  ConferencePublicInfo,
17
17
  } from "@/stores/class/conference/conference";
18
- export default defineComponent({
19
- name: "LiveItem",
20
18
 
21
- components: {
22
- PodcastItem,
23
- },
24
- props: {
25
- fetchConference: { default: undefined, type: Object as () => Conference },
26
- },
27
- emits: ["deleteItem", "updateItem"],
19
+ //Props
20
+ const props = defineProps({
21
+ fetchConference: { default: undefined, type: Object as () => Conference },
22
+ })
23
+
24
+ //Emits
25
+ const emit = defineEmits(["deleteItem", "updateItem"]);
28
26
 
29
- data() {
30
- return {
31
- live: undefined as Podcast | undefined,
32
- watchInterval: undefined as ReturnType<typeof setInterval> | undefined,
33
- };
34
- },
27
+ //Data
28
+ const live: Ref<Podcast | undefined> = ref(undefined);
29
+ const watchInterval: Ref<ReturnType<typeof setInterval> | undefined> = ref(undefined);
35
30
 
36
- created() {
37
- this.initLiveItem();
38
- },
39
- unmounted() {
40
- this.clearWatchStatus();
41
- },
42
- methods: {
43
- clearWatchStatus() {
44
- clearInterval(this.watchInterval as unknown as number);
45
- this.watchInterval = undefined;
46
- },
47
- async initLiveItem(){
48
- await this.fetchPodcastData();
49
- this.watchInterval = setInterval(() => {
50
- this.fetchStatus();
51
- }, 5000);
52
- },
53
- async fetchPodcastData(): Promise<void> {
54
- if (!this.fetchConference?.podcastId) return;
55
- try {
56
- this.live = await classicApi.fetchData<Podcast>({
57
- api: 0,
58
- path: "podcast/" + this.fetchConference.podcastId,
59
- });
60
- } catch {
61
- this.$emit("deleteItem");
62
- if (this.fetchConference.conferenceId) {
63
- await classicApi.deleteData({
64
- api: 9,
65
- path: "conference/" + this.fetchConference.conferenceId,
66
- });
67
- }
68
- }
69
- },
70
- async fetchStatus(): Promise<void> {
71
- if (
72
- !this.fetchConference ||
73
- ("PLANNED" !== this.fetchConference.status &&
74
- "PENDING" !== this.fetchConference.status &&
75
- "RECORDING" !== this.fetchConference.status)
76
- ) {
77
- this.clearWatchStatus();
78
- return;
79
- }
80
- const confInfo = await classicApi.fetchData<ConferencePublicInfo>({
31
+
32
+ onBeforeMount(()=>initLiveItem());
33
+ onUnmounted(()=>clearWatchStatus())
34
+
35
+
36
+ //Methods
37
+ function clearWatchStatus() {
38
+ clearInterval(watchInterval.value as unknown as number);
39
+ watchInterval.value = undefined;
40
+ }
41
+ async function initLiveItem(){
42
+ await fetchPodcastData();
43
+ watchInterval.value = setInterval(() => {
44
+ fetchStatus();
45
+ }, 5000);
46
+ }
47
+ async function fetchPodcastData(): Promise<void> {
48
+ if (!props.fetchConference?.podcastId) return;
49
+ try {
50
+ live.value = await classicApi.fetchData<Podcast>({
51
+ api: 0,
52
+ path: "podcast/" + props.fetchConference.podcastId,
53
+ });
54
+ } catch {
55
+ emit("deleteItem");
56
+ if (props.fetchConference.conferenceId) {
57
+ await classicApi.deleteData({
81
58
  api: 9,
82
- path: "conference/info/" + this.fetchConference.conferenceId,
59
+ path: "conference/" + props.fetchConference.conferenceId,
83
60
  });
84
- const newStatus = confInfo.status;
85
- if (newStatus !== this.fetchConference.status) {
86
- this.$emit("updateItem", {
87
- ...this.fetchConference,
88
- ...{ status: newStatus },
89
- });
90
- }
91
- },
92
- },
93
- });
61
+ }
62
+ }
63
+ }
64
+ async function fetchStatus(): Promise<void> {
65
+ if (
66
+ !props.fetchConference ||
67
+ ("PLANNED" !== props.fetchConference.status &&
68
+ "PENDING" !== props.fetchConference.status &&
69
+ "RECORDING" !== props.fetchConference.status)
70
+ ) {
71
+ clearWatchStatus();
72
+ return;
73
+ }
74
+ const confInfo = await classicApi.fetchData<ConferencePublicInfo>({
75
+ api: 9,
76
+ path: "conference/info/" + props.fetchConference.conferenceId,
77
+ });
78
+ if (confInfo.status !== props.fetchConference.status) {
79
+ emit("updateItem", {
80
+ ...props.fetchConference,
81
+ ...confInfo,
82
+ });
83
+ }
84
+ }
94
85
  </script>