@ministryofjustice/hmpps-digital-prison-reporting-frontend 4.22.1 → 4.22.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- "use strict";var b=Object.create;var d=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var z=Object.getOwnPropertyNames;var C=Object.getPrototypeOf,F=Object.prototype.hasOwnProperty;var T=(n,i)=>{for(var s in i)d(n,s,{get:i[s],enumerable:!0})},g=(n,i,s,t)=>{if(i&&typeof i=="object"||typeof i=="function")for(let r of z(i))!F.call(n,r)&&r!==s&&d(n,r,{get:()=>i[r],enumerable:!(t=R(i,r))||t.enumerable});return n};var A=(n,i,s)=>(s=n!=null?b(C(n)):{},g(i||!n||!n.__esModule?d(s,"default",{value:n,enumerable:!0}):s,n)),O=n=>g(d({},"__esModule",{value:!0}),n);var v={};T(v,{DEFAULT_FILTERS_PREFIX:()=>D,ReportQuery:()=>m,default:()=>j});module.exports=O(v);var h=require("../utils/urlHelper"),p=A(require("../components/_reports/report-columns-form/utils")),S=require("./UserReports");const D="filters.";class m{constructor({fields:i,template:s,queryParams:t,definitionsPath:r,filtersPrefix:P=D,reportType:x}){if(this.selectedPage=t.selectedPage?Number(t.selectedPage):1,this.pageSize=this.getPageSize(t,s,x),this.sortColumn=t.sortColumn?t.sortColumn.toString():this.getDefaultSortColumn(i),this.sortedAsc=t.sortedAsc!=="false",this.dataProductDefinitionsPath=r??(t.dataProductDefinitionsPath?t.dataProductDefinitionsPath.toString():void 0),this.filtersPrefix=P,t.columns){const e=typeof t.columns=="string"?t.columns.split(","):t.columns;this.columns=p.default.ensureMandatoryColumns(i,e)}else this.columns=i.filter(e=>e.visible).map(e=>e.name);const o=i.find(e=>e.type==="date"&&e.filter&&e.filter.type==="daterange"||e.type==="date"&&e.filter&&e.filter.type==="date");let l,f;o&&o.filter&&(l=o.filter.min,f=o.filter.max),this.filters={},Object.keys(t).filter(e=>e.startsWith(this.filtersPrefix)).filter(e=>t[e]).forEach(e=>{const a=e.replace(this.filtersPrefix,""),u=t[e];let c=u?u.toString():"";a.includes(".start")&&l&&new Date(c)<new Date(l)&&(c=l),a.includes(".end")&&f&&new Date(c)>new Date(f)&&(c=f),c!=="no-filter"&&(this.filters[a]=c)}),o&&o.filter&&o.filter.type==="daterange"&&(l&&Object.keys(t).some(e=>e.includes(this.filtersPrefix))&&Object.keys(t).every(e=>!e.includes(".start"))&&(this.filters[`${o.name}.start`]=l),f&&Object.keys(t).some(e=>e.includes(this.filtersPrefix))&&Object.keys(t).every(e=>!e.includes(".end"))&&(this.filters[`${o.name}.end`]=f)),o&&o.filter&&o.filter.type==="date"&&l&&Object.keys(t).some(e=>e.includes(this.filtersPrefix))&&Object.keys(t).every(e=>!e.includes(o.name))&&(this.filters[`${o.name}.start`]=l)}getDefaultSortColumn(i){const s=i.find(t=>t.defaultsort);return s?s.name:i.find(t=>t.sortable)?.name}getPageSize(i,s,t){let r=5e6;return(!t||t===S.ReportType.REPORT)&&(i.pageSize?r=Number(i.pageSize):s&&(r=this.getDefaultPageSize(s))),r}toRecordWithFilterPrefix(i=!1){const s={selectedPage:this.selectedPage.toString(),...this.pageSize&&{pageSize:this.pageSize.toString()},...this.sortColumn&&{sortColumn:this.sortColumn},sortedAsc:this.sortedAsc.toString(),columns:this.columns};return this.dataProductDefinitionsPath&&(s.dataProductDefinitionsPath=this.dataProductDefinitionsPath),Object.keys(this.filters).forEach(t=>{const r=this.filters[t];(r&&!i||r!==h.clearFilterValue)&&(s[`${this.filtersPrefix}${t}`]=r)}),s}getDefaultPageSize(i){switch(i){case"list-section":case"summary-section":case"row-section-child":case"parent-child":case"parent-child-section":return 5e5;default:return 20}}}var j=m;0&&(module.exports={DEFAULT_FILTERS_PREFIX,ReportQuery});
1
+ "use strict";var b=Object.create;var d=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var z=Object.getOwnPropertyNames;var C=Object.getPrototypeOf,F=Object.prototype.hasOwnProperty;var A=(n,i)=>{for(var s in i)d(n,s,{get:i[s],enumerable:!0})},h=(n,i,s,t)=>{if(i&&typeof i=="object"||typeof i=="function")for(let r of z(i))!F.call(n,r)&&r!==s&&d(n,r,{get:()=>i[r],enumerable:!(t=R(i,r))||t.enumerable});return n};var T=(n,i,s)=>(s=n!=null?b(C(n)):{},h(i||!n||!n.__esModule?d(s,"default",{value:n,enumerable:!0}):s,n)),v=n=>h(d({},"__esModule",{value:!0}),n);var j={};A(j,{DEFAULT_FILTERS_PREFIX:()=>S,ReportQuery:()=>u,default:()=>O});module.exports=v(j);var m=require("../utils/urlHelper"),p=T(require("../components/_reports/report-columns-form/utils")),D=require("./UserReports");const S="filters.";class u{constructor({fields:i,template:s,queryParams:t,definitionsPath:r,filtersPrefix:P=S,reportType:x}){if(this.selectedPage=t.selectedPage?Number(t.selectedPage):1,this.pageSize=this.getPageSize(t,s,x),this.sortColumn=t.sortColumn?t.sortColumn.toString():this.getDefaultSortColumn(i),this.sortedAsc=t.sortedAsc!==void 0?t.sortedAsc!=="false":this.getDefaultSortDirection(i),this.dataProductDefinitionsPath=r??(t.dataProductDefinitionsPath?t.dataProductDefinitionsPath.toString():void 0),this.filtersPrefix=P,t.columns){const e=typeof t.columns=="string"?t.columns.split(","):t.columns;this.columns=p.default.ensureMandatoryColumns(i,e)}else this.columns=i.filter(e=>e.visible).map(e=>e.name);const o=i.find(e=>e.type==="date"&&e.filter&&e.filter.type==="daterange"||e.type==="date"&&e.filter&&e.filter.type==="date");let l,f;o&&o.filter&&(l=o.filter.min,f=o.filter.max),this.filters={},Object.keys(t).filter(e=>e.startsWith(this.filtersPrefix)).filter(e=>t[e]).forEach(e=>{const a=e.replace(this.filtersPrefix,""),g=t[e];let c=g?g.toString():"";a.includes(".start")&&l&&new Date(c)<new Date(l)&&(c=l),a.includes(".end")&&f&&new Date(c)>new Date(f)&&(c=f),c!=="no-filter"&&(this.filters[a]=c)}),o&&o.filter&&o.filter.type==="daterange"&&(l&&Object.keys(t).some(e=>e.includes(this.filtersPrefix))&&Object.keys(t).every(e=>!e.includes(".start"))&&(this.filters[`${o.name}.start`]=l),f&&Object.keys(t).some(e=>e.includes(this.filtersPrefix))&&Object.keys(t).every(e=>!e.includes(".end"))&&(this.filters[`${o.name}.end`]=f)),o&&o.filter&&o.filter.type==="date"&&l&&Object.keys(t).some(e=>e.includes(this.filtersPrefix))&&Object.keys(t).every(e=>!e.includes(o.name))&&(this.filters[`${o.name}.start`]=l)}getDefaultSortColumn(i){const s=i.find(t=>t.defaultsort);return s?s.name:i.find(t=>t.sortable)?.name}getDefaultSortDirection(i){const s=i.find(t=>t.defaultsort);return s&&s.sortDirection?s.sortDirection==="asc":!0}getPageSize(i,s,t){let r=5e6;return(!t||t===D.ReportType.REPORT)&&(i.pageSize?r=Number(i.pageSize):s&&(r=this.getDefaultPageSize(s))),r}toRecordWithFilterPrefix(i=!1){const s={selectedPage:this.selectedPage.toString(),...this.pageSize&&{pageSize:this.pageSize.toString()},...this.sortColumn&&{sortColumn:this.sortColumn},sortedAsc:this.sortedAsc.toString(),columns:this.columns};return this.dataProductDefinitionsPath&&(s.dataProductDefinitionsPath=this.dataProductDefinitionsPath),Object.keys(this.filters).forEach(t=>{const r=this.filters[t];(r&&!i||r!==m.clearFilterValue)&&(s[`${this.filtersPrefix}${t}`]=r)}),s}getDefaultPageSize(i){switch(i){case"list-section":case"summary-section":case"row-section-child":case"parent-child":case"parent-child-section":return 5e5;default:return 20}}}var O=u;0&&(module.exports={DEFAULT_FILTERS_PREFIX,ReportQuery});
2
2
  //# sourceMappingURL=ReportQuery.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/dpr/types/ReportQuery.ts"],
