@saooti/octopus-sdk 1.0.0 → 29.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.
Files changed (230) hide show
  1. package/README.md +73 -0
  2. package/index.d.ts +4 -0
  3. package/index.ts +12 -0
  4. package/package.json +61 -39
  5. package/public/css/fonts/saooti-ui.eot +0 -0
  6. package/public/css/fonts/saooti-ui.svg +30 -19
  7. package/public/css/fonts/saooti-ui.ttf +0 -0
  8. package/public/css/fonts/saooti-ui.woff +0 -0
  9. package/public/css/fonts/style.css +48 -5
  10. package/public/img/ACPM.png +0 -0
  11. package/public/img/article.png +0 -0
  12. package/src/App.vue +97 -31
  13. package/src/api/comments.ts +3 -1
  14. package/src/api/emissions.ts +5 -2
  15. package/src/api/initialize.ts +3 -2
  16. package/src/api/podcasts.ts +5 -2
  17. package/src/api/profile.ts +4 -2
  18. package/src/api/studio.ts +12 -1
  19. package/src/assets/bootstrap-diff.scss +265 -0
  20. package/src/assets/form.scss +23 -0
  21. package/src/assets/general.scss +47 -20
  22. package/src/assets/modal.scss +9 -10
  23. package/src/assets/multiselect.scss +19 -2
  24. package/src/assets/octopus-library.scss +16 -4
  25. package/src/assets/share.scss +343 -0
  26. package/src/components/display/aggregator/RssSection.vue +4 -4
  27. package/src/components/display/categories/CategoryChooser.vue +152 -105
  28. package/src/components/display/categories/CategoryFilter.vue +108 -0
  29. package/src/components/display/categories/CategoryList.vue +138 -109
  30. package/src/components/display/comments/AddCommentModal.vue +104 -87
  31. package/src/components/display/comments/CommentInput.vue +137 -118
  32. package/src/components/display/comments/CommentItem.vue +155 -137
  33. package/src/components/display/comments/CommentList.vue +142 -120
  34. package/src/components/display/comments/CommentParentInfo.vue +39 -35
  35. package/src/components/display/comments/CommentPlayer.vue +54 -48
  36. package/src/components/display/comments/CommentSection.vue +57 -58
  37. package/src/components/display/edit/EditBox.vue +4 -4
  38. package/src/components/display/edit/EditCommentBox.vue +25 -31
  39. package/src/components/display/emission/EmissionChooser.vue +82 -80
  40. package/src/components/display/emission/EmissionInlineList.vue +118 -105
  41. package/src/components/display/emission/EmissionItem.vue +66 -167
  42. package/src/components/display/emission/EmissionList.vue +96 -122
  43. package/src/components/display/emission/EmissionPlayerItem.vue +131 -126
  44. package/src/components/display/filter/AdvancedSearch.vue +306 -372
  45. package/src/components/display/filter/CategoryFilter.vue +117 -0
  46. package/src/components/display/filter/MonetizableFilter.vue +24 -10
  47. package/src/components/display/filter/ProductorSearch.vue +131 -135
  48. package/src/components/display/filter/RubriqueChoice.vue +104 -0
  49. package/src/components/display/filter/RubriqueFilter.vue +235 -0
  50. package/src/components/display/live/CountDown.vue +30 -29
  51. package/src/components/display/live/LiveHorizontalList.vue +40 -34
  52. package/src/components/display/live/LiveItem.vue +146 -158
  53. package/src/components/display/live/LiveList.vue +167 -154
  54. package/src/components/display/organisation/OrganisationChooser.vue +125 -124
  55. package/src/components/display/organisation/OrganisationChooserLight.vue +40 -47
  56. package/src/components/display/participant/ParticipantItem.vue +92 -108
  57. package/src/components/display/participant/ParticipantList.vue +76 -69
  58. package/src/components/display/playlist/PlaylistItem.vue +45 -56
  59. package/src/components/display/playlist/PlaylistList.vue +57 -48
  60. package/src/components/display/playlist/PodcastList.vue +94 -70
  61. package/src/components/display/podcasts/AnimatorsItem.vue +26 -23
  62. package/src/components/display/podcasts/ParticipantDescription.vue +115 -0
  63. package/src/components/display/podcasts/PodcastFilterList.vue +84 -85
  64. package/src/components/display/podcasts/PodcastImage.vue +244 -208
  65. package/src/components/display/podcasts/PodcastInlineList.vue +145 -207
  66. package/src/components/display/podcasts/PodcastItem.vue +150 -132
  67. package/src/components/display/podcasts/PodcastList.vue +89 -110
  68. package/src/components/display/podcasts/TagList.vue +23 -16
  69. package/src/components/display/rubriques/RubriqueChooser.vue +137 -123
  70. package/src/components/display/rubriques/RubriqueList.vue +227 -0
  71. package/src/components/display/sharing/PlayerParameters.vue +154 -106
  72. package/src/components/display/sharing/QrCode.vue +58 -0
  73. package/src/components/display/sharing/ShareButtons.vue +214 -92
  74. package/src/components/display/sharing/ShareDistribution.vue +110 -121
  75. package/src/components/display/sharing/SharePlayer.vue +245 -190
  76. package/src/components/display/sharing/SubscribeButtons.vue +130 -66
  77. package/src/components/display/studio/RecordingItemButton.vue +4 -4
  78. package/src/components/misc/ErrorMessage.vue +21 -16
  79. package/src/components/misc/Footer.vue +131 -66
  80. package/src/components/misc/HomeDropdown.vue +166 -123
  81. package/src/components/misc/LeftMenu.vue +151 -134
  82. package/src/components/misc/Player.vue +332 -328
  83. package/src/components/misc/Snackbar.vue +27 -29
  84. package/src/components/misc/TopBar.vue +204 -174
  85. package/src/components/misc/modal/ClipboardModal.vue +46 -26
  86. package/src/components/misc/modal/MessageModal.vue +67 -51
  87. package/src/components/misc/modal/NewsletterModal.vue +179 -136
  88. package/src/components/misc/modal/QrCodeModal.vue +83 -0
  89. package/src/components/misc/modal/ShareModalPlayer.vue +133 -74
  90. package/src/components/mixins/functions.ts +21 -18
  91. package/src/components/mixins/init.ts +24 -0
  92. package/src/components/mixins/organisationFilter.ts +24 -0
  93. package/src/components/pages/Category.vue +26 -26
  94. package/src/components/pages/Emission.vue +120 -92
  95. package/src/components/pages/Emissions.vue +109 -86
  96. package/src/components/pages/Home.vue +70 -16
  97. package/src/components/pages/Lives.vue +57 -47
  98. package/src/components/pages/Participant.vue +93 -77
  99. package/src/components/pages/Participants.vue +44 -31
  100. package/src/components/pages/Playlist.vue +63 -52
  101. package/src/components/pages/Playlists.vue +41 -39
  102. package/src/components/pages/Podcast.vue +265 -251
  103. package/src/components/pages/Podcasts.vue +135 -104
  104. package/src/components/pages/Rubrique.vue +25 -19
  105. package/src/components/pages/Search.vue +71 -67
  106. package/src/helper/dom.ts +2 -2
  107. package/src/helper/duration.ts +18 -8
  108. package/src/locale/educationen.ts +14 -0
  109. package/src/locale/en.ts +299 -1
  110. package/src/locale/fr.ts +25 -10
  111. package/src/locale/messages.ts +3 -2
  112. package/src/main.ts +54 -32
  113. package/src/router/router.ts +184 -159
  114. package/src/shims-tsx.d.ts +13 -0
  115. package/src/shims-vue-recaptcha-v3.d.ts +9 -0
  116. package/src/shims-vue.d.ts +5 -6
  117. package/src/store/AppStore.ts +36 -171
  118. package/src/store/class/category.ts +8 -0
  119. package/src/store/class/comment.ts +17 -0
  120. package/src/store/class/conference.ts +27 -0
  121. package/src/store/class/customPlayer.ts +8 -0
  122. package/src/store/class/emission.ts +20 -0
  123. package/src/store/class/fetchParam.ts +16 -0
  124. package/src/store/class/media.ts +13 -0
  125. package/src/store/class/organisation.ts +19 -0
  126. package/src/store/class/participant.ts +12 -0
  127. package/src/store/class/person.ts +13 -0
  128. package/src/store/class/player.ts +12 -0
  129. package/src/store/class/playlist.ts +15 -0
  130. package/src/store/class/podcast.ts +37 -0
  131. package/src/store/class/rubriquage.ts +9 -0
  132. package/src/store/class/rubriquageFilter.ts +5 -0
  133. package/src/store/class/rubrique.ts +8 -0
  134. package/src/store/paramStore.ts +70 -29
  135. package/src/store/typeAppStore.ts +171 -237
  136. package/src/vuex-shim.d.ts +8 -0
  137. package/tsconfig.json +4 -0
  138. package/vue.config.js +14 -0
  139. package/public/img/ACPM.PNG +0 -0
  140. package/src/assets/bootstrap_scss/_alert.scss +0 -51
  141. package/src/assets/bootstrap_scss/_badge.scss +0 -54
  142. package/src/assets/bootstrap_scss/_breadcrumb.scss +0 -42
  143. package/src/assets/bootstrap_scss/_button-group.scss +0 -164
  144. package/src/assets/bootstrap_scss/_buttons.scss +0 -291
  145. package/src/assets/bootstrap_scss/_card.scss +0 -278
  146. package/src/assets/bootstrap_scss/_carousel.scss +0 -197
  147. package/src/assets/bootstrap_scss/_close.scss +0 -41
  148. package/src/assets/bootstrap_scss/_code.scss +0 -48
  149. package/src/assets/bootstrap_scss/_custom-forms.scss +0 -522
  150. package/src/assets/bootstrap_scss/_dropdown.scss +0 -201
  151. package/src/assets/bootstrap_scss/_forms.scss +0 -352
  152. package/src/assets/bootstrap_scss/_functions.scss +0 -134
  153. package/src/assets/bootstrap_scss/_grid.scss +0 -69
  154. package/src/assets/bootstrap_scss/_images.scss +0 -42
  155. package/src/assets/bootstrap_scss/_input-group.scss +0 -191
  156. package/src/assets/bootstrap_scss/_jumbotron.scss +0 -17
  157. package/src/assets/bootstrap_scss/_list-group.scss +0 -158
  158. package/src/assets/bootstrap_scss/_media.scss +0 -8
  159. package/src/assets/bootstrap_scss/_mixins.scss +0 -47
  160. package/src/assets/bootstrap_scss/_modal.scss +0 -243
  161. package/src/assets/bootstrap_scss/_nav.scss +0 -120
  162. package/src/assets/bootstrap_scss/_navbar.scss +0 -324
  163. package/src/assets/bootstrap_scss/_pagination.scss +0 -74
  164. package/src/assets/bootstrap_scss/_popover.scss +0 -170
  165. package/src/assets/bootstrap_scss/_print.scss +0 -141
  166. package/src/assets/bootstrap_scss/_progress.scss +0 -46
  167. package/src/assets/bootstrap_scss/_reboot.scss +0 -482
  168. package/src/assets/bootstrap_scss/_root.scss +0 -20
  169. package/src/assets/bootstrap_scss/_spinners.scss +0 -55
  170. package/src/assets/bootstrap_scss/_tables.scss +0 -185
  171. package/src/assets/bootstrap_scss/_toasts.scss +0 -44
  172. package/src/assets/bootstrap_scss/_tooltip.scss +0 -115
  173. package/src/assets/bootstrap_scss/_transitions.scss +0 -20
  174. package/src/assets/bootstrap_scss/_type.scss +0 -125
  175. package/src/assets/bootstrap_scss/_utilities.scss +0 -17
  176. package/src/assets/bootstrap_scss/_variables.scss +0 -1145
  177. package/src/assets/bootstrap_scss/bootstrap-grid.scss +0 -29
  178. package/src/assets/bootstrap_scss/bootstrap-reboot.scss +0 -12
  179. package/src/assets/bootstrap_scss/bootstrap.scss +0 -44
  180. package/src/assets/bootstrap_scss/mixins/_alert.scss +0 -13
  181. package/src/assets/bootstrap_scss/mixins/_background-variant.scss +0 -22
  182. package/src/assets/bootstrap_scss/mixins/_badge.scss +0 -17
  183. package/src/assets/bootstrap_scss/mixins/_border-radius.scss +0 -63
  184. package/src/assets/bootstrap_scss/mixins/_box-shadow.scss +0 -20
  185. package/src/assets/bootstrap_scss/mixins/_breakpoints.scss +0 -123
  186. package/src/assets/bootstrap_scss/mixins/_buttons.scss +0 -110
  187. package/src/assets/bootstrap_scss/mixins/_caret.scss +0 -62
  188. package/src/assets/bootstrap_scss/mixins/_clearfix.scss +0 -7
  189. package/src/assets/bootstrap_scss/mixins/_deprecate.scss +0 -10
  190. package/src/assets/bootstrap_scss/mixins/_float.scss +0 -14
  191. package/src/assets/bootstrap_scss/mixins/_forms.scss +0 -177
  192. package/src/assets/bootstrap_scss/mixins/_gradients.scss +0 -45
  193. package/src/assets/bootstrap_scss/mixins/_grid-framework.scss +0 -71
  194. package/src/assets/bootstrap_scss/mixins/_grid.scss +0 -69
  195. package/src/assets/bootstrap_scss/mixins/_hover.scss +0 -37
  196. package/src/assets/bootstrap_scss/mixins/_image.scss +0 -36
  197. package/src/assets/bootstrap_scss/mixins/_list-group.scss +0 -21
  198. package/src/assets/bootstrap_scss/mixins/_lists.scss +0 -7
  199. package/src/assets/bootstrap_scss/mixins/_nav-divider.scss +0 -11
  200. package/src/assets/bootstrap_scss/mixins/_pagination.scss +0 -22
  201. package/src/assets/bootstrap_scss/mixins/_reset-text.scss +0 -17
  202. package/src/assets/bootstrap_scss/mixins/_resize.scss +0 -6
  203. package/src/assets/bootstrap_scss/mixins/_screen-reader.scss +0 -34
  204. package/src/assets/bootstrap_scss/mixins/_size.scss +0 -7
  205. package/src/assets/bootstrap_scss/mixins/_table-row.scss +0 -39
  206. package/src/assets/bootstrap_scss/mixins/_text-emphasis.scss +0 -17
  207. package/src/assets/bootstrap_scss/mixins/_text-hide.scss +0 -11
  208. package/src/assets/bootstrap_scss/mixins/_text-truncate.scss +0 -8
  209. package/src/assets/bootstrap_scss/mixins/_transition.scss +0 -16
  210. package/src/assets/bootstrap_scss/mixins/_visibility.scss +0 -8
  211. package/src/assets/bootstrap_scss/utilities/_align.scss +0 -8
  212. package/src/assets/bootstrap_scss/utilities/_background.scss +0 -19
  213. package/src/assets/bootstrap_scss/utilities/_borders.scss +0 -75
  214. package/src/assets/bootstrap_scss/utilities/_clearfix.scss +0 -3
  215. package/src/assets/bootstrap_scss/utilities/_display.scss +0 -26
  216. package/src/assets/bootstrap_scss/utilities/_embed.scss +0 -39
  217. package/src/assets/bootstrap_scss/utilities/_flex.scss +0 -51
  218. package/src/assets/bootstrap_scss/utilities/_float.scss +0 -11
  219. package/src/assets/bootstrap_scss/utilities/_overflow.scss +0 -5
  220. package/src/assets/bootstrap_scss/utilities/_position.scss +0 -32
  221. package/src/assets/bootstrap_scss/utilities/_screenreaders.scss +0 -11
  222. package/src/assets/bootstrap_scss/utilities/_shadows.scss +0 -6
  223. package/src/assets/bootstrap_scss/utilities/_sizing.scss +0 -20
  224. package/src/assets/bootstrap_scss/utilities/_spacing.scss +0 -73
  225. package/src/assets/bootstrap_scss/utilities/_stretched-link.scss +0 -19
  226. package/src/assets/bootstrap_scss/utilities/_text.scss +0 -72
  227. package/src/assets/bootstrap_scss/utilities/_visibility.scss +0 -13
  228. package/src/assets/bootstrap_scss/vendor/_rfs.scss +0 -204
  229. package/src/shims-vuex.d.ts +0 -7
  230. package/src/views/Home.vue +0 -18
