@saooti/octopus-sdk 40.0.3 → 40.1.0

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 (174) hide show
  1. package/index.ts +31 -31
  2. package/package.json +1 -1
  3. package/plateform.conf +1 -1
  4. package/src/App.vue +9 -3
  5. package/src/api/classicApi.ts +1 -1
  6. package/src/components/composable/player/usePlayerDisplayTime.ts +33 -0
  7. package/src/components/composable/player/usePlayerLive.ts +150 -0
  8. package/src/components/composable/player/usePlayerLogic.ts +265 -0
  9. package/src/components/composable/player/usePlayerLogicProgress.ts +135 -0
  10. package/src/components/composable/player/usePlayerStitching.ts +213 -0
  11. package/src/components/composable/player/usePlayerTranscript.ts +120 -0
  12. package/src/components/composable/player/usePlayerVast.ts +207 -0
  13. package/src/components/composable/podcasts/useCountdown.ts +53 -0
  14. package/src/components/composable/podcasts/usePodcastView.ts +85 -0
  15. package/src/components/composable/radio/usefetchRadioData.ts +75 -0
  16. package/src/components/composable/route/useAdvancedParamInit.ts +165 -0
  17. package/src/components/composable/route/useRouteUpdateParams.ts +48 -0
  18. package/src/components/composable/route/useRubriquesFilterComputed.ts +24 -0
  19. package/src/components/composable/route/useRubriquesFilterParam.ts +32 -0
  20. package/src/components/composable/route/useSeoTitleUrl.ts +30 -0
  21. package/src/components/composable/route/useSimplePageParam.ts +50 -0
  22. package/src/components/composable/useErrorHandler.ts +25 -0
  23. package/src/components/composable/useImageProxy.ts +28 -0
  24. package/src/components/composable/useInit.ts +38 -0
  25. package/src/components/composable/useMetaTitle.ts +19 -0
  26. package/src/components/composable/useMetaTitleWatch.ts +14 -0
  27. package/src/components/composable/useOrgaComputed.ts +23 -0
  28. package/src/components/composable/useOrganisationFilter.ts +65 -0
  29. package/src/components/composable/useResizePhone.ts +27 -0
  30. package/src/components/composable/useSelenium.ts +10 -0
  31. package/src/components/composable/useTagOf.ts +21 -0
  32. package/src/components/display/accessibility/AccessibilityModal.vue +136 -0
  33. package/src/components/display/aggregator/RssSection.vue +1 -4
  34. package/src/components/display/categories/CategoryChooser.vue +1 -1
  35. package/src/components/display/categories/CategoryFilter.vue +7 -3
  36. package/src/components/display/categories/CategoryList.vue +5 -2
  37. package/src/components/display/comments/CommentInput.vue +0 -3
  38. package/src/components/display/comments/CommentList.vue +6 -2
  39. package/src/components/display/comments/CommentPlayer.vue +5 -2
  40. package/src/components/display/comments/CommentSection.vue +0 -2
  41. package/src/components/display/comments/item/CommentBasicView.vue +4 -4
  42. package/src/components/display/comments/item/CommentItem.vue +0 -4
  43. package/src/components/display/comments/item/CommentMoreActions.vue +6 -2
  44. package/src/components/display/emission/EmissionInlineList.vue +6 -6
  45. package/src/components/display/emission/EmissionItem.vue +13 -6
  46. package/src/components/display/emission/EmissionList.vue +5 -2
  47. package/src/components/display/emission/EmissionPlayerItem.vue +8 -5
  48. package/src/components/display/emission/EmissionPresentationItem.vue +16 -7
  49. package/src/components/display/emission/EmissionPresentationList.vue +10 -7
  50. package/src/components/display/filter/AdvancedSearch.vue +9 -6
  51. package/src/components/display/filter/CategorySearchFilter.vue +0 -2
  52. package/src/components/display/filter/ProductorSearch.vue +8 -3
  53. package/src/components/display/filter/RubriqueFilter.vue +6 -2
  54. package/src/components/display/list/ListPaginate.vue +9 -6
  55. package/src/components/display/list/SwiperList.vue +6 -5
  56. package/src/components/display/live/CountDown.vue +7 -15
  57. package/src/components/display/live/CountdownOctopus.vue +10 -30
  58. package/src/components/display/live/LiveItem.vue +0 -2
  59. package/src/components/display/live/LiveList.vue +9 -4
  60. package/src/components/display/live/RadioCurrently.vue +9 -5
  61. package/src/components/display/live/RadioImage.vue +6 -4
  62. package/src/components/display/live/RadioItem.vue +1 -2
  63. package/src/components/display/live/RadioList.vue +5 -3
  64. package/src/components/display/live/RadioPlanning.vue +10 -7
  65. package/src/components/display/organisation/OrganisationChooser.vue +8 -4
  66. package/src/components/display/participant/ParticipantInlineList.vue +5 -5
  67. package/src/components/display/participant/ParticipantItem.vue +13 -5
  68. package/src/components/display/participant/ParticipantList.vue +6 -3
  69. package/src/components/display/playlist/PlaylistItem.vue +12 -5
  70. package/src/components/display/playlist/PlaylistList.vue +6 -3
  71. package/src/components/display/playlist/PodcastList.vue +8 -4
  72. package/src/components/display/podcastmaker/PodcastmakerHeader.vue +6 -3
  73. package/src/components/display/podcasts/DownloadPodcastButton.vue +2 -4
  74. package/src/components/display/podcasts/PodcastImage.vue +6 -3
  75. package/src/components/display/podcasts/PodcastInlineListTemplate.vue +7 -4
  76. package/src/components/display/podcasts/PodcastItem.vue +1 -1
  77. package/src/components/display/podcasts/PodcastItemInfo.vue +6 -3
  78. package/src/components/display/podcasts/PodcastList.vue +6 -3
  79. package/src/components/display/podcasts/PodcastModuleBox.vue +22 -9
  80. package/src/components/display/podcasts/PodcastPlayBar.vue +1 -3
  81. package/src/components/display/podcasts/PodcastPlayButton.vue +1 -3
  82. package/src/components/display/podcasts/PodcastRawTranscript.vue +79 -10
  83. package/src/components/display/podcasts/PodcastRubriqueList.vue +4 -3
  84. package/src/components/display/podcasts/TagList.vue +5 -2
  85. package/src/components/display/podcasts/VideoModuleBox.vue +6 -3
  86. package/src/components/display/rubriques/RubriqueChooser.vue +0 -2
  87. package/src/components/display/rubriques/RubriqueList.vue +7 -5
  88. package/src/components/display/sharing/ShareButtons.vue +4 -2
  89. package/src/components/display/sharing/ShareDistribution.vue +4 -2
  90. package/src/components/form/ClassicEmojiPicker.vue +5 -3
  91. package/src/components/misc/ClassicLazy.vue +2 -2
  92. package/src/components/misc/FooterGarSection.vue +2 -3
  93. package/src/components/misc/FooterSection.vue +9 -5
  94. package/src/components/misc/MobileMenu.vue +5 -3
  95. package/src/components/misc/TopBar.vue +8 -6
  96. package/src/components/misc/TopBarMainContent.vue +8 -4
  97. package/src/components/misc/modal/ClassicModalInBody.vue +2 -3
  98. package/src/components/misc/modal/ClipboardModal.vue +4 -3
  99. package/src/components/misc/modal/NewsletterModal.vue +4 -3
  100. package/src/components/misc/modal/ShareModalPlayer.vue +4 -2
  101. package/src/components/misc/player/PlayerCompact.vue +30 -41
  102. package/src/components/misc/player/PlayerComponent.vue +69 -84
  103. package/src/components/misc/player/PlayerLarge.vue +43 -58
  104. package/src/components/misc/player/elements/PlayerImage.vue +6 -3
  105. package/src/components/misc/player/elements/PlayerTitle.vue +6 -2
  106. package/src/components/misc/player/radio/RadioHistory.vue +2 -4
  107. package/src/components/misc/player/video/PlayerVideoHls.vue +6 -7
  108. package/src/components/pages/EmissionPage.vue +19 -7
  109. package/src/components/pages/EmissionsPage.vue +31 -23
  110. package/src/components/pages/HomePage.vue +5 -2
  111. package/src/components/pages/PageLogout.vue +0 -2
  112. package/src/components/pages/PageNotFound.vue +11 -15
  113. package/src/components/pages/ParticipantPage.vue +18 -7
  114. package/src/components/pages/ParticipantsPage.vue +16 -21
  115. package/src/components/pages/PlaylistPage.vue +18 -7
  116. package/src/components/pages/PlaylistsPage.vue +20 -29
  117. package/src/components/pages/PodcastPage.vue +12 -6
  118. package/src/components/pages/PodcastsPage.vue +46 -48
  119. package/src/components/pages/RadioPage.vue +9 -6
  120. package/src/components/pages/RubriquePage.vue +41 -52
  121. package/src/components/pages/VideoPage.vue +152 -166
  122. package/src/helper/cookiesHelper.ts +20 -0
  123. package/src/helper/displayHelper.ts +15 -0
  124. package/src/helper/downloadHelper.ts +30 -0
  125. package/src/helper/{fetch.ts → fetchHelper.ts} +0 -1
  126. package/src/helper/loadScript.ts +22 -0
  127. package/src/helper/radio/radioHelper.ts +15 -0
  128. package/src/helper/{string.ts → stringHelper.ts} +5 -0
  129. package/src/locale/de.ts +4 -0
  130. package/src/locale/en.ts +4 -0
  131. package/src/locale/es.ts +4 -0
  132. package/src/locale/fr.ts +4 -0
  133. package/src/locale/it.ts +4 -0
  134. package/src/locale/sl.ts +4 -0
  135. package/src/stores/AuthStore.ts +1 -2
  136. package/src/stores/CommentStore.ts +8 -8
  137. package/src/stores/PlayerStore.ts +1 -1
  138. package/src/style/general.scss +15 -1
  139. package/src/components/mixins/cookies.ts +0 -22
  140. package/src/components/mixins/displayMethods.ts +0 -17
  141. package/src/components/mixins/download.ts +0 -33
  142. package/src/components/mixins/fetchParameters.ts +0 -16
  143. package/src/components/mixins/handle403.ts +0 -22
  144. package/src/components/mixins/imageProxy.ts +0 -28
  145. package/src/components/mixins/init.ts +0 -34
  146. package/src/components/mixins/loadScript.ts +0 -25
  147. package/src/components/mixins/metaTitle.ts +0 -15
  148. package/src/components/mixins/metaTitleWatch.ts +0 -26
  149. package/src/components/mixins/orgaComputed.ts +0 -23
  150. package/src/components/mixins/organisationFilter.ts +0 -56
  151. package/src/components/mixins/player/playerDisplayTime.ts +0 -35
  152. package/src/components/mixins/player/playerLive.ts +0 -144
  153. package/src/components/mixins/player/playerLogic.ts +0 -275
  154. package/src/components/mixins/player/playerLogicProgress.ts +0 -135
  155. package/src/components/mixins/player/playerStitching.ts +0 -202
  156. package/src/components/mixins/player/playerTranscript.ts +0 -113
  157. package/src/components/mixins/player/playerVast.ts +0 -198
  158. package/src/components/mixins/podcast/countdown.ts +0 -45
  159. package/src/components/mixins/podcast/podcastView.ts +0 -63
  160. package/src/components/mixins/radio/fetchRadioData.ts +0 -77
  161. package/src/components/mixins/resizePhone.ts +0 -26
  162. package/src/components/mixins/routeParam/advancedParamInit.ts +0 -202
  163. package/src/components/mixins/routeParam/paginateParamInit.ts +0 -43
  164. package/src/components/mixins/routeParam/routeParams.ts +0 -33
  165. package/src/components/mixins/routeParam/rubriquesFilterComputed.ts +0 -22
  166. package/src/components/mixins/routeParam/rubriquesFilterParam.ts +0 -29
  167. package/src/components/mixins/selenium.ts +0 -7
  168. package/src/components/mixins/seoTitleUrl.ts +0 -26
  169. package/src/components/mixins/tagOfMixins.ts +0 -19
  170. package/src/helper/uuidGenerator.ts +0 -7
  171. /package/src/{helper → components/composable}/useEventListener.ts +0 -0
  172. /package/src/{components/mixins/debounce.ts → helper/debounceHelper.ts} +0 -0
  173. /package/src/helper/{dom.ts → domHelper.ts} +0 -0
  174. /package/src/helper/{duration.ts → durationHelper.ts} +0 -0
