@nice-digital/global-nav 5.0.940 → 7.0.930

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 (74) hide show
  1. package/README.md +18 -55
  2. package/lib/Footer/Footer.js +31 -55
  3. package/lib/Footer/Legal/Legal.js +76 -71
  4. package/lib/Footer/Legal/index.js +10 -7
  5. package/lib/Footer/Pages/Pages.js +34 -54
  6. package/lib/Footer/Pages/Pages.module.scss +1 -1
  7. package/lib/Footer/Pages/index.js +10 -7
  8. package/lib/Footer/Pages/links.json +2 -5
  9. package/lib/Footer/Services/Services.js +65 -86
  10. package/lib/Footer/Services/Services.module.scss +1 -1
  11. package/lib/Footer/Services/index.js +10 -7
  12. package/lib/Footer/Social/Social.js +46 -57
  13. package/lib/Footer/Social/index.js +10 -7
  14. package/lib/Footer/index.js +10 -7
  15. package/lib/Header/Account/Account.js +87 -109
  16. package/lib/Header/Account/index.js +10 -7
  17. package/lib/Header/Account/nice-accounts.js +7 -12
  18. package/lib/Header/Header.js +345 -171
  19. package/lib/Header/Header.module.scss +2 -2
  20. package/lib/Header/Nav/Dropdown/Components/AboutUs.js +216 -105
  21. package/lib/Header/Nav/Dropdown/Components/BNF.js +120 -75
  22. package/lib/Header/Nav/Dropdown/Components/BNFc.js +115 -73
  23. package/lib/Header/Nav/Dropdown/Components/Button.js +11 -14
  24. package/lib/Header/Nav/Dropdown/Components/CKS.js +115 -73
  25. package/lib/Header/Nav/Dropdown/Components/Grid.js +16 -22
  26. package/lib/Header/Nav/Dropdown/Components/Guidance.js +244 -128
  27. package/lib/Header/Nav/Dropdown/Components/LifeSciences.js +169 -108
  28. package/lib/Header/Nav/Dropdown/Components/StandardsAndIndicators.js +83 -45
  29. package/lib/Header/Nav/Dropdown/Components/index.js +46 -24
  30. package/lib/Header/Nav/Dropdown/Dropdown.js +48 -63
  31. package/lib/Header/Nav/Dropdown/Dropdown.module.scss +1 -1
  32. package/lib/Header/Nav/Dropdown/index.js +10 -7
  33. package/lib/Header/Nav/Nav.js +84 -102
  34. package/lib/Header/Nav/Nav.module.scss +2 -4
  35. package/lib/Header/Nav/NavLinks/NavLinks.js +118 -137
  36. package/lib/Header/Nav/NavLinks/NavLinks.module.scss +1 -1
  37. package/lib/Header/Nav/NavLinks/index.js +10 -7
  38. package/lib/Header/Nav/SubNav/SubNav.js +54 -90
  39. package/lib/Header/Nav/SubNav/index.js +10 -7
  40. package/lib/Header/Nav/__mocks__/services.json +3 -3
  41. package/lib/Header/Nav/index.js +10 -7
  42. package/lib/Header/OldIEMessage/OldIEMessage.js +65 -67
  43. package/lib/Header/OldIEMessage/ie.js +14 -0
  44. package/lib/Header/OldIEMessage/index.js +10 -7
  45. package/lib/Header/Search/Autocomplete/Autocomplete.js +169 -194
  46. package/lib/Header/Search/Autocomplete/Autocomplete.module.scss +9 -1
  47. package/lib/Header/Search/Autocomplete/index.js +10 -7
  48. package/lib/Header/Search/Autocomplete/suggester/index.js +21 -28
  49. package/lib/Header/Search/Autocomplete/suggester/phrase-finder.js +13 -14
  50. package/lib/Header/Search/Autocomplete/suggester/term-finder.js +18 -21
  51. package/lib/Header/Search/Autocomplete/suggester/tokenizer.js +12 -17
  52. package/lib/Header/Search/Search.js +73 -90
  53. package/lib/Header/Search/index.js +10 -7
  54. package/lib/Header/SkipLink/SkipLink.js +24 -62
  55. package/lib/Header/SkipLink/SkipLink.module.scss +5 -1
  56. package/lib/Header/SkipLink/index.js +10 -7
  57. package/lib/Header/_header-settings.scss +0 -2
  58. package/lib/Header/context/HeaderContext.js +28 -54
  59. package/lib/Header/index.js +10 -7
  60. package/lib/Main/BackToTop/BackToTop.js +22 -25
  61. package/lib/Main/BackToTop/BackToTop.module.scss +1 -4
  62. package/lib/Main/Main.js +22 -26
  63. package/lib/Main/index.js +10 -7
  64. package/lib/TrackedLink/TrackedLink.js +48 -74
  65. package/lib/TrackedLink/index.js +10 -7
  66. package/lib/hooks/useEscapeKeydown.js +8 -21
  67. package/lib/hooks/useIsClient.js +20 -0
  68. package/lib/index.js +22 -12
  69. package/lib/renderer.js +21 -30
  70. package/lib/tracker/index.js +8 -25
  71. package/lib/utils.js +4 -7
  72. package/package.json +68 -65
  73. package/types.d.ts +1 -0
  74. package/lib/Header/Account/AccountOld.js +0 -227