@@ -1,19 +1,25 @@
1
1
  <template>
2
- <div class="snack-bar-wrap" :style="style.wrap">
3
- <template v-for="(msg, i) in msgs" :key="i">
2
+ <div
3
+ class="snack-bar-wrap"
4
+ :style="style.wrap"
5
+ >
6
+ <template
7
+ v-for="(msg, i) in msgs"
8
+ :key="i"
9
+ >
4
10
  <div
5
11
  class="snack-bar"
6
12
  :style="style.bar(msg.color)"
7
13
  @click="pop(i)"
8
14
  v-html="msg.msg.message || msg.msg"
9
- ></div>
10
- <br/>
15
+ />
16
+ <br>
11
17
  </template>
12
18
  </div>
13
19
  </template>
14
20
 
15
21
  <script lang="ts">
16
- /* const getStyle = (baseSize: any, position:any) => {
22
+ const getStyle = (baseSize: string, position: any) => {
17
23
  const c = (f: number) => `calc(${f} * ${baseSize})`;
18
24
  const { pos, textAlign } = position;
19
25
  return {
@@ -45,36 +51,28 @@
45
51
  userSelect: 'none',
46
52
  }),
47
53
  };
48
- }; */
49
- import { defineComponent } from 'vue';
54
+ };
55
+ import { defineComponent } from 'vue'
50
56
  export default defineComponent({
51
- /* name: 'Snackbar',
57
+ name: 'Snackbar',
52
58
  props: {
53
- colors: {
54
- default() {
55
- return {
59
+ colors: { default: ()=> ({
56
60
  open: '#333',
57
61
  info: '#3DBD7D',
58
62
  error: '#FA7377',
59
63
  warn: '#FF6600',
60
- };
61
- },
62
- type: Object,
63
- },
64
- position: {
65
- default: 'top-center',
66
- type: String,
67
- },
64
+ }), type: Object},
65
+ position: { default: 'top-center', type: String},
68
66
  },
69
67
  data() {
70
68
  return {
71
69
  msgs: [] as any,
72
- holdTime: 3000,
70
+ holdTime: 5000,
73
71
  baseSize: '5rem',
74
72
  };
75
73
  },
76
74
  computed: {
77
- $_position():any {
75
+ $_position(): any {
78
76
  const [p, textAlign] = this.position.toString().split('-');
79
77
  return {
80
78
  pos: ['top', 'bottom'].includes(p) ? p : 'top',
@@ -83,27 +81,27 @@ export default defineComponent({
83
81
  : 'center',
84
82
  };
85
83
  },
86
- style() {
84
+ style(): any {
87
85
  return getStyle(this.baseSize, this.$_position);
88
86
  },
89
87
  },
90
88
  methods: {
91
- info(msg: any) {
89
+ info(msg: any): boolean {
92
90
  const color = this.colors.info;
93
91
  this.open({ color, msg }, false);
94
92
  return true;
95
93
  },
96
- error(msg: any) {
94
+ error(msg: any): boolean {
97
95
  const color = this.colors.error;
98
96
  this.open({ color, msg }, false);
99
97
  return false;
100
98
  },
101
- warn(msg: any) {
99
+ warn(msg: any): boolean {
102
100
  const color = this.colors.warn;
103
101
  this.open({ color, msg }, false);
104
102
  return true;
105
103
  },
106
- open(message: { color?: any; msg?: any; }, isOpen = true) {
104
+ open(message: any, isOpen = true): boolean {
107
105
  let msg;
108
106
  let color;
109
107
  if (!isOpen) {
@@ -123,10 +121,10 @@ export default defineComponent({
123
121
 
124
122
  return true;
125
123
  },
126
- pop(i = 0) {
124
+ pop(i = 0): void {
127
125
  if (this.msgs[i]) clearTimeout(this.msgs[i].timer);
128
126
  this.msgs.splice(i, 1);
129
127
  },
130
- }, */
131
- });
128
+ },
129
+ })
132
130
  </script>
