@ministryofjustice/hmpps-digital-prison-reporting-frontend 4.15.3 → 4.16.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 (47) hide show
  1. package/dpr/components/_async/async-filters-form/view.njk +2 -2
  2. package/dpr/components/_catalogue/catalogue-list/utils.test.ts +1 -1
  3. package/dpr/components/_charts/chart/Buckets.js +2 -0
  4. package/dpr/components/_charts/chart/Buckets.js.map +7 -0
  5. package/dpr/components/_charts/chart/Buckets.ts +198 -0
  6. package/dpr/components/_charts/chart/DashboardVisualisation.js +2 -0
  7. package/dpr/components/_charts/chart/DashboardVisualisation.js.map +7 -0
  8. package/dpr/components/_charts/chart/DashboardVisualisation.ts +43 -0
  9. package/dpr/components/_charts/chart/heatmap/HeatmapChart.js +2 -0
  10. package/dpr/components/_charts/chart/heatmap/HeatmapChart.js.map +7 -0
  11. package/dpr/components/_charts/chart/heatmap/HeatmapChart.ts +144 -0
  12. package/dpr/components/_charts/utils.js +1 -1
  13. package/dpr/components/_charts/utils.js.map +3 -3
  14. package/dpr/components/_charts/utils.ts +1 -1
  15. package/dpr/components/_dashboards/dashboard/types.js.map +1 -1
  16. package/dpr/components/_dashboards/dashboard/types.ts +4 -4
  17. package/dpr/components/_dashboards/scorecard/Scorecard.js +2 -0
  18. package/dpr/components/_dashboards/scorecard/Scorecard.js.map +7 -0
  19. package/dpr/components/_dashboards/scorecard/Scorecard.ts +315 -0
  20. package/dpr/components/_dashboards/scorecard/types.js +1 -1
  21. package/dpr/components/_dashboards/scorecard/types.js.map +1 -1
  22. package/dpr/components/_dashboards/scorecard/types.ts +20 -1
  23. package/dpr/components/_dashboards/scorecard/utils.js +1 -1
  24. package/dpr/components/_dashboards/scorecard/utils.js.map +3 -3
  25. package/dpr/components/_dashboards/scorecard/utils.test.ts +8 -437
  26. package/dpr/components/_dashboards/scorecard/utils.ts +2 -265
  27. package/dpr/components/_dashboards/scorecard/view.njk +2 -2
  28. package/dpr/components/_filters/types.d.js.map +1 -1
  29. package/dpr/components/_filters/types.d.ts +1 -0
  30. package/dpr/components/_filters/utils.js +1 -1
  31. package/dpr/components/_filters/utils.js.map +3 -3
  32. package/dpr/components/_filters/utils.ts +17 -12
  33. package/dpr/routes/journeys/request-report/filters/tests.cy.js +1 -1
  34. package/dpr/routes/journeys/request-report/filters/tests.cy.js.map +3 -3
  35. package/dpr/routes/journeys/request-report/filters/tests.cy.ts +40 -0
  36. package/dpr/routes/journeys/view-report/async/dashboard/utils.js +1 -1
  37. package/dpr/routes/journeys/view-report/async/dashboard/utils.js.map +3 -3
  38. package/dpr/routes/journeys/view-report/async/dashboard/utils.ts +3 -2
  39. package/dpr/types/api.d.js.map +1 -1
  40. package/dpr/types/api.d.ts +2 -0
  41. package/dpr/utils/datasetHelper.js +1 -1
  42. package/dpr/utils/datasetHelper.js.map +2 -2
  43. package/dpr/utils/datasetHelper.ts +1 -1
  44. package/package.json +1 -1
  45. package/dpr/components/_charts/chart/heatmap/Heatmap.js +0 -2
  46. package/dpr/components/_charts/chart/heatmap/Heatmap.js.map +0 -7
  47. package/dpr/components/_charts/chart/heatmap/Heatmap.ts +0 -278
