@saooti/octopus-sdk 40.0.0 → 40.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@saooti/octopus-sdk",
3
- "version": "40.0.0",
3
+ "version": "40.0.2",
4
4
  "private": false,
5
5
  "description": "Javascript SDK for using octopus",
6
6
  "author": "Saooti",
@@ -42,19 +42,25 @@
42
42
  class="flex-shrink-0"
43
43
  id-checkbox="search-future-checkbox"
44
44
  :label="textNotVisible"
45
- :is-disabled="isCheckboxNotValidate && notValid"
45
+ :is-disabled="isSelectValidity && 'true'!==validity"
46
46
  @update:text-init="updateIncludeHidden"
47
47
  />
48
48
  </div>
49
- <div v-if="isCheckboxNotValidate" class="d-flex flex-column mt-3">
50
- <ClassicCheckbox
51
- :text-init="notValid"
52
- class="flex-shrink-0"
53
- id-checkbox="search-not-validate-checkbox"
54
- :label="textNotValidate"
55
- @update:text-init="updateNotValid"
56
- />
57
- </div>
49
+ <ClassicSelect
50
+ v-if="isSelectValidity"
51
+ :text-init="validity"
52
+ id-select="valid-episodes-select"
53
+ :label="$t('Episodes to validate')+' :'"
54
+ :display-label="true"
55
+ class-label="flex-shrink-0 me-1"
56
+ class="d-flex align-items-center mt-3 mb-0"
57
+ :options="[
58
+ { title: $t('Display only episodes to validate'), value: 'false' },
59
+ { title: $t('Display episodes to validate'), value: '' },
60
+ { title: $t('Do not display episodes to validate'), value: 'true' },
61
+ ]"
62
+ @update:text-init="updateValidity"
63
+ />
58
64
  <ClassicCheckbox
59
65
  v-if="!isEmission"
60
66
  :text-init="onlyVideo"
