@saooti/octopus-sdk 40.2.18 → 41.0.0-SNAPSHOT

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 (204) hide show
  1. package/package.json +38 -39
  2. package/src/App.vue +68 -88
  3. package/src/components/composable/player/usePlayerLive.ts +12 -3
  4. package/src/components/composable/player/usePlayerLogic.ts +6 -6
  5. package/src/components/composable/podcasts/usePodcastView.ts +3 -3
  6. package/src/components/composable/useInit.ts +2 -2
  7. package/src/components/composable/useMetaTitleWatch.ts +2 -2
  8. package/src/components/display/accessibility/AccessibilityModal.vue +56 -68
  9. package/src/components/display/categories/CategoryChooser.vue +142 -145
  10. package/src/components/display/categories/CategoryFilter.vue +172 -198
  11. package/src/components/display/categories/CategoryList.vue +122 -147
  12. package/src/components/display/comments/CommentInput.vue +100 -122
  13. package/src/components/display/comments/CommentList.vue +169 -191
  14. package/src/components/display/comments/CommentName.vue +35 -45
  15. package/src/components/display/comments/CommentParentInfo.vue +28 -34
  16. package/src/components/display/comments/CommentPlayer.vue +38 -50
  17. package/src/components/display/comments/CommentSection.vue +85 -103
  18. package/src/components/display/comments/item/CommentBasicView.vue +48 -61
  19. package/src/components/display/comments/item/CommentItem.vue +101 -116
  20. package/src/components/display/comments/item/CommentMoreActions.vue +174 -189
  21. package/src/components/display/comments/item/CommentMoreActionsAdmin.vue +1 -3
  22. package/src/components/display/comments/like/LikeButton.vue +36 -41
  23. package/src/components/display/comments/like/LikeSection.vue +128 -136
  24. package/src/components/display/comments/modal/CheckIdentityModal.vue +35 -40
  25. package/src/components/display/comments/modal/EditCommentModal.vue +72 -78
  26. package/src/components/display/comments/modal/RecaptchaModal.vue +58 -63
  27. package/src/components/display/comments/modal/ReportAbuseModal.vue +59 -66
  28. package/src/components/display/edit/EditBox.vue +6 -9
  29. package/src/components/display/edit/EditBoxRadio.vue +1 -5
  30. package/src/components/display/emission/EmissionInlineList.vue +82 -97
  31. package/src/components/display/emission/EmissionItem.vue +56 -69
  32. package/src/components/display/emission/EmissionList.vue +192 -218
  33. package/src/components/display/emission/EmissionPlayerItem.vue +48 -65
  34. package/src/components/display/emission/EmissionPresentationItem.vue +44 -54
  35. package/src/components/display/emission/EmissionPresentationList.vue +51 -61
  36. package/src/components/display/filter/AdvancedSearch.vue +154 -176
  37. package/src/components/display/filter/CategorySearchFilter.vue +43 -46
  38. package/src/components/display/filter/DateFilter.vue +76 -91
  39. package/src/components/display/filter/MonetizableFilter.vue +27 -30
  40. package/src/components/display/filter/ProductorSearch.vue +87 -90
  41. package/src/components/display/filter/RubriqueChoice.vue +58 -63
  42. package/src/components/display/filter/RubriqueFilter.vue +154 -169
  43. package/src/components/display/filter/SearchOrder.vue +35 -35
  44. package/src/components/display/list/ListPaginate.vue +80 -93
  45. package/src/components/display/list/PaginateParams.vue +36 -40
  46. package/src/components/display/list/PaginateSection.vue +113 -124
  47. package/src/components/display/list/SwiperList.vue +97 -109
  48. package/src/components/display/live/CountDown.vue +15 -9
  49. package/src/components/display/live/CountdownOctopus.vue +16 -10
  50. package/src/components/display/live/LiveHorizontalList.vue +95 -103
  51. package/src/components/display/live/LiveItem.vue +65 -73
  52. package/src/components/display/live/LiveList.vue +125 -137
  53. package/src/components/display/live/RadioCurrently.vue +66 -73
  54. package/src/components/display/live/RadioImage.vue +40 -51
  55. package/src/components/display/live/RadioItem.vue +9 -14
  56. package/src/components/display/live/RadioList.vue +39 -53
  57. package/src/components/display/live/RadioPlanning.vue +211 -223
  58. package/src/components/display/organisation/OrganisationChooser.vue +117 -123
  59. package/src/components/display/organisation/OrganisationChooserLight.vue +44 -52
  60. package/src/components/display/participant/ParticipantInlineList.vue +42 -58
  61. package/src/components/display/participant/ParticipantItem.vue +66 -74
  62. package/src/components/display/participant/ParticipantList.vue +119 -141
  63. package/src/components/display/playlist/PlaylistItem.vue +33 -46
  64. package/src/components/display/playlist/PlaylistList.vue +118 -144
  65. package/src/components/display/playlist/PodcastList.vue +79 -101
  66. package/src/components/display/playlist/PodcastPlaylistInlineList.vue +58 -70
  67. package/src/components/display/podcastmaker/PodcastmakerHeader.vue +21 -22
  68. package/src/components/display/podcasts/AnimatorsItem.vue +15 -16
  69. package/src/components/display/podcasts/DownloadPodcastButton.vue +21 -29
  70. package/src/components/display/podcasts/ParticipantDescription.vue +22 -24
  71. package/src/components/display/podcasts/PodcastFilterList.vue +48 -53
  72. package/src/components/display/podcasts/PodcastImage.vue +96 -99
  73. package/src/components/display/podcasts/PodcastInlineList.vue +30 -28
  74. package/src/components/display/podcasts/PodcastInlineListTemplate.vue +107 -114
  75. package/src/components/display/podcasts/PodcastIsPlaying.vue +4 -12
  76. package/src/components/display/podcasts/PodcastItem.vue +48 -63
  77. package/src/components/display/podcasts/PodcastItemInfo.vue +19 -35
  78. package/src/components/display/podcasts/PodcastList.vue +183 -206
  79. package/src/components/display/podcasts/PodcastModuleBox.vue +100 -137
  80. package/src/components/display/podcasts/PodcastPlannedSpinner.vue +4 -6
  81. package/src/components/display/podcasts/PodcastPlayBar.vue +50 -61
  82. package/src/components/display/podcasts/PodcastPlayBasicButton.vue +38 -41
  83. package/src/components/display/podcasts/PodcastPlayButton.vue +164 -175
  84. package/src/components/display/podcasts/PodcastRawTranscript.vue +69 -80
  85. package/src/components/display/podcasts/PodcastRubriqueList.vue +35 -38
  86. package/src/components/display/podcasts/PodcastSwiperList.vue +100 -110
  87. package/src/components/display/podcasts/TagList.vue +49 -51
  88. package/src/components/display/podcasts/VideoModuleBox.vue +13 -24
  89. package/src/components/display/rubriques/RubriqueChooser.vue +135 -140
  90. package/src/components/display/rubriques/RubriqueList.vue +140 -160
  91. package/src/components/display/sharing/ChooseEpisodesNumber.vue +34 -33
  92. package/src/components/display/sharing/FormatSwitch.vue +16 -11
  93. package/src/components/display/sharing/PlayerAnonymousModal.vue +24 -27
  94. package/src/components/display/sharing/PlayerCommonParameters.vue +20 -13
  95. package/src/components/display/sharing/PlayerParameters.vue +69 -71
  96. package/src/components/display/sharing/QrCode.vue +55 -67
  97. package/src/components/display/sharing/ShareAnonymous.vue +160 -178
  98. package/src/components/display/sharing/ShareDistribution.vue +103 -117
  99. package/src/components/display/sharing/ShareNewsletter.vue +154 -161
  100. package/src/components/display/sharing/SharePlayer.vue +273 -295
  101. package/src/components/display/sharing/SharePlayerColors.vue +25 -16
  102. package/src/components/display/sharing/SharePlayerRadio.vue +61 -69
  103. package/src/components/display/sharing/SharePlayerTypes.vue +176 -176
  104. package/src/components/display/sharing/ShareSocialsButtons.vue +63 -75
  105. package/src/components/display/sharing/SubscribeButtons.vue +185 -209
  106. package/src/components/display/studio/RecordingItemButton.vue +1 -4
  107. package/src/components/form/ClassicCheckbox.vue +26 -30
  108. package/src/components/form/ClassicContentEditable.vue +37 -33
  109. package/src/components/form/ClassicCopyButton.vue +40 -44
  110. package/src/components/form/ClassicDatePicker.vue +114 -114
  111. package/src/components/form/ClassicEmojiPicker.vue +20 -28
  112. package/src/components/form/ClassicInputText.vue +116 -120
  113. package/src/components/form/ClassicLoading.vue +7 -12
  114. package/src/components/form/ClassicMultiselect.vue +106 -116
  115. package/src/components/form/ClassicRadio.vue +21 -16
  116. package/src/components/form/ClassicRadioLabel.vue +23 -22
  117. package/src/components/form/ClassicSearch.vue +24 -19
  118. package/src/components/form/ClassicSelect.vue +47 -38
  119. package/src/components/form/ClassicWysiwyg.vue +116 -123
  120. package/src/components/icons/AmazonMusicIcon.vue +7 -10
  121. package/src/components/icons/ApplePodcastIcon.vue +7 -11
  122. package/src/components/icons/BlueSkyIcon.vue +8 -11
  123. package/src/components/icons/DeezerIcon.vue +8 -11
  124. package/src/components/icons/EditFtpIcon.vue +8 -11
  125. package/src/components/icons/IHeartIcon.vue +8 -11
  126. package/src/components/icons/PlayVideoIcon.vue +7 -10
  127. package/src/components/icons/PlayerFmIcon.vue +7 -10
  128. package/src/components/icons/PocketCastIcon.vue +8 -11
  129. package/src/components/icons/PodcastAddictIcon.vue +7 -10
  130. package/src/components/icons/RadiolineIcon.vue +8 -11
  131. package/src/components/icons/TuninIcon.vue +8 -11
  132. package/src/components/icons/XIcon.vue +7 -10
  133. package/src/components/misc/AcpmImage.vue +6 -7
  134. package/src/components/misc/ClassicAccordion.vue +27 -32
  135. package/src/components/misc/ClassicLazy.vue +86 -90
  136. package/src/components/misc/ClassicNav.vue +16 -20
  137. package/src/components/misc/ClassicPopover.vue +266 -282
  138. package/src/components/misc/ClassicSpinner.vue +5 -27
  139. package/src/components/misc/ErrorMessage.vue +11 -12
  140. package/src/components/misc/FooterGarSection.vue +33 -41
  141. package/src/components/misc/FooterSection.vue +109 -130
  142. package/src/components/misc/HomeDropdown.vue +85 -108
  143. package/src/components/misc/MobileMenu.vue +102 -113
  144. package/src/components/misc/ProgressBar.vue +53 -62
  145. package/src/components/misc/TopBar.vue +97 -120
  146. package/src/components/misc/TopBarMainContent.vue +116 -135
  147. package/src/components/misc/modal/ClassicModal.vue +40 -33
  148. package/src/components/misc/modal/ClassicModalInBody.vue +34 -28
  149. package/src/components/misc/modal/ClipboardModal.vue +27 -30
  150. package/src/components/misc/modal/ContractPreviewModal.vue +64 -62
  151. package/src/components/misc/modal/MessageModal.vue +50 -47
  152. package/src/components/misc/modal/NewsletterModal.vue +30 -31
  153. package/src/components/misc/modal/QrCodeModal.vue +21 -21
  154. package/src/components/misc/modal/ShareModalPlayer.vue +43 -52
  155. package/src/components/misc/player/PlayerCompact.vue +6 -4
  156. package/src/components/misc/player/PlayerComponent.vue +8 -9
  157. package/src/components/misc/player/PlayerLarge.vue +9 -8
  158. package/src/components/misc/player/ads/AdsProgressBar.vue +8 -11
  159. package/src/components/misc/player/ads/AdsSkipButton.vue +24 -30
  160. package/src/components/misc/player/chaptering/ChapteringModal.vue +44 -54
  161. package/src/components/misc/player/chaptering/PlayerChaptering.vue +50 -62
  162. package/src/components/misc/player/elements/PlayerImage.vue +51 -57
  163. package/src/components/misc/player/elements/PlayerPlayButton.vue +81 -92
  164. package/src/components/misc/player/elements/PlayerSpeedButton.vue +23 -27
  165. package/src/components/misc/player/elements/PlayerTitle.vue +85 -111
  166. package/src/components/misc/player/progressbar/PlayerProgressBar.vue +18 -29
  167. package/src/components/misc/player/progressbar/PodcastProgressBar.vue +45 -56
  168. package/src/components/misc/player/radio/RadioHistory.vue +80 -99
  169. package/src/components/misc/player/radio/RadioProgressBar.vue +43 -54
  170. package/src/components/misc/player/video/PlayerVideo.vue +27 -40
  171. package/src/components/misc/player/video/PlayerVideoDigiteka.vue +32 -37
  172. package/src/components/misc/player/video/PlayerVideoHls.vue +199 -198
  173. package/src/components/misc/player/video/PlayerYoutubeEmbed.vue +10 -12
  174. package/src/components/pages/CategoryPage.vue +28 -33
  175. package/src/components/pages/EmissionPage.vue +98 -131
  176. package/src/components/pages/EmissionsPage.vue +2 -0
  177. package/src/components/pages/Error403Page.vue +22 -21
  178. package/src/components/pages/HomePage.vue +91 -100
  179. package/src/components/pages/LivesPage.vue +35 -37
  180. package/src/components/pages/MapPage.vue +209 -241
  181. package/src/components/pages/PageLogout.vue +8 -11
  182. package/src/components/pages/PageNotFound.vue +9 -5
  183. package/src/components/pages/ParticipantPage.vue +83 -111
  184. package/src/components/pages/ParticipantsPage.vue +3 -0
  185. package/src/components/pages/PlaylistPage.vue +98 -116
  186. package/src/components/pages/PlaylistsPage.vue +9 -2
  187. package/src/components/pages/PodcastPage.vue +223 -238
  188. package/src/components/pages/PodcastsPage.vue +9 -2
  189. package/src/components/pages/RadioPage.vue +56 -70
  190. package/src/components/pages/RubriquePage.vue +7 -3
  191. package/src/components/pages/SearchPage.vue +31 -36
  192. package/src/components/pages/TagPage.vue +11 -9
  193. package/src/components/pages/VideoPage.vue +14 -11
  194. package/src/helper/displayHelper.ts +1 -1
  195. package/src/i18n.ts +2 -2
  196. package/src/main.ts +1 -1
  197. package/src/stores/class/general/player.ts +1 -0
  198. package/public/css/fonts/icomoon.eot +0 -0
  199. package/public/css/fonts/icomoon.svg +0 -113
  200. package/public/css/fonts/icomoon.ttf +0 -0
  201. package/public/css/fonts/icomoon.woff +0 -0
  202. package/public/css/fonts/icomoon.woff2 +0 -0
  203. package/public/css/fonts/style.css +0 -352
  204. package/sonarqube-scanner.js +0 -10