@@ -1,116 +1,133 @@
1
1
  <template>
2
2
  <div
3
- class="top-bar-container position-sticky"
4
- v-bind:class="{ 'shadow-element': scrolled }"
5
3
  v-if="init"
4
+ class="top-bar-container position-sticky"
5
+ :class="{ 'shadow-element': scrolled }"
6
6
  >
7
7
  <div class="top-bar">
8
8
  <div
9
9
  class="hamburger-menu"
10
- v-on:click="onDisplayMenu(false)"
11
10
  :aria-label="$t('open left Menu')"
11
+ @click="onDisplayMenu(false)"
12
12
  >
13
- <div class="saooti-burger-menu h3"></div>
13
+ <div class="saooti-burger-menu h3" />
14
14
  </div>
15
15
  <router-link
16
16
  :to="{
17
17
  name: 'home',
18
- query: { productor: this.$store.state.filter.organisationId },
18
+ query: { productor: $store.state.filter.organisationId,
19
+ iabId: $store.state.filter.iab ? $store.state.filter.iab.id : undefined,
20
+ rubriquesId: rubriqueQueryParam},
19
21
  }"
20
22
  >
21
- <div class="top-bar-logo m-3" v-on:click="onDisplayMenu(true)">
23
+ <div
24
+ class="top-bar-logo m-3"
25
+ @click="onDisplayMenu(true)"
26
+ >
22
27
  <img
