@saooti/octopus-sdk 39.1.2-beta → 39.1.3-SNAPSHOT

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/index.ts +30 -4
  2. package/package.json +2 -2
  3. package/src/App.vue +2 -2
  4. package/src/assets/general.scss +4 -1
  5. package/src/assets/videoPlayer.scss +16 -0
  6. package/src/components/display/categories/CategoryChooser.vue +1 -1
  7. package/src/components/display/categories/CategoryFilter.vue +1 -1
  8. package/src/components/display/categories/CategoryList.vue +2 -2
  9. package/src/components/display/comments/CommentInput.vue +2 -2
  10. package/src/components/display/comments/CommentName.vue +1 -1
  11. package/src/components/display/comments/CommentPlayer.vue +2 -2
  12. package/src/components/display/comments/CommentSection.vue +1 -1
  13. package/src/components/display/comments/item/CommentItem.vue +2 -12
  14. package/src/components/display/comments/item/CommentMoreActions.vue +1 -1
  15. package/src/components/display/comments/like/LikeSection.vue +1 -1
  16. package/src/components/display/comments/modal/CheckIdentityModal.vue +1 -1
  17. package/src/components/display/comments/modal/EditCommentModal.vue +1 -2
  18. package/src/components/display/comments/modal/ReportAbuseModal.vue +1 -1
  19. package/src/components/display/emission/EmissionList.vue +1 -1
  20. package/src/components/display/emission/EmissionPlayerItem.vue +2 -2
  21. package/src/components/display/emission/EmissionPresentationItem.vue +69 -0
  22. package/src/components/display/emission/EmissionPresentationList.vue +160 -0
  23. package/src/components/display/filter/CategorySearchFilter.vue +1 -1
  24. package/src/components/display/filter/ProductorSearch.vue +1 -1
  25. package/src/components/display/filter/RubriqueFilter.vue +1 -1
  26. package/src/components/display/list/ListPaginate.vue +1 -1
  27. package/src/components/display/live/CountDown.vue +8 -47
  28. package/src/components/display/live/CountdownOctopus.vue +210 -0
  29. package/src/components/display/live/LiveList.vue +2 -2
  30. package/src/components/display/live/RadioCurrently.vue +2 -2
  31. package/src/components/display/live/RadioImage.vue +2 -2
  32. package/src/components/display/live/RadioItem.vue +1 -1
  33. package/src/components/display/live/RadioList.vue +1 -1
  34. package/src/components/display/live/RadioPlanning.vue +1 -1
  35. package/src/components/display/organisation/OrganisationChooser.vue +1 -1
  36. package/src/components/display/organisation/OrganisationChooserLight.vue +1 -1
  37. package/src/components/display/participant/ParticipantList.vue +1 -1
  38. package/src/components/display/playlist/PlaylistItem.vue +1 -1
  39. package/src/components/display/playlist/PlaylistList.vue +1 -1
  40. package/src/components/display/podcasts/AnimatorsItem.vue +1 -1
  41. package/src/components/display/podcasts/ParticipantDescription.vue +1 -1
  42. package/src/components/display/podcasts/PodcastInlineListClassic.vue +1 -1
  43. package/src/components/display/podcasts/PodcastInlineListTemplate.vue +1 -1
  44. package/src/components/display/podcasts/PodcastItem.vue +1 -1
  45. package/src/components/display/podcasts/PodcastList.vue +1 -1
  46. package/src/components/display/podcasts/PodcastModuleBox.vue +28 -72
  47. package/src/components/display/podcasts/PodcastPlayBar.vue +1 -1
  48. package/src/components/display/podcasts/PodcastPlayButton.vue +5 -1
  49. package/src/components/display/podcasts/PodcastRawTranscript.vue +160 -0
  50. package/src/components/display/podcasts/PodcastSwiperList.vue +1 -1
  51. package/src/components/display/podcasts/VideoModuleBox.vue +57 -0
  52. package/src/components/display/rubriques/RubriqueList.vue +1 -1
  53. package/src/components/display/sharing/QrCode.vue +1 -1
  54. package/src/components/display/sharing/ShareButtons.vue +1 -1
  55. package/src/components/display/sharing/ShareDistribution.vue +5 -5
  56. package/src/components/display/sharing/SharePlayer.vue +1 -1
  57. package/src/components/display/sharing/SharePlayerRadio.vue +1 -1
  58. package/src/components/display/sharing/SubscribeButtons.vue +6 -6
  59. package/src/components/form/ClassicCheckbox.vue +4 -0
  60. package/src/components/form/ClassicInputText.vue +10 -1
  61. package/src/components/form/ClassicSelect.vue +4 -6
  62. package/src/components/form/ClassicWysiwyg.vue +20 -0
  63. package/src/components/misc/ClassicNav.vue +7 -1
  64. package/src/components/misc/FooterSection.vue +2 -2
  65. package/src/components/misc/MobileMenu.vue +1 -1
  66. package/src/components/misc/ProgressBar.vue +1 -1
  67. package/src/components/misc/TopBar.vue +1 -1
  68. package/src/components/misc/TopBarMainContent.vue +1 -1
  69. package/src/components/misc/modal/NewsletterModal.vue +1 -1
  70. package/src/components/misc/player/PlayerCompact.vue +6 -6
  71. package/src/components/misc/player/PlayerComponent.vue +7 -4
  72. package/src/components/misc/player/PlayerLarge.vue +1 -2
  73. package/src/components/misc/player/ads/AdsProgressBar.vue +1 -1
  74. package/src/components/misc/player/ads/AdsSkipButton.vue +1 -1
  75. package/src/components/misc/player/chaptering/ChapteringModal.vue +1 -1
  76. package/src/components/misc/player/chaptering/PlayerChaptering.vue +1 -1
  77. package/src/components/misc/player/elements/PlayerImage.vue +9 -3
  78. package/src/components/misc/player/elements/PlayerPlayButton.vue +5 -3
  79. package/src/components/misc/player/elements/PlayerSpeedButton.vue +66 -0
  80. package/src/components/misc/player/elements/PlayerTitle.vue +14 -16
  81. package/src/components/misc/player/progressbar/PlayerProgressBar.vue +2 -2
  82. package/src/components/misc/player/progressbar/PodcastProgressBar.vue +1 -1
  83. package/src/components/misc/player/radio/RadioHistory.vue +1 -1
  84. package/src/components/misc/player/radio/RadioProgressBar.vue +1 -1
  85. package/src/components/misc/player/video/PlayerVideo.vue +6 -3
  86. package/src/components/misc/player/video/PlayerVideoDigiteka.vue +14 -26
  87. package/src/components/misc/player/video/PlayerVideoHls.vue +8 -2
  88. package/src/components/mixins/debounce.ts +1 -1
  89. package/src/components/mixins/handle403.ts +2 -6
  90. package/src/components/mixins/init.ts +1 -1
  91. package/src/components/mixins/orgaComputed.ts +1 -1
  92. package/src/components/mixins/organisationFilter.ts +2 -2
  93. package/src/components/mixins/player/playerDisplayTime.ts +2 -2
  94. package/src/components/mixins/player/playerLive.ts +1 -1
  95. package/src/components/mixins/player/playerLogic.ts +3 -3
  96. package/src/components/mixins/player/playerLogicProgress.ts +1 -1
  97. package/src/components/mixins/player/playerStitching.ts +3 -3
  98. package/src/components/mixins/player/playerTranscript.ts +2 -2
  99. package/src/components/mixins/player/playerVast.ts +2 -2
  100. package/src/components/mixins/podcast/countdown.ts +45 -0
  101. package/src/components/mixins/podcast/podcastView.ts +53 -0
  102. package/src/components/mixins/resizePhone.ts +1 -1
  103. package/src/components/pages/CategoryPage.vue +2 -2
  104. package/src/components/pages/EmissionPage.vue +1 -1
  105. package/src/components/pages/EmissionsPage.vue +1 -1
  106. package/src/components/pages/Error403Page.vue +1 -1
  107. package/src/components/pages/HomePage.vue +2 -2
  108. package/src/components/pages/LivesPage.vue +1 -1
  109. package/src/components/pages/PageNotFound.vue +2 -2
  110. package/src/components/pages/PlaylistPage.vue +1 -1
  111. package/src/components/pages/PodcastPage.vue +3 -3
  112. package/src/components/pages/PodcastsPage.vue +1 -1
  113. package/src/components/pages/RadioPage.vue +1 -1
  114. package/src/components/pages/VideoPage.vue +331 -0
  115. package/src/helper/dom.ts +5 -0
  116. package/src/helper/duration.ts +18 -5
  117. package/src/locale/de.ts +8 -0
  118. package/src/locale/en.ts +8 -0
  119. package/src/locale/es.ts +8 -0
  120. package/src/locale/fr.ts +8 -0
  121. package/src/locale/it.ts +8 -0
  122. package/src/locale/sl.ts +8 -0
  123. package/src/router/router.ts +10 -0
  124. package/src/stores/CommentStore.ts +121 -62
  125. package/src/stores/GeneralStore.ts +5 -3
  126. package/src/stores/ParamSdkStore.ts +13 -13
  127. package/src/stores/PlayerStore.ts +48 -35
  128. package/src/stores/SaveFetchStore.ts +56 -39
  129. package/src/stores/VastStore.ts +45 -38
  130. package/src/websocket/commentWebsocket.ts +1 -1
  131. package/src/stores/ApiStore.ts +0 -68
