@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,30 +1,28 @@
1
1
  "use strict";
2
2
 
3
- exports.__esModule = true;
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
4
6
  exports.suggester = void 0;
5
-
6
7
  var _tokenizer = require("./tokenizer");
7
-
8
8
  var _phraseFinder = require("./phrase-finder");
9
-
10
9
  var _termFinder = require("./term-finder");
11
-
12
10
  var isValidSuggestion = function isValidSuggestion(suggestion) {
13
11
  return suggestion.phraseMatch != null || suggestion.termMatches.length > 0;
14
12
  };
15
-
16
13
  var tokenizeSuggestion = function tokenizeSuggestion(suggestion) {
17
14
  // TODO: Cache tokenized suggestions for performance
18
15
  return Object.assign({}, suggestion, {
19
16
  tokens: (0, _tokenizer.tokenize)(suggestion.Title)
20
17
  });
21
18
  };
22
-
23
19
  var highlightSuggestion = function highlightSuggestion(suggestion) {
24
- var titleHtml; // Only highlight phrases, or individual terms, not both
20
+ var titleHtml;
25
21
 
22
+ // Only highlight phrases, or individual terms, not both
26
23
  if (suggestion.phraseMatch) titleHtml = (0, _phraseFinder.highlightPhrase)(suggestion.Title, suggestion.phraseMatch);else titleHtml = suggestion.termMatches.sort(function (a, b) {
27
- return (// Order by later matches first so we can replace highlight matched terms
24
+ return (
25
+ // Order by later matches first so we can replace highlight matched terms
28
26
  b.suggestionToken.originalIndex - a.suggestionToken.originalIndex
29
27
  );
30
28
  }).reduce(function (titleHtml, termMatch) {
@@ -34,55 +32,50 @@ var highlightSuggestion = function highlightSuggestion(suggestion) {
34
32
  titleHtml: titleHtml
35
33
  });
36
34
  };
37
-
38
35
  var sortSuggestions = function sortSuggestions(a, b) {
39
36
  // Show phrases first, and phrases closer to the start of the string first
40
37
  if (a.phraseMatch && b.phraseMatch) {
41
38
  return a.phraseMatch.suggestionTokens[0].originalIndex - b.phraseMatch.suggestionTokens[0].originalIndex;
42
- } // Prefer phrases over term matches
43
-
39
+ }
44
40
 
41
+ // Prefer phrases over term matches
45
42
  if (a.phraseMatch && !b.phraseMatch) return -1;
46
- if (!a.phraseMatch && b.phraseMatch) return 1; // Show term matches towards the start of the string first
43
+ if (!a.phraseMatch && b.phraseMatch) return 1;
47
44
 
45
+ // Show term matches towards the start of the string first
48
46
  return a.termMatches[0].suggestionToken.originalIndex - b.termMatches[0].suggestionToken.originalIndex;
49
47
  };
48
+
50
49
  /**
51
50
  *
52
51
  * @param {Array<{Title, Link}>} suggestions The complete list of sugggestions to filter
53
52
  * @param {String} query The search query
54
53
  * @param {Number} maxResults The maximum number of results to show
55
54
  */
56
-
57
-
58
- var suggester = function suggester(suggestions, query, maxResults) {
59
- if (maxResults === void 0) {
60
- maxResults = 5;
61
- }
62
-
55
+ var suggester = function suggester(suggestions, query) {
56
+ var maxResults = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 5;
63
57
  var queryTokens = (0, _tokenizer.tokenize)(query ? query.trim() : "");
64
-
65
58
  var findPhrasesAndTerms = function findPhrasesAndTerms(suggestion) {
66
59
  var phraseMatch = (0, _phraseFinder.findPhrase)(queryTokens, suggestion.tokens),
67
- // Only look for individual tokens if there are no phrases
68
- termMatches = phraseMatch ? [] : (0, _termFinder.findTerms)(queryTokens, suggestion.tokens);
60
+ // Only look for individual tokens if there are no phrases
61
+ termMatches = phraseMatch ? [] : (0, _termFinder.findTerms)(queryTokens, suggestion.tokens);
69
62
  return Object.assign({}, suggestion, {
70
63
  phraseMatch: phraseMatch,
71
64
  termMatches: termMatches
72
65
  });
73
66
  };
74
-
75
67
  return suggestions.map(tokenizeSuggestion).map(findPhrasesAndTerms).filter(isValidSuggestion).map(highlightSuggestion).sort(sortSuggestions).slice(0, maxResults).map(function (_ref) {
76
68
  var Title = _ref.Title,
77
- Link = _ref.Link,
78
- titleHtml = _ref.titleHtml;
69
+ Link = _ref.Link,
70
+ TypeAheadType = _ref.TypeAheadType,
71
+ titleHtml = _ref.titleHtml;
79
72
  // keep only the properties we care about
80
73
  return {
81
74
  Title: Title,
82
75
  Link: Link,
83
- TitleHtml: titleHtml
76
+ TitleHtml: titleHtml,
77
+ TypeAheadType: TypeAheadType
84
78
  };
85
79
  });
86
80
  };
87
-
88
81
  exports.suggester = suggester;
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
2
 
3
- exports.__esModule = true;
4
- exports["default"] = void 0;
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
5
7
  exports.findPhrase = findPhrase;
6
8
  exports.highlightPhrase = highlightPhrase;
7
-
8
9
  // Finds a phrase within a suggested term
9
10
  function findPhrase(queryTokens, suggestionTokens) {
10
11
  // Look for matching query tokens within the suggestion
@@ -20,21 +21,19 @@ function findPhrase(queryTokens, suggestionTokens) {
20
21
  queryTokens: queryTokens,
21
22
  suggestionTokens: nextSuggestionTokens
22
23
  };
23
- } // No phrase match
24
-
24
+ }
25
25
 
26
+ // No phrase match
26
27
  return null;
27
28
  }
