@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.
- package/dpr/all.mjs +2 -0
- package/dpr/all.scss +4 -0
- package/dpr/components/_catalogue/catalogue-list/utils.test.ts +1 -1
- package/dpr/components/_charts/chart/clientClass.mjs +4 -3
- package/dpr/components/_charts/chart/heatmap/clientClass.mjs +175 -0
- package/dpr/components/_charts/chart/heatmap/utils.js +2 -0
- package/dpr/components/_charts/chart/heatmap/utils.js.map +7 -0
- package/dpr/components/_charts/chart/heatmap/utils.ts +182 -0
- package/dpr/components/_charts/chart/styles.scss +4 -0
- package/dpr/components/_charts/utils.js +1 -1
- package/dpr/components/_charts/utils.js.map +3 -3
- package/dpr/components/_charts/utils.test.ts +4 -1
- package/dpr/components/_charts/utils.ts +73 -27
- package/dpr/components/_dashboards/dashboard/types.js +1 -1
- package/dpr/components/_dashboards/dashboard/types.js.map +2 -2
- package/dpr/components/_dashboards/dashboard/types.ts +13 -1
- package/dpr/components/_dashboards/dashboard-list/utils.js +1 -1
- package/dpr/components/_dashboards/dashboard-list/utils.js.map +3 -3
- package/dpr/components/_dashboards/dashboard-list/utils.test.ts +1 -0
- package/dpr/components/_dashboards/dashboard-list/utils.ts +4 -1
- package/dpr/components/_filters/types.d.js.map +1 -1
- package/dpr/components/_filters/types.d.ts +12 -8
- package/dpr/components/_filters/utils.js +1 -1
- package/dpr/components/_filters/utils.js.map +3 -3
- package/dpr/components/_filters/utils.ts +24 -2
- package/dpr/data/dashboardClient.js +1 -1
- package/dpr/data/dashboardClient.js.map +2 -2
- package/dpr/data/dashboardClient.ts +1 -1
- package/dpr/routes/journeys/request-report/filters/controller.js +1 -1
- package/dpr/routes/journeys/request-report/filters/controller.js.map +3 -3
- package/dpr/routes/journeys/request-report/filters/controller.ts +6 -2
- package/dpr/routes/journeys/request-report/filters/utils.js +1 -1
- package/dpr/routes/journeys/request-report/filters/utils.js.map +2 -2
- package/dpr/routes/journeys/request-report/filters/utils.ts +9 -3
- package/dpr/routes/journeys/view-report/async/dashboard/utils.js +1 -1
- package/dpr/routes/journeys/view-report/async/dashboard/utils.js.map +3 -3
- package/dpr/routes/journeys/view-report/async/dashboard/utils.ts +12 -3
- package/dpr/services/dashboardService.js +1 -1
- package/dpr/services/dashboardService.js.map +2 -2
- package/dpr/services/dashboardService.ts +1 -1
- package/dpr/types/Charts.js +1 -1
- package/dpr/types/Charts.js.map +1 -1
- package/dpr/types/Charts.ts +10 -3
- package/dpr/types/ExecutionData.d.js +1 -1
- package/dpr/types/ExecutionData.d.js.map +1 -1
- package/dpr/types/ExecutionData.d.ts +1 -0
- package/dpr/utils/DateMapper/DateMapper.js +1 -1
- package/dpr/utils/DateMapper/DateMapper.js.map +2 -2
- package/dpr/utils/DateMapper/DateMapper.ts +4 -0
- package/dpr/utils/UserStoreItemBuilder.js +1 -1
- package/dpr/utils/UserStoreItemBuilder.js.map +3 -3
- package/dpr/utils/UserStoreItemBuilder.ts +5 -3
- package/dpr/utils/requestStatusHelper.js +1 -1
- package/dpr/utils/requestStatusHelper.js.map +2 -2
- package/dpr/utils/requestStatusHelper.ts +1 -1
- 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
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
|
55
|
-
|
|
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 (
|
|
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
|
-
|
|
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
|
|
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
|
|
5
|
-
"mappings": "4ZAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,EAAA,+BAAAC,IAAA,eAAAC,EAAAJ,
|
|
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
|
|
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
|
|
5
|
-
"mappings": "6iBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gBAAAE,EAAA,oBAAAC,EAAA,YAAAC,IAAA,eAAAC,EAAAL,
|
|
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,
|
|
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
|
|
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
|
-
|
|
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
|
|
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": "6iBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,EAAA,eAAAC,EAAA,6BAAAC,EAAA,2BAAAC,EAAA,+BAAAC,EAAA,uCAAAC,EAAA,+BAAAC,EAAA,oCAAAC,IAAA,eAAAC,EAAAV,
|
|
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", "
|
|
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
|
-
|
|
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:
|
|
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
|