@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.
- 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/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 +3 -0
- 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 +3 -110
- package/src/components/misc/MobileMenu.vue +59 -64
- package/src/components/misc/TopBar.vue +4 -11
- package/src/components/misc/TopBarMainContent.vue +1 -2
- package/src/components/misc/UserButtonContent.vue +159 -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 +0 -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 +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, () =>
|
|
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"
|
|
@@ -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,143 +32,36 @@
|
|
|
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')"/>
|
|
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
|
-
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
|
-
<
|
|
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>
|
|
@@ -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 {
|
|
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
|
-
|
|
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
|
|
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
|
|
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("
|
|
100
|
-
|
|
101
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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':'
|
|
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
|
}
|
|
@@ -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"
|