@@ -13,7 +13,7 @@
13
13
  </div>
14
14
  <div class="img-box">
15
15
  <img
16
- v-lazy="proxyImageUrl(emission.imageUrl, '330')"
16
+ v-lazy="useProxyImageUrl(emission.imageUrl, '330')"
17
17
  width="330"
18
18
  height="330"
19
19
  role="presentation"
@@ -102,9 +102,8 @@ import classicApi from "../../../api/classicApi";
102
102
  import { Emission } from "@/stores/class/general/emission";
103
103
  import { Podcast } from "@/stores/class/general/podcast";
104
104
  import { state } from "../../../stores/ParamSdkStore";
105
- import imageProxy from "../../mixins/imageProxy";
106
- import { orgaComputed } from "../../mixins/orgaComputed";
107
- import displayMethods from "../../mixins/displayMethods";
105
+ import {useImageProxy} from "../../composable/useImageProxy";
106
+ import {useOrgaComputed} from "../../composable/useOrgaComputed";
108
107
  import { usePlayerStore } from "../../../stores/PlayerStore";
109
108
  import { mapState, mapActions } from "pinia";
110
109
  import { defineAsyncComponent, defineComponent } from "vue";
@@ -120,12 +119,16 @@ export default defineComponent({
120
119
  PlayIcon,
121
120
  PauseIcon,
122
121
  },
123
- mixins: [displayMethods, imageProxy, orgaComputed],
124
122
  props: {
125
123
  emission: { default: () => ({}), type: Object as () => Emission },
126
124
  nbPodcasts: { default: undefined, type: Number },
127
125
  rubriqueName: { default: undefined, type: String },
128
126
  },
127
+ setup(){
128
+ const { useProxyImageUrl } = useImageProxy();
129
+ const { isEditRights } = useOrgaComputed();
130
+ return { useProxyImageUrl, isEditRights }
131
+ },
129
132
 
130
133
  data() {
131
134
  return {
@@ -13,7 +13,7 @@
13
13
  :class="isVertical ? 'flex-column' : ''"
14
14
  >
15
15
  <img
16
- v-lazy="proxyImageUrl(emission.imageUrl, isVertical ? '400' : '250')"
16
+ v-lazy="useProxyImageUrl(emission.imageUrl, isVertical ? '400' : '250')"
17
17
  :width="isVertical ? '400' : '250'"
18
18
  :height="isVertical ? '400' : '250'"
19
19
  :class="isVertical ? 'img-box-bigger' : ''"
@@ -45,25 +45,29 @@
45
45
 
46
46
  <script lang="ts">
47
47
  import { useFilterStore } from "../../../stores/FilterStore";
48
- import resizePhone from "../../mixins/resizePhone";
48
+ import {useResizePhone} from "../../composable/useResizePhone";
49
49
  import { Emission } from "@/stores/class/general/emission";
50
- import imageProxy from "../../mixins/imageProxy";
51
- import displayMethods from "../../mixins/displayMethods";
50
+ import {useImageProxy} from "../../composable/useImageProxy";
51
+ import displayHelper from "../../../helper/displayHelper";
52
52
  import { defineComponent } from "vue";
53
53
  import { mapState } from "pinia";
54
54
  export default defineComponent({
55
55
  name: "EmissionItem",
56
56
 
57
- mixins: [displayMethods, imageProxy, resizePhone],
58
-
59
57
  props: {
60
58
  emission: { default: () => ({}), type: Object as () => Emission },
61
59
  isVertical: { default: false, type: Boolean },
62
60
  isDescription: { default: false, type: Boolean },
63
61
  },
62
+ setup(){
63
+ const { isPhone } = useResizePhone();
64
+ const { useProxyImageUrl } = useImageProxy();
65
+ return { isPhone, useProxyImageUrl }
66
+ },
67
+
68
+
64
69
  data() {
65
70
  return {
66
- isPhone: false as boolean,
67
71
  };
68
72
  },
69
73
  computed: {
@@ -91,6 +95,11 @@ export default defineComponent({
91
95
  },
92
96
  },
93
97
  },
98
+ methods:{
99
+ urlify(text:string|undefined){
100
+ return displayHelper.urlify(text);
101
+ },
102
+ }
94
103
  });
95
104
  </script>
96
105
  <style lang="scss">
@@ -17,6 +17,7 @@
17
17
  <div
18
18
  v-if="allEmissions.length > 1"
19
19
  class="emission-column emission-column-margin d-flex-row flex-nowrap"
20
+ :class="allEmissions.length <= 3 ? 'flex-grow-1' : ''"
20
21
  >
21
22
  <EmissionItemPresentation
22
23
  v-if="allEmissions[1]"
@@ -58,13 +59,12 @@
58
59
 
59
60
  <script lang="ts">
60
61
  import classicApi from "../../../api/classicApi";
61
- import { handle403 } from "../../mixins/handle403";
62
+ import {useErrorHandler} from "../../composable/useErrorHandler";
62
63
  import ClassicLoading from "../../form/ClassicLoading.vue";
63
64
  import { Emission } from "@/stores/class/general/emission";
64
65
  import { defineAsyncComponent, defineComponent } from "vue";
65
66
  import { AxiosError } from "axios";
66
- import imageProxy from "../../mixins/imageProxy";
67
- import resizePhone from "../../mixins/resizePhone";
67
+ import {useResizePhone} from "../../composable/useResizePhone";
68
68
  import { ListClassicReturn } from "@/stores/class/general/listReturn";
69
69
  const EmissionItemPresentation = defineAsyncComponent(
70
70
  () => import("./EmissionPresentationItem.vue"),
@@ -76,8 +76,6 @@ export default defineComponent({
76
76
  EmissionItemPresentation,
77
77
  },
78
78
 
79
- mixins: [handle403, imageProxy, resizePhone],
80
-
81
79
  props: {
82
80
  organisationId: { default: undefined, type: String },
83
81
  title: { default: "", type: String },
@@ -86,13 +84,18 @@ export default defineComponent({
86
84
  isDescription: { default: false, type: Boolean },
87
85
  rubriquesId: { default: [], type: Array<number> },
88
86
  },
87
+
88
+ setup(){
89
+ const { isPhone } = useResizePhone();
90
+ const {handle403} = useErrorHandler();
91
+ return { isPhone, handle403 }
92
+ },
93
+
89
94
  data() {
90
95
  return {
91
96
  loading: true as boolean,
92
97
  error: false as boolean,
93
98
  allEmissions: [] as Array<Emission>,
94
- isPhone: false as boolean,
95
- windowWidth: 0 as number,
96
99
  };
97
100
  },
98
101
 
@@ -81,10 +81,10 @@
81
81
 
82
82
  <script lang="ts">
83
83
  import ChevronDownIcon from "vue-material-design-icons/ChevronDown.vue";
84
- import { orgaComputed } from "../../mixins/orgaComputed";
84
+ import {useOrgaComputed} from "../../composable/useOrgaComputed";
85
85
  import { useAuthStore } from "../../../stores/AuthStore";
86
86
  import { useFilterStore } from "../../../stores/FilterStore";
87
- import { rubriquesFilterParam } from "../../mixins/routeParam/rubriquesFilterParam";
87
+ import { useRubriquesFilterParam } from "../../composable/route/useRubriquesFilterParam";
88
88
  import { RubriquageFilter } from "@/stores/class/rubrique/rubriquageFilter";
89
89
  import { defineComponent, defineAsyncComponent } from "vue";
90
90
  import { mapState } from "pinia";
@@ -117,7 +117,6 @@ export default defineComponent({
117
117
  ChevronDownIcon,
118
118
  ClassicSelect
119
119
  },
120
- mixins: [orgaComputed, rubriquesFilterParam],
121
120
  props: {
122
121
  organisationId: { default: undefined, type: String },
123
122
  isEmission: { default: false, type: Boolean },
@@ -147,6 +146,11 @@ export default defineComponent({
147
146
  "update:rubriqueFilter",
148
147
  "update:onlyVideo",
149
148
  ],
149
+ setup(){
150
+ const { isPodcastmaker, isEditRights } = useOrgaComputed();
151
+ const { stringifyRubriquesFilter,updateRouteParamAdvanced } = useRubriquesFilterParam();
152
+ return { isPodcastmaker, isEditRights, stringifyRubriquesFilter,updateRouteParamAdvanced }
153
+ },
150
154
  data() {
151
155
  return {
152
156
  showFilters: false as boolean,
@@ -156,11 +160,10 @@ export default defineComponent({
156
160
 
157
161
  computed: {
158
162
  ...mapState(useGeneralStore, ["platformEducation"]),
159
- ...mapState(useFilterStore, ["filterIab", "filterRubrique"]),
163
+ ...mapState(useFilterStore, ["filterOrgaId","filterIab", "filterRubrique"]),
160
164
  ...mapState(useAuthStore, [
161
165
  "isRoleProduction",
162
- "isRoleContribution",
163
- "isRoleAdmin",
166
+ "isRoleContribution"
164
167
  ]),
165
168
  organisationRight(): boolean {
166
169
  return this.isEditRights(this.organisationId);
@@ -16,7 +16,6 @@
16
16
  </template>
17
17
 
18
18
  <script lang="ts">
19
- import { routeParams } from "../../mixins/routeParam/routeParams";
20
19
  import ClassicCheckbox from "../../form/ClassicCheckbox.vue";
21
20
  import CategoryChooser from "../categories/CategoryChooser.vue";
22
21
  import { defineComponent } from "vue";
@@ -25,7 +24,6 @@ export default defineComponent({
25
24
  CategoryChooser,
26
25
  ClassicCheckbox,
27
26
  },
28
- mixins: [routeParams],
29
27
  props: {
30
28
  iabId: { default: undefined, type: Number },
31
29
  },
@@ -42,10 +42,10 @@
42
42
  </template>
43
43
 
44
44
  <script lang="ts">
45
- import { routeParams } from "../../mixins/routeParam/routeParams";
45
+ import { useRouteUpdateParams } from "../../composable/route/useRouteUpdateParams";
46
46
  import ClassicSearch from "../../form/ClassicSearch.vue";
47
47
  import { state } from "../../../stores/ParamSdkStore";
48
- import orgaFilter from "../../mixins/organisationFilter";
48
+ import { useOrganisationFilter } from "../../composable/useOrganisationFilter";
49
49
  import { Organisation } from "@/stores/class/general/organisation";
50
50
  import { useFilterStore } from "../../../stores/FilterStore";
51
51
  import { mapState, mapActions } from "pinia";
@@ -62,7 +62,6 @@ export default defineComponent({
62
62
  ClassicSearch,
63
63
  ClassicCheckbox,
64
64
  },
65
- mixins: [orgaFilter, routeParams],
66
65
 
67
66
  props: {
68
67
  organisationId: { default: undefined, type: String },
@@ -71,6 +70,12 @@ export default defineComponent({
71
70
  },
72
71
  emits: ["update:organisationId", "update:searchPattern"],
73
72
 
73
+ setup(){
74
+ const { updateRouteParam } = useRouteUpdateParams();
75
+ const {selectOrganisation, removeSelectedOrga} = useOrganisationFilter();
76
+ return {updateRouteParam , selectOrganisation, removeSelectedOrga}
77
+ },
78
+
74
79
  data() {
75
80
  return {
76
81
  keepOrganisation: false as boolean,
@@ -34,7 +34,7 @@
34
34
  </template>
35
35
 
36
36
  <script lang="ts">
37
- import { rubriquesFilterParam } from "../../mixins/routeParam/rubriquesFilterParam";
37
+ import { useRubriquesFilterParam } from "../../composable/route/useRubriquesFilterParam";
38
38
  import classicApi from "../../../api/classicApi";
39
39
  import ClassicCheckbox from "../../form/ClassicCheckbox.vue";
40
40
  import { Rubriquage } from "@/stores/class/rubrique/rubriquage";
@@ -50,7 +50,6 @@ export default defineComponent({
50
50
  RubriqueChoice,
51
51
  ClassicCheckbox,
52
52
  },
53
- mixins: [rubriquesFilterParam],
54
53
  props: {
55
54
  organisationId: { default: undefined, type: String },
56
55
  rubriqueFilter: {
@@ -60,6 +59,11 @@ export default defineComponent({
60
59
  },
61
60
  emits: ["update:rubriqueFilter", "warning"],
62
61
 
62
+ setup(){
63
+ const { stringifyRubriquesFilter } = useRubriquesFilterParam();
64
+ return { stringifyRubriquesFilter }
65
+ },
66
+
63
67
  data() {
64
68
  return {
65
69
  isRubriquage: false as boolean,
@@ -47,13 +47,13 @@
47
47
 
48
48
  <script lang="ts">
49
49
  import PlusIcon from "vue-material-design-icons/Plus.vue";
50
- import domHelper from "../../../helper/dom";
50
+ import domHelper from "../../../helper/domHelper";
51
51
  import ClassicLoading from "../../form/ClassicLoading.vue";
52
52
  import { state } from "../../../stores/ParamSdkStore";
53
53
  import PaginateParams from "./PaginateParams.vue";
54
54
  import PaginateSection from "./PaginateSection.vue";
55
- import resizePhone from "../../mixins/resizePhone";
56
- import { routeParams } from "../../mixins/routeParam/routeParams";
55
+ import {useResizePhone} from "../../composable/useResizePhone";
56
+ import { useRouteUpdateParams } from "../../composable/route/useRouteUpdateParams";
57
57
  import { defineComponent } from "vue";
58
58
  import { usePlayerStore } from "../../../stores/PlayerStore";
59
59
  import { mapState } from "pinia";
@@ -65,7 +65,6 @@ export default defineComponent({
65
65
  ClassicLoading,
66
66
  PlusIcon,
67
67
  },
68
- mixins: [resizePhone, routeParams],
69
68
  props: {
70
69
  first: { default: 0, type: Number },
71
70
  rowsPerPage: { default: 30, type: Number },
@@ -81,10 +80,14 @@ export default defineComponent({
81
80
  },
82
81
 
83
82
  emits: ["update:first", "update:rowsPerPage", "update:isMobile"],
83
+
84
+ setup(){
85
+ const { isPhone, windowWidth } = useResizePhone();
86
+ const { updateRouteParam, updatePaginateSize } = useRouteUpdateParams();
87
+ return { isPhone, windowWidth, updateRouteParam, updatePaginateSize }
88
+ },
84
89
  data() {
85
90
  return {
86
- isPhone: false as boolean,
87
- windowWidth: 0 as number,
88
91
  internSizeChange: false as boolean,
89
92
  };
90
93
  },
@@ -27,13 +27,13 @@
27
27
  </template>
28
28
 
29
29
  <script lang="ts">
30
- import domHelper from "../../../helper/dom";
30
+ import domHelper from "../../../helper/domHelper";
31
31
  import { state } from "../../../stores/ParamSdkStore";
32
32
  import { Swiper, SwiperSlide } from "swiper/vue";
33
33
  import { Navigation } from "swiper/modules";
34
34
  import "swiper/css";
35
35
  import "swiper/css/navigation";
36
- import resizePhone from "../../mixins/resizePhone";
36
+ import {useResizePhone} from "../../composable/useResizePhone";
37
37
  import { defineComponent } from "vue";
38
38
  export default defineComponent({
39
39
  name: "SwiperList",
@@ -42,20 +42,21 @@ export default defineComponent({
42
42
  Swiper,
43
43
  SwiperSlide,
44
44
  },
45
- mixins: [resizePhone],
46
45
 
47
46
  props: {
48
47
  listObject: { default: () => [], type: Array as () => Array<unknown> },
49
48
  sizeItemOverload: { default: undefined, type: Number },
50
49
  },
50
+ setup(){
51
+ const { isPhone, windowWidth } = useResizePhone();
52
+ return { isPhone, windowWidth }
53
+ },
51
54
 
52
55
  data() {
53
56
  return {
54
57
  manualReload: 0 as number,
55
58
  modules: [Navigation],
56
59
  numberItem: 5 as number,
57
- isPhone: false as boolean,
58
- windowWidth: 0 as number,
59
60
  offsetSwiper: 40 as number,
60
61
  widthSwiperUsable: 0 as number,
61
62
  itemSizeWithoutRecalculed: 0 as number,
@@ -3,12 +3,7 @@
3
3
  <div>{{ $t("This live will start") }}</div>
4
4
  <div v-if="countdownTimer">
5
5
  {{
6
- $t("In days hours minutes seconds", {
7
- days: pad(days),
8
- hours: pad(hours),
9
- minutes: pad(minutes),
10
- seconds: pad(remainingSeconds),
11
- })
6
+ $t("In days hours minutes seconds",countdownValues)
12
7
  }}
13
8
  </div>
14
9
  <div v-else>
@@ -17,13 +12,10 @@
17
12
  </div>
18
13
  </template>
19
14
 
20
- <script lang="ts">
21
- import countdown from "../../mixins/podcast/countdown";
22
- import { defineComponent } from "vue";
23
- export default defineComponent({
24
- mixins: [countdown],
25
- props: {
26
- timeRemaining: { default: undefined, type: Number },
27
- },
28
- });
15
+ <script lang="ts" setup>
16
+ import {useCountdown} from "../../composable/podcasts/useCountdown";
17
+ const props = defineProps({
18
+ timeRemaining:{ default: undefined, type: Number },
19
+ })
20
+ const { countdownValues, countdownTimer } = useCountdown(props.timeRemaining);
29
21
  </script>
@@ -8,17 +8,12 @@
8
8
  <div class="mouth" />
9
9
  </div>
10
10
  <div class="thought">
11
- <template v-if="!overrideText">
11
+ <template v-if="!props.overrideText">
12
12
  {{ $t("This live will start") }}
13
13
  <span class="text-lowercase">
14
14
  <template v-if="countdownTimer">
15
15
  {{
16
- $t("In days hours minutes seconds", {
17
- days: pad(days),
18
- hours: pad(hours),
19
- minutes: pad(minutes),
20
- seconds: pad(remainingSeconds),
21
- })
16
+ $t("In days hours minutes seconds", countdownValues)
22
17
  }}
23
18
  </template>
24
19
  <template v-else>
@@ -27,35 +22,20 @@
27
22
  </span>
28
23
  </template>
29
24
  <template v-else>
30
- {{ overrideText }}
25
+ {{ props.overrideText }}
31
26
  </template>
32
27
  </div>
33
28
  </div>
34
29
  </template>
35
-
36
- <script lang="ts">
37
- import countdown from "../../mixins/podcast/countdown";
38
- import { defineComponent } from "vue";
39
-
40
- export default defineComponent({
41
- name: "CountdownOctopus",
42
- mixins: [countdown],
43
- props: {
44
- timeRemaining: { default: undefined, type: Number },
30
+ <script lang="ts" setup>
31
+ import {useCountdown} from "../../composable/podcasts/useCountdown";
32
+ const props = defineProps({
33
+ timeRemaining:{ default: undefined, type: Number },
45
34
  overrideText: { default: undefined, type: String },
46
- },
47
- data() {
48
- return {
49
- seconds: 0 as number,
50
- countdownTimer: undefined as ReturnType<typeof setTimeout> | undefined,
51
- days: 0 as number,
52
- hours: 0 as number,
53
- minutes: 0 as number,
54
- remainingSeconds: 0 as number,
55
- };
56
- },
57
- });
35
+ })
36
+ const { countdownValues, countdownTimer } = useCountdown(props.timeRemaining);
58
37
  </script>
38
+
59
39
  <style lang="scss">
60
40
 
61
41
  .octopus-app .cute-octopus {
@@ -9,7 +9,6 @@
9
9
  <script lang="ts">
10
10
  import classicApi from "../../../api/classicApi";
11
11
  import PodcastItem from "../podcasts/PodcastItem.vue";
12
- import displayMethods from "../../mixins/displayMethods";
13
12
  import { Podcast } from "@/stores/class/general/podcast";
14
13
  import { defineComponent } from "vue";
15
14
  import {
@@ -22,7 +21,6 @@ export default defineComponent({
22
21
  components: {
23
22
  PodcastItem,
24
23
  },
25
- mixins: [displayMethods],
26
24
  props: {
27
25
  fetchConference: { default: undefined, type: Object as () => Conference },
28
26
  },
@@ -47,10 +47,11 @@ import ClassicLoading from "../../form/ClassicLoading.vue";
47
47
  import LiveItem from "./LiveItem.vue";
48
48
  import ClassicSelect from "../../form/ClassicSelect.vue";
49
49
  import SwiperList from "../list/SwiperList.vue";
50
- import { handle403 } from "../../mixins/handle403";
51
- import { orgaComputed } from "../../mixins/orgaComputed";
50
+ import {useErrorHandler} from "../../composable/useErrorHandler";
51
+ import {useOrgaComputed} from "../../composable/useOrgaComputed";
52
52
  import classicApi from "../../../api/classicApi";
53
53
  import { useAuthStore } from "../../../stores/AuthStore";
54
+ import { useFilterStore } from "../../../stores/FilterStore";
54
55
  import { mapActions, mapState } from "pinia";
55
56
  import { Conference } from "@/stores/class/conference/conference";
56
57
  import { defineComponent } from "vue";
@@ -65,12 +66,15 @@ export default defineComponent({
65
66
  ClassicSelect,
66
67
  },
67
68
 
68
- mixins: [handle403, orgaComputed],
69
-
70
69
  props: {
71
70
  organisationId: { default: undefined, type: String },
72
71
  hideIfEmpty: { default: false, type: Boolean },
73
72
  },
73
+ setup(){
74
+ const { isPodcastmaker, isEditRights } = useOrgaComputed();
75
+ const {handle403} = useErrorHandler();
76
+ return { isPodcastmaker, isEditRights, handle403 }
77
+ },
74
78
  data() {
75
79
  return {
76
80
  loading: true as boolean,
@@ -85,6 +89,7 @@ export default defineComponent({
85
89
 
86
90
  computed: {
87
91
  ...mapState(useAuthStore, ["authOrganisation", "isRoleLive"]),
92
+ ...mapState(useFilterStore, ["filterOrgaId"]),
88
93
  displayLiveList(): boolean {
89
94
  return (
90
95
  (undefined !== this.filterOrgaId ||
@@ -16,7 +16,7 @@
16
16
  :title="$t('Episode name page', { name: podcastRadio.title })"
17
17
  >
18
18
  <img
19
- v-lazy="proxyImageUrl(podcastRadio.imageUrl, '80')"
19
+ v-lazy="useProxyImageUrl(podcastRadio.imageUrl, '80')"
20
20
  width="80"
21
21
  height="80"
22
22
  class="small-img-box"
@@ -33,10 +33,10 @@
33
33
  </template>
34
34
 
35
35
  <script lang="ts">
36
+ import {useFetchRadio} from "../../composable/radio/usefetchRadioData";
36
37
  import { usePlayerStore } from "../../../stores/PlayerStore";
37
38
  import { mapState } from "pinia";
38
- import imageProxy from "../../mixins/imageProxy";
39
- import { fetchRadioData } from "../../mixins/radio/fetchRadioData";
39
+ import {useImageProxy} from "../../composable/useImageProxy";
40
40
  import { defineComponent } from "vue";
41
41
  import { Canal } from "@/stores/class/radio/canal";
42
42
  import { MediaRadio } from "@/stores/class/general/player";
@@ -46,11 +46,15 @@ export default defineComponent({
46
46
 
47
47
  components: {},
48
48
 
49
- mixins: [imageProxy, fetchRadioData],
50
-
51
49
  props: {
52
50
  radio: { default: undefined, type: Object as () => Canal },
53
51
  },
52
+ setup(){
53
+ const { fetchRadioMetadata, displayTitle } = useFetchRadio();
54
+ const { useProxyImageUrl } = useImageProxy();
55
+ return { fetchRadioMetadata, displayTitle, useProxyImageUrl };
56
+ },
57
+
54
58
 
55
59
  data() {
56
60
  return {
@@ -5,7 +5,7 @@
5
5
  <img
6
6
  v-lazy="
7
7
  radio.imageUrl
8
- ? proxyImageUrl(radio.imageUrl, '270')
8
+ ? useProxyImageUrl(radio.imageUrl, '270')
9
9
  : '/img/emptyradio.webp'
10
10
  "
11
11
  width="270"
@@ -30,7 +30,7 @@ import PlayIcon from "vue-material-design-icons/Play.vue";
30
30
  import { usePlayerStore } from "../../../stores/PlayerStore";
31
31
  import { useFilterStore } from "../../../stores/FilterStore";
32
32
  import { mapState, mapActions } from "pinia";
33
- import imageProxy from "../../mixins/imageProxy";
33
+ import {useImageProxy} from "../../composable/useImageProxy";
34
34
  import { defineAsyncComponent, defineComponent } from "vue";
35
35
  import { Canal } from "@/stores/class/radio/canal";
36
36
  const PodcastIsPlaying = defineAsyncComponent(() => import("../podcasts/PodcastIsPlaying.vue"));
@@ -42,11 +42,13 @@ export default defineComponent({
42
42
  PodcastIsPlaying
43
43
  },
44
44
 
45
- mixins: [imageProxy],
46
-
47
45
  props: {
48
46
  radio: { default: undefined, type: Object as () => Canal },
49
47
  },
48
+ setup(){
49
+ const { useProxyImageUrl } = useImageProxy();
50
+ return { useProxyImageUrl }
51
+ },
50
52
 
51
53
  computed: {
52
54
  ...mapState(usePlayerStore, ["playerRadio", "playerStatus"]),
@@ -21,7 +21,7 @@
21
21
  </template>
22
22
 
23
23
  <script lang="ts">
24
- import imageProxy from "../../mixins/imageProxy";
24
+
25
25
  import RadioImage from "./RadioImage.vue";
26
26
  import RadioCurrently from "./RadioCurrently.vue";
27
27
  import { defineComponent } from "vue";
@@ -33,7 +33,6 @@ export default defineComponent({
33
33
  RadioCurrently,
34
34
  RadioImage,
35
35
  },
36
- mixins: [imageProxy],
37
36
 
38
37
  props: {
39
38
  radio: { default: undefined, type: Object as () => Canal },
@@ -18,7 +18,7 @@
18
18
 
19
19
  <script lang="ts">
20
20
  import RadioItem from "./RadioItem.vue";
21
- import { handle403 } from "../../mixins/handle403";
21
+ import {useErrorHandler} from "../../composable/useErrorHandler";
22
22
  import classicApi from "../../../api/classicApi";
23
23
  import { useFilterStore } from "../../../stores/FilterStore";
24
24
  import { mapState } from "pinia";
@@ -31,11 +31,13 @@ export default defineComponent({
31
31
  RadioItem,
32
32
  },
33
33
 
34
- mixins: [handle403],
35
-
36
34
  props: {
37
35
  organisationId: { default: undefined, type: String },
38
36
  },
37
+ setup(){
38
+ const {handle403} = useErrorHandler();
39
+ return { handle403 }
40
+ },
39
41
  data() {
40
42
  return {
41
43
  radio: [] as Array<Canal>,