4
- "sourcesContent": ["import type { ParsedQs } from 'qs'\nimport { FilteredListRequest } from './index'\nimport Dict = NodeJS.Dict\nimport { components } from './api'\nimport { clearFilterValue } from '../utils/urlHelper'\nimport ColumnUtils from '../components/_reports/report-columns-form/utils'\nimport { Template } from './Templates'\nimport { ReportType } from './UserReports'\n\nexport const DEFAULT_FILTERS_PREFIX = 'filters.'\n\nclass ReportQuery implements FilteredListRequest {\n selectedPage: number\n\n pageSize: number\n\n sortColumn?: string | undefined\n\n columns: Array<string>\n\n sortedAsc: boolean\n\n filters: Dict<string>\n\n filtersPrefix: string\n\n dataProductDefinitionsPath?: string | undefined\n\n constructor({\n fields,\n template,\n queryParams,\n definitionsPath,\n filtersPrefix = DEFAULT_FILTERS_PREFIX,\n reportType,\n }: {\n fields: components['schemas']['FieldDefinition'][]\n template?: Template\n queryParams: ParsedQs\n definitionsPath?: string\n filtersPrefix?: string\n reportType?: ReportType\n }) {\n this.selectedPage = queryParams['selectedPage'] ? Number(queryParams['selectedPage']) : 1\n this.pageSize = this.getPageSize(queryParams, template, reportType)\n this.sortColumn = queryParams['sortColumn']\n ? queryParams['sortColumn'].toString()\n : this.getDefaultSortColumn(fields)\n this.sortedAsc = queryParams['sortedAsc'] !== 'false'\n this.dataProductDefinitionsPath =\n definitionsPath ??\n (queryParams['dataProductDefinitionsPath'] ? queryParams['dataProductDefinitionsPath'].toString() : undefined)\n this.filtersPrefix = filtersPrefix\n\n if (queryParams['columns']) {\n const columns =\n typeof queryParams['columns'] === 'string'\n ? queryParams['columns'].split(',')\n : (queryParams['columns'] as string[])\n this.columns = ColumnUtils.ensureMandatoryColumns(fields, columns)\n } else {\n this.columns = fields.filter((f) => f.visible).map((f) => f.name)\n }\n\n const dateField: components['schemas']['FieldDefinition'] | undefined = fields.find((f) => {\n return (\n (f.type === 'date' && f.filter && f.filter.type === 'daterange') ||\n (f.type === 'date' && f.filter && f.filter.type === 'date')\n )\n })\n\n let min: string | undefined\n let max: string | undefined\n if (dateField && dateField.filter) {\n min = dateField.filter.min\n max = dateField.filter.max\n }\n\n this.filters = {}\n\n Object.keys(queryParams)\n .filter((key) => key.startsWith(this.filtersPrefix))\n .filter((key) => queryParams[key])\n .forEach((key) => {\n const filter = key.replace(this.filtersPrefix, '')\n const p = queryParams[key]\n let value = p ? p.toString() : ''\n if (filter.includes('.start') && min) {\n if (new Date(value) < new Date(min)) value = min\n }\n if (filter.includes('.end') && max) {\n if (new Date(value) > new Date(max)) value = max\n }\n if (value !== 'no-filter') {\n this.filters[filter] = value\n }\n })\n\n if (dateField && dateField.filter && dateField.filter.type === 'daterange') {\n if (\n min &&\n Object.keys(queryParams).some((key) => key.includes(this.filtersPrefix)) &&\n Object.keys(queryParams).every((key) => !key.includes('.start'))\n ) {\n this.filters[`${dateField.name}.start`] = min\n }\n\n if (\n max &&\n Object.keys(queryParams).some((key) => key.includes(this.filtersPrefix)) &&\n Object.keys(queryParams).every((key) => !key.includes('.end'))\n ) {\n this.filters[`${dateField.name}.end`] = max\n }\n }\n\n if (dateField && dateField.filter && dateField.filter.type === 'date') {\n if (\n min &&\n Object.keys(queryParams).some((key) => key.includes(this.filtersPrefix)) &&\n Object.keys(queryParams).every((key) => !key.includes(dateField.name))\n ) {\n this.filters[`${dateField.name}.start`] = min\n }\n }\n }\n\n private getDefaultSortColumn(fields: components['schemas']['FieldDefinition'][]) {\n const defaultSortColumn = fields.find((f) => f.defaultsort)\n return defaultSortColumn ? defaultSortColumn.name : fields.find((f) => f.sortable)?.name\n }\n\n getPageSize(queryParams: ParsedQs, template?: Template, reportType?: ReportType): number {\n let pageSize = 5000000\n if (!reportType || reportType === ReportType.REPORT) {\n if (queryParams['pageSize']) {\n pageSize = Number(queryParams['pageSize'])\n } else if (template) {\n pageSize = this.getDefaultPageSize(template)\n }\n }\n return pageSize\n }\n\n toRecordWithFilterPrefix(removeClearedFilters = false): Record<string, string | Array<string>> {\n const record: Record<string, string | Array<string>> = {\n selectedPage: this.selectedPage.toString(),\n ...(this.pageSize && { pageSize: this.pageSize.toString() }),\n ...(this.sortColumn && { sortColumn: this.sortColumn }),\n sortedAsc: this.sortedAsc.toString(),\n columns: this.columns,\n }\n\n if (this.dataProductDefinitionsPath) {\n record['dataProductDefinitionsPath'] = this.dataProductDefinitionsPath\n }\n\n Object.keys(this.filters).forEach((filterName) => {\n const value = this.filters[filterName]\n if ((value && !removeClearedFilters) || value !== clearFilterValue) {\n record[`${this.filtersPrefix}${filterName}`] = <string>value\n }\n })\n\n return record\n }\n\n private getDefaultPageSize(template: Template) {\n const maxResultsSize = 500000\n const standardPage = 20\n\n switch (template) {\n case 'list-section':\n case 'summary-section':\n case 'row-section-child':\n case 'parent-child':\n case 'parent-child-section':\n return maxResultsSize\n\n default:\n return standardPage\n }\n }\n}\n\nexport { ReportQuery }\nexport default ReportQuery\n"],
5
- "mappings": "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",
6
- "names": ["ReportQuery_exports", "__export", "DEFAULT_FILTERS_PREFIX", "ReportQuery", "ReportQuery_default", "__toCommonJS", "import_urlHelper", "import_utils", "import_UserReports", "fields", "template", "queryParams", "definitionsPath", "filtersPrefix", "reportType", "columns", "ColumnUtils", "f", "dateField", "min", "max", "key", "filter", "p", "value", "defaultSortColumn", "pageSize", "removeClearedFilters", "record", "filterName"]
4
+ "sourcesContent": ["import type { ParsedQs } from 'qs'\nimport { FilteredListRequest } from './index'\nimport Dict = NodeJS.Dict\nimport { components } from './api'\nimport { clearFilterValue } from '../utils/urlHelper'\nimport ColumnUtils from '../components/_reports/report-columns-form/utils'\nimport { Template } from './Templates'\nimport { ReportType } from './UserReports'\n\nexport const DEFAULT_FILTERS_PREFIX = 'filters.'\n\nclass ReportQuery implements FilteredListRequest {\n selectedPage: number\n\n pageSize: number\n\n sortColumn?: string | undefined\n\n columns: Array<string>\n\n sortedAsc: boolean\n\n filters: Dict<string>\n\n filtersPrefix: string\n\n dataProductDefinitionsPath?: string | undefined\n\n constructor({\n fields,\n template,\n queryParams,\n definitionsPath,\n filtersPrefix = DEFAULT_FILTERS_PREFIX,\n reportType,\n }: {\n fields: components['schemas']['FieldDefinition'][]\n template?: Template\n queryParams: ParsedQs\n definitionsPath?: string\n filtersPrefix?: string\n reportType?: ReportType\n }) {\n this.selectedPage = queryParams['selectedPage'] ? Number(queryParams['selectedPage']) : 1\n this.pageSize = this.getPageSize(queryParams, template, reportType)\n\n this.sortColumn = queryParams['sortColumn']\n ? queryParams['sortColumn'].toString()\n : this.getDefaultSortColumn(fields)\n\n this.sortedAsc =\n queryParams['sortedAsc'] !== undefined\n ? queryParams['sortedAsc'] !== 'false'\n : this.getDefaultSortDirection(fields)\n\n this.dataProductDefinitionsPath =\n definitionsPath ??\n (queryParams['dataProductDefinitionsPath'] ? queryParams['dataProductDefinitionsPath'].toString() : undefined)\n\n this.filtersPrefix = filtersPrefix\n\n if (queryParams['columns']) {\n const columns =\n typeof queryParams['columns'] === 'string'\n ? queryParams['columns'].split(',')\n : (queryParams['columns'] as string[])\n this.columns = ColumnUtils.ensureMandatoryColumns(fields, columns)\n } else {\n this.columns = fields.filter((f) => f.visible).map((f) => f.name)\n }\n\n const dateField: components['schemas']['FieldDefinition'] | undefined = fields.find((f) => {\n return (\n (f.type === 'date' && f.filter && f.filter.type === 'daterange') ||\n (f.type === 'date' && f.filter && f.filter.type === 'date')\n )\n })\n\n let min: string | undefined\n let max: string | undefined\n if (dateField && dateField.filter) {\n min = dateField.filter.min\n max = dateField.filter.max\n }\n\n this.filters = {}\n\n Object.keys(queryParams)\n .filter((key) => key.startsWith(this.filtersPrefix))\n .filter((key) => queryParams[key])\n .forEach((key) => {\n const filter = key.replace(this.filtersPrefix, '')\n const p = queryParams[key]\n let value = p ? p.toString() : ''\n if (filter.includes('.start') && min) {\n if (new Date(value) < new Date(min)) value = min\n }\n if (filter.includes('.end') && max) {\n if (new Date(value) > new Date(max)) value = max\n }\n if (value !== 'no-filter') {\n this.filters[filter] = value\n }\n })\n\n if (dateField && dateField.filter && dateField.filter.type === 'daterange') {\n if (\n min &&\n Object.keys(queryParams).some((key) => key.includes(this.filtersPrefix)) &&\n Object.keys(queryParams).every((key) => !key.includes('.start'))\n ) {\n this.filters[`${dateField.name}.start`] = min\n }\n\n if (\n max &&\n Object.keys(queryParams).some((key) => key.includes(this.filtersPrefix)) &&\n Object.keys(queryParams).every((key) => !key.includes('.end'))\n ) {\n this.filters[`${dateField.name}.end`] = max\n }\n }\n\n if (dateField && dateField.filter && dateField.filter.type === 'date') {\n if (\n min &&\n Object.keys(queryParams).some((key) => key.includes(this.filtersPrefix)) &&\n Object.keys(queryParams).every((key) => !key.includes(dateField.name))\n ) {\n this.filters[`${dateField.name}.start`] = min\n }\n }\n }\n\n private getDefaultSortColumn(fields: components['schemas']['FieldDefinition'][]) {\n const defaultSortColumn = fields.find((f) => f.defaultsort)\n return defaultSortColumn ? defaultSortColumn.name : fields.find((f) => f.sortable)?.name\n }\n\n private getDefaultSortDirection(fields: components['schemas']['FieldDefinition'][]) {\n const field = fields.find((f) => f.defaultsort)\n if (field) {\n return field.sortDirection ? field.sortDirection === 'asc' : true\n }\n return true\n }\n\n getPageSize(queryParams: ParsedQs, template?: Template, reportType?: ReportType): number {\n let pageSize = 5000000\n if (!reportType || reportType === ReportType.REPORT) {\n if (queryParams['pageSize']) {\n pageSize = Number(queryParams['pageSize'])\n } else if (template) {\n pageSize = this.getDefaultPageSize(template)\n }\n }\n return pageSize\n }\n\n toRecordWithFilterPrefix(removeClearedFilters = false): Record<string, string | Array<string>> {\n const record: Record<string, string | Array<string>> = {\n selectedPage: this.selectedPage.toString(),\n ...(this.pageSize && { pageSize: this.pageSize.toString() }),\n ...(this.sortColumn && { sortColumn: this.sortColumn }),\n sortedAsc: this.sortedAsc.toString(),\n columns: this.columns,\n }\n\n if (this.dataProductDefinitionsPath) {\n record['dataProductDefinitionsPath'] = this.dataProductDefinitionsPath\n }\n\n Object.keys(this.filters).forEach((filterName) => {\n const value = this.filters[filterName]\n if ((value && !removeClearedFilters) || value !== clearFilterValue) {\n record[`${this.filtersPrefix}${filterName}`] = <string>value\n }\n })\n\n return record\n }\n\n private getDefaultPageSize(template: Template) {\n const maxResultsSize = 500000\n const standardPage = 20\n\n switch (template) {\n case 'list-section':\n case 'summary-section':\n case 'row-section-child':\n case 'parent-child':\n case 'parent-child-section':\n return maxResultsSize\n\n default:\n return standardPage\n }\n }\n}\n\nexport { ReportQuery }\nexport default ReportQuery\n"],
5
+ "mappings": "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",
6
+ "names": ["ReportQuery_exports", "__export", "DEFAULT_FILTERS_PREFIX", "ReportQuery", "ReportQuery_default", "__toCommonJS", "import_urlHelper", "import_utils", "import_UserReports", "fields", "template", "queryParams", "definitionsPath", "filtersPrefix", "reportType", "columns", "ColumnUtils", "f", "dateField", "min", "max", "key", "filter", "p", "value", "defaultSortColumn", "field", "pageSize", "removeClearedFilters", "record", "filterName"]
7
7
  }