@@ -92,6 +98,9 @@ const CategorySearchFilter = defineAsyncComponent(
92
98
  const RubriqueFilter = defineAsyncComponent(
93
99
  () => import("./RubriqueFilter.vue"),
94
100
  );
101
+ const ClassicSelect = defineAsyncComponent(
102
+ () => import("../../form/ClassicSelect.vue"),
103
+ );
95
104
  const ClassicCheckbox = defineAsyncComponent(
96
105
  () => import("../../form/ClassicCheckbox.vue"),
97
106
  );
@@ -106,6 +115,7 @@ export default defineComponent({
106
115
  DateFilter,
107
116
  SearchOrder,
108
117
  ChevronDownIcon,
118
+ ClassicSelect
109
119
  },
110
120
  mixins: [orgaComputed, rubriquesFilterParam],
111
121
  props: {
@@ -119,7 +129,7 @@ export default defineComponent({
119
129
  searchPattern: { default: "", type: String },
120
130
  fromDate: { default: undefined, type: String },
121
131
  toDate: { default: undefined, type: String },
122
- notValid: { default: false, type: Boolean },
132
+ validity: { default: 'true', type: String },
123
133
  rubriqueFilter: {
124
134
  default: () => [],
125
135
  type: Array as () => Array<RubriquageFilter>,
@@ -133,7 +143,7 @@ export default defineComponent({
133
143
  "update:iabId",
134
144
  "update:sort",
135
145
  "update:includeHidden",
136
- "update:notValid",
146
+ "update:validity",
137
147
  "update:rubriqueFilter",
138
148
  "update:onlyVideo",
139
149
  ],
@@ -163,7 +173,7 @@ export default defineComponent({
163
173
  ? this.$t("Consider podcasts no visible")
164
174
  : this.$t("See podcasts no visible");
165
175
  },
166
- isCheckboxNotValidate(): boolean {
176
+ isSelectValidity(): boolean {
167
177
  return (
168
178
  undefined !== this.organisation &&
169
179
  this.organisationRight &&
@@ -173,11 +183,6 @@ export default defineComponent({
173
183
  this.includeHidden
174
184
  );
175
185
  },
176
- textNotValidate(): string {
177
- return this.isRoleProduction
178
- ? this.$t("Display all podcasts to validate")
179
- : this.$t("Display my podcasts to validate");
180
- },
181
186
  },
182
187
  watch: {
183
188
  organisation(): void {
@@ -198,7 +203,7 @@ export default defineComponent({
198
203
  if (valSort !== this.sort) {
199
204
  this.$emit("update:sort", valSort);
200
205
  }
201
- this.updateRouteParam({
206
+ this.updateRouteParamAdvanced({
202
207
  q: search.length ? search : undefined,
203
208
  s: valSort,
204
209
  });
@@ -207,7 +212,7 @@ export default defineComponent({
207
212
  methods: {
208
213
  updateMonetisable(value: string): void {
209
214
  this.$emit("update:monetisable", value);
210
- this.updateRouteParam({ m: "UNDEFINED" !== value ? value : undefined });
215
+ this.updateRouteParamAdvanced({ m: "UNDEFINED" !== value ? value : undefined });
211
216
  },
212
217
  updateIab(value: number | undefined) {
213
218
  this.$emit("update:iabId", 0 !== value ? value : undefined);
@@ -215,26 +220,26 @@ export default defineComponent({
215
220
  if (this.filterIab && this.filterIab.id !== value) {
216
221
  filterIab = { iabId: undefined };
217
222
  }
218
- this.updateRouteParam({
223
+ this.updateRouteParamAdvanced({
219
224
  ...{ i: value ? value.toString() : undefined },
220
225
  ...filterIab,
221
226
  });
222
227
  },
223
228
  updateSort(value: string) {
224
229
  this.$emit("update:sort", value);
225
- this.updateRouteParam({ s: value });
230
+ this.updateRouteParamAdvanced({ s: value });
226
231
  },
227
232
  updateIncludeHidden(value: boolean) {
228
233
  this.$emit("update:includeHidden", value);
229
- this.updateRouteParam({ h: value.toString() });
234
+ this.updateRouteParamAdvanced({ h: value.toString() });
230
235
  },
231
- updateNotValid(value: boolean) {
232
- this.$emit("update:notValid", value);
233
- this.updateRouteParam({ nv: value.toString() });
236
+ updateValidity(value: boolean) {
237
+ this.$emit("update:validity", value);
238
+ this.updateRouteParamAdvanced({ vl: value.toString() });
234
239
  },
235
240
  updateOnlyVideo(value: boolean) {
236
241
  this.$emit("update:onlyVideo", value);
237
- this.updateRouteParam({ v: value ? "true" : undefined });
242
+ this.updateRouteParamAdvanced({ v: value ? "true" : undefined });
238
243
  },
239
244
  updateDates(value: {
240
245
  from: string | undefined;
@@ -242,7 +247,7 @@ export default defineComponent({
242
247
  }): void {
243
248
  this.$emit("update:fromDate", value.from);
244
249
  this.$emit("update:toDate", value.to);
245
- this.updateRouteParam({ from: value.from, to: value.to });
250
+ this.updateRouteParamAdvanced({ from: value.from, to: value.to });
246
251
  },
247
252
  updateRubriquageFilter(value: Array<RubriquageFilter>) {
248
253
  this.$emit("update:rubriqueFilter", value);
@@ -254,7 +259,7 @@ export default defineComponent({
254
259
  ) {
255
260
  filterRubriques = { rubriquesId: undefined };
256
261
  }
257
- this.updateRouteParam({
262
+ this.updateRouteParamAdvanced({
258
263
  ...{ r: valueString.length ? valueString : undefined },
259
264
  ...filterRubriques,
260
265
  });
@@ -112,7 +112,7 @@ export default defineComponent({
112
112
  this.internSizeChange = false;
113
113
  return;
114
114
  }
115
- this.updatePaginateRank(Math.floor(this.first / this.rowsPerPage) + 1);
115
+ this.updateRouteParam({pr:(Math.floor(this.first / this.rowsPerPage) + 1).toString()});
116
116
  },
117
117
  },
118
118
  methods: {
@@ -104,6 +104,9 @@ export default defineComponent({
104
104
  changePaginate(): string {
105
105
  return `${this.first}|${this.size}`;
106
106
  },
107
+ sort(): string {
108
+ return !this.query ? "NAME" : "SCORE";
109
+ },
107
110
  },
108
111
  watch: {
109
112
  changePaginate() {
@@ -149,6 +152,7 @@ export default defineComponent({
149
152
  size: this.dsize,
150
153
  query: this.query,
151
154
  organisationId: this.organisation,
155
+ sort: this.sort
152
156
  },
153
157
  specialTreatement: true,
154
158
  },
@@ -87,7 +87,7 @@ export default defineComponent({
87
87
  showCount: { default: false, type: Boolean },
88
88
  displaySortText: { default: true, type: Boolean },
89
89
  sortCriteria: { default: undefined, type: String },
90
- notValid: { default: undefined, type: Boolean },
90
+ validity: { default: 'true', type: String },
91
91
  rubriqueId: { default: () => [], type: Array as () => Array<number> },
92
92
  rubriquageId: { default: () => [], type: Array as () => Array<number> },
93
93
  noRubriquageId: { default: () => [], type: Array as () => Array<number> },
@@ -125,7 +125,7 @@ export default defineComponent({
125
125
  changed(): string {
126
126
  return `${this.organisation}|${this.emissionId}|${this.sortCriteria}|${this.sort}
127
127
  ${this.iabId}|${this.participantId}|${this.query}|${this.monetisable}|${this.popularSort}|
128
- ${this.rubriqueId}|${this.rubriquageId}|${this.before}|${this.after}|${this.includeHidden}|${this.noRubriquageId}|${this.notValid}|
128
+ ${this.rubriqueId}|${this.rubriquageId}|${this.before}|${this.after}|${this.includeHidden}|${this.noRubriquageId}|${this.validity}|
129
129
  ${this.withVideo}`;
130
130
  },
131
131
  organisation(): Array<string> {
@@ -204,11 +204,11 @@ export default defineComponent({
204
204
  rubriqueId: this.rubriqueId.length ? this.rubriqueId : undefined,
205
205
  rubriquageId: this.rubriquageId.length ? this.rubriquageId : undefined,
206
206
  includeHidden: this.includeHidden,
207
- validity: undefined !== this.notValid ? !this.notValid : undefined,
208
- publisherId:
209
- this.notValid && !this.isRoleProduction
207
+ validity: this.validity,
208
+ /* publisherId:
209
+ !this.onlyValid && !this.isRoleProduction
210
210
  ? this.authProfile?.userId
211
- : undefined,
211
+ : undefined, */
212
212
  includeStatus: ["READY", "PROCESSING"],
213
213
  withVideo: this.withVideo,
214
214
  };
@@ -12,7 +12,8 @@
12
12
  class="d-flex align-items-center border p-1 m-1 text-dark"
13
13
  :to="{
14
14
  name: 'rubrique',
15
- params: { rubriqueId: rubriqueId },
15
+ params: { rubriqueId: rubriqueId},
16
+ query: organisationQuery
16
17
  }"
17
18
  >
18
19
  {{ rubriquagesOrga[rubriqueId]?.name ?? rubriqueId}}
@@ -21,10 +22,11 @@
21
22
  </template>
22
23
 
23
24
  <script lang="ts">
24
- import { mapActions } from "pinia";
25
+ import { mapActions, mapState } from "pinia";
25
26
  import { useSaveFetchStore } from "../../../stores/SaveFetchStore";
26
27
  import {defineComponent } from "vue";
27
- import { Rubrique } from "@/stores/class/rubrique/rubrique";
28
+ import { Rubrique } from "../../../stores/class/rubrique/rubrique";
29
+ import { useFilterStore } from "../../../stores/FilterStore";
28
30
  export default defineComponent({
29
31
  name: "TagList",
30
32
  components: {
@@ -42,6 +44,15 @@ export default defineComponent({
42
44
  created() {
43
45
  this.fetchRubriquages();
44
46
  },
47
+ computed:{
48
+ ...mapState(useFilterStore, ["filterOrgaId"]),
49
+ organisationQuery(){
50
+ if(this.filterOrgaId){
51
+ return undefined;
52
+ }
53
+ return { o: this.orgaId};
54
+ }
55
+ },
45
56
  methods:{
46
57
  ...mapActions(useSaveFetchStore, ["getOrgaRubriques"]),
47
58
  async fetchRubriquages(){
@@ -55,6 +55,10 @@ export default defineComponent({
55
55
  height: 48px;
56
56
  }
57
57
 
58
+ input[type="search"]::-webkit-search-cancel-button {
59
+ display: none;
60
+ }
61
+
58
62
  .search-icon-container {
59
63
  position: absolute;
60
64
  inset-block:0;
@@ -4,8 +4,9 @@ import { paginateParamInit } from "./paginateParamInit";
4
4
  import { rubriquesFilterParam } from "./rubriquesFilterParam";
5
5
  import { defineComponent } from 'vue';
6
6
  import { mapState } from "pinia";
7
- import { RubriquageFilter } from "@/stores/class/rubrique/rubriquageFilter";
7
+ import { RubriquageFilter } from "../../../stores/class/rubrique/rubriquageFilter";
8
8
  import dayjs from "dayjs";
9
+ import { useAuthStore } from "../../../stores/AuthStore";
9
10
  export const advancedParamInit = defineComponent({
10
11
  mixins: [orgaComputed, paginateParamInit, rubriquesFilterParam],
11
12
  props: {
@@ -19,6 +20,7 @@ export const advancedParamInit = defineComponent({
19
20
  routeTo: { default: undefined, type: String },
20
21
  routeOrga: { default: undefined, type: String },
21
22
  routeRubriques: { default: "", type: String },
23
+ routeValidity: { default: "", type: String },
22
24
  },
23
25
  data() {
24
26
  return {
@@ -30,7 +32,7 @@ export const advancedParamInit = defineComponent({
30
32
  toDate: undefined as string | undefined,
31
33
  includeHidden: false as boolean,
32
34
  sort: "DATE" as string, // SCORE, DATE, POPULARITY, NAME, LAST_PODCAST_DESC
33
- notValid: false as boolean,
35
+ validity: 'true' as string,
34
36
  iabId: undefined as number | undefined,
35
37
  noRubriquageId: [] as Array<number>,
36
38
  rubriquageId: [] as Array<number>,
@@ -40,6 +42,7 @@ export const advancedParamInit = defineComponent({
40
42
  };
41
43
  },
42
44
  computed:{
45
+ ...mapState(useAuthStore, ["isRoleContribution",]),
43
46
  ...mapState(useFilterStore, ["filterRubrique", "filterIab"]),
44
47
  organisationRight(): boolean {
45
48
  return this.isEditRights(this.organisationId);
@@ -91,6 +94,9 @@ export const advancedParamInit = defineComponent({
91
94
  routeIncludeHidden(){
92
95
  this.initIncludeHidden();
93
96
  },
97
+ routeValidity(){
98
+ this.initValidity();
99
+ },
94
100
  routeFrom(){
95
101
  this.initFromDate();
96
102
  },
@@ -118,6 +124,7 @@ export const advancedParamInit = defineComponent({
118
124
  this.iabId = this.filterIab?.id ?? this.routeIab;
119
125
  this.initRubriquageFilter();
120
126
  this.initIncludeHidden();
127
+ this.initValidity();
121
128
  this.initMonetisable();
122
129
  this.initSort();
123
130
  this.initFromDate();
@@ -163,6 +170,14 @@ export const advancedParamInit = defineComponent({
163
170
  initIncludeHidden(){
164
171
  this.includeHidden = undefined !== this.organisation && this.organisationRight && "false"!==this.routeIncludeHidden;
165
172
  },
173
+ initValidity(){
174
+ const cantDisplay = this.isPodcastmaker || this.isEmission || !this.includeHidden || !this.isRoleContribution || !this.organisationRight;
175
+ if(cantDisplay){
176
+ this.validity = "true";
177
+ }else{
178
+ this.validity = this.routeValidity;
179
+ }
180
+ },
166
181
  initRubriquageFilter(){
167
182
  if(this.routeRubriques === this.stringifyRubriquesFilter(this.rubriqueFilter)){
168
183
  return
@@ -1,16 +1,43 @@
1
+ import { useFilterStore } from '../../../stores/FilterStore';
2
+ import { routeParams } from "../../mixins/routeParam/routeParams";
3
+ import { mapState } from 'pinia';
1
4
  import { defineComponent } from 'vue';
2
5
  export const paginateParamInit = defineComponent({
6
+ mixins: [ routeParams],
3
7
  props: {
4
8
  pr: { default: 0, type: Number },
5
9
  ps: { default: 30, type: Number },
10
+ routeOrga: { default: undefined, type: String },
11
+ routeQuery: { default: "", type: String },
12
+ },
13
+ data() {
14
+ return {
15
+ organisationId: undefined as string | undefined,
16
+ searchPattern: "" as string,
17
+ };
6
18
  },
7
19
  computed:{
20
+ ...mapState(useFilterStore, ["filterOrgaId"]),
8
21
  paginateFirst(){
9
22
  if(!this.pr){
10
23
  return 0;
11
24
  }
12
25
  return Math.max((this.pr - 1 ) * this.ps, 0);
13
- }
14
- }
26
+ },
27
+ searchMinSize(): string{
28
+ return this.searchPattern.length>3 ? this.searchPattern : "";
29
+ },
30
+ },
31
+ watch: {
32
+ searchPattern(value: string): void {
33
+ this.updateRouteParam({
34
+ q: this.searchMinSize.length ? this.searchMinSize : undefined,
35
+ });
36
+ },
37
+ },
38
+ created() {
39
+ this.organisationId = this.filterOrgaId ?? this.routeOrga;
40
+ this.searchPattern = this.routeQuery ?? "";
41
+ },
15
42
  });
16
43
 
@@ -2,7 +2,7 @@ import { defineComponent } from 'vue';
2
2
  export const routeParams = defineComponent({
3
3
  methods: {
4
4
  checkPage(): boolean{
5
- return ['podcasts', 'emissions', 'participants', 'playlists', 'productors'].includes(this.$route.name?.toString()??"");
5
+ return ['podcasts', 'emissions', 'participants', 'playlists', 'productors', 'rubrique'].includes(this.$route.name?.toString()??"");
6
6
  },
7
7
  checkPageAdvanced(): boolean{
8
8
  return ['podcasts', 'emissions'].includes(this.$route.name?.toString()??"");
@@ -12,12 +12,12 @@ export const routeParams = defineComponent({
12
12
  this.$router.push({query: {...this.$route.query, ...{ps:ps, pr:1}}});
13
13
  }
14
14
  },
15
- updatePaginateRank(pr:number){
15
+ updateRouteParam(update: {[key:string]: string|undefined}){
16
16
  if(this.checkPage()){
17
- this.$router.push({query: {...this.$route.query, ...{pr:pr}}});
17
+ this.$router.push({query: {...this.$route.query, ...update}});
18
18
  }
19
19
  },
20
- updateRouteParam(update: {[key:string]: string|undefined}){
20
+ updateRouteParamAdvanced(update: {[key:string]: string|undefined}){
21
21
  if(this.checkPageAdvanced()){
22
22
  this.$router.push({query: {...this.$route.query, ...update}});
23
23
  }
@@ -9,7 +9,7 @@
9
9
  :show-count="true"
10
10
  :first="paginateFirst"
11
11
  :size="ps"
12
- :query="searchPattern"
12
+ :query="searchMinSize"
13
13
  :organisation-id="organisationId"
14
14
  />
15
15
  </section>
@@ -17,11 +17,9 @@
17
17
 
18
18
  <script lang="ts">
19
19
  import { paginateParamInit } from "../mixins/routeParam/paginateParamInit";
20
- import { useFilterStore } from "../../stores/FilterStore";
21
20
  import ParticipantList from "../display/participant/ParticipantList.vue";
22
21
  import ProductorSearch from "../display/filter/ProductorSearch.vue";
23
22
  import { defineComponent } from "vue";
24
- import { mapState } from "pinia";
25
23
  export default defineComponent({
26
24
  components: {
27
25
  ProductorSearch,
@@ -29,9 +27,10 @@ export default defineComponent({
29
27
  },
30
28
  mixins: [paginateParamInit],
31
29
  props: {
32
- productor: { default: undefined, type: String },
33
30
  pr: { default: 0, type: Number },
34
31
  ps: { default: 30, type: Number },
32
+ routeOrga: { default: undefined, type: String },
33
+ routeQuery: { default: "", type: String },
35
34
  },
36
35
  data() {
37
36
  return {
@@ -39,11 +38,5 @@ export default defineComponent({
39
38
  organisationId: undefined as string | undefined,
40
39
  };
41
40
  },
42
- computed: {
43
- ...mapState(useFilterStore, ["filterOrgaId"]),
44
- },
45
- created() {
46
- this.organisationId = this.productor ? this.productor : this.filterOrgaId;
47
- },
48
41
  });
49
42
  </script>
@@ -18,7 +18,7 @@
18
18
  :show-count="true"
19
19
  :first="paginateFirst"
20
20
  :size="ps"
21
- :query="searchPattern"
21
+ :query="searchMinSize"
22
22
  :organisation-id="organisationId"
23
23
  />
24
24
  </section>
@@ -28,7 +28,6 @@
28
28
  import { paginateParamInit } from "../mixins/routeParam/paginateParamInit";
29
29
  import PlaylistList from "../display/playlist/PlaylistList.vue";
30
30
  import { useAuthStore } from "../../stores/AuthStore";
31
- import { useFilterStore } from "../../stores/FilterStore";
32
31
  import { state } from "../../stores/ParamSdkStore";
33
32
  import { defineComponent, defineAsyncComponent } from "vue";
34
33
  import { mapState } from "pinia";
@@ -42,9 +41,10 @@ export default defineComponent({
42
41
  },
43
42
  mixins: [paginateParamInit],
44
43
  props: {
45
- productor: { default: undefined, type: String },
46
44
  pr: { default: 0, type: Number },
47
45
  ps: { default: 30, type: Number },
46
+ routeOrga: { default: undefined, type: String },
47
+ routeQuery: { default: "", type: String },
48
48
  },
49
49
 
50
50
  data() {
@@ -55,15 +55,10 @@ export default defineComponent({
55
55
  },
56
56
 
57
57
  computed: {
58
- ...mapState(useFilterStore, ["filterOrgaId"]),
59
58
  ...mapState(useAuthStore, ["isRolePlaylists"]),
60
59
  isPodcastmaker(): boolean {
61
60
  return state.generalParameters.podcastmaker as boolean;
62
61
  },
63
62
  },
64
-
65
- created() {
66
- this.organisationId = this.productor ? this.productor : this.filterOrgaId;
67
- },
68
63
  });
69
64
  </script>
@@ -12,7 +12,7 @@
12
12
  v-model:include-hidden="includeHidden"
13
13
  v-model:from-date="fromDate"
14
14
  v-model:to-date="toDate"
15
- v-model:not-valid="notValid"
15
+ v-model:validity="validity"
16
16
  v-model:rubrique-filter="rubriqueFilter"
17
17
  :search-pattern="searchPattern"
18
18
  :is-emission="false"
@@ -29,12 +29,12 @@
29
29
  :after="fromDate"
30
30
  :sort-criteria="sort"
31
31
  :include-hidden="includeHidden"
32
- :not-valid="notValid"
33
32
  :iab-id="iabId"
34
33
  :rubrique-id="rubriquesFilterArrayIds.rubriqueId"
35
34
  :rubriquage-id="rubriquesFilterArrayIds.rubriquageId"
36
35
  :no-rubriquage-id="rubriquesFilterArrayIds.noRubriquageId"
37
36
  :with-video="withVideo"
37
+ :validity="validity"
38
38
  />
39
39
  </section>
40
40
  </template>
@@ -63,14 +63,13 @@ export default defineComponent({
63
63
  routeIncludeHidden: { default: "", type: String },
64
64
  routeFrom: { default: undefined, type: String },
65
65
  routeTo: { default: undefined, type: String },
66
- routeNotValid: { default: "", type: String },
66
+ routeValidity: { default: "", type: String },
67
67
  routeOnlyVideo: { default: "", type: String },
68
68
  routeOrga: { default: undefined, type: String },
69
69
  routeRubriques: { default: "", type: String },
70
70
  },
71
71
  data() {
72
72
  return {
73
- notValid: false as boolean,
74
73
  onlyVideo: false as boolean,
75
74
  };
76
75
  },
@@ -83,15 +82,6 @@ export default defineComponent({
83
82
  },
84
83
  },
85
84
  watch: {
86
- routeNotValid: {
87
- immediate: true,
88
- handler() {
89
- this.notValid =
90
- undefined !== this.organisation &&
91
- this.organisationRight &&
92
- "true" === this.routeNotValid;
93
- },
94
- },
95
85
  routeOnlyVideo: {
96
86
  immediate: true,
97
87
  handler() {
@@ -1,38 +1,65 @@
1
1
  <template>
2
2
  <section class="page-box">
3
3
  <h1>{{ title }}</h1>
4
+ <ProductorSearch
5
+ v-model:organisation-id="organisationId"
6
+ v-model:search-pattern="searchPattern"
7
+ />
4
8
  <PodcastList
5
- :first="firstRoute"
6
- :size="sizeRoute"
7
- :rubrique-id="rubriqueId"
9
+ :first="paginateFirst"
10
+ :size="ps"
11
+ :rubrique-id="[rubriqueId]"
12
+ :organisation-id="orgaArray"
13
+ :query="searchMinSize"
14
+ :sort-criteria="sortOrder ?? 'DATE'"
8
15
  />
9
16
  </section>
10
17
  </template>
11
18
 
12
19
  <script lang="ts">
20
+ import { paginateParamInit } from "../mixins/routeParam/paginateParamInit";
21
+ import { seoTitleUrl } from "../mixins/seoTitleUrl";
13
22
  import classicApi from "../../api/classicApi";
14
23
  import PodcastList from "../display/podcasts/PodcastList.vue";
15
- import { defineComponent } from "vue";
24
+ import { defineAsyncComponent, defineComponent } from "vue";
16
25
  import { Rubrique } from "@/stores/class/rubrique/rubrique";
17
26
  import { useGeneralStore } from "../../stores/GeneralStore";
18
27
  import { mapState } from "pinia";
28
+ const ProductorSearch = defineAsyncComponent(
29
+ () => import("../display/filter/ProductorSearch.vue"),
30
+ );
19
31
  export default defineComponent({
20
32
  name: "RubriquePage",
21
33
  components: {
22
34
  PodcastList,
35
+ ProductorSearch
23
36
  },
37
+ mixins: [paginateParamInit, seoTitleUrl],
24
38
  props: {
25
- firstRoute: { default: 0, type: Number },
26
- sizeRoute: { default: 30, type: Number },
27
- rubriqueId: { default: undefined, type: [Number] },
39
+ pr: { default: 0, type: Number },
40
+ ps: { default: 30, type: Number },
41
+ rubriqueId: { default: undefined, type: Number },
42
+ routeOrga: { default: undefined, type: String },
43
+ routeQuery: { default: "", type: String },
28
44
  },
29
45
  data() {
30
46
  return {
31
47
  title: "" as string,
48
+ organisationId: undefined as string | undefined,
49
+ searchPattern: "" as string,
32
50
  };
33
51
  },
34
52
  computed:{
35
53
  ...mapState(useGeneralStore, ["metaTitle"]),
54
+ orgaArray(): Array<string> {
55
+ return this.organisationId ? [this.organisationId] : [];
56
+ },
57
+ sortOrder(){
58
+ if(this.searchMinSize.length){
59
+ return "SCORE";
60
+ }
61
+ return undefined;
62
+ }
36
63
  },
37
64
  watch: {
38
65
  rubriqueId: {
@@ -42,8 +69,8 @@ export default defineComponent({
42
69
  api: 0,
43
70
  path: "rubrique/" + this.rubriqueId,
44
71
  });
72
+ this.updatePathParams(data.name);
45
73
  this.title = data.name;
46
- document.title = this.title + ' - ' + this.metaTitle;
47
74
  },
48
75
  },
49
76
  },
package/src/locale/de.ts CHANGED
@@ -264,10 +264,10 @@ export default {
264
264
  "Recaptcha not active": "Google CAPTCHA ist deaktiviert",
265
265
  "Comment waiting":
266
266
  "Der Kommentar ist für andere Besucher erst sichtbar, nachdem er validiert wurde.",
267
- "Display all podcasts to validate":
268
- "Alle noch nicht validierten Podcasts anzeigen",
269
- "Display my podcasts to validate":
270
- "Meine noch nicht validierten Podcasts anzeigen",
267
+ "Episodes to validate":"Episoden zur Validierung",
268
+ "Display only episodes to validate": "Nur Episoden zur Validierung anzeigen",
269
+ "Display episodes to validate": "Zeigen Sie Episoden zur Validierung an",
270
+ "Do not display episodes to validate": "Episoden zur Validierung nicht anzeigen",
271
271
  "Podcast not validated": "Nicht validierter Podcast",
272
272
  "Podcast to validate": "Podcast noch nicht validiert",
273
273
  "Change locale": "Ändere die Sprache",
package/src/locale/en.ts CHANGED
@@ -259,8 +259,10 @@ export default {
259
259
  "Recaptcha not active": "The captcha google is deactivated",
260
260
  "Comment waiting":
261
261
  "The comment will not be visible to other users until it has been validated",
262
- "Display all podcasts to validate": "Display all podcasts to validate",
263
- "Display my podcasts to validate": "Display my podcasts to validate",
262
+ "Episodes to validate":"Episodes to validate",
263
+ "Display only episodes to validate": "Display only episodes to validate",
264
+ "Display episodes to validate": "Display episodes to validate",
265
+ "Do not display episodes to validate": "Do not display episodes to validate",
264
266
  "Podcast not validated": "Podcast not validated",
265
267
  "Podcast to validate": "Podcast to validate",
266
268
  "Change locale": "Change the language",
package/src/locale/es.ts CHANGED
@@ -264,10 +264,10 @@ export default {
264
264
  "Recaptcha not active": "El Captcha de Google está desactivado",
265
265
  "Comment waiting":
266
266
  "Los demás usuarios podrán ver el comentario tras su validación",
267
- "Display all podcasts to validate":
268
- "Mostrar todos los pódcast pendientes de validación",
269
- "Display my podcasts to validate":
270
- "Mostrar mis pódcast pendientes de validación",
267
+ "Episodes to validate":"Episodios para validar",
268
+ "Display only episodes to validate": "Mostrar solo episodios para validar",
269
+ "Display episodes to validate": "Mostrar episodios para validar",
270
+ "Do not display episodes to validate": "No mostrar episodios para validar",
271
271
  "Podcast not validated": "Pódcast no validado",
272
272
  "Podcast to validate": "Pódcast pendiente de validación",
273
273
  "Change locale": "Cambiar el idioma",
package/src/locale/fr.ts CHANGED
@@ -266,8 +266,10 @@ export default {
266
266
  "Recaptcha not active": "Attention le captcha google est désactivé",
267
267
  "Comment waiting":
268
268
  "Le commentaire ne sera pas visible par les autres utilisateurs tant qu'il n'aura pas été validé.",
269
- "Display all podcasts to validate": "Afficher tous les épisodes à valider",
270
- "Display my podcasts to validate": "Afficher mes épisodes à valider",
269
+ "Episodes to validate":"Épisodes à valider",
270
+ "Display only episodes to validate": "Afficher uniquement les épisodes à valider",
271
+ "Display episodes to validate": "Afficher les épisodes à valider",
272
+ "Do not display episodes to validate": "Ne pas afficher les épisodes à valider",
271
273
  "Podcast not validated": "L'épisode n'est pas validé",
272
274
  "Podcast to validate": "Épisode à valider",
273
275
  "Change locale": "Changer la langue",
package/src/locale/it.ts CHANGED
@@ -261,8 +261,10 @@ export default{
261
261
  'Recaptcha not active': 'Google captcha disattivato',
262
262
  'Comment waiting':
263
263
  "Questo commento non sarà visibile ad altri utenti fino a quando non sarà validato",
264
- 'Display all podcasts to validate': 'Mostra tutti i podcast da validare',
265
- 'Display my podcasts to validate': 'Mostra i miei podcast da validare',
264
+ "Episodes to validate":"Episodi da convalidare",
265
+ "Display only episodes to validate": "Mostra solo gli episodi da convalidare",
266
+ "Display episodes to validate": "Mostra episodi da convalidare",
267
+ "Do not display episodes to validate": "Non visualizzare gli episodi per convalidarli",
266
268
  'Podcast not validated': "Podcast non validato",
267
269
  'Podcast to validate': 'Podcast da validare',
268
270
  'Change locale': 'Cambia la lingua',
package/src/locale/sl.ts CHANGED
@@ -256,9 +256,10 @@ export default {
256
256
  "Recaptcha error": "Google Recaptcha meni, da niste človek",
257
257
  "Recaptcha not active": "Captcha google je deaktiviran",
258
258
  "Comment waiting": "Komentar je do potrditve skrit za druge uporabnike",
259
- "Display all podcasts to validate":
260
- "Prikaži vse podkaste, ki jih je treba potrditi",
261
- "Display my podcasts to validate": "Prikaži moje podkaste za potrditev",
259
+ "Episodes to validate":"Epizode za potrditev",
260
+ "Display only episodes to validate": "Pokaži samo epizode za potrditev",
261
+ "Display episodes to validate": "Prikaži epizode za potrditev",
262
+ "Do not display episodes to validate": "Ne prikazuj epizod za preverjanje",
262
263
  "Podcast not validated": "Podkasti niso potrjeni",
263
264
  "Podcast to validate": "Podkasti, ki jih je treba potrditi",
264
265
  "Change locale": "Spremenite jezik",
@@ -91,7 +91,7 @@ const routes: Array<RouteRecordRaw> = [
91
91
  routeIncludeHidden: route.query.h ?? "",
92
92
  routeFrom: route.query.from,
93
93
  routeTo: route.query.to,
94
- routeNotValid:route.query.nv ?? "",
94
+ routeValidity:route.query.vl ?? "",
95
95
  routeOnlyVideo:route.query.v ?? "",
96
96
  routeOrga:route.query.o,
97
97
  routeRubriques :route.query.r,
@@ -128,6 +128,8 @@ const routes: Array<RouteRecordRaw> = [
128
128
  props: (route: RouteLocationNormalized) => ({
129
129
  pr: route.query.pr ? parseInt(route.query.pr.toString(), 10) : undefined,
130
130
  ps: route.query.ps ? parseInt(route.query.ps.toString(), 10) : undefined,
131
+ routeOrga:route.query.o,
132
+ routeQuery: route.query.q ?? "",
131
133
  }),
132
134
  meta:{
133
135
  title: "Speakers",
@@ -190,18 +192,15 @@ const routes: Array<RouteRecordRaw> = [
190
192
  }
191
193
  },
192
194
  {
193
- path: "/main/pub/rubrique/:rubriqueId/:productor?",
195
+ path: "/main/pub/rubrique/:rubriqueId(\\d+):title([^?]*)?:productor?",
194
196
  name: "rubrique",
195
197
  component: RubriquePage,
196
198
  props: (route: RouteLocationNormalized) => ({
197
- firstRoute: route.query.first
198
- ? parseInt(route.query.first.toString(), 10)
199
- : 0,
200
- sizeRoute: route.query.size
201
- ? parseInt(route.query.size.toString(), 10)
202
- : 12,
199
+ pr: route.query.pr ? parseInt(route.query.pr.toString(), 10) : undefined,
200
+ ps: route.query.ps ? parseInt(route.query.ps.toString(), 10) : undefined,
203
201
  rubriqueId: parseInt(route.params.rubriqueId.toString(), 10),
204
- productor: route.params.productor,
202
+ routeOrga:route.query.o,
203
+ routeQuery: route.query.q ?? "",
205
204
  }),
206
205
  meta:{
207
206
  title: "",
@@ -236,6 +235,8 @@ const routes: Array<RouteRecordRaw> = [
236
235
  props: (route: RouteLocationNormalized) => ({
237
236
  pr: route.query.pr ? parseInt(route.query.pr.toString(), 10) : undefined,
238
237
  ps: route.query.ps ? parseInt(route.query.ps.toString(), 10) : undefined,
238
+ routeOrga:route.query.o,
239
+ routeQuery: route.query.q ?? "",
239
240
  }),
240
241
  meta:{
241
242
  title: "Playlists"
@@ -34,22 +34,3 @@
34
34
  --octopus-line-clamp:2;
35
35
  --octopus-max-height-description: 7rem;
36
36
  }
37
-
38
- :root.dark-theme{
39
- // Colors
40
- --octopus-background: oklch(100% 0 0deg);
41
- --octopus-primary: oklch(55% 0.118 159.16deg);
42
- --octopus-secondary: oklch(90% 0 0deg);
43
- --octopus-tertiary: oklch(45.74% 0.0822 222.06deg);
44
- --octopus-danger: oklab(50% 0.18 0.105);
45
- --octopus-warning:oklch(55% 0.1647 42.35deg);
46
- --octopus-gray-text: oklch(44.75% 0.0121 229.13deg);
47
- --octopus-color-text: oklch(30% 0 0deg);
48
- --octopus-color-on-primary: oklch(100% 0 0deg);
49
- --octopus-border-default: oklch(91% 0.007 248deg);
50
- --octopus-shadow: oklch(0% 0 0deg / 40%);
51
- --octopus-player-color:oklch(27% 0 0deg);
52
- --octopus-gray: oklch(50% 0 0deg);
53
- }
54
-
55
-