@saooti/octopus-sdk 31.0.35 → 31.0.38

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 (85) hide show
  1. package/README.md +7 -1
  2. package/index.ts +8 -2
  3. package/package.json +1 -1
  4. package/public/img/403.jpeg +0 -0
  5. package/public/img/404.svg +242 -0
  6. package/src/assets/bootstrap-diff.scss +25 -24
  7. package/src/assets/general.scss +57 -2
  8. package/src/assets/modal.scss +5 -4
  9. package/src/assets/share.scss +2 -0
  10. package/src/components/display/categories/CategoryFilter.vue +12 -26
  11. package/src/components/display/categories/CategoryList.vue +14 -20
  12. package/src/components/display/comments/AddCommentModal.vue +19 -36
  13. package/src/components/display/comments/CommentBasicView.vue +2 -5
  14. package/src/components/display/comments/CommentInput.vue +8 -21
  15. package/src/components/display/comments/CommentList.vue +10 -21
  16. package/src/components/display/comments/CommentPlayer.vue +0 -3
  17. package/src/components/display/comments/CommentSection.vue +6 -14
  18. package/src/components/display/emission/EmissionInlineList.vue +5 -10
  19. package/src/components/display/emission/EmissionItem.vue +5 -10
  20. package/src/components/display/emission/EmissionList.vue +66 -68
  21. package/src/components/display/filter/AdvancedSearch.vue +19 -45
  22. package/src/components/display/filter/CategoryFilter.vue +11 -20
  23. package/src/components/display/filter/MonetizableFilter.vue +7 -14
  24. package/src/components/display/filter/ProductorSearch.vue +69 -78
  25. package/src/components/display/filter/RubriqueChoice.vue +1 -4
  26. package/src/components/display/filter/RubriqueFilter.vue +1 -5
  27. package/src/components/display/list/ListPaginate.vue +150 -0
  28. package/src/components/display/list/Paginate.vue +219 -0
  29. package/src/components/display/live/LiveHorizontalList.vue +56 -40
  30. package/src/components/display/organisation/OrganisationChooser.vue +7 -12
  31. package/src/components/display/participant/ParticipantItem.vue +6 -17
  32. package/src/components/display/participant/ParticipantList.vue +53 -46
  33. package/src/components/display/playlist/PlaylistItem.vue +1 -4
  34. package/src/components/display/playlist/PlaylistList.vue +60 -63
  35. package/src/components/display/playlist/PodcastList.vue +74 -101
  36. package/src/components/display/podcasts/AnimatorsItem.vue +17 -28
  37. package/src/components/display/podcasts/ParticipantDescription.vue +3 -11
  38. package/src/components/display/podcasts/PodcastFilterList.vue +8 -16
  39. package/src/components/display/podcasts/PodcastImage.vue +86 -92
  40. package/src/components/display/podcasts/PodcastInlineListTemplate.vue +15 -2
  41. package/src/components/display/podcasts/PodcastItem.vue +1 -2
  42. package/src/components/display/podcasts/PodcastItemInfo.vue +10 -10
  43. package/src/components/display/podcasts/PodcastList.vue +61 -81
  44. package/src/components/display/podcasts/PodcastModuleBox.vue +19 -25
  45. package/src/components/display/podcasts/PodcastSwiperList.vue +6 -9
  46. package/src/components/display/podcasts/TagList.vue +0 -2
  47. package/src/components/display/sharing/QrCode.vue +2 -11
  48. package/src/components/display/sharing/ShareButtons.vue +44 -329
  49. package/src/components/display/sharing/ShareButtonsIntern.vue +209 -0
  50. package/src/components/display/sharing/SharePlayer.vue +21 -53
  51. package/src/components/display/sharing/SplitButton.vue +42 -0
  52. package/src/components/display/sharing/SubscribeButtons.vue +46 -39
  53. package/src/components/misc/Footer.vue +1 -4
  54. package/src/components/misc/HomeDropdown.vue +36 -46
  55. package/src/components/misc/LeftMenu.vue +3 -7
  56. package/src/components/misc/TopBar.vue +10 -17
  57. package/src/components/misc/modal/ClipboardModal.vue +1 -1
  58. package/src/components/misc/modal/MessageModal.vue +1 -1
  59. package/src/components/misc/modal/QrCodeModal.vue +1 -1
  60. package/src/components/misc/modal/ShareModalPlayer.vue +1 -1
  61. package/src/components/mixins/organisationFilter.ts +6 -0
  62. package/src/components/mixins/player/playerLive.ts +1 -1
  63. package/src/components/pages/Category.vue +1 -1
  64. package/src/components/pages/Emission.vue +0 -6
  65. package/src/components/pages/Emissions.vue +1 -1
  66. package/src/components/pages/Error403Page.vue +44 -8
  67. package/src/components/pages/PageNotFound.vue +55 -0
  68. package/src/components/pages/Participant.vue +0 -15
  69. package/src/components/pages/Participants.vue +1 -1
  70. package/src/components/pages/Playlist.vue +2 -2
  71. package/src/components/pages/Playlists.vue +1 -1
  72. package/src/components/pages/Podcast.vue +1 -3
  73. package/src/components/pages/Podcasts.vue +11 -8
  74. package/src/components/pages/Rubrique.vue +1 -1
  75. package/src/locale/de.ts +3 -0
  76. package/src/locale/en.ts +9 -0
  77. package/src/locale/es.ts +3 -0
  78. package/src/locale/fr.ts +10 -1
  79. package/src/locale/it.ts +3 -0
  80. package/src/locale/sl.ts +3 -0
  81. package/src/router/router.ts +2 -0
  82. package/src/sass/_variables.scss +0 -1
  83. package/src/store/class/general/playlist.ts +1 -1
  84. package/src/store/paramStore.ts +7 -11
  85. package/src/store/typeAppStore.ts +20 -2
