@saooti/octopus-sdk 41.0.2-SNAPSHOT → 41.0.2
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/src/App.vue +3 -7
- package/src/components/composable/player/usePlayerLive.ts +1 -1
- package/src/components/composable/player/usePlayerVast.ts +7 -7
- package/src/components/composable/radio/usefetchRadioData.ts +29 -12
- 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 +2 -0
- 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/live/RadioCurrently.vue +2 -5
- 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/PodcastModuleBox.vue +1 -1
- package/src/components/display/sharing/SharePlayerTypes.vue +1 -1
- package/src/components/form/ClassicInputText.vue +1 -1
- package/src/components/form/ClassicMultiselect.vue +4 -1
- package/src/components/misc/ClassicPopover.vue +1 -1
- package/src/components/misc/FooterSection.vue +1 -24
- package/src/components/misc/TopBar.vue +2 -1
- package/src/components/misc/player/elements/PlayerTitle.vue +3 -3
- package/src/components/misc/player/radio/RadioHistory.vue +3 -2
- package/src/components/pages/EmissionPage.vue +14 -0
- package/src/components/pages/ParticipantPage.vue +14 -0
- package/src/components/pages/PlaylistPage.vue +17 -4
- package/src/components/pages/PodcastPage.vue +2 -1
- package/src/helper/loadScript.ts +4 -4
- package/src/locale/de.ts +1 -0
- package/src/locale/en.ts +1 -0
- package/src/locale/es.ts +1 -0
- package/src/locale/fr.ts +1 -0
- package/src/locale/it.ts +1 -0
- package/src/locale/sl.ts +1 -0
- 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 +1 -1
- package/src/stores/VastStore.ts +2 -2
- package/src/stores/class/general/player.ts +2 -2
- package/src/helper/radio/radioHelper.ts +0 -15
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
<h3 class="mb-2">
|
|
4
4
|
{{ titleFilter }}
|
|
5
5
|
</h3>
|
|
6
|
-
<div class="d-flex align-items-
|
|
6
|
+
<div class="d-flex align-items-stretch flex-wrap mb-2">
|
|
7
7
|
<div id="podcast-filter-list-category-chooser" class="w-50-responsive pe-3">
|
|
8
8
|
<CategoryChooser
|
|
9
|
+
height="100%"
|
|
9
10
|
:defaultanswer="t('No category filter')"
|
|
10
11
|
@selected="onCategorySelected"
|
|
11
12
|
/>
|
|
@@ -18,17 +19,19 @@
|
|
|
18
19
|
/>
|
|
19
20
|
</div>
|
|
20
21
|
<PodcastList
|
|
21
|
-
:first="
|
|
22
|
-
:size="
|
|
22
|
+
:first="dfirst"
|
|
23
|
+
:size="dsize"
|
|
23
24
|
:iab-id="iabId"
|
|
24
25
|
:query="query"
|
|
25
26
|
:participant-id="participantId"
|
|
26
27
|
:emission-id="emissionId"
|
|
27
28
|
:organisation-id="productorId"
|
|
29
|
+
:sort-criteria="sort"
|
|
28
30
|
:reload="reloadList"
|
|
29
31
|
:include-hidden="editRight"
|
|
30
32
|
:show-count="showCount"
|
|
31
33
|
:display-sort-text="false"
|
|
34
|
+
:force-update-parameters="forceUpdateParameters"
|
|
32
35
|
@fetch="fetch"
|
|
33
36
|
/>
|
|
34
37
|
</section>
|
|
@@ -47,6 +50,9 @@ const CategoryChooser = defineAsyncComponent(
|
|
|
47
50
|
|
|
48
51
|
//Props
|
|
49
52
|
const props = defineProps({
|
|
53
|
+
first: { default: 0, type: Number },
|
|
54
|
+
size: { default: 30, type: Number },
|
|
55
|
+
query: { default: undefined, type: String },
|
|
50
56
|
participantId: { default: undefined, type: Number },
|
|
51
57
|
name: { default: undefined, type: String },
|
|
52
58
|
emissionId: { default: undefined, type: Number },
|
|
@@ -55,15 +61,16 @@ const props = defineProps({
|
|
|
55
61
|
editRight: { default: false, type: Boolean },
|
|
56
62
|
productorId: { default: () => [], type: Array as () => Array<string> },
|
|
57
63
|
showCount: { default: false, type: Boolean },
|
|
64
|
+
forceUpdateParameters: { default: false, type: Boolean },
|
|
58
65
|
})
|
|
59
66
|
|
|
60
67
|
//Emits
|
|
61
|
-
const emit = defineEmits(["fetch"]);
|
|
68
|
+
const emit = defineEmits(["fetch", "update:query"]);
|
|
62
69
|
|
|
63
70
|
//Data
|
|
64
|
-
const
|
|
65
|
-
const
|
|
66
|
-
const searchPattern = ref("");
|
|
71
|
+
const dfirst = ref(props.first);
|
|
72
|
+
const dsize = ref(props.size);
|
|
73
|
+
const searchPattern = ref(props.query ?? "");
|
|
67
74
|
const reloadList = ref(false);
|
|
68
75
|
const iabId : Ref<number | undefined>= ref(undefined);
|
|
69
76
|
|
|
@@ -76,12 +83,16 @@ const titleFilter = computed(() => {
|
|
|
76
83
|
? t("All podcast button", { name: props.name })
|
|
77
84
|
: t("All podcast emission button");
|
|
78
85
|
});
|
|
79
|
-
const query = computed(() => searchPattern.value.length
|
|
86
|
+
const query = computed(() => searchPattern.value.length > 3 ? searchPattern.value : "");
|
|
87
|
+
const sort = computed(() => !query.value.length ? "DATE" : "SCORE");
|
|
80
88
|
|
|
81
89
|
//Watch
|
|
82
90
|
watch(()=>props.reload, () => {
|
|
83
91
|
reloadList.value = !reloadList.value;
|
|
84
92
|
});
|
|
93
|
+
watch(searchPattern, () => {
|
|
94
|
+
emit('update:query', searchPattern.value);
|
|
95
|
+
});
|
|
85
96
|
|
|
86
97
|
//Methods
|
|
87
98
|
function onCategorySelected(category: Category | undefined): void {
|
|
@@ -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) {
|
|
@@ -252,7 +252,7 @@ const isDebriefing = computed(() => {
|
|
|
252
252
|
);
|
|
253
253
|
});
|
|
254
254
|
const isOctopusAndAnimator = computed(() => {
|
|
255
|
-
return !isPodcastmaker && editRight && authStore.isRoleLive;
|
|
255
|
+
return !isPodcastmaker.value && editRight.value && authStore.isRoleLive;
|
|
256
256
|
});
|
|
257
257
|
const podcastNotValid = computed(() => {
|
|
258
258
|
return (
|
|
@@ -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;
|
|
@@ -5,7 +5,7 @@
|
|
|
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
10
|
<label :class="displayLabel ? '' : 'd-none'" :for="id" class="form-label">{{
|
|
11
11
|
label
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
"
|
|
29
29
|
:filter="fakeSearch"
|
|
30
30
|
:selectable="() => !maxOptionsSelected"
|
|
31
|
+
:style="{height: height }"
|
|
31
32
|
:class="{ 'border border-danger': textDanger?.length }"
|
|
32
33
|
@open="onSearch"
|
|
33
34
|
@search="onSearch"
|
|
@@ -93,6 +94,7 @@ const props = defineProps({
|
|
|
93
94
|
multiple: { default: false, type: Boolean },
|
|
94
95
|
isDisabled: { default: false, type: Boolean },
|
|
95
96
|
width: { default: "100%", type: String },
|
|
97
|
+
height: { default: undefined, type: String },
|
|
96
98
|
maxElement: { default: 50, type: Number },
|
|
97
99
|
minSearchLength: { default: 3, type: Number },
|
|
98
100
|
optionChosen: { default: undefined, type: Object as () => unknown },
|
|
@@ -209,6 +211,7 @@ defineExpose({
|
|
|
209
211
|
|
|
210
212
|
.vs__dropdown-toggle {
|
|
211
213
|
padding: 0;
|
|
214
|
+
height: 100%;
|
|
212
215
|
}
|
|
213
216
|
|
|
214
217
|
.vs__search:focus {
|
|
@@ -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
|
|
@@ -19,10 +19,7 @@
|
|
|
19
19
|
>
|
|
20
20
|
<router-link
|
|
21
21
|
class="link-hover special-select-align-magic-trick"
|
|
22
|
-
:to="
|
|
23
|
-
name: link.routeName,
|
|
24
|
-
query: getQueriesRouter(link.routeName),
|
|
25
|
-
}"
|
|
22
|
+
:to="link.routeName"
|
|
26
23
|
>
|
|
27
24
|
{{ link.title }}
|
|
28
25
|
</router-link>
|
|
@@ -77,7 +74,6 @@
|
|
|
77
74
|
|
|
78
75
|
<script setup lang="ts">
|
|
79
76
|
import cookiesHelper from "../../helper/cookiesHelper";
|
|
80
|
-
import { useRubriquesFilterComputed } from "../composable/route/useRubriquesFilterComputed";
|
|
81
77
|
import ClassicSelect from "../form/ClassicSelect.vue";
|
|
82
78
|
import AcpmImage from "./AcpmImage.vue";
|
|
83
79
|
import { state } from "../../stores/ParamSdkStore";
|
|
@@ -106,7 +102,6 @@ const reset = ref(false);
|
|
|
106
102
|
const organisationId: Ref<string | undefined> = ref(undefined);
|
|
107
103
|
|
|
108
104
|
//Composables
|
|
109
|
-
const { rubriqueQueryParam } = useRubriquesFilterComputed();
|
|
110
105
|
const generalStore = useGeneralStore();
|
|
111
106
|
const filterStore = useFilterStore();
|
|
112
107
|
const authStore = useAuthStore();
|
|
@@ -143,20 +138,6 @@ watch(()=>filterStore.filterOrgaId, () => {
|
|
|
143
138
|
|
|
144
139
|
|
|
145
140
|
//Methods
|
|
146
|
-
function getQueriesRouter(routeName: string) {
|
|
147
|
-
if (
|
|
148
|
-
"podcasts" !== routeName &&
|
|
149
|
-
"emissions" !== routeName &&
|
|
150
|
-
"home" !== routeName
|
|
151
|
-
) {
|
|
152
|
-
return { productor: filterStore.filterOrgaId };
|
|
153
|
-
}
|
|
154
|
-
return {
|
|
155
|
-
productor: filterStore.filterOrgaId,
|
|
156
|
-
iabId: filterStore.filterIab?.id,
|
|
157
|
-
rubriquesId: rubriqueQueryParam.value,
|
|
158
|
-
};
|
|
159
|
-
}
|
|
160
141
|
function changeLanguage(): void {
|
|
161
142
|
cookiesHelper.setCookie("octopus-language", language.value);
|
|
162
143
|
loadLocaleMessages(
|
|
@@ -195,10 +176,6 @@ async function onOrganisationSelected( organisation: Organisation | undefined):
|
|
|
195
176
|
});
|
|
196
177
|
}
|
|
197
178
|
}
|
|
198
|
-
//Expose
|
|
199
|
-
defineExpose({
|
|
200
|
-
updateComment
|
|
201
|
-
});
|
|
202
179
|
</script>
|
|
203
180
|
|
|
204
181
|
<style lang="scss">
|
|
@@ -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}');`;
|
|
@@ -89,7 +89,7 @@ onUnmounted(()=>{
|
|
|
89
89
|
async function fetchCurrentlyPlaying(): Promise<void> {
|
|
90
90
|
fetchRadioMetadata(
|
|
91
91
|
playerStore.playerRadio?.canalId ?? 0,
|
|
92
|
-
playerStore.playerRadio?.metadata
|
|
92
|
+
playerStore.playerRadio?.metadata?.title ?? "",
|
|
93
93
|
updateMetadata,
|
|
94
94
|
updateAdvertising,
|
|
95
95
|
);
|
|
@@ -98,11 +98,11 @@ function updateAdvertising(nextAdvertising: NextAdvertising): void {
|
|
|
98
98
|
playerStore.playerRadioUpdateNextAdvertising(nextAdvertising);
|
|
99
99
|
}
|
|
100
100
|
function updateMetadata(
|
|
101
|
-
metadata: MediaRadio,
|
|
101
|
+
metadata: MediaRadio|undefined,
|
|
102
102
|
podcast: Podcast | undefined,
|
|
103
103
|
history: Array<MediaRadio>,
|
|
104
104
|
): void {
|
|
105
|
-
playerStore.playerMetadata(metadata, history);
|
|
105
|
+
playerStore.playerMetadata(metadata, history); //TODO
|
|
106
106
|
playerStore.playerRadioPodcast(podcast);
|
|
107
107
|
}
|
|
108
108
|
</script>
|
|
@@ -40,10 +40,10 @@ import ChevronLeftIcon from "vue-material-design-icons/ChevronLeft.vue";
|
|
|
40
40
|
import ChevronRightIcon from "vue-material-design-icons/ChevronRight.vue";
|
|
41
41
|
import { usePlayerStore } from "../../../../stores/PlayerStore";
|
|
42
42
|
import dayjs from "dayjs";
|
|
43
|
-
import radioHelper from "../../../../helper/radio/radioHelper";
|
|
44
43
|
import { computed, nextTick, onMounted, onUnmounted, ref, useTemplateRef, watch } from "vue";
|
|
45
44
|
import { MediaRadio } from "@/stores/class/general/player";
|
|
46
45
|
import { useI18n } from "vue-i18n";
|
|
46
|
+
import { useFetchRadio } from "../../../composable/radio/usefetchRadioData";
|
|
47
47
|
|
|
48
48
|
|
|
49
49
|
//Data
|
|
@@ -54,6 +54,7 @@ const historyListContainerRef = useTemplateRef('historyListContainer');
|
|
|
54
54
|
//Composables
|
|
55
55
|
const { t } = useI18n();
|
|
56
56
|
const playerStore = usePlayerStore();
|
|
57
|
+
const {displayTitle} = useFetchRadio();
|
|
57
58
|
|
|
58
59
|
|
|
59
60
|
//Computed
|
|
@@ -119,7 +120,7 @@ function displayPreviousItem(item: MediaRadio): string {
|
|
|
119
120
|
if (item.podcastId) {
|
|
120
121
|
return item.title;
|
|
121
122
|
}
|
|
122
|
-
return
|
|
123
|
+
return displayTitle(item);
|
|
123
124
|
}
|
|
124
125
|
</script>
|
|
125
126
|
<style lang="scss">
|
|
@@ -70,12 +70,17 @@
|
|
|
70
70
|
:emission-id="emissionId"
|
|
71
71
|
/>
|
|
72
72
|
<PodcastFilterList
|
|
73
|
+
v-if="isInit"
|
|
74
|
+
v-model:query="searchPattern"
|
|
73
75
|
class="mx-2"
|
|
76
|
+
:first="paginateFirst"
|
|
77
|
+
:size="ps"
|
|
74
78
|
:show-count="true"
|
|
75
79
|
:emission-id="emissionId"
|
|
76
80
|
:category-filter="false"
|
|
77
81
|
:edit-right="editRight"
|
|
78
82
|
:productor-id="[emission.orga.id]"
|
|
83
|
+
:force-update-parameters="true"
|
|
79
84
|
@fetch="podcastsFetched"
|
|
80
85
|
/>
|
|
81
86
|
</section>
|
|
@@ -110,6 +115,7 @@ import { useFilterStore } from "../../stores/FilterStore";
|
|
|
110
115
|
import { Podcast } from "@/stores/class/general/podcast";
|
|
111
116
|
import { useI18n } from "vue-i18n";
|
|
112
117
|
import { useRoute } from "vue-router";
|
|
118
|
+
import { useSimplePageParam } from "../composable/route/useSimplePageParam";
|
|
113
119
|
const ShareAnonymous = defineAsyncComponent(() => import("../display/sharing/ShareAnonymous.vue"));
|
|
114
120
|
const PodcastFilterList = defineAsyncComponent(
|
|
115
121
|
() => import("../display/podcasts/PodcastFilterList.vue"),
|
|
@@ -143,6 +149,9 @@ const PodcastmakerHeader = defineAsyncComponent(
|
|
|
143
149
|
//Props
|
|
144
150
|
const props = defineProps({
|
|
145
151
|
emissionId: { default: undefined, type: Number },
|
|
152
|
+
pr: { default: 0, type: Number },
|
|
153
|
+
ps: { default: 30, type: Number },
|
|
154
|
+
routeQuery: { default: "", type: String },
|
|
146
155
|
})
|
|
147
156
|
|
|
148
157
|
|
|
@@ -163,6 +172,11 @@ const authStore = useAuthStore();
|
|
|
163
172
|
const filterStore = useFilterStore();
|
|
164
173
|
const generalStore= useGeneralStore();
|
|
165
174
|
const route= useRoute();
|
|
175
|
+
const {
|
|
176
|
+
searchPattern,
|
|
177
|
+
paginateFirst,
|
|
178
|
+
isInit
|
|
179
|
+
} = useSimplePageParam(props, true);
|
|
166
180
|
|
|
167
181
|
|
|
168
182
|
//Computed
|
|
@@ -47,12 +47,17 @@
|
|
|
47
47
|
</section>
|
|
48
48
|
<!-- productorId define to avoid overwrite #12817 -->
|
|
49
49
|
<PodcastFilterList
|
|
50
|
+
v-if="isInit"
|
|
51
|
+
v-model:query="searchPattern"
|
|
52
|
+
:first="paginateFirst"
|
|
53
|
+
:size="ps"
|
|
50
54
|
:participant-id="participantId"
|
|
51
55
|
:name="name"
|
|
52
56
|
:category-filter="true"
|
|
53
57
|
:productor-id="['']"
|
|
54
58
|
:reload="reload"
|
|
55
59
|
:show-count="true"
|
|
60
|
+
:force-update-parameters="true"
|
|
56
61
|
/>
|
|
57
62
|
</template>
|
|
58
63
|
<ClassicLoading
|
|
@@ -77,6 +82,7 @@ import { computed, defineAsyncComponent, ref, Ref, watch } from "vue";
|
|
|
77
82
|
import { AxiosError } from "axios";
|
|
78
83
|
import { useI18n } from "vue-i18n";
|
|
79
84
|
import { useRoute } from "vue-router";
|
|
85
|
+
import { useSimplePageParam } from "../composable/route/useSimplePageParam";
|
|
80
86
|
const ShareSocialsButtons = defineAsyncComponent(
|
|
81
87
|
() => import("../display/sharing/ShareSocialsButtons.vue"),
|
|
82
88
|
);
|
|
@@ -92,6 +98,9 @@ const ShareAnonymous = defineAsyncComponent(() => import("../display/sharing/Sha
|
|
|
92
98
|
//Props
|
|
93
99
|
const props = defineProps({
|
|
94
100
|
participantId: { default: undefined, type: Number },
|
|
101
|
+
pr: { default: 0, type: Number },
|
|
102
|
+
ps: { default: 30, type: Number },
|
|
103
|
+
routeQuery: { default: "", type: String },
|
|
95
104
|
});
|
|
96
105
|
|
|
97
106
|
|
|
@@ -110,6 +119,11 @@ const { isEditRights } = useOrgaComputed();
|
|
|
110
119
|
const { updatePathParams } = useSeoTitleUrl();
|
|
111
120
|
const {handle403} = useErrorHandler();
|
|
112
121
|
const filterStore = useFilterStore();
|
|
122
|
+
const {
|
|
123
|
+
searchPattern,
|
|
124
|
+
paginateFirst,
|
|
125
|
+
isInit
|
|
126
|
+
} = useSimplePageParam(props, true);
|
|
113
127
|
|
|
114
128
|
|
|
115
129
|
//Computed
|
|
@@ -18,8 +18,7 @@
|
|
|
18
18
|
width="250"
|
|
19
19
|
height="250"
|
|
20
20
|
aria-hidden="true"
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
alt=""
|
|
23
22
|
:title="t('Playlist name image', { name: name })"
|
|
24
23
|
class="img-box float-start me-3 mb-3"
|
|
25
24
|
/>
|
|
@@ -42,7 +41,13 @@
|
|
|
42
41
|
:organisation-id="playlist.organisation.id"
|
|
43
42
|
/>
|
|
44
43
|
<section class="module-box">
|
|
45
|
-
<PodcastList
|
|
44
|
+
<PodcastList
|
|
45
|
+
v-if="isInit"
|
|
46
|
+
v-model:query="searchPattern"
|
|
47
|
+
:first="paginateFirst"
|
|
48
|
+
:size="ps"
|
|
49
|
+
:playlist="playlist"
|
|
50
|
+
/>
|
|
46
51
|
</section>
|
|
47
52
|
</div>
|
|
48
53
|
</template>
|
|
@@ -71,6 +76,7 @@ import {defineAsyncComponent, ref, Ref, computed, watch, onBeforeUnmount } from
|
|
|
71
76
|
import { AxiosError } from "axios";
|
|
72
77
|
import { useI18n } from "vue-i18n";
|
|
73
78
|
import { useRoute } from "vue-router";
|
|
79
|
+
import { useSimplePageParam } from "../composable/route/useSimplePageParam";
|
|
74
80
|
const ShareSocialsButtons = defineAsyncComponent(
|
|
75
81
|
() => import("../display/sharing/ShareSocialsButtons.vue"),
|
|
76
82
|
);
|
|
@@ -89,6 +95,9 @@ const ShareAnonymous = defineAsyncComponent(() => import("../display/sharing/Sha
|
|
|
89
95
|
//Props
|
|
90
96
|
const props = defineProps({
|
|
91
97
|
playlistId: { default: undefined, type: Number },
|
|
98
|
+
pr: { default: 0, type: Number },
|
|
99
|
+
ps: { default: 30, type: Number },
|
|
100
|
+
routeQuery: { default: "", type: String },
|
|
92
101
|
});
|
|
93
102
|
|
|
94
103
|
|
|
@@ -108,7 +117,11 @@ const {handle403} = useErrorHandler();
|
|
|
108
117
|
const authStore = useAuthStore();
|
|
109
118
|
const filterStore = useFilterStore();
|
|
110
119
|
const generalStore = useGeneralStore();
|
|
111
|
-
|
|
120
|
+
const {
|
|
121
|
+
searchPattern,
|
|
122
|
+
paginateFirst,
|
|
123
|
+
isInit
|
|
124
|
+
} = useSimplePageParam(props, true);
|
|
112
125
|
|
|
113
126
|
|
|
114
127
|
//Computed
|
|
@@ -255,7 +255,8 @@ async function fetchConferenceStatus() {
|
|
|
255
255
|
api: 9,
|
|
256
256
|
path: "conference/info/" + podcast.value?.conferenceId,
|
|
257
257
|
});
|
|
258
|
-
|
|
258
|
+
|
|
259
|
+
fetchConference.value = {...fetchConference.value, ...data};
|
|
259
260
|
} catch {
|
|
260
261
|
//Do nothing
|
|
261
262
|
}
|
package/src/helper/loadScript.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
function loadScript(src: string, async:boolean, callback:
|
|
1
|
+
function loadScript(src: string, async:boolean, callback: (isLoaded:boolean) => void) {
|
|
2
2
|
const firstElement = document.getElementsByTagName('head')[0] || document.documentElement,
|
|
3
3
|
scriptElement = document.createElement('script');
|
|
4
4
|
scriptElement.type = 'text/javascript';
|
|
@@ -6,13 +6,13 @@ function loadScript(src: string, async:boolean, callback: any) {
|
|
|
6
6
|
scriptElement.async = async;
|
|
7
7
|
scriptElement.addEventListener('load', function() {
|
|
8
8
|
if(callback && typeof callback === 'function') {
|
|
9
|
-
callback(true
|
|
9
|
+
callback(true);
|
|
10
10
|
}
|
|
11
11
|
}, false);
|
|
12
|
-
scriptElement.addEventListener('error', function(
|
|
12
|
+
scriptElement.addEventListener('error', function() {
|
|
13
13
|
firstElement.removeChild(scriptElement);
|
|
14
14
|
if(callback && typeof callback === 'function') {
|
|
15
|
-
callback(false
|
|
15
|
+
callback(false);
|
|
16
16
|
}
|
|
17
17
|
}, false);
|
|
18
18
|
firstElement.insertBefore(scriptElement, firstElement.firstChild);
|
package/src/locale/de.ts
CHANGED
package/src/locale/en.ts
CHANGED
package/src/locale/es.ts
CHANGED
package/src/locale/fr.ts
CHANGED
package/src/locale/it.ts
CHANGED
package/src/locale/sl.ts
CHANGED
package/src/router/router.ts
CHANGED
|
@@ -144,9 +144,13 @@ const routes: Array<RouteRecordRaw> = [
|
|
|
144
144
|
component: EmissionPage,
|
|
145
145
|
props: (route: RouteLocationNormalized) => ({
|
|
146
146
|
emissionId: parseInt(route.params.emissionId.toString(), 10),
|
|
147
|
+
pr: route.query.pr ? parseInt(route.query.pr.toString(), 10) : undefined,
|
|
148
|
+
ps: route.query.ps ? parseInt(route.query.ps.toString(), 10) : undefined,
|
|
149
|
+
routeQuery: route.query.q ?? "",
|
|
147
150
|
}),
|
|
148
151
|
meta:{
|
|
149
|
-
title: ""
|
|
152
|
+
title: "",
|
|
153
|
+
noScroll:true
|
|
150
154
|
}
|
|
151
155
|
},
|
|
152
156
|
{
|
|
@@ -177,9 +181,13 @@ const routes: Array<RouteRecordRaw> = [
|
|
|
177
181
|
component: ParticipantPage,
|
|
178
182
|
props: (route: RouteLocationNormalized) => ({
|
|
179
183
|
participantId: parseInt(route.params.participantId.toString(), 10),
|
|
184
|
+
pr: route.query.pr ? parseInt(route.query.pr.toString(), 10) : undefined,
|
|
185
|
+
ps: route.query.ps ? parseInt(route.query.ps.toString(), 10) : undefined,
|
|
186
|
+
routeQuery: route.query.q ?? "",
|
|
180
187
|
}),
|
|
181
188
|
meta:{
|
|
182
|
-
title: ""
|
|
189
|
+
title: "",
|
|
190
|
+
noScroll:true
|
|
183
191
|
}
|
|
184
192
|
},
|
|
185
193
|
{
|
|
@@ -266,9 +274,13 @@ const routes: Array<RouteRecordRaw> = [
|
|
|
266
274
|
component: PlaylistPage,
|
|
267
275
|
props: (route: RouteLocationNormalized) => ({
|
|
268
276
|
playlistId: parseInt(route.params.playlistId.toString(), 10),
|
|
277
|
+
pr: route.query.pr ? parseInt(route.query.pr.toString(), 10) : undefined,
|
|
278
|
+
ps: route.query.ps ? parseInt(route.query.ps.toString(), 10) : undefined,
|
|
279
|
+
routeQuery: route.query.q ?? "",
|
|
269
280
|
}),
|
|
270
281
|
meta:{
|
|
271
|
-
title: ""
|
|
282
|
+
title: "",
|
|
283
|
+
noScroll:true
|
|
272
284
|
}
|
|
273
285
|
},
|
|
274
286
|
//Fake route to avoid errors
|
|
@@ -321,7 +333,8 @@ const routes: Array<RouteRecordRaw> = [
|
|
|
321
333
|
const router = createRouter({
|
|
322
334
|
history: createWebHistory(),
|
|
323
335
|
routes: routes,
|
|
324
|
-
scrollBehavior()
|
|
336
|
+
scrollBehavior(to, from) {
|
|
337
|
+
if (to.name === from.name && to.meta.noScroll) return false;
|
|
325
338
|
return { left: 0, top: 0 };
|
|
326
339
|
},
|
|
327
340
|
});
|