@saooti/octopus-sdk 41.0.8-SNAPSHOT → 41.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) 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/participant/ParticipantList.vue +6 -9
  17. package/src/components/display/playlist/PlaylistList.vue +5 -8
  18. package/src/components/display/playlist/PodcastList.vue +16 -7
  19. package/src/components/display/podcasts/PodcastFilterList.vue +19 -8
  20. package/src/components/display/podcasts/PodcastList.vue +8 -9
  21. package/src/components/display/podcasts/PodcastPlayButton.vue +4 -1
  22. package/src/components/display/sharing/SharePlayerTypes.vue +1 -1
  23. package/src/components/display/sharing/SubscribeButtons.vue +4 -2
  24. package/src/components/form/ClassicInputText.vue +3 -0
  25. package/src/components/form/ClassicMultiselect.vue +36 -8
  26. package/src/components/misc/ClassicAccordion.vue +4 -4
  27. package/src/components/misc/ClassicPopover.vue +1 -1
  28. package/src/components/misc/ClassicSpinner.vue +1 -1
  29. package/src/components/misc/FooterSection.vue +0 -16
  30. package/src/components/misc/HomeDropdown.vue +3 -110
  31. package/src/components/misc/MobileMenu.vue +59 -64
  32. package/src/components/misc/TopBar.vue +4 -11
  33. package/src/components/misc/TopBarMainContent.vue +1 -2
  34. package/src/components/misc/UserButtonContent.vue +159 -0
  35. package/src/components/misc/player/elements/PlayerImage.vue +0 -1
  36. package/src/components/misc/player/video/PlayerVideo.vue +2 -2
  37. package/src/components/pages/EmissionPage.vue +14 -0
  38. package/src/components/pages/PageLogout.vue +1 -6
  39. package/src/components/pages/ParticipantPage.vue +14 -0
  40. package/src/components/pages/PlaylistPage.vue +17 -4
  41. package/src/components/pages/PodcastPage.vue +0 -1
  42. package/src/components/pages/VideoPage.vue +5 -2
  43. package/src/helper/loadScript.ts +4 -4
  44. package/src/locale/de.ts +2 -2
  45. package/src/locale/en.ts +2 -2
  46. package/src/locale/es.ts +2 -2
  47. package/src/locale/fr.ts +2 -2
  48. package/src/locale/it.ts +2 -2
  49. package/src/locale/sl.ts +2 -2
  50. package/src/router/router.ts +17 -4
  51. package/src/stores/AuthStore.ts +12 -12
  52. package/src/stores/FilterStore.ts +1 -1
  53. package/src/stores/PlayerStore.ts +5 -0
  54. package/src/stores/VastStore.ts +2 -2
  55. package/src/stores/class/conference/conference.ts +2 -0
  56. package/src/style/_variables.scss +3 -0
  57. package/src/style/general.scss +12 -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"
@@ -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,143 +32,36 @@
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')"/>
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
- const isAuthenticated = computed(() => undefined !== authStore.authProfile?.userId);
129
64
  const isAuthenticatedWithOrga = computed(() => undefined !== authStore.authOrgaId);
130
- const pathLogin = computed(() => "/sso/login?redirect_url="+encodeURI(apiStore.frontendUrl + route.fullPath));
131
- const organisationsAvailable = computed(() => authStore.authProfile?.organisations ?? []);
132
- const helpLinks = computed(() => {
133
- if (authStore.isGarRole || props.isEducation) {
134
- return [];
135
- }
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
- return [
143
- {
144
- title: t("My space"),
145
- class: "octopus-dropdown-item show-small-phone-flex",
146
- path: "/main/priv/backoffice",
147
- condition: isAuthenticatedWithOrga.value,
148
- },
149
- {
150
- title: t("Upload"),
151
- class: "octopus-dropdown-item show-small-phone-flex",
152
- path: "/main/priv/upload",
153
- condition: isAuthenticatedWithOrga.value && authStore.isRoleContribution,
154
- },
155
- {
156
- title: t("Edit my profile"),
157
- class: "octopus-dropdown-item",
158
- path: "/main/priv/edit/profile",
159
- condition: true,
160
- },
161
- {
162
- title: t("Edit my organisation"),
163
- class: "octopus-dropdown-item",
164
- path: "/main/priv/edit/organisation",
165
- condition:
166
- isAuthenticatedWithOrga.value &&
167
- (authStore.isRoleOrganisation || 1 < organisationsAvailable.value.length),
168
- },
169
- ];
170
- });
171
-
172
65
 
173
66
  //Methods
174
67
  function goToAdministration() {
@@ -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>
@@ -61,21 +33,22 @@ import { useRubriquesFilterComputed } from "../composable/route/useRubriquesFilt
61
33
  import { state } from "../../stores/ParamSdkStore";
62
34
  import { defineAsyncComponent, ref, computed } from "vue";
63
35
  import { useFilterStore } from "../../stores/FilterStore";
64
- import { useAuthStore } from "../../stores/AuthStore";
65
- import { useApiStore } from "../../stores/ApiStore";
66
36
  import { useI18n } from "vue-i18n";
67
- import { useRoute } from "vue-router";
37
+ import { useResizePhone } from "../composable/useResizePhone";
38
+ import { useAuthStore } from "../../stores/AuthStore";
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 },
51
+ inContentDisplayPage: { default: false, type: Boolean },
79
52
  })
