@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
@@ -17,53 +17,45 @@
17
17
  </div>
18
18
  </template>
19
19
 
20
- <script lang="ts">
20
+ <script setup lang="ts">
21
21
  import downloadHelper from "../../helper/downloadHelper";
22
22
  import classicApi from "../../api/classicApi";
23
23
  import { Contract } from "../../stores/class/contract/contract";
24
- import { defineAsyncComponent, defineComponent } from "vue";
24
+ import { defineAsyncComponent, onMounted, ref, Ref } from "vue";
25
25
  import { useApiStore } from "../../stores/ApiStore";
26
- import { mapState } from "pinia";
27
26
  const ContractPreviewModal = defineAsyncComponent(
28
27
  () => import("./modal/ContractPreviewModal.vue"),
29
28
  );
30
- export default defineComponent({
31
- name: "FooterGarSection",
32
- components: {
33
- ContractPreviewModal,
34
- },
35
- props: {
36
- authOrgaId: { default: undefined, type: String },
37
- },
38
29
 
39
- data() {
40
- return {
41
- contracts: [] as Array<Contract>,
42
- contractToDisplay: undefined as Contract | undefined,
43
- };
44
- },
45
- computed: {
46
- ...mapState(useApiStore, ["keycloakUrl"]),
47
- },
48
- created() {
49
- this.fetchContracts();
50
- },
51
- methods: {
52
- async fetchContracts() {
53
- if (!this.authOrgaId) {
54
- return;
55
- }
56
- this.contracts = await classicApi.fetchData({
57
- api: 3,
58
- path: `contract/query/organisation/${this.authOrgaId}?signedStatus=SIGNED`,
59
- });
60
- },
61
- downloadContract(contract: Contract) {
62
- if (contract) {
63
- const url = this.keycloakUrl + "contract/" + contract.id;
64
- downloadHelper.onDownload(url, "download" + contract.name + ".pdf");
65
- }
66
- },
67
- },
68
- });
30
+ //Props
31
+ const props = defineProps({
32
+ authOrgaId: { default: undefined, type: String },
33
+ })
34
+
35
+
36
+ //Data
37
+ const contractToDisplay: Ref<Contract | undefined> = ref(undefined);
38
+ const contracts: Ref<Array<Contract>> = ref([]);
39
+
40
+ //Composables
41
+ const apiStore = useApiStore();
42
+
43
+ onMounted(()=>fetchContracts())
44
+
45
+ //Methods
46
+ async function fetchContracts() {
47
+ if (!props.authOrgaId) {
48
+ return;
49
+ }
50
+ contracts.value = await classicApi.fetchData({
51
+ api: 3,
52
+ path: `contract/query/organisation/${props.authOrgaId}?signedStatus=SIGNED`,
53
+ });
54
+ }
55
+ function downloadContract(contract: Contract) {
56
+ if (contract) {
57
+ const url = apiStore.keycloakUrl + "contract/" + contract.id;
58
+ downloadHelper.onDownload(url, "download" + contract.name + ".pdf");
59
+ }
60
+ }
69
61
  </script>
@@ -5,12 +5,12 @@
5
5
  role="contentinfo"
6
6
  class="d-flex align-items-center justify-content-between border-top mt-auto"
7
7
  >
8
- <div v-if="!isPodcastmaker" class="d-flex flex-column px-1">
8
+ <div v-if="!state.generalParameters.podcastmaker" class="d-flex flex-column px-1">
9
9
  <div class="text-dark my-1 special-select-align-magic-trick">
10
10
  &copy; Saooti 2025
11
11
  </div>
12
- <FooterGarSection v-if="isGarRole" :auth-orga-id="authOrgaId" />
13
- <nav :aria-label="$t('Site menu')">
12
+ <FooterGarSection v-if="authStore.isGarRole" :auth-orga-id="authStore.authOrgaId" />
13
+ <nav :aria-label="t('Site menu')">
14
14
  <ul class="p-0 m-0">
15
15
  <li
16
16
  v-for="link in routerLinkSecondArray"
@@ -30,7 +30,7 @@
30
30
  v-model:text-init="language"
31
31
  :display-label="false"
32
32
  id-select="language-chooser-select"
33
- :label="$t('Change locale')"
33
+ :label="t('Change locale')"
34
34
  :transparent="true"
35
35
  :options="[
36
36
  { title: 'Deutsch', value: 'de' },
