@saooti/octopus-sdk 40.2.19 → 41.0.1-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 +2 -3
  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 +57 -69
  32. package/src/components/display/emission/EmissionList.vue +192 -218
  33. package/src/components/display/emission/EmissionPlayerItem.vue +47 -64
  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 +39 -50
  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 +210 -222
  58. package/src/components/display/organisation/OrganisationChooser.vue +116 -122
  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 +48 -50
  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 +184 -207
  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 +26 -31
  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 +83 -105
  143. package/src/components/misc/MobileMenu.vue +101 -111
  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 +114 -133
  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 +99 -132
  176. package/src/components/pages/EmissionsPage.vue +2 -0
  177. package/src/components/pages/Error403Page.vue +21 -20
  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 +82 -110
  184. package/src/components/pages/ParticipantsPage.vue +3 -0
  185. package/src/components/pages/PlaylistPage.vue +97 -115
  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
@@ -22,8 +22,9 @@
22
22
  </div>
23
23
  </template>
24
24
 
25
- <script lang="ts">
26
- import { defineAsyncComponent, defineComponent } from "vue";
25
+ <script setup lang="ts">
26
+ import { computed, defineAsyncComponent, useTemplateRef } from "vue";
27
+ import { useI18n } from "vue-i18n";
27
28
  const ThumbUpIcon = defineAsyncComponent(
28
29
  () => import("vue-material-design-icons/ThumbUp.vue"),
29
30
  );