80
53
 
81
54
  //Data
@@ -84,61 +57,87 @@ const firstLoaded = ref(false);
84
57
  //Composables
85
58
  const { t } = useI18n();
86
59
  const { rubriqueQueryParam } = useRubriquesFilterComputed();
87
- const authStore = useAuthStore();
88
- const apiStore = useApiStore();
89
60
  const filterStore = useFilterStore();
90
- const route = useRoute();
61
+ const authStore = useAuthStore();
62
+ const { windowWidth } = useResizePhone();
91
63
 
92
64
 
93
65
  //Computed
94
66
  const isAuthenticatedWithOrga = computed(() => undefined !== authStore.authOrgaId);
95
- const pathLogin = computed(() => "/sso/login?redirect_url="+encodeURI(apiStore.frontendUrl + route.fullPath));
67
+ const displayUserContent = computed(() =>{
68
+ if(isAuthenticatedWithOrga.value){
69
+ return 500>=windowWidth.value;
70
+ }
71
+ return props.show && !props.inContentDisplayPage;
72
+ });
96
73
  const routerLinkArray = computed(() =>{
97
74
  return [
98
- {
99
- title: t("My space"),
100
- routeName: "backoffice",
101
- condition: isAuthenticatedWithOrga.value,
75
+ {
76
+ title: t("Home"),
77
+ path:{
78
+ name: "home",
79
+ query: getQueriesRouter(false),
80
+ },
81
+ class:"octopus-dropdown-item show-phone-flex",
82
+ condition: true
102
83
  },
103
- { title: t("Home"), routeName: "home", condition: true },
104
84
  {
105
85
  title: t("Radio & Live"),
106
- routeName: "lives",
86
+ path:{
87
+ name: "lives",
88
+ query: getQueriesRouter(true),
89
+ },
90
+ class: "octopus-dropdown-item",
107
91
  condition:
108
92
  state.generalParameters.isLiveTab &&
109
93
  ((filterStore.filterOrgaId && filterStore.filterLive) || !filterStore.filterOrgaId),
110
94
  },
111
95
  {
112
96
  title: t("Podcasts"),
113
- routeName: "podcasts",
97
+ path:{
98
+ name: "podcasts",
99
+ query: getQueriesRouter(false),
100
+ },
101
+ class: "octopus-dropdown-item",
114
102
  condition: !props.notPodcastAndEmission,
115
103
  },
116
104
  {
117
105
  title: t("Emissions"),
118
- routeName: "emissions",
106
+ path:{
107
+ name: "emissions",
108
+ query: getQueriesRouter(false),
109
+ },
110
+ class: "octopus-dropdown-item",
119
111
  condition: !props.notPodcastAndEmission,
120
112
  },
121
113
  {
122
114
  title: t("Productors"),
123
- routeName: "productors",
115
+ path:{
116
+ name: "productors",
117
+ query: getQueriesRouter(true),
118
+ },
119
+ class: "octopus-dropdown-item",
124
120
  condition:
125
121
  !state.generalParameters.podcastmaker && (!filterStore.filterOrgaId || props.isEducation),
126
122
  },
127
123
  {
128
124
  title: t("Playlists"),
129
- routeName: "playlists",
125
+ path:{
126
+ name: "playlists",
127
+ query: getQueriesRouter(true),
128
+ },
129
+ class: "octopus-dropdown-item",
130
130
  condition: true,
131
131
  },
132
132
  {
133
133
  title: t("Speakers"),
134
- routeName: "participants",
134
+ path:{
135
+ name: "participants",
136
+ query: getQueriesRouter(true),
137
+ },
138
+ class: "octopus-dropdown-item",
135
139
  condition: true,
136
140
  },
137
- {
138
- title: t("Create an account"),
139
- routeName: "createAccount",
140
- condition: !isAuthenticatedWithOrga.value,
141
- },
142
141
  ];
143
142
  });
144
143
 
@@ -153,12 +152,8 @@ function handleMenuClick() {
153
152
  document.getElementById("mobile-menu-dropdown")?.click();
154
153
  }, 200);
155
154
  }
156
- function getQueriesRouter(routeName: string) {
157
- if (
158
- "podcasts" !== routeName &&
159
- "emissions" !== routeName &&
160
- "home" !== routeName
161
- ) {
155
+ function getQueriesRouter(onlyProductor:boolean) {
156
+ if (onlyProductor) {
162
157
  return { productor: filterStore.filterOrgaId };
163
158
  }
164
159
  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
  }
@@ -135,13 +135,12 @@
135
135
  <MobileMenu
136
136
  :is-education="generalStore.platformEducation"
137
137
  :show="mobileMenuDisplay"
138
+ :inContentDisplayPage="inContentDisplayPage"
138
139
  :not-podcast-and-emission="inContentDisplayPage && !scrolled"
139
- :scrolled="scrolled"
140
140
  />
141
141
  <HomeDropdown
142
142
  :is-education="generalStore.platformEducation"
143
143
  :mobile-menu-display="mobileMenuDisplay"
144
- :scrolled="scrolled"
145
144
  />
146
145
  <router-link
147
146
  v-show="!isPhone && !inContentDisplayPage"