@@ -0,0 +1,209 @@
1
+ <template>
2
+ <button
3
+ v-if="isDownloadButton"
4
+ class="text-dark"
5
+ :class="getClass()"
6
+ :title="$t('Downloading')"
7
+ @click="onDownload(podcast.audioUrl, podcast.title)"
8
+ >
9
+ <div class="saooti-download-bounty" />
10
+ </button>
11
+ <template
12
+ v-for="button in arrayShareButtons"
13
+ :key="button.title"
14
+ >
15
+ <a
16
+ v-if="button.condition"
17
+ rel="noopener"
18
+ target="_blank"
19
+ :href="button.url"
20
+ :class="getClass(button.className)"
21
+ :title="button.title"
22
+ >
23
+ <div
24
+ :class="button.icon"
25
+ >
26
+ <div
27
+ v-for="index in button.nbPath"
28
+ :key="index"
29
+ :class="'path'+(index+1)"
30
+ />
31
+ </div>
32
+ </a>
33
+ </template>
34
+ <a
35
+ v-if="''!==rssUrl"
36
+ rel="noopener"
37
+ target="_blank"
38
+ :class="getClass()"
39
+ :href="rssUrl"
40
+ :title="$t('Subscribe to this emission')"
41
+ @click.prevent="openPopup()"
42
+ >
43
+ <div class="saooti-rss-bounty" />
44
+ </a>
45
+ <a
46
+ rel="noopener"
47
+ target="_blank"
48
+ :class="getClass()"
49
+ :title="$t('Copy this page URL')"
50
+ @click="onCopyCode(urlPage,afterCopy)"
51
+ >
52
+ <div class="saooti-link" />
53
+ </a>
54
+ <a
55
+ v-if="podcast"
56
+ rel="noopener"
57
+ target="_blank"
58
+ :class="getClass()"
59
+ :title="$t('Share newsletter')"
60
+ @click="newsletter = true"
61
+ >
62
+ <div class="saooti-newsletter" />
63
+ </a>
64
+ <a
65
+ rel="noopener"
66
+ target="_blank"
67
+ :class="getClass()"
68
+ :title="$t('Share QR Code')"
69
+ @click="qrCode = true"
70
+ >
71
+ <div class="saooti-qrcode" />
72
+ </a>
73
+ <ClipboardModal
74
+ v-if="dataRSSSave"
75
+ :link="rssUrl"
76
+ :emission="emission"
77
+ @close="dataRSSSave = false"
78
+ @copy="afterCopy"
79
+ />
80
+ <NewsletterModal
81
+ v-if="newsletter"
82
+ :closable="true"
83
+ :podcast="podcast"
84
+ @close="newsletter = false"
85
+ />
86
+ <QrCodeModal
87
+ v-if="qrCode"
88
+ :closable="true"
89
+ :url-page="urlPage"
90
+ @close="qrCode = false"
91
+ />
92
+ <Snackbar
93
+ ref="snackbar"
94
+ position="bottom-left"
95
+ />
96
+ </template>
97
+
98
+ <script lang="ts">
99
+ import { Emission } from '@/store/class/general/emission';
100
+ import { Podcast } from '@/store/class/general/podcast';
101
+ import { state } from '../../../store/paramStore';
102
+ import Snackbar from '../../misc/Snackbar.vue';
103
+ import { displayMethods } from '../../mixins/functions';
104
+ import { defineComponent, defineAsyncComponent } from 'vue';
105
+ import SnackbarVue from '../../misc/Snackbar.vue';
106
+ const ClipboardModal = defineAsyncComponent(() => import('../../misc/modal/ClipboardModal.vue'));
107
+ const NewsletterModal = defineAsyncComponent(() => import('../../misc/modal/NewsletterModal.vue'));
108
+ const QrCodeModal = defineAsyncComponent(() => import('../../misc/modal/QrCodeModal.vue'));
109
+ export default defineComponent({
110
+ components: {
111
+ ClipboardModal,
112
+ NewsletterModal,
113
+ QrCodeModal,
114
+ Snackbar,
115
+ },
116
+
117
+ mixins: [displayMethods],
118
+
119
+ props: {
120
+ podcast: { default: undefined, type: Object as ()=> Podcast},
121
+ emission: { default: undefined, type: Object as ()=> Emission},
122
+ participantId: { default: undefined, type: Number},
123
+ organisationId: { default: undefined, type: String},
124
+ notExclusive: { default: true, type: Boolean},
125
+ },
126
+
127
+ data() {
128
+ return {
129
+ dataRSSSave: false as boolean,
130
+ newsletter: false as boolean,
131
+ qrCode: false as boolean,
132
+ };
133
+ },
134
+ computed: {
135
+ arrayShareButtons(){
136
+ return [
137
+ { title: 'Facebook', icon:'saooti-facebook-bounty', nbPath:0, className:'btn-facebook', url :`https://www.facebook.com/sharer/sharer.php?u=${this.urlPage}`, condition: true},
138
+ { title: 'Twitter', icon:'saooti-twitter-bounty', nbPath:0, className:'btn-twitter', url :`https://twitter.com/intent/tweet?text=${this.urlPage}`, condition: true},
139
+ { title: 'Linkedin', icon:'saooti-linkedin1', nbPath:0, className:'btn-linkedin', url :`https://www.linkedin.com/sharing/share-offsite/?url=${this.urlPage}`, condition: true},
140
+ { title: 'Whatsapp', icon:'saooti-Whatsapp', nbPath:3, className:'btn-whatsapp', url :`whatsapp://send?text=${this.urlPage}`, condition: window.matchMedia('(hover: none)').matches}
141
+ ]
142
+ },
143
+ isDownloadButton(): boolean{
144
+ return this.isDownloadButtonParam && undefined!==this.podcast && (!this.podcast.tags || !this.podcast.tags.includes('copyright'));
145
+ },
146
+ isDownloadButtonParam(): boolean {
147
+ return (state.podcastPage.downloadButton as boolean);
148
+ },
149
+ urlPage(): string{
150
+ return window.location.href;
151
+ },
152
+ verticalDisplay(): boolean {
153
+ return (
154
+ !this.authenticated &&
155
+ !this.participantId &&
156
+ !this.organisationId &&
157
+ !this.notExclusive
158
+ );
159
+ },
160
+ authenticated(): boolean {
161
+ return (state.generalParameters.authenticated as boolean);
162
+ },
163
+ rssUrl(): string {
164
+ let api = state.generalParameters.ApiUri+ 'rss/';
165
+ if (this.emission){
166
+ return api +'emission/' + this.emission.emissionId + '.rss';
167
+ }
168
+ if (this.organisationId){
169
+ return api +'productor/' + this.organisationId + '.rss';
170
+ }
171
+ if (this.participantId){
172
+ return api +'participant/' + this.participantId + '.rss';
173
+ }
174
+ return '';
175
+ },
176
+ },
177
+
178
+ methods: {
179
+ getClass(className='btn-rss'): string{
180
+ let returnString = `btn ${className} share-btn mb-2`;
181
+ returnString+= this.verticalDisplay ? '' : ' mx-2';
182
+ return returnString;
183
+ },
184
+ openPopup(): void {
185
+ this.dataRSSSave = !this.dataRSSSave;
186
+ },
187
+ afterCopy(): void{
188
+ (this.$refs.snackbar as InstanceType<typeof SnackbarVue>).open(this.$t('Link in clipboard'));
189
+ },
190
+ onDownload(urlToDownload: string, nameOfDownload: string): void{
191
+ const xhr = new XMLHttpRequest();
192
+ xhr.open('GET', urlToDownload, true);
193
+ xhr.responseType = 'blob';
194
+ xhr.onload = function() {
195
+ const urlCreator = window.URL || window.webkitURL;
196
+ const imageUrl = urlCreator.createObjectURL(this.response);
197
+ const tag = document.createElement('a');
198
+ tag.href = imageUrl;
199
+ tag.target = '_blank';
200
+ tag.download = nameOfDownload.replace(/ /g, '_');
201
+ document.body.appendChild(tag);
202
+ tag.click();
203
+ document.body.removeChild(tag);
204
+ };
205
+ xhr.send();
206
+ },
207
+ },
208
+ })
209
+ </script>
@@ -77,6 +77,7 @@
77
77
  </template>
