@comicrelief/component-library 5.6.0 → 5.6.1

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.
@@ -44,7 +44,9 @@ var Link = function Link(_ref) {
44
44
  if (target === null) {
45
45
  // Use our helper function to determine the raw domains to compare
46
46
  var currentDomain = (0, _internalLinkHelper.getDomain)(document.location.host);
47
- var linkDomain = (0, _internalLinkHelper.getDomain)(href);
47
+ var linkDomain = (0, _internalLinkHelper.getDomain)(href); // Additional check for applications that need more control
48
+
49
+ var isWhiteListOverridden = rest.overrideWhiteList === true;
48
50
  /**
49
51
  * If the link has no domain supplied (likely '/' or '#')
50
52
  * OR has the same domain as the current page, don't open
@@ -53,7 +55,7 @@ var Link = function Link(_ref) {
53
55
 
54
56
  var isExternalLink = linkDomain !== '' && currentDomain !== linkDomain;
55
57
  var isWhiteListed = (0, _whiteListed.default)(href);
56
- window = isExternalLink && !isWhiteListed ? '_blank' : '_self';
58
+ window = isExternalLink && (isWhiteListOverridden || !isWhiteListed) ? '_blank' : '_self';
57
59
  } else {
58
60
  window = target === 'blank' ? '_blank' : '_self';
59
61
  }
@@ -42,9 +42,9 @@ var Footer = function Footer(_ref) {
42
42
  sizeMd: "72px",
43
43
  rotate: false,
44
44
  campaign: campaign
45
- }))), /*#__PURE__*/_react.default.createElement(_Nav.default, {
45
+ }))), /*#__PURE__*/_react.default.createElement(_Nav.default, Object.assign({
46
46
  navItems: navItems
47
- }), /*#__PURE__*/_react.default.createElement(_Footer.FooterCopyright, null, /*#__PURE__*/_react.default.createElement(_Text.default, {
47
+ }, rest)), /*#__PURE__*/_react.default.createElement(_Footer.FooterCopyright, null, /*#__PURE__*/_react.default.createElement(_Text.default, {
48
48
  tag: "p",
49
49
  color: "grey"
50
50
  }, footerCopy)))));
