@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,3 +1,4 @@
1
+
1
2
  <template>
2
3
  <div class="page-box">
3
4
  <div
@@ -6,71 +7,84 @@
6
7
  isEmissionChooser ? 'justify-content-between' : 'justify-content-center'
7
8
  "
8
9
  >
9
- <h1 v-if="undefined === titlePage" class="flex-shrink">
10
+ <h1
11
+ v-if="undefined === titlePage"
12
+ class="flex-shrink"
13
+ >
10
14
  {{ $t('All podcasts') }}
11
15
  </h1>
12
- <h1 v-else class="flex-shrink">{{ titlePage }}</h1>
16
+ <h1
17
+ v-else
18
+ class="flex-shrink"
19
+ >
20
+ {{ titlePage }}
21
+ </h1>
13
22
  <EmissionChooser
14
- @selected="emissionSelected"
15
23
  v-if="isEmissionChooser"
16
24
  :defaultanswer="$t('No emission filter')"
17
25
  width="auto"
18
- class="ml-3"
26
+ class="ms-3"
27
+ @selected="emissionSelected"
19
28
  />
20
29
  </div>
21
30
  <ProductorSearch
22
- :organisationId="organisationId"
23
- :searchPattern="searchPattern"
31
+ v-if="isProductorSearch"
32
+ :organisation-id="organisationId"
33
+ :search-pattern="searchPattern"
24
34
  @updateOrganisationId="updateOrganisationId"
25
35
  @updateSearchPattern="updateSearchPattern"
26
- v-if="isProductorSearch"
27
36
  />
28
37
  <AdvancedSearch
29
- :isEducation="isEducation"
30
- :isEmission="false"
31
- :resetRubriquage="resetRubriquage"
32
- :isSearchBar="isProductorSearch"
33
- :sortCriteria="sortCriteria"
34
- @updateRubriquage="updateRubriquage"
35
- @updateRubrique="updateRubrique"
38
+ :is-education="isEducation"
39
+ :is-emission="false"
40
+ :reset-rubriquage="resetRubriquage"
41
+ :is-search-bar="isProductorSearch"
42
+ :sort-criteria="sortCriteria"
43
+ :organisation-id="organisationId"
44
+ @updateCategory="updateCategory"
45
+ @updateRubriquageFilter="updateRubriquageFilter"
36
46
  @updateMonetization="updateMonetization"
37
47
  @updateFromDate="updateFromDate"
38
48
  @updateToDate="updateToDate"
39
49
  @updateSortCriteria="updateSortCriteria"
40
50
  @includeHidden="updateHidden"
41
51
  @notValid="updateNotValid"
42
- :organisationId="organisationId"
43
52
  />
44
53
  <PodcastList
45
- :showCount="true"
54
+ :show-count="true"
46
55
  :first="first"
47
56
  :size="size"
48
- :organisationId="organisationId"
57
+ :organisation-id="organisationId"
49
58
  :query="searchPattern"
50
59
  :monetization="monetization"
51
- :emissionId="emissionId"
52
- :rubriqueId="rubriqueId"
53
- :rubriquageId="rubriquageId"
60
+ :emission-id="emissionId"
54
61
  :before="toDate"
55
62
  :after="fromDate"
56
- :sortCriteria="sortCriteria"
57
- :includeHidden="includeHidden"
58
- :noRubrique="noRubrique"
59
- :notValid="notValid"
63
+ :sort-criteria="sortCriteria"
64
+ :include-hidden="includeHidden"
65
+ :not-valid="notValid"
66
+ :iab-id="iabId"
67
+ :rubrique-id="rubriqueId"
68
+ :rubriquage-id="rubriquageId"
69
+ :no-rubriquage-id="noRubriquageId"
60
70
  />
61
71
  </div>
62
72
  </template>
63
- <style lang="scss"></style>
73
+
64
74
  <script lang="ts">
65
- // @ is an alias to /src
66
75
  import PodcastList from '../display/podcasts/PodcastList.vue';
67
76
  import { state } from '../../store/paramStore';