@@ -1,72 +1,70 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- exports.__esModule = true;
6
- exports["default"] = void 0;
7
-
8
- var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
9
-
10
- var _react = _interopRequireWildcard(require("react"));
11
-
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = OldIEMessage;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _ie = require("./ie");
12
10
  var _OldIEMessageModule = _interopRequireDefault(require("./OldIEMessage.module.scss"));
13
-
14
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
-
16
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
-
18
- var OldIEMessage = /*#__PURE__*/function (_Component) {
19
- (0, _inheritsLoose2["default"])(OldIEMessage, _Component);
20
-
21
- function OldIEMessage() {
22
- return _Component.apply(this, arguments) || this;
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ function OldIEMessage() {
13
+ var ieVersion = (0, _ie.getIEVersion)();
14
+ if (!ieVersion || ieVersion > 10) {
15
+ return null;
23
16
  }
24
-
25
- var _proto = OldIEMessage.prototype;
26
-
27
- // See https://gist.github.com/padolsey/527683#gistcomment-768383
28
- _proto.getIEVersion = function getIEVersion() {
29
- if (typeof document === "undefined") return void 0;
30
- var tmp = (document["documentMode"] || document.attachEvent) && "ev",
31
- msie = tmp && (tmp = window[tmp + "al"]) && tmp("/*@cc_on 1;@*/") && +((/msie (\d+)/i.exec(navigator.userAgent) || [])[1] || 0);
32
- return msie || void 0;
33
- };
34
-
35
- _proto.render = function render() {
36
- var ieVersion = this.getIEVersion();
37
-
38
- if (!ieVersion || ieVersion > 10) {
39
- return null;
40
- }
41
-
42
- return /*#__PURE__*/_react["default"].createElement("aside", {
43
- className: _OldIEMessageModule["default"].container
44
- }, /*#__PURE__*/_react["default"].createElement("div", {
45
- className: _OldIEMessageModule["default"].alert
46
- }, /*#__PURE__*/_react["default"].createElement("h2", null, "Browser support"), ieVersion === 10 ? /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("p", null, "Your browser, Internet Explorer (", /*#__PURE__*/_react["default"].createElement("abbr", {
47
- title: "Internet Explorer"
48
- }, "IE"), ") 10, will reach end of support on", " ", /*#__PURE__*/_react["default"].createElement("strong", null, /*#__PURE__*/_react["default"].createElement("time", {
49
- dateTime: "2020-01-31"
50
- }, "January 31, 2020")), ". Microsoft will no longer issue security patches from this date and your browser may become insecure. You can learn more about this in Microsoft\u2019s", " ", /*#__PURE__*/_react["default"].createElement("a", {
51
- href: "https://support.microsoft.com/en-gb/help/17454/lifecycle-faq-internet-explorer"
52
- }, "Internet Explorer Lifecycle Policy FAQ"), "."), /*#__PURE__*/_react["default"].createElement("p", null, "NICE will also stop supporting", " ", /*#__PURE__*/_react["default"].createElement("abbr", {
53
- title: "Internet Explorer"
54
- }, "IE"), " 10 from", " ", /*#__PURE__*/_react["default"].createElement("time", {
55
- dateTime: "2020-01-31"
56
- }, "January 31, 2020"), ". This means NICE websites and services may stop functioning correctly in", " ", /*#__PURE__*/_react["default"].createElement("abbr", {
57
- title: "Internet Explorer"
58
- }, "IE"), " 10 after this date.")) : /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("p", null, "Your web browser, Internet Explorer (", /*#__PURE__*/_react["default"].createElement("abbr", {
59
- title: "Internet Explorer"
60
- }, "IE"), ") ", ieVersion, ", is out of date. For the best experience, please update your browser to the latest version.")), /*#__PURE__*/_react["default"].createElement("p", null, "We recommend you upgrade to a newer browser such as", " ", /*#__PURE__*/_react["default"].createElement("a", {
61
- href: "https://technet.microsoft.com/en-us/microsoft-edge"
62
- }, "Microsoft Edge"), ", ", /*#__PURE__*/_react["default"].createElement("a", {
63
- href: "https://www.google.com/chrome/"
64
- }, "Google Chrome"), " ", "or\xA0", /*#__PURE__*/_react["default"].createElement("a", {
65
- href: "https://www.mozilla.org/en-GB/firefox/new/"
66
- }, "Firefox"), ".")));
67
- };
68
-
69
- return OldIEMessage;
70
- }(_react.Component);
71
-
72
- exports["default"] = OldIEMessage;
17
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("aside", {
18
+ className: _OldIEMessageModule.default.container,
19
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
20
+ className: _OldIEMessageModule.default.alert,
21
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("h2", {
22
+ children: "Browser support"
23
+ }), ieVersion === 10 ? /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
24
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("p", {
25
+ children: ["Your browser, Internet Explorer (", /*#__PURE__*/(0, _jsxRuntime.jsx)("abbr", {
26
+ title: "Internet Explorer",
27
+ children: "IE"
28
+ }), ") 10, will reach end of support on", " ", /*#__PURE__*/(0, _jsxRuntime.jsx)("strong", {
29
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("time", {
30
+ dateTime: "2020-01-31",
31
+ children: "January 31, 2020"
32
+ })
33
+ }), ". Microsoft will no longer issue security patches from this date and your browser may become insecure. You can learn more about this in Microsoft\u2019s", " ", /*#__PURE__*/(0, _jsxRuntime.jsx)("a", {
34
+ href: "https://support.microsoft.com/en-gb/help/17454/lifecycle-faq-internet-explorer",
35
+ children: "Internet Explorer Lifecycle Policy FAQ"
36
+ }), "."]
37
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("p", {
38
+ children: ["NICE will also stop supporting", " ", /*#__PURE__*/(0, _jsxRuntime.jsx)("abbr", {
39
+ title: "Internet Explorer",
40
+ children: "IE"
41
+ }), " 10 from", " ", /*#__PURE__*/(0, _jsxRuntime.jsx)("time", {
42
+ dateTime: "2020-01-31",
43
+ children: "January 31, 2020"
44
+ }), ". This means NICE websites and services may stop functioning correctly in", " ", /*#__PURE__*/(0, _jsxRuntime.jsx)("abbr", {
45
+ title: "Internet Explorer",
46
+ children: "IE"
47
+ }), " 10 after this date."]
48
+ })]
49
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
50
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("p", {
51
+ children: ["Your web browser, Internet Explorer (", /*#__PURE__*/(0, _jsxRuntime.jsx)("abbr", {
52
+ title: "Internet Explorer",
53
+ children: "IE"
54
+ }), ") ", ieVersion, ", is out of date. For the best experience, please update your browser to the latest version."]
55
+ })
56
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("p", {
57
+ children: ["We recommend you upgrade to a newer browser such as", " ", /*#__PURE__*/(0, _jsxRuntime.jsx)("a", {
58
+ href: "https://technet.microsoft.com/en-us/microsoft-edge",
59
+ children: "Microsoft Edge"
60
+ }), ", ", /*#__PURE__*/(0, _jsxRuntime.jsx)("a", {
61
+ href: "https://www.google.com/chrome/",
62
+ children: "Google Chrome"
63
+ }), " or\xA0", /*#__PURE__*/(0, _jsxRuntime.jsx)("a", {
64
+ href: "https://www.mozilla.org/en-GB/firefox/new/",
65
+ children: "Firefox"
66
+ }), "."]
67
+ })]
68
+ })
69
+ });
70
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getIEVersion = void 0;
7
+ // See https://gist.github.com/padolsey/527683#gistcomment-768383
8
+ var getIEVersion = function getIEVersion() {
9
+ if (typeof document === "undefined") return void 0;
10
+ var tmp = (document["documentMode"] || document.attachEvent) && "ev",
11
+ msie = tmp && (tmp = window[tmp + "al"]) && tmp("/*@cc_on 1;@*/") && +((/msie (\d+)/i.exec(navigator.userAgent) || [])[1] || 0);
12
+ return msie || void 0;
13
+ };
14
+ exports.getIEVersion = getIEVersion;
@@ -1,10 +1,13 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- exports.__esModule = true;
6
- exports["default"] = void 0;
7
-
8
- var _OldIEMessage = _interopRequireDefault(require("./OldIEMessage"));
9
-
10
- exports["default"] = _OldIEMessage["default"];
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ Object.defineProperty(exports, "default", {
8
+ enumerable: true,
9
+ get: function get() {
10
+ return _OldIEMessage.default;
11
+ }
12
+ });
13
+ var _OldIEMessage = _interopRequireDefault(require("./OldIEMessage"));
@@ -1,225 +1,200 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- exports.__esModule = true;
6
- exports.rateLimitWait = exports["default"] = void 0;
7
-
8
- var _newArrowCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/newArrowCheck"));
9
-
10
- var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
11
-
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = Autocomplete;
9
+ exports.rateLimitWait = void 0;
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
11
  var _react = _interopRequireWildcard(require("react"));