28
+ v-if="!filterOrga || '' === imgUrl"
23
29
  :src="logoUrl"
24
30
  :alt="$t('Logo of main page')"
25
31
  :class="isEducation ? 'educationLogo' : ''"
26
- v-if="!filterOrga || undefined === imgUrl"
27
- />
28
- <img :src="imgUrl" :alt="$t('Logo of main page')" v-else />
32
+ >
33
+ <img
34
+ v-else
35
+ :src="imgUrl"
36
+ :alt="$t('Logo of main page')"
37
+ >
29
38
  </div>
30
39
  </router-link>
31
40
  <OrganisationChooserLight
41
+ v-if="!isPodcastmaker"
32
42
  width="auto"
33
43
  page="topBar"
34
44
  :defaultanswer="$t('No organisation filter')"
35
- @selected="onOrganisationSelected"
36
45
  :value="organisationId"
37
46
  :light="true"
38
- class="mr-2 hide-top-bar"
47
+ class="me-2 hide-top-bar"
39
48
  :reset="reset"
40
- v-if="!isPodcastmaker"
49
+ @selected="onOrganisationSelected"
41
50
  />
42
51
  <div class="d-flex align-items-center justify-content-center flex-grow">
43
52
  <router-link
44
53
  v-if="
45
54
  isLiveTab &&
