@ministryofjustice/hmpps-digital-prison-reporting-frontend 4.14.2 → 4.15.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 (56) hide show
  1. package/dpr/all.mjs +2 -0
  2. package/dpr/all.scss +4 -0
  3. package/dpr/components/_catalogue/catalogue-list/utils.test.ts +1 -1
  4. package/dpr/components/_charts/chart/clientClass.mjs +4 -3
  5. package/dpr/components/_charts/chart/heatmap/clientClass.mjs +175 -0
  6. package/dpr/components/_charts/chart/heatmap/utils.js +2 -0
  7. package/dpr/components/_charts/chart/heatmap/utils.js.map +7 -0
  8. package/dpr/components/_charts/chart/heatmap/utils.ts +182 -0
  9. package/dpr/components/_charts/chart/styles.scss +4 -0
  10. package/dpr/components/_charts/utils.js +1 -1
  11. package/dpr/components/_charts/utils.js.map +3 -3
  12. package/dpr/components/_charts/utils.test.ts +4 -1
  13. package/dpr/components/_charts/utils.ts +73 -27
  14. package/dpr/components/_dashboards/dashboard/types.js +1 -1
  15. package/dpr/components/_dashboards/dashboard/types.js.map +2 -2
  16. package/dpr/components/_dashboards/dashboard/types.ts +13 -1
  17. package/dpr/components/_dashboards/dashboard-list/utils.js +1 -1
  18. package/dpr/components/_dashboards/dashboard-list/utils.js.map +3 -3
  19. package/dpr/components/_dashboards/dashboard-list/utils.test.ts +1 -0
  20. package/dpr/components/_dashboards/dashboard-list/utils.ts +4 -1
  21. package/dpr/components/_filters/types.d.js.map +1 -1
  22. package/dpr/components/_filters/types.d.ts +12 -8
  23. package/dpr/components/_filters/utils.js +1 -1
  24. package/dpr/components/_filters/utils.js.map +3 -3
  25. package/dpr/components/_filters/utils.ts +24 -2
  26. package/dpr/data/dashboardClient.js +1 -1
  27. package/dpr/data/dashboardClient.js.map +2 -2
  28. package/dpr/data/dashboardClient.ts +1 -1
  29. package/dpr/routes/journeys/request-report/filters/controller.js +1 -1
  30. package/dpr/routes/journeys/request-report/filters/controller.js.map +3 -3
  31. package/dpr/routes/journeys/request-report/filters/controller.ts +6 -2
  32. package/dpr/routes/journeys/request-report/filters/utils.js +1 -1
  33. package/dpr/routes/journeys/request-report/filters/utils.js.map +2 -2
  34. package/dpr/routes/journeys/request-report/filters/utils.ts +9 -3
  35. package/dpr/routes/journeys/view-report/async/dashboard/utils.js +1 -1
  36. package/dpr/routes/journeys/view-report/async/dashboard/utils.js.map +3 -3
  37. package/dpr/routes/journeys/view-report/async/dashboard/utils.ts +12 -3
  38. package/dpr/services/dashboardService.js +1 -1
  39. package/dpr/services/dashboardService.js.map +2 -2
  40. package/dpr/services/dashboardService.ts +1 -1
  41. package/dpr/types/Charts.js +1 -1
  42. package/dpr/types/Charts.js.map +1 -1
  43. package/dpr/types/Charts.ts +10 -3
  44. package/dpr/types/ExecutionData.d.js +1 -1
  45. package/dpr/types/ExecutionData.d.js.map +1 -1
  46. package/dpr/types/ExecutionData.d.ts +1 -0
  47. package/dpr/utils/DateMapper/DateMapper.js +1 -1
  48. package/dpr/utils/DateMapper/DateMapper.js.map +2 -2
  49. package/dpr/utils/DateMapper/DateMapper.ts +4 -0
  50. package/dpr/utils/UserStoreItemBuilder.js +1 -1
  51. package/dpr/utils/UserStoreItemBuilder.js.map +3 -3
  52. package/dpr/utils/UserStoreItemBuilder.ts +5 -3
  53. package/dpr/utils/requestStatusHelper.js +1 -1
  54. package/dpr/utils/requestStatusHelper.js.map +2 -2
  55. package/dpr/utils/requestStatusHelper.ts +1 -1
  56. package/package.json +5 -2