13
-
14
- var _react2 = _interopRequireDefault(require("accessible-autocomplete/react"));
15
-
12
+ var _react2 = require("@headlessui/react");
16
13
  var _propTypes = _interopRequireDefault(require("prop-types"));
17
-
14
+ var _useDebouncedValue3 = require("@mantine/hooks/esm/use-debounced-value/use-debounced-value");
18
15
  var _AutocompleteModule = _interopRequireDefault(require("./Autocomplete.module.scss"));
19
-
20
16
  var _suggester = require("./suggester");
21
-
22
- var _utils = require("./../../../utils");
23
-
17
+ var _useIsClient = require("../../../hooks/useIsClient");
24
18
  var _tracker = require("./../../../tracker");
25
-
19
+ var _utils = require("./../../../utils");
20
+ var _jsxRuntime = require("react/jsx-runtime");
26
21
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
22
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
+ /** The maximum number of autocomplete results to return */var maxResults = 5;
27
24
 
28
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
29
-
30
- /**
31
- * Debounce
32
- * See http://unscriptable.com/2009/03/20/debouncing-javascript-methods/
33
- *
34
- * @param {Function} func The function to debounce
35
- * @param {Integer} execAsap Whether to execute the function now
36
- * @param {Integer} threshold The detection period, in milliseconds
37
- * @param {Object} scope The context for the debounced function
38
- * @return {Function} { The debounced function }
39
- */
40
- var debounce = function debounce(func, execAsap, threshold, scope) {
41
- if (execAsap === void 0) {
42
- execAsap = false;
43
- }
44
-
45
- if (threshold === void 0) {
46
- threshold = 100;
47
- }
25
+ /** The minimum number of characters that should be entered before the autocomplete will attempt to suggest options. */
26
+ var minAutocompleteLength = 3;
48
27
 
49
- if (scope === void 0) {
50
- scope = null;
51
- }
52
-
53
- var timeout;
54
- return function debounced() {
55
- var context = scope || this,
56
- args = arguments;
57
-
58
- function delayed() {
59
- if (!execAsap) func.apply(context, args);
60
- timeout = null;
61
- }
62
-
63
- if (timeout) clearTimeout(timeout);else if (execAsap) func.apply(context, args);
64
- timeout = setTimeout(delayed, threshold);
65
- };
66
- };
67
- /** The maximum number of autocomplete results to return */
68
-
69
-
70
- var maxResults = 5;
71
28
  /** Delay in millieconds before loading results */