28
-
29
29
  function highlightPhrase(suggestionTitle, phraseMatch) {
30
30
  var suggestionTokens = phraseMatch.suggestionTokens,
31
- queryTokens = phraseMatch.queryTokens,
32
- lastPhraseToken = suggestionTokens[suggestionTokens.length - 1],
33
- lastqueryToken = queryTokens[queryTokens.length - 1],
34
- startIndex = suggestionTokens[0].originalIndex,
35
- phraseLength = lastPhraseToken.originalIndex + lastqueryToken.originalStr.length - suggestionTokens[0].originalIndex;
36
- return suggestionTitle.substr(0, startIndex) + "<mark>" + suggestionTitle.substr(startIndex, phraseLength) + "</mark>" + suggestionTitle.substr(startIndex + phraseLength);
31
+ queryTokens = phraseMatch.queryTokens,
32
+ lastPhraseToken = suggestionTokens[suggestionTokens.length - 1],
33
+ lastqueryToken = queryTokens[queryTokens.length - 1],
34
+ startIndex = suggestionTokens[0].originalIndex,
35
+ phraseLength = lastPhraseToken.originalIndex + lastqueryToken.originalStr.length - suggestionTokens[0].originalIndex;
36
+ return "".concat(suggestionTitle.substr(0, startIndex), "<mark>").concat(suggestionTitle.substr(startIndex, phraseLength), "</mark>").concat(suggestionTitle.substr(startIndex + phraseLength));
37
37
  }
38
-
39
38
  var _default = findPhrase;
40
- exports["default"] = _default;
39
+ exports.default = _default;
@@ -1,56 +1,53 @@
1
1
  "use strict";
2
2
 
3
- exports.__esModule = true;
4
- exports["default"] = void 0;
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
5
7
  exports.findTerms = findTerms;
6
8
  exports.highlightTerm = highlightTerm;
7
-
8
9
  function findTerms(queryTokens, suggestionTokens) {
9
10
  var termMatches = [];
10
-
11
11
  for (var index = 0; index < queryTokens.length; index++) {
12
12
  var queryToken = queryTokens[index];
13
13
  var unusedSuggestionTokens = suggestionTokens.filter(function (suggestionToken) {
14
14
  return termMatches.every(function (prevMatch) {
15
15
  return prevMatch.suggestionToken !== suggestionToken;
16
16
  });
17
- }); // We use a for loop here because Array.prototype.find isn't supported in IE9
18
- // And we didn't want to pollute the global scope with a polyfill
17
+ });
19
18
 