package/index.ts CHANGED
@@ -14,6 +14,7 @@ export const getCategory = () => import("./src/components/pages/CategoryPage.vue
14
14
  export const getRubrique = () => import("./src/components/pages/RubriquePage.vue");
15
15
  export const getError403Page = () => import("./src/components/pages/Error403Page.vue");
16
16
  export const getRadio = () => import("./src/components/pages/RadioPage.vue");
17
+ export const getVideo = () => import("./src/components/pages/VideoPage.vue");
17
18
 
18
19
  //Misc
19
20
  export const getAccordion = () => import("./src/components/misc/ClassicAccordion.vue");
@@ -33,6 +34,7 @@ export const getClassicModal = () => import("./src/components/misc/modal/Classic
33
34
  export const getClassicLazy = () => import("./src/components/misc/ClassicLazy.vue");
34
35
 
35
36
 
37
+
36
38
  //Display
37
39
  export const getCategoryChooser = () => import("./src/components/display/categories/CategoryChooser.vue");
38
40
  export const getCategoryList = () => import("./src/components/display/categories/CategoryList.vue");
@@ -49,6 +51,9 @@ export const getCommentList = () => import("./src/components/display/comments/Co
49
51
  export const getCommentInput = () => import("./src/components/display/comments/CommentInput.vue");
50
52
  export const getPodcastPlaylistInlineList = () => import("./src/components/display/playlist/PodcastPlaylistInlineList.vue");
51
53
  export const getLiveList = () => import("./src/components/display/live/LiveList.vue");
54
+ export const getEmissionPresentationList = () => import("./src/components/display/emission/EmissionPresentationList.vue");
55
+ export const getPodcastPlayButton = () => import("./src/components/display/podcasts/PodcastPlayButton.vue");
56
+
52
57
 
53
58
 
54
59
  //Radio
@@ -87,10 +92,23 @@ import orgaFilter from "./src/components/mixins/organisationFilter.ts";
87
92
  import initSDK from "./src/components/mixins/init.ts";
88
93
  import tagOfMixins from "./src/components/mixins/tagOfMixins.ts";
89
94
  import resizePhone from "./src/components/mixins/resizePhone.ts";
90
- import commentWebsocket from "./src/websocket/commentWebsocket.ts";
95
+ import debounce from "./src/components/mixins/debounce.ts";
96
+
97
+
98
+ //helper
99
+ import domHelper from "./src/helper/dom.ts";
100
+ import durationHelper from "./src/helper/duration.ts";
101
+ import stringHelper from "./src/helper/string.ts";
102
+
91
103
 
104
+ //stores
105
+ import {useVastStore} from "./src/stores/VastStore.ts";
106
+ import {useSaveFetchStore} from "./src/stores/SaveFetchStore.ts";
107
+ import {usePlayerStore} from "./src/stores/PlayerStore.ts";
108
+ import {useGeneralStore} from "./src/stores/GeneralStore.ts";
109
+ import {useFilterStore} from "./src/stores/FilterStore.ts";
110
+ import {useCommentStore} from "./src/stores/CommentStore.ts";
92
111
 
93
- import TopBar from "./src/components/misc/TopBar.vue";
94
112
 
95
113
  export {
96
114
  selenium,
@@ -101,6 +119,14 @@ export {
101
119
  initSDK,
102
120
  tagOfMixins,
103
121
  resizePhone,
104
- commentWebsocket,
105
- TopBar
122
+ debounce,
123
+ useVastStore,
124
+ useSaveFetchStore,
125
+ usePlayerStore,
126
+ useGeneralStore,
127
+ useFilterStore,
128
+ useCommentStore,
129
+ domHelper,
130
+ durationHelper,
131
+ stringHelper
106
132
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@saooti/octopus-sdk",
3
- "version": "39.1.2-beta",
3
+ "version": "39.1.3-SNAPSHOT",
4
4
  "private": false,
5
5
  "description": "Javascript SDK for using octopus",
6
6
  "author": "Saooti",
@@ -18,6 +18,7 @@
18
18
  "@popperjs/core": "^2.11.8",
19
19
  "@saooti/octopus-api": "^0.39.2",
20
20
  "@stomp/stompjs": "^7.0.0",
21
+ "@tiptap/extension-hard-break": "^2.8.0",
21
22
  "@tiptap/extension-link": "^2.4.0",
22
23
  "@tiptap/extension-underline": "^2.4.0",
23
24
  "@tiptap/pm": "^2.4.0",
@@ -37,7 +38,6 @@
37
38
  "hls.js": "^1.5.11",
38
39
  "humanize-duration": "^3.32.1",
39
40
  "jest": "^29.7.0",
40
- "murmurhash3js": "^3.0.1",
41
41
  "pinia": "^2.1.7",
42
42
  "qrcode.vue": "^3.4.1",
43
43
  "sass": "^1.77.6",
package/src/App.vue CHANGED
@@ -21,8 +21,8 @@ import { Rubriquage } from "./stores/class/rubrique/rubriquage";
21
21
  import { RubriquageFilter } from "./stores/class/rubrique/rubriquageFilter";
22
22
  import { Rubrique } from "./stores/class/rubrique/rubrique";
23
23
  import initSDK from "./components/mixins/init";
24
- import { useFilterStore } from "@/stores/FilterStore";
25
- import { useGeneralStore } from "@/stores/GeneralStore";
24
+ import { useFilterStore } from "./stores/FilterStore";
25
+ import { useGeneralStore } from "./stores/GeneralStore";
26
26
  import { mapState, mapActions } from "pinia";
27
27
  import { defineAsyncComponent, defineComponent } from "vue";
28
28
  import { Category } from "./stores/class/general/category";
@@ -73,6 +73,9 @@ body{
73
73
  .really-light-primary-bg{
74
74
  background-color: $primaryColorReallyTransparent !important;
75
75
  }
76
+ .blue-bg{
77
+ background-color: $blue-octopus;
78
+ }
76
79
  .width-fit-content{
77
80
  width: fit-content !important;
78
81
  }
@@ -81,7 +84,7 @@ body{
81
84
  }
82
85
  .page-box{
83
86
  background-color: $octopus-background;
84
- padding: 1rem 5rem 5rem 5rem;
87
+ padding: 1rem 3rem 3rem 3rem;
85
88
  flex-grow: 1;
86
89
  display: flex;
87
90
  flex-direction: column;
@@ -0,0 +1,16 @@
1
+ .octopus-app {
2
+ .video-responsive-wrapper {
3
+ position:relative;
4
+ padding-bottom:56.25%;
5
+ height:0;
6
+ width: 100%;
7
+ iframe, #video-element-hls {
8
+ position:absolute;
9
+ top:0;
10
+ left:0;
11
+ width:100% !important;
12
+ height:100%;
13
+ margin:0 !important;
14
+ }
15
+ }
16
+ }
@@ -19,7 +19,7 @@
19
19
  </template>
20
20
 
21
21
  <script lang="ts">
22
- import { useGeneralStore } from "@/stores/GeneralStore";
22
+ import { useGeneralStore } from "../../../stores/GeneralStore";
23
23
  import { mapState } from "pinia";
24
24
  import ClassicMultiselect from "../../form/ClassicMultiselect.vue";
25
25
  import { Category } from "@/stores/class/general/category";
@@ -65,7 +65,7 @@
65
65
  import { Rubriquage } from "@/stores/class/rubrique/rubriquage";
66
66
  import { RubriquageFilter } from "@/stores/class/rubrique/rubriquageFilter";
67
67
  import { Rubrique } from "@/stores/class/rubrique/rubrique";
68
- import { useFilterStore } from "@/stores/FilterStore";
68
+ import { useFilterStore } from "../../../stores/FilterStore";
69
69
  import { state } from "../../../stores/ParamSdkStore";
70
70
  import { mapState, mapActions } from "pinia";
71
71
  import { defineComponent, defineAsyncComponent } from "vue";
@@ -43,8 +43,8 @@ import octopusApi from "@saooti/octopus-api";
43
43
  import { state } from "../../../stores/ParamSdkStore";
44
44
  import ClassicPopover from "../../misc/ClassicPopover.vue";
45
45
  import { Category } from "@/stores/class/general/category";
46
- import { useFilterStore } from "@/stores/FilterStore";
47
- import { useGeneralStore } from "@/stores/GeneralStore";
46
+ import { useFilterStore } from "../../../stores/FilterStore";
47
+ import { useGeneralStore } from "../../../stores/GeneralStore";
48
48
  import { mapState, mapActions } from "pinia";
49
49
  import { defineComponent } from "vue";
50
50
  export default defineComponent({
@@ -58,8 +58,8 @@ import { CommentCreate, CommentPodcast } from "@/stores/class/general/comment";
58
58
  import Constants from "../../../../public/config";
59
59
  import { mapState } from "pinia";
60
60
  import { defineComponent, defineAsyncComponent } from "vue";
61
- import { useCommentStore } from "@/stores/CommentStore";
62
- import { usePlayerStore } from "@/stores/PlayerStore";
61
+ import { useCommentStore } from "../../../stores/CommentStore";
62
+ import { usePlayerStore } from "../../../stores/PlayerStore";
63
63
  const CheckIdentityModal = defineAsyncComponent(
64
64
  () => import("./modal/CheckIdentityModal.vue"),
65
65
  );
@@ -42,7 +42,7 @@ import Constants from "../../../../public/config";
42
42
  import { useAuthStore } from "@/stores/AuthStore";
43
43
  import { mapActions, mapState } from "pinia";
44
44
  import { defineComponent } from "vue";
45
- import { useCommentStore } from "@/stores/CommentStore";
45
+ import { useCommentStore } from "../../../stores/CommentStore";
46
46
  export default defineComponent({
47
47
  name: "CommentName",
48
48
  emits: [],
@@ -35,10 +35,10 @@
35
35
  <script lang="ts">
36
36
  import { CommentPodcast } from "@/stores/class/general/comment";
37
37
  import selenium from "../../mixins/selenium";
38
- import { usePlayerStore } from "@/stores/PlayerStore";
38
+ import { usePlayerStore } from "../../../stores/PlayerStore";
39
39
  import { mapActions, mapState } from "pinia";
40
40
  import { defineComponent } from "vue";
41
- import { useCommentStore } from "@/stores/CommentStore";
41
+ import { useCommentStore } from "../../../stores/CommentStore";
42
42
  export default defineComponent({
43
43
  name: "CommentPlayer",
44
44
  mixins: [selenium],
@@ -30,7 +30,7 @@ import cookies from "../../mixins/cookies";
30
30
  import { Podcast } from "@/stores/class/general/podcast";
31
31
  import { defineAsyncComponent, defineComponent } from "vue";
32
32
  import { mapActions, mapState } from "pinia";
33
- import { useCommentStore } from "@/stores/CommentStore";
33
+ import { useCommentStore } from "../../../stores/CommentStore";
34
34
  import {
35
35
  CommentMessage,
36
36
  CommentsConfig,
@@ -3,7 +3,7 @@
3
3
  class="d-flex flex-column flex-grow-1 w-100 really-light-secondary-bg"
4
4
  :class="isAnAnswer && !isFlatList ? 'my-1 p-0' : 'my-3 p-2'"
5
5
  >
6
- <div class="d-flex justify-content-between align-items-center">
6
+ <div class="d-flex flex-nowrap justify-content-between align-items-center">
7
7
  <CommentBasicView :comment="comment" :edit-right="editRight" />
8
8
  <CommentMoreActions
9
9
  v-model:comment="commentForVmodel"
@@ -89,7 +89,7 @@ import displayMethods from "../../../mixins/displayMethods";
89
89
  import { CommentPodcast } from "@/stores/class/general/comment";
90
90
  import { Podcast } from "../../../../stores/class/general/podcast";
91
91
  import CommentBasicView from "./CommentBasicView.vue";
92
- import { useCommentStore } from "@/stores/CommentStore";
92
+ import { useCommentStore } from "../../../../stores/CommentStore";
93
93
  import { mapActions, mapState } from "pinia";
94
94
  import { defineComponent, defineAsyncComponent } from "vue";
95
95
  import {
@@ -232,13 +232,3 @@ export default defineComponent({
232
232
  },
233
233
  });
234
234
  </script>
235
- <style lang="scss">
236
- .octopus-app {
237
- .answers-section {
238
- .btn.btn-primary {
239
- align-self: start !important;
240
- margin: 0.5rem 0 0 0 !important;
241
- }
242
- }
243
- }
244
- </style>
@@ -60,7 +60,7 @@ import CommentMoreActionsAdmin from "@/components/display/comments/item/CommentM
60
60
  import { useAuthStore } from "@/stores/AuthStore";
61
61
  import { CommentPodcast } from "@/stores/class/general/comment";
62
62
  import { Podcast } from "@/stores/class/general/podcast";
63
- import { useCommentStore } from "@/stores/CommentStore";
63
+ import { useCommentStore } from "../../../../stores/CommentStore";
64
64
  import { mapActions, mapState } from "pinia";
65
65
  import { defineComponent, defineAsyncComponent } from "vue";
66
66
  import { CommentsConfig } from "@/stores/class/config/commentsConfig";
@@ -26,7 +26,7 @@
26
26
  import { state } from "../../../../stores/ParamSdkStore";
27
27
  import { defineComponent, defineAsyncComponent } from "vue";
28
28
  import octopusApi from "@saooti/octopus-api";
29
- import { useCommentStore } from "@/stores/CommentStore";
29
+ import { useCommentStore } from "../../../../stores/CommentStore";
30
30
  import { mapActions, mapState } from "pinia";
31
31
  import {
32
32
  CommentFeelings,
@@ -25,7 +25,7 @@ import ClassicInputText from "../../../form/ClassicInputText.vue";
25
25
  import RecaptchaModal from "./RecaptchaModal.vue";
26
26
  import { mapActions } from "pinia";
27
27
  import { defineComponent } from "vue";
28
- import { useCommentStore } from "@/stores/CommentStore";
28
+ import { useCommentStore } from "../../../../stores/CommentStore";
29
29
  export default defineComponent({
30
30
  name: "CheckIdentityModal",
31
31
  components: {
@@ -14,9 +14,8 @@
14
14
  v-model:text-init="name"
15
15
  v-model:errorVariable="errorName"
16
16
  input-id="username-input"
17
- :label="$t('Lastname')"
17
+ :label="$t('Your name')"
18
18
  :max-length="MAX_NAME"
19
- :error-text="$t('Please provide a lastname')"
20
19
  />
21
20
  <ClassicInputText
22
21
  v-model:text-init="commentText"
@@ -39,7 +39,7 @@ import ClassicInputText from "../../../form/ClassicInputText.vue";
39
39
  import RecaptchaModal from "./RecaptchaModal.vue";
40
40
  import { mapActions, mapState } from "pinia";
41
41
  import { defineComponent } from "vue";
42
- import { useCommentStore } from "@/stores/CommentStore";
42
+ import { useCommentStore } from "../../../../stores/CommentStore";
43
43
  import octopusApi from "@saooti/octopus-api";
44
44
  import {
45
45
  CommentAbuseInfo,
@@ -70,7 +70,7 @@ import { defineComponent, defineAsyncComponent } from "vue";
70
70
  import { FetchParam } from "@/stores/class/general/fetchParam";
71
71
  import { AxiosError } from "axios";
72
72
  import { Rubriquage } from "@/stores/class/rubrique/rubriquage";
73
- import { useFilterStore } from "@/stores/FilterStore";
73
+ import { useFilterStore } from "../../../stores/FilterStore";
74
74
  import { mapState } from "pinia";
75
75
  import { ListClassicReturn } from "@/stores/class/general/listReturn";
76
76
  const EmissionItem = defineAsyncComponent(() => import("./EmissionItem.vue"));
@@ -105,8 +105,8 @@ import { Podcast } from "@/stores/class/general/podcast";
105
105
  import { state } from "../../../stores/ParamSdkStore";
106
106
  import imageProxy from "../../mixins/imageProxy";
107
107
  import displayMethods from "../../mixins/displayMethods";
108
- import { usePlayerStore } from "@/stores/PlayerStore";
109
- import { useFilterStore } from "@/stores/FilterStore";
108
+ import { usePlayerStore } from "../../../stores/PlayerStore";
109
+ import { useFilterStore } from "../../../stores/FilterStore";
110
110
  import { mapState, mapActions } from "pinia";
111
111
  import { defineAsyncComponent, defineComponent } from "vue";
112
112
  import { ListClassicReturn } from "@/stores/class/general/listReturn";
@@ -0,0 +1,69 @@
1
+ <template>
2
+ <div
3
+ class="emission-item-container emission-presentation-container mt-3"
4
+ :class="isVertical ? 'emission-vertical-item' : ''"
5
+ >
6
+ <router-link
7
+ :to="{
8
+ name: 'emission',
9
+ params: { emissionId: emission.emissionId },
10
+ query: { productor: filterOrgaId },
11
+ }"
12
+ :title="$t('Emission')"
13
+ class="d-flex-column flex-grow-1 text-dark"
14
+ :class="isVertical ? 'flex-column' : ''"
15
+ >
16
+ <img
17
+ v-lazy="proxyImageUrl(emission.imageUrl, isVertical ? '400' : '250')"
18
+ :width="isVertical ? '400' : '250'"
19
+ :height="isVertical ? '400' : '250'"
20
+ :class="isVertical ? 'img-box-bigger' : ''"
21
+ class="img-box"
22
+ :title="$t('Emission name image', { name: emission.name })"
23
+ :alt="$t('Emission name image', { name: emission.name })"
24
+ />
25
+ <div class="emission-item-text">
26
+ <div class="d-flex align-items-center emission-name">
27
+ {{ emission.name }}
28
+ </div>
29
+ </div>
30
+ </router-link>
31
+ </div>
32
+ </template>
33
+
34
+ <script lang="ts">
35
+ import { orgaComputed } from "../../mixins/orgaComputed";
36
+ import { Emission } from "@/stores/class/general/emission";
37
+ import imageProxy from "../../mixins/imageProxy";
38
+ import displayMethods from "../../mixins/displayMethods";
39
+ import { defineComponent } from "vue";
40
+ export default defineComponent({
41
+ name: "EmissionItem",
42
+
43
+ mixins: [displayMethods, orgaComputed, imageProxy],
44
+
45
+ props: {
46
+ emission: { default: () => ({}), type: Object as () => Emission },
47
+ isVertical: { default: false, type: Boolean },
48
+ },
49
+ });
50
+ </script>
51
+ <style lang="scss">
52
+ .octopus-app {
53
+ .emission-presentation-container {
54
+ @media (max-width: 960px) {
55
+ width: 250px !important;
56
+ margin-right: 0.5rem;
57
+ }
58
+ }
59
+ .emission-item-container.emission-vertical-item {
60
+ flex-grow: 0;
61
+ width: 400px;
62
+ flex-shrink: 0;
63
+ }
64
+ .img-box-bigger {
65
+ width: 400px;
66
+ height: 400px;
67
+ }
68
+ }
69
+ </style>
@@ -0,0 +1,160 @@
1
+ <template>
2
+ <div class="d-flex flex-column p-3">
3
+ <h2 class="mb-3">{{ title }}</h2>
4
+ <ClassicLoading
5
+ :loading-text="loading ? $t('Loading emissions ...') : undefined"
6
+ :error-text="error ? $t(`Error`) : undefined"
7
+ />
8
+ <template v-if="!loading && !error">
9
+ <div class="d-flex flex-nowrap align-items-stretch overflow-phone-auto">
10
+ <EmissionItemPresentation
11
+ v-if="allEmissions[0]"
12
+ :class="!isPhone ? 'me-3' : ''"
13
+ :emission="allEmissions[0]"
14
+ :is-vertical="!isPhone"
15
+ />
16
+ <div
17
+ v-if="allEmissions.length > 1"
18
+ class="emission-column emission-column-margin d-flex-row flex-nowrap"
19
+ >
20
+ <EmissionItemPresentation
21
+ v-if="allEmissions[1]"
22
+ :emission="allEmissions[1]"
23
+ />
24
+ <EmissionItemPresentation
25
+ v-if="allEmissions[2]"
26
+ :emission="allEmissions[2]"
27
+ />
28
+ </div>
29
+ <div
30
+ v-if="allEmissions.length > 3"
31
+ class="emission-column d-flex-row flex-nowrap show-emission-column"
32
+ >
33
+ <EmissionItemPresentation
34
+ v-if="allEmissions[3]"
35
+ :emission="allEmissions[3]"
36
+ />
37
+ <EmissionItemPresentation
38
+ v-if="allEmissions[4]"
39
+ :emission="allEmissions[4]"
40
+ />
41
+ </div>
42
+ </div>
43
+ <router-link
44
+ v-if="buttonText && href"
45
+ :to="href"
46
+ class="btn btn-primary align-self-center width-fit-content m-4"
47
+ >
48
+ {{ buttonText }}
49
+ </router-link>
50
+ </template>
51
+ </div>
52
+ </template>
53
+
54
+ <script lang="ts">
55
+ import octopusApi from "@saooti/octopus-api";
56
+ import { handle403 } from "../../mixins/handle403";
57
+ import ClassicLoading from "../../form/ClassicLoading.vue";
58
+ import { Emission } from "@/stores/class/general/emission";
59
+ import { defineAsyncComponent, defineComponent } from "vue";
60
+ import { AxiosError } from "axios";
61
+ import imageProxy from "../../mixins/imageProxy";
62
+ import resizePhone from "../../mixins/resizePhone";
63
+ const EmissionItemPresentation = defineAsyncComponent(
64
+ () => import("./EmissionPresentationItem.vue"),
65
+ );
66
+ export default defineComponent({
67
+ name: "EmissionPresentationList",
68
+ components: {
69
+ ClassicLoading,
70
+ EmissionItemPresentation,
71
+ },
72
+
73
+ mixins: [handle403, imageProxy, resizePhone],
74
+
75
+ props: {
76
+ organisationId: { default: undefined, type: String },
77
+ title: { default: "", type: String },
78
+ href: { default: undefined, type: String },
79
+ buttonText: { default: undefined, type: String },
80
+ },
81
+ data() {
82
+ return {
83
+ loading: true as boolean,
84
+ error: false as boolean,
85
+ allEmissions: [] as Array<Emission>,
86
+ isPhone: false as boolean,
87
+ windowWidth: 0 as number,
88
+ };
89
+ },
90
+
91
+ mounted() {
92
+ this.fetchNext();
93
+ },
94
+ methods: {
95
+ async fetchNext(): Promise<void> {
96
+ this.loading = true;
97
+ try {
98
+ const data = await octopusApi.fetchDataWithParams<{
99
+ count: number;
100
+ result: Array<Emission>;
101
+ sort: string;
102
+ }>(
103
+ 0,
104
+ "emission/search",
105
+ {
106
+ first: 0,
107
+ size: 5,
108
+ organisationId: this.organisationId,
109
+ sort: "LAST_PODCAST_DESC",
110
+ },
111
+ true,
112
+ );
113
+ this.allEmissions = this.allEmissions.concat(
114
+ data.result.filter((em: Emission | null) => null !== em),
115
+ );
116
+ this.loading = false;
117
+ } catch (error) {
118
+ this.handle403(error as AxiosError);
119
+ this.error = true;
120
+ }
121
+ this.loading = false;
122
+ },
123
+ },
124
+ });
125
+ </script>
126
+ <style lang="scss">
127
+ .octopus-app {
128
+ .overflow-phone-auto {
129
+ @media (max-width: 960px) {
130
+ overflow-y: auto;
131
+ }
132
+ }
133
+ .emission-column {
134
+ flex-shrink: 0;
135
+ width: calc((100% - 420px) / 2);
136
+ @media (max-width: 1550px) {
137
+ width: calc((100% - 420px));
138
+ }
139
+ @media (max-width: 960px) {
140
+ width: auto;
141
+ flex-direction: row !important;
142
+ }
143
+ }
144
+ .emission-column-margin {
145
+ margin-right: 1rem;
146
+ @media (max-width: 960px) {
147
+ margin-right: 0;
148
+ }
149
+ }
150
+ .show-emission-column {
151
+ display: flex;
152
+ @media (max-width: 1550px) {
153
+ display: none !important;
154
+ }
155
+ @media (max-width: 960px) {
156
+ display: flex !important;
157
+ }
158
+ }
159
+ }
160
+ </style>
@@ -17,7 +17,7 @@
17
17
  <script lang="ts">
18
18
  import ClassicCheckbox from "../../form/ClassicCheckbox.vue";
19
19
  import CategoryChooser from "../categories/CategoryChooser.vue";
20
- import { useFilterStore } from "@/stores/FilterStore";
20
+ import { useFilterStore } from "../../../stores/FilterStore";
21
21
  import { mapState, mapActions } from "pinia";
22
22
  import { defineComponent } from "vue";
23
23
  export default defineComponent({
@@ -46,7 +46,7 @@ import ClassicSearch from "../../form/ClassicSearch.vue";
46
46
  import { state } from "../../../stores/ParamSdkStore";
47
47
  import orgaFilter from "../../mixins/organisationFilter";
48
48
  import { Organisation } from "@/stores/class/general/organisation";
49
- import { useFilterStore } from "@/stores/FilterStore";
49
+ import { useFilterStore } from "../../../stores/FilterStore";
50
50
  import { mapState, mapActions } from "pinia";
51
51
  import { defineComponent, defineAsyncComponent } from "vue";
52
52
  const OrganisationChooser = defineAsyncComponent(
@@ -39,7 +39,7 @@ import octopusApi from "@saooti/octopus-api";
39
39
  import ClassicCheckbox from "../../form/ClassicCheckbox.vue";
40
40
  import { Rubriquage } from "@/stores/class/rubrique/rubriquage";
41
41
  import { RubriquageFilter } from "@/stores/class/rubrique/rubriquageFilter";
42
- import { useFilterStore } from "@/stores/FilterStore";
42
+ import { useFilterStore } from "../../../stores/FilterStore";
43
43
  import { mapState, mapActions } from "pinia";
44
44
  import { defineComponent, defineAsyncComponent } from "vue";
45
45
  const RubriqueChoice = defineAsyncComponent(
@@ -56,7 +56,7 @@ import PaginateParams from "./PaginateParams.vue";
56
56
  import PaginateSection from "./PaginateSection.vue";
57
57
  import resizePhone from "../../mixins/resizePhone";
58
58
  import { defineComponent } from "vue";
59
- import { usePlayerStore } from "@/stores/PlayerStore";
59
+ import { usePlayerStore } from "../../../stores/PlayerStore";
60
60
  import { mapState } from "pinia";
61
61
  export default defineComponent({
62
62
  name: "ListPaginate",