@saooti/octopus-sdk 40.2.19 → 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 +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
@@ -3,7 +3,7 @@
3
3
  <ClassicSelect
4
4
  :text-init="rubriquageIdSelected"
5
5
  id-select="rubrique-choice-select"
6
- :label="$t('Topics')"
6
+ :label="t('Topics')"
7
7
  :display-label="false"
8
8
  class="flex-shrink-0"
9
9
  :options="rubriquageDisplayForSelect"
@@ -11,7 +11,7 @@
11
11
  />
12
12
  <template v-if="rubriquageIdSelected">
13
13
  <div class="ms-3 flex-shrink-0">
14
- {{ $t("By rubric") }}
14
+ {{ t("By rubric") }}
15
15
  </div>
16
16
  <RubriqueChooser
17
17
  v-if="getRubriquesLength(rubriquageIdSelected)"
@@ -22,7 +22,7 @@
22
22
  0 !== rubriqueIdSelected ? rubriqueIdSelected : undefined
23
23
  "
24
24
  :all-rubriques="getRubriques(rubriquageIdSelected)"
25
- :defaultanswer="$t('No rubric filter')"
25
+ :defaultanswer="t('No rubric filter')"
26
26
  :reset="reset"
27
27
  :without-rubrique="true"
28
28
  @selected="onRubriqueSelected"
@@ -39,76 +39,71 @@
39
39
  </div>
40
40
  </template>
41
41
 
42
- <script lang="ts">
42
+ <script setup lang="ts">
43
43
  import ClassicSelect from "../../form/ClassicSelect.vue";
44
44
  import TrashCanIcon from "vue-material-design-icons/TrashCan.vue";
45
45
  import { Rubriquage } from "@/stores/class/rubrique/rubriquage";
46
46
  import { Rubrique } from "@/stores/class/rubrique/rubrique";
47
- import { defineComponent, defineAsyncComponent } from "vue";
47
+ import { defineAsyncComponent, ref, computed } from "vue";
48
+ import { useI18n } from "vue-i18n";
48
49
  const RubriqueChooser = defineAsyncComponent(
49
50
  () => import("../rubriques/RubriqueChooser.vue"),
50
51
  );