@@ -43,13 +43,20 @@ class ReportQuery implements FilteredListRequest {
43
43
  }) {
44
44
  this.selectedPage = queryParams['selectedPage'] ? Number(queryParams['selectedPage']) : 1
45
45
  this.pageSize = this.getPageSize(queryParams, template, reportType)
46
+
46
47
  this.sortColumn = queryParams['sortColumn']
47
48
  ? queryParams['sortColumn'].toString()
48
49
  : this.getDefaultSortColumn(fields)
49
- this.sortedAsc = queryParams['sortedAsc'] !== 'false'
50
+
51
+ this.sortedAsc =
52
+ queryParams['sortedAsc'] !== undefined
53
+ ? queryParams['sortedAsc'] !== 'false'
54
+ : this.getDefaultSortDirection(fields)
55
+
50
56
  this.dataProductDefinitionsPath =
51
57
  definitionsPath ??
52
58
  (queryParams['dataProductDefinitionsPath'] ? queryParams['dataProductDefinitionsPath'].toString() : undefined)
59
+
53
60
  this.filtersPrefix = filtersPrefix
54
61
 
55
62
  if (queryParams['columns']) {
@@ -130,6 +137,14 @@ class ReportQuery implements FilteredListRequest {
130
137
  return defaultSortColumn ? defaultSortColumn.name : fields.find((f) => f.sortable)?.name
131
138
  }
132
139
 
140
+ private getDefaultSortDirection(fields: components['schemas']['FieldDefinition'][]) {
141
+ const field = fields.find((f) => f.defaultsort)
142
+ if (field) {
143
+ return field.sortDirection ? field.sortDirection === 'asc' : true
144
+ }
145
+ return true
146
+ }
147
+
133
148
  getPageSize(queryParams: ParsedQs, template?: Template, reportType?: ReportType): number {
134
149
  let pageSize = 5000000
135
150
  if (!reportType || reportType === ReportType.REPORT) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ministryofjustice/hmpps-digital-prison-reporting-frontend",
3
3
  "description": "The Digital Prison Reporting Frontend contains templates and code to help display data effectively in UI applications.",
4
- "version": "4.22.1",
4
+ "version": "4.22.2",
5
5
  "main": "dpr/all.mjs",
6
6
  "sass": "dpr/all.scss",
7
7
  "engines": {