@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.
- package/index.ts +2 -1
- package/package.json +3 -1
- package/plateform.conf +1 -1
- package/src/App.vue +3 -7
- package/src/api/classicApi.ts +1 -1
- package/src/components/composable/player/usePlayerLive.ts +3 -3
- package/src/components/composable/player/usePlayerVast.ts +7 -7
- package/src/components/composable/route/useAdvancedParamInit.ts +1 -1
- package/src/components/composable/route/useRouteUpdateParams.ts +4 -4
- package/src/components/composable/route/useSimplePageParam.ts +15 -8
- package/src/components/display/categories/CategoryChooser.vue +6 -0
- package/src/components/display/comments/CommentList.vue +1 -1
- package/src/components/display/emission/EmissionList.vue +5 -8
- package/src/components/display/filter/AdvancedSearch.vue +0 -3
- package/src/components/display/list/ListPaginate.vue +4 -12
- package/src/components/display/live/LiveItem.vue +2 -3
- package/src/components/display/participant/ParticipantList.vue +6 -9
- package/src/components/display/playlist/PlaylistList.vue +5 -8
- package/src/components/display/playlist/PodcastList.vue +16 -7
- package/src/components/display/podcasts/PodcastFilterList.vue +19 -8
- package/src/components/display/podcasts/PodcastList.vue +8 -9
- package/src/components/display/podcasts/PodcastPlayButton.vue +4 -1
- package/src/components/display/sharing/SharePlayerTypes.vue +1 -1
- package/src/components/display/sharing/SubscribeButtons.vue +4 -2
- package/src/components/form/ClassicInputText.vue +4 -1
- package/src/components/form/ClassicMultiselect.vue +36 -8
- package/src/components/misc/ClassicAccordion.vue +4 -4
- package/src/components/misc/ClassicPopover.vue +1 -1
- package/src/components/misc/ClassicSpinner.vue +1 -1
- package/src/components/misc/FooterSection.vue +0 -16
- package/src/components/misc/HomeDropdown.vue +6 -76
- package/src/components/misc/MobileMenu.vue +57 -59
- package/src/components/misc/TopBar.vue +4 -11
- package/src/components/misc/TopBarMainContent.vue +0 -2
- package/src/components/misc/UserButtonContent.vue +113 -0
- package/src/components/misc/player/elements/PlayerImage.vue +0 -1
- package/src/components/misc/player/video/PlayerVideo.vue +2 -2
- package/src/components/pages/EmissionPage.vue +14 -0
- package/src/components/pages/PageLogout.vue +1 -6
- package/src/components/pages/ParticipantPage.vue +14 -0
- package/src/components/pages/PlaylistPage.vue +17 -4
- package/src/components/pages/PodcastPage.vue +1 -1
- package/src/components/pages/VideoPage.vue +5 -2
- package/src/helper/loadScript.ts +4 -4
- package/src/locale/de.ts +2 -2
- package/src/locale/en.ts +2 -2
- package/src/locale/es.ts +2 -2
- package/src/locale/fr.ts +2 -2
- package/src/locale/it.ts +2 -2
- package/src/locale/sl.ts +2 -2
- package/src/router/router.ts +17 -4
- package/src/stores/AuthStore.ts +12 -12
- package/src/stores/FilterStore.ts +1 -1
- package/src/stores/PlayerStore.ts +5 -0
- package/src/stores/VastStore.ts +2 -2
- package/src/stores/class/conference/conference.ts +2 -0
- package/src/style/_variables.scss +3 -0
- 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, () =>
|
|
152
|
-
watch(()=>props.reload, () =>
|
|
153
|
-
watch(dsize, () =>
|
|
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(
|
|
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
|
-
...{
|
|
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:
|
|
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()
|
|
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
|
-
|
|
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
|
-
<
|
|
11
|
-
label
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
-
|
|
24
|
-
|
|
23
|
+
alt=""
|
|
25
24
|
/>
|
|
26
|
-
<span
|
|
27
|
-
<
|
|
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
|
|
75
|
+
const isTopLayerPopover = computed(() => (props.isTopLayer || "octopus-modal"===props.relativeClass) && Object.hasOwn(HTMLElement.prototype, "popover"));
|
|
76
76
|
|
|
77
77
|
|
|
78
78
|
//Watch
|
|
@@ -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
|
-
<
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
133
|
-
|
|
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
|
-
<
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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 {
|
|
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
|
|
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
|
-
|
|
71
|
+
path:{
|
|
72
|
+
name: "backoffice",
|
|
73
|
+
query: getQueriesRouter(true),
|
|
74
|
+
},
|
|
75
|
+
class: "octopus-dropdown-item",
|
|
101
76
|
condition: isAuthenticatedWithOrga.value,
|
|
102
77
|
},
|
|
103
|
-
{
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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':'
|
|
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
|
|
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
|
-
&.
|
|
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"
|