51
- export default defineComponent({
52
- components: {
53
- RubriqueChooser,
54
- TrashCanIcon,
55
- ClassicSelect
56
- },
57
- props: {
58
- rubriquageDisplay: {
59
- default: () => [],
60
- type: Array as () => Array<Rubriquage>,
61
- },
62
- rubriquageIdSelected: { default: 0, type: Number },
63
- rubriqueIdSelected: { default: 0, type: Number },
64
- index: { default: 0, type: Number },
65
- },
66
- emits: ["deleteRubriqueChoice", "updateRubrique", "updateRubriquage"],
67
52
 
68
- data() {
69
- return {
70
- reset: false as boolean,
71
- };
72
- },
73
- computed:{
74
- rubriquageDisplayForSelect(){
75
- return this.rubriquageDisplay.map((rubriquage) => {
76
- return { title: rubriquage.title, value: rubriquage.rubriquageId };
77
- });
78
- }
53
+ //Props
54
+ const props = defineProps({
55
+ rubriquageDisplay: {
56
+ default: () => [],
57
+ type: Array as () => Array<Rubriquage>,
79
58
  },
59
+ rubriquageIdSelected: { default: 0, type: Number },
60
+ rubriqueIdSelected: { default: 0, type: Number },
61
+ index: { default: 0, type: Number },
62
+ })
80
63
 
64
+ //Emits
65
+ const emit = defineEmits(["deleteRubriqueChoice", "updateRubrique", "updateRubriquage"]);
81
66
 
82
- methods: {
83
- deleteRubriquage() {
84
- this.$emit("deleteRubriqueChoice");
85
- },
86
- getRubriquesLength(rubriquageId: number): number {
87
- return this.getRubriques(rubriquageId).length;
88
- },
89
- getRubriques(rubriquageId: number): Array<Rubrique> {
90
- const topicIndex = this.rubriquageDisplay.findIndex(
91
- (element: Rubriquage) => element.rubriquageId === rubriquageId,
92
- );
93
- return -1 !== topicIndex
94
- ? this.rubriquageDisplay[topicIndex].rubriques
95
- : [];
96
- },
97
- onRubriqueSelected(rubrique: Rubrique): void {
98
- if (rubrique.rubriqueId === this.rubriqueIdSelected) return;
99
- this.$emit("updateRubrique", {
100
- rubriqueId: rubrique.rubriqueId,
101
- index: this.index,
102
- });
103
- },
104
- onRubriquageSelected(newRubriquage: number): void {
105
- this.reset = !this.reset;
106
- this.$emit("updateRubriquage", {
107
- rubriquageId: newRubriquage,
108
- rubriqueId:0,
109
- index: this.index,
110
- });
111
- },
112
- },
67
+ //Data
68
+ const reset = ref(false);
69
+
70
+ //Composables
71
+ const { t } = useI18n();
72
+
73
+
74
+ //Computed
75
+ const rubriquageDisplayForSelect = computed(() => {
76
+ return props.rubriquageDisplay.map((rubriquage) => {
77
+ return { title: rubriquage.title, value: rubriquage.rubriquageId };
78
+ });
113
79
  });
80
+
81
+ //Methods
82
+ function deleteRubriquage() {
83
+ emit("deleteRubriqueChoice");
84
+ }
85
+ function getRubriquesLength(rubriquageId: number): number {
86
+ return getRubriques(rubriquageId).length;
87
+ }
88
+ function getRubriques(rubriquageId: number): Array<Rubrique> {
89
+ const topicIndex = props.rubriquageDisplay.findIndex(
90
+ (element: Rubriquage) => element.rubriquageId === rubriquageId,
91
+ );
92
+ return -1 !== topicIndex? props.rubriquageDisplay[topicIndex].rubriques: [];
93
+ }
94
+ function onRubriqueSelected(rubrique: Rubrique): void {
95
+ if (rubrique.rubriqueId === props.rubriqueIdSelected) return;
96
+ emit("updateRubrique", {
97
+ rubriqueId: rubrique.rubriqueId,
98
+ index: props.index,
99
+ });
100
+ }
101
+ function onRubriquageSelected(newRubriquage: number): void {
102
+ reset.value = !reset.value;
103
+ emit("updateRubriquage", {
104
+ rubriquageId: newRubriquage,
105
+ rubriqueId:0,
106
+ index: props.index,
107
+ });
108
+ }
114
109
  </script>
@@ -7,7 +7,7 @@
7
7
  v-model:text-init="isRubriquage"
8
8
  class="flex-shrink-0"
9
9
  id-checkbox="search-rubriquage-checkbox"
10
- :label="$t('By topic')"
10
+ :label="t('By topic')"
11
11
  />
12
12
  <div v-if="isRubriquage" class="d-flex ms-1 flex-column flex-grow-1">
13
13
  <RubriqueChoice
@@ -27,192 +27,177 @@
27
27
  class="btn mt-2"
28
28
  @click="addFilter"
29
29
  >
30
- {{ $t("Add a sort criterion by topic") }}
30
+ {{ t("Add a sort criterion by topic") }}
31
31
  </button>
32
32
  </div>
33
33
  </div>
34
34
  </template>
35
35
 
36
- <script lang="ts">
36
+ <script setup lang="ts">
37
37
  import { useRubriquesFilterParam } from "../../composable/route/useRubriquesFilterParam";
38
38
  import classicApi from "../../../api/classicApi";
39
39
  import ClassicCheckbox from "../../form/ClassicCheckbox.vue";
40
40
  import { Rubriquage } from "@/stores/class/rubrique/rubriquage";
41
41
  import { RubriquageFilter } from "@/stores/class/rubrique/rubriquageFilter";
42
42
  import { useFilterStore } from "../../../stores/FilterStore";
43
- import { mapState } from "pinia";
44
- import { defineComponent, defineAsyncComponent } from "vue";
43
+ import { defineAsyncComponent, ref, Ref, computed, watch, onBeforeMount } from "vue";
44
+ import { useI18n } from "vue-i18n";
45
45
  const RubriqueChoice = defineAsyncComponent(
46
46
  () => import("./RubriqueChoice.vue"),
47
47
  );
48
- export default defineComponent({
49
- components: {
50
- RubriqueChoice,
51
- ClassicCheckbox,
52
- },
53
- props: {
54
- organisationId: { default: undefined, type: String },
55
- rubriqueFilter: {
56
- default: () => [],
57
- type: Array as () => Array<RubriquageFilter>,
58
- },
59
- },
60
- emits: ["update:rubriqueFilter", "warning"],
61
48
 
62
- setup(){
63
- const { stringifyRubriquesFilter } = useRubriquesFilterParam();
64
- return { stringifyRubriquesFilter }
49
+ //Props
50
+ const props = defineProps({
51
+ organisationId: { default: undefined, type: String },
52
+ rubriqueFilter: {
53
+ default: () => [],
54
+ type: Array as () => Array<RubriquageFilter>,
65
55
  },
56
+ })
66
57
 
67
- data() {
68
- return {
69
- isRubriquage: false as boolean,
70
- internRubriqueFilter: [] as Array<RubriquageFilter>,
71
- rubriquageData: [] as Array<Rubriquage>,
72
- needToFetchRubrique: false as boolean,
73
- };
74
- },
58
+ //Emits
59
+ const emit = defineEmits(["update:rubriqueFilter", "warning"]);
75
60
 
76
- computed: {
77
- ...mapState(useFilterStore, ["filterRubrique", "filterOrgaId"]),
78
- organisation(): string | undefined {
79
- return this.organisationId ? this.organisationId : this.filterOrgaId;
80
- },
81
- availableRubriquage(): Array<Rubriquage> {
82
- return this.getAvailableRubriquage(this.internRubriqueFilter);
83
- },
84
- },
85
- watch: {
86
- organisation(): void {
87
- if (this.isRubriquage) {
88
- this.fetchTopics();
89
- } else {
90
- this.needToFetchRubrique = true;
91
- }
92
- },
93
- rubriqueFilter: {
94
- immediate: true,
95
- deep: true,
96
- handler() {
97
- this.isRubriquage = 0 !== this.rubriqueFilter?.length;
98
- if (
99
- this.rubriqueFilter &&
100
- this.stringifyRubriquesFilter(this.internRubriqueFilter) !==
101
- this.stringifyRubriquesFilter(this.rubriqueFilter)
102
- ) {
103
- this.internRubriqueFilter = this.rubriqueFilter;
104
- }
105
- },
106
- },
107
- isRubriquage(): void {
108
- if (this.needToFetchRubrique) {
109
- this.fetchTopics();
110
- }
111
- if (this.isRubriquage && 0 === this.internRubriqueFilter.length) {
112
- this.addFilter();
113
- }
114
- const value = this.isRubriquage ? this.internRubriqueFilter : [];
115
- if (
116
- this.stringifyRubriquesFilter(value) !==
117
- this.stringifyRubriquesFilter(this.rubriqueFilter)
118
- ) {
119
- this.$emit("update:rubriqueFilter", value);
120
- }
121
- },
122
- },
61
+ //Data
62
+ const isRubriquage = ref(false);
63
+ const internRubriqueFilter: Ref<Array<RubriquageFilter>> = ref([]);
64
+ const rubriquageData: Ref<Array<Rubriquage>> = ref([]);
65
+ const needToFetchRubrique = ref(false);
123
66
 
124
- created() {
125
- this.fetchTopics();
126
- },
127
- methods: {
128
- updateInternRubriqueFilter() {
129
- if (this.isRubriquage) {
130
- this.$emit("update:rubriqueFilter", this.internRubriqueFilter);
131
- } else {
132
- this.isRubriquage = true;
133
- }
134
- },
135
- addFilter(): void {
136
- if (this.availableRubriquage?.[0].rubriquageId) {
137
- this.internRubriqueFilter.push({
138
- rubriquageId: this.availableRubriquage[0].rubriquageId,
139
- rubriqueId: 0,
140
- nameRubriquage: this.rubriquageData[0].title,
141
- nameRubrique: "",
142
- });
143
- this.updateInternRubriqueFilter();
144
- }
145
- },
146
- deleteRubriqueChoice(index: number): void {
147
- this.internRubriqueFilter.splice(index, 1);
148
- this.updateInternRubriqueFilter();
149
- },
150
- getAvailableRubriquage(
151
- filterRubrique: Array<RubriquageFilter>,
152
- ): Array<Rubriquage> {
153
- if (filterRubrique.length) {
154
- const rubriquageIdToNotShow = filterRubrique.map((a) => a.rubriquageId);
155
- return this.rubriquageData.filter((element) => {
156
- if (element.rubriquageId) {
157
- return !rubriquageIdToNotShow.includes(element.rubriquageId);
158
- }
159
- });
160
- }
161
- return this.rubriquageData;
162
- },
163
- getRubriquage(index: number) {
164
- const elementToNotShow = Array.from(this.internRubriqueFilter);
165
- elementToNotShow.splice(index, 1);
166
- return this.getAvailableRubriquage(elementToNotShow);
167
- },
168
- updateRubrique(newValue: { rubriqueId: number; index: number }): void {
169
- const item = this.internRubriqueFilter[newValue.index];
170
- item.rubriqueId = newValue.rubriqueId;
171
- this.internRubriqueFilter.splice(newValue.index, 1, item);
172
- this.updateInternRubriqueFilter();
173
- },
174
- updateRubriquage(newValue: { rubriquageId: number; index: number }): void {
175
- const item = this.internRubriqueFilter[newValue.index];
176
- item.rubriquageId = newValue.rubriquageId;
177
- this.internRubriqueFilter.splice(newValue.index, 1, item);
178
- this.updateInternRubriqueFilter();
179
- },
180
- async fetchTopics(): Promise<void> {
181
- if (!this.organisation) return;
182
- this.needToFetchRubrique = false;
183
- const data = await classicApi.fetchData<Array<Rubriquage>>({
184
- api: 0,
185
- path: "rubriquage/find/" + this.organisation,
186
- specialTreatement: true,
187
- });
188
- this.rubriquageData = data.filter((element: Rubriquage) => {
189
- return element.rubriques.length;
190
- });
191
- if (0 === this.rubriquageData.length) {
192
- if (this.internRubriqueFilter.length) {
193
- this.internRubriqueFilter = [];
194
- this.updateInternRubriqueFilter();
195
- this.$emit("warning");
196
- }
197
- return;
198
- }
199
- const internRubriqueFilterToUpdate = [];
200
- for (const filter of this.internRubriqueFilter) {
201
- const rubriquageExist = this.rubriquageData.find(
202
- (element) => element.rubriquageId === filter.rubriquageId,
203
- );
204
- if (rubriquageExist) {
205
- internRubriqueFilterToUpdate.push(filter);
206
- }
207
- }
208
- if (
209
- internRubriqueFilterToUpdate.length !== this.internRubriqueFilter.length
210
- ) {
211
- this.internRubriqueFilter = internRubriqueFilterToUpdate;
212
- this.updateInternRubriqueFilter();
213
- this.$emit("warning");
214
- }
215
- },
216
- },
67
+ //Composables
68
+ const { t } = useI18n();
69
+ const { stringifyRubriquesFilter } = useRubriquesFilterParam();
70
+ const filterStore = useFilterStore();
71
+
72
+ //Computed
73
+ const organisation = computed(() => props.organisationId ? props.organisationId : filterStore.filterOrgaId);
74
+ const availableRubriquage = computed(() => getAvailableRubriquage(internRubriqueFilter.value));
75
+
76
+
77
+ //Watch
78
+ watch(organisation, () => {
79
+ if (isRubriquage.value) {
80
+ fetchTopics();
81
+ } else {
82
+ needToFetchRubrique.value = true;
83
+ }
84
+ });
85
+ watch(()=>props.rubriqueFilter, () => {
86
+ isRubriquage.value = 0 !== props.rubriqueFilter?.length;
87
+ if (
88
+ props.rubriqueFilter &&
89
+ stringifyRubriquesFilter(internRubriqueFilter.value) !==
90
+ stringifyRubriquesFilter(props.rubriqueFilter)
91
+ ) {
92
+ internRubriqueFilter.value = props.rubriqueFilter;
93
+ }
94
+ }, {deep: true,immediate: true});
95
+ watch(isRubriquage, () => {
96
+ if (needToFetchRubrique.value) {
97
+ fetchTopics();
98
+ }
99
+ if (isRubriquage.value && 0 === internRubriqueFilter.value.length) {
100
+ addFilter();
101
+ }
102
+ const value = isRubriquage.value ? internRubriqueFilter.value : [];
103
+ if (
104
+ stringifyRubriquesFilter(value) !==
105
+ stringifyRubriquesFilter(props.rubriqueFilter)
106
+ ) {
107
+ emit("update:rubriqueFilter", value);
108
+ }
217
109
  });
110
+
111
+
112
+ onBeforeMount(()=>fetchTopics())
113
+
114
+ //Methods
115
+ function updateInternRubriqueFilter() {
116
+ if (isRubriquage.value) {
117
+ emit("update:rubriqueFilter", internRubriqueFilter.value);
118
+ } else {
119
+ isRubriquage.value = true;
120
+ }
121
+ }
122
+ function addFilter(): void {
123
+ if (availableRubriquage.value?.[0].rubriquageId) {
124
+ internRubriqueFilter.value.push({
125
+ rubriquageId: availableRubriquage.value[0].rubriquageId,
126
+ rubriqueId: 0,
127
+ nameRubriquage: rubriquageData.value[0].title,
128
+ nameRubrique: "",
129
+ });
130
+ updateInternRubriqueFilter();
131
+ }
132
+ }
133
+ function deleteRubriqueChoice(index: number): void {
134
+ internRubriqueFilter.value.splice(index, 1);
135
+ updateInternRubriqueFilter();
136
+ }
137
+ function getAvailableRubriquage(
138
+ filterRubrique: Array<RubriquageFilter>,
139
+ ): Array<Rubriquage> {
140
+ if (filterRubrique.length) {
141
+ const rubriquageIdToNotShow = filterRubrique.map((a) => a.rubriquageId);
142
+ return rubriquageData.value.filter((element) => {
143
+ if (element.rubriquageId) {
144
+ return !rubriquageIdToNotShow.includes(element.rubriquageId);
145
+ }
146
+ });
147
+ }
148
+ return rubriquageData.value;
149
+ }
150
+ function getRubriquage(index: number) {
151
+ const elementToNotShow = Array.from(internRubriqueFilter.value);
152
+ elementToNotShow.splice(index, 1);
153
+ return getAvailableRubriquage(elementToNotShow);
154
+ }
155
+ function updateRubrique(newValue: { rubriqueId: number; index: number }): void {
156
+ const item = internRubriqueFilter.value[newValue.index];
157
+ item.rubriqueId = newValue.rubriqueId;
158
+ internRubriqueFilter.value.splice(newValue.index, 1, item);
159
+ updateInternRubriqueFilter();
160
+ }
161
+ function updateRubriquage(newValue: { rubriquageId: number; index: number }): void {
162
+ const item = internRubriqueFilter.value[newValue.index];
163
+ item.rubriquageId = newValue.rubriquageId;
164
+ internRubriqueFilter.value.splice(newValue.index, 1, item);
165
+ updateInternRubriqueFilter();
166
+ }
167
+ async function fetchTopics(): Promise<void> {
168
+ if (!organisation.value) return;
169
+ needToFetchRubrique.value = false;
170
+ const data = await classicApi.fetchData<Array<Rubriquage>>({
171
+ api: 0,
172
+ path: "rubriquage/find/" + organisation.value,
173
+ specialTreatement: true,
174
+ });
175
+ rubriquageData.value = data.filter((element: Rubriquage) => {
176
+ return element.rubriques.length;
177
+ });
178
+ if (0 === rubriquageData.value.length) {
179
+ if (internRubriqueFilter.value.length) {
180
+ internRubriqueFilter.value = [];
181
+ updateInternRubriqueFilter();
182
+ emit("warning");
183
+ }
184
+ return;
185
+ }
186
+ const internRubriqueFilterToUpdate = [];
187
+ for (const filter of internRubriqueFilter.value) {
188
+ const rubriquageExist = rubriquageData.value.find(
189
+ (element) => element.rubriquageId === filter.rubriquageId,
190
+ );
191
+ if (rubriquageExist) {
192
+ internRubriqueFilterToUpdate.push(filter);
193
+ }
194
+ }
195
+ if (
196
+ internRubriqueFilterToUpdate.length !== internRubriqueFilter.value.length
197
+ ) {
198
+ internRubriqueFilter.value = internRubriqueFilterToUpdate;
199
+ updateInternRubriqueFilter();
200
+ emit("warning");
201
+ }
202
+ }
218
203
  </script>
@@ -3,48 +3,48 @@
3
3
  :text-init="sort"
4
4
  id-radio="sort-radio"
5
5
  :options="optionsArray"
6
- :radio-label="$t('Sort')"
6
+ :radio-label="t('Sort')"
7
7
  class-label="text-primary mb-2"
8
8
  :type-tag="typeTag"
9
9
  class="flex-grow-1"
10
- @update:text-init="$emit('update:sort', $event)"
10
+ @update:text-init="emit('update:sort', $event)"
11
11
  />
12
12
  </template>
13
- <script lang="ts">
13
+ <script setup lang="ts">
14
+ import { useI18n } from "vue-i18n";
14
15
  import ClassicRadioLabel from "../../form/ClassicRadioLabel.vue";
15
- import { defineComponent } from "vue";
16
- export default defineComponent({
17
- components: {
18
- ClassicRadioLabel,
19
- },
20
- props: {
21
- isEmission: { default: false, type: Boolean },
22
- sort: { default: "DATE", type: String },
23
- typeTag: { default: "fieldset", type: String },
24
- },
16
+ import { computed } from "vue";
25
17
 
26
- emits: ["update:sort"],
27
- data() {
28
- return {};
29
- },
30
- computed: {
31
- optionsArray() {
32
- const options = [
33
- { title: this.$t("Sort score"), value: "SCORE" },
34
- {
35
- title: this.$t("Sort last"),
36
- value: this.isEmission ? "LAST_PODCAST_DESC" : "DATE",
37
- },
38
- { title: this.$t("Sort name"), value: "NAME" },
39
- ];
40
- if (!this.isEmission) {
41
- options.splice(2, 0, {
42
- title: this.$t("Chronological"),
43
- value: "DATE_ASC",
44
- });
45
- }
46
- return options;
18
+ //Props
19
+ const props = defineProps({
20
+ isEmission: { default: false, type: Boolean },
21
+ sort: { default: "DATE", type: String },
22
+ typeTag: { default: "fieldset", type: String },
23
+ })
24
+
25
+ //Emits
26
+ const emit = defineEmits(["update:sort"]);
27
+
28
+ //Composables
29
+ const { t } = useI18n();
30
+
31
+ //Computed
32
+ const optionsArray = computed(() => {
33
+ const options = [
34
+ { title: t("Sort score"), value: "SCORE" },
35
+ {
36
+ title: t("Sort last"),
37
+ value: props.isEmission ? "LAST_PODCAST_DESC" : "DATE",
47
38
  },
48
- },
39
+ { title: t("Sort name"), value: "NAME" },
40
+ ];
41
+ if (!props.isEmission) {
42
+ options.splice(2, 0, {
43
+ title: t("Chronological"),
44
+ value: "DATE_ASC",
45
+ });
46
+ }
47
+ return options;
49
48
  });
49
+
50
50
  </script>