@saooti/octopus-sdk 36.0.4 → 36.0.6
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/index.ts +1 -2
- package/package.json +3 -2
- package/src/assets/bootstrap.scss +11 -1
- package/src/assets/share.scss +0 -1
- package/src/components/display/categories/CategoryChooser.vue +79 -171
- package/src/components/display/categories/CategoryFilter.vue +10 -4
- package/src/components/display/emission/EmissionPlayerItem.vue +4 -1
- package/src/components/display/filter/CategorySearchFilter.vue +1 -1
- package/src/components/display/filter/ProductorSearch.vue +6 -16
- package/src/components/display/filter/RubriqueChoice.vue +1 -1
- package/src/components/display/filter/RubriqueFilter.vue +2 -1
- package/src/components/display/list/Paginate.vue +4 -1
- package/src/components/display/organisation/OrganisationChooser.vue +72 -200
- package/src/components/display/podcasts/PodcastFilterList.vue +5 -3
- package/src/components/display/podcasts/PodcastImage.vue +3 -1
- package/src/components/display/podcasts/PodcastModuleBox.vue +17 -5
- package/src/components/display/podcasts/TagList.vue +2 -2
- package/src/components/display/rubriques/RubriqueChooser.vue +87 -181
- package/src/components/display/rubriques/RubriqueList.vue +8 -5
- package/src/components/display/sharing/PlayerParameters.vue +3 -1
- package/src/components/display/sharing/ShareButtons.vue +5 -3
- package/src/components/display/sharing/ShareButtonsIntern.vue +24 -8
- package/src/components/display/sharing/ShareDistribution.vue +3 -1
- package/src/components/display/sharing/SharePlayer.vue +12 -25
- package/src/components/display/sharing/SharePlayerColors.vue +6 -2
- package/src/components/form/ClassicCheckbox.vue +1 -1
- package/src/components/form/ClassicMultiselect.vue +155 -0
- package/src/components/misc/TopBar.vue +8 -4
- package/src/components/misc/modal/NewsletterModal.vue +1 -1
- package/src/components/pages/Emission.vue +5 -2
- package/src/components/pages/Home.vue +3 -3
- package/src/components/pages/Playlist.vue +4 -1
- package/src/components/pages/Podcast.vue +4 -1
- package/src/stores/ParamSdkStore.ts +3 -3
- package/src/stores/class/general/organisation.ts +8 -0
- package/src/assets/multiselect.scss +0 -518
- package/src/components/display/emission/EmissionChooser.vue +0 -187
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div
|
|
3
|
+
class="default-multiselect-width"
|
|
4
|
+
:class="{'multiselect-in-modal' : inModal,
|
|
5
|
+
'multiselect-no-deselect': noDeselect}"
|
|
6
|
+
:style="{ width: width }"
|
|
7
|
+
>
|
|
8
|
+
<label
|
|
9
|
+
:for="id"
|
|
10
|
+
:title="label"
|
|
11
|
+
/>
|
|
12
|
+
<vSelect
|
|
13
|
+
:id="id"
|
|
14
|
+
v-model="optionSelected"
|
|
15
|
+
:label="optionLabel"
|
|
16
|
+
:append-to-body="inModal"
|
|
17
|
+
:multiple="multiple"
|
|
18
|
+
:options="options"
|
|
19
|
+
:disabled="isDisabled"
|
|
20
|
+
:loading="isLoading"
|
|
21
|
+
:placeholder="placeholder"
|
|
22
|
+
@open="onSearch"
|
|
23
|
+
@search="onSearch"
|
|
24
|
+
@option:selected="onOptionSelected"
|
|
25
|
+
>
|
|
26
|
+
<template
|
|
27
|
+
v-if="optionCustomTemplating"
|
|
28
|
+
#option="option"
|
|
29
|
+
>
|
|
30
|
+
<slot
|
|
31
|
+
name="optionTemplating"
|
|
32
|
+
:option="option"
|
|
33
|
+
/>
|
|
34
|
+
</template>
|
|
35
|
+
<template
|
|
36
|
+
v-if="optionCustomTemplating"
|
|
37
|
+
#selected-option="option"
|
|
38
|
+
>
|
|
39
|
+
<slot
|
|
40
|
+
name="optionTemplating"
|
|
41
|
+
:option="option"
|
|
42
|
+
/>
|
|
43
|
+
</template>
|
|
44
|
+
<template #no-options="{ searching }">
|
|
45
|
+
<span v-if="searching">{{ $t('No elements found. Consider changing the search query.') }}</span>
|
|
46
|
+
<span v-else>{{ $t('List is empty') }}</span>
|
|
47
|
+
</template>
|
|
48
|
+
<template #list-footer>
|
|
49
|
+
<li
|
|
50
|
+
v-if="remainingElements"
|
|
51
|
+
class="vs__dropdown-option"
|
|
52
|
+
>
|
|
53
|
+
{{
|
|
54
|
+
$t('Count more elements matched your query, please make a more specific search.',{ count: remainingElements })
|
|
55
|
+
}}
|
|
56
|
+
</li>
|
|
57
|
+
</template>
|
|
58
|
+
</vSelect>
|
|
59
|
+
</div>
|
|
60
|
+
</template>
|
|
61
|
+
|
|
62
|
+
<script lang="ts">
|
|
63
|
+
import vSelect from "vue-select";
|
|
64
|
+
export default {
|
|
65
|
+
components: {
|
|
66
|
+
vSelect,
|
|
67
|
+
},
|
|
68
|
+
props: {
|
|
69
|
+
id:{default: '', type: String},
|
|
70
|
+
label:{default: '', type: String},
|
|
71
|
+
placeholder:{default: '', type: String},
|
|
72
|
+
optionLabel:{default: '', type: String},
|
|
73
|
+
inModal:{default: false, type: Boolean},
|
|
74
|
+
multiple:{default: false, type: Boolean},
|
|
75
|
+
isDisabled:{default: false, type: Boolean},
|
|
76
|
+
width: { default: '100%', type: String },
|
|
77
|
+
maxElement: { default: 50, type: Number },
|
|
78
|
+
minSearchLength: { default: 3, type: Number },
|
|
79
|
+
optionChosen: { default: undefined, type: Object as ()=>unknown},
|
|
80
|
+
noDeselect:{default: false, type: Boolean},
|
|
81
|
+
optionCustomTemplating:{default: false, type: Boolean},
|
|
82
|
+
},
|
|
83
|
+
|
|
84
|
+
emits: ['onSearch','selected'],
|
|
85
|
+
|
|
86
|
+
data() {
|
|
87
|
+
return {
|
|
88
|
+
optionSelected: undefined as unknown|undefined,
|
|
89
|
+
options: [] as Array<unknown>,
|
|
90
|
+
remainingElements: 0 as number,
|
|
91
|
+
isLoading: false as boolean,
|
|
92
|
+
};
|
|
93
|
+
},
|
|
94
|
+
|
|
95
|
+
watch: {
|
|
96
|
+
optionChosen: {
|
|
97
|
+
deep: true,
|
|
98
|
+
immediate:true,
|
|
99
|
+
handler(){
|
|
100
|
+
this.optionSelected = this.optionChosen;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
|
|
105
|
+
methods:{
|
|
106
|
+
onSearch(search: string): void{
|
|
107
|
+
if(search && search.length < this.minSearchLength){return;}
|
|
108
|
+
this.isLoading = true;
|
|
109
|
+
this.$emit('onSearch', search);
|
|
110
|
+
},
|
|
111
|
+
afterSearch(optionsFetched: Array<unknown>, count: number):void{
|
|
112
|
+
this.options = optionsFetched;
|
|
113
|
+
this.remainingElements = Math.max(0, count - this.maxElement);
|
|
114
|
+
this.isLoading = false;
|
|
115
|
+
},
|
|
116
|
+
onOptionSelected(optionSelected: unknown):void{
|
|
117
|
+
this.$emit('selected', optionSelected);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
</script>
|
|
122
|
+
<style lang="scss">
|
|
123
|
+
@import "vue-select/dist/vue-select.css";
|
|
124
|
+
.octopus-app{
|
|
125
|
+
--vs-border-radius: 0.2rem;
|
|
126
|
+
--vs-dropdown-option--active-bg: #ddd;
|
|
127
|
+
--vs-dropdown-option--active-color: black;
|
|
128
|
+
.default-multiselect-width {
|
|
129
|
+
width: 100%;
|
|
130
|
+
font-size: 1rem;
|
|
131
|
+
}
|
|
132
|
+
.vs__dropdown-option{
|
|
133
|
+
white-space: initial;
|
|
134
|
+
}
|
|
135
|
+
.vs__search:focus{
|
|
136
|
+
min-width: 150px;
|
|
137
|
+
}
|
|
138
|
+
.multiselect-in-modal .vs__dropdown-menu{
|
|
139
|
+
z-index: 9999;
|
|
140
|
+
}
|
|
141
|
+
.multiselect-no-deselect .vs__clear{
|
|
142
|
+
display: none;
|
|
143
|
+
}
|
|
144
|
+
.multiselect-transparent{
|
|
145
|
+
--vs-border-color: transparent;
|
|
146
|
+
}
|
|
147
|
+
.multiselect-white{
|
|
148
|
+
--vs-selected-color: white;
|
|
149
|
+
--vs-dropdown-bg: black;
|
|
150
|
+
.vs__actions path{
|
|
151
|
+
fill: white;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
</style>
|
|
@@ -45,9 +45,14 @@
|
|
|
45
45
|
{{ link.title }}
|
|
46
46
|
</router-link>
|
|
47
47
|
</template>
|
|
48
|
-
<button
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
<button
|
|
49
|
+
id="more-dropdown"
|
|
50
|
+
class="d-flex align-items-center hide-phone btn-transparent p-3"
|
|
51
|
+
>
|
|
52
|
+
<div class="link-hover">
|
|
53
|
+
{{ $t('More') }}
|
|
54
|
+
</div>
|
|
55
|
+
<div class="ms-1 saooti-down" />
|
|
51
56
|
</button>
|
|
52
57
|
<Popover
|
|
53
58
|
target="more-dropdown"
|
|
@@ -80,7 +85,6 @@
|
|
|
80
85
|
@click="onDisplayMenu(false)"
|
|
81
86
|
/>
|
|
82
87
|
<div class="d-flex flex-column">
|
|
83
|
-
|
|
84
88
|
<div class="d-flex justify-content-end flex-nowrap">
|
|
85
89
|
<HomeDropdown :is-education="isEducation" />
|
|
86
90
|
<router-link
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<template #body>
|
|
9
9
|
<div class="d-flex justify-content-between">
|
|
10
10
|
<!-- eslint-disable vue/no-v-html -->
|
|
11
|
-
<div v-html="newsletterHtml"/>
|
|
11
|
+
<div v-html="newsletterHtml" />
|
|
12
12
|
<!-- eslint-enable -->
|
|
13
13
|
<div class="d-flex flex-column flex-grow-1 ms-4">
|
|
14
14
|
<h4 class="mb-3">
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="page-box">
|
|
3
|
-
<template v-if="loaded && !error"
|
|
3
|
+
<template v-if="loaded && !error">
|
|
4
4
|
<div class="page-element-title-container">
|
|
5
5
|
<div class="page-element-title">
|
|
6
6
|
<h1>{{ $t('Emission') }}</h1>
|
|
7
7
|
</div>
|
|
8
|
-
<div
|
|
8
|
+
<div
|
|
9
|
+
class="page-element-bg"
|
|
10
|
+
:style="backgroundDisplay"
|
|
11
|
+
/>
|
|
9
12
|
</div>
|
|
10
13
|
<div class="d-flex flex-column page-element">
|
|
11
14
|
<div class="module-box">
|
|
@@ -30,9 +30,9 @@
|
|
|
30
30
|
:to="{
|
|
31
31
|
name: 'podcasts',
|
|
32
32
|
query: { productor: filterOrgaId,
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
iabId: filterIab?.id,
|
|
34
|
+
rubriquesId: rubriqueQueryParam },
|
|
35
|
+
}"
|
|
36
36
|
class="btn btn-primary align-self-center width-fit-content mt-5 m-auto"
|
|
37
37
|
>
|
|
38
38
|
{{
|
|
@@ -7,7 +7,10 @@
|
|
|
7
7
|
<div class="page-element-title">
|
|
8
8
|
<h1>{{ $t('Playlist') }}</h1>
|
|
9
9
|
</div>
|
|
10
|
-
<div
|
|
10
|
+
<div
|
|
11
|
+
class="page-element-bg"
|
|
12
|
+
:style="backgroundDisplay"
|
|
13
|
+
/>
|
|
11
14
|
</div>
|
|
12
15
|
<div class="d-flex flex-column page-element">
|
|
13
16
|
<div class="module-box">
|
|
@@ -9,7 +9,10 @@
|
|
|
9
9
|
:time-remaining="timeRemaining"
|
|
10
10
|
/>
|
|
11
11
|
</div>
|
|
12
|
-
<div
|
|
12
|
+
<div
|
|
13
|
+
class="page-element-bg"
|
|
14
|
+
:style="backgroundDisplay"
|
|
15
|
+
/>
|
|
13
16
|
</div>
|
|
14
17
|
<div class="d-flex flex-column page-element">
|
|
15
18
|
<PodcastModuleBox
|
|
@@ -5,7 +5,7 @@ const state:ParamStore = {
|
|
|
5
5
|
generalParameters: {
|
|
6
6
|
organisationId:'ecbd98d9-79bd-4312-ad5e-fc7c1c4a191c',
|
|
7
7
|
authenticated: true,
|
|
8
|
-
isAdmin:
|
|
8
|
+
isAdmin: true,
|
|
9
9
|
isRoleLive: false,
|
|
10
10
|
isCommments: false,
|
|
11
11
|
isOrganisation: false,
|
|
@@ -164,8 +164,8 @@ export interface Footer{
|
|
|
164
164
|
}
|
|
165
165
|
export interface Organisation{
|
|
166
166
|
imageUrl?: string,
|
|
167
|
-
|
|
168
|
-
|
|
167
|
+
name?: string,
|
|
168
|
+
userName?: string,
|
|
169
169
|
}
|
|
170
170
|
export interface OctopusApi{
|
|
171
171
|
url?: string,
|
|
@@ -17,4 +17,12 @@ export interface Organisation{
|
|
|
17
17
|
score?: number;
|
|
18
18
|
soundcastId?: string;
|
|
19
19
|
privacy?:string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function emptyOrgaData(defaultName: string): Organisation{
|
|
23
|
+
return {
|
|
24
|
+
imageUrl: "/img/emptypodcast.webp",
|
|
25
|
+
id: "",
|
|
26
|
+
name: defaultName
|
|
27
|
+
}
|
|
20
28
|
}
|