@ministryofjustice/hmpps-digital-prison-reporting-frontend 3.3.1 → 3.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dpr/components/columns/utils.js +1 -1
- package/dpr/components/columns/utils.ts +2 -3
- package/dpr/components/data-table/types.d.ts +1 -1
- package/dpr/components/data-table/utils.js +2 -2
- package/dpr/components/data-table/utils.ts +5 -3
- package/dpr/components/filters/types.d.ts +1 -7
- package/dpr/components/filters/utils.ts +4 -1
- package/dpr/components/report-list/utils.js +7 -10
- package/dpr/components/report-list/utils.ts +5 -14
- package/dpr/types/ReportQuery.js +8 -3
- package/dpr/types/ReportQuery.ts +7 -7
- package/dpr/utils/urlHelper.js +2 -13
- package/dpr/utils/urlHelper.ts +4 -16
- package/package.json +1 -1
- package/package.zip +0 -0
|
@@ -11,6 +11,6 @@ exports.default = {
|
|
|
11
11
|
});
|
|
12
12
|
},
|
|
13
13
|
getSelectedColumns: (columns, queryCols) => {
|
|
14
|
-
return columns.filter((column) => column.
|
|
14
|
+
return columns.filter((column) => column.mandatory || queryCols.includes(column.name)).map((field) => field.name);
|
|
15
15
|
},
|
|
16
16
|
};
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { components } from '../../types/api'
|
|
2
|
-
import { Column } from './types'
|
|
3
2
|
|
|
4
3
|
export default {
|
|
5
4
|
getColumns: (fields: Array<components['schemas']['FieldDefinition']>) => {
|
|
@@ -12,7 +11,7 @@ export default {
|
|
|
12
11
|
})
|
|
13
12
|
},
|
|
14
13
|
|
|
15
|
-
getSelectedColumns: (columns:
|
|
16
|
-
return columns.filter((column) => column.
|
|
14
|
+
getSelectedColumns: (columns: Array<components['schemas']['FieldDefinition']>, queryCols: string[]) => {
|
|
15
|
+
return columns.filter((column) => column.mandatory || queryCols.includes(column.name)).map((field) => field.name)
|
|
17
16
|
},
|
|
18
17
|
}
|
|
@@ -15,11 +15,11 @@ const mapDate = (isoDate) => {
|
|
|
15
15
|
return `${day}/${month}/${year} ${hours}:${minutes}`;
|
|
16
16
|
};
|
|
17
17
|
exports.default = {
|
|
18
|
-
mapHeader: (format, reportQuery, createUrlForParameters
|
|
18
|
+
mapHeader: (format, reportQuery, createUrlForParameters) => {
|
|
19
19
|
const currentQueryParams = reportQuery.toRecordWithFilterPrefix();
|
|
20
20
|
return format
|
|
21
21
|
.filter((f) => {
|
|
22
|
-
return
|
|
22
|
+
return reportQuery.columns.includes(f.name);
|
|
23
23
|
})
|
|
24
24
|
.map((f) => {
|
|
25
25
|
let header;
|
|
@@ -22,14 +22,16 @@ export default {
|
|
|
22
22
|
mapHeader: (
|
|
23
23
|
format: Array<components['schemas']['FieldDefinition']>,
|
|
24
24
|
reportQuery: ReportQuery,
|
|
25
|
-
createUrlForParameters: (
|
|
26
|
-
|
|
25
|
+
createUrlForParameters: (
|
|
26
|
+
currentQueryParams: Dict<string | Array<string>>,
|
|
27
|
+
updateQueryParams: Dict<string>,
|
|
28
|
+
) => string,
|
|
27
29
|
) => {
|
|
28
30
|
const currentQueryParams = reportQuery.toRecordWithFilterPrefix()
|
|
29
31
|
|
|
30
32
|
return format
|
|
31
33
|
.filter((f) => {
|
|
32
|
-
return
|
|
34
|
+
return reportQuery.columns.includes(f.name)
|
|
33
35
|
})
|
|
34
36
|
.map((f) => {
|
|
35
37
|
let header: Header
|
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
import { FilterType } from './enum'
|
|
2
2
|
|
|
3
|
-
export interface FilterDefinition {
|
|
4
|
-
type: FilterType
|
|
5
|
-
options?: Array<FilterOption>
|
|
6
|
-
value?: string
|
|
7
|
-
}
|
|
8
|
-
|
|
9
3
|
export interface FilterOption {
|
|
10
4
|
value: string
|
|
11
5
|
text: string
|
|
@@ -23,7 +17,7 @@ export interface GenericFilterValue {
|
|
|
23
17
|
dynamicResourceEndpoint?: string
|
|
24
18
|
}
|
|
25
19
|
|
|
26
|
-
export interface DateFilterValue extends
|
|
20
|
+
export interface DateFilterValue extends GenericFilterValue {
|
|
27
21
|
type: FilterType.dateRange
|
|
28
22
|
value?: DateRange
|
|
29
23
|
min?: string
|
|
@@ -60,7 +60,10 @@ export default {
|
|
|
60
60
|
getSelectedFilters: (
|
|
61
61
|
format: Array<components['schemas']['FieldDefinition']>,
|
|
62
62
|
reportQuery: ReportQuery,
|
|
63
|
-
createUrlForParameters: (
|
|
63
|
+
createUrlForParameters: (
|
|
64
|
+
currentQueryParams: Dict<string | Array<string>>,
|
|
65
|
+
updateQueryParams: Dict<string>,
|
|
66
|
+
) => string,
|
|
64
67
|
) =>
|
|
65
68
|
format
|
|
66
69
|
.filter((f) => f.filter)
|
|
@@ -10,7 +10,6 @@ const utils_2 = __importDefault(require("../filters/utils"));
|
|
|
10
10
|
const utils_3 = __importDefault(require("../columns/utils"));
|
|
11
11
|
const reportingClient_1 = __importDefault(require("../../data/reportingClient"));
|
|
12
12
|
const filtersQueryParameterPrefix = 'filters.';
|
|
13
|
-
const columnsQueryParameterPrefix = 'columns';
|
|
14
13
|
function getDefaultSortColumn(fields) {
|
|
15
14
|
var _a;
|
|
16
15
|
const defaultSortColumn = fields.find((f) => f.defaultsort);
|
|
@@ -42,7 +41,7 @@ function redirectWithDefaultFilters(reportQuery, variantDefinition, response, re
|
|
|
42
41
|
});
|
|
43
42
|
}
|
|
44
43
|
if (Object.keys(defaultFilters).length > 0) {
|
|
45
|
-
const querystring = (0, urlHelper_1.default)(reportQuery.toRecordWithFilterPrefix(), defaultFilters
|
|
44
|
+
const querystring = (0, urlHelper_1.default)(reportQuery.toRecordWithFilterPrefix(), defaultFilters);
|
|
46
45
|
response.redirect(`${request.baseUrl}${request.path}${querystring}`);
|
|
47
46
|
return true;
|
|
48
47
|
}
|
|
@@ -65,15 +64,13 @@ function renderList(listData, variantDefinition, reportQuery, request, response,
|
|
|
65
64
|
// eslint-disable-next-line prefer-destructuring
|
|
66
65
|
data = resolvedData[0];
|
|
67
66
|
}
|
|
68
|
-
const columns = utils_3.default.getColumns(fields);
|
|
69
|
-
const selectedColumns = utils_3.default.getSelectedColumns(columns, reportQuery.columns);
|
|
70
67
|
const columnOptions = {
|
|
71
|
-
columns,
|
|
72
|
-
selectedColumns,
|
|
68
|
+
columns: utils_3.default.getColumns(fields),
|
|
69
|
+
selectedColumns: reportQuery.columns,
|
|
73
70
|
};
|
|
74
71
|
const dataTableOptions = {
|
|
75
|
-
head: utils_1.default.mapHeader(fields, reportQuery, urlHelper_1.default
|
|
76
|
-
rows: utils_1.default.mapData(data, fields,
|
|
72
|
+
head: utils_1.default.mapHeader(fields, reportQuery, urlHelper_1.default),
|
|
73
|
+
rows: utils_1.default.mapData(data, fields, reportQuery.columns),
|
|
77
74
|
count: resolvedData[1],
|
|
78
75
|
currentQueryParams: reportQuery.toRecordWithFilterPrefix(),
|
|
79
76
|
classification,
|
|
@@ -109,7 +106,7 @@ const renderListWithDefinition = ({ title, definitionName, variantName, request,
|
|
|
109
106
|
.then((reportDefinition) => {
|
|
110
107
|
const reportName = reportDefinition.name;
|
|
111
108
|
const variantDefinition = reportDefinition.variant;
|
|
112
|
-
const reportQuery = new ReportQuery_1.default(variantDefinition.specification.fields, request.query, getDefaultSortColumn(variantDefinition.specification.fields), filtersQueryParameterPrefix
|
|
109
|
+
const reportQuery = new ReportQuery_1.default(variantDefinition.specification.fields, request.query, getDefaultSortColumn(variantDefinition.specification.fields), filtersQueryParameterPrefix);
|
|
113
110
|
const getListData = {
|
|
114
111
|
data: reportingClient.getListWithWarnings(variantDefinition.resourceName, token, reportQuery),
|
|
115
112
|
count: reportingClient.getCount(variantDefinition.resourceName, token, reportQuery),
|
|
@@ -124,7 +121,7 @@ exports.default = {
|
|
|
124
121
|
filtersQueryParameterPrefix,
|
|
125
122
|
renderListWithData: ({ title, variantDefinition, request, response, next, getListDataSources, otherOptions, layoutTemplate, dynamicAutocompleteEndpoint, }) => {
|
|
126
123
|
const { fields } = variantDefinition.specification;
|
|
127
|
-
const reportQuery = new ReportQuery_1.default(fields, request.query, getDefaultSortColumn(fields), filtersQueryParameterPrefix
|
|
124
|
+
const reportQuery = new ReportQuery_1.default(fields, request.query, getDefaultSortColumn(fields), filtersQueryParameterPrefix);
|
|
128
125
|
const listData = getListDataSources(reportQuery);
|
|
129
126
|
renderList(listData, variantDefinition, reportQuery, request, response, next, title, layoutTemplate, dynamicAutocompleteEndpoint, otherOptions);
|
|
130
127
|
},
|
|
@@ -14,7 +14,6 @@ import RenderListWithDefinitionInput from './RenderListWithDefinitionInput'
|
|
|
14
14
|
import CreateRequestHandlerInput from './CreateRequestHandlerInput'
|
|
15
15
|
|
|
16
16
|
const filtersQueryParameterPrefix = 'filters.'
|
|
17
|
-
const columnsQueryParameterPrefix = 'columns'
|
|
18
17
|
|
|
19
18
|
function getDefaultSortColumn(fields: components['schemas']['FieldDefinition'][]) {
|
|
20
19
|
const defaultSortColumn = fields.find((f) => f.defaultsort)
|
|
@@ -62,11 +61,7 @@ function redirectWithDefaultFilters(
|
|
|
62
61
|
}
|
|
63
62
|
|
|
64
63
|
if (Object.keys(defaultFilters).length > 0) {
|
|
65
|
-
const querystring = createUrlForParameters(
|
|
66
|
-
reportQuery.toRecordWithFilterPrefix(),
|
|
67
|
-
defaultFilters,
|
|
68
|
-
reportQuery.columns,
|
|
69
|
-
)
|
|
64
|
+
const querystring = createUrlForParameters(reportQuery.toRecordWithFilterPrefix(), defaultFilters)
|
|
70
65
|
response.redirect(`${request.baseUrl}${request.path}${querystring}`)
|
|
71
66
|
return true
|
|
72
67
|
}
|
|
@@ -103,16 +98,14 @@ function renderList(
|
|
|
103
98
|
data = resolvedData[0]
|
|
104
99
|
}
|
|
105
100
|
|
|
106
|
-
const columns = ColumnUtils.getColumns(fields)
|
|
107
|
-
const selectedColumns = ColumnUtils.getSelectedColumns(columns, reportQuery.columns)
|
|
108
101
|
const columnOptions = {
|
|
109
|
-
columns,
|
|
110
|
-
selectedColumns,
|
|
102
|
+
columns: ColumnUtils.getColumns(fields),
|
|
103
|
+
selectedColumns: reportQuery.columns,
|
|
111
104
|
}
|
|
112
105
|
|
|
113
106
|
const dataTableOptions: DataTableOptions = {
|
|
114
|
-
head: DataTableUtils.mapHeader(fields, reportQuery, createUrlForParameters
|
|
115
|
-
rows: DataTableUtils.mapData(data, fields,
|
|
107
|
+
head: DataTableUtils.mapHeader(fields, reportQuery, createUrlForParameters),
|
|
108
|
+
rows: DataTableUtils.mapData(data, fields, reportQuery.columns),
|
|
116
109
|
count: resolvedData[1],
|
|
117
110
|
currentQueryParams: reportQuery.toRecordWithFilterPrefix(),
|
|
118
111
|
classification,
|
|
@@ -171,7 +164,6 @@ const renderListWithDefinition = ({
|
|
|
171
164
|
request.query,
|
|
172
165
|
getDefaultSortColumn(variantDefinition.specification.fields),
|
|
173
166
|
filtersQueryParameterPrefix,
|
|
174
|
-
columnsQueryParameterPrefix,
|
|
175
167
|
)
|
|
176
168
|
|
|
177
169
|
const getListData: ListDataSources = {
|
|
@@ -216,7 +208,6 @@ export default {
|
|
|
216
208
|
request.query,
|
|
217
209
|
getDefaultSortColumn(fields),
|
|
218
210
|
filtersQueryParameterPrefix,
|
|
219
|
-
columnsQueryParameterPrefix,
|
|
220
211
|
)
|
|
221
212
|
const listData = getListDataSources(reportQuery)
|
|
222
213
|
|
package/dpr/types/ReportQuery.js
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
const urlHelper_1 = require("../utils/urlHelper");
|
|
7
|
+
const utils_1 = __importDefault(require("../components/columns/utils"));
|
|
4
8
|
class ReportQuery {
|
|
5
|
-
constructor(fields, queryParams, defaultSortColumn, filtersPrefix
|
|
9
|
+
constructor(fields, queryParams, defaultSortColumn, filtersPrefix) {
|
|
6
10
|
this.selectedPage = queryParams.selectedPage ? Number(queryParams.selectedPage) : 1;
|
|
7
11
|
this.pageSize = queryParams.pageSize ? Number(queryParams.pageSize) : 20;
|
|
8
12
|
this.sortColumn = queryParams.sortColumn ? queryParams.sortColumn.toString() : defaultSortColumn;
|
|
@@ -11,9 +15,9 @@ class ReportQuery {
|
|
|
11
15
|
? queryParams.dataProductDefinitionsPath.toString()
|
|
12
16
|
: null;
|
|
13
17
|
this.filtersPrefix = filtersPrefix;
|
|
14
|
-
this.columnsPrefix = columnsPrefix;
|
|
15
18
|
if (queryParams.columns) {
|
|
16
|
-
|
|
19
|
+
const columns = typeof queryParams.columns === 'string' ? queryParams.columns.split(',') : queryParams.columns;
|
|
20
|
+
this.columns = utils_1.default.getSelectedColumns(fields, columns);
|
|
17
21
|
}
|
|
18
22
|
else {
|
|
19
23
|
this.columns = fields.map((f) => f.name);
|
|
@@ -32,6 +36,7 @@ class ReportQuery {
|
|
|
32
36
|
pageSize: this.pageSize.toString(),
|
|
33
37
|
sortColumn: this.sortColumn,
|
|
34
38
|
sortedAsc: this.sortedAsc.toString(),
|
|
39
|
+
columns: this.columns,
|
|
35
40
|
};
|
|
36
41
|
if (this.dataProductDefinitionsPath) {
|
|
37
42
|
record.dataProductDefinitionsPath = this.dataProductDefinitionsPath;
|
package/dpr/types/ReportQuery.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { FilteredListRequest } from './index'
|
|
|
3
3
|
import Dict = NodeJS.Dict
|
|
4
4
|
import { components } from './api'
|
|
5
5
|
import { clearFilterValue } from '../utils/urlHelper'
|
|
6
|
+
import ColumnUtils from '../components/columns/utils'
|
|
6
7
|
|
|
7
8
|
export default class ReportQuery implements FilteredListRequest {
|
|
8
9
|
selectedPage: number
|
|
@@ -19,8 +20,6 @@ export default class ReportQuery implements FilteredListRequest {
|
|
|
19
20
|
|
|
20
21
|
filtersPrefix: string
|
|
21
22
|
|
|
22
|
-
columnsPrefix: string
|
|
23
|
-
|
|
24
23
|
dataProductDefinitionsPath?: string
|
|
25
24
|
|
|
26
25
|
constructor(
|
|
@@ -28,7 +27,6 @@ export default class ReportQuery implements FilteredListRequest {
|
|
|
28
27
|
queryParams: ParsedQs,
|
|
29
28
|
defaultSortColumn: string,
|
|
30
29
|
filtersPrefix: string,
|
|
31
|
-
columnsPrefix: string,
|
|
32
30
|
) {
|
|
33
31
|
this.selectedPage = queryParams.selectedPage ? Number(queryParams.selectedPage) : 1
|
|
34
32
|
this.pageSize = queryParams.pageSize ? Number(queryParams.pageSize) : 20
|
|
@@ -38,10 +36,11 @@ export default class ReportQuery implements FilteredListRequest {
|
|
|
38
36
|
? queryParams.dataProductDefinitionsPath.toString()
|
|
39
37
|
: null
|
|
40
38
|
this.filtersPrefix = filtersPrefix
|
|
41
|
-
this.columnsPrefix = columnsPrefix
|
|
42
39
|
|
|
43
40
|
if (queryParams.columns) {
|
|
44
|
-
|
|
41
|
+
const columns =
|
|
42
|
+
typeof queryParams.columns === 'string' ? queryParams.columns.split(',') : (queryParams.columns as string[])
|
|
43
|
+
this.columns = ColumnUtils.getSelectedColumns(fields, columns)
|
|
45
44
|
} else {
|
|
46
45
|
this.columns = fields.map((f) => f.name)
|
|
47
46
|
}
|
|
@@ -56,12 +55,13 @@ export default class ReportQuery implements FilteredListRequest {
|
|
|
56
55
|
})
|
|
57
56
|
}
|
|
58
57
|
|
|
59
|
-
toRecordWithFilterPrefix(removeClearedFilters = false): Record<string, string
|
|
60
|
-
const record: Record<string, string
|
|
58
|
+
toRecordWithFilterPrefix(removeClearedFilters = false): Record<string, string | Array<string>> {
|
|
59
|
+
const record: Record<string, string | Array<string>> = {
|
|
61
60
|
selectedPage: this.selectedPage.toString(),
|
|
62
61
|
pageSize: this.pageSize.toString(),
|
|
63
62
|
sortColumn: this.sortColumn,
|
|
64
63
|
sortedAsc: this.sortedAsc.toString(),
|
|
64
|
+
columns: this.columns,
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
if (this.dataProductDefinitionsPath) {
|
package/dpr/utils/urlHelper.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createQuerystringFromObject = exports.clearFilterValue = void 0;
|
|
4
4
|
exports.clearFilterValue = '~clear~';
|
|
5
|
-
const createUrlForParameters = (currentQueryParams, updateQueryParams
|
|
5
|
+
const createUrlForParameters = (currentQueryParams, updateQueryParams) => {
|
|
6
6
|
let queryParams;
|
|
7
7
|
if (updateQueryParams) {
|
|
8
8
|
queryParams = {
|
|
@@ -20,11 +20,6 @@ const createUrlForParameters = (currentQueryParams, updateQueryParams, columns =
|
|
|
20
20
|
});
|
|
21
21
|
}
|
|
22
22
|
});
|
|
23
|
-
if (columns.length) {
|
|
24
|
-
columns.forEach((col) => {
|
|
25
|
-
queryParams[`columns.${col}`] = col;
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
23
|
}
|
|
29
24
|
else {
|
|
30
25
|
queryParams = {
|
|
@@ -45,13 +40,7 @@ const createUrlForParameters = (currentQueryParams, updateQueryParams, columns =
|
|
|
45
40
|
};
|
|
46
41
|
const createQuerystringFromObject = (source) => {
|
|
47
42
|
const querystring = Object.keys(source)
|
|
48
|
-
.map((key) => {
|
|
49
|
-
let k = key;
|
|
50
|
-
// eslint-disable-next-line prefer-destructuring
|
|
51
|
-
if (key.includes('columns.'))
|
|
52
|
-
k = key.split('.')[0];
|
|
53
|
-
return `${encodeURI(k)}=${encodeURI(source[key])}`;
|
|
54
|
-
})
|
|
43
|
+
.map((key) => `${encodeURI(key)}=${encodeURI(source[key])}`)
|
|
55
44
|
.join('&');
|
|
56
45
|
return `?${querystring}`;
|
|
57
46
|
};
|
package/dpr/utils/urlHelper.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
export const clearFilterValue = '~clear~'
|
|
2
2
|
|
|
3
3
|
const createUrlForParameters = (
|
|
4
|
-
currentQueryParams: NodeJS.Dict<string
|
|
4
|
+
currentQueryParams: NodeJS.Dict<string | Array<string>>,
|
|
5
5
|
updateQueryParams: NodeJS.Dict<string>,
|
|
6
|
-
columns: Array<string> = [],
|
|
7
6
|
) => {
|
|
8
|
-
let queryParams: NodeJS.Dict<string
|
|
7
|
+
let queryParams: NodeJS.Dict<string | Array<string>>
|
|
9
8
|
|
|
10
9
|
if (updateQueryParams) {
|
|
11
10
|
queryParams = {
|
|
@@ -23,12 +22,6 @@ const createUrlForParameters = (
|
|
|
23
22
|
})
|
|
24
23
|
}
|
|
25
24
|
})
|
|
26
|
-
|
|
27
|
-
if (columns.length) {
|
|
28
|
-
columns.forEach((col) => {
|
|
29
|
-
queryParams[`columns.${col}`] = col
|
|
30
|
-
})
|
|
31
|
-
}
|
|
32
25
|
} else {
|
|
33
26
|
queryParams = {
|
|
34
27
|
selectedPage: '1',
|
|
@@ -39,7 +32,7 @@ const createUrlForParameters = (
|
|
|
39
32
|
}
|
|
40
33
|
}
|
|
41
34
|
|
|
42
|
-
const nonEmptyQueryParams: NodeJS.Dict<string
|
|
35
|
+
const nonEmptyQueryParams: NodeJS.Dict<string | Array<string>> = {}
|
|
43
36
|
|
|
44
37
|
Object.keys(queryParams)
|
|
45
38
|
.filter((key) => queryParams[key])
|
|
@@ -52,12 +45,7 @@ const createUrlForParameters = (
|
|
|
52
45
|
|
|
53
46
|
export const createQuerystringFromObject = (source: object) => {
|
|
54
47
|
const querystring = Object.keys(source)
|
|
55
|
-
.map((key) => {
|
|
56
|
-
let k = key
|
|
57
|
-
// eslint-disable-next-line prefer-destructuring
|
|
58
|
-
if (key.includes('columns.')) k = key.split('.')[0]
|
|
59
|
-
return `${encodeURI(k)}=${encodeURI(source[key as keyof typeof source])}`
|
|
60
|
-
})
|
|
48
|
+
.map((key) => `${encodeURI(key)}=${encodeURI(source[key])}`)
|
|
61
49
|
.join('&')
|
|
62
50
|
|
|
63
51
|
return `?${querystring}`
|
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": "3.3.
|
|
4
|
+
"version": "3.3.3",
|
|
5
5
|
"main": "dpr/assets/js/all.mjs",
|
|
6
6
|
"sass": "dpr/all.scss",
|
|
7
7
|
"engines": {
|
package/package.zip
CHANGED
|
Binary file
|