@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 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`
@@ -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 = onNavigating && (typeof onNavigating === "function" ? onNavigating : window[onNavigating]);
53
+ var onNavigatingCallback = (0, _utils.getCallbackFunction)(onNavigating);
52
54
 
53
- if (typeof onNavigatingCallback === "function") {
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 = onNavigating && (typeof onNavigating === "function" ? onNavigating : window[onNavigating]);
115
+ var onNavigatingCallback = (0, _utils.getCallbackFunction)(onNavigating);
116
116
 
117
- if (typeof onNavigatingCallback === "function") {
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 = typeof onSearching === "function" ? onSearching : window[onSearching];
80
+ var onSearchingCallback = (0, _utils.getCallbackFunction)(onSearching);
79
81
 
80
- if (typeof onSearchingCallback === "function") {
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nice-digital/global-nav",
3
- "version": "4.1.734",
3
+ "version": "4.1.738-GN-169-Dropdown-open",
4
4
  "description": "Global header and footer components for NICE digital services",
5
5
  "main": "lib/index.js",
6
6
  "types": "./types.d.ts",
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
  };