@@ -1,266 +1,5 @@
1
- import { DashboardDataResponse } from '../../../types/Metrics'
2
- import {
3
- DashboardUIVisualisation,
4
- DashboardVisualisation,
5
- DashboardVisualisationColumn,
6
- DashboardVisualisationColumns,
7
- DashboardVisualisationType,
8
- ScorecardVisualisationColumn,
9
- } from '../dashboard/types'
10
- import { Scorecard, ScorecardGroup, ScorecardTrend } from './types'
11
- import DatasetHelper from '../../../utils/datasetHelper'
12
-
13
- export const createScorecards = (
14
- scorecardDefinition: DashboardVisualisation,
15
- rawData: DashboardDataResponse[],
16
- ): ScorecardGroup[] => {
17
- const { columns } = scorecardDefinition
18
- const { measures, keys } = columns
19
- const dataset = getDataset(scorecardDefinition, rawData)
20
- const { earliest, latest, earliestTs, latestTs } = dataset
21
-
22
- const scorecardFromListValueColumn = (<ScorecardVisualisationColumn[]>measures).find((col) => col.displayValue)
23
- const groupKey = DatasetHelper.getGroupKey(keys, latest)
24
-
25
- let scorecardGroup: ScorecardGroup[]
26
- if (!scorecardFromListValueColumn) {
27
- scorecardGroup = createScorecardGroupFromColumns(columns, earliest, earliestTs, latest, latestTs, groupKey)
28
- } else if (groupKey) {
29
- scorecardGroup = createScorecardGroupFromListWithGroups(columns, earliest, earliestTs, latest, latestTs, groupKey)
30
- } else {
31
- scorecardGroup = createScorecardGroupFromList(columns, earliest, earliestTs, latest, latestTs)
32
- }
33
- return scorecardGroup
34
- }
35
-
36
- const getDataset = (scorecardDefinition: DashboardVisualisation, rawData: DashboardDataResponse[]) => {
37
- const latestData = DatasetHelper.getLastestDataset(rawData)
38
- const latestDataSetRows = DatasetHelper.getDatasetRows(scorecardDefinition, latestData)
39
- const latestTs = latestDataSetRows[0]?.ts?.raw
40
- const latestFiltered = DatasetHelper.filterRowsByDisplayColumns(scorecardDefinition, latestDataSetRows, true)
41
-
42
- const earliestData = DatasetHelper.getEarliestDataset(rawData)
43
- const earliestDataSetRows = DatasetHelper.getDatasetRows(scorecardDefinition, earliestData)
44
- const earliestTs = earliestDataSetRows[0]?.ts?.raw
45
- const earliestfiltered = DatasetHelper.filterRowsByDisplayColumns(scorecardDefinition, earliestDataSetRows, true)
46
-
47
- return {
48
- earliest: earliestfiltered,
49
- earliestTs,
50
- latest: latestFiltered,
51
- latestTs,
52
- }
53
- }
54
-
55
- const createScorecardData = ({
56
- title,
57
- value,
58
- rag,
59
- valueFor,
60
- valueFrom,
61
- prevVal,
62
- groupTitle,
63
- }: {
64
- title: string
65
- value: string | number
66
- rag?: number
67
- valueFor: string
68
- valueFrom: string
69
- prevVal: string | number
70
- groupTitle?: string
71
- }) => {
72
- return {
73
- title,
74
- value,
75
- ...(rag && { rag: getRag(rag) }),
76
- valueFor,
77
- trend: createTrend(valueFor, valueFrom, value, prevVal),
78
- ...(groupTitle && {
79
- group: groupTitle,
80
- }),
81
- }
82
- }
83
-
84
- export const createScorecard = (scorecardDefinition: DashboardVisualisation, rawData: DashboardDataResponse[]) => {
85
- const { columns } = scorecardDefinition
86
- const { measures } = columns
87
- const displayColumn = measures[0]
88
- const { id: valueColumnId, display } = displayColumn
89
-
90
- const dataset = getDataset(scorecardDefinition, rawData)
91
- const { earliest, latest, earliestTs, latestTs } = dataset
92
-
93
- const scorecordArr: Scorecard[] = latest.map((datasetRow: DashboardDataResponse, index: number) => {
94
- const title = display
95
- const { rag, raw: value } = datasetRow[valueColumnId]
96
- const prevVal = earliest[index][valueColumnId].raw
97
- const valueFor = `${latestTs}`
98
- const valueFrom = `${earliestTs}`
99
-
100
- return createScorecardData({
101
- title,
102
- value,
103
- rag,
104
- prevVal,
105
- valueFor,
106
- valueFrom,
107
- })
108
- })
109
-
110
- return scorecordArr[0]
111
- }
112
-
113
- const createScorecardGroupFromList = (
114
- columns: DashboardVisualisationColumns,
115
- earliest: DashboardDataResponse[],
116
- earliestTs: string | number,
117
- latest: DashboardDataResponse[],
118
- latestTs: string | number,
119
- ): ScorecardGroup[] => {
120
- const { measures } = columns
121
- const valueColumn = (<ScorecardVisualisationColumn[]>measures).find((col) => col.displayValue)
122
- const displayColumn = measures.find((col) => {
123
- return col.display || col.display === ''
124
- })
125
- return [
126
- {
127
- title: '',
128
- scorecards: latest.map((datasetRow: DashboardDataResponse, index: number) => {
129
- const title = displayColumn
130
- ? `${displayColumn.display} ${datasetRow[displayColumn.id].raw}`
131
- : displayColumn.display
132
- const { rag, raw: value } = datasetRow[valueColumn.id]
133
- const prevVal = earliest[index][valueColumn.id].raw
134
- const valueFor = `${latestTs}`
135
- const valueFrom = `${earliestTs}`
136
-
137
- return createScorecardData({
138
- title,
139
- value,
140
- rag,
141
- prevVal,
142
- valueFor,
143
- valueFrom,
144
- })
145
- }),
146
- },
147
- ]
148
- }
149
-
150
- const createScorecardGroupFromColumns = (
151
- columns: DashboardVisualisationColumns,
152
- earliest: DashboardDataResponse[],
153
- earliestTs: string | number,
154
- latest: DashboardDataResponse[],
155
- latestTs: string | number,
156
- groupKey: DashboardVisualisationColumn,
157
- ) => {
158
- const { measures } = columns
159
-
160
- return latest.map((row, rowIndex) => {
161
- const groupTitle = `${row[groupKey?.id]?.raw}` || ''
162
-
163
- return {
164
- title: groupKey.display ? `${groupKey.display}: ${groupTitle}` : groupTitle,
165
- scorecards: Object.keys(row)
166
- .filter((colId) => colId !== groupKey?.id)
167
- .map((colId) => {
168
- const comparisonRow = earliest[rowIndex]
169
- const measure = measures.find((m) => m.id === colId)
170
- const title = measure?.display || colId
171
- const value = +row[colId].raw
172
- const rag = +row[colId].rag
173
- const prevVal = comparisonRow[colId]?.raw
174
- const valueFor = `${latestTs}`
175
- const valueFrom = `${earliestTs}`
176
-
177
- return createScorecardData({
178
- title,
179
- value,
180
- rag,
181
- prevVal,
182
- valueFor,
183
- valueFrom,
184
- })
185
- }),
186
- }
187
- })
188
- }
189
-
190
- const createScorecardGroupFromListWithGroups = (
191
- columns: DashboardVisualisationColumns,
192
- earliest: DashboardDataResponse[],
193
- earliestTs: string | number,
194
- latest: DashboardDataResponse[],
195
- latestTs: string | number,
196
- groupKey: DashboardVisualisationColumn,
197
- ) => {
198
- const { measures } = columns
199
-
200
- const latestGroupedByKey = DatasetHelper.groupRowsByKey(latest, groupKey.id)
201
- const earliestGroupedByKey = DatasetHelper.groupRowsByKey(earliest, groupKey.id)
202
- const valueColumn = (<ScorecardVisualisationColumn[]>measures).find((col) => col.displayValue)
203
- const displayColumn = measures.find((col) => {
204
- return col.display || col.display === ''
205
- })
206
-
207
- const scorecardGroup = latestGroupedByKey.map((group, groupIndex) => {
208
- const groupTitle = `${group[0][groupKey?.id]?.raw}` || ''
209
- return {
210
- title: groupKey.display ? `${groupKey.display}: ${groupTitle}` : groupTitle,
211
- scorecards: group.map((row, rowIndex) => {
212
- const title = displayColumn ? `${displayColumn.display} ${row[displayColumn.id].raw}` : displayColumn.display
213
- const value = +row[valueColumn.id].raw
214
- const rag = +row[valueColumn.id].rag
215
- const valueFor = `${latestTs}`
216
- const valueFrom = `${earliestTs}`
217
-
218
- const comparisonRow = earliestGroupedByKey[groupIndex][rowIndex]
219
- const prevVal = comparisonRow[valueColumn.id]?.raw
220
-
221
- return createScorecardData({
222
- title,
223
- value,
224
- rag,
225
- prevVal,
226
- valueFor,
227
- valueFrom,
228
- })
229
- }),
230
- }
231
- })
232
-
233
- return scorecardGroup
234
- }
235
-
236
- const getRag = (ragScore: number) => {
237
- const ragColors = ['green', 'yellow', 'red']
238
- return {
239
- score: ragScore,
240
- color: ragColors[ragScore],
241
- }
242
- }
243
-
244
- const createTrend = (
245
- valueFor: string,
246
- valueFrom: string,
247
- latestValue: string | number,
248
- earliestValue: string | number,
249
- ): ScorecardTrend | undefined => {
250
- let trendData
251
-
252
- if (valueFrom !== valueFor) {
253
- const value = +latestValue - +earliestValue
254
- const direction = Math.sign(value)
255
- trendData = {
256
- direction,
257
- value: Math.abs(value),
258
- from: valueFrom,
259
- }
260
- }
261
-
262
- return trendData
263
- }
1
+ import { DashboardUIVisualisation, DashboardVisualisationType } from '../dashboard/types'
2
+ import { Scorecard } from './types'
264
3
 
