@saooti/octopus-sdk 37.0.6 → 37.0.8

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 (236) hide show
  1. package/README.md +2 -2
  2. package/index.ts +22 -22
  3. package/package.json +26 -22
  4. package/src/App.vue +69 -60
  5. package/src/api/classicCrud.ts +12 -12
  6. package/src/api/initialize.ts +1 -1
  7. package/src/assets/transition.scss +34 -22
  8. package/src/components/display/aggregator/RssSection.vue +3 -3
  9. package/src/components/display/categories/CategoryChooser.vue +73 -60
  10. package/src/components/display/categories/CategoryFilter.vue +134 -90
  11. package/src/components/display/categories/CategoryList.vue +76 -62
  12. package/src/components/display/comments/AddCommentModal.vue +44 -44
  13. package/src/components/display/comments/CommentBasicView.vue +38 -30
  14. package/src/components/display/comments/CommentInput.vue +121 -106
  15. package/src/components/display/comments/CommentItem.vue +144 -102
  16. package/src/components/display/comments/CommentList.vue +117 -85
  17. package/src/components/display/comments/CommentParentInfo.vue +18 -15
  18. package/src/components/display/comments/CommentPlayer.vue +39 -41
  19. package/src/components/display/comments/CommentSection.vue +68 -53
  20. package/src/components/display/edit/EditBox.vue +7 -7
  21. package/src/components/display/edit/EditBoxRadio.vue +3 -4
  22. package/src/components/display/edit/EditCommentBox.vue +34 -36
  23. package/src/components/display/emission/EmissionInlineList.vue +75 -63
  24. package/src/components/display/emission/EmissionItem.vue +47 -35
  25. package/src/components/display/emission/EmissionList.vue +118 -83
  26. package/src/components/display/emission/EmissionPlayerItem.vue +89 -89
  27. package/src/components/display/filter/AdvancedSearch.vue +81 -73
  28. package/src/components/display/filter/CategorySearchFilter.vue +27 -25
  29. package/src/components/display/filter/DateFilter.vue +38 -38
  30. package/src/components/display/filter/MonetizableFilter.vue +16 -14
  31. package/src/components/display/filter/ProductorSearch.vue +55 -47
  32. package/src/components/display/filter/RubriqueChoice.vue +42 -27
  33. package/src/components/display/filter/RubriqueFilter.vue +130 -85
  34. package/src/components/display/filter/SearchOrder.vue +16 -11
  35. package/src/components/display/list/ListPaginate.vue +72 -70
  36. package/src/components/display/list/PaginateParams.vue +29 -30
  37. package/src/components/display/list/PaginateSection.vue +210 -0
  38. package/src/components/display/list/SwiperList.vue +28 -32
  39. package/src/components/display/live/CountDown.vue +12 -14
  40. package/src/components/display/live/LiveHorizontalList.vue +60 -50
  41. package/src/components/display/live/LiveItem.vue +42 -26
  42. package/src/components/display/live/LiveList.vue +92 -65
  43. package/src/components/display/live/RadioCurrently.vue +47 -42
  44. package/src/components/display/live/RadioImage.vue +40 -42
  45. package/src/components/display/live/RadioItem.vue +15 -22
  46. package/src/components/display/live/RadioList.vue +24 -21
  47. package/src/components/display/live/RadioPlanning.vue +105 -68
  48. package/src/components/display/organisation/OrganisationChooser.vue +58 -42
  49. package/src/components/display/organisation/OrganisationChooserLight.vue +27 -19
  50. package/src/components/display/participant/ParticipantItem.vue +89 -77
  51. package/src/components/display/participant/ParticipantList.vue +90 -60
  52. package/src/components/display/playlist/PlaylistItem.vue +32 -35
  53. package/src/components/display/playlist/PlaylistList.vue +70 -52
  54. package/src/components/display/playlist/PodcastList.vue +61 -50
  55. package/src/components/display/playlist/PodcastPlaylistInlineList.vue +47 -38
  56. package/src/components/display/podcasts/AnimatorsItem.vue +17 -15
  57. package/src/components/display/podcasts/ParticipantDescription.vue +21 -22
  58. package/src/components/display/podcasts/PodcastFilterList.vue +28 -26
  59. package/src/components/display/podcasts/PodcastImage.vue +129 -131
  60. package/src/components/display/podcasts/PodcastInlineList.vue +33 -29
  61. package/src/components/display/podcasts/PodcastInlineListClassic.vue +91 -71
  62. package/src/components/display/podcasts/PodcastInlineListTemplate.vue +94 -85
  63. package/src/components/display/podcasts/PodcastItem.vue +96 -90
  64. package/src/components/display/podcasts/PodcastItemInfo.vue +61 -65
  65. package/src/components/display/podcasts/PodcastList.vue +115 -84
  66. package/src/components/display/podcasts/PodcastModuleBox.vue +95 -104
  67. package/src/components/display/podcasts/PodcastPlayBar.vue +45 -32
  68. package/src/components/display/podcasts/PodcastSwiperList.vue +65 -55
  69. package/src/components/display/podcasts/TagList.vue +33 -37
  70. package/src/components/display/rubriques/RubriqueChooser.vue +70 -51
  71. package/src/components/display/rubriques/RubriqueList.vue +117 -89
  72. package/src/components/display/sharing/PlayerParameters.vue +45 -42
  73. package/src/components/display/sharing/QrCode.vue +52 -46
  74. package/src/components/display/sharing/ShareButtons.vue +18 -18
  75. package/src/components/display/sharing/ShareButtonsIntern.vue +100 -78
  76. package/src/components/display/sharing/ShareDistribution.vue +101 -67
  77. package/src/components/display/sharing/SharePlayer.vue +207 -127
  78. package/src/components/display/sharing/SharePlayerColors.vue +15 -15
  79. package/src/components/display/sharing/SharePlayerRadio.vue +62 -39
  80. package/src/components/display/sharing/SharePlayerTypes.vue +93 -55
  81. package/src/components/display/sharing/SubscribeButtons.vue +83 -32
  82. package/src/components/display/studio/RecordingItemButton.vue +3 -3
  83. package/src/components/form/ClassicCheckbox.vue +32 -31
  84. package/src/components/form/ClassicDatePicker.vue +47 -49
  85. package/src/components/form/ClassicInputText.vue +99 -98
  86. package/src/components/form/ClassicLoading.vue +11 -14
  87. package/src/components/form/ClassicMultiselect.vue +125 -126
  88. package/src/components/form/ClassicRadio.vue +15 -18
  89. package/src/components/form/ClassicSearch.vue +17 -23
  90. package/src/components/form/ClassicSelect.vue +35 -27
  91. package/src/components/form/{Wysiwyg.vue → ClassicWysiwyg.vue} +103 -118
  92. package/src/components/misc/AcpmImage.vue +6 -6
  93. package/src/components/misc/ClassicAccordion.vue +73 -0
  94. package/src/components/misc/ClassicNav.vue +117 -0
  95. package/src/components/misc/ClassicPopover.vue +212 -0
  96. package/src/components/misc/{Spinner.vue → ClassicSpinner.vue} +14 -15
  97. package/src/components/misc/ErrorMessage.vue +9 -17
  98. package/src/components/misc/FooterSection.vue +198 -0
  99. package/src/components/misc/HomeDropdown.vue +60 -60
  100. package/src/components/misc/LeftMenu.vue +115 -79
  101. package/src/components/misc/ProgressBar.vue +36 -32
  102. package/src/components/misc/SnackBar.vue +169 -0
  103. package/src/components/misc/TopBar.vue +162 -116
  104. package/src/components/misc/modal/ClassicModal.vue +99 -103
  105. package/src/components/misc/modal/ClipboardModal.vue +21 -23
  106. package/src/components/misc/modal/MessageModal.vue +22 -28
  107. package/src/components/misc/modal/NewsletterModal.vue +139 -113
  108. package/src/components/misc/modal/QrCodeModal.vue +14 -17
  109. package/src/components/misc/modal/ShareModalPlayer.vue +44 -60
  110. package/src/components/misc/player/PlayerCompact.vue +47 -62
  111. package/src/components/misc/player/{Player.vue → PlayerComponent.vue} +54 -46
  112. package/src/components/misc/player/PlayerLarge.vue +62 -61
  113. package/src/components/misc/player/PlayerProgressBar.vue +40 -30
  114. package/src/components/misc/player/PlayerTimeline.vue +32 -36
  115. package/src/components/misc/player/radio/RadioHistory.vue +62 -59
  116. package/src/components/misc/player/radio/RadioProgressBar.vue +44 -35
  117. package/src/components/mixins/cookies.ts +11 -10
  118. package/src/components/mixins/displayMethods.ts +5 -4
  119. package/src/components/mixins/handle403.ts +9 -9
  120. package/src/components/mixins/imageProxy.ts +14 -7
  121. package/src/components/mixins/init.ts +31 -16
  122. package/src/components/mixins/orgaComputed.ts +7 -7
  123. package/src/components/mixins/organisationFilter.ts +36 -22
  124. package/src/components/mixins/player/playerComment.ts +46 -37
  125. package/src/components/mixins/player/playerDisplay.ts +122 -87
  126. package/src/components/mixins/player/playerLive.ts +65 -43
  127. package/src/components/mixins/player/playerLogic.ts +133 -88
  128. package/src/components/mixins/player/playerTranscript.ts +48 -30
  129. package/src/components/mixins/radio/fetchRadioData.ts +40 -23
  130. package/src/components/mixins/selenium.ts +2 -2
  131. package/src/components/mixins/tagOfMixins.ts +11 -11
  132. package/src/components/pages/CategoryPage.vue +43 -0
  133. package/src/components/pages/{Emission.vue → EmissionPage.vue} +98 -67
  134. package/src/components/pages/{Emissions.vue → EmissionsPage.vue} +51 -44
  135. package/src/components/pages/Error403Page.vue +20 -19
  136. package/src/components/pages/HomePage.vue +144 -0
  137. package/src/components/pages/LivesPage.vue +66 -0
  138. package/src/components/pages/PageNotFound.vue +33 -22
  139. package/src/components/pages/{Participant.vue → ParticipantPage.vue} +63 -49
  140. package/src/components/pages/{Participants.vue → ParticipantsPage.vue} +9 -9
  141. package/src/components/pages/PlaylistPage.vue +175 -0
  142. package/src/components/pages/{Playlists.vue → PlaylistsPage.vue} +16 -14
  143. package/src/components/pages/PodcastPage.vue +365 -0
  144. package/src/components/pages/PodcastsPage.vue +152 -0
  145. package/src/components/pages/RadioPage.vue +131 -0
  146. package/src/components/pages/RubriquePage.vue +45 -0
  147. package/src/components/pages/{Search.vue → SearchPage.vue} +19 -19
  148. package/src/helper/dom.ts +1 -1
  149. package/src/helper/duration.ts +10 -4
  150. package/src/helper/useEventListener.ts +7 -8
  151. package/src/i18n.ts +31 -30
  152. package/src/locale/de.ts +272 -257
  153. package/src/locale/educationen.ts +13 -13
  154. package/src/locale/educationfr.ts +1 -1
  155. package/src/locale/en.ts +332 -324
  156. package/src/locale/es.ts +334 -318
  157. package/src/locale/fr.ts +339 -324
  158. package/src/locale/it.ts +341 -328
  159. package/src/locale/messages.ts +9 -9
  160. package/src/locale/sl.ts +324 -319
  161. package/src/main.ts +28 -31
  162. package/src/router/router.ts +218 -198
  163. package/src/shims-tsx.d.ts +1 -1
  164. package/src/shims-vue.d.ts +1 -1
  165. package/src/stores/ApiStore.ts +44 -44
  166. package/src/stores/AuthStore.ts +21 -15
  167. package/src/stores/CommentStore.ts +13 -11
  168. package/src/stores/FilterStore.ts +25 -15
  169. package/src/stores/GeneralStore.ts +15 -15
  170. package/src/stores/ParamSdkStore.ts +179 -137
  171. package/src/stores/PlayerStore.ts +139 -125
  172. package/src/stores/class/adserver/adserverConfig.ts +1 -1
  173. package/src/stores/class/adserver/adserverOtherEmission.ts +9 -9
  174. package/src/stores/class/cartouchier/cartouche.ts +4 -4
  175. package/src/stores/class/cartouchier/cartouchier.ts +2 -2
  176. package/src/stores/class/conference/conference.ts +10 -9
  177. package/src/stores/class/conference/conferenceMessage.ts +2 -2
  178. package/src/stores/class/conference/conferenceParticipant.ts +1 -1
  179. package/src/stores/class/conference/studioCall.ts +6 -6
  180. package/src/stores/class/contract/contractOrganisation.ts +5 -5
  181. package/src/stores/class/ftp/ftpEmission.ts +9 -9
  182. package/src/stores/class/ftp/testFtpEmission.ts +4 -4
  183. package/src/stores/class/general/audioView.ts +19 -19
  184. package/src/stores/class/general/category.ts +1 -1
  185. package/src/stores/class/general/classicSelectType.ts +2 -3
  186. package/src/stores/class/general/customPlayer.ts +8 -8
  187. package/src/stores/class/general/emission.ts +20 -20
  188. package/src/stores/class/general/fetchParam.ts +8 -2
  189. package/src/stores/class/general/initState.ts +31 -31
  190. package/src/stores/class/general/interfacePageable.ts +13 -13
  191. package/src/stores/class/general/ituneCategory.ts +4 -4
  192. package/src/stores/class/general/listReturn.ts +12 -12
  193. package/src/stores/class/general/media.ts +7 -7
  194. package/src/stores/class/general/organisation.ts +9 -9
  195. package/src/stores/class/general/pageable.ts +10 -10
  196. package/src/stores/class/general/participant.ts +7 -7
  197. package/src/stores/class/general/player.ts +30 -28
  198. package/src/stores/class/general/playlist.ts +17 -19
  199. package/src/stores/class/general/podcast.ts +19 -19
  200. package/src/stores/class/general/sortPageable.ts +4 -4
  201. package/src/stores/class/general/soundcastCategory.ts +7 -7
  202. package/src/stores/class/ouestFrance/ofTag.ts +34 -34
  203. package/src/stores/class/ouestFrance/ofTagInfo.ts +9 -9
  204. package/src/stores/class/ouestFrance/ofTagPage.ts +7 -7
  205. package/src/stores/class/ouestFrance/ofTagSeo.ts +7 -7
  206. package/src/stores/class/ouestFrance/ofTagVente.ts +6 -6
  207. package/src/stores/class/ouestFrance/ofTagWithParents.ts +20 -20
  208. package/src/stores/class/radio/canal.ts +4 -4
  209. package/src/stores/class/radio/live.ts +6 -6
  210. package/src/stores/class/radio/mix.ts +16 -16
  211. package/src/stores/class/radio/playlistMedia.ts +7 -7
  212. package/src/stores/class/radio/recurrence.ts +54 -54
  213. package/src/stores/class/rss/rssEmission.ts +13 -13
  214. package/src/stores/class/rss/rssInfo.ts +7 -7
  215. package/src/stores/class/rubrique/rubriquage.ts +2 -2
  216. package/src/stores/class/rubrique/rubrique.ts +1 -1
  217. package/src/stores/class/stat/statArrayIncome.ts +5 -5
  218. package/src/stores/class/stat/statArrayObject.ts +26 -26
  219. package/src/stores/class/stat/statGraph.ts +6 -6
  220. package/src/stores/class/user/person.ts +4 -2
  221. package/src/stores/class/user/profile.ts +4 -2
  222. package/src/stores/class/user/userKeycloak.ts +4 -5
  223. package/src/components/display/list/Paginate.vue +0 -181
  224. package/src/components/misc/Accordion.vue +0 -78
  225. package/src/components/misc/Footer.vue +0 -169
  226. package/src/components/misc/Nav.vue +0 -119
  227. package/src/components/misc/Popover.vue +0 -193
  228. package/src/components/misc/Snackbar.vue +0 -168
  229. package/src/components/pages/Category.vue +0 -41
  230. package/src/components/pages/Home.vue +0 -125
  231. package/src/components/pages/Lives.vue +0 -64
  232. package/src/components/pages/Playlist.vue +0 -164
  233. package/src/components/pages/Podcast.vue +0 -307
  234. package/src/components/pages/Podcasts.vue +0 -146
  235. package/src/components/pages/Radio.vue +0 -122
  236. package/src/components/pages/Rubrique.vue +0 -42
