@saooti/octopus-sdk 41.1.14 → 41.2.0

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 (43) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/index.ts +24 -1
  3. package/package.json +1 -1
  4. package/src/api/groupsApi.ts +214 -0
  5. package/src/api/podcastApi.ts +47 -9
  6. package/src/components/buttons/ActionButton.vue +99 -0
  7. package/src/components/buttons/index.ts +5 -0
  8. package/src/components/composable/route/types.ts +11 -3
  9. package/src/components/composable/route/useAdvancedParamInit.ts +38 -13
  10. package/src/components/composable/useErrorHandler.ts +3 -2
  11. package/src/components/composable/useNotifications.ts +50 -0
  12. package/src/components/display/emission/EmissionGroupChooser.vue +56 -0
  13. package/src/components/display/emission/EmissionItem.vue +23 -3
  14. package/src/components/display/emission/EmissionList.vue +8 -2
  15. package/src/components/display/filter/AdvancedSearch.vue +82 -23
  16. package/src/components/display/list/ListPaginate.vue +4 -1
  17. package/src/components/display/podcasts/PodcastList.vue +12 -5
  18. package/src/components/display/podcasts/PodcastPlayButton.vue +2 -2
  19. package/src/components/display/podcasts/TagList.vue +4 -1
  20. package/src/components/form/ClassicMultiselect.vue +43 -37
  21. package/src/components/icons.ts +13 -0
  22. package/src/components/misc/ClassicAlert.vue +8 -1
  23. package/src/components/misc/ClassicBigChip.vue +84 -0
  24. package/src/components/misc/ClassicDataTable.vue +98 -0
  25. package/src/components/misc/ClassicDataTable_Internal.vue +132 -0
  26. package/src/components/misc/ClassicHelpButton.vue +3 -3
  27. package/src/components/misc/ClassicNotifications.vue +23 -0
  28. package/src/components/misc/ClassicPopover.vue +1 -0
  29. package/src/components/pages/EmissionPage.vue +2 -2
  30. package/src/components/pages/EmissionsPage.vue +10 -15
  31. package/src/components/pages/PodcastPage.vue +1 -1
  32. package/src/components/pages/PodcastsPage.vue +8 -20
  33. package/src/helper/fetchHelper.ts +1 -0
  34. package/src/locale/de.ts +2 -0
  35. package/src/locale/en.ts +2 -0
  36. package/src/locale/es.ts +2 -0
  37. package/src/locale/fr.ts +5 -3
  38. package/src/locale/it.ts +2 -0
  39. package/src/locale/sl.ts +2 -0
  40. package/src/router/router.ts +38 -53
  41. package/src/stores/class/general/emission.ts +8 -2
  42. package/src/style/_variables.scss +3 -0
  43. package/src/style/bootstrap.scss +5 -0
@@ -9,7 +9,7 @@ import { AuthStore } from "../stores/AuthStore";
9
9
  import fetchHelper from "@/helper/fetchHelper";
10
10
  import { setupRouter } from "./utils";
11
11
 
12
- import { ROUTE_PARAMS } from "../components/composable/route/useRouteUpdateParams";
12
+ import { ROUTE_PARAMS, RouteProps } from "../components/composable/route/types";
13
13
 