@@ -39,46 +40,40 @@ const ThumbDownOutlineIcon = defineAsyncComponent(
39
40
  const SnackBar = defineAsyncComponent(
40
41
  () => import("../../../misc/SnackBar.vue"),
41
42
  );
42
- export default defineComponent({
43
- name: "LikeButton",
44
-
45
- components: {
46
- SnackBar,
47
- ThumbUpOutlineIcon,
48
- ThumbDownOutlineIcon,
49
- ThumbDownIcon,
50
- ThumbUpIcon,
51
- },
52
- props: {
53
- like: { default: true, type: Boolean },
54
- isActive: { default: false, type: Boolean },
55
- canInteract: { default: false, type: Boolean },
56
- },
57
-
58
- emits: ["like-action"],
59
- computed: {
60
- actionName(): string {
61
- if (this.like) {
62
- return this.isActive ? "dislike" : "like";
63
- }
64
- return this.isActive ? "like" : "dislike";
65
- },
66
- titleButton(): string {
67
- return this.like ? this.$t("Like") : this.$t("Dislike");
68
- },
69
- },
70
- methods: {
71
- clickButton() {
72
- if (this.canInteract) {
73
- this.$emit("like-action", this.actionName);
74
- } else {
75
- (this.$refs.snackbar as InstanceType<typeof SnackBar>).open(
76
- this.$t("Log in to access this service"),
77
- );
78
- }
79
- },
80
- },
43
+
44
+ //Props
45
+ const props = defineProps({
46
+ like: { default: true, type: Boolean },
47
+ isActive: { default: false, type: Boolean },
48
+ canInteract: { default: false, type: Boolean },
49
+ })
50
+
51
+ //Emits
52
+ const emit = defineEmits(["like-action"]);
53
+
54
+ //Data
55
+ const snackBarRef = useTemplateRef('snackbar');
56
+
57
+ //Composables
58
+ const { t } = useI18n();
59
+
60
+ //Computed
61
+ const actionName = computed(() => {
62
+ if (props.like) {
63
+ return props.isActive ? "dislike" : "like";
64
+ }
65
+ return props.isActive ? "like" : "dislike";
81
66
  });
67
+ const titleButton = computed(() => props.like ? t("Like") : t("Dislike"));
68
+
69
+ //Methods
70
+ function clickButton() {
71
+ if (props.canInteract) {
72
+ emit("like-action", actionName.value);
73
+ } else {
74
+ (snackBarRef?.value as InstanceType<typeof SnackBar>).open(t("Log in to access this service"));
75
+ }
76
+ }
82
77
  </script>
83
78
  <style lang="scss">
84
79
  @use "sass:color";
@@ -2,7 +2,7 @@
2
2
  <div class="d-flex align-items-center mt-1">
3
3
  <CheckIdentityModal
4
4
  v-if="isCheckIdentityActions"
5
- :title="$t('Welcome, thanks for your interaction')"
5
+ :title="t('Welcome, thanks for your interaction')"
6
6
  @validate="likeActions(isCheckIdentityActions)"
7
7
  @close="isCheckIdentityActions = undefined"
8
8
  />
@@ -22,160 +22,152 @@
22
22
  </div>
23
23
  </template>
24
24
 
25
- <script lang="ts">
26
- import { defineComponent, defineAsyncComponent } from "vue";
25
+ <script setup lang="ts">
26
+ import { defineAsyncComponent, Ref, ref, computed, onBeforeMount } from "vue";
27
27
  import classicApi from "../../../../api/classicApi";
28
28
  import { useCommentStore } from "../../../../stores/CommentStore";
29
29
  import { useAuthStore } from "../../../../stores/AuthStore";
30
- import { mapActions, mapState } from "pinia";
31
30
  import {
32
31
  CommentFeelings,
33
32
  CommentPodcast,
34
33
  } from "@/stores/class/general/comment";
35
34
  import { CommentsConfig } from "@/stores/class/config/commentsConfig";
36
35
  import { Podcast } from "@/stores/class/general/podcast";
36
+ import { useI18n } from "vue-i18n";
37
37
  const CheckIdentityModal = defineAsyncComponent(
38
38
  () => import("../modal/CheckIdentityModal.vue"),
39
39
  );
40
40
  const LikeButton = defineAsyncComponent(() => import("./LikeButton.vue"));
41
- export default defineComponent({
42
- name: "LikeSection",
43
41
 
44
- components: {
45
- CheckIdentityModal,
46
- LikeButton,
47
- },
42
+ //Props
43
+ const props = defineProps({
44
+ comment: { default: () => undefined, type: Object as () => CommentPodcast },
45
+ editRight: { default: false, type: Boolean },
46
+ podcast: { default: undefined, type: Object as () => Podcast },
47
+ })
48
48
 
49
- props: {
50
- comment: { default: () => undefined, type: Object as () => CommentPodcast },
51
- editRight: { default: false, type: Boolean },
52
- podcast: { default: undefined, type: Object as () => Podcast },
53
- },
49
+ //Emits
50
+ const emit = defineEmits(["deleteComment", "update:comment"]);
54
51
 
55
- emits: ["deleteComment", "update:comment"],
52
+ //Data
53
+ const isCheckIdentityActions: Ref<string | undefined> = ref(undefined);
54
+ const userFeeling: Ref<string | undefined> = ref(undefined);
55
+ const config: Ref<CommentsConfig | undefined> = ref(undefined);
56
+ const podcastFeeling: Ref<CommentFeelings | undefined> = ref(undefined);
56
57
 
57
- data() {
58
- return {
59
- isCheckIdentityActions: undefined as string | undefined,
60
- userFeeling: undefined as string | undefined,
61
- config: undefined as CommentsConfig | undefined,
62
- podcastFeeling: undefined as CommentFeelings | undefined,
63
- };
64
- },
65
- computed: {
66
- ...mapState(useAuthStore, ["authOrgaId"]),
67
- ...mapState(useCommentStore, ["commentUser"]),
68
- configToApply() {
69
- if (this.comment) {
70
- return this.config?.commentLikes;
71
- }
72
- return this.config?.podcastLikes;
73
- },
74
- podcastId(): number {
75
- return this.podcast?.podcastId ?? 0;
76
- },
77
- feelingSection() {
78
- return [
79
- {
80
- name: "like",
81
- counter: this.comment?.likes ?? this.podcastFeeling?.likesCount,
82
- condition: this.configToApply?.likeEnabled ?? false,
83
- },
84
- {
85
- name: "dislike",
86
- counter: this.editRight
87
- ? (this.comment?.dislikes ?? this.podcastFeeling?.dislikesCount)
88
- : 0,
89
- condition: this.configToApply?.dislikeEnabled ?? false,
90
- },
91
- ];
92
- },
93
- canLikeOrDislike(): boolean {
94
- return (
95
- !this.configToApply?.authRequired ||
96
- (this.configToApply.authRequired && undefined !== this.authOrgaId)
97
- );
98
- },
99
- },
100
- created() {
101
- this.initLikeConfig();
102
- },
103
- methods: {
104
- ...mapActions(useCommentStore, ["getCommentsConfig"]),
105
- async initLikeConfig() {
106
- if (!this.podcast) {
107
- return;
108
- }
109
- this.config = await this.getCommentsConfig(this.podcast);
110
- if (
111
- this.comment ||
112
- (!this.config.podcastLikes.likeEnabled &&
113
- !this.config.podcastLikes.dislikeEnabled)
114
- ) {
115
- return;
116
- }
117
- await this.fetchPodcastCounters();
118
- },
119
- async fetchPodcastCounters() {
120
- const data = await classicApi.fetchData<{
121
- [key: number]: CommentFeelings;
122
- }>({
123
- api: 2,
124
- path: "podcast/status",
125
- parameters: {
126
- podcastId: [this.podcastId],
127
- uuid: this.commentUser?.uuid,
128
- },
129
- isNotAuth: true,
130
- });
131
- this.podcastFeeling = data[this.podcastId];
132
- if ("LIKED" === this.podcastFeeling.feeling) {
133
- this.userFeeling = "like";
134
- } else if ("DISLIKED" === this.podcastFeeling.feeling) {
135
- this.userFeeling = "dislike";
136
- }
58
+
59
+ //Composables
60
+ const { t } = useI18n();
61
+ const authStore = useAuthStore();
62
+ const commentStore = useCommentStore();
63
+
64
+ //Computed
65
+ const configToApply = computed(() => {
66
+ if (props.comment) {
67
+ return config.value?.commentLikes;
68
+ }
69
+ return config.value?.podcastLikes;
70
+ });
71
+ const podcastId = computed(() => props.podcast?.podcastId ?? 0);
72
+ const feelingSection = computed(() => {
73
+ return [
74
+ {
75
+ name: "like",
76
+ counter: props.comment?.likes ?? podcastFeeling.value?.likesCount,
77
+ condition: configToApply.value?.likeEnabled ?? false,
137
78
  },
138
- transformInThousands(nb: number) {
139
- if (nb >= 1000) {
140
- return Math.round(nb / 100) / 10 + "k";
141
- }
142
- return nb.toString();
79
+ {
80
+ name: "dislike",
81
+ counter: props.editRight
82
+ ? (props.comment?.dislikes ?? podcastFeeling.value?.dislikesCount)
83
+ : 0,
84
+ condition: configToApply.value?.dislikeEnabled ?? false,
143
85
  },
144
- async initiateLikeActions(actionName: string) {
145
- if (!this.commentUser?.name) {
146
- this.isCheckIdentityActions = actionName;
147
- return;
148
- }
149
- this.likeActions(actionName);
86
+ ];
87
+ });
88
+ const canLikeOrDislike = computed(() => {
89
+ return (
90
+ !configToApply.value?.authRequired ||
91
+ (configToApply.value.authRequired && undefined !== authStore.authOrgaId)
92
+ );
93
+ });
94
+
95
+ onBeforeMount(()=>initLikeConfig())
96
+
97
+
98
+ //Methods
99
+ async function initLikeConfig() {
100
+ if (!props.podcast) {
101
+ return;
102
+ }
103
+ config.value = await commentStore.getCommentsConfig(props.podcast);
104
+ if (
105
+ props.comment ||
106
+ (!config.value.podcastLikes.likeEnabled &&
107
+ !config.value.podcastLikes.dislikeEnabled)
108
+ ) {
109
+ return;
110
+ }
111
+ await fetchPodcastCounters();
112
+ }
113
+ async function fetchPodcastCounters() {
114
+ const data = await classicApi.fetchData<{
115
+ [key: number]: CommentFeelings;
116
+ }>({
117
+ api: 2,
118
+ path: "podcast/status",
119
+ parameters: {
120
+ podcastId: [podcastId.value],
121
+ uuid: commentStore.commentUser?.uuid,
150
122
  },
151
- async likeActions(actionName: string) {
152
- const prefix = this.comment ? "comment/" : "podcast/";
153
- const data = await classicApi.putData<{
154
- [key: number]: CommentFeelings;
155
- }>({
156
- api: 2,
157
- path: prefix + actionName,
158
- dataToSend: {
159
- ids: [this.comment?.commentId ?? this.podcastId],
160
- name: this.commentUser?.name,
161
- uuid: this.commentUser?.uuid,
162
- },
163
- isNotAuth: true,
164
- });
165
- if (this.comment) {
166
- this.$emit("update:comment", {
167
- ...this.comment,
168
- ...{
169
- likes: data[this.comment.commentId].likesCount,
170
- dislikes: data[this.comment.commentId].dislikesCount,
171
- },
172
- });
173
- } else {
174
- this.podcastFeeling = data[this.podcastId];
175
- }
176
- this.userFeeling = this.userFeeling ? undefined : actionName;
177
- this.isCheckIdentityActions = undefined;
123
+ isNotAuth: true,
124
+ });
125
+ podcastFeeling.value = data[podcastId.value];
126
+ if ("LIKED" === podcastFeeling.value.feeling) {
127
+ userFeeling.value = "like";
128
+ } else if ("DISLIKED" === podcastFeeling.value.feeling) {
129
+ userFeeling.value = "dislike";
130
+ }
131
+ }
132
+ function transformInThousands(nb: number) {
133
+ if (nb >= 1000) {
134
+ return Math.round(nb / 100) / 10 + "k";
135
+ }
136
+ return nb.toString();
137
+ }
138
+ async function initiateLikeActions(actionName: string) {
139
+ if (!commentStore.commentUser?.name) {
140
+ isCheckIdentityActions.value = actionName;
141
+ return;
142
+ }
143
+ likeActions(actionName);
144
+ }
145
+ async function likeActions(actionName: string) {
146
+ const prefix = props.comment ? "comment/" : "podcast/";
147
+ const data = await classicApi.putData<{
148
+ [key: number]: CommentFeelings;
149
+ }>({
150
+ api: 2,
151
+ path: prefix + actionName,
152
+ dataToSend: {
153
+ ids: [props.comment?.commentId ?? podcastId.value],
154
+ name: commentStore.commentUser?.name,
155
+ uuid: commentStore.commentUser?.uuid,
178
156
  },
179
- },
180
- });
157
+ isNotAuth: true,
158
+ });
159
+ if (props.comment) {
160
+ emit("update:comment", {
161
+ ...props.comment,
162
+ ...{
163
+ likes: data[props.comment.commentId].likesCount,
164
+ dislikes: data[props.comment.commentId].dislikesCount,
165
+ },
166
+ });
167
+ } else {
168
+ podcastFeeling.value = data[podcastId.value];
169
+ }
170
+ userFeeling.value = userFeeling.value ? undefined : actionName;
171
+ isCheckIdentityActions.value = undefined;
172
+ }
181
173
  </script>
@@ -3,7 +3,7 @@
3
3
  id-modal="check-identity-modal"
4
4
  :title-modal="titleModal"
5
5
  :disable-validate="errorName"
6
- @close="$emit('close')"
6
+ @close="emit('close')"
7
7
  @validate="updateName"
8
8
  >
9
9
  <template #form>
@@ -11,52 +11,47 @@
11
11
  v-model:text-init="name"
12
12
  v-model:error-variable="errorName"
13
13
  input-id="adserver-tag"
14
- :label="$t('Let\'s get acquainted :')"
15
- :max-length="maxName"
16
- :placeholder="$t('Your name')"
17
- autocomplete="name"
14
+ :label="t('Let\'s get acquainted :')"
15
+ :max-length="Constants.MAX_COMMENT_NAME"
16
+ :placeholder="t('Your name')"
17
+ autocomplete-type="name"
18
18
  />
19
19
  </template>
20
20
  </RecaptchaModal>
21
21
  </template>
22
22
 
23
- <script lang="ts">
23
+ <script setup lang="ts">
24
24
  import Constants from "../../../../../public/config";
25
25
  import ClassicInputText from "../../../form/ClassicInputText.vue";
26
26
  import RecaptchaModal from "./RecaptchaModal.vue";
27
- import { mapActions } from "pinia";
28
- import { defineComponent } from "vue";
27
+ import { computed, Ref, ref } from "vue";
29
28
  import { useCommentStore } from "../../../../stores/CommentStore";
30
- export default defineComponent({
31
- name: "CheckIdentityModal",
32
- components: {
33
- RecaptchaModal,
34
- ClassicInputText,
35
- },
36
- props: {
37
- title: { default: undefined, type: String },
38
- },
39
-
40
- emits: ["close", "validate"],
41
-
42
- data() {
43
- return {
44
- name: undefined as string | undefined,
45
- errorName: true as boolean,
46
- maxName: Constants.MAX_COMMENT_NAME as number,
47
- };
48
- },
49
- computed: {
50
- titleModal(): string {
51
- return this.title ?? this.$t("Welcome, thanks for your comment");
52
- },
53
- },
54
- methods: {
55
- ...mapActions(useCommentStore, ["setCommentUser"]),
56
- updateName(): void {
57
- this.setCommentUser(this.name ?? "");
58
- this.$emit("validate");
59
- },
60
- },
61
- });
29
+ import { useI18n } from "vue-i18n";
30
+
31
+
32
+ //Props
33
+ const props = defineProps({
34
+ title: { default: undefined, type: String },
35
+ })
36
+
37
+ //Emits
38
+ const emit = defineEmits(["close", "validate"]);
39
+
40
+ //Data
41
+ const errorName = ref(true);
42
+ const name: Ref<string | undefined> = ref(undefined);
43
+
44
+ //Composables
45
+ const { t } = useI18n();
46
+ const commentStore = useCommentStore();
47
+
48
+
49
+ //Computed
50
+ const titleModal = computed(() => props.title ?? t("Welcome, thanks for your comment"));
51
+
52
+ //Methods
53
+ function updateName(): void {
54
+ commentStore.setCommentUser(name.value ?? "");
55
+ emit("validate");
56
+ }
62
57
  </script>