@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.
Files changed (38) hide show
  1. package/package.json +1 -1
  2. package/src/App.vue +1 -57
  3. package/src/assets/general.scss +3 -0
  4. package/src/components/display/categories/CategoryFilter.vue +85 -32
  5. package/src/components/display/categories/CategoryList.vue +6 -5
  6. package/src/components/display/emission/EmissionList.vue +3 -3
  7. package/src/components/display/filter/AdvancedSearch.vue +113 -56
  8. package/src/components/display/filter/CategorySearchFilter.vue +26 -65
  9. package/src/components/display/filter/DateFilter.vue +65 -70
  10. package/src/components/display/filter/MonetizableFilter.vue +11 -10
  11. package/src/components/display/filter/ProductorSearch.vue +7 -5
  12. package/src/components/display/filter/RubriqueChoice.vue +4 -1
  13. package/src/components/display/filter/RubriqueFilter.vue +92 -178
  14. package/src/components/display/filter/SearchOrder.vue +14 -18
  15. package/src/components/display/list/ListPaginate.vue +2 -2
  16. package/src/components/display/organisation/OrganisationChooser.vue +8 -1
  17. package/src/components/display/podcasts/PodcastInlineListTemplate.vue +8 -31
  18. package/src/components/display/podcasts/PodcastList.vue +3 -3
  19. package/src/components/display/podcasts/PodcastRawTranscript.vue +1 -0
  20. package/src/components/display/rubriques/RubriqueList.vue +7 -16
  21. package/src/components/misc/ClassicPopover.vue +0 -1
  22. package/src/components/misc/FooterSection.vue +3 -18
  23. package/src/components/misc/MobileMenu.vue +3 -19
  24. package/src/components/misc/TopBarMainContent.vue +3 -15
  25. package/src/components/mixins/organisationFilter.ts +2 -2
  26. package/src/components/mixins/routeParam/advancedParamInit.ts +186 -0
  27. package/src/components/mixins/routeParam/routeParams.ts +33 -0
  28. package/src/components/mixins/routeParam/rubriquesFilterComputed.ts +22 -0
  29. package/src/components/mixins/routeParam/rubriquesFilterParam.ts +29 -0
  30. package/src/components/pages/EmissionsPage.vue +26 -110
  31. package/src/components/pages/HomePage.vue +6 -19
  32. package/src/components/pages/PageNotFound.vue +3 -13
  33. package/src/components/pages/ParticipantsPage.vue +1 -1
  34. package/src/components/pages/PlaylistsPage.vue +1 -1
  35. package/src/components/pages/PodcastsPage.vue +37 -100
  36. package/src/router/router.ts +46 -4
  37. package/src/components/mixins/paginate/paginateParams.ts +0 -18
  38. /package/src/components/mixins/{paginate → routeParam}/paginateParamInit.ts +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@saooti/octopus-sdk",
3
- "version": "39.2.14",
3
+ "version": "39.2.16",
4
4
  "private": false,
5
5
  "description": "Javascript SDK for using octopus",
6
6
  "author": "Saooti",
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, ["filterUpdateIab", "filterUpdateRubrique"]),
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>
@@ -47,6 +47,9 @@ body{
47
47
  height: 0.01rem;
48
48
  color: #999;
49
49
  }
50
+ .d-flex-low-importance{
51
+ display: flex;
52
+ }
50
53
  .d-flex-column{
51
54
  display: flex;
52
55
  flex-direction: row;
@@ -7,7 +7,10 @@
7
7
  <h1 v-if="isHeaderDisplay" v-show="titleDisplay">
8
8
  {{ titleDisplay ?? $t("Home") }}
9
9
  </h1>
10
- <div v-show="isDisplay" class="d-flex flex-column justify-content-end">
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="getRubriques(filter.rubriquageId).length"
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
- const filter = Array.from(this.filterRubrique);
170
- filter[index].rubriqueId = rubrique.rubriqueId ?? 0;
171
- this.filterUpdateRubrique(filter);
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.$router.replace({
189
- query: { ...this.$route.query, ...{ iabId: undefined } },
190
- });
257
+ this.updateFiltersParam({ iabId: undefined }, { i: undefined });
191
258
  }
192
- this.filterUpdateIab();
193
259
  } else {
194
- const newFilter: Array<RubriquageFilter> = Array.from(
195
- this.filterRubrique,
196
- );
197
- newFilter.splice(index + 1);
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.$router.replace({
141
- query: { ...queries, ...{ iabId: category.id.toString() } },
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
- monetization: { default: "UNDEFINED", type: String },
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.monetization}|${this.includeHidden}
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.monetization,
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
- @update-monetization="updateMonetization"
25
+ :monetisable="monetisable"
26
+ @update:monetisable="updateMonetisable"
26
27
  />
27
- <CategorySearchFilter @update-category="updateCategory" />
28
+ <CategorySearchFilter :iab-id="iabId" @update:iab-id="updateIab" />
28
29
  <RubriqueFilter
29
- :reset-rubriquage="resetRubriquage"
30
- :organisation-id="organisationId"
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
- @update-to-date="updateToDate"
36
- @update-from-date="updateFromDate"
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
- v-model:text-init="isNotVisible"
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 && isNotValidate"
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
- v-model:text-init="isNotValidate"
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="$emit('update:onlyVideo', $event)"
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
- sortCriteria: { default: "DATE", type: String },
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
- "updateToDate",
123
- "updateFromDate",
124
- "updateMonetization",
125
- "updateCategory",
126
- "updateSortCriteria",
127
- "includeHidden",
128
- "notValid",
129
- "updateRubriquageFilter",
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.isNotVisible
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
- this.isNotVisible =
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
- isNotVisible(): void {
182
- this.$emit("includeHidden", this.isNotVisible);
183
- },
184
- isNotValidate(): void {
185
- this.$emit("notValid", this.isNotValidate);
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
- clickShowFilters(): void {
190
- if (!this.firstLoaded) {
191
- this.firstLoaded = true;
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.showFilters = !this.showFilters;
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
- updateFromDate(value: string): void {
196
- this.$emit("updateFromDate", value);
229
+ updateIncludeHidden(value: boolean) {
230
+ this.$emit("update:includeHidden", value);
231
+ this.updateRouteParam({ h: value.toString() });
197
232
  },
198
- updateToDate(value: string): void {
199
- this.$emit("updateToDate", value);
233
+ updateNotValid(value: boolean) {
234
+ this.$emit("update:notValid", value);
235
+ this.updateRouteParam({ nv: value.toString() });
200
236
  },
201
- updateMonetization(value: string): void {
202
- this.$emit("updateMonetization", value);
237
+ updateOnlyVideo(value: boolean) {
238
+ this.$emit("update:onlyVideo", value);
239
+ this.updateRouteParam({ v: value ? "true" : undefined });
203
240
  },
204
- updateCategory(value: number) {
205
- this.$emit("updateCategory", 0 !== value ? value : undefined);
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("updateRubriquageFilter", value);
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
- updateSortCriteria(value: string) {
211
- this.$emit("updateSortCriteria", value);
264
+ clickShowFilters(): void {
265
+ if (!this.firstLoaded) {
266
+ this.firstLoaded = true;
267
+ }
268
+ this.showFilters = !this.showFilters;
212
269
  },
213
270
  },
214
271
  });