19
+ // We use a for loop here because Array.prototype.find isn't supported in IE9
20
+ // And we didn't want to pollute the global scope with a polyfill
20
21
  var firstMatchedSuggestionToken = null;
21
-
22
22
  for (var i = 0; i < unusedSuggestionTokens.length; i++) {
23
23
  var suggestionToken = unusedSuggestionTokens[i];
24
-
25
24
  if (suggestionToken.str.indexOf(queryToken.str) === 0) {
26
25
  firstMatchedSuggestionToken = suggestionToken;
27
26
  break;
28
27
  }
29
28
  }
30
-
31
29
  termMatches.push({
32
30
  suggestionToken: firstMatchedSuggestionToken,
33
31
  queryToken: queryToken
34
32
  });
35
33
  }
34
+ var deDupedTermMatches = termMatches;
36
35
 
37
- var deDupedTermMatches = termMatches; // Only consider term matches if we match *every* token in the query
38
-
36
+ // Only consider term matches if we match *every* token in the query
39
37
  return deDupedTermMatches.every(function (match) {
40
38
  return !!match.suggestionToken;
41
39
  }) ? deDupedTermMatches : [];
42
- } // Highlights (with a mark tag) a match within a term
43
-
40
+ }
44
41
 
42
+ // Highlights (with a mark tag) a match within a term
45
43
  function highlightTerm(suggestionTitle, termMatch) {
46
44
  var queryToken = termMatch.queryToken,
47
- suggestionToken = termMatch.suggestionToken,
48
- nonAlphanumericPrefixMatch = suggestionToken.originalStr.match("^[^a-zA-Z0-9]+"),
49
- alphanumericPrefixLength = nonAlphanumericPrefixMatch ? nonAlphanumericPrefixMatch[0].length : 0,
50
- index = suggestionToken.originalIndex + alphanumericPrefixLength,
51
- length = queryToken.str.length;
52
- return suggestionTitle.substr(0, index) + "<mark>" + suggestionTitle.substr(index, length) + "</mark>" + suggestionTitle.substr(index + length);
45
+ suggestionToken = termMatch.suggestionToken,
46
+ nonAlphanumericPrefixMatch = suggestionToken.originalStr.match("^[^a-zA-Z0-9]+"),
47
+ alphanumericPrefixLength = nonAlphanumericPrefixMatch ? nonAlphanumericPrefixMatch[0].length : 0,
48
+ index = suggestionToken.originalIndex + alphanumericPrefixLength,
49
+ length = queryToken.str.length;
50
+ return "".concat(suggestionTitle.substr(0, index), "<mark>").concat(suggestionTitle.substr(index, length), "</mark>").concat(suggestionTitle.substr(index + length));
53
51
  }
54
-
55
52
  var _default = findTerms;
56
- exports["default"] = _default;
53
+ exports.default = _default;
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
2
 
3
- exports.__esModule = true;
4
- exports["default"] = void 0;
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
5
7
  exports.normalizeTokens = normalizeTokens;
6
8
  exports.tokenize = tokenize;
7
9
  exports.whitespaceTokenizer = whitespaceTokenizer;
8
-
9
10
  /**
10
11
  * @typedef Token
11
12
  * @type {object}
@@ -22,28 +23,25 @@ exports.whitespaceTokenizer = whitespaceTokenizer;
22
23
  function whitespaceTokenizer(str) {
23
24
  var tokens = [];
24
25
  var currentToken = null;
25
-
26
26
  for (var index = 0; index < str.length; index++) {
27
- var _char = str[index];
28
-
29
- if (/[a-zA-Z0-9]/.test(_char)) {
27
+ var char = str[index];
28
+ if (/[a-zA-Z0-9]/.test(char)) {
30
29
  if (!currentToken) {
31
30
  currentToken = {
32
31
  originalIndex: index,
33
32
  str: ""
34
33
  };
35
34
  }
36
-
37
- currentToken.str += _char;
35
+ currentToken.str += char;
38
36
  } else if (currentToken) {
39
37
  tokens.push(currentToken);
40
38
  currentToken = null;
41
39
  }
42
40
  }
43
-
44
41
  if (currentToken) tokens.push(currentToken);
45
42
  return tokens;
46
43
  }
44
+
47
45
  /**
48
46
  * @typedef NormalisedToken
49
47
  * @type {object}
@@ -57,31 +55,28 @@ function whitespaceTokenizer(str) {
57
55
  * @param {Token[]} tokens The list of tokens to normalise
58
56
  * @returns {NormalisedToken[]} The list of normalised tokens
59
57
  */
