@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
@@ -1,168 +0,0 @@
1
- <template>
2
- <div
3
- class="snack-bar-wrap"
4
- :style="style.wrap"
5
- >
6
- <template
7
- v-for="(msg, i) in msgs"
8
- :key="i"
9
- >
10
- <div
11
- class="snack-bar"
12
- :style="style.bar(msg.color)"
13
- @click="pop(i)"
14
- >
15
- {{ msg.msg.message || msg.msg }}
16
- </div>
17
- <br>
18
- </template>
19
- </div>
20
- </template>
21
-
22
- <script lang="ts">
23
- const getStyle = (baseSize: string, position: { pos:string,textAlign: string}) => {
24
- const c = (f: number) => `calc(${f} * ${baseSize})`;
25
- const { pos, textAlign } = position;
26
- return {
27
- wrap: {
28
- position: 'fixed',
29
- left: 0,
30
- pos:pos? pos: c(0.05),
31
- zIndex: 9999,
32
- width: '100%',
33
- padding: `0 ${c(0.2)}`,
34
- pointerEvents: 'none',
35
- textAlign,
36
- },
37
- bar: (bg: string) => ({
38
- display: 'inline-block',
39
- width: 'auto',
40
- minWidth: baseSize,
41
- maxWidth: `calc(100vw - ${c(0.4)})`,
42
- padding: `${c(0.15)} ${c(0.2)}`,
43
- margin: `0 0 ${c(0.05)}`,
44
- borderRadius: c(0.02),
45
- lineHeight: c(0.2),
46
- color: '#fff',
47
- background: bg,
48
- boxShadow: `0 ${c(0.01)} ${c(0.025)} rgba(0,0,0, .15)`,
49
- cursor: 'pointer',
50
- textAlign: 'center',
51
- pointerEvents: 'all',
52
- userSelect: 'none',
53
- }),
54
- };
55
- };
56
- import { defineComponent } from 'vue'
57
- export default defineComponent({
58
- name: 'Snackbar',
59
- props: {
60
- colors: { default: ()=> ({
61
- open: '#333',
62
- info: '#3DBD7D',
63
- error: '#FA7377',
64
- warn: '#FF6600',
65
- }), type: Object},
66
- position: { default: 'top-center', type: String},
67
- holdTime: {default:5000, type:Number}
68
- },
69
- data() {
70
- return {
71
- msgs: [] as Array<{
72
- color: string,
73
- msg:string,
74
- timer: ReturnType<typeof setTimeout>|undefined,
75
- }>,
76
- baseSize: '5rem',
77
- };
78
- },
79
- computed: {
80
- $_position(): { pos:string,textAlign: string} {
81
- const [p, textAlign] = this.position.toString().split('-');
82
- return {
83
- pos: ['top', 'bottom'].includes(p) ? p : 'top',
84
- textAlign: ['left', 'center', 'right'].includes(textAlign)
85
- ? textAlign
86
- : 'center',
87
- };
88
- },
89
- style(): {wrap: {
90
- position: string,
91
- left: number,
92
- pos: string,
93
- zIndex: number,
94
- width: string,
95
- padding: string,
96
- pointerEvents: string,
97
- textAlign:string,
98
- },
99
- bar: (bg:string) =>{
100
- display: string,
101
- width:string,
102
- minWidth: string,
103
- maxWidth:string,
104
- padding: string,
105
- margin: string,
106
- borderRadius: string,
107
- lineHeight: string,
108
- color: string,
109
- background: string,
110
- boxShadow: string,
111
- cursor: string,
112
- textAlign: string,
113
- pointerEvents: string,
114
- userSelect: string,
115
- }}{
116
- return getStyle(this.baseSize, this.$_position);
117
- },
118
- },
119
- methods: {
120
- info(msg: string): boolean {
121
- const color = this.colors.info;
122
- this.open({ color, msg }, false);
123
- return true;
124
- },
125
- error(msg: string): boolean {
126
- const color = this.colors.error;
127
- this.open({ color, msg }, false);
128
- return false;
129
- },
130
- warn(msg: string): boolean {
131
- const color = this.colors.warn;
132
- this.open({ color, msg }, false);
133
- return true;
134
- },
135
- open(message: {color:string, msg:string}|string, isOpen = true): boolean {
136
- let msg;
137
- let color;
138
- if (!isOpen) {
139
- color = (message as {color:string, msg:string}).color;
140
- msg = (message as {color:string, msg:string}).msg;
141
- } else {
142
- color = this.colors.open;
143
- msg = (message as string);
144
- }
145
- const msgObj = {
146
- color,
147
- msg,
148
- timer: setTimeout(this.pop, this.holdTime),
149
- };
150
-
151
- this.msgs.push(msgObj);
152
-
153
- return true;
154
- },
155
- pop(i = 0): void {
156
- if (this.msgs[i]) clearTimeout((this.msgs[i].timer as unknown as number));
157
- this.msgs.splice(i, 1);
158
- },
159
- },
160
- })
161
- </script>
162
- <style lang="scss">
163
- .octopus-app{
164
- .snack-bar-wrap{
165
- bottom: 0px;
166
- }
167
- }
168
- </style>
@@ -1,41 +0,0 @@
1
- <template>
2
- <div class="page-box">
3
- <h1>{{ title }}</h1>
4
- <PodcastList
5
- :first="0"
6
- :size="30"
7
- :iab-id="iabId"
8
- :organisation-id="orgaArray"
9
- />
10
- </div>
11
- </template>
12
-
13
- <script lang="ts">
14
- import PodcastList from '../display/podcasts/PodcastList.vue';
15
- import { useFilterStore } from '@/stores/FilterStore';
16
- import { useGeneralStore } from '@/stores/GeneralStore';
17
- import { mapState } from 'pinia';
18
- import { defineComponent } from 'vue'
19
- import { Category } from '@/stores/class/general/category';
20
- export default defineComponent({
21
- components: {
22
- PodcastList,
23
- },
24
- props: {
25
- iabId: { default: undefined, type: Number},
26
- },
27
-
28
- computed: {
29
- ...mapState(useGeneralStore, ['storedCategories']),
30
- ...mapState(useFilterStore, ['filterOrgaId']),
31
- orgaArray(): Array<string>{
32
- return this.filterOrgaId ? [this.filterOrgaId] : [];
33
- },
34
- title():string{
35
- const matchCategories = this.storedCategories.filter((c: Category) => c.id === this.iabId);
36
- if (1 !== matchCategories.length) return "";
37
- return matchCategories[0]['name'];
38
- }
39
- },
40
- })
41
- </script>
@@ -1,125 +0,0 @@
1
- <template>
2
- <div class="page-box">
3
- <template v-if="0 === rubriquageFilter.length">
4
- <PodcastInlineList
5
- v-for="c in categories"
6
- :key="c.id"
7
- :iab-id="c.id"
8
- :title="c.name"
9
- :button-text="$t('All podcast button', { name: c.name })"
10
- />
11
- </template>
12
- <template v-else>
13
- <PodcastInlineList
14
- v-for="r in rubriqueToShow"
15
- :key="r.rubriqueId"
16
- :rubrique-id="rubriqueId.concat(r.rubriqueId)"
17
- :title="r.name"
18
- :button-text="$t('All podcast button', { name: r.name })"
19
- />
20
- <template v-if="rubriqueDisplay && rubriqueDisplay.length > 0">
21
- <PodcastInlineList
22
- v-if="rubriqueDisplay.length < rubriqueMaxDisplay"
23
- :no-rubriquage-id="[rubriqueDisplay[0].rubriquageId]"
24
- :rubrique-id="rubriqueId"
25
- :title="$t('Without rubric')"
26
- :button-text="$t('All podcast button', { name: $t('Without rubric') })"
27
- />
28
- <router-link
29
- v-else
30
- :to="{
31
- name: 'podcasts',
32
- query: { productor: filterOrgaId,
33
- iabId: filterIab?.id,
34
- rubriquesId: rubriqueQueryParam },
35
- }"
36
- class="btn btn-primary align-self-center width-fit-content mt-5 m-auto"
37
- >
38
- {{
39
- $t('See more')
40
- }}
41
- </router-link>
42
- </template>
43
- </template>
44
- </div>
45
- </template>
46
-
47
- <script lang="ts">
48
- import PodcastInlineList from '../display/podcasts/PodcastInlineList.vue';
49
- import { state } from '../../stores/ParamSdkStore';
50
- import { RubriquageFilter } from '@/stores/class/rubrique/rubriquageFilter';
51
- import { Rubriquage } from '@/stores/class/rubrique/rubriquage';
52
- import { Rubrique } from '@/stores/class/rubrique/rubrique';
53
- import { useFilterStore } from '@/stores/FilterStore';
54
- import { useGeneralStore } from '@/stores/GeneralStore';
55
- import { mapState } from 'pinia';
56
- import { defineComponent } from 'vue';
57
- import { Category } from '@/stores/class/general/category';
58
- export default defineComponent({
59
- name: 'Home',
60
- components: {
61
- PodcastInlineList,
62
- },
63
- data() {
64
- return {
65
- rubriqueId: [] as Array<number>,
66
- rubriqueMaxDisplay: 20 as number,
67
- };
68
- },
69
- computed: {
70
- ...mapState(useGeneralStore, ['storedCategories']),
71
- ...mapState(useFilterStore, ['filterRubriquage', 'filterOrgaId', 'filterRubrique', 'filterRubriqueDisplay', 'filterIab']),
72
- rubriqueQueryParam(): string|undefined{
73
- if(this.filterRubrique?.length){
74
- return this.filterRubrique.map((value: RubriquageFilter) => value.rubriquageId+':'+value.rubriqueId).join();
75
- }
76
- return undefined;
77
- },
78
- rubriqueDisplay(): Array<Rubrique>{
79
- return this.filterRubriqueDisplay.filter((rubrique: Rubrique) => 0 !== rubrique.podcastCount );
80
- },
81
- rubriqueToShow(): Array<Rubrique>{
82
- if(!this.rubriqueDisplay || this.rubriqueDisplay.length < this.rubriqueMaxDisplay){
83
- return this.rubriqueDisplay ?? [];
84
- }
85
- return this.rubriqueDisplay.slice(0, this.rubriqueMaxDisplay);
86
- },
87
- rubriquageFilter(): Array<Rubriquage>{
88
- return this.filterOrgaId? this.filterRubriquage :[];
89
- },
90
- rubriqueFilter(): Array<RubriquageFilter>{
91
- return this.filterRubrique;
92
- },
93
- categories(): Array<Category> {
94
- if(this.filterIab){
95
- return [this.filterIab];
96
- }
97
- return this.storedCategories.filter((c: Category) => {
98
- if (state.generalParameters.podcastmaker) return c.podcastOrganisationCount;
99
- return c.podcastCount;
100
- });
101
- },
102
- },
103
- watch:{
104
- rubriqueFilter:{
105
- deep: true,
106
- immediate: true,
107
- handler(){
108
- this.updateRubriquageFilter();
109
- }
110
- }
111
- },
112
- methods:{
113
- updateRubriquageFilter(){
114
- const length = this.rubriqueFilter.length;
115
- const rubriqueId: Array<number>= [];
116
- for (let index = 0; index < length; index++) {
117
- if(0 < this.rubriqueFilter[index].rubriqueId){
118
- rubriqueId.push(this.rubriqueFilter[index].rubriqueId);
119
- }
120
- }
121
- this.rubriqueId = rubriqueId;
122
- },
123
- }
124
- })
125
- </script>
@@ -1,64 +0,0 @@
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
14
- :organisation-id="organisationId"
15
- />
16
- <RadioList
17
- :organisation-id="organisationId"
18
- />
19
- </template>
20
- </div>
21
- </template>
22
-
23
- <script lang="ts">
24
- import { state } from '../../stores/ParamSdkStore';
25
- import { Organisation } from '@/stores/class/general/organisation';
26
- import { defineComponent, defineAsyncComponent } from 'vue';
27
- import { useFilterStore } from '@/stores/FilterStore';
28
- import { mapState } from 'pinia';
29
- const LiveList = defineAsyncComponent(() => import('../display/live/LiveList.vue'));
30
- const RadioList = defineAsyncComponent(() => import('../display/live/RadioList.vue'));
31
- const OrganisationChooser = defineAsyncComponent(() => import('../display/organisation/OrganisationChooser.vue'));
32
- export default defineComponent({
33
- components: {
34
- LiveList,
35
- RadioList,
36
- OrganisationChooser,
37
- },
38
- props: {
39
- organisationId: { default: undefined, type: String },
40
- productor:{default:undefined, type: String}
41
- },
42
- emits: ['update:organisationId'],
43
-
44
- computed: {
45
- ...mapState(useFilterStore, ['filterOrgaId']),
46
-
47
- isPodcastmaker(): boolean {
48
- return (state.generalParameters.podcastmaker as boolean);
49
- },
50
- },
51
- created() {
52
- if (this.productor) {
53
- this.$emit('update:organisationId',this.productor);
54
- } else if (this.filterOrgaId) {
55
- this.$emit('update:organisationId',this.filterOrgaId);
56
- }
57
- },
58
- methods: {
59
- onOrganisationSelected(organisation: Organisation|undefined): void {
60
- this.$emit('update:organisationId', organisation?.id);
61
- },
62
- },
63
- })
64
- </script>
@@ -1,164 +0,0 @@
1
- <template>
2
- <div class="page-box">
3
- <template
4
- v-if="loaded && !error"
5
- >
6
- <div class="page-element-title-container">
7
- <div class="page-element-title">
8
- <h1>{{ pageTitle }}</h1>
9
- </div>
10
- <div
11
- class="page-element-bg"
12
- :style="backgroundDisplay"
13
- />
14
- </div>
15
- <div class="d-flex flex-column page-element">
16
- <div class="module-box">
17
- <div class="mb-5 mt-3 descriptionText">
18
- <img
19
- v-lazy="proxyImageUrl(imageUrl, '330')"
20
- width="330"
21
- height="330"
22
- :alt="$t('Playlist name image', { name: name })"
23
- class="img-box float-start me-3 mb-3"
24
- >
25
- <h2>{{ name }}</h2>
26
- <!-- eslint-disable vue/no-v-html -->
27
- <p
28
- class="html-wysiwyg-content"
29
- v-html="urlify(description)"
30
- />
31
- <!-- eslint-enable -->
32
- </div>
33
- <EditBox
34
- v-if="editRight && pageParameters.isEditBox"
35
- :playlist="playlist"
36
- />
37
- </div>
38
- <SharePlayer
39
- v-if="pageParameters.isSharePlayer && authenticated"
40
- :playlist="playlist"
41
- :organisation-id="myOrganisationId"
42
- :is-education="isEducation"
43
- />
44
- <ShareButtons
45
- v-if="pageParameters.isShareButtons"
46
- :playlist="playlist"
47
- />
48
- <PodcastList :playlist="playlist" />
49
- </div>
50
- </template>
51
- <ClassicLoading
52
- :loading-text="!loaded?$t('Loading content ...'):undefined"
53
- :error-text="error?$t(`Playlist doesn't exist`):undefined"
54
- />
55
- </div>
56
- </template>
57
-
58
- <script lang="ts">
59
- import { orgaComputed } from '../mixins/orgaComputed';
60
- import ClassicLoading from '../form/ClassicLoading.vue';
61
- import PodcastList from '../display/playlist/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 { handle403 } from '../mixins/handle403';
67
- import { Playlist } from '@/stores/class/general/playlist';
68
- import { defineComponent, defineAsyncComponent } from 'vue';
69
- import { AxiosError } from 'axios';
70
- const ShareButtons = defineAsyncComponent(() => import('../display/sharing/ShareButtons.vue'));
71
- const EditBox = defineAsyncComponent(() => import('@/components/display/edit/EditBox.vue'));
72
- const SharePlayer = defineAsyncComponent(() => import('../display/sharing/SharePlayer.vue'));
73
- export default defineComponent({
74
- components: {
75
- ShareButtons,
76
- EditBox,
77
- PodcastList,
78
- SharePlayer,
79
- ClassicLoading
80
- },
81
- mixins:[displayMethods, handle403, orgaComputed, imageProxy],
82
-
83
- props: {
84
- playlistId: { default: undefined, type: Number},
85
- isEducation: { default: false, type: Boolean},
86
- },
87
-
88
- emits: ['playlistTitle'],
89
- data() {
90
- return {
91
- loaded: false as boolean,
92
- playlist: undefined as Playlist | undefined,
93
- error: false as boolean,
94
- };
95
- },
96
- computed: {
97
- pageParameters(){
98
- return {
99
- isEditBox : (state.podcastPage.EditBox as boolean),
100
- isShareButtons: (state.podcastPage.ShareButtons as boolean),
101
- isSharePlayer: (state.podcastPage.SharePlayer as boolean),
102
- };
103
- },
104
- pageTitle(): string{
105
- return this.playlistRadio ? this.$t('Mix of episodes'):this.$t('Playlist');
106
- },
107
- playlistRadio(): boolean{
108
- return "AMBIANCE"===this.playlist?.ambianceType || "AMBIANCE_PROGRAMMED"===this.playlist?.ambianceType
109
- },
110
- name(): string {
111
- return this.playlist?.title ??'';
112
- },
113
- imageUrl(): string {
114
- return this.playlist?.imageUrl ?? '';
115
- },
116
- description(): string {
117
- return this.playlist?.description ??'';
118
- },
119
- editRight(): boolean {
120
- return (true===state.generalParameters.isPlaylist &&
121
- this.myOrganisationId === this.playlist?.organisation?.id) ||
122
- true ===state.generalParameters.isAdmin
123
- },
124
- backgroundDisplay():string{
125
- if(!this.playlist){
126
- return "";
127
- }
128
- return `background-image: url('${this.playlist.imageUrl}');`;
129
- },
130
- },
131
- watch: {
132
- playlistId: {
133
- immediate: true,
134
- handler() {
135
- this.getPlaylistDetails();
136
- },
137
- },
138
- },
139
-
140
- methods: {
141
- initError():void{
142
- this.error = true;
143
- this.loaded = true;
144
- },
145
- async getPlaylistDetails(): Promise<void> {
146
- try {
147
- this.loaded = false;
148
- this.error = false;
149
- this.playlist = await octopusApi.fetchData<Playlist>(0, 'playlist/'+this.playlistId);
150
- if((!this.editRight && this.playlistRadio) ||
151
- ("PUBLIC"!==this.playlist.organisation?.privacy && this.filterOrgaId!==this.playlist.organisation?.id)){
152
- this.initError();
153
- return;
154
- }
155
- this.$emit('playlistTitle', this.playlist.title);
156
- } catch(error) {
157
- this.handle403((error as AxiosError));
158
- this.initError();
159
- }
160
- this.loaded = true;
161
- },
162
- },
163
- })
164
- </script>