@saooti/octopus-sdk 41.0.18 → 41.0.20
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/CHANGELOG.md +29 -1
- package/index.ts +4 -0
- package/package.json +31 -31
- package/src/components/composable/route/types.ts +47 -0
- package/src/components/composable/route/useAdvancedParamInit.ts +29 -4
- package/src/components/composable/route/useRouteUpdateParams.ts +9 -19
- package/src/components/composable/route/useSimplePageParam.ts +6 -4
- package/src/components/display/emission/EmissionList.vue +6 -2
- package/src/components/display/filter/AdvancedSearch.vue +237 -170
- package/src/components/display/list/SwiperList.vue +15 -2
- package/src/components/display/playlist/PodcastList.vue +0 -1
- package/src/components/display/podcasts/PodcastImage.vue +4 -4
- package/src/components/display/podcasts/PodcastItem.vue +1 -4
- package/src/components/display/podcasts/PodcastList.vue +4 -2
- package/src/components/display/podcasts/PodcastModuleBox.vue +24 -6
- package/src/components/display/podcasts/PodcastPlayButton.vue +3 -5
- package/src/components/display/podcasts/TagList.vue +2 -2
- package/src/components/form/ClassicInputText.vue +1 -0
- package/src/components/form/ClassicMultiselect.vue +1 -0
- package/src/components/form/ClassicRadio.vue +29 -6
- package/src/components/form/ClassicTagInput.vue +155 -0
- package/src/components/misc/ClassicPopover.vue +1 -1
- package/src/components/pages/EmissionPage.vue +10 -0
- package/src/components/pages/EmissionsPage.vue +66 -61
- package/src/components/pages/PodcastsPage.vue +71 -66
- package/src/helper/durationHelper.ts +37 -19
- 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 +2 -1
- package/src/locale/it.ts +1 -0
- package/src/locale/sl.ts +1 -0
- package/src/router/router.ts +4 -0
- package/src/stores/AuthStore.ts +4 -0
- package/src/stores/class/general/emission.ts +2 -0
- package/src/stores/class/general/podcast.ts +2 -0
- package/src/style/general.scss +18 -14
|
@@ -93,7 +93,6 @@ import DurationHelper from "../../../helper/durationHelper";
|
|
|
93
93
|
import { state } from "../../../stores/ParamSdkStore";
|
|
94
94
|
import { Podcast } from "@/stores/class/general/podcast";
|
|
95
95
|
import { Conference } from "@/stores/class/conference/conference";
|
|
96
|
-
import { useAuthStore } from "../../../stores/AuthStore";
|
|
97
96
|
import { usePlayerStore } from "../../../stores/PlayerStore";
|
|
98
97
|
import { computed, defineAsyncComponent, ref } from "vue";
|
|
99
98
|
import dayjs from "dayjs";
|
|
@@ -110,8 +109,8 @@ const props = defineProps({
|
|
|
110
109
|
hidePlay: { default: false, type: Boolean },
|
|
111
110
|
fetchConference: { default: undefined, type: Object as () => Conference },
|
|
112
111
|
justButtons: { default: false, type: Boolean },
|
|
113
|
-
/** Indicates that the
|
|
114
|
-
|
|
112
|
+
/** Indicates that the processing status of the episode may be shown */
|
|
113
|
+
showProcessing: { default: false, type: Boolean }
|
|
115
114
|
})
|
|
116
115
|
|
|
117
116
|
|
|
@@ -120,7 +119,6 @@ const hoverType = ref("");
|
|
|
120
119
|
|
|
121
120
|
//Composables
|
|
122
121
|
const { t } = useI18n();
|
|
123
|
-
const authStore = useAuthStore();
|
|
124
122
|
const playerStore = usePlayerStore();
|
|
125
123
|
const router = useRouter();
|
|
126
124
|
|
|
@@ -174,7 +172,7 @@ const classicPodcastPlay = computed(() => {
|
|
|
174
172
|
});
|
|
175
173
|
|
|
176
174
|
const displayBanner = computed(() => {
|
|
177
|
-
return !classicPodcastPlay.value || ("PROCESSING" === props.podcast.processingStatus &&
|
|
175
|
+
return !classicPodcastPlay.value || ("PROCESSING" === props.podcast.processingStatus && props.showProcessing);
|
|
178
176
|
});
|
|
179
177
|
|
|
180
178
|
const iconName = computed(() => {
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
class="d-flex align-items-center border p-1 m-1 text-dark"
|
|
13
13
|
:to="{
|
|
14
14
|
name: 'tag',
|
|
15
|
-
params: { tag
|
|
15
|
+
params: { tag },
|
|
16
16
|
query: organisationQuery
|
|
17
17
|
}"
|
|
18
18
|
>
|
|
@@ -82,7 +82,7 @@ const organisationQuery = computed(() => {
|
|
|
82
82
|
if(filterStore.filterOrgaId){
|
|
83
83
|
return undefined;
|
|
84
84
|
}
|
|
85
|
-
return { o: props.orgaId};
|
|
85
|
+
return { o: props.orgaId };
|
|
86
86
|
});
|
|
87
87
|
/* const ouestFranceMainTag = computed(() => {
|
|
88
88
|
if (props.podcastAnnotations?.["mainOfTag"]) {
|
|
@@ -151,6 +151,7 @@ const props = defineProps({
|
|
|
151
151
|
errorText: { default: "", type: String },
|
|
152
152
|
isTextarea: { default: false, type: Boolean },
|
|
153
153
|
isWysiwyg: { default: false, type: Boolean },
|
|
154
|
+
/** A regex checked against the input, if the input doesn't match mark it with error */
|
|
154
155
|
regex: { default: undefined, type: RegExp },
|
|
155
156
|
canBeNull: { default: false, type: Boolean },
|
|
156
157
|
inputMaxLengthField: { default: undefined, type: Number },
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Simple component to display radio buttons.
|
|
3
|
+
|
|
4
|
+
Available slots:
|
|
5
|
+
`label-{option.value}`: Slot to replace the label of the current option.
|
|
6
|
+
Binding: `option`: the current option
|
|
7
|
+
`after-{option.value}`: Slot after the radio button
|
|
8
|
+
Binding: `option`: the current option
|
|
9
|
+
-->
|
|
1
10
|
<template>
|
|
2
11
|
<div role="radiogroup" class="d-flex" :class="isColumn ? 'flex-column' : ''">
|
|
3
12
|
<div
|
|
@@ -14,23 +23,30 @@
|
|
|
14
23
|
:value="option.value"
|
|
15
24
|
:disabled="isDisabled"
|
|
16
25
|
@input="onChange($event.target.value)"
|
|
17
|
-
|
|
18
|
-
<label class="c-hand" :for="idRadio + option.value">
|
|
19
|
-
option.title
|
|
20
|
-
|
|
26
|
+
>
|
|
27
|
+
<label class="c-hand" :for="idRadio + option.value">
|
|
28
|
+
<slot :name="'label-' + option.value" v-bind="slotBindings(option)">{{ option.title }}</slot>
|
|
29
|
+
</label>
|
|
30
|
+
|
|
31
|
+
<slot :name="'after-' + option.value" v-bind="slotBindings(option)" />
|
|
21
32
|
</div>
|
|
22
33
|
</div>
|
|
23
34
|
</template>
|
|
24
35
|
|
|
25
36
|
<script setup lang="ts">
|
|
26
37
|
|
|
38
|
+
interface Option {
|
|
39
|
+
title: string;
|
|
40
|
+
value: string | undefined
|
|
41
|
+
};
|
|
42
|
+
|
|
27
43
|
//Props
|
|
28
|
-
defineProps({
|
|
44
|
+
const { textInit } = defineProps({
|
|
29
45
|
idRadio: { default: "", type: String },
|
|
30
46
|
isDisabled: { default: false, type: Boolean },
|
|
31
47
|
options: {
|
|
32
48
|
default: () => [],
|
|
33
|
-
type: Array as () => Array<
|
|
49
|
+
type: Array as () => Array<Option>,
|
|
34
50
|
},
|
|
35
51
|
textInit: { default: undefined, type: String },
|
|
36
52
|
isColumn: { default: true, type: Boolean },
|
|
@@ -44,4 +60,11 @@ function onChange(value:string){
|
|
|
44
60
|
emit('update:textInit', value)
|
|
45
61
|
}
|
|
46
62
|
|
|
63
|
+
function slotBindings(option: Option): { option: Option; selected: boolean } {
|
|
64
|
+
return {
|
|
65
|
+
option,
|
|
66
|
+
selected: textInit === option.value
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
47
70
|
</script>
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div
|
|
3
|
+
class="d-flex flex-wrap border align-items-center rounded px-2"
|
|
4
|
+
>
|
|
5
|
+
<div
|
|
6
|
+
v-for="(tag, index) in tags"
|
|
7
|
+
:key="tag"
|
|
8
|
+
class="vs__selected p-0 my-0 mx-1"
|
|
9
|
+
:class="getClass(tag)"
|
|
10
|
+
>
|
|
11
|
+
<!--<button
|
|
12
|
+
v-if="index !== tagToEdit"-->
|
|
13
|
+
<button
|
|
14
|
+
:id="'display-input-tag-' + index"
|
|
15
|
+
class="btn-transparent d-flex align-items"
|
|
16
|
+
@click="startEditTag(index, tag)"
|
|
17
|
+
>
|
|
18
|
+
<!--<img
|
|
19
|
+
v-if="isOuestFranceTag(tag)"
|
|
20
|
+
width="20"
|
|
21
|
+
height="20"
|
|
22
|
+
class="ouest-france-logo"
|
|
23
|
+
title="Ouest France Logo"
|
|
24
|
+
aria-hidden="true"
|
|
25
|
+
alt=""
|
|
26
|
+
src="/img/ouest_france_logo.svg"
|
|
27
|
+
>-->
|
|
28
|
+
<span>{{ tag }}</span>
|
|
29
|
+
</button>
|
|
30
|
+
<!--<input
|
|
31
|
+
v-else
|
|
32
|
+
:id="'form-input-tag-' + index"
|
|
33
|
+
v-model="tagToEditTempValue"
|
|
34
|
+
:title="$t('Edit')"
|
|
35
|
+
@blur="finishEditTag(index)"
|
|
36
|
+
@keydown.enter="finishEditTag(index)"
|
|
37
|
+
>-->
|
|
38
|
+
|
|
39
|
+
<button class="btn-transparent" @click="removeTag(index)">
|
|
40
|
+
<CloseIcon />
|
|
41
|
+
</button>
|
|
42
|
+
</div>
|
|
43
|
+
<input
|
|
44
|
+
v-if="editing"
|
|
45
|
+
:id="'form-input-tag'"
|
|
46
|
+
v-model="tagToEditTempValue"
|
|
47
|
+
:title="$t('Edit')"
|
|
48
|
+
@blur="finishEditTag"
|
|
49
|
+
@keydown.enter="finishEditTag"
|
|
50
|
+
>
|
|
51
|
+
<button
|
|
52
|
+
class="btn btn-add-tag m-1"
|
|
53
|
+
:title="$t('Add a tag')"
|
|
54
|
+
@click="createNewTag"
|
|
55
|
+
/>
|
|
56
|
+
</div>
|
|
57
|
+
</template>
|
|
58
|
+
|
|
59
|
+
<script setup lang="ts">
|
|
60
|
+
import { ref } from 'vue';
|
|
61
|
+
|
|
62
|
+
import CloseIcon from "vue-material-design-icons/Close.vue";
|
|
63
|
+
|
|
64
|
+
const { tags, tagClass } = defineProps<{
|
|
65
|
+
/** Currently selected tags */
|
|
66
|
+
tags: string[];
|
|
67
|
+
/** The class to apply to the tags */
|
|
68
|
+
tagClass?: string|string[]|((tag: string) => string|string[]);
|
|
69
|
+
}>();
|
|
70
|
+
|
|
71
|
+
const emit = defineEmits<{
|
|
72
|
+
/** Update tags */
|
|
73
|
+
(e: 'update:tags', tags: string[]): void
|
|
74
|
+
}>();
|
|
75
|
+
|
|
76
|
+
//const tagToEdit: Ref<number | undefined> = ref(undefined);
|
|
77
|
+
const editing = ref(false);
|
|
78
|
+
const tagToEditTempValue = ref("");
|
|
79
|
+
|
|
80
|
+
function getClass(tag: string): string|string[]|undefined {
|
|
81
|
+
if (typeof tagClass === 'function') {
|
|
82
|
+
return tagClass(tag);
|
|
83
|
+
} else {
|
|
84
|
+
return tagClass;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function removeTag(index: number): void {
|
|
89
|
+
const newTags = [...tags];
|
|
90
|
+
newTags.splice(index, 1);
|
|
91
|
+
console.log(index, newTags);
|
|
92
|
+
emit('update:tags', newTags);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function startEditTag(index: number, tag: string): void {
|
|
96
|
+
//tagToEditTempValue.value = tags[index];
|
|
97
|
+
//tagToEdit.value = index;
|
|
98
|
+
// editing.value = true;
|
|
99
|
+
/*nextTick(() => {
|
|
100
|
+
document.getElementById("form-input-tag-" + index)?.focus();
|
|
101
|
+
});*/
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function finishEditTag(/*index: number*/): void {
|
|
105
|
+
/*if (index !== tagToEdit.value) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
tagToEdit.value = undefined;
|
|
109
|
+
|
|
110
|
+
if (tagToEditTempValue.value.length) {
|
|
111
|
+
const newTags = [...tags];
|
|
112
|
+
newTags.splice(
|
|
113
|
+
index,
|
|
114
|
+
1,
|
|
115
|
+
...tagToEditTempValue.value.split(","),
|
|
116
|
+
);
|
|
117
|
+
emit('update:tags', newTags);
|
|
118
|
+
} else {
|
|
119
|
+
const newTags = [...tags];
|
|
120
|
+
newTags.splice(index, 1);
|
|
121
|
+
emit('update:tags', newTags);
|
|
122
|
+
}*/
|
|
123
|
+
|
|
124
|
+
if (tagToEditTempValue.value === '') {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const newTags = [...tags, tagToEditTempValue.value];
|
|
129
|
+
tagToEditTempValue.value = '';
|
|
130
|
+
editing.value = false;
|
|
131
|
+
emit('update:tags', newTags);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
function createNewTag(): void {
|
|
135
|
+
/*const newTags = [...tags, ''];
|
|
136
|
+
emit('update:tags', newTags);
|
|
137
|
+
startEditTag(tags.length - 1, '');*/
|
|
138
|
+
editing.value = true;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
</script>
|
|
142
|
+
|
|
143
|
+
<style scoped lang="scss">
|
|
144
|
+
.btn-add-tag {
|
|
145
|
+
padding: 4px;
|
|
146
|
+
line-height: 1;
|
|
147
|
+
|
|
148
|
+
&::after {
|
|
149
|
+
content: "+";
|
|
150
|
+
color: var(--octopus-primary);
|
|
151
|
+
font-size: 14px;
|
|
152
|
+
font-weight: bold;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
</style>
|
|
@@ -57,6 +57,15 @@
|
|
|
57
57
|
{{ t("Listen to the latest episode") }}
|
|
58
58
|
</div>
|
|
59
59
|
</div>
|
|
60
|
+
|
|
61
|
+
<!-- Tag list -->
|
|
62
|
+
<TagList
|
|
63
|
+
v-if="undefined !== emission.tags && 0 !== emission.tags.length"
|
|
64
|
+
:tag-list="emission.tags"
|
|
65
|
+
:orga-id="authOrgaId"
|
|
66
|
+
:emission-annotations="emission.annotations"
|
|
67
|
+
/>
|
|
68
|
+
|
|
60
69
|
<SubscribeButtons
|
|
61
70
|
v-if="isPodcastmaker"
|
|
62
71
|
class="mt-4"
|
|
@@ -160,6 +169,7 @@ const PodcastPlayButton = defineAsyncComponent(
|
|
|
160
169
|
const PodcastmakerHeader = defineAsyncComponent(
|
|
161
170
|
() => import("../display/podcastmaker/PodcastmakerHeader.vue"),
|
|
162
171
|
);
|
|
172
|
+
const TagList = defineAsyncComponent(() => import("../display/podcasts/TagList.vue"));
|
|
163
173
|
|
|
164
174
|
|
|
165
175
|
//Props
|
|
@@ -1,40 +1,42 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
2
|
+
<section v-if="isInit" class="page-box">
|
|
3
|
+
<slot name="new-emission" />
|
|
4
|
+
<ProductorSearch
|
|
5
|
+
v-model:organisation-id="organisationId"
|
|
6
|
+
v-model:search-pattern="searchPattern"
|
|
7
|
+
type="emission"
|
|
8
|
+
/>
|
|
9
|
+
<AdvancedSearch
|
|
10
|
+
v-model:monetisable="monetisable"
|
|
11
|
+
v-model:iab-id="iabId"
|
|
12
|
+
v-model:sort="sort"
|
|
13
|
+
v-model:include-hidden="includeHidden"
|
|
14
|
+
v-model:from-date="fromDate"
|
|
15
|
+
v-model:to-date="toDate"
|
|
16
|
+
v-model:rubrique-filter="rubriqueFilter"
|
|
17
|
+
v-model:beneficiaries="beneficiaries"
|
|
18
|
+
:search-pattern="searchPattern"
|
|
19
|
+
:is-emission="true"
|
|
20
|
+
:organisation-id="organisationId"
|
|
21
|
+
/>
|
|
22
|
+
<EmissionList
|
|
23
|
+
:show-count="true"
|
|
24
|
+
:first="paginateFirst"
|
|
25
|
+
:size="ps"
|
|
26
|
+
:query="searchMinSize"
|
|
27
|
+
:organisation-id="organisationId"
|
|
28
|
+
:monetisable="monetisable"
|
|
29
|
+
:before="toDate"
|
|
30
|
+
:after="fromDate"
|
|
31
|
+
:sort="sort"
|
|
32
|
+
:include-hidden="includeHidden"
|
|
33
|
+
:iab-id="iabId"
|
|
34
|
+
:rubrique-id="rubriquesFilterArrayIds.rubriqueId"
|
|
35
|
+
:rubriquage-id="rubriquesFilterArrayIds.rubriquageId"
|
|
36
|
+
:no-rubriquage-id="rubriquesFilterArrayIds.noRubriquageId"
|
|
37
|
+
:beneficiaries="beneficiaries"
|
|
38
|
+
/>
|
|
39
|
+
</section>
|
|
38
40
|
</template>
|
|
39
41
|
|
|
40
42
|
<script setup lang="ts">
|
|
@@ -43,38 +45,41 @@ import AdvancedSearch from "../display/filter/AdvancedSearch.vue";
|
|
|
43
45
|
import {useAdvancedParamInit} from "../composable/route/useAdvancedParamInit";
|
|
44
46
|
import { defineAsyncComponent } from "vue";
|
|
45
47
|
const ProductorSearch = defineAsyncComponent(
|
|
46
|
-
|
|
48
|
+
() => import("../display/filter/ProductorSearch.vue"),
|
|
47
49
|
);
|
|
48
50
|
|
|
49
51
|
//Props
|
|
50
52
|
const props = defineProps({
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
53
|
+
pr: { default: 0, type: Number },
|
|
54
|
+
ps: { default: 30, type: Number },
|
|
55
|
+
routeQuery: { default: "", type: String },
|
|
56
|
+
routeMonetisable: { default: "UNDEFINED", type: String },
|
|
57
|
+
routeIab: { default: undefined, type: Number },
|
|
58
|
+
routeSort: { default: "LAST_PODCAST_DESC", type: String },
|
|
59
|
+
routeIncludeHidden: { default: "", type: String },
|
|
60
|
+
routeFrom: { default: undefined, type: String },
|
|
61
|
+
routeTo: { default: undefined, type: String },
|
|
62
|
+
routeOrga: { default: undefined, type: String },
|
|
63
|
+
routeRubriques: { default: "", type: String },
|
|
64
|
+
/** The filter on beneficiaries defined on the route props */
|
|
65
|
+
routeBeneficiaries: { default: null, type: Array as () => Array<string> }
|
|
62
66
|
});
|
|
63
67
|
|
|
64
68
|
//Composables
|
|
65
69
|
const {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
70
|
+
organisationId,
|
|
71
|
+
searchPattern,
|
|
72
|
+
monetisable,
|
|
73
|
+
iabId,
|
|
74
|
+
sort,
|
|
75
|
+
includeHidden,
|
|
76
|
+
fromDate,
|
|
77
|
+
toDate,
|
|
78
|
+
rubriqueFilter,
|
|
79
|
+
searchMinSize,
|
|
80
|
+
paginateFirst,
|
|
81
|
+
rubriquesFilterArrayIds,
|
|
82
|
+
isInit,
|
|
83
|
+
beneficiaries
|
|
79
84
|
} = useAdvancedParamInit(props, true);
|
|
80
85
|
</script>
|
|
@@ -1,42 +1,44 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
2
|
+
<section v-if="isInit" class="page-box">
|
|
3
|
+
<ProductorSearch
|
|
4
|
+
v-model:organisation-id="organisationId"
|
|
5
|
+
v-model:search-pattern="searchPattern"
|
|
6
|
+
/>
|
|
7
|
+
<AdvancedSearch
|
|
8
|
+
v-model:only-video="onlyVideo"
|
|
9
|
+
v-model:monetisable="monetisable"
|
|
10
|
+
v-model:iab-id="iabId"
|
|
11
|
+
v-model:sort="sort"
|
|
12
|
+
v-model:include-hidden="includeHidden"
|
|
13
|
+
v-model:from-date="fromDate"
|
|
14
|
+
v-model:to-date="toDate"
|
|
15
|
+
v-model:validity="validity"
|
|
16
|
+
v-model:rubrique-filter="rubriqueFilter"
|
|
17
|
+
v-model:beneficiaries="beneficiaries"
|
|
18
|
+
:search-pattern="searchPattern"
|
|
19
|
+
:is-emission="false"
|
|
20
|
+
:organisation-id="organisationId"
|
|
21
|
+
/>
|
|
22
|
+
<PodcastList
|
|
23
|
+
:show-count="true"
|
|
24
|
+
:first="paginateFirst"
|
|
25
|
+
:size="ps"
|
|
26
|
+
:organisation-id="orgaArray"
|
|
27
|
+
:query="searchMinSize"
|
|
28
|
+
:monetisable="monetisable"
|
|
29
|
+
:before="toDate"
|
|
30
|
+
:after="fromDate"
|
|
31
|
+
:sort-criteria="sort"
|
|
32
|
+
:include-hidden="includeHidden"
|
|
33
|
+
:iab-id="iabId"
|
|
34
|
+
:rubrique-id="rubriquesFilterArrayIds.rubriqueId"
|
|
35
|
+
:rubriquage-id="rubriquesFilterArrayIds.rubriquageId"
|
|
36
|
+
:no-rubriquage-id="rubriquesFilterArrayIds.noRubriquageId"
|
|
37
|
+
:beneficiaries="beneficiaries"
|
|
38
|
+
:with-video="withVideo"
|
|
39
|
+
:validity="validity"
|
|
40
|
+
/>
|
|
41
|
+
</section>
|
|
40
42
|
</template>
|
|
41
43
|
|
|
42
44
|
<script setup lang="ts">
|
|
@@ -48,19 +50,21 @@ import { computed, ref, watch } from "vue";
|
|
|
48
50
|
|
|
49
51
|
//Props
|
|
50
52
|
const props = defineProps({
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
53
|
+
pr: { default: 0, type: Number },
|
|
54
|
+
ps: { default: 30, type: Number },
|
|
55
|
+
routeQuery: { default: "", type: String },
|
|
56
|
+
routeMonetisable: { default: "UNDEFINED", type: String },
|
|
57
|
+
routeIab: { default: undefined, type: Number },
|
|
58
|
+
routeSort: { default: "DATE", type: String },
|
|
59
|
+
routeIncludeHidden: { default: "", type: String },
|
|
60
|
+
routeFrom: { default: undefined, type: String },
|
|
61
|
+
routeTo: { default: undefined, type: String },
|
|
62
|
+
routeValidity: { default: "", type: String },
|
|
63
|
+
routeOnlyVideo: { default: "", type: String },
|
|
64
|
+
routeOrga: { default: undefined, type: String },
|
|
65
|
+
routeRubriques: { default: "", type: String },
|
|
66
|
+
/** The filter on beneficiaries defined on the route props */
|
|
67
|
+
routeBeneficiaries: { default: null, type: Array as () => Array<string> }
|
|
64
68
|
});
|
|
65
69
|
|
|
66
70
|
|
|
@@ -70,20 +74,21 @@ const onlyVideo = ref(false);
|
|
|
70
74
|
|
|
71
75
|
//Composables
|
|
72
76
|
const {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
77
|
+
organisationId,
|
|
78
|
+
searchPattern,
|
|
79
|
+
monetisable,
|
|
80
|
+
iabId,
|
|
81
|
+
sort,
|
|
82
|
+
includeHidden,
|
|
83
|
+
fromDate,
|
|
84
|
+
toDate,
|
|
85
|
+
rubriqueFilter,
|
|
86
|
+
searchMinSize,
|
|
87
|
+
paginateFirst,
|
|
88
|
+
validity,
|
|
89
|
+
rubriquesFilterArrayIds,
|
|
90
|
+
isInit,
|
|
91
|
+
beneficiaries
|
|
87
92
|
} = useAdvancedParamInit(props, false);
|
|
88
93
|
|
|
89
94
|
//Computed
|
|
@@ -93,7 +98,7 @@ const withVideo = computed(() => false === onlyVideo.value ? undefined : true);
|
|
|
93
98
|
|
|
94
99
|
//Watch
|
|
95
100
|
watch(() => props.routeOnlyVideo, () =>{
|
|
96
|
-
|
|
101
|
+
onlyVideo.value = "true" === props.routeOnlyVideo;
|
|
97
102
|
}, {immediate: true});
|
|
98
103
|
|
|
99
104
|
</script>
|