60
-
61
-
62
58
  function normalizeTokens(tokens) {
63
59
  return tokens.map(function (token) {
64
60
  return {
65
61
  originalIndex: token.originalIndex,
66
62
  originalStr: token.str,
67
- str: token.str.toLowerCase() // Trim non-alphanumeric characters
63
+ str: token.str.toLowerCase()
64
+ // Trim non-alphanumeric characters
68
65
  .replace(/^[^a-z\d]*|[^a-z\d]*$/gi, "")
69
66
  };
70
67
  }).filter(function (token) {
71
68
  return !!token.str;
72
69
  });
73
70
  }
71
+
74
72
  /**
75
73
  * Splits a string on whitespace into an array of normalised tokens
76
74
  *
77
75
  * @param {string} str The string to split
78
76
  * @returns {NormalisedToken[]} The list of normalised tokens
79
77
  */
80
-
81
-
82
78
  function tokenize(str) {
83
79
  return normalizeTokens(whitespaceTokenizer(str));
84
80
  }
85
-
86
81
  var _default = tokenize;
87
- exports["default"] = _default;
82
+ exports.default = _default;
@@ -1,49 +1,45 @@
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 _newArrowCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/newArrowCheck"));
9
-
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
10
9
  var _react = _interopRequireWildcard(require("react"));
11
-
12
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
13
-
14
11
  var _Search = _interopRequireDefault(require("@nice-digital/icons/lib/Search"));
15
-
16
12
  var _Autocomplete = _interopRequireDefault(require("./Autocomplete"));
17
-
18
13
  var _SkipLink = _interopRequireDefault(require("../SkipLink"));
19
-
20
14
  var _utils = require("../../utils");
21
-
22
15
  var _SearchModule = _interopRequireDefault(require("./Search.module.scss"));
23
-
16
+ var _jsxRuntime = require("react/jsx-runtime");
24
17
  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); }
25
-
26
- 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; }
27
-
18
+ 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; }
28
19
  var searchInputSelector = "header form[role='search'] [name='q']";
