@saooti/octopus-sdk 41.0.6-SNAPSHOT → 41.0.6

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 (58) hide show
  1. package/index.ts +2 -1
  2. package/package.json +3 -1
  3. package/plateform.conf +1 -1
  4. package/src/App.vue +3 -7
  5. package/src/api/classicApi.ts +1 -1
  6. package/src/components/composable/player/usePlayerLive.ts +3 -3
  7. package/src/components/composable/player/usePlayerVast.ts +7 -7
  8. package/src/components/composable/route/useAdvancedParamInit.ts +1 -1
  9. package/src/components/composable/route/useRouteUpdateParams.ts +4 -4
  10. package/src/components/composable/route/useSimplePageParam.ts +15 -8
  11. package/src/components/display/categories/CategoryChooser.vue +6 -0
  12. package/src/components/display/comments/CommentList.vue +1 -1
  13. package/src/components/display/emission/EmissionList.vue +5 -8
  14. package/src/components/display/filter/AdvancedSearch.vue +0 -3
  15. package/src/components/display/list/ListPaginate.vue +4 -12
  16. package/src/components/display/live/LiveItem.vue +2 -3
  17. package/src/components/display/participant/ParticipantList.vue +6 -9
  18. package/src/components/display/playlist/PlaylistList.vue +5 -8
  19. package/src/components/display/playlist/PodcastList.vue +16 -7
  20. package/src/components/display/podcasts/PodcastFilterList.vue +19 -8
  21. package/src/components/display/podcasts/PodcastList.vue +8 -9
  22. package/src/components/display/podcasts/PodcastPlayButton.vue +4 -1
  23. package/src/components/display/sharing/SharePlayerTypes.vue +1 -1
  24. package/src/components/display/sharing/SubscribeButtons.vue +4 -2
  25. package/src/components/form/ClassicInputText.vue +4 -1
  26. package/src/components/form/ClassicMultiselect.vue +36 -8
  27. package/src/components/misc/ClassicAccordion.vue +4 -4
  28. package/src/components/misc/ClassicPopover.vue +1 -1
  29. package/src/components/misc/ClassicSpinner.vue +1 -1
  30. package/src/components/misc/FooterSection.vue +0 -16
  31. package/src/components/misc/HomeDropdown.vue +6 -76
  32. package/src/components/misc/MobileMenu.vue +57 -59
  33. package/src/components/misc/TopBar.vue +4 -11
  34. package/src/components/misc/TopBarMainContent.vue +0 -2
  35. package/src/components/misc/UserButtonContent.vue +113 -0
  36. package/src/components/misc/player/elements/PlayerImage.vue +0 -1
  37. package/src/components/misc/player/video/PlayerVideo.vue +2 -2
  38. package/src/components/pages/EmissionPage.vue +14 -0
  39. package/src/components/pages/PageLogout.vue +1 -6
  40. package/src/components/pages/ParticipantPage.vue +14 -0
  41. package/src/components/pages/PlaylistPage.vue +17 -4
  42. package/src/components/pages/PodcastPage.vue +1 -1
  43. package/src/components/pages/VideoPage.vue +5 -2
  44. package/src/helper/loadScript.ts +4 -4
  45. package/src/locale/de.ts +2 -2
  46. package/src/locale/en.ts +2 -2
  47. package/src/locale/es.ts +2 -2
  48. package/src/locale/fr.ts +2 -2
  49. package/src/locale/it.ts +2 -2
  50. package/src/locale/sl.ts +2 -2
  51. package/src/router/router.ts +17 -4
  52. package/src/stores/AuthStore.ts +12 -12
  53. package/src/stores/FilterStore.ts +1 -1
  54. package/src/stores/PlayerStore.ts +5 -0
  55. package/src/stores/VastStore.ts +2 -2
  56. package/src/stores/class/conference/conference.ts +2 -0
  57. package/src/style/_variables.scss +3 -0
  58. package/src/style/general.scss +5 -0