46
- !isPodcastmaker &&
47
55
  ((filterOrga && filterOrgaLive) || !filterOrga)
48
56
  "
49
57
  :to="{
50
58
  name: 'lives',
51
- query: { productor: this.$store.state.filter.organisationId },
59
+ query: { productor: $store.state.filter.organisationId },
52
60
  }"
53
- class="linkHover p-3 text-dark font-weight-bold"
54
- >{{ $t('Live') }}</router-link
61
+ class="linkHover p-3 text-dark fw-bold"
55
62
  >
63
+ {{ $t('Live') }}
64
+ </router-link>
56
65
  <router-link
57
66
  :to="{
58
67
  name: 'podcasts',
59
- query: { productor: this.$store.state.filter.organisationId },
68
+ query: { productor: $store.state.filter.organisationId,
69
+ iabId: $store.state.filter.iab ? $store.state.filter.iab.id : undefined,
70
+ rubriquesId: rubriqueQueryParam},
60
71
  }"
61
- class="linkHover p-3 text-dark font-weight-bold"
62
- >{{ $t('Podcasts') }}</router-link
72
+ class="linkHover p-3 text-dark fw-bold"
63
73
  >
74
+ {{ $t('Podcasts') }}
75
+ </router-link>
64
76
  <router-link
65
77
  :to="{