14
14
  /*--------------------------------------------------------------------------
15
15
  Composants publics
@@ -36,6 +36,33 @@ const RadioPage = () => import("@/components/pages/RadioPage.vue");
36
36
  const VideoPage = () => import("@/components/pages/VideoPage.vue");
37
37
  const PageLogout = () => import("@/components/pages/PageLogout.vue");
38
38
 
39
+ function getSimpleRouteProps(route:RouteLocationNormalized): RouteProps {
40
+ return {
41
+ pr: route.query.pr ? parseInt(route.query.pr.toString(), 10) : undefined,
42
+ ps: route.query.ps ? parseInt(route.query.ps.toString(), 10) : undefined,
43
+ routeQuery: route.query.q as string ?? ""
44
+ };
45
+ }
46
+
47
+ /**
48
+ * Return route props used for filtering
49
+ */
50
+ function getRouteProps(route: RouteLocationNormalized): RouteProps {
51
+ return {
52
+ ...getSimpleRouteProps(route),
53
+ routeMonetisable: route.query.m as string ?? "",
54
+ routeIab: route.query.i ? parseInt(route.query.i.toString(), 10) : undefined,
55
+ routeSort: route.query.s as string ?? "",
56
+ routeIncludeHidden: route.query.h as string ?? "",
57
+ routeFrom: route.query.from as string|undefined,
58
+ routeTo: route.query.to as string|undefined,
59
+ routeOrga:route.query.o as string|undefined,
60
+ routeRubriques :route.query.r as string ?? route.query.rubriquesId as string|undefined,
61
+ routeBeneficiaries: route.query[ROUTE_PARAMS.Beneficiaries] as string[]|undefined,
62
+ routeEmissionGroups: (route.query[ROUTE_PARAMS.EmissionGroups] as string[]|undefined)?.map(g => parseInt(g, 10))
63
+ }
64
+ }
65
+
39
66
  const routes: Array<RouteRecordRaw> = [
40
67
  /*--------------------------------------------------------------------------
41
68
  Liens publics
@@ -84,22 +111,7 @@ const routes: Array<RouteRecordRaw> = [
84
111
  path: "/main/pub/podcasts/",
85
112
  name: "podcasts",
86
113
  component: PodcastsPage,
87
- props: (route: RouteLocationNormalized) => ({
88
- pr: route.query.pr ? parseInt(route.query.pr.toString(), 10) : undefined,
89
- ps: route.query.ps ? parseInt(route.query.ps.toString(), 10) : undefined,
90
- routeQuery: route.query.q ?? "",
91
- routeMonetisable: route.query.m ?? "",
92
- routeIab: route.query.i ? parseInt(route.query.i.toString(), 10) : undefined,
93
- routeSort: route.query.s ?? "",
94
- routeIncludeHidden: route.query.h ?? "",
95
- routeFrom: route.query.from,
96
- routeTo: route.query.to,
97
- routeValidity:route.query.vl ?? "",
98
- routeOnlyVideo:route.query.v ?? "",
99
- routeOrga:route.query.o,
100
- routeRubriques :route.query.r ?? route.query.rubriquesId,
101
- routeBeneficiaries: route.query[ROUTE_PARAMS.Beneficiaries],
102
- }),
114
+ props: getRouteProps,
103
115
  meta:{
104
116
  title: "Podcasts",
105
117
  }
@@ -108,20 +120,7 @@ const routes: Array<RouteRecordRaw> = [
108
120
  path: "/main/pub/emissions/",
109
121
  name: "emissions",
110
122
  component: EmissionsPage,
111
- props: (route: RouteLocationNormalized) => ({
112
- pr: route.query.pr ? parseInt(route.query.pr.toString(), 10) : undefined,
113
- ps: route.query.ps ? parseInt(route.query.ps.toString(), 10) : undefined,
114
- routeQuery: route.query.q ?? "",
115
- routeMonetisable: route.query.m ?? "",
116
- routeIab: route.query.i ? parseInt(route.query.i.toString(), 10) : undefined,
117
- routeSort: route.query.s ?? "",
118
- routeIncludeHidden: route.query.h ?? "",
119
- routeFrom: route.query.from,
120
- routeTo: route.query.to,
121
- routeOrga:route.query.o,
122
- routeRubriques :route.query.r ?? route.query.rubriquesId,
123
- routeBeneficiaries: route.query[ROUTE_PARAMS.Beneficiaries],
124
- }),
123
+ props: getRouteProps,
125
124
  meta:{
126
125
  title: "Emissions",
127
126
  }
@@ -131,10 +130,8 @@ const routes: Array<RouteRecordRaw> = [
131
130
  name: "participants",
132
131
  component: ParticpantsPage,
133
132
  props: (route: RouteLocationNormalized) => ({
134
- pr: route.query.pr ? parseInt(route.query.pr.toString(), 10) : undefined,
135
- ps: route.query.ps ? parseInt(route.query.ps.toString(), 10) : undefined,
133
+ ...getSimpleRouteProps(route),
136
134
  routeOrga:route.query.o,
137
- routeQuery: route.query.q ?? "",
138
135
  }),
139
136
  meta:{
140
137
  title: "Speakers",
@@ -145,10 +142,8 @@ const routes: Array<RouteRecordRaw> = [
145
142
  name: "emission",
146
143
  component: EmissionPage,
147
144
  props: (route: RouteLocationNormalized) => ({
145
+ ...getSimpleRouteProps(route),
148
146
  emissionId: parseInt(route.params.emissionId.toString(), 10),
149
- pr: route.query.pr ? parseInt(route.query.pr.toString(), 10) : undefined,
150
- ps: route.query.ps ? parseInt(route.query.ps.toString(), 10) : undefined,
151
- routeQuery: route.query.q ?? "",
152
147
  }),
153
148
  meta:{
154
149
  title: "",
@@ -182,10 +177,8 @@ const routes: Array<RouteRecordRaw> = [
182
177
  name: "participant",
183
178
  component: ParticipantPage,
184
179
  props: (route: RouteLocationNormalized) => ({
180
+ ...getSimpleRouteProps(route),
185
181
  participantId: parseInt(route.params.participantId.toString(), 10),
186
- pr: route.query.pr ? parseInt(route.query.pr.toString(), 10) : undefined,
187
- ps: route.query.ps ? parseInt(route.query.ps.toString(), 10) : undefined,
188
- routeQuery: route.query.q ?? "",
189
182
  }),
190
183
  meta:{
191
184
  title: "",
@@ -209,11 +202,9 @@ const routes: Array<RouteRecordRaw> = [
209
202
  name: "rubrique",
210
203
  component: RubriquePage,
211
204
  props: (route: RouteLocationNormalized) => ({
212
- pr: route.query.pr ? parseInt(route.query.pr.toString(), 10) : undefined,
213
- ps: route.query.ps ? parseInt(route.query.ps.toString(), 10) : undefined,
205
+ ...getSimpleRouteProps(route),
214
206
  rubriqueId: parseInt(route.params.rubriqueId.toString(), 10),
215
207
  routeOrga:route.query.o,
216
- routeQuery: route.query.q ?? "",
217
208
  }),
218
209
  meta:{
219
210
  title: "",
@@ -224,11 +215,9 @@ const routes: Array<RouteRecordRaw> = [
224
215
  name: "tag",
225
216
  component: TagPage,
226
217
  props: (route: RouteLocationNormalized) => ({
227
- pr: route.query.pr ? parseInt(route.query.pr.toString(), 10) : undefined,
228
- ps: route.query.ps ? parseInt(route.query.ps.toString(), 10) : undefined,
218
+ ...getSimpleRouteProps(route),
229
219
  tag: route.params.tag,
230
220
  routeOrga:route.query.o,
231
- routeQuery: route.query.q ?? "",
232
221
  }),
233
222
  meta:{
234
223
  title: "",
@@ -261,10 +250,8 @@ const routes: Array<RouteRecordRaw> = [
261
250
  name: "playlists",
262
251
  component: PlaylistsPage,
263
252
  props: (route: RouteLocationNormalized) => ({
264
- pr: route.query.pr ? parseInt(route.query.pr.toString(), 10) : undefined,
265
- ps: route.query.ps ? parseInt(route.query.ps.toString(), 10) : undefined,
253
+ ...getSimpleRouteProps(route),
266
254
  routeOrga:route.query.o,
267
- routeQuery: route.query.q ?? "",
268
255
  }),
269
256
  meta:{
270
257
  title: "Playlists"
@@ -275,10 +262,8 @@ const routes: Array<RouteRecordRaw> = [
275
262
  name: "playlist",
276
263
  component: PlaylistPage,
277
264
  props: (route: RouteLocationNormalized) => ({
265
+ ...getSimpleRouteProps(route),
278
266
  playlistId: parseInt(route.params.playlistId.toString(), 10),
279
- pr: route.query.pr ? parseInt(route.query.pr.toString(), 10) : undefined,
280
- ps: route.query.ps ? parseInt(route.query.ps.toString(), 10) : undefined,
281
- routeQuery: route.query.q ?? "",
282
267
  }),
283
268
  meta:{
284
269
  title: "",
@@ -360,4 +345,4 @@ async function getMyOrgaActive(authStore: AuthStore): Promise<string>{
360
345
 
361
346
  setupRouter(router, getMyOrgaActive);
362
347
 
363
- export default router;
348
+ export default router;
@@ -3,6 +3,9 @@ import { Organisation } from "./organisation";
3
3
  import { Person } from "../user/person";
4
4
  import { ItuneCategory } from "./ituneCategory";
5
5
 
6
+ /**
7
+ * An emission
8
+ */
6
9
  export interface Emission {
7
10
  imageUrl?: string;
8
11
  annotations?: { [key: string]: string | number | boolean | undefined };
@@ -34,20 +37,23 @@ export interface Emission {
34
37
  visible?: boolean;
35
38
  /** An optional list of tags */
36
39
  tags?: string[];
40
+ /** The ids of groups this emission belongs to */
41
+ groupIds?: Array<number>
37
42
  }
38
43
 
39
- export function emptyEmissionData(): Emission {
44
+ export function emptyEmissionData(orga?: Organisation): Emission {
40
45
  return {
41
46
  emissionId: 0,
42
47
  name: "",
43
48
  description: "",
44
49
  imageUrl: "",
45
50
  iabIds: undefined,
46
- orga: {
51
+ orga: orga ?? {
47
52
  id: "",
48
53
  name: "",
49
54
  imageUrl: "",
50
55
  },
56
+ beneficiaries: [],
51
57
  rubriqueIds: [],
52
58
  monetisable: "UNDEFINED",
53
59
  limits: {},
@@ -39,4 +39,7 @@
39
39
 
40
40
  //Font-family
41
41
  --octopus-font-family: Montserrat,sans-serif,"Helvetica Neue";
42
+
43
+ // ClassicDataTable
44
+ --table-line-height: 48px;
42
45
  }
@@ -179,6 +179,11 @@ input:not([class^="vs__"]), button:not([class^="vs__"]), select:not([class^="vs_
179
179
  margin: 0.3rem;
180
180
  }
181
181
  }
182
+
183
+ &.btn-small {
184
+ font-size: 0.55rem;
185
+ padding: 0.2rem 0.4rem;
186
+ }
182
187
 
183
188
  &.admin-button{
184
189
  padding: 0.3rem;