@nnc-digital/nnc-design-system 0.4.6 → 0.4.14

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/build/index.js CHANGED
@@ -4048,15 +4048,13 @@ var BinCollectionButtonStyles = styled__default["default"].div(templateObject_3
4048
4048
  var FormContainer$1 = styled__default["default"].div(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n ", "\n"], ["\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n ", "\n"])), function (props) {
4049
4049
  return props.isLoading && "\n opacity: 0.5; \n pointer-events: none;\n ";
4050
4050
  });
4051
- var DropDownSelectContainer = styled__default["default"].div(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n padding-bottom: 20px;\n"], ["\n padding-bottom: 20px;\n"])));
4052
- var FormInnerContainer = styled__default["default"].div(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: flex-start;\n"], ["\n display: flex;\n align-items: center;\n justify-content: flex-start;\n"])));
4053
- styled__default["default"].label(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n margin-right: ", ";\n"], ["\n display: flex;\n align-items: center;\n margin-right: ", ";\n"])), function (props) { return props.theme.theme_vars.spacingSizes.small; });
4054
- var UPRNPageTitleRow = styled__default["default"].div(templateObject_8 || (templateObject_8 = __makeTemplateObject(["\n justify-content: center;\n margin-bottom: 1em;\n margin-top: 2em;\n width: 100%;\n"], ["\n justify-content: center;\n margin-bottom: 1em;\n margin-top: 2em;\n width: 100%;\n"])));
4055
- var UPRNPageUPRNRow = styled__default["default"].div(templateObject_9 || (templateObject_9 = __makeTemplateObject(["\n display: flex;\n justify-content: left;\n margin-bottom: .5em;\n width: 100%;\n"], ["\n display: flex;\n justify-content: left;\n margin-bottom: .5em;\n width: 100%;\n"])));
4056
- var UPRNPageSectionTitle = styled__default["default"].div(templateObject_10 || (templateObject_10 = __makeTemplateObject(["\n font-size: 2em;\n font-weight: 700;\n"], ["\n font-size: 2em;\n font-weight: 700;\n"])));
4057
- var UPRNPageUPRNTitle = styled__default["default"].div(templateObject_11 || (templateObject_11 = __makeTemplateObject(["\n font-size: 1.5em;\n"], ["\n font-size: 1.5em;\n"])));
4058
- styled__default["default"].input(templateObject_12 || (templateObject_12 = __makeTemplateObject([""], [""])));
4059
- var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10, templateObject_11, templateObject_12;
4051
+ var ErrorTextWrapper = styled__default["default"].div(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n display: block;\n width: 100%;\n"], ["\n display: block;\n width: 100%;\n"])));
4052
+ var DropDownSelectContainer = styled__default["default"].div(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n padding-bottom: 20px;\n"], ["\n padding-bottom: 20px;\n"])));
4053
+ var FormInnerContainer = styled__default["default"].div(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: flex-start;\n"], ["\n display: flex;\n align-items: center;\n justify-content: flex-start;\n"])));
4054
+ styled__default["default"].label(templateObject_8 || (templateObject_8 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n margin-right: ", ";\n"], ["\n display: flex;\n align-items: center;\n margin-right: ", ";\n"])), function (props) { return props.theme.theme_vars.spacingSizes.small; });
4055
+ styled__default["default"].div(templateObject_9 || (templateObject_9 = __makeTemplateObject(["\n display: flex;\n justify-content: left;\n margin-bottom: .5em;\n width: 100%;\n"], ["\n display: flex;\n justify-content: left;\n margin-bottom: .5em;\n width: 100%;\n"])));
4056
+ styled__default["default"].input(templateObject_10 || (templateObject_10 = __makeTemplateObject([""], [""])));
4057
+ var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10;
4060
4058
 
4061
4059
  const Container$16 = styled__default["default"].div`
4062
4060
  display: flex;
@@ -4322,14 +4320,15 @@ var Heading = function (_a) {
4322
4320
  * Returns the Bin Collection Checker form component to conduct search by postcode.
4323
4321
  */
4324
4322
  var BinCollection = function (_a) {
4325
- var _b = _a.formError, formError = _b === void 0 ? false : _b, _c = _a.baseUrl, baseUrl = _c === void 0 ? process.env.NEXT_PUBLIC_DRUPAL_APP_API_BASE_URL : _c;
4326
- var BinCollectionApiUrl = "".concat(baseUrl, "bin-collection-search/premiselist/");
4327
- var CalendarEventsApiUrl = "".concat(baseUrl, "bin-collection-search/calendarevents/");
4323
+ var _b = _a.formError, formError = _b === void 0 ? false : _b, _c = _a.graphqlApiEndpoint, graphqlApiEndpoint = _c === void 0 ? process.env.NEXT_PUBLIC_DRUPAL_APP_API_BASE_URL : _c;
4324
+ var BinCollectionApiUrl = "".concat(graphqlApiEndpoint, "bin-collection-search/premiselist/");
4325
+ var CalendarEventsApiUrl = "".concat(graphqlApiEndpoint, "bin-collection-search/calendarevents/");
4328
4326
  var themeContext = React.useContext(styled.ThemeContext);
4329
4327
  var _d = React.useState(false), isLoading = _d[0], setIsLoading = _d[1];
4330
4328
  var _e = React.useState(formError), isError = _e[0], setError = _e[1];
4331
4329
  var _f = React.useState(''), errorText = _f[0], setErrorText = _f[1];
4332
4330
  var _g = React.useState([]), addressOptions = _g[0], setAddressOptions = _g[1];
4331
+ var seenTitles = React.useRef(new Set());
4333
4332
  var handleSubmit = function (e) {
4334
4333
  e.preventDefault();
4335
4334
  var enteredPostcode = e.target.elements.postcode.value;
@@ -4347,13 +4346,22 @@ var BinCollection = function (_a) {
4347
4346
  */
4348
4347
  var fetchAddresses = function (postcode) { return __awaiter(void 0, void 0, void 0, function () {
4349
4348
  return __generator(this, function (_a) {
4349
+ setError(false);
4350
+ setErrorText('');
4351
+ setIsLoading(true);
4350
4352
  axios__default["default"].get("".concat(BinCollectionApiUrl).concat(postcode))
4351
4353
  .then(function (response) {
4352
4354
  setIsLoading(false);
4355
+ // Check if there are any addresses returned
4356
+ if (response.data.data.length === 0) {
4357
+ setError(true);
4358
+ setErrorText('No addresses found for the provided postcode.');
4359
+ return;
4360
+ }
4353
4361
  // Transform the response data into the expected format
4354
4362
  var transformedAddresses = response.data.data.map(function (item) { return ({
4355
4363
  value: item.UPRN,
4356
- title: "".concat(item.Address, ", ").concat(item.Locality, ", ").concat(item.Town)
4364
+ title: "".concat(item.Address)
4357
4365
  }); });
4358
4366
  setAddressOptions(transformedAddresses);
4359
4367
  })
@@ -4414,13 +4422,14 @@ var BinCollection = function (_a) {
4414
4422
  setCalendarEvents({});
4415
4423
  setError(false);
4416
4424
  setErrorText('');
4425
+ seenTitles.current.clear();
4417
4426
  };
4418
4427
  var formatTitle = function (apiTitle) {
4419
4428
  var mappings = [
4420
- { keyword: 'Bin Refuse bin', replacement: 'Refuse bin' },
4421
- { keyword: 'Bin Recycling', replacement: 'Recycling bin' },
4422
- { keyword: 'Recycling Paper Box', replacement: 'Recycling Paper Box bin' },
4423
- { keyword: 'Garden', replacement: 'Garden bin' }
4429
+ { keyword: 'Refuse', replacement: 'General refuse bin' },
4430
+ { keyword: 'Recycling', replacement: 'Recycling bin' },
4431
+ { keyword: 'Garden', replacement: 'Garden bin' },
4432
+ { keyword: 'Food', replacement: 'Food caddy' },
4424
4433
  ];
4425
4434
  for (var _i = 0, mappings_1 = mappings; _i < mappings_1.length; _i++) {
4426
4435
  var mapping = mappings_1[_i];
@@ -4428,14 +4437,18 @@ var BinCollection = function (_a) {
4428
4437
  return mapping.replacement;
4429
4438
  }
4430
4439
  }
4431
- return apiTitle;
4440
+ return null;
4432
4441
  };
4442
+ React.useEffect(function () {
4443
+ seenTitles.current.clear();
4444
+ }, [calendarEvents]);
4433
4445
  return (React__default["default"].createElement(Container$17, { "data-testid": "BinCollection" },
4434
4446
  React__default["default"].createElement(FormWithLine, { onSubmit: handleSubmit, isError: isError, lineColour: themeContext.theme_vars.colours.grey_dark, hideLine: true },
4435
4447
  React__default["default"].createElement(FormContainer$1, { isLoading: isLoading },
4436
- React__default["default"].createElement(Heading, { level: 2, text: "Bin Collection Checker" }),
4448
+ React__default["default"].createElement(Heading, { level: 2, text: "Bin collection checker" }),
4449
+ React__default["default"].createElement(ErrorTextWrapper, null, errorText && React__default["default"].createElement(ErrorText$1, null, errorText)),
4437
4450
  React__default["default"].createElement(FormInnerContainer, null,
4438
- React__default["default"].createElement(Input$6, { type: "text", placeholder: "Enter a postcode", name: "postcode", errorText: errorText, isErrored: isError, maxLength: 10 }),
4451
+ React__default["default"].createElement(Input$6, { type: "text", placeholder: "Enter a postcode", name: "postcode", isErrored: isError, maxLength: 10 }),
4439
4452
  React__default["default"].createElement(BinCollectionButtonStyles, null,
4440
4453
  React__default["default"].createElement(FormButton, { size: "large", type: "submit", "aria-label": "Submit", text: "Find" }))))),
4441
4454
  addressOptions.length > 0 && (React__default["default"].createElement(DropDownSelectContainer, null,
@@ -4443,13 +4456,17 @@ var BinCollection = function (_a) {
4443
4456
  React__default["default"].createElement("div", null, Object.entries(calendarEvents).map(function (_a) {
4444
4457
  var apiTitle = _a[0], dates = _a[1];
4445
4458
  var title = formatTitle(apiTitle);
4459
+ // If we've seen this title before, or if title is null, we skip rendering it
4460
+ if (seenTitles.current.has(title) || title === null) {
4461
+ return null;
4462
+ }
4463
+ // Mark the title as seen
4464
+ seenTitles.current.add(title);
4446
4465
  return (React__default["default"].createElement(React__default["default"].Fragment, { key: title },
4447
- React__default["default"].createElement(UPRNPageTitleRow, null,
4448
- React__default["default"].createElement(UPRNPageSectionTitle, null, title)),
4466
+ React__default["default"].createElement(Heading, { level: 3, text: title }),
4449
4467
  dates
4450
4468
  .sort(function (a, b) { return new Date(a).getTime() - new Date(b).getTime(); })
4451
- .map(function (date) { return (React__default["default"].createElement(UPRNPageUPRNRow, { key: "".concat(title, "-").concat(date.toString()) },
4452
- React__default["default"].createElement(UPRNPageUPRNTitle, null, date.toLocaleDateString('en-GB', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' })))); })));
4469
+ .map(function (date) { return (React__default["default"].createElement("p", null, date.toLocaleDateString('en-GB', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }))); })));
4453
4470
  })),
4454
4471
  Object.keys(calendarEvents).length > 0 && (React__default["default"].createElement(FormButton, { size: "small", type: "button", "aria-label": "Reset", text: "Find a different address", onClick: resetForm }))));
4455
4472
  };