66
78
  name: 'emissions',
67
- query: { productor: this.$store.state.filter.organisationId },
79
+ query: { productor: $store.state.filter.organisationId,
80
+ iabId: $store.state.filter.iab ? $store.state.filter.iab.id : undefined,
81
+ rubriquesId: rubriqueQueryParam },
68
82
  }"
69
- class="linkHover p-3 text-dark font-weight-bold"
70
- >{{ $t('Emissions') }}</router-link
83
+ class="linkHover p-3 text-dark fw-bold"
71
84
  >
85
+ {{ $t('Emissions') }}
86
+ </router-link>
72
87
  <router-link
73
88
  :to="{
74
89
  name: 'participants',
75
- query: { productor: this.$store.state.filter.organisationId },
90
+ query: { productor: $store.state.filter.organisationId },
76
91
  }"
77
- class="linkHover p-3 text-dark font-weight-bold"
78
- >{{ $t('Speakers') }}</router-link
92
+ class="linkHover p-3 text-dark fw-bold"
79
93
  >
94
+ {{ $t('Speakers') }}
95
+ </router-link>
80
96
  <router-link
81
97
  :to="{
82
98
  name: 'playlists',
83
- query: { productor: this.$store.state.filter.organisationId },
99
+ query: { productor: $store.state.filter.organisationId },
84
100
  }"
85
- class="linkHover p-3 text-dark font-weight-bold"
86
- >{{ $t('Playlists') }}</router-link
101
+ class="linkHover p-3 text-dark fw-bold"
87
102
  >
103
+ {{ $t('Playlists') }}
104
+ </router-link>
88
105
  <router-link
106
+ v-if="!isPodcastmaker && (!filterOrga || isEducation)"
89
107
  :to="{
90
108
  name: 'productors',
91
- query: { productor: this.$store.state.filter.organisationId },
109
+ query: { productor: $store.state.filter.organisationId },
92
110
  }"
93
- class="linkHover p-3 text-dark font-weight-bold"
94
- v-if="!isPodcastmaker && (!filterOrga || isEducation)"
95
- >{{ $t('Productors') }}</router-link
111
+ class="linkHover p-3 text-dark fw-bold"
96
112
  >
113
+ {{ $t('Productors') }}
114
+ </router-link>
97
115
  </div>
98
116
  <div class="d-flex flex-column">
99
117
  <div class="d-flex justify-content-end hostedBy hide-phone">
100
- <span>{{ $t('Hosted by') }}</span
101
- ><span class="ml-1 mr-1 primary-color">Saooti</span>
118
+ <span>{{ $t('Hosted by') }}</span><span class="ms-1 me-1 primary-color">Saooti</span>
102
119
  </div>
103
120
  <div class="d-flex align-items-center justify-content-end flex-no-wrap">
104
- <HomeDropdown :isEducation="isEducation" />
121
+ <HomeDropdown :is-education="isEducation" />
105
122
  <router-link
106
123
  :aria-label="$t('Search')"
107
124
  :to="{
108
125
  name: 'podcasts',
109
- query: { productor: this.$store.state.filter.organisationId },
126
+ query: { productor: $store.state.filter.organisationId },
110
127
  }"
111
128
  >
112
129
  <div class="btn admin-button m-1">
113
- <i class="saooti-search text-dark"></i>
130
+ <i class="saooti-search text-dark" />
114
131
  </div>
115
132
  </router-link>
116
133
  </div>
@@ -118,6 +135,147 @@
118
135
  </div>
119
136
  </div>
120
137
  </template>
