@ministryofjustice/hmpps-digital-prison-reporting-frontend 6.2.4 → 6.3.1
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/_networkMocks/report/mockVariants/filter-input-examples/autocompleteMulti.d.ts +3 -0
- package/all.bundle.js +66 -9
- package/all.bundle.js.map +1 -1
- package/all.js +66 -9
- package/all.js.map +1 -1
- package/cjs/dpr/components/_filters/filter-input/enum.js +1 -0
- package/cjs/dpr/components/_filters/filter-input/enum.js.map +1 -1
- package/cjs/dpr/components/_filters/filters-applied/utils.js +2 -0
- package/cjs/dpr/components/_filters/filters-applied/utils.js.map +1 -1
- package/cjs/dpr/components/_filters/utils.js +7 -4
- package/cjs/dpr/components/_filters/utils.js.map +1 -1
- package/cjs/dpr/routes/journeys/request-report/filters/utils.js.map +1 -1
- package/cjs/dpr/utils/definitionUtils.js +1 -0
- package/cjs/dpr/utils/definitionUtils.js.map +1 -1
- package/cjs/dpr/utils/filterDisplay.js +1 -0
- package/cjs/dpr/utils/filterDisplay.js.map +1 -1
- package/cjs/dpr/validation/filterValidators.js +1 -0
- package/cjs/dpr/validation/filterValidators.js.map +1 -1
- package/cypress-tests/mockApis/reporting.d.ts +1 -0
- package/dpr/components/_filters/filter-input/enum.js +1 -0
- package/dpr/components/_filters/filter-input/enum.js.map +1 -1
- package/dpr/components/_filters/filter-input/view.njk +5 -1
- package/dpr/components/_filters/filters-applied/utils.js +2 -0
- package/dpr/components/_filters/filters-applied/utils.js.map +1 -1
- package/dpr/components/_filters/utils.js +7 -4
- package/dpr/components/_filters/utils.js.map +1 -1
- package/dpr/components/_inputs/autocomplete-multi/view.njk +58 -0
- package/dpr/routes/journeys/request-report/filters/utils.js.map +1 -1
- package/dpr/types/api.d.d.ts +10 -1
- package/dpr/types/api.d.ts +10 -1
- package/dpr/utils/definitionUtils.js +1 -0
- package/dpr/utils/definitionUtils.js.map +1 -1
- package/dpr/utils/filterDisplay.js +1 -0
- package/dpr/utils/filterDisplay.js.map +1 -1
- package/dpr/validation/filterValidators.js +1 -0
- package/dpr/validation/filterValidators.js.map +1 -1
- package/package.json +1 -1
- package/src/dpr/components/_filters/filter-input/enum.d.ts +2 -1
- package/src/dpr/components/_inputs/autocomplete-multi/clientClass.d.ts +14 -0
- package/test-app/mocks/mockClients/reports/mockVariants/filter-input-examples/establishmentsAutocompleteMulti.d.ts +29 -0
- package/test-app/routes/components/filters/autocompletemulti/controller.d.ts +4 -0
- package/test-app/routes/components/filters/autocompletemulti/routes.d.ts +2 -0
- package/test-app/routes/components/filters/autocompletemulti/tests.cy.d.ts +1 -0
package/all.bundle.js
CHANGED
|
@@ -2053,6 +2053,66 @@ class MultiselectInput extends DprClientClass {
|
|
|
2053
2053
|
}
|
|
2054
2054
|
}
|
|
2055
2055
|
|
|
2056
|
+
class AutoCompleteMulti extends DprClientClass {
|
|
2057
|
+
filterId;
|
|
2058
|
+
searchInput;
|
|
2059
|
+
searchInputValue;
|
|
2060
|
+
multiselectOptions;
|
|
2061
|
+
static getModuleName() {
|
|
2062
|
+
return 'autocomplete-multiselect-input';
|
|
2063
|
+
}
|
|
2064
|
+
initialise() {
|
|
2065
|
+
this.element = this.getElement();
|
|
2066
|
+
this.filterId = this.element.getAttribute('data-filter-id');
|
|
2067
|
+
// Search input
|
|
2068
|
+
this.searchInput = document.getElementById(`search.${this.filterId}`);
|
|
2069
|
+
this.multiselectOptions = Array.from(this.element.querySelectorAll('.govuk-checkboxes__input'));
|
|
2070
|
+
if (!this.searchInput || !this.multiselectOptions)
|
|
2071
|
+
return;
|
|
2072
|
+
this.initialiseCheckboxes();
|
|
2073
|
+
this.initSearchInputAction();
|
|
2074
|
+
}
|
|
2075
|
+
initialiseCheckboxes() {
|
|
2076
|
+
this.multiselectOptions.forEach((input) => {
|
|
2077
|
+
const wrapper = input.closest('.govuk-checkboxes__item');
|
|
2078
|
+
if (!wrapper)
|
|
2079
|
+
return;
|
|
2080
|
+
wrapper.classList.toggle('dpr-form--hidden', !input.checked);
|
|
2081
|
+
});
|
|
2082
|
+
}
|
|
2083
|
+
initSearchInputAction() {
|
|
2084
|
+
if (!this.searchInput)
|
|
2085
|
+
return;
|
|
2086
|
+
const input = this.searchInput;
|
|
2087
|
+
this.searchInput.addEventListener('keyup', (_event) => {
|
|
2088
|
+
this.searchInputValue = input.value;
|
|
2089
|
+
this.updateCheckboxes();
|
|
2090
|
+
});
|
|
2091
|
+
}
|
|
2092
|
+
updateCheckboxes() {
|
|
2093
|
+
const query = this.searchInputValue.toLowerCase().trim();
|
|
2094
|
+
const minLength = 3;
|
|
2095
|
+
this.multiselectOptions.forEach((input) => {
|
|
2096
|
+
const wrapper = input.closest('.govuk-checkboxes__item');
|
|
2097
|
+
if (!wrapper)
|
|
2098
|
+
return;
|
|
2099
|
+
// Always show selected items
|
|
2100
|
+
if (input.checked) {
|
|
2101
|
+
wrapper.classList.remove('dpr-form--hidden');
|
|
2102
|
+
return;
|
|
2103
|
+
}
|
|
2104
|
+
// Below threshold - hide unselected
|
|
2105
|
+
if (query.length < minLength) {
|
|
2106
|
+
wrapper.classList.add('dpr-form--hidden');
|
|
2107
|
+
return;
|
|
2108
|
+
}
|
|
2109
|
+
const labelText = input.labels?.[0]?.innerText.toLowerCase() ?? '';
|
|
2110
|
+
const matches = labelText.includes(query);
|
|
2111
|
+
wrapper.classList.toggle('dpr-form--hidden', !matches);
|
|
2112
|
+
});
|
|
2113
|
+
}
|
|
2114
|
+
}
|
|
2115
|
+
|
|
2056
2116
|
/* ==========================================================================
|
|
2057
2117
|
Shared value types
|
|
2058
2118
|
========================================================================== */
|
|
@@ -2166,19 +2226,15 @@ class DprMyReports extends PollingClientClass {
|
|
|
2166
2226
|
return;
|
|
2167
2227
|
this.removing = true;
|
|
2168
2228
|
try {
|
|
2169
|
-
const formData = new URLSearchParams();
|
|
2170
|
-
if (this.maxRows !== undefined) {
|
|
2171
|
-
formData.append('maxRows', this.maxRows);
|
|
2172
|
-
}
|
|
2173
|
-
formData.append('_csrf', this.csrfToken);
|
|
2174
2229
|
const res = await fetch(form.action, {
|
|
2175
2230
|
method: 'POST',
|
|
2176
2231
|
headers: {
|
|
2177
|
-
'
|
|
2178
|
-
'
|
|
2232
|
+
'Content-Type': 'application/json',
|
|
2233
|
+
'CSRF-Token': this.csrfToken,
|
|
2179
2234
|
},
|
|
2180
|
-
body:
|
|
2181
|
-
|
|
2235
|
+
body: JSON.stringify({
|
|
2236
|
+
...(this.maxRows && { maxRows: this.maxRows }),
|
|
2237
|
+
}),
|
|
2182
2238
|
});
|
|
2183
2239
|
if (!res.ok) {
|
|
2184
2240
|
console.error('Remove failed');
|
|
@@ -17693,6 +17749,7 @@ function initAll() {
|
|
|
17693
17749
|
DprSyncLoading,
|
|
17694
17750
|
GranularDateRange,
|
|
17695
17751
|
MultiselectInput,
|
|
17752
|
+
AutoCompleteMulti,
|
|
17696
17753
|
DprFiltersFormClass,
|
|
17697
17754
|
DprSelectedAsyncFilters,
|
|
17698
17755
|
DprAppliedFilters,
|