@@ -7,31 +7,30 @@
7
7
  </div>
8
8
  </template>
9
9
 
10
- <script lang="ts">
10
+ <script setup lang="ts">
11
+ import { computed } from "vue";
11
12
  import {useImageProxy} from "../../composable/useImageProxy";
12
- import { defineComponent } from "vue";
13
- export default defineComponent({
14
13
 
15
- props: {
16
- pageTitle: { default: undefined, type: String },
17
- imgUrl: { default: undefined, type: String },
18
- },
19
- setup(){
20
- const { useProxyImageUrl } = useImageProxy();
21
- return { useProxyImageUrl }
22
- },
23
- computed: {
24
- backgroundDisplay(): string {
25
- if (!this.imgUrl) {
26
- return "";
27
- }
28
- return `background-image: url('${this.useProxyImageUrl(
29
- this.imgUrl,
30
- "250",
31
- )}');`;
32
- },
33
- },
14
+ //Props
15
+ const props = defineProps({
16
+ pageTitle: { default: undefined, type: String },
17
+ imgUrl: { default: undefined, type: String },
18
+ })
19
+
20
+ //Composables
21
+ const { useProxyImageUrl } = useImageProxy();
22
+
23
+ //Computed
24
+ const backgroundDisplay = computed(() => {
25
+ if (!props.imgUrl) {
26
+ return "";
27
+ }
28
+ return `background-image: url('${useProxyImageUrl(
29
+ props.imgUrl,
30
+ "250",
31
+ )}');`;
34
32
  });
33
+
35
34
  </script>
36
35
  <style lang="scss">
37
36
  .octopus-app {
@@ -8,7 +8,7 @@
8
8
  name: 'participant',
9
9
  params: { participantId: animator.participantId },
10
10
  }"
11
- :title="$t('Participant name page', { name: animatorName })"
11
+ :title="t('Participant name page', { name: animatorName })"
12
12
  class="podcast-item-animator text-truncate"
13
13
  >
14
14
  {{ animatorName }}
@@ -16,23 +16,22 @@
16
16
  </div>
17
17
  </template>
18
18
 
19
- <script lang="ts">
19
+ <script setup lang="ts">
20
20
  import { Participant } from "@/stores/class/general/participant";
21
- import { defineComponent } from "vue";
22
- export default defineComponent({
23
- name: "AnimatorsItem",
21
+ import { computed } from "vue";
22
+ import { useI18n } from "vue-i18n";
23
+
24
+ //Props
25
+ const props = defineProps({
26
+ animator: { default: undefined, type: Object as () => Participant },
27
+ })
28
+
29
+ //Composables
30
+ const { t } = useI18n();
31
+
32
+ //Computed
33
+ const animatorName = computed(() => `${props.animator?.firstName ?? ""} ${ props.animator?.lastName ?? ""}`.trim());
24
34
 
25
- props: {
26
- animator: { default: undefined, type: Object as () => Participant },
27
- },
28
- computed: {
29
- animatorName(): string {
30
- return `${this.animator?.firstName ?? ""} ${
31
- this.animator?.lastName ?? ""
32
- }`.trim();
33
- },
34
- },
35
- });
36
35
  </script>
37
36
 
38
37
  <style lang="scss">
@@ -2,7 +2,7 @@
2
2
  <div v-if="podcast" class="d-flex align-items-center mt-1">
3
3
  <button
4
4
  class="btn btn-round-light ms-2"
5
- :title="$t('Download')"
5
+ :title="t('Download')"
6
6
  @click="downloadPodcast"
7
7
  >
8
8
  <DownloadIcon />
@@ -10,38 +10,30 @@
10
10
  </div>
11
11
  </template>
12
12
 
13
- <script lang="ts">
13
+ <script setup lang="ts">
14
14
  import DownloadIcon from "vue-material-design-icons/Download.vue";
15
15
  import { Podcast } from "@/stores/class/general/podcast";
16
16
  import downloadHelper from "../../../helper/downloadHelper";
17
- import { defineComponent } from "vue";
18
17
  import classicApi from "../../../api/classicApi";
19
- export default defineComponent({
20
- name: "DownloadPodcastButton",
21
- components: {
22
- DownloadIcon,
23
- },
18
+ import { useI18n } from "vue-i18n";
24
19
 
25
- props: {
26
- podcast: { default: undefined, type: Object as () => Podcast },
27
- },
28
- computed: {
29
- videoId(): string | undefined {
30
- return this.podcast?.video?.videoId;
31
- },
32
- },
20
+ //Props
21
+ const props = defineProps({
22
+ podcast: { default: undefined, type: Object as () => Podcast },
23
+ })
33
24
 
34
- methods: {
35
- async downloadPodcast() {
36
- const data = await classicApi.fetchData<{
37
- location: string;
38
- downloadId: string;
39
- }>({
40
- api: 0,
41
- path:"podcast/download/register/"+ this.podcast?.podcastId+".mp3?origin=saooti_play_download",
42
- });
43
- downloadHelper.onDownload("/download/url?param="+encodeURIComponent(data.location), this.podcast?.title + ".mp3");
44
- },
45
- },
46
- });
25
+ //Composables
26
+ const { t } = useI18n();
27
+
28
+ //Methods
29
+ async function downloadPodcast() {
30
+ const data = await classicApi.fetchData<{
31
+ location: string;
32
+ downloadId: string;
33
+ }>({
34
+ api: 0,
35
+ path:"podcast/download/register/"+ props.podcast?.podcastId+".mp3?origin=saooti_play_download",
36
+ });
37
+ downloadHelper.onDownload("/download/url?param="+encodeURIComponent(data.location), props.podcast?.title + ".mp3");
38
+ }
47
39
  </script>
@@ -5,7 +5,7 @@
5
5
  <router-link
6
6
  v-for="participant in participants"
7
7
  :key="participant.participantId"
8
- :title="$t('Participant name page', { name: getName(participant) })"
8
+ :title="t('Participant name page', { name: getName(participant) })"
9
9
  :to="{
10
10
  name: 'participant',
11
11
  params: { participantId: participant.participantId },
@@ -16,33 +16,31 @@
16
16
  </div>
17
17
  </template>
18
18
 
19
- <script lang="ts">
19
+ <script setup lang="ts">
20
20
  import { Participant } from "@/stores/class/general/participant";
21
- import { defineComponent } from "vue";
22
- export default defineComponent({
23
- name: "ParticipantDescription",
21
+ import { computed } from "vue";
22
+ import { useI18n } from "vue-i18n";
24
23
 
25
- components: {},
26
-
27
- props: {
28
- participants: {
29
- default: () => [],
30
- type: Array as () => Array<Participant>,
31
- },
32
- isGuest: { default: false, type: Boolean },
24
+ //Props
25
+ const props = defineProps({
26
+ participants: {
27
+ default: () => [],
28
+ type: Array as () => Array<Participant>,
33
29
  },
30
+ isGuest: { default: false, type: Boolean },
31
+ })
34
32
 
35
- computed: {
36
- title(): string {
37
- return this.isGuest ? this.$t("Guests") : this.$t("Animated by");
38
- },
39
- },
40
- methods: {
41
- getName(person: Participant): string {
42
- return `${person.firstName ?? ""} ${person.lastName ?? ""}`.trim();
43
- },
44
- },
45
- });
33
+ //Composables
34
+ const { t } = useI18n();
35
+
36
+ //Computed
37
+ const title = computed(() => props.isGuest ? t("Guests") : t("Animated by"));
38
+
39
+
40
+ //Methods
41
+ function getName(person: Participant): string {
42
+ return `${person.firstName ?? ""} ${person.lastName ?? ""}`.trim();
43
+ }
46
44
  </script>
47
45
  <style lang="scss">
48
46
  .octopus-app{
@@ -6,7 +6,7 @@
6
6
  <div class="d-flex align-items-center flex-wrap mb-2">
7
7
  <div id="podcast-filter-list-category-chooser" class="w-50-responsive pe-3">
8
8
  <CategoryChooser
9
- :defaultanswer="$t('No category filter')"
9
+ :defaultanswer="t('No category filter')"
10
10
  @selected="onCategorySelected"
11
11
  />
12
12
  </div>
@@ -14,7 +14,7 @@
14
14
  v-model:text-init="searchPattern"
15
15
  class="w-50-responsive"
16
16
  id-search="podcast-filter-search"
17
- :label="$t('Search')"
17
+ :label="t('Search')"
18
18
  />
19
19
  </div>
20
20
  <PodcastList
@@ -34,65 +34,60 @@
34
34
  </section>
35
35
  </template>
36
36
 
37
- <script lang="ts">
37
+ <script setup lang="ts">
38
38
  import ClassicSearch from "../../form/ClassicSearch.vue";
39
39
  import PodcastList from "./PodcastList.vue";
40
40
  import { Category } from "@/stores/class/general/category";
41
- import { defineComponent, defineAsyncComponent } from "vue";
41
+ import { defineAsyncComponent, ref, Ref, computed, watch } from "vue";
42
42
  import { Podcast } from "@/stores/class/general/podcast";
43
+ import { useI18n } from "vue-i18n";
43
44
  const CategoryChooser = defineAsyncComponent(
44
45
  () => import("../categories/CategoryChooser.vue"),
45
46
  );
46
- export default defineComponent({
47
- components: {
48
- CategoryChooser,
49
- PodcastList,
50
- ClassicSearch,
51
- },
52
- props: {
53
- participantId: { default: undefined, type: Number },
54
- name: { default: undefined, type: String },
55
- emissionId: { default: undefined, type: Number },
56
- categoryFilter: { default: false, type: Boolean },
57
- reload: { default: false, type: Boolean },
58
- editRight: { default: false, type: Boolean },
59
- productorId: { default: () => [], type: Array as () => Array<string> },
60
- showCount: { default: false, type: Boolean },
61
- },
62
- emits: ["fetch"],
63
47
 
64
- data() {
65
- return {
66
- first: 0 as number,
67
- size: 30 as number,
68
- searchPattern: "" as string,
69
- iabId: undefined as number | undefined,
70
- reloadList: false as boolean,
71
- };
72
- },
48
+ //Props
49
+ const props = defineProps({
50
+ participantId: { default: undefined, type: Number },
51
+ name: { default: undefined, type: String },
52
+ emissionId: { default: undefined, type: Number },
53
+ categoryFilter: { default: false, type: Boolean },
54
+ reload: { default: false, type: Boolean },
55
+ editRight: { default: false, type: Boolean },
56
+ productorId: { default: () => [], type: Array as () => Array<string> },
57
+ showCount: { default: false, type: Boolean },
58
+ })
73
59
 
74
- computed: {
75
- titleFilter(): string {
76
- return this.name
77
- ? this.$t("All podcast button", { name: this.name })
78
- : this.$t("All podcast emission button");
79
- },
80
- query(): string {
81
- return this.searchPattern.length >= 3 ? this.searchPattern : "";
82
- },
83
- },
84
- watch: {
85
- reload(): void {
86
- this.reloadList = !this.reloadList;
87
- },
88
- },
89
- methods: {
90
- onCategorySelected(category: Category | undefined): void {
91
- this.iabId = category?.id ? category.id : undefined;
92
- },
93
- fetch(podcasts: Array<Podcast>): void {
94
- this.$emit("fetch", podcasts);
95
- },
96
- },
60
+ //Emits
61
+ const emit = defineEmits(["fetch"]);
62
+
63
+ //Data
64
+ const first = ref(0);
65
+ const size = ref(30);
66
+ const searchPattern = ref("");
67
+ const reloadList = ref(false);
68
+ const iabId : Ref<number | undefined>= ref(undefined);
69
+
70
+ //Composables
71
+ const { t } = useI18n();
72
+
73
+ //Computed
74
+ const titleFilter = computed(() => {
75
+ return props.name
76
+ ? t("All podcast button", { name: props.name })
77
+ : t("All podcast emission button");
97
78
  });
79
+ const query = computed(() => searchPattern.value.length >= 3 ? searchPattern.value : "");
80
+
81
+ //Watch
82
+ watch(()=>props.reload, () => {
83
+ reloadList.value = !reloadList.value;
84
+ });
85
+
86
+ //Methods
87
+ function onCategorySelected(category: Category | undefined): void {
88
+ iabId.value = category?.id ? category.id : undefined;
89
+ }
90
+ function fetch(podcasts: Array<Podcast>): void {
91
+ emit("fetch", podcasts);
92
+ }
98
93
  </script>
@@ -8,20 +8,21 @@
8
8
  name: 'podcast',
9
9
  params: { podcastId: podcast.podcastId },
10
10
  }"
11
- :title="$t('Episode name page', { name: podcast.title })"
11
+ :title="t('Episode name page', { name: podcast.title })"
12
12
  >
13
13
  <img
14
14
  v-lazy="useProxyImageUrl(podcast.imageUrl, '270')"
15
15
  width="270"
16
16
  height="270"
17
- role="presentation"
17
+ aria-hidden="true"
18
18
  alt=""
19
+
19
20
  class="img-box img-box-podcast"
20
- :title="$t('Episode name image', { name: podcast.title })"
21
+ :title="t('Episode name image', { name: podcast.title })"
21
22
  />
22
23
  </router-link>
23
24
  <div
24
- v-if="isPodcastmaker"
25
+ v-if="state.generalParameters.podcastmaker"
25
26
  :class="mainRubrique ? 'mainRubrique' : 'notMainRubrique'"
26
27
  />
27
28
  <div
@@ -36,7 +37,7 @@
36
37
  {{ statusText }}
37
38
  </div>
38
39
  <div v-if="isRecordedInLive" class="live-image-status recording-bg">
39
- {{ $t("Recorded in live") }}
40
+ {{ t("Recorded in live") }}
40
41
  </div>
41
42
  <PodcastPlayButton
42
43
  :podcast="podcast"
@@ -46,7 +47,7 @@
46
47
  <button
47
48
  v-if="displayDescription && isMobile"
48
49
  class="background-icon bg-dark text-white"
49
- :title="isDescription ? $t('Hide description') : $t('Show description')"
50
+ :title="isDescription ? t('Hide description') : t('Show description')"
50
51
  @click="showDescription"
51
52
  >
52
53
  <ChevronDownIcon :class="{ 'arrow-transform': !isDescription }" />
@@ -54,107 +55,103 @@
54
55
  </div>
55
56
  </template>
56
57
 
57
- <script lang="ts">
58
+ <script setup lang="ts">
58
59
  import ChevronDownIcon from "vue-material-design-icons/ChevronDown.vue";
59
60
  import PodcastPlayButton from "./PodcastPlayButton.vue";
60
61
  import { state } from "../../../stores/ParamSdkStore";
61
62
  import { Podcast } from "@/stores/class/general/podcast";
62
63
  import { Conference } from "@/stores/class/conference/conference";
63
64
  import {useImageProxy} from "../../composable/useImageProxy";
64
- import { defineComponent } from "vue";
65
- export default defineComponent({
66
- name: "PodcastImage",
67
- components: {
68
- PodcastPlayButton,
69
- ChevronDownIcon,
70
- },
71
- props: {
72
- podcast: { default: () => ({}), type: Object as () => Podcast },
73
- hidePlay: { default: false, type: Boolean },
74
- displayDescription: { default: false, type: Boolean },
75
- arrowDirection: { default: "up", type: String },
76
- isAnimatorLive: { default: false, type: Boolean },
77
- fetchConference: { default: undefined, type: Object as () => Conference },
78
- },
79
- emits: ["hideDescription", "showDescription"],
80
- setup(){
81
- const { useProxyImageUrl } = useImageProxy();
82
- return { useProxyImageUrl }
83
- },
84
- data() {
85
- return {
86
- isDescription: false as boolean,
87
- };
88
- },
89
- computed: {
90
- mainRubrique(): boolean {
91
- return (
92
- undefined !== state.podcastPage.mainRubrique &&
93
- 0 !== state.podcastPage.mainRubrique &&
94
- (this.podcast?.rubriqueIds?.includes(
95
- state.podcastPage.mainRubrique,
96
- ) as boolean)
97
- );
98
- },
99
- isPodcastmaker(): boolean {
100
- return state.generalParameters.podcastmaker as boolean;
101
- },
102
- isMobile(): boolean {
103
- return window.matchMedia("(hover: none)").matches;
104
- },
105
- isRecordedInLive(): boolean {
106
- return (
107
- undefined === this.fetchConference &&
108
- undefined !== this.podcast.conferenceId &&
109
- "READY_TO_RECORD" !== this.podcast.processingStatus
110
- );
111
- },
112
- statusText(): string {
113
- if (!this.fetchConference) return "";
114
- switch (this.fetchConference.status) {
115
- case "PLANNED":
116
- return this.$t("live in few time");
117
- case "PENDING":
118
- if (this.isAnimatorLive) return this.$t("Open studio");
119
- return this.$t("live upcoming");
120
- case "RECORDING":
121
- return this.$t("In live");
122
- case "DEBRIEFING":
123
- if ("READY_TO_RECORD" === this.podcast.processingStatus)
124
- return this.$t("Not recording");
125
- return this.$t("Debriefing");
126
- case "ERROR":
127
- return this.$t("In error");
128
- case "PUBLISHING":
129
- return this.$t("Publishing");
130
- default:
131
- return "";
132
- }
133
- },
134
- },
135
- watch: {
136
- arrowDirection(): void {
137
- if ("up" === this.arrowDirection) {
138
- this.isDescription = true;
139
- this.showDescription();
140
- } else {
141
- this.isDescription = false;
142
- this.showDescription();
143
- }
144
- },
145
- },
65
+ import { computed, onBeforeMount, ref, watch } from "vue";
66
+ import { useI18n } from "vue-i18n";
146
67
 
147
- methods: {
148
- showDescription(): void {
149
- if (this.isDescription) {
150
- this.$emit("hideDescription");
151
- } else {
152
- this.$emit("showDescription");
153
- }
154
- this.isDescription = !this.isDescription;
155
- },
156
- },
68
+ //Props
69
+ const props = defineProps({
70
+ podcast: { default: () => ({}), type: Object as () => Podcast },
71
+ hidePlay: { default: false, type: Boolean },
72
+ displayDescription: { default: false, type: Boolean },
73
+ arrowDirection: { default: "up", type: String },
74
+ isAnimatorLive: { default: false, type: Boolean },
75
+ fetchConference: { default: undefined, type: Object as () => Conference },
76
+ })
77
+
78
+ //Emits
79
+ const emit = defineEmits(["hideDescription", "showDescription"]);
80
+
81
+ //Data
82
+ const isDescription = ref(false);
83
+ const isMobile = ref(false);
84
+
85
+ //Composables
86
+ const { t } = useI18n();
87
+ const { useProxyImageUrl } = useImageProxy();
88
+
89
+ //Computed
90
+ const mainRubrique = computed(() => {
91
+ return (
92
+ undefined !== state.podcastPage.mainRubrique &&
93
+ 0 !== state.podcastPage.mainRubrique &&
94
+ (props.podcast?.rubriqueIds?.includes(
95
+ state.podcastPage.mainRubrique,
96
+ ) as boolean)
97
+ );
98
+ });
99
+ const isRecordedInLive = computed(() => {
100
+ return (
101
+ undefined === props.fetchConference &&
102
+ undefined !== props.podcast.conferenceId &&
103
+ "READY_TO_RECORD" !== props.podcast.processingStatus
104
+ );
105
+ });
106
+ const statusText = computed(() => {
107
+ if (!props.fetchConference) return "";
108
+ switch (props.fetchConference.status) {
109
+ case "PLANNED":
110
+ return t("live in few time");
111
+ case "PENDING":
112
+ if (props.isAnimatorLive) return t("Open studio");
113
+ return t("live upcoming");
114
+ case "RECORDING":
115
+ return t("In live");
116
+ case "DEBRIEFING":
117
+ if ("READY_TO_RECORD" === props.podcast.processingStatus)
118
+ return t("Not recording");
119
+ return t("Debriefing");
120
+ case "ERROR":
121
+ return t("In error");
122
+ case "PUBLISHING":
123
+ return t("Publishing");
124
+ default:
125
+ return "";
126
+ }
127
+ });
128
+
129
+
130
+ //Watch
131
+ watch(()=>props.arrowDirection, () => {
132
+ if ("up" === props.arrowDirection) {
133
+ isDescription.value = true;
134
+ showDescription();
135
+ } else {
136
+ isDescription.value = false;
137
+ showDescription();
138
+ }
157
139
  });
140
+
141
+
142
+ onBeforeMount(()=>{
143
+ isMobile.value = window.matchMedia("(hover: none)").matches;
144
+ })
145
+
146
+ //Methods
147
+ function showDescription(): void {
148
+ if (isDescription.value) {
149
+ emit("hideDescription");
150
+ } else {
151
+ emit("showDescription");
152
+ }
153
+ isDescription.value = !isDescription.value;
154
+ }
158
155
  </script>
159
156
 
160
157
  <style lang="scss">
@@ -15,41 +15,43 @@
15
15
  :query="query"
16
16
  :last-three-months="lastThreeMonths"
17
17
  :title-tag="titleTag"
18
- @update:is-arrow="$emit('update:isArrow', $event)"
18
+ @update:is-arrow="updateArrow($event)"
19
19
  />
20
20
  </template>
21
21
 
22
- <script lang="ts">
23
- import { defineAsyncComponent, defineComponent } from "vue";
22
+ <script setup lang="ts">
23
+ import { defineAsyncComponent } from "vue";
24
24
  const PodcastSwiperList = defineAsyncComponent(
25
25
  () => import("./PodcastSwiperList.vue"),
26
26
  );
27
- export default defineComponent({
28
- name: "PodcastInlineList",
29
27
 
30
- components: {
31
- PodcastSwiperList,
32
- },
33
- props: {
34
- organisationId: { default: () => [], type: Array as () => Array<string> },
35
- emissionId: { default: undefined, type: Number },
36
- iabId: { default: undefined, type: Number },
37
- title: { default: "", type: String },
38
- href: { default: undefined, type: String },
39
- buttonText: { default: undefined, type: String },
40
- isArrow: { default: false, type: Boolean },
41
- requirePopularSort: { default: undefined, type: Boolean },
42
- buttonPlus: { default: false, type: Boolean },
43
- rubriqueId: { default: () => [], type: Array as () => Array<number> },
44
- rubriquageId: { default: () => [], type: Array as () => Array<number> },
45
- noRubriquageId: { default: () => [], type: Array as () => Array<number> },
46
- query: { default: undefined, type: String },
47
- podcastId: { default: undefined, type: Number },
48
- lastThreeMonths: { default: false, type: Boolean },
49
- titleTag: { default: "h2", type: String },
50
- },
51
- emits: ["update:isArrow"],
52
- });
28
+ //Props
29
+ defineProps({
30
+ organisationId: { default: () => [], type: Array as () => Array<string> },
31
+ emissionId: { default: undefined, type: Number },
32
+ iabId: { default: undefined, type: Number },
33
+ title: { default: "", type: String },
34
+ href: { default: undefined, type: String },
35
+ buttonText: { default: undefined, type: String },
36
+ isArrow: { default: false, type: Boolean },
37
+ requirePopularSort: { default: undefined, type: Boolean },
38
+ buttonPlus: { default: false, type: Boolean },
39
+ rubriqueId: { default: () => [], type: Array as () => Array<number> },
40
+ rubriquageId: { default: () => [], type: Array as () => Array<number> },
41
+ noRubriquageId: { default: () => [], type: Array as () => Array<number> },
42
+ query: { default: undefined, type: String },
43
+ podcastId: { default: undefined, type: Number },
44
+ lastThreeMonths: { default: false, type: Boolean },
45
+ titleTag: { default: "h2", type: String },
46
+ })
47
+
48
+ //Emits
49
+ const emit = defineEmits(["update:isArrow"]);
50
+
51
+ //Methods
52
+ function updateArrow(value: boolean){
53
+ emit("update:isArrow", value);
54
+ }
53
55
  </script>
54
56
  <style lang="scss">
55
57
  .octopus-app .loading-size {