@nice-digital/global-nav 4.1.734 → 4.1.738-GN-169-Dropdown-open
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 +45 -0
- package/lib/Header/Header.js +28 -0
- package/lib/Header/Nav/SubNav/SubNav.js +4 -2
- package/lib/Header/Search/Autocomplete/Autocomplete.js +2 -2
- package/lib/Header/Search/Search.js +4 -2
- package/lib/utils.js +20 -0
- package/package.json +1 -1
- package/types.d.ts +2 -0
package/README.md
CHANGED
|
@@ -42,6 +42,8 @@
|
|
|
42
42
|
- [Header.skipLinkId](#headerskiplinkid)
|
|
43
43
|
- [Header.onNavigating](#headeronnavigating)
|
|
44
44
|
- [Header.onResize](#headeronresize)
|
|
45
|
+
- [Header.onDropdownOpen](#headerondropdownopen)
|
|
46
|
+
- [Header.onDropdownClose](#headerondropdownclose)
|
|
45
47
|
- [Header.additionalSubMenuItems](#headeradditionalsubmenuitems)
|
|
46
48
|
- [Header.search](#headersearch)
|
|
47
49
|
- [Header.search.url](#headersearchurl)
|
|
@@ -408,6 +410,49 @@ var global_nav_config = {
|
|
|
408
410
|
};
|
|
409
411
|
```
|
|
410
412
|
|
|
413
|
+
###### Header.onDropdownOpen
|
|
414
|
+
|
|
415
|
+
- Type: `String`, `Function`
|
|
416
|
+
- Default: `null`
|
|
417
|
+
|
|
418
|
+
Pass an `onDropdownOpen` property to enable callback when dropdown is open.
|
|
419
|
+
Pass either a function, or the name of a function defined on `window`. E.g.:
|
|
420
|
+
|
|
421
|
+
```js
|
|
422
|
+
window.onDropdownOpenHandler = function () {
|
|
423
|
+
// Define your implementation here e.g.:
|
|
424
|
+
document.querySelector("body").classList.add("global-nav__dropdown--open");
|
|
425
|
+
};
|
|
426
|
+
|
|
427
|
+
var global_nav_config = {
|
|
428
|
+
header: {
|
|
429
|
+
onDropdownOpen: 'onDropdownOpenHandler',
|
|
430
|
+
},
|
|
431
|
+
};
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
###### Header.onDropdownClose
|
|
435
|
+
|
|
436
|
+
- Type: `String`, `Function`
|
|
437
|
+
- Default: `null`
|
|
438
|
+
|
|
439
|
+
Pass an `onDropdownClose` property to enable callback when dropdown is closed.
|
|
440
|
+
Pass either a function, or the name of a function defined on `window`. E.g.:
|
|
441
|
+
|
|
442
|
+
```js
|
|
443
|
+
window.onDropdownCloseHandler = function (e) {
|
|
444
|
+
// Define your implementation here e.g.:
|
|
445
|
+
document.querySelector("body").classList.remove("global-nav__dropdown--open")
|
|
446
|
+
|
|
447
|
+
};
|
|
448
|
+
|
|
449
|
+
var global_nav_config = {
|
|
450
|
+
header: {
|
|
451
|
+
onDropdownClose: 'onDropdownCloseHandler',
|
|
452
|
+
},
|
|
453
|
+
};
|
|
454
|
+
```
|
|
455
|
+
|
|
411
456
|
###### Header.additionalSubMenuItems
|
|
412
457
|
|
|
413
458
|
- Type: `null | Array`
|
package/lib/Header/Header.js
CHANGED
|
@@ -33,6 +33,8 @@ var _Account = _interopRequireDefault(require("./Account"));
|
|
|
33
33
|
|
|
34
34
|
var _SkipLink = _interopRequireDefault(require("./SkipLink"));
|
|
35
35
|
|
|
36
|
+
var _utils = require("../utils");
|
|
37
|
+
|
|
36
38
|
var _HeaderModule = _interopRequireDefault(require("./Header.module.scss"));
|
|
37
39
|
|
|
38
40
|
var _HeaderContext = require("./context/HeaderContext");
|
|
@@ -103,12 +105,36 @@ var Header = /*#__PURE__*/function (_Component) {
|
|
|
103
105
|
}
|
|
104
106
|
};
|
|
105
107
|
|
|
108
|
+
_proto.dropdownToggleHandler = function dropdownToggleHandler(idOfOpenDropdown) {
|
|
109
|
+
// If we've got an onDropdownOpen or onDropdownClose prop call the onDropdownOpen or onDropdownClose callback based on idOfOpenDropdown.
|
|
110
|
+
var _this$props = this.props,
|
|
111
|
+
onDropdownOpen = _this$props.onDropdownOpen,
|
|
112
|
+
onDropdownClose = _this$props.onDropdownClose;
|
|
113
|
+
|
|
114
|
+
if (onDropdownOpen && idOfOpenDropdown !== null) {
|
|
115
|
+
var onDropdownOpenCallback = (0, _utils.getCallbackFunction)(onDropdownOpen);
|
|
116
|
+
|
|
117
|
+
if (onDropdownOpenCallback) {
|
|
118
|
+
onDropdownOpenCallback();
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (onDropdownClose && idOfOpenDropdown == null) {
|
|
123
|
+
var onDropdownCloseCallback = (0, _utils.getCallbackFunction)(onDropdownClose);
|
|
124
|
+
|
|
125
|
+
if (onDropdownCloseCallback) {
|
|
126
|
+
onDropdownCloseCallback();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
|
|
106
131
|
_proto.render = function render() {
|
|
107
132
|
var _this3 = this;
|
|
108
133
|
|
|
109
134
|
return this.props.enabled !== false && /*#__PURE__*/_react["default"].createElement(_HeaderContext.HeaderContextProvider, null, /*#__PURE__*/_react["default"].createElement(_HeaderContext.HeaderContext.Consumer, null, function (_ref) {
|
|
110
135
|
(0, _newArrowCheck2["default"])(this, _this3);
|
|
111
136
|
var idOfOpenDropdown = _ref.idOfOpenDropdown;
|
|
137
|
+
this.dropdownToggleHandler(idOfOpenDropdown);
|
|
112
138
|
return /*#__PURE__*/_react["default"].createElement("span", {
|
|
113
139
|
id: "scrim",
|
|
114
140
|
className: idOfOpenDropdown !== null ? _HeaderModule["default"].scrim : undefined,
|
|
@@ -184,6 +210,8 @@ Header.propTypes = {
|
|
|
184
210
|
auth: _propTypes["default"].oneOfType([_propTypes["default"].bool, _propTypes["default"].object]),
|
|
185
211
|
onNavigating: _propTypes["default"].oneOfType([_propTypes["default"].func, _propTypes["default"].string]),
|
|
186
212
|
onResize: _propTypes["default"].oneOfType([_propTypes["default"].func, _propTypes["default"].string]),
|
|
213
|
+
onDropdownOpen: _propTypes["default"].oneOfType([_propTypes["default"].func, _propTypes["default"].string]),
|
|
214
|
+
onDropdownClose: _propTypes["default"].oneOfType([_propTypes["default"].func, _propTypes["default"].string]),
|
|
187
215
|
additionalSubMenuItems: _propTypes["default"].arrayOf(_propTypes["default"].object)
|
|
188
216
|
};
|
|
189
217
|
Header.defaultProps = {
|
|
@@ -15,6 +15,8 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
|
15
15
|
|
|
16
16
|
var _cks = _interopRequireDefault(require("./images/cks.svg"));
|
|
17
17
|
|
|
18
|
+
var _utils = require("../../../utils");
|
|
19
|
+
|
|
18
20
|
var _tracker = require("../../../tracker");
|
|
19
21
|
|
|
20
22
|
var _SubNavModule = _interopRequireDefault(require("./SubNav.module.scss"));
|
|
@@ -48,9 +50,9 @@ var SubNav = /*#__PURE__*/function (_Component) {
|
|
|
48
50
|
var eventLabel = currentTarget.textContent || currentTarget.innerText || currentTarget.ariaLabel;
|
|
49
51
|
(0, _tracker.trackEvent)(_tracker.defaultEventCategory, _tracker.headerClickEventAction, eventLabel, null, href, function () {
|
|
50
52
|
var onNavigating = this.props.onNavigating;
|
|
51
|
-
var onNavigatingCallback =
|
|
53
|
+
var onNavigatingCallback = (0, _utils.getCallbackFunction)(onNavigating);
|
|
52
54
|
|
|
53
|
-
if (
|
|
55
|
+
if (onNavigatingCallback) {
|
|
54
56
|
onNavigatingCallback({
|
|
55
57
|
element: currentTarget,
|
|
56
58
|
href: href
|
|
@@ -112,9 +112,9 @@ var Autocomplete = /*#__PURE__*/function (_Component) {
|
|
|
112
112
|
var onNavigating = this.props.onNavigating;
|
|
113
113
|
|
|
114
114
|
var eventCallback = function eventCallback() {
|
|
115
|
-
var onNavigatingCallback =
|
|
115
|
+
var onNavigatingCallback = (0, _utils.getCallbackFunction)(onNavigating);
|
|
116
116
|
|
|
117
|
-
if (
|
|
117
|
+
if (onNavigatingCallback) {
|
|
118
118
|
onNavigatingCallback({
|
|
119
119
|
element: selectedEl,
|
|
120
120
|
href: suggestion.Link
|
|
@@ -19,6 +19,8 @@ var _Autocomplete = _interopRequireDefault(require("./Autocomplete"));
|
|
|
19
19
|
|
|
20
20
|
var _SkipLink = _interopRequireDefault(require("../SkipLink"));
|
|
21
21
|
|
|
22
|
+
var _utils = require("../../utils");
|
|
23
|
+
|
|
22
24
|
var _SearchModule = _interopRequireDefault(require("./Search.module.scss"));
|
|
23
25
|
|
|
24
26
|
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); }
|
|
@@ -75,9 +77,9 @@ var Search = /*#__PURE__*/function (_Component) {
|
|
|
75
77
|
var onSearching = this.props.onSearching;
|
|
76
78
|
|
|
77
79
|
if (onSearching) {
|
|
78
|
-
var onSearchingCallback =
|
|
80
|
+
var onSearchingCallback = (0, _utils.getCallbackFunction)(onSearching);
|
|
79
81
|
|
|
80
|
-
if (
|
|
82
|
+
if (onSearchingCallback) {
|
|
81
83
|
e.preventDefault();
|
|
82
84
|
var query = document.getElementById("autocomplete").value;
|
|
83
85
|
onSearchingCallback({
|
package/lib/utils.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
|
+
exports.getCallbackFunction = getCallbackFunction;
|
|
4
5
|
exports.isIosDevice = isIosDevice;
|
|
5
6
|
|
|
6
7
|
/**
|
|
@@ -9,4 +10,23 @@ exports.isIosDevice = isIosDevice;
|
|
|
9
10
|
*/
|
|
10
11
|
function isIosDevice() {
|
|
11
12
|
return navigator && typeof navigator !== "undefined" && !!(navigator.userAgent.match(/(iPod|iPhone|iPad)/g) && navigator.userAgent.match(/AppleWebKit/g));
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* return callback function if it is available
|
|
16
|
+
* @returns {function || undefined}
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
function getCallbackFunction(funcOrFuncName) {
|
|
21
|
+
if (typeof funcOrFuncName === "function") {
|
|
22
|
+
return funcOrFuncName;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
var fn = window[funcOrFuncName];
|
|
26
|
+
|
|
27
|
+
if (typeof fn === "function") {
|
|
28
|
+
return fn;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return undefined;
|
|
12
32
|
}
|
package/package.json
CHANGED
package/types.d.ts
CHANGED
|
@@ -72,6 +72,8 @@ declare module "@nice-digital/global-nav" {
|
|
|
72
72
|
skipLinkId?: string;
|
|
73
73
|
search?: false | SearchProps;
|
|
74
74
|
auth?: NiceAccountsProviderProps | IdamProviderProps | false;
|
|
75
|
+
onDropdownOpen?: string | (() => void);
|
|
76
|
+
onDropdownClose?: string | (() => void);
|
|
75
77
|
onNavigating?: string | OnNavigatingCallback;
|
|
76
78
|
additionalSubMenuItems?: Array<AdditionalSubMenuItem>;
|
|
77
79
|
};
|