@@ -0,0 +1,66 @@
1
+ <template>
2
+ <div class="page-box">
3
+ <template v-if="!filterOrgaId && !organisationId && !isPodcastmaker">
4
+ <div class="align-self-start fw-bold mb-2">
5
+ {{ $t("Please chose a productor") }}
6
+ </div>
7
+ <OrganisationChooser
8
+ :defaultanswer="$t('Please chose a productor')"
9
+ @selected="onOrganisationSelected"
10
+ />
11
+ </template>
12
+ <template v-if="filterOrgaId || organisationId">
13
+ <LiveList :organisation-id="organisationId" />
14
+ <RadioList :organisation-id="organisationId" />
15
+ </template>
16
+ </div>
17
+ </template>
18
+
19
+ <script lang="ts">
20
+ import { state } from "../../stores/ParamSdkStore";
21
+ import { Organisation } from "@/stores/class/general/organisation";
22
+ import { defineComponent, defineAsyncComponent } from "vue";
23
+ import { useFilterStore } from "@/stores/FilterStore";
24
+ import { mapState } from "pinia";
25
+ const LiveList = defineAsyncComponent(
26
+ () => import("../display/live/LiveList.vue"),
27
+ );
28
+ const RadioList = defineAsyncComponent(
29
+ () => import("../display/live/RadioList.vue"),
30
+ );
31
+ const OrganisationChooser = defineAsyncComponent(
32
+ () => import("../display/organisation/OrganisationChooser.vue"),
33
+ );
34
+ export default defineComponent({
35
+ components: {
36
+ LiveList,
37
+ RadioList,
38
+ OrganisationChooser,
39
+ },
40
+ props: {
41
+ organisationId: { default: undefined, type: String },
42
+ productor: { default: undefined, type: String },
43
+ },
44
+ emits: ["update:organisationId"],
45
+
46
+ computed: {
47
+ ...mapState(useFilterStore, ["filterOrgaId"]),
48
+
49
+ isPodcastmaker(): boolean {
50
+ return state.generalParameters.podcastmaker as boolean;
51
+ },
52
+ },
53
+ created() {
54
+ if (this.productor) {
55
+ this.$emit("update:organisationId", this.productor);
56
+ } else if (this.filterOrgaId) {
57
+ this.$emit("update:organisationId", this.filterOrgaId);
58
+ }
59
+ },
60
+ methods: {
61
+ onOrganisationSelected(organisation: Organisation | undefined): void {
62
+ this.$emit("update:organisationId", organisation?.id);
63
+ },
64
+ },
65
+ });
66
+ </script>
@@ -4,41 +4,52 @@
4
4
  :style="backgroundStyle"
