@saooti/octopus-sdk 32.0.16 → 32.0.19

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/README.md CHANGED
@@ -659,4 +659,7 @@ See [Configuration Reference](https://cli.vuejs.org/config/).
659
659
  * 32.0.13 Test Vite au lieu de Webpack
660
660
  * 32.0.14 Mise en place Vite au lieu de Webpack
661
661
  * 32.0.15 Pb lié refactor
662
- * 32.0.16 Pb lié refactor
662
+ * 32.0.16 Pb lié refactor
663
+ * 32.0.17 AdvancedSearch components
664
+ * 32.0.18 AdvancedSearch components
665
+ * 32.0.19 Playlist publique
package/index.ts CHANGED
@@ -27,31 +27,25 @@ import Popover from "./src/components/misc/Popover.vue";
27
27
  import CategoryChooser from "./src/components/display/categories/CategoryChooser.vue";
28
28
  import CategoryList from "./src/components/display/categories/CategoryList.vue";
29
29
  import CategoryFilter from "./src/components/display/categories/CategoryFilter.vue";
30
- /*import EditBox from "./src/components/display/edit/EditBox.vue"; */
31
30
  import EmissionChooser from "./src/components/display/emission/EmissionChooser.vue";
32
- /* import EmissionItem from "./src/components/display/emission/EmissionItem.vue"; */
33
31
  import EmissionList from "./src/components/display/emission/EmissionList.vue";
34
- /*import MonetizableFilter from "./src/components/display/filter/MonetizableFilter.vue";
35
- import ProductorSearch from "./src/components/display/filter/ProductorSearch.vue";*/
36
- import AdvancedSearch from "./src/components/display/filter/AdvancedSearch.vue";
37
32
  import OrganisationChooser from "./src/components/display/organisation/OrganisationChooser.vue";
38
- /*import ParticipantItem from "./src/components/display/participant/ParticipantItem.vue";
39
- import ParticipantList from "./src/components/display/participant/ParticipantList.vue";
40
- import AnimatorsItem from "./src/components/display/podcasts/AnimatorsItem.vue";*/
41
33
  import PodcastFilterList from "./src/components/display/podcasts/PodcastFilterList.vue";
42
- /*import PodcastImage from "./src/components/display/podcasts/PodcastImage.vue";*/
43
34
  import PodcastInlineList from "./src/components/display/podcasts/PodcastInlineList.vue";
44
- /*import PodcastItem from "./src/components/display/podcasts/PodcastItem.vue";*/
45
35
  import PodcastList from "./src/components/display/podcasts/PodcastList.vue";
46
36
  import ShareButtons from "./src/components/display/sharing/ShareButtons.vue";
47
- /*import ShareDistribution from "./src/components/display/sharing/ShareDistribution.vue";
48
- import SharePlayer from "./src/components/display/sharing/SharePlayer.vue"; */
49
37
  import EmissionInlineList from "./src/components/display/emission/EmissionInlineList.vue";
50
38
  import RubriqueChooser from "./src/components/display/rubriques/RubriqueChooser.vue";
51
39
  import CommentList from "./src/components/display/comments/CommentList.vue";
52
40
  import CommentInput from "./src/components/display/comments/CommentInput.vue";
53
41
  import PodcastPlaylistInlineList from "./src/components/display/playlist/PodcastPlaylistInlineList.vue";
54
42
 
43
+ //AdvancedSearch
44
+ import AdvancedSearch from "./src/components/display/filter/AdvancedSearch.vue";
45
+ import RubriqueFilter from "./src/components/display/filter/RubriqueFilter.vue";
46
+ import DateFilter from "./src/components/display/filter/DateFilter.vue";
47
+ import SearchOrder from "./src/components/display/filter/SearchOrder.vue";
48
+
55
49
  //form
56
50
  import ClassicSearch from "./src/components/form/ClassicSearch.vue";
57
51
  import ClassicCheckbox from "./src/components/form/ClassicCheckbox.vue";
@@ -122,9 +116,11 @@ const components = {
122
116
  ClassicSelect,
123
117
  Error403Page,
124
118
  Paginate,
125
- ListPaginate
119
+ ListPaginate,
120
+ RubriqueFilter,
121
+ DateFilter,
122
+ SearchOrder
126
123
  }
127
-
128
124
  export default components;
129
125
 
130
126
  export {
@@ -180,5 +176,8 @@ export {
180
176
  ClassicSelect,
181
177
  Error403Page,
182
178
  Paginate,
183
- ListPaginate
179
+ ListPaginate,
180
+ RubriqueFilter,
181
+ DateFilter,
182
+ SearchOrder
184
183
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@saooti/octopus-sdk",
3
- "version": "32.0.16",
3
+ "version": "32.0.19",
4
4
  "private": false,
5
5
  "description": "Javascript SDK for using octopus",
6
6
  "author": "Saooti",
@@ -23,68 +23,17 @@
23
23
  :is-emission="isEmission"
24
24
  @updateMonetization="updateMonetization"
25
25
  />
26
- <CategoryFilter @updateCategory="updateCategory" />
26
+ <CategorySearchFilter @updateCategory="updateCategory" />
27
27
  <RubriqueFilter
28
28
  :reset-rubriquage="resetRubriquage"
29
29
  :organisation-id="organisationId"
30
30
  @updateRubriquageFilter="updateRubriquageFilter"
31
31
  />
32
- <div class="d-flex mt-3 align-items-center flex-wrap">
33
- <div
34
- v-if="isEmission"
35
- class="me-2"
36
- >
37
- {{ $t('Emission with episode published :') }}
38
- </div>
39
- <div class="d-flex align-items-center">
40
- <ClassicCheckbox
41
- v-model:textInit="isFrom"
42
- class="flex-shrink-0"
43
- id-checkbox="search-from-checkbox"
44
- :label="$t('From the :')"
45
- />
46
- <DatePicker
47
- v-model="fromDate"
48
- class="ps-3 pe-3"
49
- mode="dateTime"
50
- color="green"
51
- is24hr
52
- @update:modelValue="updateFromDate()"
53
- >
54
- <template #default="{ inputValue, inputEvents }">
55
- <input
56
- class="px-2 py-1 border rounded focus:border-blue-300"
57
- :value="inputValue"
58
- v-on="inputEvents"
59
- >
60
- </template>
61
- </DatePicker>
62
- </div>
63
- <div class="d-flex align-items-center">
64
- <ClassicCheckbox
65
- v-model:textInit="isTo"
66
- class="flex-shrink-0"
67
- id-checkbox="search-to-checkbox"
68
- :label="$t('To the :')"
69
- />
70
- <DatePicker
71
- v-model="toDate"
72
- class="ps-3"
73
- mode="dateTime"
74
- color="green"
75
- is24hr
76
- @update:modelValue="updateToDate()"
77
- >
78
- <template #default="{ inputValue, inputEvents }">
79
- <input
80
- class="px-2 py-1 border rounded focus:border-blue-300"
81
- :value="inputValue"
82
- v-on="inputEvents"
83
- >
84
- </template>
85
- </DatePicker>
86
- </div>
87
- </div>
32
+ <DateFilter
33
+ :isEmission="isEmission"
34
+ @updateToDate="updateToDate"
35
+ @updateFromDate="updateFromDate"
36
+ />
88
37
  <div
89
38
  v-if="organisation && organisationRight && !isPodcastmaker"
90
39
  class="d-flex flex-column mt-3"
@@ -113,14 +62,11 @@
113
62
  <div class="primary-darker mb-2">
114
63
  {{ $t('Sort') }}
115
64
  </div>
116
- <ClassicRadio
117
- v-model:textInit="sort"
118
- id-radio="sort-radio"
119
- :options="isSearchBar? [{title:$t('Sort score'), value:'SCORE'},
120
- {title:$t('Sort last'), value:isEmission?'LAST_PODCAST_DESC':'DATE'},
121
- {title:$t('Sort name'), value:'NAME'}]:
122
- [{title:$t('Sort last'), value:isEmission?'LAST_PODCAST_DESC':'DATE'},
123
- {title:$t('Sort name'), value:'NAME'}]"
65
+ <SearchOrder
66
+ :isEmission="isEmission"
67
+ :isSearchBar="isSearchBar"
68
+ :sortCriteria="sortCriteria"
69
+ @updateSortCriteria="updateSortCriteria"
124
70
  />
125
71
  </div>
126
72
  </div>
@@ -130,23 +76,24 @@
130
76
  <script lang="ts">
131
77
  import { state } from '../../../store/paramStore';
132
78
  import { orgaComputed } from '../../mixins/orgaComputed';
133
- import moment from 'moment';
134
- import CategoryFilter from './CategoryFilter.vue';
79
+ import CategorySearchFilter from './CategorySearchFilter.vue';
80
+ import DateFilter from './DateFilter.vue';
81
+ import SearchOrder from './SearchOrder.vue';
135
82
  import RubriqueFilter from './RubriqueFilter.vue';
136
83
  import ClassicCheckbox from '../../form/ClassicCheckbox.vue';
137
84
  import ClassicRadio from '../../form/ClassicRadio.vue';
138
85
  import { RubriquageFilter } from '@/store/class/rubrique/rubriquageFilter';
139
- import { DatePicker } from 'v-calendar';
140
86
  import { defineComponent, defineAsyncComponent } from 'vue';
141
87
  const MonetizableFilter = defineAsyncComponent(() => import('./MonetizableFilter.vue'));
142
88
  export default defineComponent({
143
89
  components: {
144
90
  MonetizableFilter,
145
- DatePicker,
146
- CategoryFilter,
91
+ CategorySearchFilter,
147
92
  RubriqueFilter,
148
93
  ClassicCheckbox,
149
- ClassicRadio
94
+ ClassicRadio,
95
+ DateFilter,
96
+ SearchOrder
150
97
  },
151
98
  mixins: [orgaComputed],
152
99
  props: {
@@ -169,14 +116,9 @@ export default defineComponent({
169
116
  'updateRubriquageFilter'],
170
117
  data() {
171
118
  return {
172
- isFrom: false as boolean,
173
- isTo: false as boolean,
174
- fromDate: moment().subtract(10, 'days').toISOString() as string,
175
- toDate: moment().toISOString() as string,
176
119
  isNotVisible: this.includeHidden as boolean,
177
120
  isNotValidate: false as boolean,
178
121
  showFilters: false as boolean,
179
- sort: this.sortCriteria as string,
180
122
  };
181
123
  },
182
124
 
@@ -219,58 +161,19 @@ export default defineComponent({
219
161
  organisation(): void {
220
162
  this.isNotVisible = undefined!==this.organisation && this.organisationRight && !this.isEmission;
221
163
  },
222
- isFrom(): void {
223
- this.$emit('updateFromDate', this.isFrom ? moment(this.fromDate).toISOString(true) : undefined);
224
- },
225
- isTo(): void {
226
- this.$emit('updateToDate', this.isTo ? moment(this.toDate).toISOString(true) : undefined);
227
- },
228
- sort(): void {
229
- this.$emit('updateSortCriteria', this.sort);
230
- },
231
164
  isNotVisible(): void{
232
165
  this.$emit('includeHidden', this.isNotVisible);
233
166
  },
234
167
  isNotValidate(): void {
235
168
  this.$emit('notValid', this.isNotValidate);
236
169
  },
237
- sortCriteria(): void {
238
- this.sort = this.sortCriteria;
239
- },
240
170
  },
241
171
  methods: {
242
- updateFromDate(): void {
243
- if (
244
- moment(this.fromDate)
245
- .startOf('minute')
246
- .toISOString() ===
247
- moment()
248
- .subtract(10, 'days')
249
- .startOf('minute')
250
- .toISOString()
251
- )
252
- return;
253
- if (this.isFrom) {
254
- this.$emit('updateFromDate', moment(this.fromDate).toISOString(true));
255
- } else {
256
- this.isFrom = true;
257
- }
172
+ updateFromDate(value: string): void {
173
+ this.$emit('updateFromDate', value);
258
174
  },
259
- updateToDate(): void {
260
- if (
261
- moment(this.toDate)
262
- .startOf('minute')
263
- .toISOString() ===
264
- moment()
265
- .startOf('minute')
266
- .toISOString()
267
- )
268
- return;
269
- if (this.isTo) {
270
- this.$emit('updateToDate', moment(this.toDate).toISOString(true));
271
- } else {
272
- this.isTo = true;
273
- }
175
+ updateToDate(value: string): void {
176
+ this.$emit('updateToDate', value);
274
177
  },
275
178
  updateMonetization(value: string): void {
276
179
  this.$emit('updateMonetization', value);
@@ -281,6 +184,9 @@ export default defineComponent({
281
184
  updateRubriquageFilter(value: Array<RubriquageFilter>){
282
185
  this.$emit('updateRubriquageFilter', value);
283
186
  },
187
+ updateSortCriteria(value: string){
188
+ this.$emit('updateSortCriteria', value);
189
+ }
284
190
  },
285
191
  })
286
192
  </script>
@@ -0,0 +1,143 @@
1
+ <template>
2
+ <div class="d-flex mt-3 align-items-center flex-wrap">
3
+ <div
4
+ v-if="isEmission"
5
+ class="me-2"
6
+ >
7
+ {{ $t('Emission with episode published :') }}
8
+ </div>
9
+ <div class="d-flex align-items-center">
10
+ <ClassicCheckbox
11
+ v-model:textInit="isFrom"
12
+ class="flex-shrink-0"
13
+ id-checkbox="search-from-checkbox"
14
+ :label="$t('From the :')"
15
+ />
16
+ <DatePicker
17
+ v-model="fromDate"
18
+ class="ps-3 pe-3"
19
+ mode="dateTime"
20
+ color="green"
21
+ is24hr
22
+ @update:modelValue="updateFromDate()"
23
+ >
24
+ <template #default="{ inputValue, inputEvents }">
25
+ <input
26
+ class="px-2 py-1 border rounded focus:border-blue-300"
27
+ :value="inputValue"
28
+ v-on="inputEvents"
29
+ >
30
+ </template>
31
+ </DatePicker>
32
+ </div>
33
+ <div class="d-flex align-items-center">
34
+ <ClassicCheckbox
35
+ v-model:textInit="isTo"
36
+ class="flex-shrink-0"
37
+ id-checkbox="search-to-checkbox"
38
+ :label="$t('To the :')"
39
+ />
40
+ <DatePicker
41
+ v-model="toDate"
42
+ class="ps-3"
43
+ mode="dateTime"
44
+ color="green"
45
+ is24hr
46
+ @update:modelValue="updateToDate()"
47
+ >
48
+ <template #default="{ inputValue, inputEvents }">
49
+ <input
50
+ class="px-2 py-1 border rounded focus:border-blue-300"
51
+ :value="inputValue"
52
+ v-on="inputEvents"
53
+ >
54
+ </template>
55
+ </DatePicker>
56
+ </div>
57
+ </div>
58
+
59
+ </template>
60
+
61
+ <script lang="ts">
62
+ import moment from 'moment';
63
+ import ClassicCheckbox from '../../form/ClassicCheckbox.vue';
64
+ import { DatePicker } from 'v-calendar';
65
+ import { defineComponent } from 'vue';
66
+ export default defineComponent({
67
+ components: {
68
+ DatePicker,
69
+ ClassicCheckbox,
70
+ },
71
+ props: {
72
+ isEmission: { default: false, type: Boolean},
73
+ initToDate: { default: undefined, type: String},
74
+ initFromDate: { default: undefined, type: String},
75
+ },
76
+
77
+ emits: ['updateToDate', 'updateFromDate'],
78
+
79
+ data() {
80
+ return {
81
+ isFrom: false as boolean,
82
+ isTo: false as boolean,
83
+ fromDate: moment().subtract(10, 'days').toISOString() as string,
84
+ toDate: moment().toISOString() as string,
85
+ };
86
+ },
87
+
88
+ watch: {
89
+ isFrom(): void {
90
+ this.$emit('updateFromDate', this.isFrom ? moment(this.fromDate).toISOString(true) : undefined);
91
+ },
92
+ isTo(): void {
93
+ this.$emit('updateToDate', this.isTo ? moment(this.toDate).toISOString(true) : undefined);
94
+ },
95
+ },
96
+
97
+ created(){
98
+ if(this.initToDate){
99
+ this.toDate = this.initToDate;
100
+ this.isTo = true;
101
+ }
102
+ if(this.initFromDate){
103
+ this.fromDate = this.initFromDate;
104
+ this.isFrom = true;
105
+ }
106
+ },
107
+ methods: {
108
+ updateFromDate(): void {
109
+ if (
110
+ moment(this.fromDate)
111
+ .startOf('minute')
112
+ .toISOString() ===
113
+ moment()
114
+ .subtract(10, 'days')
115
+ .startOf('minute')
116
+ .toISOString()
117
+ )
118
+ return;
119
+ if (this.isFrom) {
120
+ this.$emit('updateFromDate', moment(this.fromDate).toISOString(true));
121
+ } else {
122
+ this.isFrom = true;
123
+ }
124
+ },
125
+ updateToDate(): void {
126
+ if (
127
+ moment(this.toDate)
128
+ .startOf('minute')
129
+ .toISOString() ===
130
+ moment()
131
+ .startOf('minute')
132
+ .toISOString()
133
+ )
134
+ return;
135
+ if (this.isTo) {
136
+ this.$emit('updateToDate', moment(this.toDate).toISOString(true));
137
+ } else {
138
+ this.isTo = true;
139
+ }
140
+ },
141
+ },
142
+ })
143
+ </script>
@@ -25,7 +25,7 @@
25
25
  class="ms-2"
26
26
  :multiple="false"
27
27
  :rubriquage-id="rubriquageId"
28
- :rubrique-selected="0 < rubriqueIdSelected? rubriqueIdSelected : undefined"
28
+ :rubrique-selected="0 !== rubriqueIdSelected? rubriqueIdSelected : undefined"
29
29
  :all-rubriques="getRubriques(rubriquageId)"
30
30
  :defaultanswer="$t('No rubric filter')"
31
31
  :reset="reset"
@@ -67,12 +67,23 @@ export default defineComponent({
67
67
  reset: false as boolean,
68
68
  };
69
69
  },
70
+ watch:{
71
+ rubriquageIdSelected(){
72
+ this.initRubriquage();
73
+ },
74
+ rubriqueIdSelected(){
75
+ this.initRubriquage();
76
+ }
77
+ },
70
78
 
71
79
  created(){
72
- this.rubriquageId = this.rubriquageIdSelected;
80
+ this.initRubriquage();
73
81
  },
74
82
 
75
83
  methods: {
84
+ initRubriquage(){
85
+ this.rubriquageId = this.rubriquageIdSelected;
86
+ },
76
87
  deleteRubriquage(){
77
88
  this.$emit('deleteRubriqueChoice');
78
89
  },
@@ -51,6 +51,8 @@ export default defineComponent({
51
51
  props: {
52
52
  organisationId: { default: undefined, type: String},
53
53
  resetRubriquage: { default: false, type: Boolean},
54
+ modifyFilter:{ default: true, type: Boolean},
55
+ initRubriqueFilter:{ default: undefined, type: Array as ()=> Array<RubriquageFilter>},
54
56
  },
55
57
  emits: ['updateRubriquageFilter'],
56
58
 
@@ -111,7 +113,9 @@ export default defineComponent({
111
113
  }else{
112
114
  this.$emit('updateRubriquageFilter', []);
113
115
  }
114
- this.resetRubriqueFilter();
116
+ if(this.modifyFilter){
117
+ this.resetRubriqueFilter();
118
+ }
115
119
  this.$nextTick(() => {
116
120
  this.isInternChanged = false;
117
121
  });
@@ -123,7 +127,9 @@ export default defineComponent({
123
127
  return;
124
128
  }
125
129
  this.isInternChanged = true;
126
- this.resetRubriqueFilter();
130
+ if(this.modifyFilter){
131
+ this.resetRubriqueFilter();
132
+ }
127
133
  if(this.isRubriquage){
128
134
  this.$emit('updateRubriquageFilter', this.arrayFilter);
129
135
  }
@@ -135,7 +141,7 @@ export default defineComponent({
135
141
  rubriqueFilter:{
136
142
  deep: true,
137
143
  async handler(){
138
- if(this.isInternChanged){
144
+ if(this.isInternChanged || !this.modifyFilter){
139
145
  return;
140
146
  }
141
147
  this.isInternChanged = true;
@@ -161,7 +167,12 @@ export default defineComponent({
161
167
  },
162
168
 
163
169
  created() {
164
- if(this.rubriqueFilter.length){
170
+ if(!this.modifyFilter){
171
+ if(this.initRubriqueFilter){
172
+ this.arrayFilter = Array.from(this.initRubriqueFilter);
173
+ this.isRubriquage = true;
174
+ }
175
+ }else if(this.rubriqueFilter.length){
165
176
  this.arrayFilter = Array.from(this.rubriqueFilter);
166
177
  this.isRubriquage = true;
167
178
  }
@@ -218,7 +229,7 @@ export default defineComponent({
218
229
  }
219
230
  },
220
231
  resetRubriqueFilter(): void{
221
- if(0===this.rubriqueFilter.length || this.isInit){
232
+ if(0===this.rubriqueFilter.length || this.isInit || !this.modifyFilter){
222
233
  return;
223
234
  }
224
235
  const queries = this.$route.query;
@@ -0,0 +1,41 @@
1
+ <template>
2
+ <ClassicRadio
3
+ v-model:textInit="sort"
4
+ id-radio="sort-radio"
5
+ :options="isSearchBar? [{title:$t('Sort score'), value:'SCORE'},
6
+ {title:$t('Sort last'), value:isEmission?'LAST_PODCAST_DESC':'DATE'},
7
+ {title:$t('Sort name'), value:'NAME'}]:
8
+ [{title:$t('Sort last'), value:isEmission?'LAST_PODCAST_DESC':'DATE'},
9
+ {title:$t('Sort name'), value:'NAME'}]"
10
+ />
11
+ </template>
12
+
13
+ <script lang="ts">
14
+ import ClassicRadio from '../../form/ClassicRadio.vue';
15
+ import { defineComponent } from 'vue';
16
+ export default defineComponent({
17
+ components: {
18
+ ClassicRadio,
19
+ },
20
+ props: {
21
+ isEmission: { default: false, type: Boolean},
22
+ isSearchBar: { default: false, type: Boolean},
23
+ sortCriteria: { default: 'DATE', type: String},
24
+ },
25
+
26
+ emits: ['updateSortCriteria'],
27
+ data() {
28
+ return {
29
+ sort: this.sortCriteria as string,
30
+ };
31
+ },
32
+ watch: {
33
+ sort(): void {
34
+ this.$emit('updateSortCriteria', this.sort);
35
+ },
36
+ sortCriteria(): void {
37
+ this.sort = this.sortCriteria;
38
+ },
39
+ },
40
+ })
41
+ </script>
@@ -100,7 +100,7 @@ export default defineComponent({
100
100
  true == state.generalParameters.isAdmin;
101
101
  },
102
102
  activePlaylist(): boolean {
103
- return 0 !== Object.keys(this.playlist.podcasts).length;
103
+ return 0 !== Object.keys(this.playlist.samplingViews??[]).length;
104
104
  },
105
105
  },
106
106
  mounted() {
@@ -85,7 +85,7 @@ export default defineComponent({
85
85
  return this.notEmptyPlaylist ? this.$t('Podcasts in the playlist') : this.$t('No podcasts in the playlist');
86
86
  },
87
87
  notEmptyPlaylist(): boolean {
88
- return 0 !== Object.keys(this.playlist.podcasts).length;
88
+ return 0 !== Object.keys(this.playlist.samplingViews??[]).length;
89
89
  },
90
90
  podcastsDisplay(): Array<Podcast>{
91
91
  if(this.isMobile){
@@ -122,11 +122,7 @@ export default defineComponent({
122
122
  this.podcasts.length = 0;
123
123
  this.loading = true;
124
124
  try {
125
- const content = await octopusApi.fetchData<Array<Podcast>>(0, 'playlist/'+this.playlist.playlistId+'/content');
126
- for (let index = 0, len = content.length; index < len; index++) {
127
- content[index].order = this.playlist.podcasts[content[index].podcastId];
128
- }
129
- this.podcasts = content;
125
+ this.podcasts = await octopusApi.fetchData<Array<Podcast>>(0, 'playlist/'+this.playlist.playlistId+'/content');
130
126
  if (!this.editRight) {
131
127
  this.podcasts = this.podcasts.filter((p: Podcast|null) => {
132
128
  return (
@@ -38,7 +38,6 @@
38
38
  :pub-date="podcast.pubDate"
39
39
  :podcast-organisation-id="podcast.organisation.id"
40
40
  :podcast-organisation-name="podcast.organisation.name"
41
- :podcast-order="podcast.order"
42
41
  :duration="podcast.duration"
43
42
  :animators="podcast.animators"
44
43
  @mouseenter="showDescription"
@@ -45,10 +45,6 @@
45
45
  >
46
46
  <div>{{ '© ' + podcastOrganisationName }}</div>
47
47
  </router-link>
48
- <span
49
- v-if="editRight && podcastOrder && podcastOrder > 1"
50
- class="saooti-pin text-danger pe-2"
51
- />
52
48
  </div>
53
49
  </div>
54
50
  </template>
@@ -79,7 +75,6 @@ export default defineComponent({
79
75
  pubDate: { default: "", type: String},
80
76
  podcastOrganisationId: { default: "", type: String},
81
77
  podcastOrganisationName: { default: "", type: String},
82
- podcastOrder: { default: undefined, type: Number},
83
78
  duration: { default: 0, type: Number},
84
79
  animators: { default: undefined, type: Object as ()=> Array<Participant>},
85
80
  },
@@ -1,13 +1,33 @@
1
1
  import { Organisation } from '../general/organisation';
2
2
  import { Person } from '../user/person';
3
+ import { FetchParam } from './fetchParam';
4
+
3
5
 
4
6
  export interface Playlist {
5
7
  imageUrl?: string;
6
8
  description: string;
7
9
  organisation?: Organisation;
8
10
  playlistId: number;
9
- podcasts: Array<number | undefined>;
11
+ podcasts?: Array<number | undefined>;
10
12
  score: number;
11
13
  title: string;
14
+ type: string;
15
+ samplingViews?: Array<PlaylistRule>;
12
16
  publisher?: Person;
13
17
  }
18
+
19
+ export interface PlaylistRule {
20
+ maxSize: number,
21
+ podcastId?: number,
22
+ query?: FetchParam,
23
+ type?:string,
24
+ title?: string,
25
+ }
26
+
27
+ export function emptyPlaylistRule(): PlaylistRule{
28
+ return {
29
+ maxSize: 1,
30
+ query: {},
31
+ title: undefined,
32
+ }
33
+ }