@@ -19,6 +19,7 @@
19
19
  "
20
20
  :just-size-chosen="justSizeChosen"
21
21
  :player-responsive="true"
22
+ :force-update-parameters="forceUpdateParameters"
22
23
  >
23
24
  <template #list>
24
25
  <div class="octopus-element-list">
@@ -85,6 +86,7 @@ const props = defineProps({
85
86
  justSizeChosen: { default: false, type: Boolean },
86
87
  withVideo: { default: undefined, type: Boolean },
87
88
  includeTag:{ default: () => [], type: Array as () => Array<string> },
89
+ forceUpdateParameters: { default: false, type: Boolean },
88
90
  })
89
91
 
90
92
  //Emits
@@ -148,9 +150,9 @@ watch(changePaginate, () => {
148
150
  dfirst.value = props.first;
149
151
  dsize.value = props.size;
150
152
  });
151
- watch(changed, () => reloadList());
152
- watch(()=>props.reload, () => reloadList());
153
- watch(dsize, () => reloadList());
153
+ watch(changed, () => fetchContent(true));
154
+ watch(()=>props.reload, () => fetchContent(true));
155
+ watch(dsize, () => fetchContent(true));
154
156
  watch(dfirst, () => {
155
157
  if (
156
158
  !podcasts.value[dfirst.value] ||
@@ -160,17 +162,13 @@ watch(dfirst, () => {
160
162
  }
161
163
  });
162
164
 
163
- onBeforeMount(()=>fetchContent(true))
165
+ onBeforeMount(()=>fetchContent(false))
164
166
 
165
167
  //Methods
166
- function reloadList() {
167
- dfirst.value = 0;
168
- fetchContent(true);
169
- }
170
168
  async function fetchContent(reset: boolean): Promise<void> {
171
169
  loading.value = true;
172
170
  const param: FetchParam = {
173
- first: dfirst.value,
171
+ first: reset ? 0 : dfirst.value,
174
172
  size: dsize.value,
175
173
  organisationId: organisation.value,
176
174
  emissionId: props.emissionId,
@@ -213,6 +211,7 @@ function afterFetching(
213
211
  data: { count: number; result: Array<Podcast>; sort: string },
214
212
  ): void {
215
213
  if (reset) {
214
+ dfirst.value = 0;
216
215
  podcasts.value.length = 0;
217
216
  }
218
217
  if (dfirst.value > podcasts.value.length) {
@@ -211,7 +211,10 @@ function play(isVideo: boolean): void {
211
211
  playerStore.playerPlay(
212
212
  {
213
213
  ...props.podcast,
214
- ...{ conferenceId: props.fetchConference?.conferenceId },
214
+ ...{
215
+ conferenceId: props.fetchConference?.conferenceId,
216
+ hlsIdentifier: props.fetchConference?.hlsIdentifier,
217
+ },
215
218
  },
216
219
  isVideo,
217
220
  );
@@ -137,7 +137,7 @@ onMounted(()=>{
137
137
  function isNumeric(value: string): boolean {
138
138
  return /^-?\d+$/.test(value);
139
139
  }
140
- function selectChange($event: any) {
140
+ function selectChange($event: Event) {
141
141
  const val = $event.target.value;
142
142
  if (!val) {
143
143
  return;
@@ -78,7 +78,7 @@ import RssIcon from "vue-material-design-icons/Rss.vue";
78
78
  import { useApiStore } from "../../../stores/ApiStore";
79
79
  import ClassicPopover from "../../misc/ClassicPopover.vue";
80
80
  import { Emission } from "@/stores/class/general/emission";
81
- import { computed, Ref, ref, useTemplateRef, watch } from "vue";
81
+ import { computed, onMounted, Ref, ref, useTemplateRef, watch } from "vue";
82
82
  import { useI18n } from "vue-i18n";
83
83
  type Link = {
84
84
  name: string;
@@ -204,7 +204,9 @@ const rssUrl = computed(() => {
204
204
 
205
205
 
206
206
  //Watch
207
- watch(()=>props.windowWidth, () =>resizeWindow(), {immediate: true});
207
+ watch(()=>props.windowWidth, () =>resizeWindow());
208
+
209
+ onMounted(()=>resizeWindow());
208
210
 
209
211
 
210
212
  //Methods
@@ -12,6 +12,7 @@
12
12
  >{{ label }}
13
13
  <AsteriskIcon v-if="displayRequired" :size="10" class="ms-1 mb-2" :title="t('Mandatory input')"/>
14
14
  </component>
15
+ <slot name="afterTitle"/>
15
16
  <template v-if="popover">
16
17
  <button
17
18
  :id="'popover' + inputId"
@@ -31,7 +32,9 @@
31
32
  <!-- eslint-enable -->
32
33
  </ClassicPopover>
33
34
  </template>
35
+ <slot name="afterHelp"/>
34
36
  </div>
37
+ <slot name="betweenTitleInput"/>
35
38
  <input
36
39
  v-if="!isWysiwyg && !isTextarea"
37
40
  v-show="showField"
@@ -216,7 +219,7 @@ watch(textValue, () => {
216
219
  });
217
220
  watch(()=>props.textInit, () => {
218
221
  if (props.textInit !== textValue.value) {
219
- emit("update:textInit", textValue.value);
222
+ textValue.value = props.textInit;
220
223
  }
221
224
  });
222
225
 
@@ -5,13 +5,33 @@
5
5
  'multiselect-no-deselect': noDeselect,
6
6
  'form-margin': displayLabel,
7
7
  }"
8
- :style="{ width: width }"
8
+ :style="{ width: width, height: height }"
9
9
  >
10
- <label :class="displayLabel ? '' : 'd-none'" :for="id" class="form-label">{{
11
- label
12
- }}
13
- <AsteriskIcon v-if="displayRequired" :size="10" class="ms-1 mb-2" :title="t('Mandatory input')"/>
14
- </label>
10
+ <div class="d-flex align-items-center">
11
+ <label :class="displayLabel ? '' : 'd-none'" :for="id" class="form-label">{{
12
+ label
13
+ }}
14
+ <AsteriskIcon v-if="displayRequired" :size="10" class="ms-1 mb-2" :title="t('Mandatory input')"/>
15
+ </label>
16
+ <template v-if="popover">
17
+ <button
18
+ :id="'popover' + id"
19
+ :title="t('Help')"
20
+ class="btn-transparent"
21
+ >
22
+ <HelpCircleIcon :size="30" />
23
+ </button>
24
+ <ClassicPopover
25
+ :target="'popover' + id"
26
+ popover-class="popover-z-index"
27
+ :relative-class="popoverRelativeClass"
28
+ >
29
+ <!-- eslint-disable vue/no-v-html -->
30
+ <div v-html="popover" />
31
+ <!-- eslint-enable -->
32
+ </ClassicPopover>
33
+ </template>
34
+ </div>
15
35
  <vSelect
16
36
  v-model="optionSelected"
17
37
  :input-id="id"
@@ -28,6 +48,7 @@
28
48
  "
29
49
  :filter="fakeSearch"
30
50
  :selectable="() => !maxOptionsSelected"
51
+ :style="{height: height }"
31
52
  :class="{ 'border border-danger': textDanger?.length }"
32
53
  @open="onSearch"
33
54
  @search="onSearch"
@@ -76,12 +97,15 @@
76
97
  </template>
77
98
 
78
99
  <script setup lang="ts">
79
- import { computed, ref, Ref, watch } from "vue";
100
+ import { computed, defineAsyncComponent, ref, Ref, watch } from "vue";
80
101
  import { useI18n } from "vue-i18n";
81
102
  import AsteriskIcon from "vue-material-design-icons/Asterisk.vue";
82
103
  import ChevronDownIcon from "vue-material-design-icons/ChevronDown.vue";
83
104
  import vSelect from "vue-select";
84
-
105
+ import HelpCircleIcon from "vue-material-design-icons/HelpCircle.vue";
106
+ const ClassicPopover = defineAsyncComponent(
107
+ () => import("../misc/ClassicPopover.vue"),
108
+ );
85
109
 
86
110
  //Props
87
111
  const props = defineProps({
@@ -93,6 +117,7 @@ const props = defineProps({
93
117
  multiple: { default: false, type: Boolean },
94
118
  isDisabled: { default: false, type: Boolean },
95
119
  width: { default: "100%", type: String },
120
+ height: { default: undefined, type: String },
96
121
  maxElement: { default: 50, type: Number },
97
122
  minSearchLength: { default: 3, type: Number },
98
123
  optionChosen: { default: undefined, type: Object as () => unknown },
@@ -104,6 +129,8 @@ const props = defineProps({
104
129
  allowEmpty: { default: true, type: Boolean },
105
130
  textDanger :{ default: undefined, type: String },
106
131
  displayRequired: { default: false, type: Boolean },
132
+ popover: { default: undefined, type: String },
133
+ popoverRelativeClass: { default: undefined, type: String },
107
134
  })
108
135
 
109
136
  //Emits
@@ -209,6 +236,7 @@ defineExpose({
209
236
 
210
237
  .vs__dropdown-toggle {
211
238
  padding: 0;
239
+ height: 100%;
212
240
  }
213
241
 
214
242
  .vs__search:focus {
@@ -20,11 +20,11 @@
20
20
  class="img-accordion"
21
21
  :src="imageUrl"
22
22
  aria-hidden="true"
23
- alt=""
24
-
23
+ alt=""
25
24
  />
26
- <span class="flex-grow-1">{{ title }}</span>
27
- <ChevronDownIcon :class="{ 'arrow-transform': isOpen }" />
25
+ <span>{{ title }}</span>
26
+ <slot name="afterTitle"/>
27
+ <ChevronDownIcon class="ms-auto" :class="{ 'arrow-transform': isOpen }" />
28
28
  </button>
29
29
  <div v-show="isOpen" class="body p-2">
30
30
  <slot />
@@ -72,7 +72,7 @@ const router= useRouter();
72
72
  const popoverId = computed(() => "popover" + props.target);
73
73
  const positionInlineStyle = computed(() => `left: ${posX.value}px; top: ${posY.value}px;max-height:${maxHeight.value}`);
74
74
  const displayPopover = computed(() => show.value && !props.disable);
75
- const isTopLayerPopover = computed(() => (props.isTopLayer || "octopus-modal"===props.relativeClass) && HTMLElement.prototype.hasOwnProperty("popover"));
75
+ const isTopLayerPopover = computed(() => (props.isTopLayer || "octopus-modal"===props.relativeClass) && Object.hasOwn(HTMLElement.prototype, "popover"));
76
76
 
77
77
 
78
78
  //Watch
@@ -16,7 +16,7 @@ defineProps({
16
16
  --size-spinner: 3rem;
17
17
  --size-spinner-section: calc(var(--size-spinner) / 20);
18
18
  --half-size-spinner: calc(var(--size-spinner) / 2);
19
-
19
+
20
20
  color: #000000;
21
21
  display: inline-block;
22
22
  position: relative;
@@ -74,7 +74,6 @@
74
74
 
75
75
  <script setup lang="ts">
76
76
  import cookiesHelper from "../../helper/cookiesHelper";
77
- import { useRubriquesFilterComputed } from "../composable/route/useRubriquesFilterComputed";
78
77
  import ClassicSelect from "../form/ClassicSelect.vue";
79
78
  import AcpmImage from "./AcpmImage.vue";
80
79
  import { state } from "../../stores/ParamSdkStore";
@@ -103,7 +102,6 @@ const reset = ref(false);
103
102
  const organisationId: Ref<string | undefined> = ref(undefined);
104
103
 
105
104
  //Composables
106
- const { rubriqueQueryParam } = useRubriquesFilterComputed();
107
105
  const generalStore = useGeneralStore();
108
106
  const filterStore = useFilterStore();
109
107
  const authStore = useAuthStore();
@@ -140,20 +138,6 @@ watch(()=>filterStore.filterOrgaId, () => {
140
138
 
141
139
 
142
140
  //Methods
143
- function getQueriesRouter(routeName: string) {
144
- if (
145
- "podcasts" !== routeName &&
146
- "emissions" !== routeName &&
147
- "home" !== routeName
148
- ) {
149
- return { productor: filterStore.filterOrgaId };
150
- }
151
- return {
152
- productor: filterStore.filterOrgaId,
153
- iabId: filterStore.filterIab?.id,
154
- rubriquesId: rubriqueQueryParam.value,
155
- };
156
- }
157
141
  function changeLanguage(): void {
158
142
  cookiesHelper.setCookie("octopus-language", language.value);
159
143
  loadLocaleMessages(
@@ -32,113 +32,43 @@
32
32
  :left-pos="true"
33
33
  :is-top-layer="true"
34
34
  >
35
- <nav :aria-label="t('User menu')">
36
- <ul class="p-0 m-0">
37
- <template v-if="!isAuthenticated">
38
- <li class="li-style-none">
39
- <a class="octopus-dropdown-item realLink" :href="pathLogin">
40
- {{ t("Login") }}
41
- </a>
42
- </li>
43
- <li class="li-style-none">
44
- <router-link
45
- v-if="!state.generalParameters.podcastmaker"
46
- class="octopus-dropdown-item"
47
- to="/main/pub/create"
48
- >
49
- {{ t("Create an account") }}
50
- </router-link>
51
- </li>
52
- </template>
53
- <template v-else>
54
- <li v-for="routerBack in routerBackoffice" :key="routerBack.path" class="li-style-none">
55
- <router-link
56
- v-if="!state.generalParameters.podcastmaker && routerBack.condition"
57
- :class="routerBack.class"
58
- :to="routerBack.path"
59
- >
60
- {{ routerBack.title }}
61
- </router-link>
62
- </li>
63
- <template v-if="helpLinks.length">
64
- <hr />
65
- <li v-for="helpLink in helpLinks" :key="helpLink.title" class="li-style-none">
66
- <a
67
- :href="helpLink.href"
68
- class="octopus-dropdown-item realLink"
69
- rel="noreferrer noopener"
70
- target="_blank"
71
- :title="t('New window', {text: helpLink.title})"
72
- >
73
- {{ helpLink.title }}
74
- <OpenInNewIcon class="ms-1" :size="15"/>
75
- </a>
76
- </li>
77
- </template>
78
- <hr />
79
- <li class="li-style-none">
80
- <a class="octopus-dropdown-item c-hand" href="/logout">
81
- {{ t("Logout") }}
82
- </a>
83
- </li>
84
- </template>
85
- <li class="li-style-none">
86
- <router-link
87
- v-if="!authStore.isGarRole"
88
- class="octopus-dropdown-item"
89
- to="/main/pub/contact"
90
- >
91
- {{ t("Contact") }}
92
- </router-link>
93
- </li>
94
- </ul>
95
- </nav>
35
+ <UserButtonContent :isEducation="isEducation" :navLabel="t('User menu')" :specificRoutes="routerBackoffice"/>
96
36
  </ClassicPopover>
97
37
  </div>
98
38
  </template>
99
39
 
100
40
  <script setup lang="ts">
101
- import OpenInNewIcon from "vue-material-design-icons/OpenInNew.vue";
41
+ import UserButtonContent from "./UserButtonContent.vue";
102
42
  import AppsIcon from "vue-material-design-icons/Apps.vue";
103
43
  import AccountIcon from "vue-material-design-icons/Account.vue";
104
44
  import DownloadIcon from "vue-material-design-icons/Download.vue";
105
- import { state } from "../../stores/ParamSdkStore";
106
45
  import ClassicPopover from "../misc/ClassicPopover.vue";
107
46
  import { useAuthStore } from "../../stores/AuthStore";
108
47
  import { computed } from "vue";
109
- import { useApiStore } from "../../stores/ApiStore";
110
48
  import { useI18n } from "vue-i18n";
111
49
  import { useRoute, useRouter } from "vue-router";
112
50
 
113
51
  //Props
114
- const props = defineProps({
52
+ defineProps({
115
53
  isEducation: { default: false, type: Boolean },
116
54
  mobileMenuDisplay: { default: false, type: Boolean },
117
- scrolled: { default: false, type: Boolean },
118
55
  })
119
56
 
120
57
  //Composables
121
58
  const { t } = useI18n();
122
59
  const authStore = useAuthStore();
123
- const apiStore = useApiStore();
124
60
  const route = useRoute();
125
61
  const router = useRouter();
126
62
 
127
63
  //Computed
128
64
  const isAuthenticated = computed(() => undefined !== authStore.authProfile?.userId);
129
65
  const isAuthenticatedWithOrga = computed(() => undefined !== authStore.authOrgaId);
130
- const pathLogin = computed(() => "/sso/login?redirect_url="+encodeURI(apiStore.frontendUrl + route.fullPath));
131
66
  const organisationsAvailable = computed(() => authStore.authProfile?.organisations ?? []);
132
- const helpLinks = computed(() => {
133
- if (authStore.isGarRole || props.isEducation) {
67
+
68
+ const routerBackoffice = computed(() => {
69
+ if(!isAuthenticated.value){
134
70
  return [];
135
71
  }
136
- return [
137
- { title:t("Help"), href: "https://help.octopus.saooti.com/Aide/"},
138
- { title: t("TutoMag"), href: "https://help.octopus.saooti.com/" },
139
- ];
140
- });
141
- const routerBackoffice = computed(() => {
142
72
  return [
143
73
  {
144
74
  title: t("My space"),
@@ -18,39 +18,11 @@
18
18
  :left-pos="true"
19
19
  :is-top-layer="true"
20
20
  >
21
- <template v-for="link in routerLinkArray" :key="link.routeName">
22
- <router-link
23
- v-if="link.condition"
24
- :class="
25
- 'home' === link.routeName
26
- ? 'octopus-dropdown-item show-phone-flex'
27
- : 'octopus-dropdown-item'
28
- "
29
- :to="{
30
- name: link.routeName,
31
- query: getQueriesRouter(link.routeName),
32
- }"
33
- >
34
- {{ link.title }}
35
- </router-link>
36
- </template>
37
- <a
38
- v-if="!isAuthenticatedWithOrga"
39
- class="octopus-dropdown-item realLink"
40
- :href="pathLogin"
41
- >
42
- {{ t("Login") }}
43
- </a>
44
- <a v-else class="octopus-dropdown-item c-hand" href="/logout">
45
- {{ t("Logout") }}
46
- </a>
47
- <router-link
48
- v-if="!authStore.isGarRole"
49
- class="octopus-dropdown-item"
50
- to="/main/pub/contact"
51
- >
52
- {{ t("Contact") }}
53
- </router-link>
21
+ <UserButtonContent
22
+ :isEducation="isEducation"
23
+ :navLabel="t('User menu')"
24
+ :specificRoutes="routerLinkArray"
25
+ :displayUserContent="displayUserContent"/>
54
26
  </ClassicPopover>
55
27
  </div>
56
28
  </template>
@@ -62,20 +34,20 @@ import { state } from "../../stores/ParamSdkStore";
62
34
  import { defineAsyncComponent, ref, computed } from "vue";
63
35
  import { useFilterStore } from "../../stores/FilterStore";
64
36
  import { useAuthStore } from "../../stores/AuthStore";
65
- import { useApiStore } from "../../stores/ApiStore";
66
37
  import { useI18n } from "vue-i18n";
67
- import { useRoute } from "vue-router";
38
+ import { useResizePhone } from "../composable/useResizePhone";
68
39
  const ClassicPopover = defineAsyncComponent(
69
40
  () => import("../misc/ClassicPopover.vue"),
70
41
  );
71
-
42
+ const UserButtonContent = defineAsyncComponent(
43
+ () => import("./UserButtonContent.vue"),
44
+ );
72
45
 
73
46
  //Props
74
47
  const props = defineProps({
75
48
  isEducation: { default: false, type: Boolean },
76
49
  show: { default: false, type: Boolean },
77
50
  notPodcastAndEmission: { default: false, type: Boolean },
78
- scrolled: { default: false, type: Boolean },
79
51
  })
80
52
 
81
53
  //Data
@@ -85,60 +57,90 @@ const firstLoaded = ref(false);
85
57
  const { t } = useI18n();
86
58
  const { rubriqueQueryParam } = useRubriquesFilterComputed();
87
59
  const authStore = useAuthStore();
88
- const apiStore = useApiStore();
89
60
  const filterStore = useFilterStore();
90
- const route = useRoute();
61
+ const { windowWidth } = useResizePhone();
91
62
 
92
63
 
93
64
  //Computed
65
+ const displayUserContent = computed(() => 500>=windowWidth.value);
94
66
  const isAuthenticatedWithOrga = computed(() => undefined !== authStore.authOrgaId);
95
- const pathLogin = computed(() => "/sso/login?redirect_url="+encodeURI(apiStore.frontendUrl + route.fullPath));
96
67
  const routerLinkArray = computed(() =>{
97
68
  return [
98
69
  {
99
70
  title: t("My space"),
100
- routeName: "backoffice",
71
+ path:{
72
+ name: "backoffice",
73
+ query: getQueriesRouter(true),
74
+ },
75
+ class: "octopus-dropdown-item",
101
76
  condition: isAuthenticatedWithOrga.value,
102
77
  },
103
- { title: t("Home"), routeName: "home", condition: true },
78
+ {
79
+ title: t("Home"),
80
+ path:{
81
+ name: "home",
82
+ query: getQueriesRouter(false),
83
+ },
84
+ class:"octopus-dropdown-item show-phone-flex",
85
+ condition: true
86
+ },
104
87
  {
105
88
  title: t("Radio & Live"),
106
- routeName: "lives",
89
+ path:{
90
+ name: "lives",
91
+ query: getQueriesRouter(true),
92
+ },
93
+ class: "octopus-dropdown-item",
107
94
  condition:
108
95
  state.generalParameters.isLiveTab &&
109
96
  ((filterStore.filterOrgaId && filterStore.filterLive) || !filterStore.filterOrgaId),
110
97
  },
111
98
  {
112
99
  title: t("Podcasts"),
113
- routeName: "podcasts",
100
+ path:{
101
+ name: "podcasts",
102
+ query: getQueriesRouter(false),
103
+ },
104
+ class: "octopus-dropdown-item",
114
105
  condition: !props.notPodcastAndEmission,
115
106
  },
116
107
  {
117
108
  title: t("Emissions"),
118
- routeName: "emissions",
109
+ path:{
110
+ name: "emissions",
111
+ query: getQueriesRouter(false),
112
+ },
113
+ class: "octopus-dropdown-item",
119
114
  condition: !props.notPodcastAndEmission,
120
115
  },
121
116
  {
122
117
  title: t("Productors"),
123
- routeName: "productors",
118
+ path:{
119
+ name: "productors",
120
+ query: getQueriesRouter(true),
121
+ },
122
+ class: "octopus-dropdown-item",
124
123
  condition:
125
124
  !state.generalParameters.podcastmaker && (!filterStore.filterOrgaId || props.isEducation),
126
125
  },
127
126
  {
128
127
  title: t("Playlists"),
129
- routeName: "playlists",
128
+ path:{
129
+ name: "playlists",
130
+ query: getQueriesRouter(true),
131
+ },
132
+ class: "octopus-dropdown-item",
130
133
  condition: true,
131
134
  },
132
135
  {
133
136
  title: t("Speakers"),
134
- routeName: "participants",
137
+ path:{
138
+ name: "participants",
139
+ query: getQueriesRouter(true),
140
+ },
141
+ class: "octopus-dropdown-item",
135
142
  condition: true,
136
143
  },
137
- {
138
- title: t("Create an account"),
139
- routeName: "createAccount",
140
- condition: !isAuthenticatedWithOrga.value,
141
- },
142
144
  ];
143
145
  });
144
146
 
@@ -153,12 +155,8 @@ function handleMenuClick() {
153
155
  document.getElementById("mobile-menu-dropdown")?.click();
154
156
  }, 200);
155
157
  }
156
- function getQueriesRouter(routeName: string) {
157
- if (
158
- "podcasts" !== routeName &&
159
- "emissions" !== routeName &&
160
- "home" !== routeName
161
- ) {
158
+ function getQueriesRouter(onlyProductor:boolean) {
159
+ if (onlyProductor) {
162
160
  return { productor: filterStore.filterOrgaId };
163
161
  }
164
162
  return {
@@ -3,7 +3,7 @@
3
3
  role="banner"
4
4
  class="header-saooti-play"
5
5
  :style="headerBackgroundImage"
6
- :class="[generalStore.contentToDisplay ? 'header-img-bg':'header-color-bg', scrolled? 'scrolled':'', needToBlur ? 'header-force-blur':'']"
6
+ :class="[generalStore.contentToDisplay ? 'header-img-bg':'bg-gradient', scrolled? 'scrolled':'', needToBlur ? 'header-force-blur':'']"
7
7
  >
8
8
  <TopBarMainContent
9
9
  :is-phone="isPhone"
@@ -93,7 +93,8 @@ watch(()=>generalStore.contentToDisplay, async () => {
93
93
  needToBlur.value = false;
94
94
  return;
95
95
  }
96
- const proxyUrl = useProxyImageUrl(generalStore.contentToDisplay.imageUrl,"270", undefined, true);
96
+ const widthAsked = window.innerWidth > 960 ? "1600":"1000";
97
+ const proxyUrl = useProxyImageUrl(generalStore.contentToDisplay.imageUrl,widthAsked, undefined, true);
97
98
  try {
98
99
  const result = await axios.get(proxyUrl);
99
100
  headerBackgroundImage.value = `background-image: url('${result.data}');`;
@@ -159,15 +160,7 @@ function handleScroll(): void {
159
160
  background-repeat: no-repeat;
160
161
  background-size: cover;
161
162
  }
162
- &.header-color-bg{
163
- background: var(--octopus-primary);
164
- background: linear-gradient(
165
- 90deg,
166
- var(--octopus-primary) 0%,
167
- var(--octopus-tertiary) 100%
168
- );
169
- }
170
- &.header-color-bg, &.scrolled{
163
+ &.bg-gradient, &.scrolled{
171
164
  box-shadow: 0 2px 15px 5px var(--octopus-shadow) !important;
172
165
  }
173
166
  }
@@ -136,12 +136,10 @@
136
136
  :is-education="generalStore.platformEducation"
137
137
  :show="mobileMenuDisplay"
138
138
  :not-podcast-and-emission="inContentDisplayPage && !scrolled"
139
- :scrolled="scrolled"
140
139
  />
141
140
  <HomeDropdown
142
141
  :is-education="generalStore.platformEducation"
143
142
  :mobile-menu-display="mobileMenuDisplay"
144
- :scrolled="scrolled"
145
143
  />
146
144
  <router-link
147
145
  v-show="!isPhone && !inContentDisplayPage"