@@ -1,3 +1,5 @@
1
+ import dayjs from 'dayjs'
2
+ import weekOfYear from 'dayjs/plugin/weekOfYear'
1
3
  import {
2
4
  ChartData,
3
5
  MoJTable,
@@ -7,41 +9,32 @@ import {
7
9
  ChartDetails,
8
10
  ChartMetaData,
9
11
  } from '../../types/Charts'
12
+ import { createTimeseriesMatrixChart } from './chart/heatmap/utils'
10
13
  import { DashboardDataResponse } from '../../types/Metrics'
11
14
  import {
12
15
  BarChartVisualisationColumn,
13
16
  DashboardVisualisation,
14
17
  DashboardVisualisationColumns,
15
- DashboardVisualisationType,
16
18
  } from '../_dashboards/dashboard/types'
17
19
  import DatasetHelper from '../../utils/datasetHelper'
18
20
  import DashboardListUtils from '../_dashboards/dashboard-list/utils'
21
+ import { Granularity } from '../_inputs/granular-date-range/types'
22
+
23
+ dayjs.extend(weekOfYear)
19
24
 
20
25
  export const createChart = (
21
26
  chartDefinition: DashboardVisualisation,
22
27
  rawData: DashboardDataResponse[],
23
28
  ): ChartCardData => {
24
- const timeseriesChartTypes = [DashboardVisualisationType.BAR_TIMESERIES, DashboardVisualisationType.LINE_TIMESERIES]
25
- const { type } = chartDefinition
26
-
27
29
  let table: MoJTable
28
30
  let chart: ChartData
29
31
  let details: ChartDetails
30
32
 
31
- if (timeseriesChartTypes.includes(type)) {
32
- const { latestData, dataSetRows, timeseriesData } = getDataForTimeseriesCharts(chartDefinition, rawData)
33
- if (dataSetRows.length) {
34
- chart = createTimeseriesChart(chartDefinition, timeseriesData)
35
- table = createTimeseriesTable(chartDefinition, timeseriesData)
36
- details = getChartDetails(chartDefinition, latestData, true)
37
- }
38
- } else {
39
- const { dataSetRows, snapshotData } = getDataForSnapshotCharts(chartDefinition, rawData)
40
- if (dataSetRows.length) {
41
- chart = createSnapshotChart(chartDefinition, snapshotData)
42
- table = createSnapshotTable(chartDefinition, dataSetRows)
43
- details = getChartDetails(chartDefinition, dataSetRows)
44
- }
33
+ const { dataSetRows, snapshotData } = getDataForSnapshotCharts(chartDefinition, rawData)
34
+ if (dataSetRows.length) {
35
+ chart = createSnapshotChart(chartDefinition, snapshotData)
36
+ table = createSnapshotTable(chartDefinition, dataSetRows)
37
+ details = getChartDetails(chartDefinition, dataSetRows)
45
38
  }
46
39
 
47
40
  return {
@@ -51,8 +44,54 @@ export const createChart = (
51
44
  }
52
45
  }
53
46
 
54
- export default {
55
- createChart,
47
+ export const createTimeseriesCharts = (
48
+ chartDefinition: DashboardVisualisation,
49
+ rawData: DashboardDataResponse[],
50
+ ): ChartCardData => {
51
+ let table: MoJTable
52
+ let chart: ChartData
53
+ let details: ChartDetails
54
+
55
+ const { latestData, dataSetRows, timeseriesData } = getDataForTimeseriesCharts(chartDefinition, rawData)
56
+ if (dataSetRows.length) {
57
+ chart = createTimeseriesChart(chartDefinition, timeseriesData)
58
+ table = createTimeseriesTable(chartDefinition, timeseriesData)
59
+ details = getChartDetails(chartDefinition, latestData, true)
60
+ }
61
+ return {
62
+ details,
63
+ table,
64
+ chart,
65
+ }
66
+ }
67
+
68
+ export const createMatrixChart = (
69
+ chartDefinition: DashboardVisualisation,
70
+ rawData: DashboardDataResponse[],
71
+ query: Record<string, string | string[]>,
72
+ ) => {
73
+ let table: MoJTable
74
+ let chart: ChartData
75
+ let details: ChartDetails
76
+ let granularity: Granularity = Granularity.DAILY
77
+
78
+ Object.keys(query).forEach((key) => {
79
+ if (key.includes('granularity')) {
80
+ granularity = <Granularity>query[key]
81
+ }
82
+ })
83
+
84
+ const { latestData, dataSetRows, timeseriesData } = getDataForTimeseriesCharts(chartDefinition, rawData)
85
+ if (dataSetRows.length) {
86
+ chart = createTimeseriesMatrixChart(chartDefinition, timeseriesData, granularity)
87
+ table = createTimeseriesTable(chartDefinition, timeseriesData)
88
+ details = getChartDetails(chartDefinition, latestData, true)
89
+ }
90
+ return {
91
+ details,
92
+ table,
93
+ chart,
94
+ }
56
95
  }
57
96
 
58
97
  const getDataForSnapshotCharts = (chartDefinition: DashboardVisualisation, rawData: DashboardDataResponse[]) => {
@@ -253,9 +292,7 @@ const createTimeseriesChart = (
253
292
  const { keys, measures } = columns
254
293
 
255
294
  const unit = measures[0].unit ? measures[0].unit : undefined
256
-
257
- const type = chartDefinition.type === DashboardVisualisationType.BAR_TIMESERIES ? 'bar' : 'line'
258
-
295
+ const type = chartDefinition.type.split('-')[0]
259
296
  const groupKey = DatasetHelper.getGroupKey(keys, timeseriesData)
260
297
  const labelId = groupKey.id as keyof DashboardDataResponse
261
298
 
@@ -297,15 +334,18 @@ const createTimeseriesTable = (
297
334
  const { keys, measures } = columns
298
335
 
299
336
  let flatTimeseriesData = timeseriesData.flat()
300
- const hasMultipleRowsPerTimePeriod = timeseriesData.length > 1
301
337
  let headerColumns = [...measures]
302
338
 
303
- if (hasMultipleRowsPerTimePeriod) {
339
+ if (timeseriesData.length > 1) {
340
+ // Add keys as columns as well as measures, and put TS first:
341
+ // Get TS column an remove it from headings
304
342
  const timestampIndex = headerColumns.findIndex((m) => m.id === 'ts')
305
343
  const timestampCol = headerColumns[timestampIndex]
306
-
307
344
  headerColumns.splice(timestampIndex, 1)
308
- headerColumns = [...keys, ...headerColumns]
345
+ // Remove duplicate TS from keys if present and add keys to headings
346
+ const keysWithoutTs = keys.filter((k) => k.id !== 'ts')
347
+ headerColumns = [...keysWithoutTs, ...headerColumns]
348
+ // Add TS column to the start
309
349
  headerColumns.unshift(timestampCol)
310
350
  } else {
311
351
  flatTimeseriesData = DatasetHelper.filterRowsByDisplayColumns(chartDefinition, flatTimeseriesData)
@@ -322,3 +362,9 @@ const createTimeseriesTable = (
322
362
  rows,
323
363
  } as MoJTable
324
364
  }
365
+
366
+ export default {
367
+ createChart,
368
+ createTimeseriesCharts,
369
+ createMatrixChart,
370
+ }
@@ -1,2 +1,2 @@
1
- var t=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var m=(s,i)=>{for(var e in i)t(s,e,{get:i[e],enumerable:!0})},p=(s,i,e,r)=>{if(i&&typeof i=="object"||typeof i=="function")for(let o of u(i))!c.call(s,o)&&o!==e&&t(s,o,{get:()=>i[o],enumerable:!(r=d(i,o))||r.enumerable});return s};var b=s=>p(t({},"__esModule",{value:!0}),s);var x={};m(x,{AggregateType:()=>l,DashboardVisualisationType:()=>n});module.exports=b(x);var n=(a=>(a.LIST="list",a.DONUT="doughnut",a.BAR="bar",a.LINE="line",a.BAR_TIMESERIES="bar-timeseries",a.LINE_TIMESERIES="line-timeseries",a.SCORECARD="scorecard",a.SCORECARD_GROUP="scorecard-group",a))(n||{}),l=(e=>(e.SUM="sum",e.AVG="average",e))(l||{});0&&(module.exports={AggregateType,DashboardVisualisationType});
1
+ var e=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var p=(s,a)=>{for(var t in a)e(s,t,{get:a[t],enumerable:!0})},m=(s,a,t,r)=>{if(a&&typeof a=="object"||typeof a=="function")for(let o of d(a))!c.call(s,o)&&o!==t&&e(s,o,{get:()=>a[o],enumerable:!(r=u(a,o))||r.enumerable});return s};var b=s=>m(e({},"__esModule",{value:!0}),s);var x={};p(x,{AggregateType:()=>l,DashboardVisualisationType:()=>n});module.exports=b(x);var n=(i=>(i.LIST="list",i.DONUT="doughnut",i.BAR="bar",i.LINE="line",i.MATRIX="matrix",i.MATRIX_TIMESERIES="matrix-timeseries",i.BAR_TIMESERIES="bar-timeseries",i.LINE_TIMESERIES="line-timeseries",i.SCORECARD="scorecard",i.SCORECARD_GROUP="scorecard-group",i))(n||{}),l=(t=>(t.SUM="sum",t.AVG="average",t))(l||{});0&&(module.exports={AggregateType,DashboardVisualisationType});
2
2
  //# sourceMappingURL=types.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/dpr/components/_dashboards/dashboard/types.ts"],
4
- "sourcesContent": ["import { components } from '../../../types/api'\nimport { ChartCardData, MoJTable, UnitType } from '../../../types/Charts'\nimport { Scorecard, ScorecardGroup } from '../scorecard/types'\n\nexport interface DashboardDefinition {\n id: string\n name: string\n description?: string\n sections: DashboardSection[]\n isMissing?: boolean\n filterFields: components['schemas']['FieldDefinition'][]\n}\n\nexport interface DashboardSection {\n id: string\n display?: string\n description?: string\n visualisations: DashboardVisualisation[]\n}\n\nexport interface DashboardUISection {\n id: string\n title?: string\n description?: string\n visualisations?: DashboardUIVisualisation[]\n}\n\nexport interface DashboardUIVisualisation {\n id: string\n type: DashboardVisualisationType\n title?: string\n description?: string\n data: Scorecard | Scorecard[] | ScorecardGroup[] | ChartCardData | { table: MoJTable; ts: string }\n}\n\nexport interface DashboardVisualisation {\n id: string\n type: DashboardVisualisationType\n display?: string\n description?: string\n columns: DashboardVisualisationColumns\n showLatest?: boolean\n}\n\nexport interface ListVisualisation extends DashboardVisualisation {\n type: DashboardVisualisationType.LIST\n columnsAsList: boolean\n}\n\nexport enum DashboardVisualisationType {\n LIST = 'list',\n DONUT = 'doughnut',\n BAR = 'bar',\n LINE = 'line',\n BAR_TIMESERIES = 'bar-timeseries',\n LINE_TIMESERIES = 'line-timeseries',\n SCORECARD = 'scorecard',\n SCORECARD_GROUP = 'scorecard-group',\n}\n\nexport interface DashboardVisualisationColumns {\n keys?: DashboardVisualisationColumnKey[]\n measures: DashboardVisualisationColumnMeasure[]\n filters?: DashboardVisualisationColumnFilter[]\n expectNulls: boolean\n}\n\nexport interface DashboardVisualisationColumn {\n id: string\n display?: string\n}\n\nexport interface DashboardVisualisationColumnKey extends DashboardVisualisationColumn {\n optional?: boolean\n}\n\nexport interface DashboardVisualisationColumnMeasure extends DashboardVisualisationColumn {\n aggregate?: AggregateType\n displayValue?: boolean\n unit?: UnitType\n axis?: 'x' | 'y'\n}\n\nexport interface DashboardVisualisationColumnFilter {\n id: string\n equals: string | number\n}\n\nexport interface BarChartVisualisationColumn extends DashboardVisualisationColumnMeasure {\n axis?: 'x' | 'y'\n}\n\nexport interface ScorecardVisualisationColumn extends DashboardVisualisationColumn {\n displayValue: boolean\n}\n\nexport enum AggregateType {\n SUM = 'sum',\n AVG = 'average',\n}\n"],
5
- "mappings": "4ZAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,EAAA,+BAAAC,IAAA,eAAAC,EAAAJ,GAiDO,IAAKG,OACVA,EAAA,KAAO,OACPA,EAAA,MAAQ,WACRA,EAAA,IAAM,MACNA,EAAA,KAAO,OACPA,EAAA,eAAiB,iBACjBA,EAAA,gBAAkB,kBAClBA,EAAA,UAAY,YACZA,EAAA,gBAAkB,kBARRA,OAAA,IA+CAD,OACVA,EAAA,IAAM,MACNA,EAAA,IAAM,UAFIA,OAAA",
4
+ "sourcesContent": ["import { components } from '../../../types/api'\nimport { ChartCardData, MoJTable, UnitType } from '../../../types/Charts'\nimport { Scorecard, ScorecardGroup } from '../scorecard/types'\n\nexport interface DashboardDefinition {\n id: string\n name: string\n description?: string\n sections: DashboardSection[]\n isMissing?: boolean\n filterFields: components['schemas']['FieldDefinition'][]\n}\n\nexport interface DashboardSection {\n id: string\n display?: string\n description?: string\n visualisations: DashboardVisualisation[]\n}\n\nexport interface DashboardUISection {\n id: string\n title?: string\n description?: string\n visualisations?: DashboardUIVisualisation[]\n}\n\nexport interface DashboardUIVisualisation {\n id: string\n type: DashboardVisualisationType\n title?: string\n description?: string\n data: Scorecard | Scorecard[] | ScorecardGroup[] | ChartCardData | { table: MoJTable; ts: string }\n}\n\nexport interface DashboardVisualisation {\n id: string\n type: DashboardVisualisationType\n display?: string\n description?: string\n columns: DashboardVisualisationColumns\n options: DashboardVisualisationOptions\n}\n\nexport type DashboardVisualisationOptions = ListDashboardVisualisationOptions | MatrixDashboardVisualisationOptions\n\nexport interface ListDashboardVisualisationOptions {\n showLatest?: boolean\n columnsAsList?: boolean\n}\n\nexport interface MatrixDashboardVisualisationOptions {\n useRagColours?: boolean\n}\n\nexport interface ListVisualisation extends DashboardVisualisation {\n type: DashboardVisualisationType.LIST\n}\n\nexport enum DashboardVisualisationType {\n LIST = 'list',\n DONUT = 'doughnut',\n BAR = 'bar',\n LINE = 'line',\n MATRIX = 'matrix',\n MATRIX_TIMESERIES = 'matrix-timeseries',\n BAR_TIMESERIES = 'bar-timeseries',\n LINE_TIMESERIES = 'line-timeseries',\n SCORECARD = 'scorecard',\n SCORECARD_GROUP = 'scorecard-group',\n}\n\nexport interface DashboardVisualisationColumns {\n keys?: DashboardVisualisationColumnKey[]\n measures: DashboardVisualisationColumnMeasure[]\n filters?: DashboardVisualisationColumnFilter[]\n expectNulls: boolean\n}\n\nexport interface DashboardVisualisationColumn {\n id: string\n display?: string\n}\n\nexport interface DashboardVisualisationColumnKey extends DashboardVisualisationColumn {\n optional?: boolean\n}\n\nexport interface DashboardVisualisationColumnMeasure extends DashboardVisualisationColumn {\n aggregate?: AggregateType\n displayValue?: boolean\n unit?: UnitType\n axis?: 'x' | 'y'\n}\n\nexport interface DashboardVisualisationColumnFilter {\n id: string\n equals: string | number\n}\n\nexport interface BarChartVisualisationColumn extends DashboardVisualisationColumnMeasure {\n axis?: 'x' | 'y'\n}\n\nexport interface ScorecardVisualisationColumn extends DashboardVisualisationColumn {\n displayValue: boolean\n}\n\nexport enum AggregateType {\n SUM = 'sum',\n AVG = 'average',\n}\n"],
5
+ "mappings": "4ZAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,EAAA,+BAAAC,IAAA,eAAAC,EAAAJ,GA2DO,IAAKG,OACVA,EAAA,KAAO,OACPA,EAAA,MAAQ,WACRA,EAAA,IAAM,MACNA,EAAA,KAAO,OACPA,EAAA,OAAS,SACTA,EAAA,kBAAoB,oBACpBA,EAAA,eAAiB,iBACjBA,EAAA,gBAAkB,kBAClBA,EAAA,UAAY,YACZA,EAAA,gBAAkB,kBAVRA,OAAA,IAiDAD,OACVA,EAAA,IAAM,MACNA,EAAA,IAAM,UAFIA,OAAA",
6
6
  "names": ["types_exports", "__export", "AggregateType", "DashboardVisualisationType", "__toCommonJS"]
7
7
  }
@@ -39,12 +39,22 @@ export interface DashboardVisualisation {
39
39
  display?: string
40
40
  description?: string
41
41
  columns: DashboardVisualisationColumns
42
+ options: DashboardVisualisationOptions
43
+ }
44
+
45
+ export type DashboardVisualisationOptions = ListDashboardVisualisationOptions | MatrixDashboardVisualisationOptions
46
+
47
+ export interface ListDashboardVisualisationOptions {
42
48
  showLatest?: boolean
49
+ columnsAsList?: boolean
50
+ }
51
+
52
+ export interface MatrixDashboardVisualisationOptions {
53
+ useRagColours?: boolean
43
54
  }
44
55
 
45
56
  export interface ListVisualisation extends DashboardVisualisation {
46
57
  type: DashboardVisualisationType.LIST
47
- columnsAsList: boolean
48
58
  }
49
59
 
50
60
  export enum DashboardVisualisationType {
@@ -52,6 +62,8 @@ export enum DashboardVisualisationType {
52
62
  DONUT = 'doughnut',
53
63
  BAR = 'bar',
54
64
  LINE = 'line',
65
+ MATRIX = 'matrix',
66
+ MATRIX_TIMESERIES = 'matrix-timeseries',
55
67
  BAR_TIMESERIES = 'bar-timeseries',
56
68
  LINE_TIMESERIES = 'line-timeseries',
57
69
  SCORECARD = 'scorecard',
@@ -1,2 +1,2 @@
1
- var d=Object.create;var p=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var D=Object.getPrototypeOf,y=Object.prototype.hasOwnProperty;var M=(t,s)=>{for(var o in s)p(t,o,{get:s[o],enumerable:!0})},w=(t,s,o,a)=>{if(s&&typeof s=="object"||typeof s=="function")for(let e of x(s))!y.call(t,e)&&e!==o&&p(t,e,{get:()=>s[e],enumerable:!(a=f(s,e))||a.enumerable});return t};var L=(t,s,o)=>(o=t!=null?d(D(t)):{},w(s||!t||!t.__esModule?p(o,"default",{value:t,enumerable:!0}):o,t)),T=t=>w(p({},"__esModule",{value:!0}),t);var k={};M(k,{createList:()=>g,createTableRows:()=>b,default:()=>$});module.exports=T(k);var h=L(require("../../../utils/datasetHelper"));const g=(t,s)=>{const{columns:o,showLatest:a=!0,columnsAsList:e}=t,{measures:r,keys:l}=o,u=!r&&!l||!r.length&&!l;let n=[...s];a&&(n=h.default.getLastestDataset(n));let i,c,m;return u?{head:i,rows:c,ts:m}=V(n):e?{head:i,rows:c,ts:m}=J(t,n):{head:i,rows:c,ts:m}=C(t,n),c.length&&r&&(c=E(c,r)),{table:{head:i,rows:c},ts:m}},J=(t,s)=>{const{columns:o}=t,{keys:a,measures:e}=o,r=h.default.getGroupKey(a||[],s),l=s[0]?.ts?.raw,u=l?`${l}`:"",n=[];n.push({text:""}),s.forEach(c=>{n.push({text:r?c[r.id].raw:""})});const i=[];return e.forEach(c=>{i.push([{text:c.display}])}),e.forEach((c,m)=>{s.forEach(R=>{i[m].push({text:`${R[c.id].raw}`})})}),{rows:i,head:n,ts:u}},b=(t,s)=>t.map(o=>{const a=s?.length?Array(s.length):Array(Object.keys(t[0]).length);return Object.keys(o).forEach((e,r)=>{const l=s?.length?s.findIndex(n=>n.id===e):r,u=o[e].raw;a.splice(l,1,{text:u})}),a}),C=(t,s)=>{const{measures:o}=t.columns,a=o.map(i=>({text:i.display})),e=h.default.getDatasetRows(t,s),r=h.default.filterRowsByDisplayColumns(t,e),l=b(r,o),u=e[0]?.ts?.raw,n=u?`${u}`:"";return{head:a,rows:l,ts:n}},V=t=>{const s=Object.keys(t[0]).map(l=>({text:l})),o=b(t),e=h.default.getLastestDataset(t)[0]?.ts?.raw,r=e?`${e}`:"";return{head:s,rows:o,ts:r}},E=(t,s)=>{const o=s.flatMap((a,e)=>a.aggregate?[e]:[]);if(o.length){const a=[{html:"<strong>Total<strong>"}];for(let e=1;e<s.length;e+=1)a[e]={text:""};t.push(a),o.forEach(e=>{const r=t.reduce((l,u)=>{const n=u[e];return n&&n.text&&(l+=Number(n.text)),l},0);t[t.length-1][e]={html:`<strong>${r}<strong>`}})}return t};var $={createList:g,createTableRows:b};0&&(module.exports={createList,createTableRows});
1
+ var R=Object.create;var b=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var x=Object.getPrototypeOf,L=Object.prototype.hasOwnProperty;var y=(t,s)=>{for(var e in s)b(t,e,{get:s[e],enumerable:!0})},d=(t,s,e,a)=>{if(s&&typeof s=="object"||typeof s=="function")for(let o of f(s))!L.call(t,o)&&o!==e&&b(t,o,{get:()=>s[o],enumerable:!(a=D(s,o))||a.enumerable});return t};var M=(t,s,e)=>(e=t!=null?R(x(t)):{},d(s||!t||!t.__esModule?b(e,"default",{value:t,enumerable:!0}):e,t)),T=t=>d(b({},"__esModule",{value:!0}),t);var A={};y(A,{createList:()=>g,createTableRows:()=>w,default:()=>O});module.exports=T(A);var p=M(require("../../../utils/datasetHelper"));const g=(t,s)=>{const{columns:e,options:a}=t,o=a?.showLatest||!0,l=a?.columnsAsList,{measures:n,keys:i}=e,r=!n&&!i||!n.length&&!i;let c=[...s];o&&(c=p.default.getLastestDataset(c));let u,h,m;return r?{head:u,rows:h,ts:m}=C(c):l?{head:u,rows:h,ts:m}=V(t,c):{head:u,rows:h,ts:m}=J(t,c),h.length&&n&&(h=E(h,n)),{table:{head:u,rows:h},ts:m}},V=(t,s)=>{const{columns:e}=t,{keys:a,measures:o}=e,l=p.default.getGroupKey(a||[],s),n=s[0]?.ts?.raw,i=n?`${n}`:"",r=[];r.push({text:""}),s.forEach(u=>{r.push({text:l?u[l.id].raw:""})});const c=[];return o.forEach(u=>{c.push([{text:u.display}])}),o.forEach((u,h)=>{s.forEach(m=>{c[h].push({text:`${m[u.id].raw}`})})}),{rows:c,head:r,ts:i}},w=(t,s)=>t.map(e=>{const a=s?.length?Array(s.length):Array(Object.keys(t[0]).length);return Object.keys(e).forEach((o,l)=>{const n=s?.length?s.findIndex(r=>r.id===o):l,i=e[o].raw;a.splice(n,1,{text:i})}),a}),J=(t,s)=>{const{measures:e}=t.columns,a=e.map(c=>({text:c.display})),o=p.default.getDatasetRows(t,s),l=p.default.filterRowsByDisplayColumns(t,o),n=w(l,e),i=o[0]?.ts?.raw,r=i?`${i}`:"";return{head:a,rows:n,ts:r}},C=t=>{const s=Object.keys(t[0]).map(n=>({text:n})),e=w(t),o=p.default.getLastestDataset(t)[0]?.ts?.raw,l=o?`${o}`:"";return{head:s,rows:e,ts:l}},E=(t,s)=>{const e=s.flatMap((a,o)=>a.aggregate?[o]:[]);if(e.length){const a=[{html:"<strong>Total<strong>"}];for(let o=1;o<s.length;o+=1)a[o]={text:""};t.push(a),e.forEach(o=>{const l=t.reduce((n,i)=>{const r=i[o];return r&&r.text&&(n+=Number(r.text)),n},0);t[t.length-1][o]={html:`<strong>${l}<strong>`}})}return t};var O={createList:g,createTableRows:w};0&&(module.exports={createList,createTableRows});
2
2
  //# sourceMappingURL=utils.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/dpr/components/_dashboards/dashboard-list/utils.ts"],
4
- "sourcesContent": ["/* eslint-disable no-param-reassign */\nimport { MoJTable, MoJTableRow } from '../../../types/Charts'\nimport { DashboardDataResponse } from '../../../types/Metrics'\nimport {\n DashboardVisualisationColumn,\n DashboardVisualisationColumnMeasure,\n ListVisualisation,\n} from '../dashboard/types'\nimport DatasetHelper from '../../../utils/datasetHelper'\n\nexport const createList = (\n listDefinition: ListVisualisation,\n dashboardData: DashboardDataResponse[],\n): { table: MoJTable; ts: string } => {\n const { columns, showLatest = true, columnsAsList } = listDefinition\n const { measures, keys } = columns\n const showAllData = (!measures && !keys) || (!measures.length && !keys)\n\n let datasetData: DashboardDataResponse[] = [...dashboardData]\n if (showLatest) {\n datasetData = DatasetHelper.getLastestDataset(datasetData)\n }\n\n let head\n let rows\n let ts\n\n if (showAllData) {\n ;({ head, rows, ts } = createFullList(datasetData))\n } else if (columnsAsList) {\n ;({ head, rows, ts } = createListFromColumns(listDefinition, datasetData))\n } else {\n ;({ head, rows, ts } = creatListFromRows(listDefinition, datasetData))\n }\n\n if (rows.length && measures) rows = sumColumns(rows, measures)\n\n return {\n table: {\n head,\n rows,\n },\n ts,\n }\n}\n\nconst createListFromColumns = (listDefinition: ListVisualisation, dashboardData: DashboardDataResponse[]) => {\n const { columns } = listDefinition\n const { keys, measures } = columns\n const groupKey = DatasetHelper.getGroupKey(keys || [], dashboardData)\n\n const timestampData = dashboardData[0]?.ts?.raw\n const ts = timestampData ? `${timestampData}` : ''\n\n const head = []\n head.push({ text: '' })\n dashboardData.forEach((row) => {\n head.push({\n text: groupKey ? row[groupKey.id].raw : '',\n })\n })\n\n const rows: MoJTableRow[][] = []\n measures.forEach((measure) => {\n rows.push([{ text: measure.display }] as MoJTableRow[])\n })\n\n measures.forEach((measure, index) => {\n dashboardData.forEach((row) => {\n rows[index].push({ text: `${row[measure.id].raw}` })\n })\n })\n\n return {\n rows,\n head,\n ts,\n }\n}\n\nexport const createTableRows = (\n data: DashboardDataResponse[],\n measures?: DashboardVisualisationColumn[],\n): MoJTableRow[][] => {\n return data.map((dataRow) => {\n const row: MoJTableRow[] = measures?.length ? Array(measures.length) : Array(Object.keys(data[0]).length)\n Object.keys(dataRow).forEach((key, index) => {\n const headIndex = measures?.length ? measures.findIndex((m) => m.id === key) : index\n const text = dataRow[key].raw\n row.splice(headIndex, 1, { text } as MoJTableRow)\n })\n\n return row\n })\n}\n\nconst creatListFromRows = (listDefinition: ListVisualisation, dashboardData: DashboardDataResponse[]) => {\n const { measures } = listDefinition.columns\n\n const head = measures.map((column) => {\n return { text: column.display }\n })\n\n const dataSetRows = DatasetHelper.getDatasetRows(listDefinition, dashboardData)\n const displayRows = DatasetHelper.filterRowsByDisplayColumns(listDefinition, dataSetRows)\n const rows = createTableRows(displayRows, measures)\n\n const timestampData = dataSetRows[0]?.ts?.raw\n const ts = timestampData ? `${timestampData}` : ''\n\n return {\n head,\n rows,\n ts,\n }\n}\n\nconst createFullList = (dashboardData: DashboardDataResponse[]) => {\n const head = Object.keys(dashboardData[0]).map((key) => {\n return { text: key }\n })\n const rows = createTableRows(dashboardData)\n\n const latestData = DatasetHelper.getLastestDataset(dashboardData)\n const timestampData = latestData[0]?.ts?.raw\n const ts = timestampData ? `${timestampData}` : ''\n\n return {\n head,\n rows,\n ts,\n }\n}\n\nconst sumColumns = (rowsData: MoJTableRow[][], measures: DashboardVisualisationColumnMeasure[]) => {\n const sumColumnIndexes: number[] = measures.flatMap((col, idx) => (col.aggregate ? [idx] : []))\n\n if (sumColumnIndexes.length) {\n const sumRow: MoJTableRow[] = [{ html: `<strong>Total<strong>` }]\n for (let index = 1; index < measures.length; index += 1) {\n sumRow[index] = { text: '' }\n }\n\n rowsData.push(sumRow)\n sumColumnIndexes.forEach((index) => {\n const total = rowsData.reduce((acc, row) => {\n const rowIndex = row[index]\n if (rowIndex && rowIndex.text) {\n acc += Number(rowIndex.text)\n }\n return acc\n }, 0)\n rowsData[rowsData.length - 1][index] = {\n html: `<strong>${total}<strong>`,\n }\n })\n }\n\n return rowsData\n}\n\nexport default {\n createList,\n createTableRows,\n}\n"],
5
- "mappings": "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",
6
- "names": ["utils_exports", "__export", "createList", "createTableRows", "utils_default", "__toCommonJS", "import_datasetHelper", "listDefinition", "dashboardData", "columns", "showLatest", "columnsAsList", "measures", "keys", "showAllData", "datasetData", "DatasetHelper", "head", "rows", "ts", "createFullList", "createListFromColumns", "creatListFromRows", "sumColumns", "groupKey", "timestampData", "row", "measure", "index", "data", "dataRow", "key", "headIndex", "m", "text", "column", "dataSetRows", "displayRows", "rowsData", "sumColumnIndexes", "col", "idx", "sumRow", "total", "acc", "rowIndex"]
4
+ "sourcesContent": ["/* eslint-disable no-param-reassign */\nimport { MoJTable, MoJTableRow } from '../../../types/Charts'\nimport { DashboardDataResponse } from '../../../types/Metrics'\nimport {\n DashboardVisualisationColumn,\n DashboardVisualisationColumnMeasure,\n ListDashboardVisualisationOptions,\n ListVisualisation,\n} from '../dashboard/types'\nimport DatasetHelper from '../../../utils/datasetHelper'\n\nexport const createList = (\n listDefinition: ListVisualisation,\n dashboardData: DashboardDataResponse[],\n): { table: MoJTable; ts: string } => {\n const { columns, options } = listDefinition\n const showLatest = (<ListDashboardVisualisationOptions>options)?.showLatest || true\n const columnsAsList = (<ListDashboardVisualisationOptions>options)?.columnsAsList\n const { measures, keys } = columns\n const showAllData = (!measures && !keys) || (!measures.length && !keys)\n\n let datasetData: DashboardDataResponse[] = [...dashboardData]\n if (showLatest) {\n datasetData = DatasetHelper.getLastestDataset(datasetData)\n }\n\n let head\n let rows\n let ts\n\n if (showAllData) {\n ;({ head, rows, ts } = createFullList(datasetData))\n } else if (columnsAsList) {\n ;({ head, rows, ts } = createListFromColumns(listDefinition, datasetData))\n } else {\n ;({ head, rows, ts } = creatListFromRows(listDefinition, datasetData))\n }\n\n if (rows.length && measures) rows = sumColumns(rows, measures)\n\n return {\n table: {\n head,\n rows,\n },\n ts,\n }\n}\n\nconst createListFromColumns = (listDefinition: ListVisualisation, dashboardData: DashboardDataResponse[]) => {\n const { columns } = listDefinition\n const { keys, measures } = columns\n const groupKey = DatasetHelper.getGroupKey(keys || [], dashboardData)\n\n const timestampData = dashboardData[0]?.ts?.raw\n const ts = timestampData ? `${timestampData}` : ''\n\n const head = []\n head.push({ text: '' })\n dashboardData.forEach((row) => {\n head.push({\n text: groupKey ? row[groupKey.id].raw : '',\n })\n })\n\n const rows: MoJTableRow[][] = []\n measures.forEach((measure) => {\n rows.push([{ text: measure.display }] as MoJTableRow[])\n })\n\n measures.forEach((measure, index) => {\n dashboardData.forEach((row) => {\n rows[index].push({ text: `${row[measure.id].raw}` })\n })\n })\n\n return {\n rows,\n head,\n ts,\n }\n}\n\nexport const createTableRows = (\n data: DashboardDataResponse[],\n measures?: DashboardVisualisationColumn[],\n): MoJTableRow[][] => {\n return data.map((dataRow) => {\n const row: MoJTableRow[] = measures?.length ? Array(measures.length) : Array(Object.keys(data[0]).length)\n Object.keys(dataRow).forEach((key, index) => {\n const headIndex = measures?.length ? measures.findIndex((m) => m.id === key) : index\n const text = dataRow[key].raw\n row.splice(headIndex, 1, { text } as MoJTableRow)\n })\n\n return row\n })\n}\n\nconst creatListFromRows = (listDefinition: ListVisualisation, dashboardData: DashboardDataResponse[]) => {\n const { measures } = listDefinition.columns\n\n const head = measures.map((column) => {\n return { text: column.display }\n })\n\n const dataSetRows = DatasetHelper.getDatasetRows(listDefinition, dashboardData)\n const displayRows = DatasetHelper.filterRowsByDisplayColumns(listDefinition, dataSetRows)\n const rows = createTableRows(displayRows, measures)\n\n const timestampData = dataSetRows[0]?.ts?.raw\n const ts = timestampData ? `${timestampData}` : ''\n\n return {\n head,\n rows,\n ts,\n }\n}\n\nconst createFullList = (dashboardData: DashboardDataResponse[]) => {\n const head = Object.keys(dashboardData[0]).map((key) => {\n return { text: key }\n })\n const rows = createTableRows(dashboardData)\n\n const latestData = DatasetHelper.getLastestDataset(dashboardData)\n const timestampData = latestData[0]?.ts?.raw\n const ts = timestampData ? `${timestampData}` : ''\n\n return {\n head,\n rows,\n ts,\n }\n}\n\nconst sumColumns = (rowsData: MoJTableRow[][], measures: DashboardVisualisationColumnMeasure[]) => {\n const sumColumnIndexes: number[] = measures.flatMap((col, idx) => (col.aggregate ? [idx] : []))\n\n if (sumColumnIndexes.length) {\n const sumRow: MoJTableRow[] = [{ html: `<strong>Total<strong>` }]\n for (let index = 1; index < measures.length; index += 1) {\n sumRow[index] = { text: '' }\n }\n\n rowsData.push(sumRow)\n sumColumnIndexes.forEach((index) => {\n const total = rowsData.reduce((acc, row) => {\n const rowIndex = row[index]\n if (rowIndex && rowIndex.text) {\n acc += Number(rowIndex.text)\n }\n return acc\n }, 0)\n rowsData[rowsData.length - 1][index] = {\n html: `<strong>${total}<strong>`,\n }\n })\n }\n\n return rowsData\n}\n\nexport default {\n createList,\n createTableRows,\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["utils_exports", "__export", "createList", "createTableRows", "utils_default", "__toCommonJS", "import_datasetHelper", "listDefinition", "dashboardData", "columns", "options", "showLatest", "columnsAsList", "measures", "keys", "showAllData", "datasetData", "DatasetHelper", "head", "rows", "ts", "createFullList", "createListFromColumns", "creatListFromRows", "sumColumns", "groupKey", "timestampData", "row", "measure", "index", "data", "dataRow", "key", "headIndex", "m", "text", "column", "dataSetRows", "displayRows", "rowsData", "sumColumnIndexes", "col", "idx", "sumRow", "total", "acc", "rowIndex"]
7
7
  }
@@ -31,6 +31,7 @@ describe('DashboardListUtils', () => {
31
31
  it('should create the list data from data columns', () => {
32
32
  const visDefinition = dataQualityColsToList as unknown as ListVisualisation
33
33
  const result = DashboardListUtils.createList(visDefinition, mockTimeSeriesDataLastSixMonths.flat())
34
+
34
35
  const expectedResult = {
35
36
  table: {
36
37
  head: [{ text: '' }, { text: 'MDI' }, { text: 'SLI' }, { text: 'DAI' }],
@@ -4,6 +4,7 @@ import { DashboardDataResponse } from '../../../types/Metrics'
4
4
  import {
5
5
  DashboardVisualisationColumn,
6
6
  DashboardVisualisationColumnMeasure,
7
+ ListDashboardVisualisationOptions,
7
8
  ListVisualisation,
8
9
  } from '../dashboard/types'
9
10
  import DatasetHelper from '../../../utils/datasetHelper'
@@ -12,7 +13,9 @@ export const createList = (
12
13
  listDefinition: ListVisualisation,
13
14
  dashboardData: DashboardDataResponse[],
14
15
  ): { table: MoJTable; ts: string } => {
15
- const { columns, showLatest = true, columnsAsList } = listDefinition
16
+ const { columns, options } = listDefinition
17
+ const showLatest = (<ListDashboardVisualisationOptions>options)?.showLatest || true
18
+ const columnsAsList = (<ListDashboardVisualisationOptions>options)?.columnsAsList
16
19
  const { measures, keys } = columns
17
20
  const showAllData = (!measures && !keys) || (!measures.length && !keys)
18
21
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/dpr/components/_filters/types.d.ts"],
4
- "sourcesContent": ["import { Granularity, QuickFilters } from '../_inputs/granular-date-range/types'\nimport { FilterType } from './filter-input/enum'\nimport RelativeDateRange from '../_inputs/date-range/types'\n\nexport interface FilterOption {\n value: string\n text: string\n disabled?: boolean\n selected?: boolean\n sortedAsc?: boolean\n}\n\nexport type FilterValue =\n | TextFilterValue\n | FilterValueWithOptions\n | MultiselectFilterValue\n | DateFilterValue\n | DateRangeFilterValue\n | GranularDateRangeFilterValue\n\nexport type FilterValueType = string | DateRange | GranularDateRange | null\nexport interface BaseFilterValue {\n text: string\n name: string\n type: FilterType\n value: FilterValueType\n mandatory?: boolean\n}\n\nexport interface TextFilterValue extends BaseFilterValue {\n minimumLength?: number\n pattern?: string\n}\n\nexport interface FilterValueWithOptions extends BaseFilterValue {\n options: Array<FilterOption>\n staticOptionNameValue?: string\n dynamicResourceEndpoint?: string\n}\n\nexport interface MultiselectFilterValue extends Omit<BaseFilterValue, 'value'>, FilterValueWithOptions {\n value: string | null\n values: string[]\n}\n\nexport interface DateFilterValue extends Omit<BaseFilterValue, 'value'> {\n value: string | null\n min?: string\n max?: string\n}\n\nexport interface DateRangeFilterValue extends Omit<BaseFilterValue, 'value'> {\n value: DateRange\n min?: string\n max?: string\n relativeOptions?: { value: string; text: string; disabled?: boolean }[]\n}\n\nexport interface GranularDateRangeFilterValue extends Omit<BaseFilterValue, 'value'> {\n value: GranularDateRange\n min?: string\n max?: string\n relativeOptions?: { value: string; text: string; disabled?: boolean }[]\n quickFilterOptions?: { value: string; text: string; disabled?: boolean }[]\n granularityOptions?: { value: string; text: string }[]\n}\n\nexport interface SelectedFilter {\n text: string\n href: string\n classes: string\n}\n\nexport interface DateRange {\n start: string\n end: string\n relative?: RelativeDateRange\n}\n\nexport interface GranularDateRange extends DateRange {\n granularity: {\n value: Granularity\n display: string\n }\n quickFilter?: {\n value: QuickFilters\n display: string\n }\n partialDate?: {\n start: boolean\n end: boolean\n }\n}\n\nexport interface FilterOptions {\n filters: Array<FilterValue>\n selectedFilters: Array<SelectedFilter>\n urlWithNoFilters: string\n}\n"],
4
+ "sourcesContent": ["import { Granularity, QuickFilters } from '../_inputs/granular-date-range/types'\nimport { FilterType } from './filter-input/enum'\nimport RelativeDateRange from '../_inputs/date-range/types'\n\nexport interface FilterOption {\n value: string\n text: string\n disabled?: boolean\n selected?: boolean\n sortedAsc?: boolean\n}\n\nexport type FilterValue =\n | TextFilterValue\n | FilterValueWithOptions\n | MultiselectFilterValue\n | DateFilterValue\n | DateRangeFilterValue\n | GranularDateRangeFilterValue\n\nexport type FilterValueType = string | DateRange | GranularDateRange | null\nexport interface BaseFilterValue {\n text: string\n name: string\n type: FilterType\n value: FilterValueType\n mandatory?: boolean\n}\n\nexport interface TextFilterValue extends BaseFilterValue {\n minimumLength?: number\n pattern?: string\n}\n\nexport interface FilterValueWithOptions extends BaseFilterValue {\n options: Array<FilterOption>\n staticOptionNameValue?: string\n dynamicResourceEndpoint?: string\n}\n\nexport interface MultiselectFilterValue extends Omit<BaseFilterValue, 'value'>, FilterValueWithOptions {\n value: string | null\n values: string[]\n}\n\nexport interface DateFilterValue extends Omit<BaseFilterValue, 'value'> {\n value: string | null\n min?: string\n max?: string\n}\n\nexport interface DateRangeFilterValue extends Omit<BaseFilterValue, 'value'> {\n value: DateRange\n min?: string\n max?: string\n relativeOptions?: { value: string; text: string; disabled?: boolean }[]\n}\n\nexport interface GranularDateRangeFilterValue extends Omit<BaseFilterValue, 'value'> {\n value: GranularDateRange\n min?: string\n max?: string\n relativeOptions?: { value: string; text: string; disabled?: boolean }[]\n quickFilterOptions?: { value: string; text: string; disabled?: boolean }[]\n granularityOptions?: { value: string; text: string }[]\n}\n\nexport interface SelectedFilter {\n text: string\n href: string\n classes: string\n}\n\nexport interface DateRange {\n start: string\n end: string\n relative?: RelativeDateRange\n}\n\nexport interface GranularDateRange extends DateRange {\n granularity: GranularDateRangeGranularityValue\n quickFilter?: GranularDateRangeQuickFilterValue\n partialDate?: {\n start: boolean\n end: boolean\n }\n}\n\ninterface GranularDateRangeGranularityValue {\n value: Granularity\n display: string\n}\n\nexport interface GranularDateRangeQuickFilterValue {\n value: QuickFilters\n display: string\n}\n\nexport interface FilterOptions {\n filters: Array<FilterValue>\n selectedFilters: Array<SelectedFilter>\n urlWithNoFilters: string\n}\n"],
5
5
  "mappings": "kWAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
6
  "names": ["types_d_exports", "__toCommonJS"]
7
7
  }
@@ -78,20 +78,24 @@ export interface DateRange {
78
78
  }
79
79
 
80
80
  export interface GranularDateRange extends DateRange {
81
- granularity: {
82
- value: Granularity
83
- display: string
84
- }
85
- quickFilter?: {
86
- value: QuickFilters
87
- display: string
88
- }
81
+ granularity: GranularDateRangeGranularityValue
82
+ quickFilter?: GranularDateRangeQuickFilterValue
89
83
  partialDate?: {
90
84
  start: boolean
91
85
  end: boolean
92
86
  }
93
87
  }
94
88
 
89
+ interface GranularDateRangeGranularityValue {
90
+ value: Granularity
91
+ display: string
92
+ }
93
+
94
+ export interface GranularDateRangeQuickFilterValue {
95
+ value: QuickFilters
96
+ display: string
97
+ }
98
+
95
99
  export interface FilterOptions {
96
100
  filters: Array<FilterValue>
97
101
  selectedFilters: Array<SelectedFilter>
@@ -1,2 +1,2 @@
1
- var I=Object.create;var D=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var G=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,N=Object.prototype.hasOwnProperty;var M=(a,i)=>{for(var e in i)D(a,e,{get:i[e],enumerable:!0})},C=(a,i,e,r)=>{if(i&&typeof i=="object"||typeof i=="function")for(let t of G(i))!N.call(a,t)&&t!==e&&D(a,t,{get:()=>i[t],enumerable:!(r=P(i,t))||r.enumerable});return a};var d=(a,i,e)=>(e=a!=null?I(j(a)):{},C(i||!a||!a.__esModule?D(e,"default",{value:a,enumerable:!0}):e,a)),A=a=>C(D({},"__esModule",{value:!0}),a);var _={};M(_,{default:()=>W,getFilters:()=>E,getFiltersFromDefinition:()=>L,getPersonalisedFilters:()=>k,redirectWithDefaultFilters:()=>O,setFilterQueryFromFilterDefinition:()=>x,setFilterValuesFromRequest:()=>w,setRequestQueryFromFilterValues:()=>U});module.exports=A(_);var n=require("./filter-input/enum"),F=require("../../types/ReportQuery"),$=d(require("./filters-selected/utils")),g=d(require("../_inputs/date-range/utils")),h=d(require("../_inputs/date-input/utils")),R=d(require("../_inputs/granular-date-range/utils")),b=d(require("../_inputs/multi-select/utils")),Q=d(require("../../utils/Personalisation/personalisationUtils")),T=d(require("../../utils/urlHelper")),q=require("./filtersTypeEnum"),S=d(require("../../utils/localsHelper"));const w=(a,i,e="filters.")=>{const{preventDefault:r}=i.query;return Object.keys(i.query).every(t=>!t.includes(e))&&!r?a:a.map(t=>{let l,s;switch(t.type.toLowerCase()){case n.FilterType.dateRange.toLowerCase():l=g.default.setValueFromRequest(t,i,e);break;case n.FilterType.granularDateRange.toLowerCase():l=R.default.setValueFromRequest(t,i,e);break;case n.FilterType.date.toLowerCase():l=h.default.setValueFromRequest(t,i,e);break;case n.FilterType.multiselect.toLowerCase():({requestfilterValue:l,requestfilterValues:s}=b.default.setValueFromRequest(t,i,e));break;default:l=i.query[`${e}${t.name}`];break}let f=null;return l?f=l:r&&(f=""),{...t,value:f,...s&&{values:s}}})},x=(a,i)=>{let e=a.filter(r=>r.filter);return i&&(e=e.filter(r=>r.filter.interactive)),e.filter(r=>r.filter!==void 0).filter(r=>r.filter.defaultValue!==void 0).map(r=>{const t=r.filter;switch(t.type.toLocaleLowerCase()){case n.FilterType.dateRange.toLowerCase():return g.default.getQueryFromDefinition(t,r.name,F.DEFAULT_FILTERS_PREFIX);case n.FilterType.multiselect.toLowerCase():return b.default.getQueryFromDefinition(t,r.name,F.DEFAULT_FILTERS_PREFIX);case n.FilterType.granularDateRange.toLowerCase():{const s=g.default.getQueryFromDefinition(t,r.name,F.DEFAULT_FILTERS_PREFIX);return R.default.getQueryFromDefinition(t,r.name,F.DEFAULT_FILTERS_PREFIX,s)}default:return`${F.DEFAULT_FILTERS_PREFIX}${r.name}=${t.defaultValue}`}}).join("&")},L=(a,i)=>a.filter(e=>e.filter).filter(e=>{if(i!==void 0){const r=e.filter.interactive;return r===void 0?!i:i===r}return!0}).map(e=>{const{display:r,name:t}=e,l=e.filter,{type:s,staticOptions:c,dynamicOptions:f,defaultValue:o,mandatory:p,pattern:y}=l,m=c?c.map(V=>({value:V.name,text:V.display})):[];let u={text:r,name:t,type:s,value:o||null,minimumLength:f?.minimumLength,mandatory:p||!1,pattern:y};const v={value:"no-filter",text:"None",disabled:!1};switch(s){case n.FilterType.autocomplete.toLowerCase():u={...u,options:m};break;case n.FilterType.radio:p||m.unshift(v),u={...u,options:m};break;case n.FilterType.select:{p||m.unshift(v),m.unshift({value:"",text:"Select your option",disabled:!0,selected:!0}),u={...u,options:m};break}case n.FilterType.multiselect.toLowerCase():u={...u,options:m,values:o?o.split(","):[]};break;case n.FilterType.dateRange.toLowerCase():u=g.default.getFilterFromDefinition(l,u);break;case n.FilterType.date.toLowerCase():u=h.default.getFilterFromDefinition(l,u);break;case n.FilterType.granularDateRange.toLocaleLowerCase():{const V=l;u=R.default.getFilterFromDefinition(V,u);break}default:break}return u}),U=a=>a.filter(e=>e.value).reduce((e,r)=>{const{value:t,name:l}=r,s=`filters.${l}`;switch(r.type){case n.FilterType.granularDateRange.toLowerCase():case n.FilterType.dateRange.toLowerCase():Object.keys(t).forEach(c=>{e={...e,[`${s}.${c}`]:t[c]}});break;case n.FilterType.multiselect.toLowerCase():e={...e,[`${s}`]:t.split(",")};break;default:e={...e,[`${s}`]:t};break}return e},{}),O=(a,i,e,r)=>{const t={},{specification:l}=i,s=l?l.fields:[],{preventDefault:c}=r.query;if(Object.keys(a.filters).length===0&&!c&&s.filter(o=>o.filter&&o.filter.defaultValue).forEach(o=>{const{filter:p}=o;if(p)if(p.type.toLowerCase()===n.FilterType.dateRange.toLowerCase()){const{defaultValue:y}=p,m=y?y.split(" - "):"";m.length>=1&&(t[`${F.DEFAULT_FILTERS_PREFIX}${o.name}.start`]=m[0],m.length>=2&&(t[`${F.DEFAULT_FILTERS_PREFIX}${o.name}.end`]=m[1]))}else t[`${F.DEFAULT_FILTERS_PREFIX}${o.name}`]=p.defaultValue||""}),Object.keys(t).length>0){const o=(0,T.default)(a.toRecordWithFilterPrefix(),t,s);return e.redirect(`${r.baseUrl}${r.path}${o}`),!0}return!1},k=async(a,i,e,r,t)=>{const{reportId:l,id:s}=i.params,{dprUser:c}=S.default.getValues(e),f=await r.defaultFilterValuesService.get(c.id,l,s,t);let o=a;return f&&(o=Q.default.setFilterValuesFromSavedDefaults(a,[],f).filters),{filters:o,defaultFilterValues:f}},E=async({fields:a,req:i,res:e,prefix:r="filters.",services:t,filtersType:l})=>{let s=await L(a,l===q.FiltersType.INTERACTIVE),c,f=!1;if(t){const{filters:p,defaultFilterValues:y}=await k(s,i,e,t,l);s=p,c=y?.length>0,f=!0}i.query&&(s=w(s,i));const o=$.default.getSelectedFilters(s,r);return{filters:s,selectedFilters:o,hasDefaults:c,canSaveDefaults:f}};var W={getFiltersFromDefinition:L,setFilterValuesFromRequest:w,getFilters:E,setFilterQueryFromFilterDefinition:x,redirectWithDefaultFilters:O,setRequestQueryFromFilterValues:U,getPersonalisedFilters:k};0&&(module.exports={getFilters,getFiltersFromDefinition,getPersonalisedFilters,redirectWithDefaultFilters,setFilterQueryFromFilterDefinition,setFilterValuesFromRequest,setRequestQueryFromFilterValues});
1
+ var E=Object.create;var D=Object.defineProperty;var I=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,N=Object.prototype.hasOwnProperty;var M=(i,a)=>{for(var e in a)D(i,e,{get:a[e],enumerable:!0})},$=(i,a,e,r)=>{if(a&&typeof a=="object"||typeof a=="function")for(let t of P(a))!N.call(i,t)&&t!==e&&D(i,t,{get:()=>a[t],enumerable:!(r=I(a,t))||r.enumerable});return i};var d=(i,a,e)=>(e=i!=null?E(j(i)):{},$(a||!i||!i.__esModule?D(e,"default",{value:i,enumerable:!0}):e,i)),A=i=>$(D({},"__esModule",{value:!0}),i);var _={};M(_,{default:()=>W,getFilters:()=>U,getFiltersFromDefinition:()=>w,getPersonalisedFilters:()=>k,redirectWithDefaultFilters:()=>O,setFilterQueryFromFilterDefinition:()=>S,setFilterValuesFromRequest:()=>b,setRequestQueryFromFilterValues:()=>x});module.exports=A(_);var u=require("./filter-input/enum"),F=require("../../types/ReportQuery"),C=d(require("./filters-selected/utils")),g=d(require("../_inputs/date-range/utils")),R=d(require("../_inputs/date-input/utils")),V=d(require("../_inputs/granular-date-range/utils")),h=d(require("../_inputs/multi-select/utils")),Q=d(require("../../utils/Personalisation/personalisationUtils")),G=d(require("../../utils/urlHelper")),q=require("./filtersTypeEnum"),T=d(require("../../utils/localsHelper"));const b=(i,a,e="filters.")=>{const{preventDefault:r}=a.query;return Object.keys(a.query).every(t=>!t.includes(e))&&!r?i:i.map(t=>{let s,l;switch(t.type.toLowerCase()){case u.FilterType.dateRange.toLowerCase():s=g.default.setValueFromRequest(t,a,e);break;case u.FilterType.granularDateRange.toLowerCase():s=V.default.setValueFromRequest(t,a,e);break;case u.FilterType.date.toLowerCase():s=R.default.setValueFromRequest(t,a,e);break;case u.FilterType.multiselect.toLowerCase():({requestfilterValue:s,requestfilterValues:l}=h.default.setValueFromRequest(t,a,e));break;default:s=a.query[`${e}${t.name}`];break}let o=null;return s?o=s:r&&(o=""),{...t,value:o,...l&&{values:l}}})},S=(i,a)=>{let e=i.filter(r=>r.filter);return a&&(e=e.filter(r=>r.filter.interactive)),e.filter(r=>r.filter!==void 0).filter(r=>r.filter.defaultValue!==void 0).map(r=>{const t=r.filter;switch(t.type.toLocaleLowerCase()){case u.FilterType.dateRange.toLowerCase():return g.default.getQueryFromDefinition(t,r.name,F.DEFAULT_FILTERS_PREFIX);case u.FilterType.multiselect.toLowerCase():return h.default.getQueryFromDefinition(t,r.name,F.DEFAULT_FILTERS_PREFIX);case u.FilterType.granularDateRange.toLowerCase():{const l=g.default.getQueryFromDefinition(t,r.name,F.DEFAULT_FILTERS_PREFIX);return V.default.getQueryFromDefinition(t,r.name,F.DEFAULT_FILTERS_PREFIX,l)}default:return`${F.DEFAULT_FILTERS_PREFIX}${r.name}=${t.defaultValue}`}}).join("&")},w=(i,a)=>i.filter(e=>e.filter).filter(e=>{if(a!==void 0){const r=e.filter.interactive;return r===void 0?!a:a===r}return!0}).map(e=>{const{display:r,name:t}=e,s=e.filter,{type:l,staticOptions:f,dynamicOptions:o,defaultValue:n,mandatory:p,pattern:y}=s,m=f?f.map(v=>({value:v.name,text:v.display})):[];let c={text:r,name:t,type:l,value:n||null,minimumLength:o?.minimumLength,mandatory:p||!1,pattern:y};const L={value:"no-filter",text:"None",disabled:!1};switch(l){case u.FilterType.autocomplete.toLowerCase():c={...c,options:m};break;case u.FilterType.radio:p||m.unshift(L),c={...c,options:m};break;case u.FilterType.select:{p||m.unshift(L),m.unshift({value:"",text:"Select your option",disabled:!0,selected:!0}),c={...c,options:m};break}case u.FilterType.multiselect.toLowerCase():c={...c,options:m,values:n?n.split(","):[]};break;case u.FilterType.dateRange.toLowerCase():c=g.default.getFilterFromDefinition(s,c);break;case u.FilterType.date.toLowerCase():c=R.default.getFilterFromDefinition(s,c);break;case u.FilterType.granularDateRange.toLocaleLowerCase():{c=V.default.getFilterFromDefinition(s,c);break}default:break}return c}),x=i=>i.filter(e=>e.value).reduce((e,r)=>{const{value:t,name:s}=r,l=`filters.${s}`;switch(r.type){case u.FilterType.granularDateRange.toLowerCase():{const f=t;Object.keys(f).forEach(o=>{let n=f[o];o.includes("partialDate")?e={...e}:((o.includes("granularity")||o.includes("quickFilter"))&&(n=n.value),e={...e,[`${l}.${o}`]:n})})}break;case u.FilterType.dateRange.toLowerCase():Object.keys(t).forEach(f=>{e={...e,[`${l}.${f}`]:t[f]}});break;case u.FilterType.multiselect.toLowerCase():e={...e,[`${l}`]:t.split(",")};break;default:e={...e,[`${l}`]:t};break}return e},{}),O=(i,a,e,r)=>{const t={},{specification:s}=a,l=s?s.fields:[],{preventDefault:f}=r.query;if(Object.keys(i.filters).length===0&&!f&&l.filter(n=>n.filter&&n.filter.defaultValue).forEach(n=>{const{filter:p}=n;if(p)if(p.type.toLowerCase()===u.FilterType.dateRange.toLowerCase()){const{defaultValue:y}=p,m=y?y.split(" - "):"";m.length>=1&&(t[`${F.DEFAULT_FILTERS_PREFIX}${n.name}.start`]=m[0],m.length>=2&&(t[`${F.DEFAULT_FILTERS_PREFIX}${n.name}.end`]=m[1]))}else t[`${F.DEFAULT_FILTERS_PREFIX}${n.name}`]=p.defaultValue||""}),Object.keys(t).length>0){const n=(0,G.default)(i.toRecordWithFilterPrefix(),t,l);return e.redirect(`${r.baseUrl}${r.path}${n}`),!0}return!1},k=async(i,a,e,r,t)=>{const{reportId:s,id:l}=a.params,{dprUser:f}=T.default.getValues(e),o=await r.defaultFilterValuesService.get(f.id,s,l,t);let n=i;return o&&(n=Q.default.setFilterValuesFromSavedDefaults(i,[],o).filters),{filters:n,defaultFilterValues:o}},U=async({fields:i,req:a,res:e,prefix:r="filters.",services:t,filtersType:s})=>{let l=await w(i,s===q.FiltersType.INTERACTIVE),f,o=!1;if(t){const{filters:p,defaultFilterValues:y}=await k(l,a,e,t,s);l=p,f=y?.length>0,o=!0}a.query&&(l=b(l,a));const n=C.default.getSelectedFilters(l,r);return{filters:l,selectedFilters:n,hasDefaults:f,canSaveDefaults:o}};var W={getFiltersFromDefinition:w,setFilterValuesFromRequest:b,getFilters:U,setFilterQueryFromFilterDefinition:S,redirectWithDefaultFilters:O,setRequestQueryFromFilterValues:x,getPersonalisedFilters:k};0&&(module.exports={getFilters,getFiltersFromDefinition,getPersonalisedFilters,redirectWithDefaultFilters,setFilterQueryFromFilterDefinition,setFilterValuesFromRequest,setRequestQueryFromFilterValues});
2
2
  //# sourceMappingURL=utils.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/dpr/components/_filters/utils.ts"],
4
- "sourcesContent": ["/* eslint-disable no-param-reassign */\nimport { Request, Response } from 'express'\nimport { FilterType } from './filter-input/enum'\nimport type { components } from '../../types/api'\nimport type { FilterOption } from './filter-input/types'\nimport type {\n DateFilterValue,\n FilterValueType,\n DateRangeFilterValue,\n FilterValue,\n MultiselectFilterValue,\n GranularDateRangeFilterValue,\n} from './types'\nimport ReportQuery, { DEFAULT_FILTERS_PREFIX } from '../../types/ReportQuery'\n\nimport SelectedFiltersUtils from './filters-selected/utils'\nimport DateRangeInputUtils from '../_inputs/date-range/utils'\nimport DateInputUtils from '../_inputs/date-input/utils'\nimport GranularDateRangeInputUtils from '../_inputs/granular-date-range/utils'\nimport MultiSelectUtils from '../_inputs/multi-select/utils'\nimport { Granularity, QuickFilters } from '../_inputs/granular-date-range/types'\nimport PersonalistionUtils from '../../utils/Personalisation/personalisationUtils'\nimport createUrlForParameters from '../../utils/urlHelper'\nimport { Services } from '../../types/Services'\nimport { FiltersType } from './filtersTypeEnum'\nimport LocalsHelper from '../../utils/localsHelper'\nimport { defaultFilterValue } from '../../utils/Personalisation/types'\n\n/**\n * Given a FilterValue[], will update the values to match the req.query values if present\n *\n * @param {FilterValue[]} filters\n * @param {Request} req\n * @param {string} [prefix='filters.']\n * @return {*} {FilterValue[]}\n */\nexport const setFilterValuesFromRequest = (\n filters: FilterValue[],\n req: Request,\n prefix = 'filters.',\n): FilterValue[] => {\n const { preventDefault } = req.query\n\n if (Object.keys(req.query).every((key) => !key.includes(prefix)) && !preventDefault) {\n return filters\n }\n\n return filters.map((filter: FilterValue) => {\n let requestfilterValue: FilterValueType\n let requestfilterValues: string[] | undefined\n\n const type = filter.type.toLowerCase()\n switch (type) {\n case FilterType.dateRange.toLowerCase():\n requestfilterValue = DateRangeInputUtils.setValueFromRequest(<DateRangeFilterValue>filter, req, prefix)\n break\n case FilterType.granularDateRange.toLowerCase():\n requestfilterValue = GranularDateRangeInputUtils.setValueFromRequest(\n <GranularDateRangeFilterValue>filter,\n req,\n prefix,\n )\n break\n case FilterType.date.toLowerCase():\n requestfilterValue = DateInputUtils.setValueFromRequest(<DateFilterValue>filter, req, prefix)\n break\n case FilterType.multiselect.toLowerCase():\n ;({ requestfilterValue, requestfilterValues } = MultiSelectUtils.setValueFromRequest(\n <MultiselectFilterValue>filter,\n req,\n prefix,\n ))\n break\n default:\n requestfilterValue = <string>req.query[`${prefix}${filter.name}`]\n break\n }\n\n let value: FilterValueType = null\n if (requestfilterValue) {\n value = requestfilterValue\n } else if (preventDefault) {\n value = ''\n }\n\n return {\n ...filter,\n value,\n ...(requestfilterValues && { values: requestfilterValues }),\n }\n })\n}\n\nexport const setFilterQueryFromFilterDefinition = (\n fields: components['schemas']['FieldDefinition'][],\n interactive?: boolean,\n) => {\n let filterFields: components['schemas']['FieldDefinition'][] = fields.filter((f) => f.filter)\n if (interactive) {\n filterFields = filterFields.filter(\n (f) => (<components['schemas']['FilterDefinition'] & { interactive?: boolean }>f.filter).interactive,\n )\n }\n\n return filterFields\n .filter((field) => field.filter !== undefined)\n .filter((field) => (<components['schemas']['FilterDefinition']>field.filter).defaultValue !== undefined)\n .map((field) => {\n const filter = <components['schemas']['FilterDefinition']>field.filter\n const type = filter.type.toLocaleLowerCase()\n\n switch (type) {\n case FilterType.dateRange.toLowerCase():\n return DateRangeInputUtils.getQueryFromDefinition(filter, field.name, DEFAULT_FILTERS_PREFIX)\n\n case FilterType.multiselect.toLowerCase():\n return MultiSelectUtils.getQueryFromDefinition(filter, field.name, DEFAULT_FILTERS_PREFIX)\n\n case FilterType.granularDateRange.toLowerCase(): {\n const startEndParams = DateRangeInputUtils.getQueryFromDefinition(filter, field.name, DEFAULT_FILTERS_PREFIX)\n return GranularDateRangeInputUtils.getQueryFromDefinition(\n filter as unknown as components['schemas']['FilterDefinition'] & {\n defaultGranularity: Granularity\n defaultQuickFilterValue: QuickFilters\n },\n field.name,\n DEFAULT_FILTERS_PREFIX,\n startEndParams,\n )\n }\n\n default:\n return `${DEFAULT_FILTERS_PREFIX}${field.name}=${filter.defaultValue}`\n }\n })\n .join('&')\n}\n\nexport const getFiltersFromDefinition = (\n fields: components['schemas']['FieldDefinition'][],\n interactive?: boolean,\n): FilterValue[] => {\n return fields\n .filter((f) => f.filter)\n .filter((f) => {\n if (interactive !== undefined) {\n const interactiveFilterValue = (<\n components['schemas']['FieldDefinition'] & {\n interactive?: boolean\n }\n >f.filter).interactive\n\n // NOTE: Uncomment if filters are meant to be both interactive and non interactive.\n if (interactiveFilterValue === undefined) {\n return !interactive\n }\n\n return interactive === interactiveFilterValue\n }\n return true\n })\n .map((f) => {\n const { display: text, name } = f\n const filter = <components['schemas']['FilterDefinition']>f.filter\n const { type, staticOptions, dynamicOptions, defaultValue, mandatory, pattern } = filter\n\n const options: FilterOption[] = staticOptions\n ? staticOptions.map((opt) => {\n return { value: opt.name, text: opt.display }\n })\n : []\n\n let filterData: FilterValue = {\n text,\n name,\n type: type as FilterType,\n value: defaultValue || null,\n minimumLength: dynamicOptions?.minimumLength,\n mandatory: mandatory || false,\n pattern,\n }\n\n const noFilterOption = {\n value: 'no-filter',\n text: 'None',\n disabled: false,\n }\n\n switch (type) {\n case FilterType.autocomplete.toLowerCase():\n filterData = {\n ...filterData,\n options,\n }\n break\n\n case FilterType.radio:\n if (!mandatory) options.unshift(noFilterOption)\n filterData = {\n ...filterData,\n options,\n }\n break\n\n case FilterType.select: {\n if (!mandatory) options.unshift(noFilterOption)\n options.unshift({\n value: '',\n text: 'Select your option',\n disabled: true,\n selected: true,\n })\n\n filterData = {\n ...filterData,\n options,\n }\n break\n }\n\n case FilterType.multiselect.toLowerCase():\n filterData = {\n ...filterData,\n options,\n values: defaultValue ? defaultValue.split(',') : [],\n }\n break\n\n case FilterType.dateRange.toLowerCase():\n filterData = DateRangeInputUtils.getFilterFromDefinition(filter, filterData)\n break\n\n case FilterType.date.toLowerCase():\n filterData = DateInputUtils.getFilterFromDefinition(filter, filterData)\n break\n\n case FilterType.granularDateRange.toLocaleLowerCase(): {\n const granularDateRangeFilter = filter as components['schemas']['FilterDefinition']\n filterData = GranularDateRangeInputUtils.getFilterFromDefinition(granularDateRangeFilter, filterData)\n break\n }\n\n default:\n break\n }\n\n return filterData\n })\n}\n\nexport const setRequestQueryFromFilterValues = (filterValues: FilterValue[]) => {\n const requestQuery = filterValues\n .filter((fv) => fv.value)\n .reduce((acc, curr) => {\n const { value, name } = curr\n const filterPrefix = `filters.${name}`\n switch (curr.type) {\n case FilterType.granularDateRange.toLowerCase():\n case FilterType.dateRange.toLowerCase():\n Object.keys(value).forEach((key) => {\n acc = {\n ...acc,\n [`${filterPrefix}.${key}`]: value[key as keyof FilterValueType],\n }\n })\n break\n case FilterType.multiselect.toLowerCase():\n acc = {\n ...acc,\n [`${filterPrefix}`]: (<string>value).split(','),\n }\n break\n default:\n acc = {\n ...acc,\n [`${filterPrefix}`]: value,\n }\n break\n }\n return acc\n }, {})\n\n return requestQuery\n}\n\nexport const redirectWithDefaultFilters = (\n reportQuery: ReportQuery,\n variantDefinition: components['schemas']['VariantDefinition'],\n response: Response,\n request: Request,\n) => {\n const defaultFilters: Record<string, string> = {}\n const { specification } = variantDefinition\n const fields = specification ? specification.fields : []\n const { preventDefault } = request.query\n const hasNoQueryFilters = Object.keys(reportQuery.filters).length === 0 && !preventDefault\n if (hasNoQueryFilters) {\n fields\n .filter((f) => f.filter && f.filter.defaultValue)\n .forEach((f) => {\n const { filter } = f\n if (filter) {\n if (filter.type.toLowerCase() === FilterType.dateRange.toLowerCase()) {\n const { defaultValue } = <components['schemas']['FilterDefinition']>filter\n const dates = defaultValue ? defaultValue.split(' - ') : ''\n\n if (dates.length >= 1) {\n // eslint-disable-next-line prefer-destructuring\n defaultFilters[`${DEFAULT_FILTERS_PREFIX}${f.name}.start`] = dates[0]\n\n if (dates.length >= 2) {\n // eslint-disable-next-line prefer-destructuring\n defaultFilters[`${DEFAULT_FILTERS_PREFIX}${f.name}.end`] = dates[1]\n }\n }\n } else {\n defaultFilters[`${DEFAULT_FILTERS_PREFIX}${f.name}`] = filter.defaultValue || ''\n }\n }\n })\n }\n\n if (Object.keys(defaultFilters).length > 0) {\n const querystring = createUrlForParameters(reportQuery.toRecordWithFilterPrefix(), defaultFilters, fields)\n response.redirect(`${request.baseUrl}${request.path}${querystring}`)\n return true\n }\n\n return false\n}\n\nexport const getPersonalisedFilters = async (\n filters: FilterValue[],\n req: Request,\n res: Response,\n services: Services,\n filtersType: FiltersType,\n) => {\n const { reportId, id } = req.params\n const { dprUser } = LocalsHelper.getValues(res)\n const defaultFilterValues: defaultFilterValue[] = await services.defaultFilterValuesService.get(\n dprUser.id,\n reportId,\n id,\n filtersType,\n )\n let defaultFilters = filters\n if (defaultFilterValues) {\n const personalisedFilters = PersonalistionUtils.setFilterValuesFromSavedDefaults(filters, [], defaultFilterValues)\n defaultFilters = personalisedFilters.filters\n }\n\n return { filters: defaultFilters, defaultFilterValues }\n}\n\nexport const getFilters = async ({\n fields,\n req,\n res,\n prefix = 'filters.',\n services,\n filtersType,\n}: {\n fields: components['schemas']['FieldDefinition'][]\n req: Request\n res?: Response\n prefix?: string\n services?: Services\n filtersType: FiltersType\n}) => {\n // 1. Set the filters from the product definition\n let filters = await getFiltersFromDefinition(fields, filtersType === FiltersType.INTERACTIVE)\n\n let hasDefaults\n let canSaveDefaults = false\n if (services) {\n // 2. If there are personalised filters, overwrite fiters with the personalised filter values.\n const { filters: personalisedFilterValues, defaultFilterValues } = await getPersonalisedFilters(\n filters,\n req,\n res,\n services,\n filtersType,\n )\n filters = personalisedFilterValues\n hasDefaults = defaultFilterValues?.length > 0\n canSaveDefaults = true\n }\n\n // If there is a request query, overwrite the filters with the query params\n if (req.query) {\n filters = setFilterValuesFromRequest(filters, req)\n }\n\n // Set the selected filters\n const selectedFilters = SelectedFiltersUtils.getSelectedFilters(filters, prefix)\n\n return {\n filters,\n selectedFilters,\n hasDefaults,\n canSaveDefaults,\n }\n}\n\nexport default {\n getFiltersFromDefinition,\n setFilterValuesFromRequest,\n getFilters,\n setFilterQueryFromFilterDefinition,\n redirectWithDefaultFilters,\n setRequestQueryFromFilterValues,\n getPersonalisedFilters,\n}\n"],
5
- "mappings": "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",
6
- "names": ["utils_exports", "__export", "utils_default", "getFilters", "getFiltersFromDefinition", "getPersonalisedFilters", "redirectWithDefaultFilters", "setFilterQueryFromFilterDefinition", "setFilterValuesFromRequest", "setRequestQueryFromFilterValues", "__toCommonJS", "import_enum", "import_ReportQuery", "import_utils", "import_personalisationUtils", "import_urlHelper", "import_filtersTypeEnum", "import_localsHelper", "filters", "req", "prefix", "preventDefault", "key", "filter", "requestfilterValue", "requestfilterValues", "DateRangeInputUtils", "GranularDateRangeInputUtils", "DateInputUtils", "MultiSelectUtils", "value", "fields", "interactive", "filterFields", "f", "field", "startEndParams", "interactiveFilterValue", "text", "name", "type", "staticOptions", "dynamicOptions", "defaultValue", "mandatory", "pattern", "options", "opt", "filterData", "noFilterOption", "granularDateRangeFilter", "filterValues", "fv", "acc", "curr", "filterPrefix", "reportQuery", "variantDefinition", "response", "request", "defaultFilters", "specification", "dates", "querystring", "createUrlForParameters", "res", "services", "filtersType", "reportId", "id", "dprUser", "LocalsHelper", "defaultFilterValues", "PersonalistionUtils", "hasDefaults", "canSaveDefaults", "personalisedFilterValues", "selectedFilters", "SelectedFiltersUtils"]
4
+ "sourcesContent": ["/* eslint-disable no-param-reassign */\nimport { Request, Response } from 'express'\nimport { GranularDateRangeQuickFilterValue } from './types'\nimport { FilterType } from './filter-input/enum'\nimport type { components } from '../../types/api'\nimport type { FilterOption } from './filter-input/types'\nimport type {\n DateFilterValue,\n FilterValueType,\n DateRangeFilterValue,\n FilterValue,\n MultiselectFilterValue,\n GranularDateRangeFilterValue,\n GranularDateRange,\n GranularDateRangeGranularityValue,\n} from './types'\nimport ReportQuery, { DEFAULT_FILTERS_PREFIX } from '../../types/ReportQuery'\n\nimport SelectedFiltersUtils from './filters-selected/utils'\nimport DateRangeInputUtils from '../_inputs/date-range/utils'\nimport DateInputUtils from '../_inputs/date-input/utils'\nimport GranularDateRangeInputUtils from '../_inputs/granular-date-range/utils'\nimport MultiSelectUtils from '../_inputs/multi-select/utils'\nimport { Granularity, QuickFilters } from '../_inputs/granular-date-range/types'\nimport PersonalistionUtils from '../../utils/Personalisation/personalisationUtils'\nimport createUrlForParameters from '../../utils/urlHelper'\nimport { Services } from '../../types/Services'\nimport { FiltersType } from './filtersTypeEnum'\nimport LocalsHelper from '../../utils/localsHelper'\nimport { defaultFilterValue } from '../../utils/Personalisation/types'\n\n/**\n * Given a FilterValue[], will update the values to match the req.query values if present\n *\n * @param {FilterValue[]} filters\n * @param {Request} req\n * @param {string} [prefix='filters.']\n * @return {*} {FilterValue[]}\n */\nexport const setFilterValuesFromRequest = (\n filters: FilterValue[],\n req: Request,\n prefix = 'filters.',\n): FilterValue[] => {\n const { preventDefault } = req.query\n\n if (Object.keys(req.query).every((key) => !key.includes(prefix)) && !preventDefault) {\n return filters\n }\n\n return filters.map((filter: FilterValue) => {\n let requestfilterValue: FilterValueType\n let requestfilterValues: string[] | undefined\n\n const type = filter.type.toLowerCase()\n switch (type) {\n case FilterType.dateRange.toLowerCase():\n requestfilterValue = DateRangeInputUtils.setValueFromRequest(<DateRangeFilterValue>filter, req, prefix)\n break\n case FilterType.granularDateRange.toLowerCase():\n requestfilterValue = GranularDateRangeInputUtils.setValueFromRequest(\n <GranularDateRangeFilterValue>filter,\n req,\n prefix,\n )\n break\n case FilterType.date.toLowerCase():\n requestfilterValue = DateInputUtils.setValueFromRequest(<DateFilterValue>filter, req, prefix)\n break\n case FilterType.multiselect.toLowerCase():\n ;({ requestfilterValue, requestfilterValues } = MultiSelectUtils.setValueFromRequest(\n <MultiselectFilterValue>filter,\n req,\n prefix,\n ))\n break\n default:\n requestfilterValue = <string>req.query[`${prefix}${filter.name}`]\n break\n }\n\n let value: FilterValueType = null\n if (requestfilterValue) {\n value = requestfilterValue\n } else if (preventDefault) {\n value = ''\n }\n\n return {\n ...filter,\n value,\n ...(requestfilterValues && { values: requestfilterValues }),\n }\n })\n}\n\nexport const setFilterQueryFromFilterDefinition = (\n fields: components['schemas']['FieldDefinition'][],\n interactive?: boolean,\n) => {\n let filterFields: components['schemas']['FieldDefinition'][] = fields.filter((f) => f.filter)\n if (interactive) {\n filterFields = filterFields.filter(\n (f) => (<components['schemas']['FilterDefinition'] & { interactive?: boolean }>f.filter).interactive,\n )\n }\n\n return filterFields\n .filter((field) => field.filter !== undefined)\n .filter((field) => (<components['schemas']['FilterDefinition']>field.filter).defaultValue !== undefined)\n .map((field) => {\n const filter = <components['schemas']['FilterDefinition']>field.filter\n const type = filter.type.toLocaleLowerCase()\n\n switch (type) {\n case FilterType.dateRange.toLowerCase():\n return DateRangeInputUtils.getQueryFromDefinition(filter, field.name, DEFAULT_FILTERS_PREFIX)\n\n case FilterType.multiselect.toLowerCase():\n return MultiSelectUtils.getQueryFromDefinition(filter, field.name, DEFAULT_FILTERS_PREFIX)\n\n case FilterType.granularDateRange.toLowerCase(): {\n const startEndParams = DateRangeInputUtils.getQueryFromDefinition(filter, field.name, DEFAULT_FILTERS_PREFIX)\n return GranularDateRangeInputUtils.getQueryFromDefinition(\n filter as unknown as components['schemas']['FilterDefinition'] & {\n defaultGranularity: Granularity\n defaultQuickFilterValue: QuickFilters\n },\n field.name,\n DEFAULT_FILTERS_PREFIX,\n startEndParams,\n )\n }\n\n default:\n return `${DEFAULT_FILTERS_PREFIX}${field.name}=${filter.defaultValue}`\n }\n })\n .join('&')\n}\n\nexport const getFiltersFromDefinition = (\n fields: components['schemas']['FieldDefinition'][],\n interactive?: boolean,\n): FilterValue[] => {\n return fields\n .filter((f) => f.filter)\n .filter((f) => {\n if (interactive !== undefined) {\n const interactiveFilterValue = (<\n components['schemas']['FieldDefinition'] & {\n interactive?: boolean\n }\n >f.filter).interactive\n\n // NOTE: Uncomment if filters are meant to be both interactive and non interactive.\n if (interactiveFilterValue === undefined) {\n return !interactive\n }\n\n return interactive === interactiveFilterValue\n }\n return true\n })\n .map((f) => {\n const { display: text, name } = f\n const filter = <components['schemas']['FilterDefinition']>f.filter\n const { type, staticOptions, dynamicOptions, defaultValue, mandatory, pattern } = filter\n\n const options: FilterOption[] = staticOptions\n ? staticOptions.map((opt) => {\n return { value: opt.name, text: opt.display }\n })\n : []\n\n let filterData: FilterValue = {\n text,\n name,\n type: type as FilterType,\n value: defaultValue || null,\n minimumLength: dynamicOptions?.minimumLength,\n mandatory: mandatory || false,\n pattern,\n }\n\n const noFilterOption = {\n value: 'no-filter',\n text: 'None',\n disabled: false,\n }\n\n switch (type) {\n case FilterType.autocomplete.toLowerCase():\n filterData = {\n ...filterData,\n options,\n }\n break\n\n case FilterType.radio:\n if (!mandatory) options.unshift(noFilterOption)\n filterData = {\n ...filterData,\n options,\n }\n break\n\n case FilterType.select: {\n if (!mandatory) options.unshift(noFilterOption)\n options.unshift({\n value: '',\n text: 'Select your option',\n disabled: true,\n selected: true,\n })\n\n filterData = {\n ...filterData,\n options,\n }\n break\n }\n\n case FilterType.multiselect.toLowerCase():\n filterData = {\n ...filterData,\n options,\n values: defaultValue ? defaultValue.split(',') : [],\n }\n break\n\n case FilterType.dateRange.toLowerCase():\n filterData = DateRangeInputUtils.getFilterFromDefinition(filter, filterData)\n break\n\n case FilterType.date.toLowerCase():\n filterData = DateInputUtils.getFilterFromDefinition(filter, filterData)\n break\n\n case FilterType.granularDateRange.toLocaleLowerCase(): {\n filterData = GranularDateRangeInputUtils.getFilterFromDefinition(filter, filterData)\n break\n }\n\n default:\n break\n }\n\n return filterData\n })\n}\n\nexport const setRequestQueryFromFilterValues = (filterValues: FilterValue[]) => {\n const requestQuery = filterValues\n .filter((fv) => fv.value)\n .reduce((acc, curr) => {\n const { value, name } = curr\n const filterPrefix = `filters.${name}`\n switch (curr.type) {\n case FilterType.granularDateRange.toLowerCase():\n {\n const granularDateRangeValue = <GranularDateRange>value\n Object.keys(granularDateRangeValue).forEach((key) => {\n let v = granularDateRangeValue[key as keyof GranularDateRange]\n if (key.includes('partialDate')) {\n acc = {\n ...acc,\n }\n } else {\n if (key.includes('granularity') || key.includes('quickFilter')) {\n v = (<GranularDateRangeGranularityValue | GranularDateRangeQuickFilterValue>v).value\n }\n acc = {\n ...acc,\n [`${filterPrefix}.${key}`]: v,\n }\n }\n })\n }\n break\n case FilterType.dateRange.toLowerCase():\n Object.keys(value).forEach((key) => {\n acc = {\n ...acc,\n [`${filterPrefix}.${key}`]: value[key as keyof FilterValueType],\n }\n })\n break\n case FilterType.multiselect.toLowerCase():\n acc = {\n ...acc,\n [`${filterPrefix}`]: (<string>value).split(','),\n }\n break\n default:\n acc = {\n ...acc,\n [`${filterPrefix}`]: value,\n }\n break\n }\n return acc\n }, {})\n\n return requestQuery\n}\n\nexport const redirectWithDefaultFilters = (\n reportQuery: ReportQuery,\n variantDefinition: components['schemas']['VariantDefinition'],\n response: Response,\n request: Request,\n) => {\n const defaultFilters: Record<string, string> = {}\n const { specification } = variantDefinition\n const fields = specification ? specification.fields : []\n const { preventDefault } = request.query\n const hasNoQueryFilters = Object.keys(reportQuery.filters).length === 0 && !preventDefault\n if (hasNoQueryFilters) {\n fields\n .filter((f) => f.filter && f.filter.defaultValue)\n .forEach((f) => {\n const { filter } = f\n if (filter) {\n if (filter.type.toLowerCase() === FilterType.dateRange.toLowerCase()) {\n const { defaultValue } = <components['schemas']['FilterDefinition']>filter\n const dates = defaultValue ? defaultValue.split(' - ') : ''\n\n if (dates.length >= 1) {\n // eslint-disable-next-line prefer-destructuring\n defaultFilters[`${DEFAULT_FILTERS_PREFIX}${f.name}.start`] = dates[0]\n\n if (dates.length >= 2) {\n // eslint-disable-next-line prefer-destructuring\n defaultFilters[`${DEFAULT_FILTERS_PREFIX}${f.name}.end`] = dates[1]\n }\n }\n } else {\n defaultFilters[`${DEFAULT_FILTERS_PREFIX}${f.name}`] = filter.defaultValue || ''\n }\n }\n })\n }\n\n if (Object.keys(defaultFilters).length > 0) {\n const querystring = createUrlForParameters(reportQuery.toRecordWithFilterPrefix(), defaultFilters, fields)\n response.redirect(`${request.baseUrl}${request.path}${querystring}`)\n return true\n }\n\n return false\n}\n\nexport const getPersonalisedFilters = async (\n filters: FilterValue[],\n req: Request,\n res: Response,\n services: Services,\n filtersType: FiltersType,\n) => {\n const { reportId, id } = req.params\n const { dprUser } = LocalsHelper.getValues(res)\n const defaultFilterValues: defaultFilterValue[] = await services.defaultFilterValuesService.get(\n dprUser.id,\n reportId,\n id,\n filtersType,\n )\n let defaultFilters = filters\n if (defaultFilterValues) {\n const personalisedFilters = PersonalistionUtils.setFilterValuesFromSavedDefaults(filters, [], defaultFilterValues)\n defaultFilters = personalisedFilters.filters\n }\n\n return { filters: defaultFilters, defaultFilterValues }\n}\n\nexport const getFilters = async ({\n fields,\n req,\n res,\n prefix = 'filters.',\n services,\n filtersType,\n}: {\n fields: components['schemas']['FieldDefinition'][]\n req: Request\n res?: Response\n prefix?: string\n services?: Services\n filtersType: FiltersType\n}) => {\n // 1. Set the filters from the product definition\n let filters = await getFiltersFromDefinition(fields, filtersType === FiltersType.INTERACTIVE)\n\n let hasDefaults\n let canSaveDefaults = false\n if (services) {\n // 2. If there are personalised filters, overwrite fiters with the personalised filter values.\n const { filters: personalisedFilterValues, defaultFilterValues } = await getPersonalisedFilters(\n filters,\n req,\n res,\n services,\n filtersType,\n )\n filters = personalisedFilterValues\n hasDefaults = defaultFilterValues?.length > 0\n canSaveDefaults = true\n }\n\n // If there is a request query, overwrite the filters with the query params\n if (req.query) {\n filters = setFilterValuesFromRequest(filters, req)\n }\n\n // Set the selected filters\n const selectedFilters = SelectedFiltersUtils.getSelectedFilters(filters, prefix)\n\n return {\n filters,\n selectedFilters,\n hasDefaults,\n canSaveDefaults,\n }\n}\n\nexport default {\n getFiltersFromDefinition,\n setFilterValuesFromRequest,\n getFilters,\n setFilterQueryFromFilterDefinition,\n redirectWithDefaultFilters,\n setRequestQueryFromFilterValues,\n getPersonalisedFilters,\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["utils_exports", "__export", "utils_default", "getFilters", "getFiltersFromDefinition", "getPersonalisedFilters", "redirectWithDefaultFilters", "setFilterQueryFromFilterDefinition", "setFilterValuesFromRequest", "setRequestQueryFromFilterValues", "__toCommonJS", "import_enum", "import_ReportQuery", "import_utils", "import_personalisationUtils", "import_urlHelper", "import_filtersTypeEnum", "import_localsHelper", "filters", "req", "prefix", "preventDefault", "key", "filter", "requestfilterValue", "requestfilterValues", "DateRangeInputUtils", "GranularDateRangeInputUtils", "DateInputUtils", "MultiSelectUtils", "value", "fields", "interactive", "filterFields", "f", "field", "startEndParams", "interactiveFilterValue", "text", "name", "type", "staticOptions", "dynamicOptions", "defaultValue", "mandatory", "pattern", "options", "opt", "filterData", "noFilterOption", "filterValues", "fv", "acc", "curr", "filterPrefix", "granularDateRangeValue", "v", "reportQuery", "variantDefinition", "response", "request", "defaultFilters", "specification", "dates", "querystring", "createUrlForParameters", "res", "services", "filtersType", "reportId", "id", "dprUser", "LocalsHelper", "defaultFilterValues", "PersonalistionUtils", "hasDefaults", "canSaveDefaults", "personalisedFilterValues", "selectedFilters", "SelectedFiltersUtils"]
7
7
  }
@@ -1,5 +1,6 @@
1
1
  /* eslint-disable no-param-reassign */
2
2
  import { Request, Response } from 'express'
3
+ import { GranularDateRangeQuickFilterValue } from './types'
3
4
  import { FilterType } from './filter-input/enum'
4
5
  import type { components } from '../../types/api'
5
6
  import type { FilterOption } from './filter-input/types'
@@ -10,6 +11,8 @@ import type {
10
11
  FilterValue,
11
12
  MultiselectFilterValue,
12
13
  GranularDateRangeFilterValue,
14
+ GranularDateRange,
15
+ GranularDateRangeGranularityValue,
13
16
  } from './types'
14
17
  import ReportQuery, { DEFAULT_FILTERS_PREFIX } from '../../types/ReportQuery'
15
18
 
@@ -235,8 +238,7 @@ export const getFiltersFromDefinition = (
235
238
  break
236
239
 
237
240
  case FilterType.granularDateRange.toLocaleLowerCase(): {
238
- const granularDateRangeFilter = filter as components['schemas']['FilterDefinition']
239
- filterData = GranularDateRangeInputUtils.getFilterFromDefinition(granularDateRangeFilter, filterData)
241
+ filterData = GranularDateRangeInputUtils.getFilterFromDefinition(filter, filterData)
240
242
  break
241
243
  }
242
244
 
@@ -256,6 +258,26 @@ export const setRequestQueryFromFilterValues = (filterValues: FilterValue[]) =>
256
258
  const filterPrefix = `filters.${name}`
257
259
  switch (curr.type) {
258
260
  case FilterType.granularDateRange.toLowerCase():
261
+ {
262
+ const granularDateRangeValue = <GranularDateRange>value
263
+ Object.keys(granularDateRangeValue).forEach((key) => {
264
+ let v = granularDateRangeValue[key as keyof GranularDateRange]
265
+ if (key.includes('partialDate')) {
266
+ acc = {
267
+ ...acc,
268
+ }
269
+ } else {
270
+ if (key.includes('granularity') || key.includes('quickFilter')) {
271
+ v = (<GranularDateRangeGranularityValue | GranularDateRangeQuickFilterValue>v).value
272
+ }
273
+ acc = {
274
+ ...acc,
275
+ [`${filterPrefix}.${key}`]: v,
276
+ }
277
+ }
278
+ })
279
+ }
280
+ break
259
281
  case FilterType.dateRange.toLowerCase():
260
282
  Object.keys(value).forEach((key) => {
261
283
  acc = {
@@ -1,2 +1,2 @@
1
- var u=Object.create;var g=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var $=Object.getPrototypeOf,b=Object.prototype.hasOwnProperty;var p=(r,i)=>{for(var t in i)g(r,t,{get:i[t],enumerable:!0})},l=(r,i,t,n)=>{if(i&&typeof i=="object"||typeof i=="function")for(let s of C(i))!b.call(r,s)&&s!==t&&g(r,s,{get:()=>i[s],enumerable:!(n=m(i,s))||n.enumerable});return r};var c=(r,i,t)=>(t=r!=null?u($(r)):{},l(i||!r||!r.__esModule?g(t,"default",{value:r,enumerable:!0}):t,r)),y=r=>l(g({},"__esModule",{value:!0}),r);var P={};p(P,{DashboardClient:()=>h,default:()=>A});module.exports=y(P);var a=c(require("../utils/logger")),D=c(require("./restClient"));class h{constructor(i){this.restClient=new D.default("Dashboard API Client",i)}getDefinition(i,t,n,s){this.logInfo("Get definition:",{dpdId:n,dashboardId:t});const e={dataProductDefinitionsPath:s};return this.restClient.get({path:`/definitions/${n}/dashboards/${t}`,query:e,token:i}).then(o=>o)}requestAsyncDashboard(i,t,n,s){return this.logInfo("Request dashboard:",{reportId:t,dashboardId:n}),this.restClient.get({path:`/async/dashboards/${t}/${n}`,token:i,query:s}).then(e=>e)}getAsyncDashboard(i,t,n,s,e){return this.logInfo("Get dashboard:",{reportId:t,dashboardId:n,tableId:s}),this.restClient.get({path:`/reports/${t}/dashboards/${n}/tables/${s}/result`,token:i,query:e}).then(o=>o)}getAsyncStatus(i,t,n,s,e,o){return this.logInfo("Get status:",{reportId:t,dashboardId:n,executionId:s,tableId:o}),this.restClient.get({path:`/reports/${t}/dashboards/${n}/statements/${s}/status`,token:i,query:{dataProductDefinitionsPath:e,tableId:o}}).then(f=>f)}cancelAsyncRequest(i,t,n,s,e){return this.logInfo("Cancel request:",{reportId:t,dashboardId:n,executionId:s}),this.restClient.delete({path:`/reports/${t}/dashboards/${n}/statements/${s}`,token:i,query:{dataProductDefinitionsPath:e}}).then(o=>o)}logInfo(i,t){a.default.info(`Dashboard client: ${i}:`),t&&Object.keys(t).length&&a.default.info(JSON.stringify(t,null,2))}}var A=h;0&&(module.exports={DashboardClient});
1
+ var u=Object.create;var g=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var $=Object.getPrototypeOf,b=Object.prototype.hasOwnProperty;var p=(r,i)=>{for(var t in i)g(r,t,{get:i[t],enumerable:!0})},l=(r,i,t,n)=>{if(i&&typeof i=="object"||typeof i=="function")for(let s of C(i))!b.call(r,s)&&s!==t&&g(r,s,{get:()=>i[s],enumerable:!(n=m(i,s))||n.enumerable});return r};var c=(r,i,t)=>(t=r!=null?u($(r)):{},l(i||!r||!r.__esModule?g(t,"default",{value:r,enumerable:!0}):t,r)),y=r=>l(g({},"__esModule",{value:!0}),r);var P={};p(P,{DashboardClient:()=>h,default:()=>A});module.exports=y(P);var a=c(require("../utils/logger")),D=c(require("./restClient"));class h{constructor(i){this.restClient=new D.default("Dashboard API Client",i)}getDefinition(i,t,n,s){this.logInfo("Get definition:",{dpdId:n,dashboardId:t});const e={dataProductDefinitionsPath:s};return this.restClient.get({path:`/definitions/${n}/dashboards/${t}`,query:e,token:i}).then(o=>o)}requestAsyncDashboard(i,t,n,s){return this.logInfo("Request dashboard:",{reportId:t,dashboardId:n}),this.restClient.get({path:`/async/dashboards/${t}/${n}`,token:i,query:s}).then(e=>e)}getAsyncDashboard(i,t,n,s,e){return this.logInfo("Get dashboard:",{reportId:t,dashboardId:n,tableId:s}),this.restClient.get({path:`/reports/${t}/dashboards/${n}/tables/${s}/result`,token:i,query:e}).then(o=>o)}getAsyncStatus(i,t,n,s,e,o){return this.logInfo("Get status:",{reportId:t,dashboardId:n,executionId:s,tableId:e}),this.restClient.get({path:`/reports/${t}/dashboards/${n}/statements/${s}/status`,token:i,query:{dataProductDefinitionsPath:o,tableId:e}}).then(f=>f)}cancelAsyncRequest(i,t,n,s,e){return this.logInfo("Cancel request:",{reportId:t,dashboardId:n,executionId:s}),this.restClient.delete({path:`/reports/${t}/dashboards/${n}/statements/${s}`,token:i,query:{dataProductDefinitionsPath:e}}).then(o=>o)}logInfo(i,t){a.default.info(`Dashboard client: ${i}:`),t&&Object.keys(t).length&&a.default.info(JSON.stringify(t,null,2))}}var A=h;0&&(module.exports={DashboardClient});
2
2
  //# sourceMappingURL=dashboardClient.js.map