78
78
 
79
79
  <script lang="ts">
80
+ import { orgaComputed } from '../../mixins/orgaComputed';
80
81
  import { state } from '../../../store/paramStore';
81
82
  import octopusApi from '@saooti/octopus-api';
82
83
  import { Podcast } from '@/store/class/general/podcast';
@@ -96,7 +97,7 @@ export default defineComponent({
96
97
  SharePlayerTypes,
97
98
  ClassicCheckbox
98
99
  },
99
-
100
+ mixins:[orgaComputed],
100
101
  props: {
101
102
  podcast: { default: undefined, type: Object as ()=> Podcast},
102
103
  emission: { default: undefined, type: Object as ()=> Emission},
@@ -126,7 +127,7 @@ export default defineComponent({
126
127
  displayChoiceAllEpisodes():boolean{
127
128
  return !this.podcast || this.isEmission || this.isLargeEmission;
128
129
  },
129
- miniplayerBaseUrl(): string{
130
+ baseUrl(): string{
130
131
  return (state.podcastPage.MiniplayerUri as string);
131
132
  },
132
133
  isEmission(): boolean {
@@ -164,67 +165,36 @@ export default defineComponent({
164
165
  }
165
166
  return false;
166
167
  },
167
- authenticated(): boolean {
168
- return (state.generalParameters.authenticated as boolean);
169
- },
170
168
  iFrameSrc(): string {
171
169
  const url = [''];
172
- let iFrameNumber = '/' + this.iFrameNumber;
173
- if (this.displayChoiceAllEpisodes && 'all' === this.episodeNumbers) {
174
- iFrameNumber = '/0';
175
- }
170
+ let iFrameNumber = this.displayChoiceAllEpisodes && 'all' === this.episodeNumbers ? '/0' : '/' + this.iFrameNumber;
171
+ url.push(`${this.baseUrl}miniplayer/`);
176
172
  if (!this.podcast && !this.playlist && this.emission) {
177
- if ('default' === this.iFrameModel) {
178
- url.push(
179
- `${this.miniplayerBaseUrl}miniplayer/emission/${this.emission.emissionId}${iFrameNumber}`
180
- );
181
- }else if('large' === this.iFrameModel) {
182
- url.push(
183
- `${this.miniplayerBaseUrl}miniplayer/emissionLarge/${this.emission.emissionId}${iFrameNumber}`
184
- );
185
- }
186
- else {
187
- url.push(
188
- `${this.miniplayerBaseUrl}miniplayer/${this.iFrameModel}/${this.emission.emissionId}${iFrameNumber}`
189
- );
173
+ switch (this.iFrameModel) {
174
+ case 'default': url.push('emission'); break;
175
+ case 'large': url.push('emissionLarge'); break;
176
+ default: url.push(`${this.iFrameModel}`);break;
190
177
  }
178
+ url.push(`/${this.emission.emissionId}${iFrameNumber}`);
191
179
  } else if (this.playlist) {
192
- if ('default' === this.iFrameModel) {
193
- url.push(
194
- `${this.miniplayerBaseUrl}miniplayer/playlist/${this.playlist.playlistId}`
195
- );
196
- } else if('large' === this.iFrameModel) {
197
- url.push(
198
- `${this.miniplayerBaseUrl}miniplayer/playlistLarge/${this.playlist.playlistId}`
199
- );
200
- }else {
201
- url.push(
202
- `${this.miniplayerBaseUrl}miniplayer/${this.iFrameModel}/${this.playlist.playlistId}`
203
- );
180
+ switch (this.iFrameModel) {
181
+ case 'default': url.push('playlist'); break;
182
+ case 'large': url.push('playlistLarge'); break;
183
+ default: url.push(`${this.iFrameModel}`);break;
204
184
  }
185
+ url.push(`/${this.playlist.playlistId}`);
205
186
  } else if(this.emission && this.podcast){
187
+ url.push(`${this.iFrameModel}/`);
206
188
  if (this.isEmission || this.isLargeEmission) {
207
- url.push(
208
- `${this.miniplayerBaseUrl}miniplayer/${this.iFrameModel}/${this.emission.emissionId}${iFrameNumber}/${this.podcast.podcastId}`
209
- );
189
+ url.push(`${this.emission.emissionId}${iFrameNumber}/${this.podcast.podcastId}`);
210
190
  } else if (this.isLargeSuggestion) {
211
- url.push(
212
- `${this.miniplayerBaseUrl}miniplayer/${this.iFrameModel}/${this.podcast.podcastId}${iFrameNumber}`
213
- );
191
+ url.push(`${this.podcast.podcastId}${iFrameNumber}`);
214
192
  } else {
215
- url.push(
216
- `${this.miniplayerBaseUrl}miniplayer/${this.iFrameModel}/${this.podcast.podcastId}`
217
- );
193
+ url.push(`${this.podcast.podcastId}`);
218
194
  }
219
195
  }
220
196
  url.push('?distributorId=' + this.organisationId);
221
- const theme = this.theme;
222
- url.push(
223
- '&color=' +
224
- this.color.substring(1) +
225
- '&theme=' +
226
- theme.substring(1)
227
- );
197
+ url.push(`&color=${this.color.substring(1)}&theme=${this.theme.substring(1)}`);
228
198
  if (!this.proceedReading) {
229
199
  url.push('&proceed=false');
230
200
  }
@@ -301,9 +271,7 @@ export default defineComponent({
301
271
  if(this.$store.state.organisation && this.$store.state.organisation.attributes && Object.keys(this.$store.state.organisation.attributes).length > 1){
302
272
  data = this.$store.state.organisation.attributes;
303
273
  }else{
304
- data= await octopusApi.fetchOrganisationAttributes(
305
- state.generalParameters.organisationId ? state.generalParameters.organisationId : ""
306
- );
274
+ data= await octopusApi.fetchOrganisationAttributes(this.myOrganisationId||'');
307
275
  }
308
276
  this.color = Object.prototype.hasOwnProperty.call(data,'COLOR') ? data.COLOR : '#40a372';
309
277
  this.theme = Object.prototype.hasOwnProperty.call(data,'THEME') ? data.THEME : '#000000';
@@ -0,0 +1,42 @@
1
+ <template>
2
+ <div
3
+ class="btn-split"
4
+ @mouseleave="mobileHoverEffect=false"
5
+ >
6
+ <div class="d-flex flex-wrap">
7
+ <slot name="inside-button" />
8
+ </div>
9
+ <div class="label">
10
+ {{ title }}
11
+ </div>
12
+ </div>
13
+ </template>
14
+
15
+ <script lang="ts">
16
+ import { defineComponent } from 'vue';
17
+ export default defineComponent({
18
+ props: {
19
+ title: { default: '', type:String},
20
+ },
21
+
22
+ data() {
23
+ return {
24
+ mobileHoverEffect:false as boolean,
25
+ };
26
+ },
27
+ computed:{
28
+ isMobile(): boolean {
29
+ return window.matchMedia('(hover: none)').matches;
30
+ },
31
+ },
32
+
33
+ methods: {
34
+ linkClick(event: { preventDefault: () => void; }){
35
+ if(this.isMobile && !this.mobileHoverEffect){
36
+ this.mobileHoverEffect = true;
37
+ event.preventDefault();
38
+ }
39
+ },
40
+ },
41
+ })
42
+ </script>
@@ -1,31 +1,32 @@
1
1
  <template>
2
2
  <div class="module-box flex-grow-0">
3
- <h3 class="mb-3">
3
+ <h3 class="mb-2 height-40">
4
4
  {{ $t('Subscribe emission') }}
5
5
  </h3>
6
- <div class="d-flex flex-wrap">
7
- <template
8
- v-for="sub in subscriptions"
9
- :key="sub.name"
6
+ <template
7
+ v-for="(sub, index) in subscriptionsDisplay"
8
+ :key="sub.name"
9
+ >
10
+ <a
11
+ rel="noopener"
12
+ target="_blank"
13
+ :class="[
14
+ 0 === index? 'first': '',
15
+ subscriptionsDisplay.length-1 === index? 'last': '',
16
+ ]"
17
+ class="btn share-btn mb-2 mx-2"
18
+ :href="sub.url"
19
+ :title="sub.name"
10
20
  >
11
- <a
12
- v-if="getUrl(sub.name)"
13
- rel="noopener"
14
- target="_blank"
15
- class="btn me-3 mb-2 share-btn"
16
- :href="getUrl(sub.name)"
17
- :title="sub.name"
18
- >
19
- <span :class="sub.icon">
20
- <div
21
- v-for="index in getPathNumber(sub.name)"
22
- :key="index"
23
- :class="'path'+(index+1)"
24
- />
25
- </span>
26
- </a>
27
- </template>
28
- </div>
21
+ <span :class="sub.icon">
22
+ <div
23
+ v-for="indexPath in getPathNumber(sub.name)"
24
+ :key="indexPath"
25
+ :class="'path'+(indexPath+1)"
26
+ />
27
+ </span>
28
+ </a>
29
+ </template>
29
30
  </div>
30
31
  </template>
31
32
 
@@ -37,22 +38,23 @@ export default defineComponent({
37
38
  emission: { default: undefined, type: Object as ()=> Emission},
38
39
  podcastId: { default: undefined, type: Number},
39
40
  },
40
-
41
- data() {
42
- return {
43
- subscriptions : [
44
- {name : 'amazon', icon : 'saooti-amazon'},
45
- {name:'applePodcast', icon:'saooti-apple'},
46
- {name:'deezer', icon:'saooti-deezer'},
47
- {name:'googlePodcasts', icon:"saooti-google-podcasts"},
48
- {name:'playerFm', icon: 'saooti-saooti-playerfm'},
49
- {name:'pocketCasts', icon:'saooti-pocket-casts'},
50
- {name:'podcastAddict', icon: 'saooti-podcast-addict'},
51
- {name:'radioline', icon:'saooti-radioline'},
52
- {name:'spotify', icon:'saooti-spotify'},
53
- {name:'stitcher', icon:'saooti-stitcher-logo'},
54
- {name:'tunein', icon:'saooti-tunin'}] as Array<{name:string, icon:string}>,
55
- };
41
+ computed:{
42
+ subscriptionsDisplay(){
43
+ const sub = [
44
+ {name : 'amazon', icon : 'saooti-amazon', url : this.getUrl('amazon')},
45
+ {name:'applePodcast', icon:'saooti-apple', url : this.getUrl('applePodcast')},
46
+ {name:'deezer', icon:'saooti-deezer', url : this.getUrl('deezer')},
47
+ {name:'googlePodcasts', icon:"saooti-google-podcasts", url : this.getUrl('googlePodcasts')},
48
+ {name:'playerFm', icon: 'saooti-saooti-playerfm', url : this.getUrl('playerFm')},
49
+ {name:'pocketCasts', icon:'saooti-pocket-casts', url : this.getUrl('pocketCasts')},
50
+ {name:'podcastAddict', icon: 'saooti-podcast-addict', url : this.getUrl('podcastAddict')},
51
+ {name:'radioline', icon:'saooti-radioline', url : this.getUrl('radioline')},
52
+ {name:'spotify', icon:'saooti-spotify', url : this.getUrl('spotify')},
53
+ {name:'stitcher', icon:'saooti-stitcher-logo', url : this.getUrl('stitcher')},
54
+ {name:'tunein', icon:'saooti-tunin', url : this.getUrl('tunein')}
55
+ ];
56
+ return sub.filter(item=> item.url);
57
+ }
56
58
  },
57
59
 
58
60
  methods: {
@@ -77,3 +79,8 @@ export default defineComponent({
77
79
  },
78
80
  })
79
81
  </script>
82
+ <style lang="scss">
83
+ .height-40{
84
+ height: 40px;
85
+ }
86
+ </style>
@@ -119,7 +119,7 @@ export default defineComponent({
119
119
  {title : this.$t('Home'), routeName: 'home', condition : true},
120
120
  {title : this.$t('Podcasts'), routeName: 'podcasts', condition : true},
121
121
  {title : this.$t('Emissions'), routeName: 'emissions', condition : true},
122
- {title : this.$t('Productors'), routeName: 'productors', condition : !this.isPodcastmaker && !this.filterOrga},
122
+ {title : this.$t('Productors'), routeName: 'productors', condition : !this.isPodcastmaker && !this.$store.state.filter.organisationId},
123
123
  {title : this.$t('Playlists'), routeName: 'playlists', condition : true},
124
124
  {title : this.$t('Speakers'), routeName: 'participants', condition : true},]
125
125
  },
@@ -129,9 +129,6 @@ export default defineComponent({
129
129
  {title : this.$t('Term of use'), routeName: '/main/pub/cgu'},
130
130
  {title : this.$t('Used libraries'), routeName: "/main/pub/libraries"}]
131
131
  },
132
- filterOrga(): string {
133
- return this.$store.state.filter.organisationId;
134
- },
135
132
  isPodcastmaker(): boolean {
136
133
  return (state.generalParameters.podcastmaker as boolean);
137
134
  },
@@ -35,52 +35,30 @@
35
35
  </router-link>
36
36
  </template>
37
37
  <template v-else>
38
- <router-link
39
- v-if="isContribution && !isPodcastmaker"
40
- class="btn btn-primary w-100"
41
- to="/main/priv/upload"
38
+ <template
39
+ v-for="routerBack in routerBackoffice"
40
+ :key="routerBack.path"
42
41
  >
43
- {{ $t('Upload') }}
44
- </router-link>
45
- <template v-if="!isPodcastmaker">
46
- <router-link
47
- to="/main/priv/backoffice"
48
- class="show-phone dropdown-item"
49
- >
50
- {{ $t('My space') }}
51
- </router-link>
52
- <router-link
53
- class="dropdown-item"
54
- to="/main/priv/edit/profile"
55
- >
56
- {{ $t('Edit my profile') }}
57
- </router-link>
58
42
  <router-link
59
- v-if="isOrganisation"
60
- class="dropdown-item"
61
- to="/main/priv/edit/organisation"
43
+ v-if="!isPodcastmaker && routerBack.condition"
44
+ :class="routerBack.class"
45
+ :to="routerBack.path"
62
46
  >
63
- {{ $t('Edit my organisation') }}
47
+ {{ routerBack.title }}
64
48
  </router-link>
65
49
  </template>
66
50
  <template v-if="!isEducation">
67
51
  <hr class="dropdown-divider">
68
- <a
69
- href="https://help.octopus.saooti.com/Aide/"
70
- class="dropdown-item"
71
- rel="noopener"
72
- target="_blank"
73
- >
74
- {{ $t('Help') }}
75
- </a>
76
- <a
77
- href="https://help.octopus.saooti.com/"
78
- class="dropdown-item"
79
- rel="noopener"
80
- target="_blank"
81
- >
82
- {{ $t('TutoMag') }}
83
- </a>
52
+ <template v-for="helpLink in helpLinks" :key="helpLink.title">
53
+ <a
54
+ :href="helpLink.href"
55
+ class="dropdown-item"
56
+ rel="noopener"
57
+ target="_blank"
58
+ >
59
+ {{ helpLink.title }}
60
+ </a>
61
+ </template>
84
62
  </template>
85
63
  <hr class="dropdown-divider">
86
64
  <a
@@ -90,6 +68,12 @@
90
68
  {{ $t('Logout') }}
91
69
  </a>
92
70
  </template>
71
+ <router-link
72
+ class="dropdown-item"
73
+ to="/main/pub/contact"
74
+ >
75
+ {{ $t('Contact') }}
76
+ </router-link>
93
77
  </div>
94
78
  </div>
95
79
  </div>
@@ -104,20 +88,26 @@ export default defineComponent({
104
88
  props: {
105
89
  isEducation: { default: false, type: Boolean},
106
90
  },
107
-
108
91
  computed: {
92
+ helpLinks(){
93
+ return [
94
+ {title:this.$t('Help'), href:'https://help.octopus.saooti.com/Aide/'},
95
+ {title:this.$t('TutoMag'),href:"https://help.octopus.saooti.com/"}];
96
+ },
97
+ routerBackoffice(){
98
+ return [
99
+ {title:this.$t('Upload'),class:"btn btn-primary w-100", path:'/main/priv/upload', condition: (state.generalParameters.isContribution as boolean)},
100
+ {title:this.$t('My space'),class:"show-phone dropdown-item", path:'/main/priv/backoffice', condition: true},
101
+ {title:this.$t('Edit my profile'),class:"dropdown-item", path:'/main/priv/edit/profile', condition: true},
102
+ {title:this.$t('Edit my organisation'),class:"dropdown-item", path:'/main/priv/edit/organisation', condition: (state.generalParameters.isOrganisation as boolean)}];
103
+ },
104
+
109
105
  isPodcastmaker(): boolean {
110
106
  return (state.generalParameters.podcastmaker as boolean);
111
107
  },
112
108
  authenticated(): boolean {
113
109
  return this.$store.state.authentication.isAuthenticated;
114
110
  },
115
- isOrganisation(): boolean {
116
- return (state.generalParameters.isOrganisation as boolean);
117
- },
118
- isContribution(): boolean {
119
- return (state.generalParameters.isContribution as boolean);
120
- },
121
111
  },
122
112
 
123
113
  methods: {
@@ -131,13 +131,9 @@ export default defineComponent({
131
131
  async onOrganisationSelected(organisation: Organisation|undefined) {
132
132
  if (organisation && organisation.id) {
133
133
  await this.selectOrganisation(organisation.id);
134
- } else {
135
- if (this.$route.query.productor) {
136
- const queries = this.$route.query;
137
- this.$router.push({ query: {...queries, ...{productor: undefined} } });
138
- }
139
- this.$store.commit('filterOrga', { orgaId: undefined });
134
+ return;
140
135
  }
136
+ this.removeSelectedOrga();
141
137
  },
142
138
  },
143
139
  })
@@ -149,7 +145,7 @@ export default defineComponent({
149
145
  position: fixed;
150
146
  top: 3rem;
151
147
  bottom: 0;
152
- left: 0;
148
+ right: 0;
153
149
  z-index: 10;
154
150
  background: #fff;
155
151
  width: 20%;