138
+
139
+ <script lang="ts">
140
+ import { state } from '../../store/paramStore';
141
+ import HomeDropdown from './HomeDropdown.vue';
142
+ import { Organisation } from '@/store/class/organisation';
143
+ import { orgaFilter } from '../mixins/organisationFilter';
144
+ import { RubriquageFilter } from '@/store/class/rubriquageFilter';
145
+ import { defineComponent,defineAsyncComponent } from 'vue';
146
+ const OrganisationChooserLight = defineAsyncComponent(() => import('../display/organisation/OrganisationChooserLight.vue'));
147
+ export default defineComponent({
148
+ name: 'TopBar',
149
+
150
+ components: {
151
+ OrganisationChooserLight,
152
+ HomeDropdown,
153
+ },
154
+ mixins:[orgaFilter],
155
+
156
+ props: {
157
+ displayMenu: { default: false, type: Boolean},
158
+ isEducation: { default: false, type: Boolean},
159
+ },
160
+ emits: ['update:displayMenu'],
161
+
162
+ data() {
163
+ return {
164
+ scrolled: false as boolean,
165
+ oldScrollY: 0 as number,
166
+ minScroll: 0 as number,
167
+ organisationId: undefined as string | undefined,
168
+ reset: false as boolean,
169
+ init: false as boolean,
170
+ dummyParam: new Date().getTime().toString() as string,
171
+ };
172
+ },
173
+
174
+
175
+ computed: {
176
+ rubriqueQueryParam(): string|undefined{
177
+ if(this.$store.state.filter && this.$store.state.filter.rubriqueFilter && this.$store.state.filter.rubriqueFilter.length){
178
+ return this.$store.state.filter.rubriqueFilter.map((value: RubriquageFilter) => value.rubriquageId+':'+value.rubriqueId).join();
179
+ }
180
+ return undefined;
181
+ },
182
+ logoUrl(): string {
183
+ if (this.isEducation) return '/img/logo_education.png';
184
+ return '/img/logo_octopus_final.svg';
185
+ },
186
+ isPodcastmaker(): boolean {
187
+ return state.generalParameters.podcastmaker;
188
+ },
189
+ isLiveTab(): boolean {
190
+ return state.generalParameters.isLiveTab;
191
+ },
192
+ filterOrga(): string {
193
+ return this.$store.state.filter.organisationId;
194
+ },
195
+ filterOrgaLive(): string {
196
+ return this.$store.state.filter.live;
197
+ },
198
+ imgUrl(): string {
199
+ if (
200
+ this.$store.state.filter.imgUrl &&
201
+ !this.$store.state.filter.imgUrl.includes('emptypodcast')
202
+ )
203
+ return this.$store.state.filter.imgUrl + '?dummy=' + this.dummyParam;
204
+ return '';
205
+ },
206
+ },
207
+ watch: {
208
+ filterOrga(): void {
209
+ if (this.filterOrga) {
210
+ this.organisationId = this.filterOrga;
211
+ } else {
212
+ this.reset = !this.reset;
213
+ }
214
+ },
215
+ },
216
+
217
+ mounted() {
218
+ if (this.filterOrga) {
219
+ this.organisationId = this.filterOrga;
220
+ }
221
+ this.init = true;
222
+ window.addEventListener('scroll', this.handleScroll);
223
+ },
224
+
225
+ beforeUnmount() {
226
+ window.removeEventListener('scroll', this.handleScroll);
227
+ },
228
+ methods: {
229
+ handleScroll(): void {
230
+ if (
231
+ window.scrollY - this.oldScrollY > 0 &&
232
+ window.scrollY > 1 &&
233
+ document.body.offsetHeight - window.innerHeight > 40
234
+ ) {
235
+ this.scrolled = true;
236
+ this.minScroll = 0;
237
+ } else if (
238
+ window.scrollY - this.oldScrollY < 0 &&
239
+ window.scrollY < 1 &&
240
+ this.minScroll > 20
241
+ ) {
242
+ this.scrolled = false;
243
+ this.minScroll = 0;
244
+ }
245
+ this.oldScrollY = window.scrollY;
246
+ if (this.minScroll < window.scrollY) {
247
+ this.minScroll = window.scrollY;
248
+ }
249
+ if (!this.scrolled) {
250
+ this.$emit('update:displayMenu', false);
251
+ }
252
+ },
253
+ onDisplayMenu(param: boolean): void {
254
+ if (true === param) {
255
+ this.$emit('update:displayMenu', false);
256
+ } else {
257
+ this.$emit('update:displayMenu', !this.displayMenu);
258
+ }
259
+ },
260
+ async onOrganisationSelected(organisation: Organisation | undefined): Promise<void> {
261
+ const queries = this.$route.query;
262
+ if (organisation && organisation.id) {
263
+ if (this.$route.query.productor !== organisation.id) {
264
+ this.$router.push({ query: {...queries, ...{productor: organisation.id} } });
265
+ }
266
+ await this.selectOrganisation(organisation.id);
267
+ } else {
268
+ this.organisationId = undefined;
269
+ if (this.$route.query.productor) {
270
+ this.$router.push({ query: { ...queries, ...{productor: undefined} } });
271
+ }
272
+ this.$store.commit('filterOrga', { orgaId: undefined });
273
+ }
274
+ },
275
+ },
276
+ })
277
+ </script>
278
+
121
279
  <style lang="scss">