@@ -43,11 +43,11 @@
43
43
  class="my-1"
44
44
  />
45
45
  <OrganisationChooserLight
46
- v-if="!isPodcastmaker && organisationId && authenticated"
46
+ v-if="!state.generalParameters.podcastmaker && organisationId && authenticated"
47
47
  page="footer"
48
48
  width="auto"
49
49
  class="my-1"
50
- :defaultanswer="$t('No organisation filter')"
50
+ :defaultanswer="t('No organisation filter')"
51
51
  :value="organisationId"
52
52
  :reset="reset"
53
53
  @selected="onOrganisationSelected"
@@ -55,16 +55,16 @@
55
55
  </div>
56
56
  <div class="d-flex align-items-center">
57
57
  <div class="hosted-by">
58
- {{ $t("Hosted by") }}<span class="ms-1 me-1 text-primary">Saooti</span>
58
+ {{ t("Hosted by") }}<span class="ms-1 me-1 text-primary">Saooti</span>
59
59
  </div>
60
60
 
61
- <AcpmImage v-if="isGarRole" />
61
+ <AcpmImage v-if="authStore.isGarRole" />
62
62
  <a
63
63
  v-else
64
64
  href="https://www.acpm.fr/L-ACPM/Certifications-et-Labels/Les-Podcasts"
65
65
  rel="noreferrer noopener"
66
66
  target="_blank"
67
- :title="$t('New window', {text: $t('Octopus is ACPM Podcast accredited')})"
67
+ :title="t('New window', {text: t('Octopus is ACPM Podcast accredited')})"
68
68
  >
69
69
  <AcpmImage />
70
70
  </a>
@@ -72,7 +72,7 @@
72
72
  </footer>
73
73
  </template>
74
74
 
75
- <script lang="ts">
75
+ <script setup lang="ts">
76
76
  import cookiesHelper from "../../helper/cookiesHelper";
77
77
  import { useRubriquesFilterComputed } from "../composable/route/useRubriquesFilterComputed";
78
78
  import ClassicSelect from "../form/ClassicSelect.vue";
@@ -83,136 +83,115 @@ import classicApi from "../../api/classicApi";
83
83
  import { useFilterStore } from "../../stores/FilterStore";
84
84
  import { useGeneralStore } from "../../stores/GeneralStore";
85
85
  import { useAuthStore } from "../../stores/AuthStore";
86
- import { mapState, mapActions } from "pinia";
87
86
  import { Category } from "@/stores/class/general/category";
88
- import { defineAsyncComponent, defineComponent } from "vue";
87
+ import { computed, defineAsyncComponent, Ref, ref, watch } from "vue";
89
88
  import { Organisation } from "@/stores/class/general/organisation";
89
+ import { useI18n } from "vue-i18n";
90
+ import { useRoute, useRouter } from "vue-router";
90
91
  const OrganisationChooserLight = defineAsyncComponent(
91
92
  () => import("../display/organisation/OrganisationChooserLight.vue"),
92
93
  );
93
94
  const FooterGarSection = defineAsyncComponent(
94
95
  () => import("./FooterGarSection.vue"),
95
96
  );