265
4
  export const mergeScorecardsIntoGroup = (visualisations: DashboardUIVisualisation[]) => {
266
5
  const groupedScorecardIndexes: number[][] = visualisations
@@ -302,7 +41,5 @@ export const mergeScorecardsIntoGroup = (visualisations: DashboardUIVisualisatio
302
41
  }
303
42
 
304
43
  export default {
305
- createScorecard,
306
- createScorecards,
307
44
  mergeScorecardsIntoGroup,
308
45
  }
@@ -25,8 +25,8 @@
25
25
  {{ title }}
26
26
  </p>
27
27
 
28
- <p class="govuk-body dpr-scorecard__value {% if rag %}govuk-tag--{{ rag.color }}{% endif %}">{{ value }}</p>
29
- {% if rag %}
28
+ <p style="background-color: {{ rag.colour }}" class="govuk-body dpr-scorecard__value {% if rag %}govuk-tag--{{ rag.colour }}{% endif %}">{{ value }}</p>
29
+ {% if rag.score %}
30
30
  <p class="govuk-body dpr-scorecard__value-description">Status: {{ rag.score }}</p>
31
31
  {% endif %}
32
32
 
@@ -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: 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"],
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 index?: number\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
  }
@@ -25,6 +25,7 @@ export interface BaseFilterValue {
25
25
  type: FilterType
26
26
  value: FilterValueType
27
27
  mandatory?: boolean
28
+ index?: number
28
29
  }
29
30
 
