UNPKG

@ministryofjustice/hmpps-digital-prison-reporting-frontend

Version:

The Digital Prison Reporting Frontend contains templates and code to help display data effectively in UI applications.

113 lines (112 loc) 5.15 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.DEFAULT_FILTERS_PREFIX = void 0; const urlHelper_1 = require("../utils/urlHelper"); const utils_1 = __importDefault(require("../components/_reports/report-columns-form/utils")); exports.DEFAULT_FILTERS_PREFIX = 'filters.'; class ReportQuery { constructor({ fields, template, queryParams, definitionsPath, filtersPrefix = exports.DEFAULT_FILTERS_PREFIX, }) { this.selectedPage = queryParams.selectedPage ? Number(queryParams.selectedPage) : 1; this.pageSize = queryParams.pageSize && template ? Number(queryParams.pageSize) : this.getDefaultPageSize(template); this.sortColumn = queryParams.sortColumn ? queryParams.sortColumn.toString() : this.getDefaultSortColumn(fields); this.sortedAsc = queryParams.sortedAsc !== 'false'; this.dataProductDefinitionsPath = definitionsPath !== null && definitionsPath !== void 0 ? definitionsPath : (queryParams.dataProductDefinitionsPath ? queryParams.dataProductDefinitionsPath.toString() : null); this.filtersPrefix = filtersPrefix; if (queryParams.columns) { const columns = typeof queryParams.columns === 'string' ? queryParams.columns.split(',') : queryParams.columns; this.columns = utils_1.default.ensureMandatoryColumns(fields, columns); } else { this.columns = fields.filter((f) => f.visible).map((f) => f.name); } let min; let max; const dateField = fields.find((f) => { return ((f.type === 'date' && f.filter && f.filter.type === 'daterange') || (f.type === 'date' && f.filter && f.filter.type === 'date')); }); if (dateField) ({ min, max } = dateField.filter); this.filters = {}; Object.keys(queryParams) .filter((key) => key.startsWith(this.filtersPrefix)) .filter((key) => queryParams[key]) .forEach((key) => { const filter = key.replace(this.filtersPrefix, ''); let value = queryParams[key].toString(); if (filter.includes('.start') && min) { if (new Date(value) < new Date(min)) value = min; } if (filter.includes('.end') && max) { if (new Date(value) > new Date(max)) value = max; } if (value !== 'no-filter') { this.filters[filter] = value; } }); if (dateField && dateField.filter.type === 'daterange') { if (min && Object.keys(queryParams).some((key) => key.includes(this.filtersPrefix)) && Object.keys(queryParams).every((key) => !key.includes('.start'))) { this.filters[`${dateField.name}.start`] = min; } if (max && Object.keys(queryParams).some((key) => key.includes(this.filtersPrefix)) && Object.keys(queryParams).every((key) => !key.includes('.end'))) { this.filters[`${dateField.name}.end`] = max; } } if (dateField && dateField.filter.type === 'date') { if (min && Object.keys(queryParams).some((key) => key.includes(this.filtersPrefix)) && Object.keys(queryParams).every((key) => !key.includes(dateField.name))) { this.filters[`${dateField.name}.start`] = min; } } } getDefaultSortColumn(fields) { var _a; const defaultSortColumn = fields.find((f) => f.defaultsort); return defaultSortColumn ? defaultSortColumn.name : (_a = fields.find((f) => f.sortable)) === null || _a === void 0 ? void 0 : _a.name; } toRecordWithFilterPrefix(removeClearedFilters = false) { const record = { selectedPage: this.selectedPage.toString(), pageSize: this.pageSize.toString(), sortColumn: this.sortColumn, sortedAsc: this.sortedAsc.toString(), columns: this.columns, }; if (this.dataProductDefinitionsPath) { record.dataProductDefinitionsPath = this.dataProductDefinitionsPath; } Object.keys(this.filters).forEach((filterName) => { const value = this.filters[filterName]; if (!removeClearedFilters || value !== urlHelper_1.clearFilterValue) { record[`${this.filtersPrefix}${filterName}`] = value; } }); return record; } getDefaultPageSize(template) { const maxResultsSize = 50000; const standardPage = 20; switch (template) { case 'list-section': case 'summary-section': case 'row-section-child': case 'parent-child': return maxResultsSize; default: return standardPage; } } } exports.default = ReportQuery;