122
280
  .top-bar-container {
123
281
  top: 0;
@@ -246,142 +404,14 @@
246
404
  }
247
405
  }
248
406
  }
249
- }
250
- </style>
251
-
252
- <script lang="ts">
253
- import { state } from '../../store/paramStore';
254
- import OrganisationChooserLight from '../display/organisation/OrganisationChooserLight.vue';
255
- import HomeDropdown from './HomeDropdown.vue';
256
- const octopusApi = require('@saooti/octopus-api');
257
-
258
- import { defineComponent } from 'vue'
259
- export default defineComponent({
260
- name: 'TopBar',
261
-
262
- components: {
263
- OrganisationChooserLight,
264
- HomeDropdown,
265
- },
266
-
267
- mounted() {
268
- if (this.filterOrga) {
269
- this.organisationId = this.filterOrga;
270
- }
271
- this.init = true;
272
- window.addEventListener('scroll', this.handleScroll);
273
- },
274
- beforeUnmount() {
275
- window.removeEventListener('scroll', this.handleScroll);
276
- },
277
-
278
- props: ['displayMenu', 'isEducation'],
279
- emits: ['update:displayMenu'],
280
-
281
- data() {
282
- return {
283
- scrolled: false,
284
- oldScrollY: 0,
285
- minScroll: 0,
286
- organisationId: undefined as any,
287
- reset: false,
288
- init: false,
289
- dummyParam: new Date().getTime().toString(),
290
- };
291
- },
292
-
293
- computed: {
294
- logoUrl() {
295
- if (this.isEducation) return '/img/logo_education.png';
296
- return '/img/logo_octopus_final.svg';
297
- },
298
- isPodcastmaker() {
299
- return state.generalParameters.podcastmaker;
300
- },
301
- isLiveTab() {
302
- return state.generalParameters.isLiveTab;
303
- },
304
- filterOrga():any {
305
- return this.$store.state.filter.organisationId;
306
- },
307
- filterOrgaLive():any {
308
- return this.$store.state.filter.live;
309
- },
310
- imgUrl():any {
311
- if (
312
- this.$store.state.filter.imgUrl &&
313
- !this.$store.state.filter.imgUrl.includes('emptypodcast')
314
- )
315
- return this.$store.state.filter.imgUrl + '?dummy=' + this.dummyParam;
316
- return undefined;
317
- },
318
- },
319
-
320
- methods: {
321
- handleScroll() {
322
- if (
323
- window.scrollY - this.oldScrollY > 0 &&
324
- window.scrollY > 1 &&
325
- document.body.offsetHeight - window.innerHeight > 40
326
- ) {
327
- this.scrolled = true;
328
- this.minScroll = 0;
329
- } else if (
330
- window.scrollY - this.oldScrollY < 0 &&
331
- window.scrollY < 1 &&
332
- this.minScroll > 20
333
- ) {
334
- this.scrolled = false;
335
- this.minScroll = 0;
336
- }
337
- this.oldScrollY = window.scrollY;
338
- if (this.minScroll < window.scrollY) {
339
- this.minScroll = window.scrollY;
340
- }
341
- if (!this.scrolled) {
342
- this.$emit('update:displayMenu', false);
343
- }
344
- },
345
-
346
- onDisplayMenu(param: boolean) {
347
- if (true === param) {
348
- this.$emit('update:displayMenu', false);
349
- } else {
350
- this.$emit('update:displayMenu', !this.displayMenu);
351
- }
352
- },
353
-
354
- async onOrganisationSelected(organisation: any) {
355
- if (organisation && organisation.id) {
356
- if (this.$route.query.productor !== organisation.id) {
357
- this.$router.push({ query: { productor: organisation.id } });
358
- }
359
- this.$store.commit('filterOrga', {
360
- orgaId: organisation.id,
361
- imgUrl: organisation.imageUrl,
362
- });
363
- const isLive = await octopusApi.liveEnabledOrganisation(
364
- organisation.id
365
- );
366
- this.$store.commit('filterOrgaLive', isLive);
367
- } else {
368
- this.organisationId = undefined;
369
- if (this.$route.query.productor) {
370
- this.$router.push({ query: { productor: undefined } });
407
+ @media (max-width: 290px) {
408
+ .top-bar {
409
+ .top-bar-logo {
410
+ img {
411
+ display: none;
371
412
  }
372
- this.$store.commit('filterOrga', { orgaId: undefined });
373
- }
374
- },
375
- },
376
-
377
- watch: {
378
- filterOrga(newVal) {
379
- if (newVal) {
380
- this.organisationId = newVal;
381
- } else {
382
- this.reset = !this.reset;
383
413
  }
384
- },
385
- },
386
- });
387
- </script>
414
+ }
415
+ }
416
+ }
417
+ </style>