96
- export default defineComponent({
97
- name: "FooterSection",
98
- components: {
99
- ClassicSelect,
100
- AcpmImage,
101
- OrganisationChooserLight,
102
- FooterGarSection,
103
- },
97
+ const i18n = useI18n();
98
+ const { t, locale } = useI18n();
104
99
 
105
- setup(){
106
- const { rubriqueQueryParam } = useRubriquesFilterComputed();
107
- return { rubriqueQueryParam }
108
- },
109
- data() {
110
- return {
111
- language: this.$i18n.locale,
112
- organisationId: undefined as string | undefined,
113
- reset: false as boolean,
114
- };
115
- },
116
- computed: {
117
- ...mapState(useGeneralStore, ["storedCategories", "platformEducation"]),
118
- ...mapState(useFilterStore, ["filterOrgaId", "filterIab"]),
119
- ...mapState(useAuthStore, ["isGarRole", "authOrgaId"]),
120
- authenticated() {
121
- return undefined !== this.authOrgaId;
122
- },
123
- routerLinkSecondArray() {
124
- const links = [];
125
- if (!this.isGarRole) {
126
- links.push(
127
- { title: this.$t("Contact"), routeName: "/main/pub/contact" },
128
- {
129
- title: this.$t("Used libraries"),
130
- routeName: "/main/pub/libraries",
131
- },
132
- { title: this.$t("Term of use"), routeName: "/main/pub/cgu" },
133
- );
134
- }
135
- links.push({ title: this.$t("Site map"), routeName: "/main/pub/map" });
136
- return links;
137
- },
138
- isPodcastmaker(): boolean {
139
- return state.generalParameters.podcastmaker as boolean;
140
- },
141
- },
142
- watch: {
143
- language() {
144
- this.changeLanguage();
145
- },
146
- filterOrgaId: {
147
- immediate: true,
148
- handler() {
149
- if (this.filterOrgaId) {
150
- this.organisationId = this.filterOrgaId;
151
- } else {
152
- this.reset = !this.reset;
153
- }
154
- },
155
- },
156
- },
157
- methods: {
158
- ...mapActions(useGeneralStore, ["storedUpdateCategories"]),
159
- ...mapActions(useFilterStore, ["filterUpdateIab"]),
160
- getQueriesRouter(routeName: string) {
161
- if (
162
- "podcasts" !== routeName &&
163
- "emissions" !== routeName &&
164
- "home" !== routeName
165
- ) {
166
- return { productor: this.filterOrgaId };
167
- }
168
- return {
169
- productor: this.filterOrgaId,
170
- iabId: this.filterIab?.id,
171
- rubriquesId: this.rubriqueQueryParam,
172
- };
173
- },
174
- changeLanguage(): void {
175
- cookiesHelper.setCookie("octopus-language", this.language);
176
- loadLocaleMessages(
177
- this.$i18n,
178
- this.language,
179
- this.authenticated,
180
- this.platformEducation,
181
- );
182
- classicApi
183
- .fetchData<Array<Category>>({
184
- api: 0,
185
- path: `iab/list${this.authOrgaId ? "/" + this.authOrgaId : ""}`,
186
- parameters: { lang: this.$i18n.locale },
187
- })
188
- .then((data: Array<Category>) => {
189
- this.storedUpdateCategories(data);
190
- if (this.filterIab) {
191
- const category = this.storedCategories.filter((c: Category) => {
192
- return c.id === this.filterIab?.id;
193
- });
194
- if (category.length) {
195
- this.filterUpdateIab(category[0]);
196
- }
197
- }
198
- });
199
- },
200
- async onOrganisationSelected(
201
- organisation: Organisation | undefined,
202
- ): Promise<void> {
203
- if (organisation?.id) {
204
- this.$router.push({
205
- query: { ...this.$route.query, ...{ productor: organisation.id, o:undefined } },
206
- });
207
- }else{
208
- this.organisationId = undefined;
209
- this.$router.push({
210
- query: { ...this.$route.query, ...{ productor: undefined } },
211
- });
212
- }
213
- },
214
- },
100
+ //Data
101
+ const language = ref(locale);
102
+ const reset = ref(false);
103
+ const organisationId: Ref<string | undefined> = ref(undefined);
104
+
105
+ //Composables
106
+ const { rubriqueQueryParam } = useRubriquesFilterComputed();
107
+ const generalStore = useGeneralStore();
108
+ const filterStore = useFilterStore();
109
+ const authStore = useAuthStore();
110
+ const router = useRouter();
111
+ const route = useRoute();
112
+
113
+
114
+ //Computed
115
+ const authenticated = computed(() => undefined !== authStore.authOrgaId);
116
+ const routerLinkSecondArray = computed(() => {
117
+ const links = [];
118
+ if (!authStore.isGarRole) {
119
+ links.push(
120
+ { title: t("Contact"), routeName: "/main/pub/contact" },
121
+ { title:t("Used libraries"), routeName: "/main/pub/libraries"},
122
+ { title: t("Term of use"), routeName: "/main/pub/cgu" },
123
+ );
124
+ }
125
+ links.push({ title: t("Site map"), routeName: "/main/pub/map" });
126
+ return links;
215
127
  });
128
+
129
+
130
+ //Watch
131
+ watch(language, () => changeLanguage());
132
+ watch(()=>filterStore.filterOrgaId, () => {
133
+ if (filterStore.filterOrgaId) {
134
+ organisationId.value = filterStore.filterOrgaId;
135
+ } else {
136
+ reset.value = !reset.value;
137
+ }
138
+ }, {immediate: true});
139
+
140
+
141
+
142
+ //Methods
143
+ function getQueriesRouter(routeName: string) {
144
+ if (
145
+ "podcasts" !== routeName &&
146
+ "emissions" !== routeName &&
147
+ "home" !== routeName
148
+ ) {
149
+ return { productor: filterStore.filterOrgaId };
150
+ }
151
+ return {
152
+ productor: filterStore.filterOrgaId,
153
+ iabId: filterStore.filterIab?.id,
154
+ rubriquesId: rubriqueQueryParam.value,
155
+ };
156
+ }
157
+ function changeLanguage(): void {
158
+ cookiesHelper.setCookie("octopus-language", language.value);
159
+ loadLocaleMessages(
160
+ i18n,
161
+ language.value,
162
+ authenticated.value,
163
+ generalStore.platformEducation,
164
+ );
165
+ classicApi
166
+ .fetchData<Array<Category>>({
167
+ api: 0,
168
+ path: `iab/list${authStore.authOrgaId ? "/" + authStore.authOrgaId : ""}`,
169
+ parameters: { lang: language.value },
170
+ })
171
+ .then((data: Array<Category>) => {
172
+ generalStore.storedUpdateCategories(data);
173
+ if (filterStore.filterIab) {
174
+ const category = generalStore.storedCategories.filter((c: Category) => {
175
+ return c.id === filterStore.filterIab?.id;
176
+ });
177
+ if (category.length) {
178
+ filterStore.filterUpdateIab(category[0]);
179
+ }
180
+ }
181
+ });
182
+ }
183
+ async function onOrganisationSelected( organisation: Organisation | undefined): Promise<void> {
184
+ if (organisation?.id) {
185
+ router.push({
186
+ query: { ...route.query, ...{ productor: organisation.id, o:undefined } },
187
+ });
188
+ }else{
189
+ organisationId.value = undefined;
190
+ router.push({
191
+ query: { ...route.query, ...{ productor: undefined } },
192
+ });
193
+ }
194
+ }
216
195
  </script>
217
196
 
218
197
  <style lang="scss">
@@ -2,15 +2,15 @@
2
2
  <div class="d-flex align-items-center">
3
3
  <button
4
4
  v-if="isAuthenticatedWithOrga"
5
- :title="$t('My space')"
5
+ :title="t('My space')"
6
6
  class="btn admin-button hide-small-screen m-1 text-blue-octopus"
7
7
  @click="goToAdministration"
8
8
  >
9
9
  <AppsIcon :size="30" />
10
10
  </button>
11
11
  <router-link
12
- v-if="isAuthenticatedWithOrga && isRoleContribution"
13
- :title="$t('Upload')"
12
+ v-if="isAuthenticatedWithOrga && authStore.isRoleContribution"
13
+ :title="t('Upload')"
14
14
  to="/main/priv/upload"
15
15
  class="btn admin-button hide-small-screen m-1 text-blue-octopus"
16
16
  >
@@ -20,7 +20,7 @@
20
20
  v-show="!mobileMenuDisplay || isAuthenticatedWithOrga"
21
21
  id="home-dropdown"
22
22
  class="btn m-1 admin-button hide-small-screen text-blue-octopus"
23
- :title="$t('User menu')"
23
+ :title="t('User menu')"
24
24
  >
25
25
  <AccountIcon :size="30" />
26
26
  </button>
@@ -32,28 +32,28 @@
32
32
  :left-pos="true"
33
33
  :is-top-layer="true"
34
34
  >
35
- <nav :aria-label="$t('User menu')">
35
+ <nav :aria-label="t('User menu')">
36
36
  <ul class="p-0 m-0">
37
37
  <template v-if="!isAuthenticated">
38
38
  <li class="li-style-none">
39
39
  <a class="octopus-dropdown-item realLink" :href="pathLogin">
40
- {{ $t("Login") }}
40
+ {{ t("Login") }}
41
41
  </a>
42
42
  </li>
43
43
  <li class="li-style-none">
44
44
  <router-link
45
- v-if="!isPodcastmaker"
45
+ v-if="!state.generalParameters.podcastmaker"
46
46
  class="octopus-dropdown-item"
47
47
  to="/main/pub/create"
48
48
  >
49
- {{ $t("Create an account") }}
49
+ {{ t("Create an account") }}
50
50
  </router-link>
51
51
  </li>
52
52
  </template>
53
53
  <template v-else>
54
54
  <li v-for="routerBack in routerBackoffice" :key="routerBack.path" class="li-style-none">
55
55
  <router-link
56
- v-if="!isPodcastmaker && routerBack.condition"
56
+ v-if="!state.generalParameters.podcastmaker && routerBack.condition"
57
57
  :class="routerBack.class"
58
58
  :to="routerBack.path"
59
59
  >
@@ -68,7 +68,7 @@
68
68
  class="octopus-dropdown-item realLink"
69
69
  rel="noreferrer noopener"
70
70
  target="_blank"
71
- :title="$t('New window', {text: helpLink.title})"
71
+ :title="t('New window', {text: helpLink.title})"
72
72
  >
73
73
  {{ helpLink.title }}
74
74
  <OpenInNewIcon class="ms-1" :size="15"/>
@@ -78,17 +78,17 @@
78
78
  <hr />
79
79
  <li class="li-style-none">
80
80
  <a class="octopus-dropdown-item c-hand" href="/logout">
81
- {{ $t("Logout") }}
81
+ {{ t("Logout") }}
82
82
  </a>
83
83
  </li>
84
84
  </template>
85
85
  <li class="li-style-none">
86
86
  <router-link
87
- v-if="!isGarRole"
87
+ v-if="!authStore.isGarRole"
88
88
  class="octopus-dropdown-item"
89
89
  to="/main/pub/contact"
90
90
  >
91
- {{ $t("Contact") }}
91
+ {{ t("Contact") }}
92
92
  </router-link>
93
93
  </li>
94
94
  </ul>
@@ -97,7 +97,7 @@
97
97
  </div>
98
98
  </template>
99
99
 
100
- <script lang="ts">
100
+ <script setup lang="ts">
101
101
  import OpenInNewIcon from "vue-material-design-icons/OpenInNew.vue";
102
102
  import AppsIcon from "vue-material-design-icons/Apps.vue";
103
103
  import AccountIcon from "vue-material-design-icons/Account.vue";
@@ -105,101 +105,79 @@ import DownloadIcon from "vue-material-design-icons/Download.vue";
105
105
  import { state } from "../../stores/ParamSdkStore";
106
106
  import ClassicPopover from "../misc/ClassicPopover.vue";
107
107
  import { useAuthStore } from "../../stores/AuthStore";
108
- import { mapState } from "pinia";
109
- import { defineComponent } from "vue";
110
- import { Organisation } from "@/stores/class/general/organisation";
108
+ import { computed } from "vue";
111
109
  import { useApiStore } from "../../stores/ApiStore";
112
- export default defineComponent({
113
- name: "HomeDropdown",
114
- components: {
115
- ClassicPopover,
116
- DownloadIcon,
117
- AccountIcon,
118
- AppsIcon,
119
- OpenInNewIcon
120
- },
121
- props: {
122
- isEducation: { default: false, type: Boolean },
123
- mobileMenuDisplay: { default: false, type: Boolean },
124
- scrolled: { default: false, type: Boolean },
125
- },
126
- computed: {
127
- ...mapState(useAuthStore, [
128
- "authOrgaId",
129
- "authProfile",
130
- "isGarRole",
131
- "isRoleContribution",
132
- "isRoleOrganisation",
133
- ]),
134
- ...mapState(useApiStore, ["frontendUrl"]),
135
- pathLogin(){
136
- return "/sso/login?redirect_url="+encodeURI(this.frontendUrl + this.$route.fullPath);
137
- },
138
- organisationsAvailable(): Array<Organisation> {
139
- return this.authProfile.organisations ?? [];
140
- },
141
- helpLinks() {
142
- if (this.isGarRole || this.isEducation) {
143
- return [];
144
- }
145
- return [
146
- {
147
- title: this.$t("Help"),
148
- href: "https://help.octopus.saooti.com/Aide/",
149
- },
150
- { title: this.$t("TutoMag"), href: "https://help.octopus.saooti.com/" },
151
- ];
152
- },
153
- routerBackoffice() {
154
- return [
155
- {
156
- title: this.$t("My space"),
157
- class: "octopus-dropdown-item show-small-phone-flex",
158
- path: "/main/priv/backoffice",
159
- condition: this.isAuthenticatedWithOrga,
160
- },
161
- {
162
- title: this.$t("Upload"),
163
- class: "octopus-dropdown-item show-small-phone-flex",
164
- path: "/main/priv/upload",
165
- condition: this.isAuthenticatedWithOrga && this.isRoleContribution,
166
- },
167
- {
168
- title: this.$t("Edit my profile"),
169
- class: "octopus-dropdown-item",
170
- path: "/main/priv/edit/profile",
171
- condition: true,
172
- },
173
- {
174
- title: this.$t("Edit my organisation"),
175
- class: "octopus-dropdown-item",
176
- path: "/main/priv/edit/organisation",
177
- condition:
178
- this.isAuthenticatedWithOrga &&
179
- (this.isRoleOrganisation || 1 < this.organisationsAvailable.length),
180
- },
181
- ];
182
- },
183
- isPodcastmaker(): boolean {
184
- return state.generalParameters.podcastmaker as boolean;
110
+ import { useI18n } from "vue-i18n";
111
+ import { useRoute, useRouter } from "vue-router";
112
+
113
+ //Props
114
+ const props = defineProps({
115
+ isEducation: { default: false, type: Boolean },
116
+ mobileMenuDisplay: { default: false, type: Boolean },
117
+ scrolled: { default: false, type: Boolean },
118
+ })
119
+
120
+ //Composables
121
+ const { t } = useI18n();
122
+ const authStore = useAuthStore();
123
+ const apiStore = useApiStore();
124
+ const route = useRoute();
125
+ const router = useRouter();
126
+
127
+ //Computed
128
+ const isAuthenticated = computed(() => undefined !== authStore.authProfile?.userId);
129
+ const isAuthenticatedWithOrga = computed(() => undefined !== authStore.authOrgaId);
130
+ const pathLogin = computed(() => "/sso/login?redirect_url="+encodeURI(apiStore.frontendUrl + route.fullPath));
131
+ const organisationsAvailable = computed(() => authStore.authProfile?.organisations ?? []);
132
+ const helpLinks = computed(() => {
133
+ if (authStore.isGarRole || props.isEducation) {
134
+ return [];
135
+ }
136
+ return [
137
+ { title:t("Help"), href: "https://help.octopus.saooti.com/Aide/"},
138
+ { title: t("TutoMag"), href: "https://help.octopus.saooti.com/" },
139
+ ];
140
+ });
141
+ const routerBackoffice = computed(() => {
142
+ return [
143
+ {
144
+ title: t("My space"),
145
+ class: "octopus-dropdown-item show-small-phone-flex",
146
+ path: "/main/priv/backoffice",
147
+ condition: isAuthenticatedWithOrga.value,
185
148
  },
186
- isAuthenticated(): boolean {
187
- return undefined !== this.authProfile?.userId;
149
+ {
150
+ title: t("Upload"),
151
+ class: "octopus-dropdown-item show-small-phone-flex",
152
+ path: "/main/priv/upload",
153
+ condition: isAuthenticatedWithOrga.value && authStore.isRoleContribution,
188
154
  },
189
- isAuthenticatedWithOrga(): boolean {
190
- return undefined !== this.authOrgaId;
155
+ {
156
+ title: t("Edit my profile"),
157
+ class: "octopus-dropdown-item",
158
+ path: "/main/priv/edit/profile",
159
+ condition: true,
191
160
  },
192
- },
193
- methods: {
194
- goToAdministration() {
195
- if ("backoffice" !== this.$route.name) {
196
- this.$router.push("/main/priv/backoffice");
197
- } else if (window.history.length > 1) {
198
- this.$router.go(-1);
199
- } else {
200
- this.$router.push("/");
201
- }
161
+ {
162
+ title: t("Edit my organisation"),
163
+ class: "octopus-dropdown-item",
164
+ path: "/main/priv/edit/organisation",
165
+ condition:
166
+ isAuthenticatedWithOrga.value &&
167
+ (authStore.isRoleOrganisation || 1 < organisationsAvailable.value.length),
202
168
  },
203
- },
169
+ ];
204
170
  });
171
+
172
+
173
+ //Methods
174
+ function goToAdministration() {
175
+ if ("backoffice" !== route.name) {
176
+ router.push("/main/priv/backoffice");
177
+ } else if (window.history.length > 1) {
178
+ router.go(-1);
179
+ } else {
180
+ router.push("/");
181
+ }
182
+ }
205
183
  </script>