@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.
- package/README.md +18 -55
- package/lib/Footer/Footer.js +31 -55
- package/lib/Footer/Legal/Legal.js +76 -71
- package/lib/Footer/Legal/index.js +10 -7
- package/lib/Footer/Pages/Pages.js +34 -54
- package/lib/Footer/Pages/Pages.module.scss +1 -1
- package/lib/Footer/Pages/index.js +10 -7
- package/lib/Footer/Pages/links.json +2 -5
- package/lib/Footer/Services/Services.js +65 -86
- package/lib/Footer/Services/Services.module.scss +1 -1
- package/lib/Footer/Services/index.js +10 -7
- package/lib/Footer/Social/Social.js +46 -57
- package/lib/Footer/Social/index.js +10 -7
- package/lib/Footer/index.js +10 -7
- package/lib/Header/Account/Account.js +87 -109
- package/lib/Header/Account/index.js +10 -7
- package/lib/Header/Account/nice-accounts.js +7 -12
- package/lib/Header/Header.js +345 -171
- package/lib/Header/Header.module.scss +2 -2
- package/lib/Header/Nav/Dropdown/Components/AboutUs.js +216 -105
- package/lib/Header/Nav/Dropdown/Components/BNF.js +120 -75
- package/lib/Header/Nav/Dropdown/Components/BNFc.js +115 -73
- package/lib/Header/Nav/Dropdown/Components/Button.js +11 -14
- package/lib/Header/Nav/Dropdown/Components/CKS.js +115 -73
- package/lib/Header/Nav/Dropdown/Components/Grid.js +16 -22
- package/lib/Header/Nav/Dropdown/Components/Guidance.js +244 -128
- package/lib/Header/Nav/Dropdown/Components/LifeSciences.js +169 -108
- package/lib/Header/Nav/Dropdown/Components/StandardsAndIndicators.js +83 -45
- package/lib/Header/Nav/Dropdown/Components/index.js +46 -24
- package/lib/Header/Nav/Dropdown/Dropdown.js +48 -63
- package/lib/Header/Nav/Dropdown/Dropdown.module.scss +1 -1
- package/lib/Header/Nav/Dropdown/index.js +10 -7
- package/lib/Header/Nav/Nav.js +84 -102
- package/lib/Header/Nav/Nav.module.scss +2 -4
- package/lib/Header/Nav/NavLinks/NavLinks.js +118 -137
- package/lib/Header/Nav/NavLinks/NavLinks.module.scss +1 -1
- package/lib/Header/Nav/NavLinks/index.js +10 -7
- package/lib/Header/Nav/SubNav/SubNav.js +54 -90
- package/lib/Header/Nav/SubNav/index.js +10 -7
- package/lib/Header/Nav/__mocks__/services.json +3 -3
- package/lib/Header/Nav/index.js +10 -7
- package/lib/Header/OldIEMessage/OldIEMessage.js +65 -67
- package/lib/Header/OldIEMessage/ie.js +14 -0
- package/lib/Header/OldIEMessage/index.js +10 -7
- package/lib/Header/Search/Autocomplete/Autocomplete.js +169 -194
- package/lib/Header/Search/Autocomplete/Autocomplete.module.scss +9 -1
- package/lib/Header/Search/Autocomplete/index.js +10 -7
- package/lib/Header/Search/Autocomplete/suggester/index.js +21 -28
- package/lib/Header/Search/Autocomplete/suggester/phrase-finder.js +13 -14
- package/lib/Header/Search/Autocomplete/suggester/term-finder.js +18 -21
- package/lib/Header/Search/Autocomplete/suggester/tokenizer.js +12 -17
- package/lib/Header/Search/Search.js +73 -90
- package/lib/Header/Search/index.js +10 -7
- package/lib/Header/SkipLink/SkipLink.js +24 -62
- package/lib/Header/SkipLink/SkipLink.module.scss +5 -1
- package/lib/Header/SkipLink/index.js +10 -7
- package/lib/Header/_header-settings.scss +0 -2
- package/lib/Header/context/HeaderContext.js +28 -54
- package/lib/Header/index.js +10 -7
- package/lib/Main/BackToTop/BackToTop.js +22 -25
- package/lib/Main/BackToTop/BackToTop.module.scss +1 -4
- package/lib/Main/Main.js +22 -26
- package/lib/Main/index.js +10 -7
- package/lib/TrackedLink/TrackedLink.js +48 -74
- package/lib/TrackedLink/index.js +10 -7
- package/lib/hooks/useEscapeKeydown.js +8 -21
- package/lib/hooks/useIsClient.js +20 -0
- package/lib/index.js +22 -12
- package/lib/renderer.js +21 -30
- package/lib/tracker/index.js +8 -25
- package/lib/utils.js +4 -7
- package/package.json +68 -65
- package/types.d.ts +1 -0
- 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
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
var
|
|
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
|
|
15
|
-
|
|
16
|
-
|
|
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
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}(
|
|
71
|
-
|
|
72
|
-
|
|
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
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
var
|
|
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
|
-
|
|
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=\""
|
|
33
|
+
return "<a href=\"".concat(suggestion.Link, "\">").concat(suggestion.TitleHtml || suggestion.Title, "</a>");
|
|
83
34
|
};
|
|
84
|
-
|
|
85
|
-
var
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
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
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
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
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
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
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
84
|
+
(0, _react.useEffect)(function () {
|
|
85
|
+
if (sourceProp === false || debouncedQueryText === "" || debouncedQueryText.length < minAutocompleteLength) {
|
|
86
|
+
setSuggestions([]);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
137
89
|
var source;
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
source = this.props.source;
|
|
90
|
+
if (Array.isArray(sourceProp)) {
|
|
91
|
+
source = sourceProp;
|
|
141
92
|
}
|
|
142
|
-
|
|
143
|
-
|
|
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
|
-
|
|
98
|
+
setSuggestions((0, _suggester.suggester)(source, debouncedQueryText, maxResults));
|
|
150
99
|
return;
|
|
151
|
-
}
|
|
152
|
-
|
|
100
|
+
}
|
|
153
101
|
|
|
154
|
-
|
|
155
|
-
|
|
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
|
-
}
|
|
158
|
-
(0,
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
}.
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
|
|
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
|
|
213
|
-
Title: _propTypes
|
|
214
|
-
TitleHtml: _propTypes
|
|
215
|
-
TypeAheadType: _propTypes
|
|
216
|
-
Link: _propTypes
|
|
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
|
|
219
|
-
placeholder: _propTypes
|
|
220
|
-
query: _propTypes
|
|
221
|
-
onNavigating: _propTypes
|
|
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
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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"));
|