@@ -53,7 +53,8 @@ var Footer = function Footer(_ref) {
53
53
  Footer.defaultProps = {
54
54
  navItems: {},
55
55
  footerCopy: '',
56
- campaign: 'Comic Relief'
56
+ campaign: 'Comic Relief',
57
+ overrideWhiteList: false
57
58
  };
58
59
  var _default = Footer;
59
60
  exports.default = _default;
@@ -4,5 +4,12 @@
4
4
  import data from './data/data';
5
5
  import footerCopy from './data/footerCopy';
6
6
 
7
- <Footer navItems={data} footerCopy={footerCopy.copy} campaign="Comic Relief" />;
7
+ <>
8
+ <p>Standard footer</p>
9
+ <Footer navItems={data} footerCopy={footerCopy.copy} campaign="Comic Relief" />
10
+
11
+ <p>Overrides whitelist functionality for external usage</p>
12
+ <Footer navItems={data} footerCopy={footerCopy.copy} campaign="Comic Relief" overrideWhiteList />
13
+ </>
14
+
8
15
  ```
@@ -11,6 +11,8 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/es
11
11
 
12
12
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
13
13
 
14
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectWithoutProperties"));
15
+
14
16
  var _react = _interopRequireWildcard(require("react"));
15
17
 
16
18
  var _Text = _interopRequireDefault(require("../../../Atoms/Text/Text"));
@@ -23,12 +25,15 @@ var _internalLinkHelper = require("../../../../utils/internalLinkHelper");
23
25
 
24
26
  var _Nav = require("./Nav.style");
25
27
 
28
+ var _excluded = ["navItems"];
29
+
26
30
  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); }
27
31
 
28
32
  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
33
 
30
34
  var FooterNav = function FooterNav(_ref) {
31
- var navItems = _ref.navItems;
35
+ var navItems = _ref.navItems,
36
+ rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
32
37
  var menuGroups = navItems.menuGroups;
33
38
 
34
39
  var _useState = (0, _react.useState)(false),
@@ -96,14 +101,14 @@ var FooterNav = function FooterNav(_ref) {
96
101
  }, !isSmallBreakpoint ? /*#__PURE__*/_react.default.createElement(_Text.default, {
97
102
  color: "white",
98
103
  weight: "bold"
99
- }, group.title) : /*#__PURE__*/_react.default.createElement(_Nav.NavLink, {
104
+ }, group.title) : /*#__PURE__*/_react.default.createElement(_Nav.NavLink, Object.assign({
100
105
  href: "#",
101
106
  inline: true,
102
107
  "aria-expanded": !!isSubMenuOpen[group.id],
103
108
  "aria-haspopup": "true",
104
109
  role: "button",
105
110
  onClick: toggleSubMenu(group.id)
106
- }, /*#__PURE__*/_react.default.createElement(_Text.default, {
111
+ }, rest), /*#__PURE__*/_react.default.createElement(_Text.default, {
107
112
  color: "white"
108
113
  }, group.title)), group.links && group.links.length > 0 && /*#__PURE__*/_react.default.createElement(_Nav.SubNavMenu, {
109
114
  role: "list",
@@ -117,11 +122,11 @@ var FooterNav = function FooterNav(_ref) {
117
122
  return /*#__PURE__*/_react.default.createElement(_Nav.SubNavItem, {
118
123
  key: thisUrl,
119
124
  column: group.links.length % 2 === 0 && group.links.length > 2
120
- }, /*#__PURE__*/_react.default.createElement(_Nav.SubNavLink, {
125
+ }, /*#__PURE__*/_react.default.createElement(_Nav.SubNavLink, Object.assign({
121
126
  href: thisUrl,
122
127
  inline: true,
123
128
  role: "menuitem"
124
- }, /*#__PURE__*/_react.default.createElement(_Text.default, {
129
+ }, rest), /*#__PURE__*/_react.default.createElement(_Text.default, {
125
130
  color: "white"
126
131
  }, child.title)));
127
132
  })));
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@comicrelief/component-library",
3
3
  "author": "Comic Relief Engineering Team",
4
- "version": "5.6.0",
4
+ "version": "5.6.1",
5
5
  "main": "dist/index.js",
6
6
  "license": "ISC",
7
7
  "jest": {
@@ -28,15 +28,18 @@ const Link = ({
28
28
  const currentDomain = getDomain(document.location.host);
29
29
  const linkDomain = getDomain(href);
30
30
 
31
+ // Additional check for applications that need more control
32
+ const isWhiteListOverridden = rest.overrideWhiteList === true;
33
+
31
34
  /**
32
35
  * If the link has no domain supplied (likely '/' or '#')
33
36
  * OR has the same domain as the current page, don't open
34
37
  * in a new tab
35
38
  */
36
39
  const isExternalLink = linkDomain !== '' && (currentDomain !== linkDomain);
37
-
38
40
  const isWhiteListed = whiteListed(href);
39
- window = isExternalLink && !isWhiteListed ? '_blank' : '_self';
41
+
42
+ window = isExternalLink && (isWhiteListOverridden || !isWhiteListed) ? '_blank' : '_self';
40
43
  } else {
41
44
  window = target === 'blank' ? '_blank' : '_self';
42
45
  }
@@ -31,7 +31,7 @@ const Footer = ({
31
31
  <Logo sizeSm="48px" sizeMd="72px" rotate={false} campaign={campaign} />
32
32
  </Brand>
33
33
  </FooterBranding>
34
- <FooterNav navItems={navItems} />
34
+ <FooterNav navItems={navItems} {...rest} />
35
35
  <FooterCopyright>
36
36
  <Text tag="p" color="grey">
37
37
  {footerCopy}
@@ -46,13 +46,15 @@ const Footer = ({
46
46
  Footer.propTypes = {
47
47
  navItems: PropTypes.objectOf(PropTypes.shape),
48
48
  footerCopy: PropTypes.string,
49
- campaign: PropTypes.string
49
+ campaign: PropTypes.string,
50
+ overrideWhiteList: PropTypes.bool
50
51
  };
51
52
 
52
53
  Footer.defaultProps = {
53
54
  navItems: {},
54
55
  footerCopy: '',
55
- campaign: 'Comic Relief'
56
+ campaign: 'Comic Relief',
57
+ overrideWhiteList: false
56
58
  };
57
59
 
58
60
  export default Footer;
@@ -4,5 +4,12 @@
4
4
  import data from './data/data';
5
5
  import footerCopy from './data/footerCopy';
6
6
 
7
- <Footer navItems={data} footerCopy={footerCopy.copy} campaign="Comic Relief" />;
7
+ <>
8
+ <p>Standard footer</p>
9
+ <Footer navItems={data} footerCopy={footerCopy.copy} campaign="Comic Relief" />
10
+
11
+ <p>Overrides whitelist functionality for external usage</p>
12
+ <Footer navItems={data} footerCopy={footerCopy.copy} campaign="Comic Relief" overrideWhiteList />
13
+ </>
14
+
8
15
  ```
@@ -16,7 +16,7 @@ import {
16
16
  SubNavLink
17
17
  } from './Nav.style';
18
18
 
19
- const FooterNav = ({ navItems }) => {
19
+ const FooterNav = ({ navItems, ...rest }) => {
20
20
  const { menuGroups } = navItems;
21
21
  const [isExpandable] = useState(false);
22
22
  const [isSubMenuOpen, setIsSubMenuOpen] = useState({});
@@ -78,6 +78,7 @@ const FooterNav = ({ navItems }) => {
78
78
  aria-haspopup="true"
79
79
  role="button"
80
80
  onClick={toggleSubMenu(group.id)}
81
+ {...rest}
81
82
  >
82
83
  <Text color="white">{group.title}</Text>
83
84
  </NavLink>
@@ -103,7 +104,7 @@ const FooterNav = ({ navItems }) => {
103
104
  group.links.length % 2 === 0 && group.links.length > 2
104
105
  }
105
106
  >
106
- <SubNavLink href={thisUrl} inline role="menuitem">
107
+ <SubNavLink href={thisUrl} inline role="menuitem" {...rest}>
107
108
  <Text color="white">{child.title}</Text>
108
109
  </SubNavLink>
109
110
  </SubNavItem>