68
77
  import ProductorSearch from '../display/filter/ProductorSearch.vue';
69
78
  import AdvancedSearch from '../display/filter/AdvancedSearch.vue';
70
- import EmissionChooser from '../display/emission/EmissionChooser.vue';
79
+ import { Emission } from '@/store/class/emission';
80
+ import { Category } from '@/store/class/category';
81
+ import { RubriquageFilter } from '@/store/class/rubriquageFilter';
71
82
 
72
- import { defineComponent } from 'vue'
83
+ import { defineComponent, defineAsyncComponent } from 'vue';
84
+ const EmissionChooser = defineAsyncComponent(() => import('../display/emission/EmissionChooser.vue'));
73
85
  export default defineComponent({
86
+ name:"Podcasts",
87
+
74
88
  components: {
75
89
  PodcastList,
76
90
  ProductorSearch,
@@ -78,57 +92,48 @@ export default defineComponent({
78
92
  AdvancedSearch,
79
93
  },
80
94
 
81
- props: ['isEducation'],
82
-
83
- created() {
84
- if (this.$route.query.first) {
85
- this.first = this.$route.query.first;
86
- } else {
87
- this.first = 0;
88
- }
89
- if (this.$route.query.size) {
90
- this.size = this.$route.query.size;
91
- } else {
92
- this.size = 49;
93
- }
94
- if (this.$route.query.productor) {
95
- this.organisationId = this.$route.query.productor;
96
- } else if (this.$store.state.filter.organisationId) {
97
- this.organisationId = this.$store.state.filter.organisationId;
98
- }
99
- if (this.organisation && this.organisationRight) {
100
- this.includeHidden = true;
101
- }
95
+ props: {
96
+ firstRoute: { default: 0, type: Number},
97
+ sizeRoute: { default: 12, type: Number},
98
+ productor: { default: undefined, type: String},
99
+ isEducation: { default: false, type: Boolean},
102
100
  },
103
101
 
104
102
  data() {
105
103
  return {
106
- first: undefined as any,
107
- size: undefined as any,
108
- searchPattern: '',
109
- organisationId: undefined as any,
110
- monetization: undefined as any,
111
- rubriquageId: undefined as any,
112
- rubriqueId: undefined as any,
113
- emissionId: undefined as any,
114
- fromDate: undefined as any,
115
- toDate: undefined as any,
116
- resetRubriquage: false,
117
- includeHidden: false,
118
- noRubrique: undefined as any,
119
- sortCriteria: 'DATE',
120
- notValid: false,
104
+ first: 0 as number,
105
+ size: 49 as number,
106
+ searchPattern: '' as string,
107
+ organisationId: undefined as string|undefined,
108
+ monetization: 'UNDEFINED' as string, // UNDEFINED, YES, NO
109
+ emissionId: undefined as number|undefined,
110
+ fromDate: undefined as string|undefined,
111
+ toDate: undefined as string|undefined,
112
+ resetRubriquage: false as boolean,
113
+ includeHidden: false as boolean,
114
+ sortCriteria: 'DATE' as string, // SCORE, DATE, POPULARITY, NAME, LAST_PODCAST_DESC
115
+ notValid: false as boolean,
116
+ iabId: undefined as number | undefined,
117
+ noRubriquageId: [] as Array<number>,
118
+ rubriquageId: [] as Array<number>,
119
+ rubriqueId: [] as Array<number>,
121
120
  };
122
121
  },
123
122
 
124
123
  computed: {
125
- authenticated():boolean {
124
+ rubriqueFilter(): Array<RubriquageFilter>{
125
+ return this.$store.state.filter.rubriqueFilter;
126
+ },
127
+ categoryFilter(): Category|undefined{
128
+ return this.$store.state.filter.iab;
129
+ },
130
+ authenticated(): boolean {
126
131
  return state.generalParameters.authenticated;
127
132
  },
128
- myOrganisationId() {
133
+ myOrganisationId(): string {
129
134
  return state.generalParameters.organisationId;
130
135
  },
131
- organisationRight() {
136
+ organisationRight(): boolean {
132
137
  if (
133
138
  (this.authenticated && this.myOrganisationId === this.organisationId) ||
134
139
  state.generalParameters.isAdmin
@@ -136,67 +141,91 @@ export default defineComponent({
136
141
  return true;
137
142
  return false;
138
143
  },
139
- filterOrga():any {
144
+ filterOrga(): string|undefined {
140
145
  return this.$store.state.filter.organisationId;
141
146
  },
142
- organisation():any {
147
+ organisation(): string|undefined {
143
148
  if (this.organisationId) return this.organisationId;
144
149
  if (this.filterOrga) return this.filterOrga;
145
150
  return undefined;
146
151
  },
147
- isProductorSearch() {
152
+ isProductorSearch(): boolean {
148
153
  return state.podcastsPage.ProductorSearch;
149
154
  },
150
- titlePage() {
155
+ titlePage(): string|undefined {
151
156
  return state.podcastsPage.titlePage;
152
157
  },
153
- isEmissionChooser() {
158
+ isEmissionChooser(): boolean {
154
159
  return state.podcastsPage.emissionChooser;
155
160
  },
156
161
  },
157
162
 
163
+ created() {
164
+ if (this.firstRoute) {
165
+ this.first = this.firstRoute;
166
+ }
167
+ if (this.sizeRoute) {
168
+ this.size = this.sizeRoute;
169
+ }
170
+ if (this.productor) {
171
+ this.organisationId = this.productor;
172
+ } else if (this.$store.state.filter.organisationId) {
173
+ this.organisationId = this.$store.state.filter.organisationId;
174
+ }
175
+ if (this.organisation && this.organisationRight) {
176
+ this.includeHidden = true;
177
+ }
178
+ if(this.categoryFilter){
179
+ this.iabId = this.categoryFilter.id;
180
+ }
181
+ if(this.rubriqueFilter.length){
182
+ this.updateRubriquageFilter(this.rubriqueFilter);
183
+ }
184
+ },
185
+
186
+
158
187
  methods: {
159
- updateSortCriteria(value: string) {
188
+ updateCategory(value: number|undefined){
189
+ this.iabId = value;
190
+ },
191
+ updateSortCriteria(value: string): void {
160
192
  this.sortCriteria = value;
161
193
  },
162
- updateHidden(value: boolean) {
194
+ updateHidden(value: boolean): void {
163
195
  this.includeHidden = value;
164
196
  },
165
- updateToDate(value: any) {
197
+ updateToDate(value: string): void {
166
198
  this.toDate = value;
167
199
  },
168
- updateFromDate(value: any) {
200
+ updateFromDate(value: string): void {
169
201
  this.fromDate = value;
170
202
  },
171
- updateRubriquage(value: number) {
172
- if (-1 !== value) {
173
- this.rubriquageId = value;
174
- } else {
175
- this.rubriquageId = undefined;
176
- }
177
- this.noRubrique = undefined;
178
- this.rubriqueId = undefined;
179
- },
180
- updateRubrique(value: number) {
181
- if (-1 === value) {
182
- this.noRubrique = true;
183
- this.rubriqueId = undefined;
184
- } else if (0 === value) {
185
- this.rubriqueId = undefined;
186
- this.noRubrique = undefined;
187
- } else {
188
- this.rubriqueId = value;
189
- this.noRubrique = undefined;
203
+ updateRubriquageFilter(value: Array<RubriquageFilter>){
204
+ const length = value.length;
205
+ const allRubriquageId: Array<number>= [];
206
+ const noRubriquageId: Array<number>= [];
207
+ const rubriqueId: Array<number>= [];
208
+ for (let index = 0; index < length; index++) {
209
+ if(-1===value[index].rubriqueId){
210
+ noRubriquageId.push(value[index].rubriquageId);
211
+ } else if(0===value[index].rubriqueId){
212
+ allRubriquageId.push(value[index].rubriquageId);
213
+ }else{
214
+ rubriqueId.push(value[index].rubriqueId);
215
+ }
190
216
  }
217
+ this.rubriquageId = allRubriquageId;
218
+ this.rubriqueId = rubriqueId;
219
+ this.noRubriquageId = noRubriquageId;
191
220
  },
192
- updateOrganisationId(value: any) {
221
+ updateOrganisationId(value: string): void {
193
222
  this.resetRubriquage = !this.resetRubriquage;
194
- this.rubriquageId = undefined;
195
- this.rubriqueId = undefined;
196
- this.noRubrique = undefined;
223
+ this.rubriquageId = [];
224
+ this.rubriqueId = [];
225
+ this.noRubriquageId = [];
197
226
  this.organisationId = value;
198
227
  },
199
- updateSearchPattern(value: string) {
228
+ updateSearchPattern(value: string): void {
200
229
  if ('' !== value) {
201
230
  this.sortCriteria = 'SCORE';
202
231
  } else {
@@ -204,13 +233,13 @@ export default defineComponent({
204
233
  }
205
234
  this.searchPattern = value;
206
235
  },
207
- updateMonetization(value: any) {
236
+ updateMonetization(value: string): void {
208
237
  this.monetization = value;
209
238
  },
210
- updateNotValid(value: boolean) {
239
+ updateNotValid(value: boolean): void {
211
240
  this.notValid = value;
212
241
  },
213
- emissionSelected(emission: { emissionId: any; }) {
242
+ emissionSelected(emission: Emission): void {
214
243
  if (emission && emission.emissionId) {
215
244
  this.emissionId = emission.emissionId;
216
245
  } else {
@@ -218,5 +247,7 @@ export default defineComponent({
218
247
  }
219
248
  },
220
249
  },
221
- });
250
+ })
222
251
  </script>
252
+
253
+ <style lang="scss"></style>
@@ -1,48 +1,54 @@
1
1
  <template>
2
2
  <div class="page-box">
3
3
  <h1>{{ title }}</h1>
4
- <PodcastList :first="first" :size="size" :rubriqueId="rubriqueId" />
4
+ <PodcastList
5
+ :first="firstRoute"
6
+ :size="sizeRoute"
7
+ :rubrique-id="rubriqueId"
8
+ />
5
9
  </div>
6
10
  </template>
7
11
 
8
- <style lang="scss"></style>
9
-
10
12
  <script lang="ts">
11
- // @ is an alias to /src
12
13
  const octopusApi = require('@saooti/octopus-api');
13
14
  import PodcastList from '../display/podcasts/PodcastList.vue';
14
-
15
15
  import { defineComponent } from 'vue'
16
16
  export default defineComponent({
17
+ name:"Rubrique",
18
+
17
19
  components: {
18
20
  PodcastList,
19
21
  },
20
22
 
21
- props: ['first', 'size', 'rubriqueId'],
22
-
23
- mounted() {
24
- this.extractTitle();
23
+ props: {
24
+ firstRoute: { default: 0, type: Number},
25
+ sizeRoute: { default: 12, type: Number},
26
+ rubriqueId: { default: undefined, type: [ Number ]},
25
27
  },
26
28
 
27
29
  data() {
28
30
  return {
29
- title: '',
31
+ title: '' as string,
30
32
  };
31
33
  },
32
34
 
33
- computed: {},
35
+ watch: {
36
+ rubriqueId(): void {
37
+ this.extractTitle();
38
+ },
39
+ },
40
+
41
+ mounted() {
42
+ this.extractTitle();
43
+ },
34
44
 
35
45
  methods: {
36
- async extractTitle() {
46
+ async extractTitle(): Promise<void> {
37
47
  const data = await octopusApi.fetchRubric(this.rubriqueId);
38
48
  this.title = data.name;
39
49
  },
40
50
  },
41
-
42
- watch: {
43
- rubriqueId() {
44
- this.extractTitle();
45
- },
46
- },
47
- });
51
+ })
48
52
  </script>
53
+
54
+ <style lang="scss"></style>
@@ -1,127 +1,131 @@
1
1
  <template>
2
2
  <div class="page-box">
3
- <h1 v-if="!hideBar">{{ $t('Podcast search') }}</h1>
3
+ <h1 v-if="!hideBar">
4
+ {{ $t('Podcast search') }}
5
+ </h1>
4
6
  <h1 v-else-if="!noResult">
5
- {{ $t('Search results', { query: this.rawQuery }) }}
7
+ {{ $t('Search results', { query: rawQuery }) }}
8
+ </h1>
9
+ <h1 v-else>
10
+ {{ $t('Search - no results', { query: rawQuery }) }}
6
11
  </h1>
7
- <h1 v-else>{{ $t('Search - no results', { query: this.rawQuery }) }}</h1>
8
- <div class="position-relative champs-searchPage w-75" v-if="!hideBar">
12
+ <div
13
+ v-if="!hideBar"
14
+ class="position-relative champs-searchPage w-75"
15
+ >
9
16
  <input
10
17
  id="search"
11
- type="text"
12
18
  ref="search"
13
19
  v-model="rawQuery"
20
+ type="text"
14
21
  class="search-input border-primary w-100 p-2 input-no-outline"
15
22
  :placeholder="$t('Please type at least three characters')"
16
- @change="onSearchBegin"
17
23
  autofocus
24
+ @change="onSearchBegin"
25
+ >
26
+ <label
27
+ for="search"
28
+ class="d-inline"
29
+ :aria-label="$t('Search')"
18
30
  />
19
- <label for="search" class="d-inline" :aria-label="$t('Search')"></label>
20
31
  <div
21
- class="saooti-search-bounty search-icon-container"
22
32
  v-if="!rawQuery"
23
- ></div>
33
+ class="saooti-search-bounty search-icon-container"
34
+ />
24
35
  <div
36
+ v-else
25
37
  class="saooti-cross search-icon-container c-hand"
26
38
  @click="rawQuery = ''"
27
- v-else
28
- ></div>
39
+ />
29
40
  </div>
30
41
  <PodcastList
42
+ v-if="!!query"
31
43
  :query="query"
32
44
  :first="0"
33
45
  :size="20"
34
46
  @emptyList="onListEmpty"
35
- v-if="!!query"
36
47
  />
37
48
  </div>
38
49
  </template>
39
50
 
40
- <style lang="scss">
41
- .search-icon-container {
42
- position: absolute;
43
- top: 0;
44
- bottom: 0;
45
- right: 0;
46
- display: flex;
47
- align-items: center;
48
- }
49
- .champs-searchPage {
50
- margin: 0 auto;
51
- input {
52
- margin: 1rem 0 !important;
53
- padding-right: 40px !important;
54
- }
55
- .search-icon-container {
56
- margin: 0 1em 0 0;
57
- }
58
- }
59
- </style>
60
-
61
51
  <script lang="ts">
62
- // @ is an alias to /src
63
52
  import { state } from '../../store/paramStore';
64
53
  import PodcastList from '../display/podcasts/PodcastList.vue';
65
-
66
- import { defineComponent, ref } from 'vue'
54
+ import { defineComponent } from 'vue';
67
55
  export default defineComponent({
56
+ name: "Search",
57
+
68
58
  components: {
69
59
  PodcastList,
70
60
  },
71
- setup() {
72
- const search:any =ref(null);
73
- return {
74
- search,
75
- };
76
- },
77
61
 
78
- mounted() {
79
- if (this.$route.query.query) {
80
- this.rawQuery = this.$route.query.query;
81
- }
82
- if (this.search) {
83
- this.search.focus();
84
- }
62
+ props: {
63
+ queryRoute: { default: '', type: String },
85
64
  },
86
-
65
+
87
66
  data() {
88
67
  return {
89
- rawQuery: '' as any,
90
- noResult: false,
68
+ rawQuery: '' as string,
69
+ noResult: false as boolean,
91
70
  };
92
71
  },
93
72
 
94
73
  computed: {
95
- query():string {
74
+ query(): string {
96
75
  if (this.rawQuery && this.rawQuery.length >= 3) return this.rawQuery;
97
76
  return '';
98
77
  },
99
- hideBar() {
78
+ hideBar(): boolean {
100
79
  return state.searchPage.hideBar;
101
80
  },
102
81
  },
103
82
 
83
+ watch: {
84
+ query: {
85
+ handler(search: any): void {
86
+ this.rawQuery = search;
87
+ },
88
+ deep: true,
89
+ immediate: true,
90
+ },
91
+ queryRoute(): void{
92
+ this.rawQuery = this.queryRoute;
93
+ }
94
+ },
95
+
96
+ mounted() {
97
+ if (this.queryRoute) {
98
+ this.rawQuery = this.queryRoute;
99
+ }
100
+ if (this.$refs.search) {
101
+ (this.$refs.search as HTMLElement).focus();
102
+ }
103
+ },
104
+
104
105
  methods: {
105
- onListEmpty() {
106
+ onListEmpty(): void {
106
107
  if (this.hideBar) {
107
108
  this.noResult = true;
108
109
  }
109
110
  },
110
- onSearchBegin() {
111
+ onSearchBegin(): void {
111
112
  if (this.hideBar) {
112
113
  this.noResult = false;
113
114
  }
114
115
  },
115
116
  },
116
-
117
- watch: {
118
- '$route.query.query': {
119
- handler(search) {
120
- this.rawQuery = search;
121
- },
122
- deep: true,
123
- immediate: true,
124
- },
125
- },
126
- });
117
+ })
127
118
  </script>
119
+
120
+ <style lang="scss">
121
+ .champs-searchPage {
122
+ margin: 0 auto;
123
+ input {
124
+ margin: 1rem 0 !important;
125
+ padding-right: 40px !important;
126
+ }
127
+ .search-icon-container {
128
+ margin: 0 1em 0 0;
129
+ }
130
+ }
131
+ </style>
package/src/helper/dom.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export default {
2
- convertRemToPixels(rem: number) {
2
+ convertRemToPixels(rem: number): number {
3
3
  return (
4
4
  rem * parseFloat(getComputedStyle(document.documentElement).fontSize)
5
5
  );
6
6
  },
7
- };
7
+ };
@@ -1,33 +1,43 @@
1
1
  export default {
2
- formatDuration(totalSeconds: number) {
3
- var hours = Math.floor(totalSeconds / 3600);
4
- var minutes = Math.floor((totalSeconds - hours * 3600) / 60);
5
- var seconds = totalSeconds - hours * 3600 - minutes * 60;
6
- var hoursString = "";
7
- var minutesString = "";
8
- var secondsString = "";
2
+ formatDuration(totalSeconds: number): string {
3
+ const hours = Math.floor(totalSeconds / 3600);
4
+ const minutes = Math.floor((totalSeconds - hours * 3600) / 60);
5
+ const seconds = totalSeconds - hours * 3600 - minutes * 60;
6
+ let hoursString = "";
7
+ let minutesString = "";
8
+ let secondsString = "";
9
9
 
10
10
  if (hours > 0) {
11
11
  if (hours < 10) {
12
12
  hoursString = '0' + hours;
13
+ }else{
14
+ hoursString = hours.toString();
13
15
  }
14
16
  if (minutes < 10) {
15
17
  minutesString = '0' + minutes;
18
+ }else{
19
+ minutesString = minutes.toString();
16
20
  }
17
21
  if (seconds < 10) {
18
22
  secondsString = '0' + seconds;
23
+ }else{
24
+ secondsString = seconds.toString();
19
25
  }
20
26
 
21
27
  return hoursString + "'" + minutesString + "'" + secondsString + "'";
22
28
  } else {
23
29
  if (minutes < 10) {
24
30
  minutesString = '0' + minutes;
31
+ }else{
32
+ minutesString = minutes.toString();
25
33
  }
26
34
  if (seconds < 10) {
27
35
  secondsString = '0' + seconds;
36
+ }else{
37
+ secondsString = seconds.toString();
28
38
  }
29
39
 
30
40
  return minutesString + "'" + secondsString + "'";
31
41
  }
32
42
  },
33
- };
43
+ };