@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
@@ -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{
@@ -3,10 +3,11 @@
3
3
  <h3 class="mb-2">
4
4
  {{ titleFilter }}
5
5
  </h3>
6
- <div class="d-flex align-items-center flex-wrap mb-2">
6
+ <div class="d-flex align-items-stretch 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
+ height="100%"
10
+ :defaultanswer="t('No category filter')"
10
11
  @selected="onCategorySelected"
11
12
  />
12
13
  </div>
@@ -14,85 +15,90 @@
14
15
  v-model:text-init="searchPattern"
15
16
  class="w-50-responsive"
16
17
  id-search="podcast-filter-search"
17
- :label="$t('Search')"
18
+ :label="t('Search')"
18
19
  />
19
20
  </div>
20
21
  <PodcastList
21
- :first="first"
22
- :size="size"
22
+ :first="dfirst"
23
+ :size="dsize"
23
24
  :iab-id="iabId"
24
25
  :query="query"
25
26
  :participant-id="participantId"
26
27
  :emission-id="emissionId"
27
28
  :organisation-id="productorId"
29
+ :sort-criteria="sort"
28
30
  :reload="reloadList"
29
31
  :include-hidden="editRight"
30
32
  :show-count="showCount"
31
33
  :display-sort-text="false"
34
+ :force-update-parameters="forceUpdateParameters"
32
35
  @fetch="fetch"
33
36
  />
34
37
  </section>
35
38
  </template>
36
39
 
37
- <script lang="ts">
40
+ <script setup lang="ts">
38
41
  import ClassicSearch from "../../form/ClassicSearch.vue";
39
42
  import PodcastList from "./PodcastList.vue";
40
43
  import { Category } from "@/stores/class/general/category";
41
- import { defineComponent, defineAsyncComponent } from "vue";
44
+ import { defineAsyncComponent, ref, Ref, computed, watch } from "vue";
42
45
  import { Podcast } from "@/stores/class/general/podcast";
46
+ import { useI18n } from "vue-i18n";
43
47
  const CategoryChooser = defineAsyncComponent(
44
48
  () => import("../categories/CategoryChooser.vue"),
45
49
  );
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
50
 
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
- },
51
+ //Props
52
+ const props = defineProps({
53
+ first: { default: 0, type: Number },
54
+ size: { default: 30, type: Number },
55
+ query: { default: undefined, type: String },
56
+ participantId: { default: undefined, type: Number },
57
+ name: { default: undefined, type: String },
58
+ emissionId: { default: undefined, type: Number },
59
+ categoryFilter: { default: false, type: Boolean },
60
+ reload: { default: false, type: Boolean },
61
+ editRight: { default: false, type: Boolean },
62
+ productorId: { default: () => [], type: Array as () => Array<string> },
63
+ showCount: { default: false, type: Boolean },
64
+ forceUpdateParameters: { default: false, type: Boolean },
65
+ })
73
66
 
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
- },
67
+ //Emits
68
+ const emit = defineEmits(["fetch", "update:query"]);
69
+
70
+ //Data
71
+ const dfirst = ref(props.first);
72
+ const dsize = ref(props.size);
73
+ const searchPattern = ref(props.query ?? "");
74
+ const reloadList = ref(false);
75
+ const iabId : Ref<number | undefined>= ref(undefined);
76
+
77
+ //Composables
78
+ const { t } = useI18n();
79
+
80
+ //Computed
81
+ const titleFilter = computed(() => {
82
+ return props.name
83
+ ? t("All podcast button", { name: props.name })
84
+ : t("All podcast emission button");
97
85
  });
86
+ const query = computed(() => searchPattern.value.length > 3 ? searchPattern.value : "");
87
+ const sort = computed(() => !query.value.length ? "DATE" : "SCORE");
88
+
89
+ //Watch
90
+ watch(()=>props.reload, () => {
91
+ reloadList.value = !reloadList.value;
92
+ });
93
+ watch(searchPattern, () => {
94
+ emit('update:query', searchPattern.value);
95
+ });
96
+
97
+ //Methods
98
+ function onCategorySelected(category: Category | undefined): void {
99
+ iabId.value = category?.id ? category.id : undefined;
100
+ }
101
+ function fetch(podcasts: Array<Podcast>): void {
102
+ emit("fetch", podcasts);
103
+ }
98
104
  </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
+ alt=""
18
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">