29
-
30
- var Search = function Search(props) {
31
- var _this = this,
32
- _props$autocomplete,
33
- _props$autocomplete2;
34
-
20
+ var Search = function Search(_ref) {
21
+ var _ref$url = _ref.url,
22
+ url = _ref$url === void 0 ? "/search" : _ref$url,
23
+ autocomplete = _ref.autocomplete,
24
+ skipLinkId = _ref.skipLinkId,
25
+ _ref$placeholder = _ref.placeholder,
26
+ placeholder = _ref$placeholder === void 0 ? "Search NICE…" : _ref$placeholder,
27
+ _ref$query = _ref.query,
28
+ query = _ref$query === void 0 ? "" : _ref$query,
29
+ onSearching = _ref.onSearching,
30
+ onNavigating = _ref.onNavigating;
35
31
  var keyDownHandler = function keyDownHandler(e) {
36
32
  // Submit the form when we press enter to allow the enter key functionality:
37
33
  // The accessible-autocomplete doesn't let you use enter by default
38
34
  if (e.key === "Enter" && e.target.id === "autocomplete") {
39
35
  var wasSearchActionOverridden = searchSubmitHandler(e);
40
-
41
36
  if (!wasSearchActionOverridden) {
42
37
  var searchForm = document.getElementById("global-nav-search-form");
43
38
  if (searchForm) searchForm.submit();
44
39
  }
45
40
  }
46
41
  };
42
+
47
43
  /**
48
44
  * Event handler for the form submit action
49
45
  *
@@ -51,47 +47,36 @@ var Search = function Search(props) {
51
47
  * @returns true if the search action was overridden; otherwise false
52
48
  * @memberof Search
53
49
  */
54
-
55
-
56
50
  var searchSubmitHandler = function searchSubmitHandler(e) {
57
51
  // If we've got an onSearching prop then cancel the default search behaviour
58
52
  // and call the onSearcing callback with the query value.
59
- var onSearching = props.onSearching;
60
53
 
61
54
  if (onSearching) {
62
55
  var onSearchingCallback = (0, _utils.getCallbackFunction)(onSearching);
63
-
64
56
  if (onSearchingCallback) {
65
57
  e.preventDefault();
66
- var query = document.getElementById("autocomplete").value;
58
+ var _query = document.getElementById("autocomplete").value;
67
59
  onSearchingCallback({
68
- query: query
60
+ query: _query
69
61
  });
70
62
  return true;
71
63
  }
72
64
  }
73
-
74
65
  return false;
75
- }; // TODO: Remove this hack to fix https://github.com/alphagov/accessible-autocomplete/issues/434
66
+ };
67
+
68
+ // TODO: Remove this hack to fix https://github.com/alphagov/accessible-autocomplete/issues/434
76
69
  // We do this to make our axe tests pass
77
70
  // Wait for the search box to appear before removing the aria-activedescendant attribute
78
-
79
-
80
71
  var searchFormRef = (0, _react.useCallback)(function (node) {
81
- var _this2 = this;
82
-
83
- (0, _newArrowCheck2["default"])(this, _this);
84
72
  var searchInput;
85
-
86
73
  if (node && "MutationObserver" in window) {
87
74
  new MutationObserver(function () {
88
- (0, _newArrowCheck2["default"])(this, _this2);
89
75
  searchInput = searchInput || document.querySelector(searchInputSelector);
90
-
91
76
  if (searchInput && searchInput.getAttribute("aria-activedescendant") === "false") {
92
77
  searchInput.setAttribute("aria-activedescendant", "");
93
78
  }
94
- }.bind(this)).observe(node, {
79
+ }).observe(node, {
95
80
  attributeFilter: ["aria-activedescendant"],
96
81
  attributes: true,
97
82
  // See https://stackoverflow.com/a/50593541/486434
@@ -99,66 +84,64 @@ var Search = function Search(props) {
99
84
  subtree: true
100
85
  });
101
86
  }
102
- }.bind(this), []);
87
+ }, []);
103
88
  return (
104
89
  /*#__PURE__*/
105
90
  // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions
106
- _react["default"].createElement("form", {
91
+ (0, _jsxRuntime.jsxs)("form", {
107
92
  id: "global-nav-search-form",
108
93
  role: "search",
109
- action: props.url,
110
- className: _SearchModule["default"].search,
94
+ action: url,
95
+ className: _SearchModule.default.search,
111
96
  onSubmit: searchSubmitHandler,
112
97
  onKeyDown: keyDownHandler,
113
- ref: searchFormRef
114
- }, /*#__PURE__*/_react["default"].createElement("label", {
115
- className: _SearchModule["default"].label,
116
- htmlFor: "autocomplete"
117
- }, props.placeholder), /*#__PURE__*/_react["default"].createElement(_Autocomplete["default"], {
118
- source: ((_props$autocomplete = props.autocomplete) == null ? void 0 : _props$autocomplete.suggestions) || props.autocomplete,
119
- suggestionTemplate: (_props$autocomplete2 = props.autocomplete) == null ? void 0 : _props$autocomplete2.suggestionTemplate,
120
- placeholder: props.placeholder,
121
- query: props.query,
122
- onNavigating: props.onNavigating
123
- }), /*#__PURE__*/_react["default"].createElement("button", {
124
- className: _SearchModule["default"].button,
125
- type: "submit",
126
- "aria-label": "Perform search",
127
- onClick: searchSubmitHandler
128
- }, /*#__PURE__*/_react["default"].createElement(_Search["default"], {
129
- className: _SearchModule["default"].icon
130
- })), /*#__PURE__*/_react["default"].createElement(_SkipLink["default"], {
131
- to: "#" + props.skipLinkId
132
- }, "Skip to content"))
98
+ ref: searchFormRef,
99
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("label", {
100
+ className: _SearchModule.default.label,
101
+ htmlFor: "autocomplete",
102
+ children: placeholder
103
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Autocomplete.default, {
104
+ source: (autocomplete === null || autocomplete === void 0 ? void 0 : autocomplete.suggestions) || autocomplete,
105
+ suggestionTemplate: autocomplete === null || autocomplete === void 0 ? void 0 : autocomplete.suggestionTemplate,
106
+ placeholder: placeholder,
107
+ query: query,
108
+ onNavigating: onNavigating
109
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("button", {
110
+ className: _SearchModule.default.button,
111
+ type: "submit",
112
+ "aria-label": "Perform search",
113
+ onClick: searchSubmitHandler,
114
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Search.default, {
115
+ className: _SearchModule.default.icon
116
+ })
117
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_SkipLink.default, {
118
+ to: "#".concat(skipLinkId),
119
+ children: "Skip to content"
120
+ })]
121
+ })
133
122
  );
134
123
  };
135
-
136
124
  var _default = Search;
137
- exports["default"] = _default;
125
+ exports.default = _default;
138
126
  Search.propTypes = {
139
- url: _propTypes["default"].string,
140
- autocomplete: _propTypes["default"].oneOfType([_propTypes["default"].shape({
141
- suggestions: _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].shape({
142
- Title: _propTypes["default"].string.isRequired,
143
- TitleHtml: _propTypes["default"].string,
144
- TypeAheadType: _propTypes["default"].string,
145
- Link: _propTypes["default"].string.isRequired
146
- })).isRequired, _propTypes["default"].string]),
147
- suggestionTemplate: _propTypes["default"].func
148
- }), _propTypes["default"].bool, _propTypes["default"].string, _propTypes["default"].arrayOf(_propTypes["default"].shape({
149
- Title: _propTypes["default"].string.isRequired,
150
- TitleHtml: _propTypes["default"].string,
151
- TypeAheadType: _propTypes["default"].string,
152
- Link: _propTypes["default"].string.isRequired
127
+ url: _propTypes.default.string,
128
+ autocomplete: _propTypes.default.oneOfType([_propTypes.default.shape({
129
+ suggestions: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.shape({
130
+ Title: _propTypes.default.string.isRequired,
131
+ TitleHtml: _propTypes.default.string,
132
+ TypeAheadType: _propTypes.default.string,
133
+ Link: _propTypes.default.string.isRequired
134
+ })).isRequired, _propTypes.default.string]),
135
+ suggestionTemplate: _propTypes.default.func
136
+ }), _propTypes.default.bool, _propTypes.default.string, _propTypes.default.arrayOf(_propTypes.default.shape({
137
+ Title: _propTypes.default.string.isRequired,
138
+ TitleHtml: _propTypes.default.string,
139
+ TypeAheadType: _propTypes.default.string,
140
+ Link: _propTypes.default.string.isRequired
153
141
  }))]),
154
- skipLinkId: _propTypes["default"].string,
155
- placeholder: _propTypes["default"].string,
156
- query: _propTypes["default"].string,
157
- onSearching: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].func]),
158
- onNavigating: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].func])
159
- };
160
- Search.defaultProps = {
161
- url: "/search",
162
- placeholder: "Search NICE…",
163
- query: ""
142
+ skipLinkId: _propTypes.default.string,
143
+ placeholder: _propTypes.default.string,
144
+ query: _propTypes.default.string,
145
+ onSearching: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.func]),
146
+ onNavigating: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.func])
164
147
  };
@@ -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 _Search = _interopRequireDefault(require("./Search"));
9
-
10
- exports["default"] = _Search["default"];
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ Object.defineProperty(exports, "default", {
8
+ enumerable: true,
9
+ get: function get() {
10
+ return _Search.default;
11
+ }
12
+ });
13
+ var _Search = _interopRequireDefault(require("./Search"));