@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.
Files changed (43) hide show
  1. package/_networkMocks/report/mockVariants/filter-input-examples/autocompleteMulti.d.ts +3 -0
  2. package/all.bundle.js +66 -9
  3. package/all.bundle.js.map +1 -1
  4. package/all.js +66 -9
  5. package/all.js.map +1 -1
  6. package/cjs/dpr/components/_filters/filter-input/enum.js +1 -0
  7. package/cjs/dpr/components/_filters/filter-input/enum.js.map +1 -1
  8. package/cjs/dpr/components/_filters/filters-applied/utils.js +2 -0
  9. package/cjs/dpr/components/_filters/filters-applied/utils.js.map +1 -1
  10. package/cjs/dpr/components/_filters/utils.js +7 -4
  11. package/cjs/dpr/components/_filters/utils.js.map +1 -1
  12. package/cjs/dpr/routes/journeys/request-report/filters/utils.js.map +1 -1
  13. package/cjs/dpr/utils/definitionUtils.js +1 -0
  14. package/cjs/dpr/utils/definitionUtils.js.map +1 -1
  15. package/cjs/dpr/utils/filterDisplay.js +1 -0
  16. package/cjs/dpr/utils/filterDisplay.js.map +1 -1
  17. package/cjs/dpr/validation/filterValidators.js +1 -0
  18. package/cjs/dpr/validation/filterValidators.js.map +1 -1
  19. package/cypress-tests/mockApis/reporting.d.ts +1 -0
  20. package/dpr/components/_filters/filter-input/enum.js +1 -0
  21. package/dpr/components/_filters/filter-input/enum.js.map +1 -1
  22. package/dpr/components/_filters/filter-input/view.njk +5 -1
  23. package/dpr/components/_filters/filters-applied/utils.js +2 -0
  24. package/dpr/components/_filters/filters-applied/utils.js.map +1 -1
  25. package/dpr/components/_filters/utils.js +7 -4
  26. package/dpr/components/_filters/utils.js.map +1 -1
  27. package/dpr/components/_inputs/autocomplete-multi/view.njk +58 -0
  28. package/dpr/routes/journeys/request-report/filters/utils.js.map +1 -1
  29. package/dpr/types/api.d.d.ts +10 -1
  30. package/dpr/types/api.d.ts +10 -1
  31. package/dpr/utils/definitionUtils.js +1 -0
  32. package/dpr/utils/definitionUtils.js.map +1 -1
  33. package/dpr/utils/filterDisplay.js +1 -0
  34. package/dpr/utils/filterDisplay.js.map +1 -1
  35. package/dpr/validation/filterValidators.js +1 -0
  36. package/dpr/validation/filterValidators.js.map +1 -1
  37. package/package.json +1 -1
  38. package/src/dpr/components/_filters/filter-input/enum.d.ts +2 -1
  39. package/src/dpr/components/_inputs/autocomplete-multi/clientClass.d.ts +14 -0
  40. package/test-app/mocks/mockClients/reports/mockVariants/filter-input-examples/establishmentsAutocompleteMulti.d.ts +29 -0
  41. package/test-app/routes/components/filters/autocompletemulti/controller.d.ts +4 -0
  42. package/test-app/routes/components/filters/autocompletemulti/routes.d.ts +2 -0
  43. package/test-app/routes/components/filters/autocompletemulti/tests.cy.d.ts +1 -0
@@ -0,0 +1,3 @@
1
+ import { components } from 'src/dpr/types/api';
2
+ declare const autoCompleteMultiExample: components['schemas']['VariantDefinition'];
3
+ export default autoCompleteMultiExample;
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
- 'X-Requested-With': 'XMLHttpRequest',
2178
- 'Content-Type': 'application/x-www-form-urlencoded',
2232
+ 'Content-Type': 'application/json',
2233
+ 'CSRF-Token': this.csrfToken,
2179
2234
  },
2180
- body: formData.toString(),
2181
- credentials: 'same-origin',
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,