5
5
  >
6
6
  <div class="position-absolute module-box">
7
- <h1>{{ $t('Oops') }}</h1>
8
- <h2>{{ $t('The page you are looking for cannot be found') }}</h2>
7
+ <h1>{{ $t("Oops") }}</h1>
8
+ <h2>{{ $t("The page you are looking for cannot be found") }}</h2>
9
9
  <router-link
10
10
  class="btn btn-primary"
11
11
  :to="{
12
12
  name: 'home',
13
- query: { productor: filterOrgaId,
14
- iabId:filterIab?.id,
15
- rubriquesId: rubriqueQueryParam},
13
+ query: {
14
+ productor: filterOrgaId,
15
+ iabId: filterIab?.id,
16
+ rubriquesId: rubriqueQueryParam,
17
+ },
16
18
  }"
17
19
  >
18
- {{ $t('Back to home') }}
20
+ {{ $t("Back to home") }}
19
21
  </router-link>
20
22
  </div>
21
23
  </div>
22
24
  </template>
23
25
 
24
26
  <script lang="ts">
25
- import { RubriquageFilter } from '@/stores/class/rubrique/rubriquageFilter';
26
- import { useFilterStore } from '@/stores/FilterStore';
27
- import { useGeneralStore } from '@/stores/GeneralStore';
28
- import { mapState } from 'pinia';
29
- import { defineComponent } from 'vue';
27
+ import { RubriquageFilter } from "@/stores/class/rubrique/rubriquageFilter";
28
+ import { useFilterStore } from "@/stores/FilterStore";
29
+ import { useGeneralStore } from "@/stores/GeneralStore";
30
+ import { mapState } from "pinia";
31
+ import { defineComponent } from "vue";
30
32
  export default defineComponent({
31
- name: 'PageNotFound',
32
- computed:{
33
- ...mapState(useGeneralStore, ['metaTitle']),
34
- ...mapState(useFilterStore, ['filterRubrique', 'filterIab', 'filterOrgaId']),
35
- rubriqueQueryParam(): string|undefined{
36
- if(this.filterRubrique?.length){
37
- return this.filterRubrique.map((value: RubriquageFilter) => value.rubriquageId+':'+value.rubriqueId).join();
33
+ name: "PageNotFound",
34
+ computed: {
35
+ ...mapState(useGeneralStore, ["metaTitle"]),
36
+ ...mapState(useFilterStore, [
37
+ "filterRubrique",
38
+ "filterIab",
39
+ "filterOrgaId",
40
+ ]),
41
+ rubriqueQueryParam(): string | undefined {
42
+ if (this.filterRubrique?.length) {
43
+ return this.filterRubrique
44
+ .map(
45
+ (value: RubriquageFilter) =>
46
+ value.rubriquageId + ":" + value.rubriqueId,
47
+ )
48
+ .join();
38
49
  }
39
50
  return undefined;
40
51
  },
41
- backgroundStyle():string{
52
+ backgroundStyle(): string {
42
53
  return "background-image: url('/img/404.svg');";
43
54
  },
44
55
  },
@@ -48,13 +59,13 @@ export default defineComponent({
48
59
  });
49
60
  </script>
50
61
  <style lang="scss">
51
- .octopus-app .page-not-found{
62
+ .octopus-app .page-not-found {
52
63
  background-size: cover;
53
64
  background-position: center;
54
- background-color: #ebebeb;
65
+ background-color: #ebebeb;
55
66
  display: flex;
56
67
  flex-direction: column;
57
68
  align-items: center;
58
69
  padding: 0;
59
70
  }
60
- </style>
71
+ </style>
@@ -1,14 +1,10 @@
1
1
  <template>
2
2
  <div class="page-box">
3
- <div
4
- v-if="loaded && !error"
5
- >
3
+ <div v-if="loaded && !error">
6
4
  <h1 v-if="!pageParameters.lightStyle">
7
5
  {{ titleDisplay }}
8
6
  </h1>
9
- <div
10
- class="d-flex flex-column align-items-center mb-3"
11
- >
7
+ <div class="d-flex flex-column align-items-center mb-3">
12
8
  <img
13
9
  v-lazy="proxyImageUrl(participant.imageUrl, '200')"
14
10
  width="200"
@@ -16,7 +12,7 @@
16
12
  :title="$t('Animator image')"
17
13
  :alt="$t('Animator image')"
18
14
  class="img-box mb-3"
19
- >
15
+ />
20
16
  <h2 class="text-capitalize">
21
17
  {{ name }}
22
18
  </h2>
@@ -30,7 +26,7 @@
30
26
  v-if="editRight && pageParameters.isEditBox"
31
27
  :participant="participant"
32
28
  class="w-100"
33
- @participantUpdate="updateParticipant"
29
+ @participant-update="updateParticipant"
34
30
  />
35
31
  <ShareButtons
36
32
  v-if="pageParameters.isShareButtons"
@@ -56,80 +52,92 @@
56
52
  />
57
53
  </div>
58
54
  <ClassicLoading
59
- :loading-text="!loaded?$t('Loading content ...'):undefined"
60
- :error-text="error?$t(`Animator doesn't exist`):undefined"
55
+ :loading-text="!loaded ? $t('Loading content ...') : undefined"
56
+ :error-text="error ? $t(`Animator doesn't exist`) : undefined"
61
57
  />
62
58
  </div>
63
59
  </template>
64
60
 
65
61
  <script lang="ts">
66
- import octopusApi from '@saooti/octopus-api';
67
- import { state } from '../../stores/ParamSdkStore';
68
- import displayMethods from '../mixins/displayMethods';
69
- import imageProxy from '../mixins/imageProxy';
70
- import { orgaComputed } from '../mixins/orgaComputed';
71
- import { handle403 } from '../mixins/handle403';
72
- import { Participant } from '@/stores/class/general/participant';
73
- import ClassicLoading from '../form/ClassicLoading.vue';
74
- import { defineComponent, defineAsyncComponent } from 'vue';
75
- import { AxiosError } from 'axios';
76
- const ShareButtons = defineAsyncComponent(() => import('../display/sharing/ShareButtons.vue'));
77
- const PodcastFilterList = defineAsyncComponent(() => import('../display/podcasts/PodcastFilterList.vue'));
78
- const EditBox = defineAsyncComponent(() => import('@/components/display/edit/EditBox.vue'));
79
- const PodcastList = defineAsyncComponent(() => import('../display/podcasts/PodcastList.vue'));
62
+ import octopusApi from "@saooti/octopus-api";
63
+ import { state } from "../../stores/ParamSdkStore";
64
+ import displayMethods from "../mixins/displayMethods";
65
+ import imageProxy from "../mixins/imageProxy";
66
+ import { orgaComputed } from "../mixins/orgaComputed";
67
+ import { handle403 } from "../mixins/handle403";
68
+ import { Participant } from "@/stores/class/general/participant";
69
+ import ClassicLoading from "../form/ClassicLoading.vue";
70
+ import { defineComponent, defineAsyncComponent } from "vue";
71
+ import { AxiosError } from "axios";
72
+ const ShareButtons = defineAsyncComponent(
73
+ () => import("../display/sharing/ShareButtons.vue"),
74
+ );
75
+ const PodcastFilterList = defineAsyncComponent(
76
+ () => import("../display/podcasts/PodcastFilterList.vue"),
77
+ );
78
+ const EditBox = defineAsyncComponent(
79
+ () => import("@/components/display/edit/EditBox.vue"),
80
+ );
81
+ const PodcastList = defineAsyncComponent(
82
+ () => import("../display/podcasts/PodcastList.vue"),
83
+ );
80
84
  export default defineComponent({
81
85
  components: {
82
86
  ShareButtons,
83
87
  PodcastFilterList,
84
88
  EditBox,
85
89
  PodcastList,
86
- ClassicLoading
90
+ ClassicLoading,
87
91
  },
88
92
  mixins: [displayMethods, handle403, orgaComputed, imageProxy],
89
93
  props: {
90
- participantId: { default: undefined, type: Number},
94
+ participantId: { default: undefined, type: Number },
91
95
  },
92
- emits: ['participantTitle'],
96
+ emits: ["participantTitle"],
93
97
  data() {
94
98
  return {
95
99
  loaded: false as boolean,
96
- participant: undefined as Participant|undefined,
100
+ participant: undefined as Participant | undefined,
97
101
  error: false as boolean,
98
102
  reload: false as boolean,
99
103
  };
100
104
  },
101
105
  computed: {
102
- titleDisplay(): string{
103
- return state.intervenantPage.titlePage??this.$t('Animator');
106
+ titleDisplay(): string {
107
+ return state.intervenantPage.titlePage ?? this.$t("Animator");
104
108
  },
105
- pageParameters(){
109
+ pageParameters() {
106
110
  return {
107
- isEditBox : (state.podcastPage.EditBox as boolean),
108
- isShareButtons: (state.podcastPage.ShareButtons as boolean),
109
- lightStyle:(state.intervenantPage.lightStyle as boolean),
111
+ isEditBox: state.podcastPage.EditBox as boolean,
112
+ isShareButtons: state.podcastPage.ShareButtons as boolean,
113
+ lightStyle: state.intervenantPage.lightStyle as boolean,
110
114
  };
111
115
  },
112
116
  rssUrl(): string {
113
117
  return `${state.generalParameters.ApiUri}rss/participant/${this.participantId}`;
114
118
  },
115
119
  description(): string {
116
- return this.participant?.description ?? '';
120
+ return this.participant?.description ?? "";
117
121
  },
118
122
  name(): string {
119
- return (`${this.participant?.firstName??''} ${this.participant?.lastName??''}`).trim();
123
+ return `${this.participant?.firstName ?? ""} ${
124
+ this.participant?.lastName ?? ""
125
+ }`.trim();
120
126
  },
121
127
  editRight(): boolean {
122
- return (true===this.authenticated &&
128
+ return (
129
+ (true === this.authenticated &&
123
130
  this.myOrganisationId === this.participant?.orga?.id) ||
124
- true===state.generalParameters.isAdmin
131
+ true === state.generalParameters.isAdmin
132
+ );
125
133
  },
126
134
  },
127
135
  watch: {
128
136
  participant: {
129
137
  deep: true,
130
- handler(){
131
- this.reload = !this.reload;
132
- }
138
+ handler() {
139
+ this.reload = !this.reload;
140
+ },
133
141
  },
134
142
  participantId: {
135
143
  immediate: true,
@@ -139,35 +147,41 @@ export default defineComponent({
139
147
  },
140
148
  },
141
149
  methods: {
142
- initError():void{
150
+ initError(): void {
143
151
  this.error = true;
144
152
  this.loaded = true;
145
153
  },
146
154
  async getParticipantDetails(): Promise<void> {
147
155
  this.loaded = false;
148
156
  try {
149
- const data = await octopusApi.fetchData<Participant>(0, 'participant/'+this.participantId);
150
- if("PUBLIC"!==data?.orga?.privacy && this.filterOrgaId!==data?.orga?.id){
157
+ const data = await octopusApi.fetchData<Participant>(
158
+ 0,
159
+ "participant/" + this.participantId,
160
+ );
161
+ if (
162
+ "PUBLIC" !== data?.orga?.privacy &&
163
+ this.filterOrgaId !== data?.orga?.id
164
+ ) {
151
165
  this.initError();
152
166
  return;
153
167
  }
154
168
  this.updateParticipant(data);
155
169
  this.loaded = true;
156
- } catch(error) {
157
- this.handle403((error as AxiosError));
170
+ } catch (error) {
171
+ this.handle403(error as AxiosError);
158
172
  this.initError();
159
173
  }
160
174
  },
161
175
  updateParticipant(participant: Participant): void {
162
176
  this.participant = participant;
163
- this.$emit('participantTitle', this.name);
177
+ this.$emit("participantTitle", this.name);
164
178
  },
165
179
  },
166
- })
180
+ });
167
181
  </script>
168
182
 
169
183
  <style lang="scss">
170
- .octopus-app{
184
+ .octopus-app {
171
185
  @media (min-width: 950px) {
172
186
  .participant-desc {
173
187
  max-width: 50%;
@@ -16,10 +16,10 @@
16
16
  </template>
17
17
 
18
18
  <script lang="ts">
19
- import { orgaComputed } from '../mixins/orgaComputed';
20
- import ParticipantList from '../display/participant/ParticipantList.vue';
21
- import ProductorSearch from '../display/filter/ProductorSearch.vue';
22
- import { defineComponent } from 'vue'
19
+ import { orgaComputed } from "../mixins/orgaComputed";
20
+ import ParticipantList from "../display/participant/ParticipantList.vue";
21
+ import ProductorSearch from "../display/filter/ProductorSearch.vue";
22
+ import { defineComponent } from "vue";
23
23
  export default defineComponent({
24
24
  components: {
25
25
  ProductorSearch,
@@ -27,18 +27,18 @@ export default defineComponent({
27
27
  },
28
28
  mixins: [orgaComputed],
29
29
  props: {
30
- productor: { default: undefined, type: String},
30
+ productor: { default: undefined, type: String },
31
31
  },
32
32
  data() {
33
33
  return {
34
34
  first: 0 as number,
35
35
  size: 30 as number,
36
- searchPattern: '' as string,
36
+ searchPattern: "" as string,
37
37
  organisationId: undefined as string | undefined,
38
38
  };
39
39
  },
40
40
  created() {
41
- this.organisationId = this.productor ?this.productor: this.filterOrgaId;
41
+ this.organisationId = this.productor ? this.productor : this.filterOrgaId;
42
42
  },
43
- })
44
- </script>
43
+ });
44
+ </script>
@@ -0,0 +1,175 @@
1
+ <template>
2
+ <div class="page-box">
3
+ <template v-if="loaded && !error">
4
+ <div class="page-element-title-container">
5
+ <div class="page-element-title">
6
+ <h1>{{ pageTitle }}</h1>
7
+ </div>
8
+ <div class="page-element-bg" :style="backgroundDisplay" />
9
+ </div>
10
+ <div class="d-flex flex-column page-element">
11
+ <div class="module-box">
12
+ <div class="mb-5 mt-3 descriptionText">
13
+ <img
14
+ v-lazy="proxyImageUrl(imageUrl, '330')"
15
+ width="330"
16
+ height="330"
17
+ :alt="$t('Playlist name image', { name: name })"
18
+ class="img-box float-start me-3 mb-3"
19
+ />
20
+ <h2>{{ name }}</h2>
21
+ <!-- eslint-disable vue/no-v-html -->
22
+ <p class="html-wysiwyg-content" v-html="urlify(description)" />
23
+ <!-- eslint-enable -->
24
+ </div>
25
+ <EditBox
26
+ v-if="editRight && pageParameters.isEditBox"
27
+ :playlist="playlist"
28
+ />
29
+ </div>
30
+ <SharePlayer
31
+ v-if="pageParameters.isSharePlayer && authenticated"
32
+ :playlist="playlist"
33
+ :organisation-id="myOrganisationId"
34
+ :is-education="isEducation"
35
+ />
36
+ <ShareButtons
37
+ v-if="pageParameters.isShareButtons"
38
+ :playlist="playlist"
39
+ />
40
+ <PodcastList :playlist="playlist" />
41
+ </div>
42
+ </template>
43
+ <ClassicLoading
44
+ :loading-text="!loaded ? $t('Loading content ...') : undefined"
45
+ :error-text="error ? $t(`Playlist doesn't exist`) : undefined"
46
+ />
47
+ </div>
48
+ </template>
49
+
50
+ <script lang="ts">
51
+ import { orgaComputed } from "../mixins/orgaComputed";
52
+ import ClassicLoading from "../form/ClassicLoading.vue";
53
+ import PodcastList from "../display/playlist/PodcastList.vue";
54
+ import octopusApi from "@saooti/octopus-api";
55
+ import { state } from "../../stores/ParamSdkStore";
56
+ import displayMethods from "../mixins/displayMethods";
57
+ import imageProxy from "../mixins/imageProxy";
58
+ import { handle403 } from "../mixins/handle403";
59
+ import { Playlist } from "@/stores/class/general/playlist";
60
+ import { defineComponent, defineAsyncComponent } from "vue";
61
+ import { AxiosError } from "axios";
62
+ const ShareButtons = defineAsyncComponent(
63
+ () => import("../display/sharing/ShareButtons.vue"),
64
+ );
65
+ const EditBox = defineAsyncComponent(
66
+ () => import("@/components/display/edit/EditBox.vue"),
67
+ );
68
+ const SharePlayer = defineAsyncComponent(
69
+ () => import("../display/sharing/SharePlayer.vue"),
70
+ );
71
+ export default defineComponent({
72
+ components: {
73
+ ShareButtons,
74
+ EditBox,
75
+ PodcastList,
76
+ SharePlayer,
77
+ ClassicLoading,
78
+ },
79
+ mixins: [displayMethods, handle403, orgaComputed, imageProxy],
80
+
81
+ props: {
82
+ playlistId: { default: undefined, type: Number },
83
+ isEducation: { default: false, type: Boolean },
84
+ },
85
+
86
+ emits: ["playlistTitle"],
87
+ data() {
88
+ return {
89
+ loaded: false as boolean,
90
+ playlist: undefined as Playlist | undefined,
91
+ error: false as boolean,
92
+ };
93
+ },
94
+ computed: {
95
+ pageParameters() {
96
+ return {
97
+ isEditBox: state.podcastPage.EditBox as boolean,
98
+ isShareButtons: state.podcastPage.ShareButtons as boolean,
99
+ isSharePlayer: state.podcastPage.SharePlayer as boolean,
100
+ };
101
+ },
102
+ pageTitle(): string {
103
+ return this.playlistRadio
104
+ ? this.$t("Mix of episodes")
105
+ : this.$t("Playlist");
106
+ },
107
+ playlistRadio(): boolean {
108
+ return (
109
+ "AMBIANCE" === this.playlist?.ambianceType ||
110
+ "AMBIANCE_PROGRAMMED" === this.playlist?.ambianceType
111
+ );
112
+ },
113
+ name(): string {
114
+ return this.playlist?.title ?? "";
115
+ },
116
+ imageUrl(): string {
117
+ return this.playlist?.imageUrl ?? "";
118
+ },
119
+ description(): string {
120
+ return this.playlist?.description ?? "";
121
+ },
122
+ editRight(): boolean {
123
+ return (
124
+ (true === state.generalParameters.isPlaylist &&
125
+ this.myOrganisationId === this.playlist?.organisation?.id) ||
126
+ true === state.generalParameters.isAdmin
127
+ );
128
+ },
129
+ backgroundDisplay(): string {
130
+ if (!this.playlist) {
131
+ return "";
132
+ }
133
+ return `background-image: url('${this.playlist.imageUrl}');`;
134
+ },
135
+ },
136
+ watch: {
137
+ playlistId: {
138
+ immediate: true,
139
+ handler() {
140
+ this.getPlaylistDetails();
141
+ },
142
+ },
143
+ },
144
+
145
+ methods: {
146
+ initError(): void {
147
+ this.error = true;
148
+ this.loaded = true;
149
+ },
150
+ async getPlaylistDetails(): Promise<void> {
151
+ try {
152
+ this.loaded = false;
153
+ this.error = false;
154
+ this.playlist = await octopusApi.fetchData<Playlist>(
155
+ 0,
156
+ "playlist/" + this.playlistId,
157
+ );
158
+ if (
159
+ (!this.editRight && this.playlistRadio) ||
160
+ ("PUBLIC" !== this.playlist.organisation?.privacy &&
161
+ this.filterOrgaId !== this.playlist.organisation?.id)
162
+ ) {
163
+ this.initError();
164
+ return;
165
+ }
166
+ this.$emit("playlistTitle", this.playlist.title);
167
+ } catch (error) {
168
+ this.handle403(error as AxiosError);
169
+ this.initError();
170
+ }
171
+ this.loaded = true;
172
+ },
173
+ },
174
+ });
175
+ </script>
@@ -6,7 +6,7 @@
6
6
  class="d-flex justify-content-center my-3"
7
7
  >
8
8
  <div class="btn btn-primary">
9
- {{ $t('Create playlist') }}
9
+ {{ $t("Create playlist") }}
10
10
  </div>
11
11
  </router-link>
12
12
  <ProductorSearch
@@ -25,33 +25,35 @@
25
25
  </template>
26
26
 
27
27
  <script lang="ts">
28
- import { orgaComputed } from '../mixins/orgaComputed';
29
- import PlaylistList from '../display/playlist/PlaylistList.vue';
30
- import { state } from '../../stores/ParamSdkStore';
31
- import { defineComponent, defineAsyncComponent } from 'vue';
32
- const ProductorSearch = defineAsyncComponent(() => import('../display/filter/ProductorSearch.vue'));
28
+ import { orgaComputed } from "../mixins/orgaComputed";
29
+ import PlaylistList from "../display/playlist/PlaylistList.vue";
30
+ import { state } from "../../stores/ParamSdkStore";
31
+ import { defineComponent, defineAsyncComponent } from "vue";
32
+ const ProductorSearch = defineAsyncComponent(
33
+ () => import("../display/filter/ProductorSearch.vue"),
34
+ );
33
35
  export default defineComponent({
34
36
  components: {
35
37
  ProductorSearch,
36
38
  PlaylistList,
37
39
  },
38
- mixins:[orgaComputed],
40
+ mixins: [orgaComputed],
39
41
  props: {
40
- productor: { default: undefined, type: String},
42
+ productor: { default: undefined, type: String },
41
43
  },
42
44
 
43
45
  data() {
44
46
  return {
45
47
  first: 0 as number,
46
48
  size: 30 as number,
47
- searchPattern: '' as string,
49
+ searchPattern: "" as string,
48
50
  organisationId: undefined as string | undefined,
49
51
  };
50
52
  },
51
-
53
+
52
54
  computed: {
53
55
  isPodcastmaker(): boolean {
54
- return (state.generalParameters.podcastmaker as boolean);
56
+ return state.generalParameters.podcastmaker as boolean;
55
57
  },
56
58
  editRight(): boolean {
57
59
  return state.generalParameters.isPlaylist ? true : false;
@@ -59,7 +61,7 @@ export default defineComponent({
59
61
  },
60
62
 
61
63
  created() {
62
- this.organisationId = this.productor ?this.productor: this.filterOrgaId;
64
+ this.organisationId = this.productor ? this.productor : this.filterOrgaId;
63
65
  },
64
- })
65
- </script>
66
+ });
67
+ </script>