30
31
  export interface TextFilterValue extends BaseFilterValue {
@@ -1,2 +1,2 @@
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});
1
+ var j=Object.create;var V=Object.defineProperty;var N=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var A=Object.getPrototypeOf,W=Object.prototype.hasOwnProperty;var _=(i,a)=>{for(var t in a)V(i,t,{get:a[t],enumerable:!0})},C=(i,a,t,r)=>{if(a&&typeof a=="object"||typeof a=="function")for(let e of M(a))!W.call(i,e)&&e!==t&&V(i,e,{get:()=>a[e],enumerable:!(r=N(a,e))||r.enumerable});return i};var y=(i,a,t)=>(t=i!=null?j(A(i)):{},C(a||!i||!i.__esModule?V(t,"default",{value:i,enumerable:!0}):t,i)),H=i=>C(V({},"__esModule",{value:!0}),i);var B={};_(B,{default:()=>z,getFilters:()=>U,getFiltersFromDefinition:()=>k,getPersonalisedFilters:()=>L,redirectWithDefaultFilters:()=>O,setFilterQueryFromFilterDefinition:()=>S,setFilterValuesFromRequest:()=>w,setRequestQueryFromFilterValues:()=>E});module.exports=H(B);var u=require("./filter-input/enum"),p=require("../../types/ReportQuery"),x=y(require("./filters-selected/utils")),D=y(require("../_inputs/date-range/utils")),h=y(require("../_inputs/date-input/utils")),R=y(require("../_inputs/granular-date-range/utils")),b=y(require("../_inputs/multi-select/utils")),Q=y(require("../../utils/Personalisation/personalisationUtils")),G=y(require("../../utils/urlHelper")),q=require("./filtersTypeEnum"),T=y(require("../../utils/localsHelper"));const w=(i,a,t="filters.")=>{const{preventDefault:r}=a.query;return Object.keys(a.query).every(e=>!e.includes(t))&&!r?i:i.map(e=>{let n,l;switch(e.type.toLowerCase()){case u.FilterType.dateRange.toLowerCase():n=D.default.setValueFromRequest(e,a,t);break;case u.FilterType.granularDateRange.toLowerCase():n=R.default.setValueFromRequest(e,a,t);break;case u.FilterType.date.toLowerCase():n=h.default.setValueFromRequest(e,a,t);break;case u.FilterType.multiselect.toLowerCase():({requestfilterValue:n,requestfilterValues:l}=b.default.setValueFromRequest(e,a,t));break;default:n=a.query[`${t}${e.name}`];break}let o=null;return n?o=n:r&&(o=""),{...e,value:o,...l&&{values:l}}})},S=(i,a)=>{let t=i.filter(r=>r.filter);return a&&(t=t.filter(r=>r.filter.interactive)),t.filter(r=>r.filter!==void 0).filter(r=>r.filter.defaultValue!==void 0).map(r=>{const e=r.filter;switch(e.type.toLocaleLowerCase()){case u.FilterType.dateRange.toLowerCase():return D.default.getQueryFromDefinition(e,r.name,p.DEFAULT_FILTERS_PREFIX);case u.FilterType.multiselect.toLowerCase():return b.default.getQueryFromDefinition(e,r.name,p.DEFAULT_FILTERS_PREFIX);case u.FilterType.granularDateRange.toLowerCase():{const l=D.default.getQueryFromDefinition(e,r.name,p.DEFAULT_FILTERS_PREFIX);return R.default.getQueryFromDefinition(e,r.name,p.DEFAULT_FILTERS_PREFIX,l)}default:return`${p.DEFAULT_FILTERS_PREFIX}${r.name}=${e.defaultValue}`}}).join("&")},k=(i,a)=>{const t=i.filter(e=>e.filter).filter(e=>a!==void 0?e.filter.interactive===void 0?!a:a===e.filter.interactive:!0).map(e=>{const{display:n,name:l}=e,f=e.filter,{type:o,staticOptions:s,dynamicOptions:m,defaultValue:F,mandatory:d,pattern:I,index:P}=f,g=s?s.map($=>({value:$.name,text:$.display})):[];let c={text:n,name:l,type:o,value:F||null,minimumLength:m?.minimumLength,mandatory:d||!1,pattern:I,index:P};const v={value:"no-filter",text:"None",disabled:!1};switch(o){case u.FilterType.autocomplete.toLowerCase():c={...c,options:g};break;case u.FilterType.radio:d||g.unshift(v),c={...c,options:g};break;case u.FilterType.select:{d||g.unshift(v),g.unshift({value:"",text:"Select your option",disabled:!0,selected:!0}),c={...c,options:g};break}case u.FilterType.multiselect.toLowerCase():c={...c,options:g,values:F?F.split(","):[]};break;case u.FilterType.dateRange.toLowerCase():c=D.default.getFilterFromDefinition(f,c);break;case u.FilterType.date.toLowerCase():c=h.default.getFilterFromDefinition(f,c);break;case u.FilterType.granularDateRange.toLocaleLowerCase():{c=R.default.getFilterFromDefinition(f,c);break}default:break}return c});return X(t)},X=i=>{const a=i.filter(r=>r.index===void 0);return i.filter(r=>r.index!==void 0).forEach(r=>{a.splice(r.index,0,r)}),a},E=i=>i.filter(t=>t.value).reduce((t,r)=>{const{value:e,name:n}=r,l=`filters.${n}`;switch(r.type){case u.FilterType.granularDateRange.toLowerCase():{const f=e;Object.keys(f).forEach(o=>{let s=f[o];o.includes("partialDate")?t={...t}:((o.includes("granularity")||o.includes("quickFilter"))&&(s=s.value),t={...t,[`${l}.${o}`]:s})})}break;case u.FilterType.dateRange.toLowerCase():Object.keys(e).forEach(f=>{t={...t,[`${l}.${f}`]:e[f]}});break;case u.FilterType.multiselect.toLowerCase():t={...t,[`${l}`]:e.split(",")};break;default:t={...t,[`${l}`]:e};break}return t},{}),O=(i,a,t,r)=>{const e={},{specification:n}=a,l=n?n.fields:[],{preventDefault:f}=r.query;if(Object.keys(i.filters).length===0&&!f&&l.filter(s=>s.filter&&s.filter.defaultValue).forEach(s=>{const{filter:m}=s;if(m)if(m.type.toLowerCase()===u.FilterType.dateRange.toLowerCase()){const{defaultValue:F}=m,d=F?F.split(" - "):"";d.length>=1&&(e[`${p.DEFAULT_FILTERS_PREFIX}${s.name}.start`]=d[0],d.length>=2&&(e[`${p.DEFAULT_FILTERS_PREFIX}${s.name}.end`]=d[1]))}else e[`${p.DEFAULT_FILTERS_PREFIX}${s.name}`]=m.defaultValue||""}),Object.keys(e).length>0){const s=(0,G.default)(i.toRecordWithFilterPrefix(),e,l);return t.redirect(`${r.baseUrl}${r.path}${s}`),!0}return!1},L=async(i,a,t,r,e)=>{const{reportId:n,id:l}=a.params,{dprUser:f}=T.default.getValues(t),o=await r.defaultFilterValuesService.get(f.id,n,l,e);let s=i;return o&&(s=Q.default.setFilterValuesFromSavedDefaults(i,[],o).filters),{filters:s,defaultFilterValues:o}},U=async({fields:i,req:a,res:t,prefix:r="filters.",services:e,filtersType:n})=>{let l=await k(i,n===q.FiltersType.INTERACTIVE),f,o=!1;if(e){const{filters:m,defaultFilterValues:F}=await L(l,a,t,e,n);l=m,f=F?.length>0,o=!0}a.query&&(l=w(l,a));const s=x.default.getSelectedFilters(l,r);return{filters:l,selectedFilters:s,hasDefaults:f,canSaveDefaults:o}};var z={getFiltersFromDefinition:k,setFilterValuesFromRequest:w,getFilters:U,setFilterQueryFromFilterDefinition:S,redirectWithDefaultFilters:O,setRequestQueryFromFilterValues:E,getPersonalisedFilters:L};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 { 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"]
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 const filters = fields\n .filter((f) => f.filter)\n .filter((f) => {\n if (interactive !== undefined) {\n if (f.filter.interactive === undefined) {\n return !interactive\n }\n return interactive === f.filter.interactive\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, index } = 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 index,\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 const orderedFilters = orderFilters(filters)\n return orderedFilters\n}\n\nconst orderFilters = (filterValues: FilterValue[]) => {\n const noIndexFilters = filterValues.filter((f) => f.index === undefined)\n const indexFilters = filterValues.filter((f) => f.index !== undefined)\n indexFilters.forEach((f) => {\n noIndexFilters.splice(f.index, 0, f)\n })\n return noIndexFilters\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", "text", "name", "type", "staticOptions", "dynamicOptions", "defaultValue", "mandatory", "pattern", "index", "options", "opt", "filterData", "noFilterOption", "orderFilters", "filterValues", "noIndexFilters", "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
  }
@@ -143,29 +143,21 @@ export const getFiltersFromDefinition = (
143
143
  fields: components['schemas']['FieldDefinition'][],
144
144
  interactive?: boolean,
145
145
  ): FilterValue[] => {
146
- return fields
146
+ const filters = fields
147
147
  .filter((f) => f.filter)
148
148
  .filter((f) => {
149
149
  if (interactive !== undefined) {
150
- const interactiveFilterValue = (<
151
- components['schemas']['FieldDefinition'] & {
152
- interactive?: boolean
153
- }
154
- >f.filter).interactive
155
-
156
- // NOTE: Uncomment if filters are meant to be both interactive and non interactive.
157
- if (interactiveFilterValue === undefined) {
150
+ if (f.filter.interactive === undefined) {
158
151
  return !interactive
159
152
  }
160
-
161
- return interactive === interactiveFilterValue
153
+ return interactive === f.filter.interactive
162
154
  }
163
155
  return true
164
156
  })
165
157
  .map((f) => {
166
158
  const { display: text, name } = f
167
159
  const filter = <components['schemas']['FilterDefinition']>f.filter
168
- const { type, staticOptions, dynamicOptions, defaultValue, mandatory, pattern } = filter
160
+ const { type, staticOptions, dynamicOptions, defaultValue, mandatory, pattern, index } = filter
169
161
 
170
162
  const options: FilterOption[] = staticOptions
171
163
  ? staticOptions.map((opt) => {
@@ -181,6 +173,7 @@ export const getFiltersFromDefinition = (
181
173
  minimumLength: dynamicOptions?.minimumLength,
182
174
  mandatory: mandatory || false,
183
175
  pattern,
176
+ index,
184
177
  }
185
178
 
186
179
  const noFilterOption = {
@@ -248,6 +241,18 @@ export const getFiltersFromDefinition = (
248
241
 
249
242
  return filterData
250
243
  })
244
+
245
+ const orderedFilters = orderFilters(filters)
246
+ return orderedFilters
247
+ }
248
+
249
+ const orderFilters = (filterValues: FilterValue[]) => {
250
+ const noIndexFilters = filterValues.filter((f) => f.index === undefined)
251
+ const indexFilters = filterValues.filter((f) => f.index !== undefined)
252
+ indexFilters.forEach((f) => {
253
+ noIndexFilters.splice(f.index, 0, f)
254
+ })
255
+ return noIndexFilters
251
256
  }
252
257
 
253
258
  export const setRequestQueryFromFilterValues = (filterValues: FilterValue[]) => {
@@ -1,2 +1,2 @@
1
- describe("Request a report",()=>{const f="/embedded/platform/dpr/request-report/report/request-examples/request-example-success/filters";let c,a,s,n,d,r,o;const t=()=>{for(let e=0;e<5;e+=1)cy.get("#dpr-selected-filters > a:nth-child(1)").click(1,1)},l=()=>{cy.findByRole("combobox",{name:"Field 2"}).select("value2.2"),cy.findByRole("textbox",{name:"From"}).type("1/2/2003"),cy.findByRole("textbox",{name:"To"}).type("4/5/2007"),cy.findByRole("combobox",{name:"Field 4"}).type("Inigo Montoya"),cy.findByRole("textbox",{name:"Field 6"}).type("Value 6.1"),cy.findByRole("textbox",{name:"Field 7"}).type("05/05/2005"),cy.findByRole("checkbox",{name:"Value 8.1"}).check(),cy.findByRole("checkbox",{name:"Value 8.2"}).check(),cy.findByRole("checkbox",{name:"Value 8.3"}).check(),cy.findByRole("checkbox",{name:"Value 8.4"}).check()};before(()=>{cy.task("resetStubs"),cy.task("resetRedis"),cy.task("stubDefinitions"),cy.task("stubDefinitionRequestExamplesSuccess"),cy.task("stubViewAsyncReportingResults"),cy.task("stubReportsFinishedStatus"),cy.task("stubRequestSuccessResult20"),cy.task("stubRequestSuccessReportTablesCount")}),beforeEach(()=>{cy.visit(f),c=cy.findByRole("combobox",{name:"Field 2"}),a=cy.findByRole("textbox",{name:"From"}),s=cy.findByRole("textbox",{name:"To"}),n=cy.findByRole("combobox",{name:"Field 4"}),d=cy.findByRole("combobox",{name:"Field 5"}),r=cy.findByRole("textbox",{name:"Field 6"}),o=cy.findByRole("textbox",{name:"Field 7"})}),it("is accessible",()=>{cy.injectAxe(),cy.checkA11y()}),context("Selected filters",()=>{it("should show the default selected filters",()=>{cy.findByLabelText(/Selected filters.*/i).within(()=>{cy.findAllByRole("link").should("have.length",6).each((e,i)=>{switch(i){case 0:cy.wrap(e).contains("Field 1"),cy.wrap(e).contains("Value 1.2");break;case 1:cy.wrap(e).contains("Field 3 start"),cy.wrap(e).contains("01/02/2003");break;case 2:cy.wrap(e).contains("Field 3 end"),cy.wrap(e).contains("04/05/2006");break;case 3:cy.wrap(e).contains("Field 7"),cy.wrap(e).contains("01/02/2005");break;case 4:cy.wrap(e).contains("Field 8"),cy.wrap(e).contains("Value 8.2, Value 8.3");break;case 5:cy.wrap(e).contains("Reset filters");break;default:break}})})}),it("should remove the selected filter and reset the input",()=>{cy.findByLabelText(/Selected filters.*/i).within(()=>{cy.findAllByRole("link").should("have.length",6)}),t(),cy.findByLabelText(/Selected filters.*/i).within(()=>{cy.findAllByRole("link").should("have.length",1)}),cy.findByRole("radio",{name:"None"}).should("not.be.checked"),cy.findByRole("radio",{name:"Value 1.1"}).should("not.be.checked"),cy.findByRole("radio",{name:"Value 1.2"}).should("not.be.checked"),cy.findByRole("radio",{name:"Value 1.3"}).should("not.be.checked"),c.find("option:selected").should("have.text","Select your option"),a.should("have.value",""),s.should("have.value",""),n.should("have.value",""),d.should("have.value",""),r.should("have.value",""),o.should("have.value","")}),it("should add selected filters when inputs values are updated",()=>{t(),cy.findByLabelText(/Selected filters.*/i).within(()=>{cy.findAllByRole("link").should("have.length",1)}),l(),cy.findByLabelText(/Selected filters.*/i).within(()=>{cy.findAllByRole("link").should("have.length",8).each((e,i)=>{switch(i){case 0:cy.wrap(e).contains("Field 2"),cy.wrap(e).contains("Value 2.2");break;case 1:cy.wrap(e).contains("Field 3 start"),cy.wrap(e).contains("01/02/2003");break;case 2:cy.wrap(e).contains("Field 3 end"),cy.wrap(e).contains("4/5/2007");break;case 3:cy.wrap(e).contains("Field 4"),cy.wrap(e).contains("Inigo Montoya");break;case 4:cy.wrap(e).contains("Field 6"),cy.wrap(e).contains("Value 6.1");break;case 5:cy.wrap(e).contains("Field 7"),cy.wrap(e).contains("05/05/2005");break;case 6:cy.wrap(e).contains("Field 8"),cy.wrap(e).contains("Value 8.1, Value 8.2, Value 8.3 + 1 more");break;default:break}})}),cy.location().should(e=>{expect(e.search).to.contain("filters.field2=value2.2"),expect(e.search).to.contain("filters.field3.start=2003-02-01"),expect(e.search).to.contain("filters.field3.end=2007-05-04"),expect(e.search).to.contain("filters.field4=Inigo+Montoya"),expect(e.search).to.contain("filters.field6=Value+6.1"),expect(e.search).to.contain("filters.field7=2005-05-05")})}),it("should reset the filters back to their DPD defaults",()=>{cy.findByLabelText(/Selected filters.*/i).within(()=>{cy.findAllByRole("link").should("have.length",6)}),t(),cy.findByLabelText(/Selected filters.*/i).within(()=>{cy.findAllByRole("link").should("have.length",1)}),cy.findByRole("link",{name:"Reset filters"}).click(),cy.findByLabelText(/Selected filters.*/i).within(()=>{cy.findAllByRole("link").should("have.length",6)})})}),context("Request query parameters",()=>{it("should correctly set the request query parameters from DPD defaults",()=>{cy.location().should(e=>{expect(e.search).to.contain("filters.field1=value1.2"),expect(e.search).to.contain("filters.field3.start=2003-02-01"),expect(e.search).to.contain("filters.field3.end=2006-05-04"),expect(e.search).to.contain("filters.field7=2005-02-01"),expect(e.search).to.contain("filters.field8=value8.2&filters.field8=value8.3")}),t(),l(),cy.location().should(e=>{expect(e.search).to.contain("filters.field2=value2.2"),expect(e.search).to.contain("filters.field3.start=2003-02-01"),expect(e.search).to.contain("filters.field3.end=2007-05-04"),expect(e.search).to.contain("filters.field4=Inigo+Montoya"),expect(e.search).to.contain("filters.field6=Value+6.1"),expect(e.search).to.contain("filters.field7=2005-05-05"),expect(e.search).to.contain("filters.field8=value8.1&filters.field8=value8.2&filters.field8=value8.3&filters.field8=value8.4")})}),it("should correctly set the request query parameters when inputs are updated",()=>{t(),l(),cy.location().should(e=>{expect(e.search).to.contain("filters.field2=value2.2"),expect(e.search).to.contain("filters.field3.start=2003-02-01"),expect(e.search).to.contain("filters.field3.end=2007-05-04"),expect(e.search).to.contain("filters.field4=Inigo+Montoya"),expect(e.search).to.contain("filters.field6=Value+6.1"),expect(e.search).to.contain("filters.field7=2005-05-05"),expect(e.search).to.contain("filters.field8=value8.1&filters.field8=value8.2&filters.field8=value8.3&filters.field8=value8.4")})})}),context("User defined defaults",()=>{it("should save the user defined defaults",()=>{t(),l(),cy.findByRole("button",{name:"Save current filter values as defaults"}).click(),cy.location().should(e=>{expect(e.search).to.contain("defaultsSaved=true")}),cy.findByRole("button",{name:"Update defaults"}).should("exist"),cy.findByRole("button",{name:"Delete defaults"}).should("exist")}),it("should pre-fill the filter values with the saved defaults next visit",()=>{cy.location().should(e=>{expect(e.search).to.contain("filters.field2=value2.2"),expect(e.search).to.contain("filters.field3.start=2003-02-01"),expect(e.search).to.contain("filters.field3.end=2007-05-04"),expect(e.search).to.contain("filters.field4=Inigo+Montoya"),expect(e.search).to.contain("filters.field6=Value+6.1"),expect(e.search).to.contain("filters.field7=2005-05-05"),expect(e.search).not.to.contain("defaultsSaved=true"),expect(e.search).to.contain("filters.field8=value8.1&filters.field8=value8.2&filters.field8=value8.3&filters.field8=value8.4")}),cy.findByRole("button",{name:"Update defaults"}).should("exist"),cy.findByRole("button",{name:"Delete defaults"}).should("exist")}),it("should update the saved defaults",()=>{cy.findByLabelText(/Selected filters.*/i).within(()=>{cy.findAllByRole("link").eq(1).click(1,1),cy.findAllByRole("link").eq(1).click(1,1),cy.findAllByRole("link").eq(1).click(1,1)}),cy.findByRole("checkbox",{name:"Value 8.2"}).uncheck(),cy.findByRole("checkbox",{name:"Value 8.3"}).uncheck(),cy.findByRole("combobox",{name:"Field 2"}).select("value2.3"),cy.findByRole("button",{name:"Update defaults"}).click(),cy.findByLabelText(/Selected filters.*/i).within(()=>{cy.findAllByRole("link").should("have.length",5)}),cy.location().should(e=>{expect(e.search).to.contain("filters.field2=value2.3"),expect(e.search).not.to.contain("filters.field3.start=2003-02-01"),expect(e.search).not.to.contain("filters.field3.end=2007-05-04"),expect(e.search).to.contain("filters.field6=Value+6.1"),expect(e.search).to.contain("filters.field7=2005-05-05"),expect(e.search).to.contain("defaultsSaved=true"),expect(e.search).not.to.contain("filters.field4=Inigo+Montoya"),expect(e.search).not.to.contain("filters.field8=value8.1&filters.field8=value8.2&filters.field8=value8.3&filters.field8=value8.4"),expect(e.search).to.contain("&filters.field8=value8.1&filters.field8=value8.4")}),cy.reload(),cy.location().should(e=>{expect(e.search).to.contain("filters.field2=value2.3"),expect(e.search).to.contain("filters.field3.start=2003-02-01"),expect(e.search).to.contain("filters.field3.end=2007-05-04"),expect(e.search).to.contain("filters.field6=Value+6.1"),expect(e.search).to.contain("filters.field7=2005-05-05"),expect(e.search).to.contain("defaultsSaved=true"),expect(e.search).not.to.contain("filters.field4=Inigo+Montoya"),expect(e.search).not.to.contain("filters.field8=value8.1&filters.field8=value8.2&filters.field8=value8.3&filters.field8=value8.4"),expect(e.search).to.contain("&filters.field8=value8.1&filters.field8=value8.4")})}),it("should reset the defaults back to the user saved defaults",()=>{cy.findByLabelText(/Selected filters.*/i).within(()=>{cy.findAllByRole("link").eq(1).click(1,1),cy.findAllByRole("link").eq(1).click(1,1),cy.findAllByRole("link").eq(1).click(1,1)}),cy.findByLabelText(/Selected filters.*/i).within(()=>{cy.findAllByRole("link").should("have.length",2)}),cy.findByRole("link",{name:"Reset filters"}).click(),cy.findByLabelText(/Selected filters.*/i).within(()=>{cy.findAllByRole("link").should("have.length",5)})}),it("should remove the save defaults",()=>{cy.findByRole("button",{name:"Delete defaults"}).click(),cy.location().should(e=>{expect(e.search).to.contain("filters.field1=value1.2"),expect(e.search).to.contain("filters.field3.start=2003-02-01"),expect(e.search).to.contain("filters.field3.end=2006-05-04"),expect(e.search).to.contain("filters.field7=2005-02-01"),expect(e.search).to.contain("filters.field8=value8.2&filters.field8=value8.3")})})}),context("Submission",()=>{it("should submit the report details in the request",()=>{cy.intercept({method:"POST",url:"/embedded/platform/dpr/request-report/report/**/**/filters?**"}).as("requestSubmit"),cy.findByRole("button",{name:/Request/}).click(),cy.wait("@requestSubmit").its("request").then(e=>{cy.wrap(e).its("body").should("include","reportId=request-examples"),cy.wrap(e).its("body").should("include","name=Successful+Report"),cy.wrap(e).its("body").should("include","reportName=Successful+Report"),cy.wrap(e).its("body").should("include","id=request-example-success")})}),it("should submit the request with the correct query params",()=>{cy.intercept({method:"POST",url:"/embedded/platform/dpr/request-report/report/**/**/filters?**"}).as("requestSubmit"),cy.findByRole("button",{name:/Request/}).click(),cy.wait("@requestSubmit").its("request").then(e=>{expect(e.query).to.have.property("filters.field1","value1.2"),expect(e.query).to.have.property("filters.field3.end","2006-05-04"),expect(e.query).to.have.property("filters.field3.start","2003-02-01"),expect(e.query).to.have.property("filters.field7","2005-02-01"),expect(e.query).to.have.property("filters.field8"),cy.wrap(e.query["filters.field8"]).should("deep.eq",["value8.2","value8.3"]),expect(e.query).to.have.property("sortColumn","field1"),expect(e.query).to.have.property("sortedAsc","false")})})})});
1
+ describe("Request a report",()=>{const y="/embedded/platform/dpr/request-report/report/request-examples/request-example-success/filters",u="/embedded/platform/dpr/request-report/report/feature-testing/feature-testing-filter-order/filters";let c,s,n,d,r,o,f;const t=()=>{for(let e=0;e<5;e+=1)cy.get("#dpr-selected-filters > a:nth-child(1)").click(1,1)},a=()=>{cy.findByRole("combobox",{name:"Field 2"}).select("value2.2"),cy.findByRole("textbox",{name:"From"}).type("1/2/2003"),cy.findByRole("textbox",{name:"To"}).type("4/5/2007"),cy.findByRole("combobox",{name:"Field 4"}).type("Inigo Montoya"),cy.findByRole("textbox",{name:"Field 6"}).type("Value 6.1"),cy.findByRole("textbox",{name:"Field 7"}).type("05/05/2005"),cy.findByRole("checkbox",{name:"Value 8.1"}).check(),cy.findByRole("checkbox",{name:"Value 8.2"}).check(),cy.findByRole("checkbox",{name:"Value 8.3"}).check(),cy.findByRole("checkbox",{name:"Value 8.4"}).check()};before(()=>{cy.task("resetStubs"),cy.task("resetRedis"),cy.task("stubDefinitions"),cy.task("stubDefinitionRequestExamplesSuccess"),cy.task("stubViewAsyncReportingResults"),cy.task("stubReportsFinishedStatus"),cy.task("stubRequestSuccessResult20"),cy.task("stubRequestSuccessReportTablesCount"),cy.task("stubDefinitionOrderFilters")}),beforeEach(()=>{cy.visit(y),c=cy.findByRole("combobox",{name:"Field 2"}),s=cy.findByRole("textbox",{name:"From"}),n=cy.findByRole("textbox",{name:"To"}),d=cy.findByRole("combobox",{name:"Field 4"}),r=cy.findByRole("combobox",{name:"Field 5"}),o=cy.findByRole("textbox",{name:"Field 6"}),f=cy.findByRole("textbox",{name:"Field 7"})}),it("is accessible",()=>{cy.injectAxe(),cy.checkA11y()}),context("Selected filters",()=>{it("should show the default selected filters",()=>{cy.findByLabelText(/Selected filters.*/i).within(()=>{cy.findAllByRole("link").should("have.length",6).each((e,l)=>{switch(l){case 0:cy.wrap(e).contains("Field 1"),cy.wrap(e).contains("Value 1.2");break;case 1:cy.wrap(e).contains("Field 3 start"),cy.wrap(e).contains("01/02/2003");break;case 2:cy.wrap(e).contains("Field 3 end"),cy.wrap(e).contains("04/05/2006");break;case 3:cy.wrap(e).contains("Field 7"),cy.wrap(e).contains("01/02/2005");break;case 4:cy.wrap(e).contains("Field 8"),cy.wrap(e).contains("Value 8.2, Value 8.3");break;case 5:cy.wrap(e).contains("Reset filters");break;default:break}})})}),it("should remove the selected filter and reset the input",()=>{cy.findByLabelText(/Selected filters.*/i).within(()=>{cy.findAllByRole("link").should("have.length",6)}),t(),cy.findByLabelText(/Selected filters.*/i).within(()=>{cy.findAllByRole("link").should("have.length",1)}),cy.findByRole("radio",{name:"None"}).should("not.be.checked"),cy.findByRole("radio",{name:"Value 1.1"}).should("not.be.checked"),cy.findByRole("radio",{name:"Value 1.2"}).should("not.be.checked"),cy.findByRole("radio",{name:"Value 1.3"}).should("not.be.checked"),c.find("option:selected").should("have.text","Select your option"),s.should("have.value",""),n.should("have.value",""),d.should("have.value",""),r.should("have.value",""),o.should("have.value",""),f.should("have.value","")}),it("should add selected filters when inputs values are updated",()=>{t(),cy.findByLabelText(/Selected filters.*/i).within(()=>{cy.findAllByRole("link").should("have.length",1)}),a(),cy.findByLabelText(/Selected filters.*/i).within(()=>{cy.findAllByRole("link").should("have.length",8).each((e,l)=>{switch(l){case 0:cy.wrap(e).contains("Field 2"),cy.wrap(e).contains("Value 2.2");break;case 1:cy.wrap(e).contains("Field 3 start"),cy.wrap(e).contains("01/02/2003");break;case 2:cy.wrap(e).contains("Field 3 end"),cy.wrap(e).contains("4/5/2007");break;case 3:cy.wrap(e).contains("Field 4"),cy.wrap(e).contains("Inigo Montoya");break;case 4:cy.wrap(e).contains("Field 6"),cy.wrap(e).contains("Value 6.1");break;case 5:cy.wrap(e).contains("Field 7"),cy.wrap(e).contains("05/05/2005");break;case 6:cy.wrap(e).contains("Field 8"),cy.wrap(e).contains("Value 8.1, Value 8.2, Value 8.3 + 1 more");break;default:break}})}),cy.location().should(e=>{expect(e.search).to.contain("filters.field2=value2.2"),expect(e.search).to.contain("filters.field3.start=2003-02-01"),expect(e.search).to.contain("filters.field3.end=2007-05-04"),expect(e.search).to.contain("filters.field4=Inigo+Montoya"),expect(e.search).to.contain("filters.field6=Value+6.1"),expect(e.search).to.contain("filters.field7=2005-05-05")})}),it("should reset the filters back to their DPD defaults",()=>{cy.findByLabelText(/Selected filters.*/i).within(()=>{cy.findAllByRole("link").should("have.length",6)}),t(),cy.findByLabelText(/Selected filters.*/i).within(()=>{cy.findAllByRole("link").should("have.length",1)}),cy.findByRole("link",{name:"Reset filters"}).click(),cy.findByLabelText(/Selected filters.*/i).within(()=>{cy.findAllByRole("link").should("have.length",6)})})}),context("Request query parameters",()=>{it("should correctly set the request query parameters from DPD defaults",()=>{cy.location().should(e=>{expect(e.search).to.contain("filters.field1=value1.2"),expect(e.search).to.contain("filters.field3.start=2003-02-01"),expect(e.search).to.contain("filters.field3.end=2006-05-04"),expect(e.search).to.contain("filters.field7=2005-02-01"),expect(e.search).to.contain("filters.field8=value8.2&filters.field8=value8.3")}),t(),a(),cy.location().should(e=>{expect(e.search).to.contain("filters.field2=value2.2"),expect(e.search).to.contain("filters.field3.start=2003-02-01"),expect(e.search).to.contain("filters.field3.end=2007-05-04"),expect(e.search).to.contain("filters.field4=Inigo+Montoya"),expect(e.search).to.contain("filters.field6=Value+6.1"),expect(e.search).to.contain("filters.field7=2005-05-05"),expect(e.search).to.contain("filters.field8=value8.1&filters.field8=value8.2&filters.field8=value8.3&filters.field8=value8.4")})}),it("should correctly set the request query parameters when inputs are updated",()=>{t(),a(),cy.location().should(e=>{expect(e.search).to.contain("filters.field2=value2.2"),expect(e.search).to.contain("filters.field3.start=2003-02-01"),expect(e.search).to.contain("filters.field3.end=2007-05-04"),expect(e.search).to.contain("filters.field4=Inigo+Montoya"),expect(e.search).to.contain("filters.field6=Value+6.1"),expect(e.search).to.contain("filters.field7=2005-05-05"),expect(e.search).to.contain("filters.field8=value8.1&filters.field8=value8.2&filters.field8=value8.3&filters.field8=value8.4")})})}),context("User defined defaults",()=>{it("should save the user defined defaults",()=>{t(),a(),cy.findByRole("button",{name:"Save current filter values as defaults"}).click(),cy.location().should(e=>{expect(e.search).to.contain("defaultsSaved=true")}),cy.findByRole("button",{name:"Update defaults"}).should("exist"),cy.findByRole("button",{name:"Delete defaults"}).should("exist")}),it("should pre-fill the filter values with the saved defaults next visit",()=>{cy.location().should(e=>{expect(e.search).to.contain("filters.field2=value2.2"),expect(e.search).to.contain("filters.field3.start=2003-02-01"),expect(e.search).to.contain("filters.field3.end=2007-05-04"),expect(e.search).to.contain("filters.field4=Inigo+Montoya"),expect(e.search).to.contain("filters.field6=Value+6.1"),expect(e.search).to.contain("filters.field7=2005-05-05"),expect(e.search).not.to.contain("defaultsSaved=true"),expect(e.search).to.contain("filters.field8=value8.1&filters.field8=value8.2&filters.field8=value8.3&filters.field8=value8.4")}),cy.findByRole("button",{name:"Update defaults"}).should("exist"),cy.findByRole("button",{name:"Delete defaults"}).should("exist")}),it("should update the saved defaults",()=>{cy.findByLabelText(/Selected filters.*/i).within(()=>{cy.findAllByRole("link").eq(1).click(1,1),cy.findAllByRole("link").eq(1).click(1,1),cy.findAllByRole("link").eq(1).click(1,1)}),cy.findByRole("checkbox",{name:"Value 8.2"}).uncheck(),cy.findByRole("checkbox",{name:"Value 8.3"}).uncheck(),cy.findByRole("combobox",{name:"Field 2"}).select("value2.3"),cy.findByRole("button",{name:"Update defaults"}).click(),cy.findByLabelText(/Selected filters.*/i).within(()=>{cy.findAllByRole("link").should("have.length",5)}),cy.location().should(e=>{expect(e.search).to.contain("filters.field2=value2.3"),expect(e.search).not.to.contain("filters.field3.start=2003-02-01"),expect(e.search).not.to.contain("filters.field3.end=2007-05-04"),expect(e.search).to.contain("filters.field6=Value+6.1"),expect(e.search).to.contain("filters.field7=2005-05-05"),expect(e.search).to.contain("defaultsSaved=true"),expect(e.search).not.to.contain("filters.field4=Inigo+Montoya"),expect(e.search).not.to.contain("filters.field8=value8.1&filters.field8=value8.2&filters.field8=value8.3&filters.field8=value8.4"),expect(e.search).to.contain("&filters.field8=value8.1&filters.field8=value8.4")}),cy.reload(),cy.location().should(e=>{expect(e.search).to.contain("filters.field2=value2.3"),expect(e.search).to.contain("filters.field3.start=2003-02-01"),expect(e.search).to.contain("filters.field3.end=2007-05-04"),expect(e.search).to.contain("filters.field6=Value+6.1"),expect(e.search).to.contain("filters.field7=2005-05-05"),expect(e.search).to.contain("defaultsSaved=true"),expect(e.search).not.to.contain("filters.field4=Inigo+Montoya"),expect(e.search).not.to.contain("filters.field8=value8.1&filters.field8=value8.2&filters.field8=value8.3&filters.field8=value8.4"),expect(e.search).to.contain("&filters.field8=value8.1&filters.field8=value8.4")})}),it("should reset the defaults back to the user saved defaults",()=>{cy.findByLabelText(/Selected filters.*/i).within(()=>{cy.findAllByRole("link").eq(1).click(1,1),cy.findAllByRole("link").eq(1).click(1,1),cy.findAllByRole("link").eq(1).click(1,1)}),cy.findByLabelText(/Selected filters.*/i).within(()=>{cy.findAllByRole("link").should("have.length",2)}),cy.findByRole("link",{name:"Reset filters"}).click(),cy.findByLabelText(/Selected filters.*/i).within(()=>{cy.findAllByRole("link").should("have.length",5)})}),it("should remove the save defaults",()=>{cy.findByRole("button",{name:"Delete defaults"}).click(),cy.location().should(e=>{expect(e.search).to.contain("filters.field1=value1.2"),expect(e.search).to.contain("filters.field3.start=2003-02-01"),expect(e.search).to.contain("filters.field3.end=2006-05-04"),expect(e.search).to.contain("filters.field7=2005-02-01"),expect(e.search).to.contain("filters.field8=value8.2&filters.field8=value8.3")})})}),context("Submission",()=>{it("should submit the report details in the request",()=>{cy.intercept({method:"POST",url:"/embedded/platform/dpr/request-report/report/**/**/filters?**"}).as("requestSubmit"),cy.findByRole("button",{name:/Request/}).click(),cy.wait("@requestSubmit").its("request").then(e=>{cy.wrap(e).its("body").should("include","reportId=request-examples"),cy.wrap(e).its("body").should("include","name=Successful+Report"),cy.wrap(e).its("body").should("include","reportName=Successful+Report"),cy.wrap(e).its("body").should("include","id=request-example-success")})}),it("should submit the request with the correct query params",()=>{cy.intercept({method:"POST",url:"/embedded/platform/dpr/request-report/report/**/**/filters?**"}).as("requestSubmit"),cy.findByRole("button",{name:/Request/}).click(),cy.wait("@requestSubmit").its("request").then(e=>{expect(e.query).to.have.property("filters.field1","value1.2"),expect(e.query).to.have.property("filters.field3.end","2006-05-04"),expect(e.query).to.have.property("filters.field3.start","2003-02-01"),expect(e.query).to.have.property("filters.field7","2005-02-01"),expect(e.query).to.have.property("filters.field8"),cy.wrap(e.query["filters.field8"]).should("deep.eq",["value8.2","value8.3"]),expect(e.query).to.have.property("sortColumn","field1"),expect(e.query).to.have.property("sortedAsc","false")})})}),context("Filter order",()=>{beforeEach(()=>{cy.visit(u)}),it("should order the filters correctly",()=>{cy.findAllByLabelText(/Filters/).within(()=>{cy.findAllByRole("textbox").each((e,l)=>{switch(l){case 0:cy.wrap(e).should("have.attr","display-name").then(i=>{expect(i).contains("Field 2")});break;case 1:cy.wrap(e).should("have.attr","display-name").then(i=>{expect(i).contains("Field 3")});break;case 2:cy.wrap(e).should("have.attr","display-name").then(i=>{expect(i).contains("Field 1")});break;default:break}})})})})});
2
2
  //# sourceMappingURL=tests.cy.js.map