@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,307 +0,0 @@
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>{{ titlePage }}</h1>
7
- <Countdown
8
- v-if="isCounter"
9
- :time-remaining="timeRemaining"
10
- />
11
- </div>
12
- <div
13
- class="page-element-bg"
14
- :style="backgroundDisplay"
15
- />
16
- </div>
17
- <div class="d-flex flex-column page-element">
18
- <PodcastModuleBox
19
- :playing-podcast="playingPodcast"
20
- :podcast="podcast"
21
- :fetch-conference="fetchConference"
22
- @updatePodcast="updatePodcast"
23
- />
24
- <SharePlayer
25
- v-if="pageParameters.isSharePlayer && (authenticated || notExclusive)"
26
- :podcast="podcast"
27
- :emission="podcast.emission"
28
- :exclusive="exclusive"
29
- :not-exclusive="notExclusive"
30
- :organisation-id="myOrganisationId"
31
- :is-education="isEducation"
32
- />
33
- <ShareButtons
34
- v-if="pageParameters.isShareButtons"
35
- :podcast="podcast"
36
- />
37
- <SubscribeButtons
38
- v-if="pageParameters.isShareButtons && countLink >= 1"
39
- :emission="podcast.emission"
40
- />
41
- <CommentSection
42
- v-if="!isPodcastmaker"
43
- ref="commentSection"
44
- :podcast="podcast"
45
- :fetch-conference="fetchConference"
46
- />
47
- <PodcastInlineList
48
- class="mt-4"
49
- :emission-id="podcast.emission.emissionId"
50
- :href="'/main/pub/emission/' + podcast.emission.emissionId"
51
- :title="$t('More episodes of this emission')"
52
- :button-text="$t('All podcast emission button')"
53
- />
54
- <PodcastInlineList
55
- :podcast-id="podcastId"
56
- :title="$t('Suggested listening')"
57
- />
58
- <PodcastInlineList
59
- v-for="c in categories"
60
- :key="c.id"
61
- :iab-id="c.id"
62
- :href="'/main/pub/category/' + c.id"
63
- :title="$t('More episodes of this category : ', { name: c.name })"
64
- :button-text="$t('All podcast button', { name: c.name })"
65
- />
66
- </div>
67
- </template>
68
- <ClassicLoading
69
- :loading-text="!loaded?$t('Loading content ...'):undefined"
70
- :error-text="error?$t(`This episode is not available for (re)listening`):undefined"
71
- />
72
- </div>
73
- </template>
74
-
75
- <script lang="ts">
76
- import { orgaComputed } from '../mixins/orgaComputed';
77
- import PodcastInlineList from '../display/podcasts/PodcastInlineList.vue';
78
- import PodcastModuleBox from '../display/podcasts/PodcastModuleBox.vue';
79
- import ClassicLoading from '../form/ClassicLoading.vue';
80
- import octopusApi from '@saooti/octopus-api';
81
- import crudApi from '@/api/classicCrud';
82
- import { state } from '../../stores/ParamSdkStore';
83
- import dayjs from 'dayjs';
84
- import { Podcast } from '@/stores/class/general/podcast';
85
- import { Conference } from '@/stores/class/conference/conference';
86
- import { handle403 } from '../mixins/handle403';
87
- import { defineComponent, defineAsyncComponent } from 'vue';
88
- import { CommentPodcast } from '@/stores/class/general/comment';
89
- import { Category } from '@/stores/class/general/category';
90
- import { useGeneralStore } from '@/stores/GeneralStore';
91
- import { mapState } from 'pinia';
92
- import { AxiosError } from 'axios';
93
- const ShareButtons = defineAsyncComponent(() => import('../display/sharing/ShareButtons.vue'));
94
- const SharePlayer = defineAsyncComponent(() => import('../display/sharing/SharePlayer.vue'));
95
- const SubscribeButtons = defineAsyncComponent(() => import('../display/sharing/SubscribeButtons.vue'));
96
- const Countdown = defineAsyncComponent(() => import('../display/live/CountDown.vue'));
97
- const CommentSection = defineAsyncComponent(() => import('../display/comments/CommentSection.vue'));
98
- export default defineComponent({
99
- name: "Podcast",
100
- components: {
101
- PodcastInlineList,
102
- ShareButtons,
103
- SharePlayer,
104
- SubscribeButtons,
105
- Countdown,
106
- CommentSection,
107
- PodcastModuleBox,
108
- ClassicLoading
109
- },
110
-
111
- mixins: [handle403, orgaComputed],
112
-
113
- props: {
114
- updateStatus: { default: undefined, type: String},
115
- playingPodcast: { default: undefined, type: Object as ()=> Podcast},
116
- podcastId: { default: 0, type: Number},
117
- isEducation: { default: false, type: Boolean},
118
- },
119
-
120
- emits: ['initConferenceId', 'podcastTitle'],
121
-
122
- data() {
123
- return {
124
- loaded: false as boolean,
125
- podcast: undefined as Podcast|undefined,
126
- error: false as boolean,
127
- exclusive: false as boolean,
128
- notExclusive: false as boolean,
129
- fetchConference: undefined as Conference|undefined,
130
- };
131
- },
132
-
133
- computed: {
134
- ...mapState(useGeneralStore, ['storedCategories']),
135
- backgroundDisplay():string{
136
- if(!this.podcast){
137
- return "";
138
- }
139
- return `background-image: url('${this.podcast.imageUrl}');`;
140
- },
141
- isPodcastmaker(): boolean {
142
- return (state.generalParameters.podcastmaker as boolean);
143
- },
144
- pageParameters(){
145
- return {
146
- isShareButtons: (state.podcastPage.ShareButtons as boolean),
147
- isSharePlayer: (state.podcastPage.SharePlayer as boolean),
148
- };
149
- },
150
- emissionMainCategory(): number {
151
- if(!this.podcast){return 0;}
152
- if (this.podcast.emission.annotations?.mainIabId) {
153
- return parseInt((this.podcast.emission.annotations.mainIabId as string), 10);
154
- } else if (this.podcast.emission.iabIds?.length) {
155
- return this.podcast.emission.iabIds[0];
156
- }
157
- return 0;
158
- },
159
- categories(): Array<Category> {
160
- if ('undefined' === typeof this.podcast) return [];
161
- return this.storedCategories
162
- .filter((item: Category) => {
163
- return ( this.podcast?.emission.iabIds &&
164
- -1 !== this.podcast.emission.iabIds.indexOf(item.id)
165
- );
166
- })
167
- .sort((a: Category, b: Category) => {
168
- if (a.id === this.emissionMainCategory) return -1;
169
- if (b.id === this.emissionMainCategory) return 1;
170
- return 0;
171
- });
172
- },
173
- editRight(): boolean {
174
- return (true ===this.authenticated &&this.myOrganisationId === this.podcast?.organisation.id) ||true===state.generalParameters.isAdmin;
175
- },
176
- countLink(): number {
177
- const platformShare = ['amazon','googlePodcasts','applePodcast', 'deezer', 'spotify', 'tunein',
178
- 'radioline', 'podcastAddict', 'playerFm', 'pocketCasts'];
179
- let count = 0;
180
- for (let i = 0, len = platformShare.length; i < len; i++) {
181
- if (undefined !== this.podcast?.emission?.annotations?.[platformShare[i]]) count++;
182
- }
183
- return count;
184
- },
185
- isLiveReadyToRecord(): boolean {
186
- return (undefined!==this.podcast?.conferenceId && 0 !== this.podcast?.conferenceId && 'READY_TO_RECORD' === this.podcast?.processingStatus);
187
- },
188
- isCounter(): boolean {
189
- return (
190
- this.isLiveReadyToRecord &&
191
- undefined!==this.fetchConference &&
192
- ('PLANNED' === this.fetchConference.status ||
193
- 'PENDING' === this.fetchConference.status)
194
- );
195
- },
196
- isOctopusAndAnimator(): boolean {
197
- return (
198
- !this.isPodcastmaker &&
199
- this.editRight &&
200
- (state.generalParameters.isRoleLive as boolean)
201
- );
202
- },
203
- titlePage(): string {
204
- return this.isLiveReadyToRecord ?this.$t('Live episode'): this.$t('Episode');
205
- },
206
- timeRemaining(): string {
207
- return !this.podcast ? "":dayjs(this.podcast.pubDate).diff(dayjs(), 'seconds').toString();
208
- },
209
- },
210
- watch: {
211
- updateStatus(): void {
212
- if (this.fetchConference && null !== this.fetchConference) {
213
- this.fetchConference.status = this.updateStatus;
214
- }
215
- },
216
- podcastId: {
217
- immediate: true,
218
- async handler() {
219
- await this.getPodcastDetails();
220
- this.initConference();
221
- },
222
- },
223
- },
224
-
225
- methods: {
226
- async fetchConferencePublic(){
227
- const data = await octopusApi.fetchData<string>(9, 'conference/realstatus/'+this.podcast.conferenceId);
228
- this.fetchConference = {
229
- status: data,
230
- conferenceId: this.podcast.conferenceId,
231
- title:'',
232
- };
233
- },
234
- async initConference(){
235
- if (!this.podcast || undefined==this.podcast.conferenceId) return;
236
- if (this.isOctopusAndAnimator ) {
237
- try {
238
- const data = await crudApi.fetchData<Conference>(9,'conference/'+this.podcast.conferenceId);
239
- this.fetchConference = data ? data : {conferenceId:-1, title:''};
240
- } catch {
241
- await this.fetchConferencePublic();
242
- }
243
- } else{
244
- await this.fetchConferencePublic();
245
- }
246
- if (
247
- this.fetchConference &&
248
- -1 !== this.fetchConference.conferenceId &&
249
- 'PUBLISHING' !== this.fetchConference.status &&
250
- 'DEBRIEFING' !== this.fetchConference.status
251
- ) {
252
- this.$emit('initConferenceId', this.podcast.conferenceId);
253
- }
254
- },
255
- updatePodcast(podcastUpdated: Podcast): void {
256
- this.podcast = podcastUpdated;
257
- },
258
- initError():void{
259
- this.error = true;
260
- this.loaded = true;
261
- },
262
- handleAnnotations(){
263
- if(!this.podcast){return;}
264
- if (this.podcast.emission.annotations?.exclusive) {
265
- this.exclusive ='true' === this.podcast.emission.annotations.exclusive;
266
- this.exclusive =
267
- this.exclusive &&
268
- this.myOrganisationId !== this.podcast.organisation.id;
269
- }
270
- if (this.podcast.emission.annotations?.notExclusive) {
271
- this.notExclusive ='true' === this.podcast.emission.annotations.notExclusive;
272
- }
273
- },
274
- async getPodcastDetails(): Promise<void> {
275
- this.loaded = false;
276
- this.error = false;
277
- try {
278
- const data : Podcast = await octopusApi.fetchData<Podcast>(0, 'podcast/'+this.podcastId);
279
- if("PUBLIC"!==data.organisation.privacy && this.filterOrgaId!==data.organisation.id){
280
- this.initError();
281
- return;
282
- }
283
- this.podcast = data;
284
- this.$emit('podcastTitle', this.podcast.title);
285
- this.handleAnnotations();
286
- if (
287
- (!this.podcast.availability.visibility ||
288
- ('READY_TO_RECORD' !== this.podcast.processingStatus &&
289
- 'READY' !== this.podcast.processingStatus && 'PROCESSING' !== this.podcast.processingStatus) ||
290
- false === this.podcast.valid) &&
291
- !this.editRight
292
- ) {
293
- this.error = true;
294
- }
295
- this.loaded = true;
296
- } catch(error) {
297
- this.handle403((error as AxiosError));
298
- this.initError();
299
- }
300
- },
301
-
302
- receiveCommentEvent(event:{type: string; comment: CommentPodcast; oldStatus?:string } ): void {
303
- (this.$refs.commentSection as InstanceType<typeof CommentSection>).receiveCommentEvent(event);
304
- },
305
- },
306
- })
307
- </script>
@@ -1,146 +0,0 @@
1
- <template>
2
- <div class="page-box">
3
- <ProductorSearch
4
- v-model:organisation-id="organisationId"
5
- v-model:search-pattern="searchPattern"
6
- />
7
- <AdvancedSearch
8
- :is-education="isEducation"
9
- :is-emission="false"
10
- :reset-rubriquage="resetRubriquage"
11
- :sort-criteria="sortCriteria"
12
- :include-hidden="includeHidden"
13
- :organisation-id="organisationId"
14
- @updateCategory="iabId=$event"
15
- @updateRubriquageFilter="updateRubriquageFilter"
16
- @updateMonetization="monetization = $event"
17
- @updateFromDate="fromDate = $event"
18
- @updateToDate="toDate = $event"
19
- @updateSortCriteria="sortCriteria=$event"
20
- @includeHidden="includeHidden = $event"
21
- @notValid="notValid = $event"
22
- />
23
- <PodcastList
24
- :show-count="true"
25
- :first="0"
26
- :size="30"
27
- :organisation-id="orgaArray"
28
- :query="searchPattern"
29
- :monetization="monetization"
30
- :before="toDate"
31
- :after="fromDate"
32
- :sort-criteria="sortCriteria"
33
- :include-hidden="includeHidden"
34
- :not-valid="notValid"
35
- :iab-id="iabId"
36
- :rubrique-id="rubriqueId"
37
- :rubriquage-id="rubriquageId"
38
- :no-rubriquage-id="noRubriquageId"
39
- />
40
- </div>
41
- </template>
42
-
43
- <script lang="ts">
44
- import { orgaComputed } from '../mixins/orgaComputed';
45
- import PodcastList from '../display/podcasts/PodcastList.vue';
46
- import { state } from '../../stores/ParamSdkStore';
47
- import ProductorSearch from '../display/filter/ProductorSearch.vue';
48
- import AdvancedSearch from '../display/filter/AdvancedSearch.vue';
49
- import { RubriquageFilter } from '@/stores/class/rubrique/rubriquageFilter';
50
- import { useFilterStore } from '@/stores/FilterStore';
51
- import { mapState } from 'pinia';
52
- import { defineComponent } from 'vue';
53
- export default defineComponent({
54
- name:"Podcasts",
55
- components: {
56
- PodcastList,
57
- ProductorSearch,
58
- AdvancedSearch,
59
- },
60
- mixins:[orgaComputed],
61
- props: {
62
- productor: { default: undefined, type: String},
63
- isEducation: { default: false, type: Boolean},
64
- searchInit: { default: "", type: String}
65
- },
66
- data() {
67
- return {
68
- isInit: false as boolean,
69
- searchPattern: '' as string,
70
- organisationId: undefined as string|undefined,
71
- monetization: 'UNDEFINED' as string, // UNDEFINED, YES, NO
72
- fromDate: undefined as string|undefined,
73
- toDate: undefined as string|undefined,
74
- resetRubriquage: false as boolean,
75
- includeHidden: false as boolean,
76
- sortCriteria: 'DATE' as string, // SCORE, DATE, POPULARITY, NAME, LAST_PODCAST_DESC
77
- notValid: false as boolean,
78
- iabId: undefined as number | undefined,
79
- noRubriquageId: [] as Array<number>,
80
- rubriquageId: [] as Array<number>,
81
- rubriqueId: [] as Array<number>,
82
- };
83
- },
84
-
85
- computed: {
86
- ...mapState(useFilterStore, ['filterRubrique', 'filterIab']),
87
- organisationRight(): boolean {
88
- return (true===this.authenticated && this.myOrganisationId === this.organisationId) ||
89
- true===state.generalParameters.isAdmin;
90
- },
91
- orgaArray(): Array<string>{
92
- return this.organisationId ? [this.organisationId] : [];
93
- },
94
- organisation(): string|undefined {
95
- return this.organisationId ?this.organisationId: this.filterOrgaId;
96
- },
97
- },
98
- watch:{
99
- organisationId(): void {
100
- if(!this.isInit){return;}
101
- this.resetRubriquage = !this.resetRubriquage;
102
- this.rubriquageId = [];
103
- this.rubriqueId = [];
104
- this.noRubriquageId = [];
105
- },
106
- searchPattern(value: string): void {
107
- this.sortCriteria = '' !== value ? 'SCORE' : 'DATE';
108
- },
109
- },
110
- created() {
111
- this.initPodcastsPage();
112
- },
113
- methods: {
114
- initPodcastsPage(){
115
- this.searchPattern = this.searchInit ?? '';
116
- this.organisationId = this.productor ?this.productor: this.filterOrgaId;
117
- this.includeHidden = this.organisation && this.organisationRight ? true : false;
118
- this.iabId =this.filterIab?.id;
119
- if(this.filterRubrique.length){
120
- this.updateRubriquageFilter(this.filterRubrique);
121
- }
122
- this.$nextTick(() => {
123
- this.isInit = true;
124
- });
125
- },
126
- updateRubriquageFilter(value: Array<RubriquageFilter>){
127
- const length = value.length;
128
- const allRubriquageId: Array<number>= [];
129
- const noRubriquageId: Array<number>= [];
130
- const rubriqueId: Array<number>= [];
131
- for (let index = 0; index < length; index++) {
132
- if(-1===value[index].rubriqueId){
133
- noRubriquageId.push(value[index].rubriquageId);
134
- } else if(0===value[index].rubriqueId){
135
- allRubriquageId.push(value[index].rubriquageId);
136
- }else{
137
- rubriqueId.push(value[index].rubriqueId);
138
- }
139
- }
140
- this.rubriquageId = allRubriquageId;
141
- this.rubriqueId = rubriqueId;
142
- this.noRubriquageId = noRubriquageId;
143
- },
144
- },
145
- })
146
- </script>
@@ -1,122 +0,0 @@
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>{{ $t('Radio') }}</h1>
7
- </div>
8
- <div
9
- class="page-element-bg"
10
- :style="backgroundDisplay"
11
- />
12
- </div>
13
- <div
14
- v-if="radio"
15
- class="d-flex flex-column page-element"
16
- >
17
- <div class="module-box">
18
- <div class="mb-5 descriptionText">
19
- <RadioImage :radio="radio" />
20
- <h2>{{ radio.name }}</h2>
21
- <div v-if="radio.description">
22
- {{ radio.description }}
23
- </div>
24
- </div>
25
- <RadioCurrently :radio="radio" />
26
- <EditBoxRadio
27
- v-if="editRight"
28
- :radio="radio"
29
- />
30
- </div>
31
- <RadioPlanning
32
- :radio="radio"
33
- />
34
- <SharePlayerRadio
35
- v-if="authenticated"
36
- :canal="radio"
37
- :organisation-id="myOrganisationId"
38
- />
39
- <ShareButtons />
40
- </div>
41
- </template>
42
- <ClassicLoading
43
- :loading-text="!loaded?$t('Loading content ...'):undefined"
44
- :error-text="error?$t(`Emission doesn't exist`):undefined"
45
- />
46
- </div>
47
- </template>
48
-
49
- <script lang="ts">
50
- import octopusApi from '@saooti/octopus-api';
51
- import { state } from '../../stores/ParamSdkStore';
52
- import displayMethods from '../mixins/displayMethods';
53
- import imageProxy from '../mixins/imageProxy';
54
- import { orgaComputed } from '../mixins/orgaComputed';
55
- import { handle403 } from '../mixins/handle403';
56
- import ClassicLoading from '../form/ClassicLoading.vue';
57
- import { defineComponent, defineAsyncComponent } from 'vue';
58
- import { AxiosError } from 'axios';
59
- import { Canal } from '@/stores/class/radio/canal';
60
- const SharePlayerRadio = defineAsyncComponent(() => import('../display/sharing/SharePlayerRadio.vue'));
61
- const ShareButtons = defineAsyncComponent(() => import('../display/sharing/ShareButtons.vue'));
62
- const EditBoxRadio = defineAsyncComponent(() => import('@/components/display/edit/EditBoxRadio.vue'));
63
- const RadioCurrently = defineAsyncComponent(() => import('../display/live/RadioCurrently.vue'));
64
- const RadioImage = defineAsyncComponent(() => import('../display/live/RadioImage.vue'));
65
- const RadioPlanning = defineAsyncComponent(() => import('../display/live/RadioPlanning.vue'));
66
- export default defineComponent({
67
- components: {
68
- SharePlayerRadio,
69
- ShareButtons,
70
- EditBoxRadio,
71
- ClassicLoading,
72
- RadioCurrently,
73
- RadioImage,
74
- RadioPlanning
75
- },
76
- mixins: [displayMethods, handle403, orgaComputed, imageProxy],
77
- props: {
78
- canalId: { default: undefined, type: Number},
79
- },
80
- emits: ['radioTitle'],
81
-
82
- data() {
83
- return {
84
- loaded: false as boolean,
85
- radio: undefined as Canal | undefined,
86
- error: false as boolean,
87
- };
88
- },
89
-
90
- computed: {
91
- editRight(): boolean {
92
- return (true===this.authenticated && this.myOrganisationId === this.radio?.organisationId) ||
93
- true===state.generalParameters.isAdmin
94
- },
95
- backgroundDisplay():string{
96
- return !this.radio? "": `background-image: url('${this.radio.imageUrl}');`;
97
- },
98
- },
99
- watch: {
100
- canalId: {
101
- immediate: true,
102
- handler() {
103
- this.getRadioDetails();
104
- },
105
- },
106
- },
107
- methods: {
108
- async getRadioDetails(): Promise<void> {
109
- this.loaded = false;
110
- this.error = false;
111
- try {
112
- this.radio = await octopusApi.fetchData<Canal>(14,'canal/'+this.canalId);
113
- this.$emit('radioTitle', this.radio.name);
114
- } catch(error) {
115
- this.handle403((error as AxiosError));
116
- this.error = true;
117
- }
118
- this.loaded = true;
119
- },
120
- },
121
- })
122
- </script>
@@ -1,42 +0,0 @@
1
- <template>
2
- <div class="page-box">
3
- <h1>{{ title }}</h1>
4
- <PodcastList
5
- :first="firstRoute"
6
- :size="sizeRoute"
7
- :rubrique-id="rubriqueId"
8
- />
9
- </div>
10
- </template>
11
-
12
- <script lang="ts">
13
- import octopusApi from '@saooti/octopus-api';
14
- import PodcastList from '../display/podcasts/PodcastList.vue';
15
- import { defineComponent } from 'vue'
16
- import { Rubrique } from '@/stores/class/rubrique/rubrique';
17
- export default defineComponent({
18
- name:"Rubrique",
19
- components: {
20
- PodcastList,
21
- },
22
- props: {
23
- firstRoute: { default: 0, type: Number},
24
- sizeRoute: { default: 30, type: Number},
25
- rubriqueId: { default: undefined, type: [ Number ]},
26
- },
27
- data() {
28
- return {
29
- title: '' as string,
30
- };
31
- },
32
- watch: {
33
- rubriqueId: {
34
- immediate: true,
35
- async handler() {
36
- const data = await octopusApi.fetchData<Rubrique>(0, 'rubrique/'+this.rubriqueId);
37
- this.title = data.name;
38
- },
39
- },
40
- },
41
- })
42
- </script>