72
-
73
29
  var rateLimitWait = 100;
74
30
  exports.rateLimitWait = rateLimitWait;
75
-
76
- var inputValueTemplate = function inputValueTemplate(suggestion) {
77
- if (!suggestion || !suggestion.Title) return "";
78
- return suggestion && suggestion.Title;
79
- },
80
- suggestionTemplateDefault = function suggestionTemplateDefault(suggestion) {
31
+ var suggestionTemplateDefault = function suggestionTemplateDefault(suggestion) {
81
32
  if (!suggestion || !suggestion.Link) return "";
82
- return "<a href=\"" + suggestion.Link + "\">" + (suggestion.TitleHtml || suggestion.Title) + "</a>";
33
+ return "<a href=\"".concat(suggestion.Link, "\">").concat(suggestion.TitleHtml || suggestion.Title, "</a>");
83
34
  };
84
-
85
- var Autocomplete = /*#__PURE__*/function (_Component) {
86
- (0, _inheritsLoose2["default"])(Autocomplete, _Component);
87
-
88
- function Autocomplete(props) {
89
- var _this;
90
-
91
- _this = _Component.call(this, props) || this;
92
- _this.state = {
93
- canUseDOM: false
35
+ function Autocomplete(props) {
36
+ var query = props.query,
37
+ onNavigating = props.onNavigating,
38
+ placeholder = props.placeholder,
39
+ suggestionTemplate = props.suggestionTemplate,
40
+ _props$source = props.source,
41
+ sourceProp = _props$source === void 0 ? false : _props$source;
42
+ var isClient = (0, _useIsClient.useIsClient)(),
43
+ _useState = (0, _react.useState)(query || ""),
44
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
45
+ queryText = _useState2[0],
46
+ setQueryText = _useState2[1],
47
+ _useDebouncedValue = (0, _useDebouncedValue3.useDebouncedValue)(queryText, rateLimitWait),
48
+ _useDebouncedValue2 = (0, _slicedToArray2.default)(_useDebouncedValue, 1),
49
+ debouncedQueryText = _useDebouncedValue2[0],
50
+ _useState3 = (0, _react.useState)([]),
51
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
52
+ suggestions = _useState4[0],
53
+ setSuggestions = _useState4[1],
54
+ inputChangeHandler = function inputChangeHandler(event) {
55
+ setQueryText(event.target.value);
94
56
  };
95
- return _this;
96
- }
97
-
98
- var _proto = Autocomplete.prototype;
99
-
100
- _proto.componentDidMount = function componentDidMount() {
101
- this.setState({
102
- canUseDOM: true
103
- });
57
+ var onValueChangeHandler = function onValueChangeHandler(suggestion) {
58
+ if (!suggestion) return;
59
+ var element = document.querySelector(".autocomplete__option a[href='" + suggestion.Link + "']"),
60
+ inputText = document.getElementById("autocomplete").value;
61
+ var eventCallback = function eventCallback() {
62
+ var onNavigatingCallback = (0, _utils.getCallbackFunction)(onNavigating);
63
+ if (onNavigatingCallback) {
64
+ onNavigatingCallback({
65
+ element: element,
66
+ href: suggestion.Link
67
+ });
68
+ } else window.location.assign(suggestion.Link);
69
+ };
70
+ if (suggestion.TypeAheadType) {
71
+ (0, _tracker.trackEvent)("Search - Typeahead select", "Selected: " + suggestion.TypeAheadType, (suggestion.Title + " | " + inputText).toLowerCase(), null, suggestion.Link, eventCallback);
72
+ } else {
73
+ (0, _tracker.trackEvent)("Search", "Typeahead select", suggestion.Title + " | " + inputText, null, suggestion.Link, eventCallback);
74
+ }
104
75
  };
105
-
106
- _proto.onConfirm = function onConfirm(suggestion) {
107
- if (suggestion) {
108
- var selectedEl = document.querySelectorAll(".autocomplete__option a[href='" + suggestion.Link + "']"); //This var is declared outside the eventcallback function to avoid
109
- //loosing the component scope due to hoisting
110
- // eslint-disable-next-line react/prop-types
111
-
112
- var onNavigating = this.props.onNavigating;
113
-
114
- var eventCallback = function eventCallback() {
115
- var onNavigatingCallback = (0, _utils.getCallbackFunction)(onNavigating);
116
-
117
- if (onNavigatingCallback) {
118
- onNavigatingCallback({
119
- element: selectedEl,
120
- href: suggestion.Link
121
- });
122
- } else window.location.href = suggestion.Link;
123
- };
124
-
125
- if (suggestion.TypeAheadType) {
126
- (0, _tracker.trackEvent)("Search - Typeahead select", "Selected: " + suggestion.TypeAheadType, (suggestion.Title + " | " + document.getElementById("autocomplete").value).toLowerCase(), null, suggestion.Link, eventCallback);
127
- } else {
128
- (0, _tracker.trackEvent)("Search", "Typeahead select", suggestion.Title + " | " + document.getElementById("autocomplete").value, null, suggestion.Link, eventCallback);
129
- }
76
+ var suggestionClickHandler = function suggestionClickHandler(suggestion) {
77
+ setQueryText(suggestion.Title);
78
+ };
79
+ var suggestionKeyDownHandler = function suggestionKeyDownHandler(event, suggestion) {
80
+ if (event.key === "Enter") {
81
+ suggestionClickHandler(suggestion);
130
82
  }
131
83
  };
132
-
133
- _proto.suggest = function suggest(query, populateResults) {
134
- var _this2 = this;
135
-
136
- if (this.props.source === false || query === "" || query === this.props.placeholder) return;
84
+ (0, _react.useEffect)(function () {
85
+ if (sourceProp === false || debouncedQueryText === "" || debouncedQueryText.length < minAutocompleteLength) {
86
+ setSuggestions([]);
87
+ return;
88
+ }
137
89
  var source;
138
-
139
- if (Array.isArray(this.props.source)) {
140
- source = this.props.source;
90
+ if (Array.isArray(sourceProp)) {
91
+ source = sourceProp;
141
92
  }
142
-
143
- if (typeof this.props.source === "string" && this.props.source.indexOf("/") === -1) {
144
- source = window[this.props.source];
93
+ if (typeof sourceProp === "string" && sourceProp.indexOf("/") === -1) {
94
+ source = window[sourceProp];
145
95
  if (!source) return;
146
96
  }
147
-
148
97
  if (source) {
149
- populateResults((0, _suggester.suggester)(source, query, maxResults));
98
+ setSuggestions((0, _suggester.suggester)(source, debouncedQueryText, maxResults));
150
99
  return;
151
- } // Default to a URL for asynchronously loading suggestions from the server
152
-
100
+ }
153
101
 
154
- fetch("" + this.props.source + (this.props.source.indexOf("?") === -1 ? "?" : "&") + "q=" + query).then(function (response) {
155
- (0, _newArrowCheck2["default"])(this, _this2);
102
+ // Default to a URL for asynchronously loading suggestions from the server
103
+ fetch("".concat(sourceProp).concat(sourceProp.indexOf("?") === -1 ? "?" : "&", "q=").concat(debouncedQueryText)).then(function (response) {
156
104
  return response.json();
157
- }.bind(this)).then(function (data) {
158
- (0, _newArrowCheck2["default"])(this, _this2);
159
- populateResults(data.slice(0, maxResults));
160
- }.bind(this));
161
- };
162
-
163
- _proto.render = function render() {
164
- var templates = {
165
- inputValue: inputValueTemplate,
166
- suggestion: this.props.suggestionTemplate || suggestionTemplateDefault
167
- };
168
- return /*#__PURE__*/_react["default"].createElement("div", {
169
- className: _AutocompleteModule["default"].ac
170
- }, !this.props.source || !this.state.canUseDOM ? /*#__PURE__*/_react["default"].createElement("div", {
171
- className: "autocomplete__wrapper"
172
- }, /*#__PURE__*/_react["default"].createElement("input", {
173
- type: "search",
174
- id: "autocomplete",
175
- name: "q",
176
- className: "autocomplete__input autocomplete__input--default",
177
- placeholder: this.props.placeholder,
178
- defaultValue: this.props.query,
179
- "data-hj-allow": "",
180
- maxLength: 512
181
- })) : /*#__PURE__*/_react["default"].createElement(_react2["default"], {
182
- id: "autocomplete",
183
- name: "q",
184
- placeholder: this.props.placeholder,
185
- displayMenu: (0, _utils.isIosDevice)() ? "inline" : "overlay",
186
- minLength: 3,
187
- source: debounce(this.suggest, false, rateLimitWait, this),
188
- templates: templates,
189
- onConfirm: function (s) {
190
- this.onConfirm(s);
191
- }.bind(this),
192
- confirmOnBlur: false,
193
- showNoOptionsFound: false,
194
- defaultValue: this.props.query,
195
- ref: function ref(acElement) {
196
- // This relies on an inner implementation detail of the autocomplete component, can we do this in a better way?
197
- var inputEl = acElement && acElement.elementReferences && acElement.elementReferences[-1];
198
-
199
- if (inputEl) {
200
- inputEl.setAttribute("data-hj-allow", "");
201
- inputEl.setAttribute("maxlength", 512);
202
- }
203
- }
204
- }));
205
- };
206
-
207
- return Autocomplete;
208
- }(_react.Component);
209
-
210
- exports["default"] = Autocomplete;
105
+ }).then(function (data) {
106
+ setSuggestions(data.slice(0, maxResults));
107
+ });
108
+ }, [debouncedQueryText]);
109
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
110
+ className: _AutocompleteModule.default.ac,
111
+ children: !sourceProp || !isClient ? /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
112
+ className: "autocomplete__wrapper",
113
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("input", {
114
+ type: "search",
115
+ id: "autocomplete",
116
+ name: "q",
117
+ className: "autocomplete__input autocomplete__input--default",
118
+ placeholder: placeholder,
119
+ defaultValue: query,
120
+ "data-hj-allow": "",
121
+ maxLength: 512
122
+ })
123
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_react2.Combobox, {
124
+ value: queryText,
125
+ onChange: onValueChangeHandler,
126
+ nullable: true,
127
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_react2.Combobox.Label, {
128
+ className: "visually-hidden",
129
+ children: placeholder
130
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_react2.Combobox.Input, {
131
+ id: "autocomplete",
132
+ name: "q",
133
+ className: "autocomplete__input autocomplete__input--default",
134
+ autoComplete: "off",
135
+ maxLength: 512,
136
+ "data-hj-allow": "",
137
+ placeholder: placeholder,
138
+ onChange: inputChangeHandler
139
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_react2.Combobox.Options, {
140
+ className: "autocomplete__menu autocomplete__menu--overlay",
141
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_react2.Combobox.Option, {
142
+ as: _react.Fragment,
143
+ value: {
144
+ Link: "/search?q=".concat(queryText),
145
+ Title: queryText
146
+ },
147
+ children: function children(_ref) {
148
+ var active = _ref.active;
149
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("li", {
150
+ className: "visually-hidden autocomplete__option ".concat(active ? "autocomplete__option--focused" : ""),
151
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("a", {
152
+ href: "/search?q=".concat(queryText),
153
+ children: queryText.length === 0 ? "Empty search" : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
154
+ children: ["Search for ", /*#__PURE__*/(0, _jsxRuntime.jsx)("em", {
155
+ children: queryText
156
+ })]
157
+ })
158
+ })
159
+ });
160
+ }
161
+ }), suggestions.map(function (suggestion) {
162
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_react2.Combobox.Option, {
163
+ value: suggestion,
164
+ as: _react.Fragment,
165
+ children: function children(_ref2) {
166
+ var active = _ref2.active;
167
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("li", {
168
+ className: "autocomplete__option ".concat(active ? "autocomplete__option--focused" : ""),
169
+ dangerouslySetInnerHTML: {
170
+ __html: (suggestionTemplate || suggestionTemplateDefault)(suggestion)
171
+ },
172
+ onClick: function onClick() {
173
+ return suggestionClickHandler(suggestion);
174
+ },
175
+ onKeyDown: function onKeyDown(event) {
176
+ return suggestionKeyDownHandler(event, suggestion);
177
+ },
178
+ role: "option",
179
+ tabIndex: 0,
180
+ "aria-selected": active ? "true" : "false"
181
+ });
182
+ }
183
+ }, suggestion.Title);
184
+ })]
185
+ })]
186
+ })
187
+ });
188
+ }
211
189
  Autocomplete.propTypes = {
212
- source: _propTypes["default"].oneOfType([_propTypes["default"].bool, _propTypes["default"].string, _propTypes["default"].arrayOf(_propTypes["default"].shape({
213
- Title: _propTypes["default"].string.isRequired,
214
- TitleHtml: _propTypes["default"].string,
215
- TypeAheadType: _propTypes["default"].string,
216
- Link: _propTypes["default"].string.isRequired
190
+ source: _propTypes.default.oneOfType([_propTypes.default.bool, _propTypes.default.string, _propTypes.default.arrayOf(_propTypes.default.shape({
191
+ Title: _propTypes.default.string.isRequired,
192
+ TitleHtml: _propTypes.default.string,
193
+ TypeAheadType: _propTypes.default.string,
194
+ Link: _propTypes.default.string.isRequired
217
195
  }))]),
218
- suggestionTemplate: _propTypes["default"].func,
219
- placeholder: _propTypes["default"].string,
220
- query: _propTypes["default"].string,
221
- onNavigating: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].func])
222
- };
223
- Autocomplete.defaultProps = {
224
- source: false
196
+ suggestionTemplate: _propTypes.default.func,
197
+ placeholder: _propTypes.default.string,
198
+ query: _propTypes.default.string,
199
+ onNavigating: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.func])
225
200
  };
@@ -14,7 +14,15 @@
14
14
  .autocomplete__wrapper {
15
15
  position: relative;
16
16
  }
17
-
17
+ .visually-hidden {
18
+ clip: rect(0 0 0 0);
19
+ clip-path: inset(50%);
20
+ height: 1px;
21
+ overflow: hidden;
22
+ position: absolute;
23
+ white-space: nowrap;
24
+ width: 1px;
25
+ }
18
26
  .autocomplete__hint,
19
27
  .autocomplete__input {
20
28
  -webkit-appearance: none;
@@ -1,10 +1,13 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- exports.__esModule = true;
6
- exports["default"] = void 0;
7
-
8
- var _Autocomplete = _interopRequireDefault(require("./Autocomplete"));
9
-
10
- exports["default"] = _Autocomplete["default"];
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ Object.defineProperty(exports, "default", {
8
+ enumerable: true,
9
+ get: function get() {
10
+ return _Autocomplete.default;
11
+ }
12
+ });
13
+ var _Autocomplete = _interopRequireDefault(require("./Autocomplete"));