@saooti/octopus-sdk 39.2.14 → 39.2.16
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/package.json +1 -1
- package/src/App.vue +1 -57
- package/src/assets/general.scss +3 -0
- package/src/components/display/categories/CategoryFilter.vue +85 -32
- package/src/components/display/categories/CategoryList.vue +6 -5
- package/src/components/display/emission/EmissionList.vue +3 -3
- package/src/components/display/filter/AdvancedSearch.vue +113 -56
- package/src/components/display/filter/CategorySearchFilter.vue +26 -65
- package/src/components/display/filter/DateFilter.vue +65 -70
- package/src/components/display/filter/MonetizableFilter.vue +11 -10
- package/src/components/display/filter/ProductorSearch.vue +7 -5
- package/src/components/display/filter/RubriqueChoice.vue +4 -1
- package/src/components/display/filter/RubriqueFilter.vue +92 -178
- package/src/components/display/filter/SearchOrder.vue +14 -18
- package/src/components/display/list/ListPaginate.vue +2 -2
- package/src/components/display/organisation/OrganisationChooser.vue +8 -1
- package/src/components/display/podcasts/PodcastInlineListTemplate.vue +8 -31
- package/src/components/display/podcasts/PodcastList.vue +3 -3
- package/src/components/display/podcasts/PodcastRawTranscript.vue +1 -0
- package/src/components/display/rubriques/RubriqueList.vue +7 -16
- package/src/components/misc/ClassicPopover.vue +0 -1
- package/src/components/misc/FooterSection.vue +3 -18
- package/src/components/misc/MobileMenu.vue +3 -19
- package/src/components/misc/TopBarMainContent.vue +3 -15
- package/src/components/mixins/organisationFilter.ts +2 -2
- package/src/components/mixins/routeParam/advancedParamInit.ts +186 -0
- package/src/components/mixins/routeParam/routeParams.ts +33 -0
- package/src/components/mixins/routeParam/rubriquesFilterComputed.ts +22 -0
- package/src/components/mixins/routeParam/rubriquesFilterParam.ts +29 -0
- package/src/components/pages/EmissionsPage.vue +26 -110
- package/src/components/pages/HomePage.vue +6 -19
- package/src/components/pages/PageNotFound.vue +3 -13
- package/src/components/pages/ParticipantsPage.vue +1 -1
- package/src/components/pages/PlaylistsPage.vue +1 -1
- package/src/components/pages/PodcastsPage.vue +37 -100
- package/src/router/router.ts +46 -4
- package/src/components/mixins/paginate/paginateParams.ts +0 -18
- /package/src/components/mixins/{paginate → routeParam}/paginateParamInit.ts +0 -0
package/package.json
CHANGED
package/src/App.vue
CHANGED
|
@@ -16,16 +16,12 @@
|
|
|
16
16
|
import TopBar from "@/components/misc/TopBar.vue";
|
|
17
17
|
import PlayerComponent from "@/components/misc/player/PlayerComponent.vue";
|
|
18
18
|
import ClassicLazy from "@/components/misc/ClassicLazy.vue";
|
|
19
|
-
import { Rubriquage } from "./stores/class/rubrique/rubriquage";
|
|
20
|
-
import { RubriquageFilter } from "./stores/class/rubrique/rubriquageFilter";
|
|
21
|
-
import { Rubrique } from "./stores/class/rubrique/rubrique";
|
|
22
19
|
import initSDK from "./components/mixins/init";
|
|
23
20
|
import { useAuthStore } from "./stores/AuthStore";
|
|
24
21
|
import { useFilterStore } from "./stores/FilterStore";
|
|
25
22
|
import { useGeneralStore } from "./stores/GeneralStore";
|
|
26
23
|
import { mapState, mapActions } from "pinia";
|
|
27
24
|
import { defineAsyncComponent, defineComponent } from "vue";
|
|
28
|
-
import { Category } from "./stores/class/general/category";
|
|
29
25
|
const FooterOctopus = defineAsyncComponent(
|
|
30
26
|
() => import("@/components/misc/FooterSection.vue"),
|
|
31
27
|
);
|
|
@@ -92,12 +88,10 @@ export default defineComponent({
|
|
|
92
88
|
}, 2000);
|
|
93
89
|
},
|
|
94
90
|
methods: {
|
|
95
|
-
...mapActions(useFilterStore, ["
|
|
91
|
+
...mapActions(useFilterStore, ["filterUpdateRubrique"]),
|
|
96
92
|
async initApp() {
|
|
97
93
|
await this.initSdk();
|
|
98
94
|
await this.handleOrganisationFilter();
|
|
99
|
-
this.handleIabIdFilter();
|
|
100
|
-
this.handleRubriquesFilter();
|
|
101
95
|
},
|
|
102
96
|
async handleOrganisationFilter() {
|
|
103
97
|
let orgaId = "";
|
|
@@ -114,56 +108,6 @@ export default defineComponent({
|
|
|
114
108
|
}
|
|
115
109
|
await this.selectOrganisation(orgaId);
|
|
116
110
|
},
|
|
117
|
-
handleIabIdFilter() {
|
|
118
|
-
if (this.filterOrgaId) {
|
|
119
|
-
return;
|
|
120
|
-
}
|
|
121
|
-
if (
|
|
122
|
-
this.$route.query.iabId &&
|
|
123
|
-
"string" === typeof this.$route.query.iabId
|
|
124
|
-
) {
|
|
125
|
-
const iabId = parseInt(this.$route.query.iabId, 10);
|
|
126
|
-
const category = this.storedCategories.filter((c: Category) => {
|
|
127
|
-
return c.id === iabId;
|
|
128
|
-
});
|
|
129
|
-
if (category.length) {
|
|
130
|
-
this.filterUpdateIab(category[0]);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
},
|
|
134
|
-
handleRubriquesFilter() {
|
|
135
|
-
if (0 === this.filterRubriquage.length) {
|
|
136
|
-
return;
|
|
137
|
-
}
|
|
138
|
-
if (
|
|
139
|
-
this.$route.query.rubriquesId &&
|
|
140
|
-
"string" === typeof this.$route.query.rubriquesId
|
|
141
|
-
) {
|
|
142
|
-
const arrayFilter = this.$route.query.rubriquesId.split(",");
|
|
143
|
-
const rubriquesFilter: Array<RubriquageFilter> = [];
|
|
144
|
-
const filterLength = arrayFilter.length;
|
|
145
|
-
for (let index = 0; index < filterLength; index++) {
|
|
146
|
-
const rubriqueFilter = arrayFilter[index].split(":");
|
|
147
|
-
const rubriquage = this.filterRubriquage.find((x: Rubriquage) => {
|
|
148
|
-
return x.rubriquageId === parseInt(rubriqueFilter[0]);
|
|
149
|
-
});
|
|
150
|
-
if (rubriquage) {
|
|
151
|
-
const rubrique = rubriquage.rubriques.find((x: Rubrique) => {
|
|
152
|
-
return x.rubriqueId === parseInt(rubriqueFilter[1]);
|
|
153
|
-
});
|
|
154
|
-
rubriquesFilter.push({
|
|
155
|
-
rubriquageId: rubriquage.rubriquageId,
|
|
156
|
-
rubriqueId: rubrique.rubriqueId,
|
|
157
|
-
nameRubriquage: rubriquage.title,
|
|
158
|
-
nameRubrique: rubrique.name,
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
if (rubriquesFilter.length) {
|
|
163
|
-
this.filterUpdateRubrique(rubriquesFilter);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
},
|
|
167
111
|
},
|
|
168
112
|
});
|
|
169
113
|
</script>
|
package/src/assets/general.scss
CHANGED
|
@@ -7,7 +7,10 @@
|
|
|
7
7
|
<h1 v-if="isHeaderDisplay" v-show="titleDisplay">
|
|
8
8
|
{{ titleDisplay ?? $t("Home") }}
|
|
9
9
|
</h1>
|
|
10
|
-
<div
|
|
10
|
+
<div
|
|
11
|
+
v-show="isDisplay"
|
|
12
|
+
class="d-flex-low-importance flex-column justify-content-end"
|
|
13
|
+
>
|
|
11
14
|
<ol
|
|
12
15
|
v-if="filterIab || filterRubrique.length"
|
|
13
16
|
class="octopus-breadcrumb d-flex align-items-center justify-content-center flex-wrap"
|
|
@@ -35,7 +38,7 @@
|
|
|
35
38
|
</div>
|
|
36
39
|
<div class="mx-1">:</div>
|
|
37
40
|
<RubriqueChooser
|
|
38
|
-
v-if="
|
|
41
|
+
v-if="getRubriquesLength(filter.rubriquageId)"
|
|
39
42
|
class="ms-2 multiselect-transparent multiselect-white"
|
|
40
43
|
:multiple="false"
|
|
41
44
|
:rubriquage-id="filter.rubriquageId"
|
|
@@ -64,12 +67,16 @@
|
|
|
64
67
|
</template>
|
|
65
68
|
|
|
66
69
|
<script lang="ts">
|
|
70
|
+
import { rubriquesFilterParam } from "../../mixins/routeParam/rubriquesFilterParam";
|
|
71
|
+
import { routeParams } from "../../mixins/routeParam/routeParams";
|
|
67
72
|
import { Rubriquage } from "@/stores/class/rubrique/rubriquage";
|
|
68
73
|
import { RubriquageFilter } from "@/stores/class/rubrique/rubriquageFilter";
|
|
69
74
|
import { Rubrique } from "@/stores/class/rubrique/rubrique";
|
|
70
75
|
import { useFilterStore } from "../../../stores/FilterStore";
|
|
76
|
+
import { useGeneralStore } from "../../../stores/GeneralStore";
|
|
71
77
|
import { mapState, mapActions } from "pinia";
|
|
72
78
|
import { defineComponent, defineAsyncComponent } from "vue";
|
|
79
|
+
import { Category } from "@/stores/class/general/category";
|
|
73
80
|
const CategoryList = defineAsyncComponent(() => import("./CategoryList.vue"));
|
|
74
81
|
const RubriqueList = defineAsyncComponent(
|
|
75
82
|
() => import("./../rubriques/RubriqueList.vue"),
|
|
@@ -79,18 +86,19 @@ const RubriqueChooser = defineAsyncComponent(
|
|
|
79
86
|
);
|
|
80
87
|
export default defineComponent({
|
|
81
88
|
name: "CategoryFilter",
|
|
82
|
-
|
|
83
89
|
components: {
|
|
84
90
|
CategoryList,
|
|
85
91
|
RubriqueList,
|
|
86
92
|
RubriqueChooser,
|
|
87
93
|
},
|
|
94
|
+
mixins: [routeParams, rubriquesFilterParam],
|
|
88
95
|
data() {
|
|
89
96
|
return {
|
|
90
97
|
isCategories: false as boolean,
|
|
91
98
|
};
|
|
92
99
|
},
|
|
93
100
|
computed: {
|
|
101
|
+
...mapState(useGeneralStore, ["storedCategories"]),
|
|
94
102
|
...mapState(useFilterStore, [
|
|
95
103
|
"filterIab",
|
|
96
104
|
"filterRubrique",
|
|
@@ -153,6 +161,66 @@ export default defineComponent({
|
|
|
153
161
|
}
|
|
154
162
|
return `background-image: url('/img/header-${imgName}.webp');`;
|
|
155
163
|
},
|
|
164
|
+
routeFilterIab() {
|
|
165
|
+
return this.$route.query.iabId;
|
|
166
|
+
},
|
|
167
|
+
routeRubriques() {
|
|
168
|
+
return this.$route.query.rubriquesId;
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
watch: {
|
|
172
|
+
routeFilterIab: {
|
|
173
|
+
deep: true,
|
|
174
|
+
immediate: true,
|
|
175
|
+
async handler() {
|
|
176
|
+
if (this.routeFilterIab && "string" === typeof this.routeFilterIab) {
|
|
177
|
+
const iabId = parseInt(this.routeFilterIab, 10);
|
|
178
|
+
const category = this.storedCategories.filter((c: Category) => {
|
|
179
|
+
return c.id === iabId;
|
|
180
|
+
});
|
|
181
|
+
if (category.length) {
|
|
182
|
+
this.filterUpdateIab(category[0]);
|
|
183
|
+
}
|
|
184
|
+
} else {
|
|
185
|
+
this.filterUpdateIab();
|
|
186
|
+
}
|
|
187
|
+
},
|
|
188
|
+
},
|
|
189
|
+
routeRubriques: {
|
|
190
|
+
deep: true,
|
|
191
|
+
immediate: true,
|
|
192
|
+
async handler() {
|
|
193
|
+
if (0 === this.filterRubriquage.length) {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
const rubriquesFilter: Array<RubriquageFilter> = [];
|
|
197
|
+
if (
|
|
198
|
+
this.$route.query.rubriquesId &&
|
|
199
|
+
"string" === typeof this.$route.query.rubriquesId
|
|
200
|
+
) {
|
|
201
|
+
const arrayFilter = this.$route.query.rubriquesId.split(",");
|
|
202
|
+
const filterLength = arrayFilter.length;
|
|
203
|
+
for (let index = 0; index < filterLength; index++) {
|
|
204
|
+
const rubriqueFilter = arrayFilter[index].split(":");
|
|
205
|
+
const rubriquage = this.filterRubriquage.find((x: Rubriquage) => {
|
|
206
|
+
return x.rubriquageId === parseInt(rubriqueFilter[0]);
|
|
207
|
+
});
|
|
208
|
+
if (rubriquage) {
|
|
209
|
+
const rubrique = rubriquage.rubriques.find((x: Rubrique) => {
|
|
210
|
+
return x.rubriqueId === parseInt(rubriqueFilter[1]);
|
|
211
|
+
});
|
|
212
|
+
rubriquesFilter.push({
|
|
213
|
+
rubriquageId: rubriquage.rubriquageId,
|
|
214
|
+
rubriqueId: rubrique.rubriqueId,
|
|
215
|
+
nameRubriquage: rubriquage.title,
|
|
216
|
+
nameRubrique: rubrique.name,
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
this.filterUpdateRubrique(rubriquesFilter);
|
|
222
|
+
},
|
|
223
|
+
},
|
|
156
224
|
},
|
|
157
225
|
methods: {
|
|
158
226
|
...mapActions(useFilterStore, ["filterUpdateIab", "filterUpdateRubrique"]),
|
|
@@ -166,14 +234,9 @@ export default defineComponent({
|
|
|
166
234
|
) {
|
|
167
235
|
return;
|
|
168
236
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
const queryString = filter
|
|
173
|
-
.map((value) => value.rubriquageId + ":" + value.rubriqueId)
|
|
174
|
-
.join();
|
|
175
|
-
this.$router.replace({
|
|
176
|
-
query: { ...this.$route.query, ...{ rubriquesId: queryString } },
|
|
237
|
+
this.modifyRubriquesFilter((a) => {
|
|
238
|
+
a[index].rubriqueId = rubrique.rubriqueId ?? 0;
|
|
239
|
+
return a;
|
|
177
240
|
});
|
|
178
241
|
},
|
|
179
242
|
getRubriques(rubriquageId: number): Array<Rubrique> {
|
|
@@ -182,32 +245,22 @@ export default defineComponent({
|
|
|
182
245
|
});
|
|
183
246
|
return rubriquage ? rubriquage.rubriques : [];
|
|
184
247
|
},
|
|
248
|
+
getRubriquesLength(rubriquageId: number): number {
|
|
249
|
+
const rubriquage = this.filterRubriquage.find((x: Rubriquage) => {
|
|
250
|
+
return x.rubriquageId === rubriquageId;
|
|
251
|
+
});
|
|
252
|
+
return rubriquage ? rubriquage.rubriques.length : 0;
|
|
253
|
+
},
|
|
185
254
|
removeFilter(index: number, event?: { preventDefault: () => void }): void {
|
|
186
255
|
if (this.filterIab) {
|
|
187
256
|
if (this.$route.query.iabId) {
|
|
188
|
-
this
|
|
189
|
-
query: { ...this.$route.query, ...{ iabId: undefined } },
|
|
190
|
-
});
|
|
257
|
+
this.updateFiltersParam({ iabId: undefined }, { i: undefined });
|
|
191
258
|
}
|
|
192
|
-
this.filterUpdateIab();
|
|
193
259
|
} else {
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
if (this.$route.query.rubriquesId) {
|
|
199
|
-
const queryString = newFilter
|
|
200
|
-
.map((value) => value.rubriquageId + ":" + value.rubriqueId)
|
|
201
|
-
.join();
|
|
202
|
-
this.$router.replace({
|
|
203
|
-
query: {
|
|
204
|
-
...this.$route.query,
|
|
205
|
-
...{ rubriquesId: "" !== queryString ? queryString : undefined },
|
|
206
|
-
},
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
this.filterUpdateRubrique(newFilter);
|
|
260
|
+
this.modifyRubriquesFilter((a) => {
|
|
261
|
+
a.splice(index + 1);
|
|
262
|
+
return a;
|
|
263
|
+
});
|
|
211
264
|
}
|
|
212
265
|
if (event) {
|
|
213
266
|
event.preventDefault();
|
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
</template>
|
|
40
40
|
|
|
41
41
|
<script lang="ts">
|
|
42
|
+
import { routeParams } from "../../mixins/routeParam/routeParams";
|
|
42
43
|
import classicApi from "../../../api/classicApi";
|
|
43
44
|
import { state } from "../../../stores/ParamSdkStore";
|
|
44
45
|
import ClassicPopover from "../../misc/ClassicPopover.vue";
|
|
@@ -52,6 +53,7 @@ export default defineComponent({
|
|
|
52
53
|
components: {
|
|
53
54
|
ClassicPopover,
|
|
54
55
|
},
|
|
56
|
+
mixins: [routeParams],
|
|
55
57
|
|
|
56
58
|
props: {
|
|
57
59
|
isFilter: { default: false, type: Boolean },
|
|
@@ -121,7 +123,6 @@ export default defineComponent({
|
|
|
121
123
|
},
|
|
122
124
|
|
|
123
125
|
methods: {
|
|
124
|
-
...mapActions(useFilterStore, ["filterUpdateIab"]),
|
|
125
126
|
...mapActions(useGeneralStore, ["storedUpdateCategoriesOrga"]),
|
|
126
127
|
checkIfFilter(category: Category): void {
|
|
127
128
|
if (!this.isFilter) {
|
|
@@ -137,11 +138,11 @@ export default defineComponent({
|
|
|
137
138
|
("string" === typeof queries.iabId &&
|
|
138
139
|
parseInt(queries.iabId, 10) !== category.id)
|
|
139
140
|
) {
|
|
140
|
-
this
|
|
141
|
-
|
|
142
|
-
|
|
141
|
+
this.updateFiltersParam(
|
|
142
|
+
{ iabId: category.id.toString() },
|
|
143
|
+
{ i: category.id.toString() },
|
|
144
|
+
);
|
|
143
145
|
}
|
|
144
|
-
this.filterUpdateIab(category);
|
|
145
146
|
},
|
|
146
147
|
resizeWindow(): void {
|
|
147
148
|
const categoryList = this.$refs.categoryListContainer as HTMLElement;
|
|
@@ -92,7 +92,7 @@ export default defineComponent({
|
|
|
92
92
|
query: { default: undefined, type: String },
|
|
93
93
|
iabId: { default: undefined, type: Number },
|
|
94
94
|
organisationId: { default: undefined, type: String },
|
|
95
|
-
|
|
95
|
+
monetisable: { default: "UNDEFINED", type: String },
|
|
96
96
|
before: { default: undefined, type: String },
|
|
97
97
|
after: { default: undefined, type: String },
|
|
98
98
|
sort: { default: "DATE", type: String },
|
|
@@ -138,7 +138,7 @@ export default defineComponent({
|
|
|
138
138
|
return `${this.first}|${this.size}`;
|
|
139
139
|
},
|
|
140
140
|
changed(): string {
|
|
141
|
-
return `${this.organisationId}|${this.query}|${this.
|
|
141
|
+
return `${this.organisationId}|${this.query}|${this.monetisable}|${this.includeHidden}
|
|
142
142
|
${this.iabId}|${this.rubriqueId}|${this.rubriquageId}|${this.before}|${this.after}|${this.sort}|${this.noRubriquageId}`;
|
|
143
143
|
},
|
|
144
144
|
sortText(): string {
|
|
@@ -203,7 +203,7 @@ export default defineComponent({
|
|
|
203
203
|
size: this.dsize,
|
|
204
204
|
query: this.query,
|
|
205
205
|
organisationId: this.organisation,
|
|
206
|
-
monetisable: this.
|
|
206
|
+
monetisable: this.monetisable,
|
|
207
207
|
iabId: this.iabId,
|
|
208
208
|
before: this.before,
|
|
209
209
|
after: this.after,
|
|
@@ -22,37 +22,40 @@
|
|
|
22
22
|
<MonetizableFilter
|
|
23
23
|
v-if="!isPodcastmaker && !isEducation"
|
|
24
24
|
:is-emission="isEmission"
|
|
25
|
-
|
|
25
|
+
:monetisable="monetisable"
|
|
26
|
+
@update:monetisable="updateMonetisable"
|
|
26
27
|
/>
|
|
27
|
-
<CategorySearchFilter @update-
|
|
28
|
+
<CategorySearchFilter :iab-id="iabId" @update:iab-id="updateIab" />
|
|
28
29
|
<RubriqueFilter
|
|
29
|
-
:
|
|
30
|
-
:
|
|
31
|
-
@update-rubriquage-filter="updateRubriquageFilter"
|
|
30
|
+
:rubrique-filter="rubriqueFilter"
|
|
31
|
+
@update:rubrique-filter="updateRubriquageFilter"
|
|
32
32
|
/>
|
|
33
33
|
<DateFilter
|
|
34
34
|
:is-emission="isEmission"
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
:from-date="fromDate"
|
|
36
|
+
:to-date="toDate"
|
|
37
|
+
@update-dates="updateDates($event)"
|
|
37
38
|
/>
|
|
38
39
|
<div
|
|
39
40
|
v-if="organisation && organisationRight && !isPodcastmaker"
|
|
40
41
|
class="d-flex flex-column mt-3"
|
|
41
42
|
>
|
|
42
43
|
<ClassicCheckbox
|
|
43
|
-
|
|
44
|
+
:text-init="includeHidden"
|
|
44
45
|
class="flex-shrink-0"
|
|
45
46
|
id-checkbox="search-future-checkbox"
|
|
46
47
|
:label="textNotVisible"
|
|
47
|
-
:is-disabled="isCheckboxNotValidate &&
|
|
48
|
+
:is-disabled="isCheckboxNotValidate && notValid"
|
|
49
|
+
@update:text-init="updateIncludeHidden"
|
|
48
50
|
/>
|
|
49
51
|
</div>
|
|
50
52
|
<div v-if="isCheckboxNotValidate" class="d-flex flex-column mt-3">
|
|
51
53
|
<ClassicCheckbox
|
|
52
|
-
|
|
54
|
+
:text-init="notValid"
|
|
53
55
|
class="flex-shrink-0"
|
|
54
56
|
id-checkbox="search-not-validate-checkbox"
|
|
55
57
|
:label="textNotValidate"
|
|
58
|
+
@update:text-init="updateNotValid"
|
|
56
59
|
/>
|
|
57
60
|
</div>
|
|
58
61
|
<ClassicCheckbox
|
|
@@ -61,19 +64,14 @@
|
|
|
61
64
|
class="flex-shrink-0 mt-3"
|
|
62
65
|
id-checkbox="only-video-checkbox"
|
|
63
66
|
:label="$t('Show only episodes with video')"
|
|
64
|
-
@update:text-init="
|
|
65
|
-
/>
|
|
66
|
-
</div>
|
|
67
|
-
<div class="d-flex flex-column">
|
|
68
|
-
<div class="text-primary mb-2">
|
|
69
|
-
{{ $t("Sort") }}
|
|
70
|
-
</div>
|
|
71
|
-
<SearchOrder
|
|
72
|
-
:is-emission="isEmission"
|
|
73
|
-
:sort-criteria="sortCriteria"
|
|
74
|
-
@update-sort-criteria="updateSortCriteria"
|
|
67
|
+
@update:text-init="updateOnlyVideo"
|
|
75
68
|
/>
|
|
76
69
|
</div>
|
|
70
|
+
<SearchOrder
|
|
71
|
+
:is-emission="isEmission"
|
|
72
|
+
:sort="sort"
|
|
73
|
+
@update:sort="updateSort"
|
|
74
|
+
/>
|
|
77
75
|
</div>
|
|
78
76
|
</div>
|
|
79
77
|
</template>
|
|
@@ -81,6 +79,8 @@
|
|
|
81
79
|
<script lang="ts">
|
|
82
80
|
import { orgaComputed } from "../../mixins/orgaComputed";
|
|
83
81
|
import { useAuthStore } from "../../../stores/AuthStore";
|
|
82
|
+
import { useFilterStore } from "../../../stores/FilterStore";
|
|
83
|
+
import { rubriquesFilterParam } from "../../mixins/routeParam/rubriquesFilterParam";
|
|
84
84
|
import { RubriquageFilter } from "@/stores/class/rubrique/rubriquageFilter";
|
|
85
85
|
import { defineComponent, defineAsyncComponent } from "vue";
|
|
86
86
|
import { mapState } from "pinia";
|
|
@@ -107,38 +107,46 @@ export default defineComponent({
|
|
|
107
107
|
DateFilter,
|
|
108
108
|
SearchOrder,
|
|
109
109
|
},
|
|
110
|
-
mixins: [orgaComputed],
|
|
110
|
+
mixins: [orgaComputed, rubriquesFilterParam],
|
|
111
111
|
props: {
|
|
112
112
|
organisationId: { default: undefined, type: String },
|
|
113
113
|
isEmission: { default: false, type: Boolean },
|
|
114
|
-
resetRubriquage: { default: false, type: Boolean },
|
|
115
114
|
isEducation: { default: false, type: Boolean },
|
|
116
115
|
includeHidden: { default: false, type: Boolean },
|
|
117
|
-
|
|
116
|
+
sort: { default: "DATE", type: String },
|
|
118
117
|
onlyVideo: { default: false, type: Boolean },
|
|
118
|
+
monetisable: { default: "UNDEFINED", type: String },
|
|
119
|
+
iabId: { default: undefined, type: Number },
|
|
120
|
+
searchPattern: { default: "", type: String },
|
|
121
|
+
fromDate: { default: undefined, type: String },
|
|
122
|
+
toDate: { default: undefined, type: String },
|
|
123
|
+
notValid: { default: false, type: Boolean },
|
|
124
|
+
rubriqueFilter: {
|
|
125
|
+
default: () => [],
|
|
126
|
+
type: Array as () => Array<RubriquageFilter>,
|
|
127
|
+
},
|
|
119
128
|
},
|
|
120
129
|
|
|
121
130
|
emits: [
|
|
122
|
-
"
|
|
123
|
-
"
|
|
124
|
-
"
|
|
125
|
-
"
|
|
126
|
-
"
|
|
127
|
-
"includeHidden",
|
|
128
|
-
"notValid",
|
|
129
|
-
"
|
|
131
|
+
"update:toDate",
|
|
132
|
+
"update:fromDate",
|
|
133
|
+
"update:monetisable",
|
|
134
|
+
"update:iabId",
|
|
135
|
+
"update:sort",
|
|
136
|
+
"update:includeHidden",
|
|
137
|
+
"update:notValid",
|
|
138
|
+
"update:rubriqueFilter",
|
|
130
139
|
"update:onlyVideo",
|
|
131
140
|
],
|
|
132
141
|
data() {
|
|
133
142
|
return {
|
|
134
|
-
isNotVisible: this.includeHidden,
|
|
135
|
-
isNotValidate: false as boolean,
|
|
136
143
|
showFilters: false as boolean,
|
|
137
144
|
firstLoaded: false as boolean,
|
|
138
145
|
};
|
|
139
146
|
},
|
|
140
147
|
|
|
141
148
|
computed: {
|
|
149
|
+
...mapState(useFilterStore, ["filterIab", "filterRubrique"]),
|
|
142
150
|
...mapState(useAuthStore, [
|
|
143
151
|
"isRoleProduction",
|
|
144
152
|
"isRoleContribution",
|
|
@@ -162,7 +170,7 @@ export default defineComponent({
|
|
|
162
170
|
this.isRoleContribution &&
|
|
163
171
|
!this.isPodcastmaker &&
|
|
164
172
|
!this.isEmission &&
|
|
165
|
-
this.
|
|
173
|
+
this.includeHidden
|
|
166
174
|
);
|
|
167
175
|
},
|
|
168
176
|
textNotValidate(): string {
|
|
@@ -173,42 +181,91 @@ export default defineComponent({
|
|
|
173
181
|
},
|
|
174
182
|
watch: {
|
|
175
183
|
organisation(): void {
|
|
176
|
-
|
|
184
|
+
const hidden =
|
|
177
185
|
undefined !== this.organisation &&
|
|
178
186
|
this.organisationRight &&
|
|
179
187
|
!this.isEmission;
|
|
188
|
+
if (hidden !== this.includeHidden) {
|
|
189
|
+
this.updateIncludeHidden(hidden);
|
|
190
|
+
}
|
|
180
191
|
},
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
192
|
+
searchPattern(value: string): void {
|
|
193
|
+
const search = value.trim();
|
|
194
|
+
const valSort =
|
|
195
|
+
search.length > 3
|
|
196
|
+
? "SCORE"
|
|
197
|
+
: this.isEmission
|
|
198
|
+
? "LAST_PODCAST_DESC"
|
|
199
|
+
: "DATE";
|
|
200
|
+
if (valSort !== this.sort) {
|
|
201
|
+
this.$emit("update:sort", valSort);
|
|
202
|
+
}
|
|
203
|
+
this.updateRouteParam({
|
|
204
|
+
q: search.length ? search : undefined,
|
|
205
|
+
s: valSort,
|
|
206
|
+
});
|
|
186
207
|
},
|
|
187
208
|
},
|
|
188
209
|
methods: {
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
210
|
+
updateMonetisable(value: string): void {
|
|
211
|
+
this.$emit("update:monetisable", value);
|
|
212
|
+
this.updateRouteParam({ m: "UNDEFINED" !== value ? value : undefined });
|
|
213
|
+
},
|
|
214
|
+
updateIab(value: number | undefined) {
|
|
215
|
+
this.$emit("update:iabId", 0 !== value ? value : undefined);
|
|
216
|
+
let filterIab = {};
|
|
217
|
+
if (this.filterIab && this.filterIab.id !== value) {
|
|
218
|
+
filterIab = { iabId: undefined };
|
|
192
219
|
}
|
|
193
|
-
this.
|
|
220
|
+
this.updateRouteParam({
|
|
221
|
+
...{ i: value ? value.toString() : undefined },
|
|
222
|
+
...filterIab,
|
|
223
|
+
});
|
|
224
|
+
},
|
|
225
|
+
updateSort(value: string) {
|
|
226
|
+
this.$emit("update:sort", value);
|
|
227
|
+
this.updateRouteParam({ s: value });
|
|
194
228
|
},
|
|
195
|
-
|
|
196
|
-
this.$emit("
|
|
229
|
+
updateIncludeHidden(value: boolean) {
|
|
230
|
+
this.$emit("update:includeHidden", value);
|
|
231
|
+
this.updateRouteParam({ h: value.toString() });
|
|
197
232
|
},
|
|
198
|
-
|
|
199
|
-
this.$emit("
|
|
233
|
+
updateNotValid(value: boolean) {
|
|
234
|
+
this.$emit("update:notValid", value);
|
|
235
|
+
this.updateRouteParam({ nv: value.toString() });
|
|
200
236
|
},
|
|
201
|
-
|
|
202
|
-
this.$emit("
|
|
237
|
+
updateOnlyVideo(value: boolean) {
|
|
238
|
+
this.$emit("update:onlyVideo", value);
|
|
239
|
+
this.updateRouteParam({ v: value ? "true" : undefined });
|
|
203
240
|
},
|
|
204
|
-
|
|
205
|
-
|
|
241
|
+
updateDates(value: {
|
|
242
|
+
from: string | undefined;
|
|
243
|
+
to: string | undefined;
|
|
244
|
+
}): void {
|
|
245
|
+
this.$emit("update:fromDate", value.from);
|
|
246
|
+
this.$emit("update:toDate", value.to);
|
|
247
|
+
this.updateRouteParam({ from: value.from, to: value.to });
|
|
206
248
|
},
|
|
207
249
|
updateRubriquageFilter(value: Array<RubriquageFilter>) {
|
|
208
|
-
this.$emit("
|
|
250
|
+
this.$emit("update:rubriqueFilter", value);
|
|
251
|
+
let filterRubriques = {};
|
|
252
|
+
const valueString = this.stringifyRubriquesFilter(value);
|
|
253
|
+
if (
|
|
254
|
+
this.filterRubrique.length &&
|
|
255
|
+
this.stringifyRubriquesFilter(this.filterRubrique) !== valueString
|
|
256
|
+
) {
|
|
257
|
+
filterRubriques = { rubriquesId: undefined };
|
|
258
|
+
}
|
|
259
|
+
this.updateRouteParam({
|
|
260
|
+
...{ r: valueString.length ? valueString : undefined },
|
|
261
|
+
...filterRubriques,
|
|
262
|
+
});
|
|
209
263
|
},
|
|
210
|
-
|
|
211
|
-
this
|
|
264
|
+
clickShowFilters(): void {
|
|
265
|
+
if (!this.firstLoaded) {
|
|
266
|
+
this.firstLoaded = true;
|
|
267
|
+
}
|
|
268
|
+
this.showFilters = !this.showFilters;
|
|
212
269
|
},
|
|
213
270
|
},
|
|
214
271
|
});
|