@gympass/yoga 7.79.0 → 7.79.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.
- package/cjs/Popover/web/Popover.js +36 -17
- package/esm/Popover/web/Popover.js +37 -21
- package/esm/Popover/web/Popover.test.js +24 -4
- package/package.json +2 -2
|
@@ -9,9 +9,11 @@ var _propTypes = require("prop-types");
|
|
|
9
9
|
|
|
10
10
|
var _yoga = require("@gympass/yoga");
|
|
11
11
|
|
|
12
|
+
var _hooks = require("../../hooks");
|
|
13
|
+
|
|
12
14
|
var _styles = require("./styles");
|
|
13
15
|
|
|
14
|
-
var _excluded = ["children", "title", "description", "position", "width", "height", "zIndex", "a11yId"];
|
|
16
|
+
var _excluded = ["children", "title", "description", "position", "width", "height", "zIndex", "a11yId", "hover"];
|
|
15
17
|
|
|
16
18
|
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); }
|
|
17
19
|
|
|
@@ -21,7 +23,7 @@ function _extends() { _extends = Object.assign ? Object.assign.bind() : function
|
|
|
21
23
|
|
|
22
24
|
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
23
25
|
|
|
24
|
-
|
|
26
|
+
var Popover = /*#__PURE__*/_react["default"].forwardRef(function (_ref, forwardedRef) {
|
|
25
27
|
var children = _ref.children,
|
|
26
28
|
title = _ref.title,
|
|
27
29
|
description = _ref.description,
|
|
@@ -30,12 +32,28 @@ function Popover(_ref) {
|
|
|
30
32
|
height = _ref.height,
|
|
31
33
|
zIndex = _ref.zIndex,
|
|
32
34
|
a11yId = _ref.a11yId,
|
|
35
|
+
hover = _ref.hover,
|
|
33
36
|
props = _objectWithoutPropertiesLoose(_ref, _excluded);
|
|
34
37
|
|
|
38
|
+
var ref = (0, _hooks.useCombinedRefs)(forwardedRef);
|
|
39
|
+
|
|
35
40
|
var _useState = (0, _react.useState)(false),
|
|
36
41
|
isPopoverOpen = _useState[0],
|
|
37
42
|
setIsPopoverOpen = _useState[1];
|
|
38
43
|
|
|
44
|
+
(0, _react.useEffect)(function () {
|
|
45
|
+
var handleClickOutside = function handleClickOutside(event) {
|
|
46
|
+
if (ref.current && !ref.current.contains(event.target)) {
|
|
47
|
+
setIsPopoverOpen(false);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
document.addEventListener('click', handleClickOutside, true);
|
|
52
|
+
return function () {
|
|
53
|
+
document.removeEventListener('click', handleClickOutside, true);
|
|
54
|
+
};
|
|
55
|
+
}, [setIsPopoverOpen]);
|
|
56
|
+
|
|
39
57
|
var handleShowPopover = function handleShowPopover() {
|
|
40
58
|
setIsPopoverOpen(true);
|
|
41
59
|
};
|
|
@@ -44,6 +62,13 @@ function Popover(_ref) {
|
|
|
44
62
|
setIsPopoverOpen(false);
|
|
45
63
|
};
|
|
46
64
|
|
|
65
|
+
var toggleOpenPopover = function toggleOpenPopover(event) {
|
|
66
|
+
event.preventDefault();
|
|
67
|
+
setIsPopoverOpen(function (current) {
|
|
68
|
+
return !current;
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
|
|
47
72
|
return /*#__PURE__*/_react["default"].createElement(_styles.Wrapper, props, isPopoverOpen && /*#__PURE__*/_react["default"].createElement(_styles.PopoverContainer, _extends({}, a11yId && {
|
|
48
73
|
id: a11yId
|
|
49
74
|
}, {
|
|
@@ -62,22 +87,14 @@ function Popover(_ref) {
|
|
|
62
87
|
}, description)), /*#__PURE__*/_react["default"].createElement(_styles.PopoverButton, _extends({}, a11yId && {
|
|
63
88
|
'aria-describedby': a11yId
|
|
64
89
|
}, {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
onClick: function onClick(event) {
|
|
90
|
+
ref: ref,
|
|
91
|
+
onMouseEnter: hover ? handleShowPopover : undefined,
|
|
92
|
+
onMouseLeave: hover ? handleHidePopover : undefined,
|
|
93
|
+
onClick: !hover ? toggleOpenPopover : function (event) {
|
|
70
94
|
return event.preventDefault();
|
|
71
|
-
},
|
|
72
|
-
onKeyDown: function onKeyDown(event) {
|
|
73
|
-
if (event.key === 'Enter') {
|
|
74
|
-
setIsPopoverOpen(function (current) {
|
|
75
|
-
return !current;
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
95
|
}
|
|
79
96
|
}), children));
|
|
80
|
-
}
|
|
97
|
+
});
|
|
81
98
|
|
|
82
99
|
Popover.propTypes = {
|
|
83
100
|
a11yId: _propTypes.string,
|
|
@@ -89,7 +106,8 @@ Popover.propTypes = {
|
|
|
89
106
|
position: (0, _propTypes.oneOf)(['bottom-start', 'bottom-center', 'bottom-end', 'left-start', 'left-center', 'left-end', 'top-start', 'top-center', 'top-end', 'right-start', 'right-center', 'right-end']),
|
|
90
107
|
width: _propTypes.number,
|
|
91
108
|
height: _propTypes.number,
|
|
92
|
-
zIndex: _propTypes.number
|
|
109
|
+
zIndex: _propTypes.number,
|
|
110
|
+
hover: _propTypes.bool
|
|
93
111
|
};
|
|
94
112
|
Popover.defaultProps = {
|
|
95
113
|
a11yId: undefined,
|
|
@@ -97,7 +115,8 @@ Popover.defaultProps = {
|
|
|
97
115
|
position: 'bottom-center',
|
|
98
116
|
width: 265,
|
|
99
117
|
height: 200,
|
|
100
|
-
zIndex: 1
|
|
118
|
+
zIndex: 1,
|
|
119
|
+
hover: false
|
|
101
120
|
};
|
|
102
121
|
var _default = Popover;
|
|
103
122
|
exports["default"] = _default;
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
var _excluded = ["children", "title", "description", "position", "width", "height", "zIndex", "a11yId"];
|
|
1
|
+
var _excluded = ["children", "title", "description", "position", "width", "height", "zIndex", "a11yId", "hover"];
|
|
2
2
|
|
|
3
3
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
4
4
|
|
|
5
5
|
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
6
6
|
|
|
7
|
-
import React, { useState } from 'react';
|
|
8
|
-
import { node, number, oneOf, string } from 'prop-types';
|
|
7
|
+
import React, { useState, useEffect } from 'react';
|
|
8
|
+
import { bool, node, number, oneOf, string } from 'prop-types';
|
|
9
9
|
import { Text } from '@gympass/yoga';
|
|
10
|
+
import { useCombinedRefs } from '../../hooks';
|
|
10
11
|
import { PopoverContainer, PopoverButton, Wrapper } from './styles';
|
|
11
|
-
|
|
12
|
-
function Popover(_ref) {
|
|
12
|
+
var Popover = /*#__PURE__*/React.forwardRef(function (_ref, forwardedRef) {
|
|
13
13
|
var children = _ref.children,
|
|
14
14
|
title = _ref.title,
|
|
15
15
|
description = _ref.description,
|
|
@@ -18,12 +18,28 @@ function Popover(_ref) {
|
|
|
18
18
|
height = _ref.height,
|
|
19
19
|
zIndex = _ref.zIndex,
|
|
20
20
|
a11yId = _ref.a11yId,
|
|
21
|
+
hover = _ref.hover,
|
|
21
22
|
props = _objectWithoutPropertiesLoose(_ref, _excluded);
|
|
22
23
|
|
|
24
|
+
var ref = useCombinedRefs(forwardedRef);
|
|
25
|
+
|
|
23
26
|
var _useState = useState(false),
|
|
24
27
|
isPopoverOpen = _useState[0],
|
|
25
28
|
setIsPopoverOpen = _useState[1];
|
|
26
29
|
|
|
30
|
+
useEffect(function () {
|
|
31
|
+
var handleClickOutside = function handleClickOutside(event) {
|
|
32
|
+
if (ref.current && !ref.current.contains(event.target)) {
|
|
33
|
+
setIsPopoverOpen(false);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
document.addEventListener('click', handleClickOutside, true);
|
|
38
|
+
return function () {
|
|
39
|
+
document.removeEventListener('click', handleClickOutside, true);
|
|
40
|
+
};
|
|
41
|
+
}, [setIsPopoverOpen]);
|
|
42
|
+
|
|
27
43
|
var handleShowPopover = function handleShowPopover() {
|
|
28
44
|
setIsPopoverOpen(true);
|
|
29
45
|
};
|
|
@@ -32,6 +48,13 @@ function Popover(_ref) {
|
|
|
32
48
|
setIsPopoverOpen(false);
|
|
33
49
|
};
|
|
34
50
|
|
|
51
|
+
var toggleOpenPopover = function toggleOpenPopover(event) {
|
|
52
|
+
event.preventDefault();
|
|
53
|
+
setIsPopoverOpen(function (current) {
|
|
54
|
+
return !current;
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
|
|
35
58
|
return /*#__PURE__*/React.createElement(Wrapper, props, isPopoverOpen && /*#__PURE__*/React.createElement(PopoverContainer, _extends({}, a11yId && {
|
|
36
59
|
id: a11yId
|
|
37
60
|
}, {
|
|
@@ -50,23 +73,14 @@ function Popover(_ref) {
|
|
|
50
73
|
}, description)), /*#__PURE__*/React.createElement(PopoverButton, _extends({}, a11yId && {
|
|
51
74
|
'aria-describedby': a11yId
|
|
52
75
|
}, {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
onClick: function onClick(event) {
|
|
76
|
+
ref: ref,
|
|
77
|
+
onMouseEnter: hover ? handleShowPopover : undefined,
|
|
78
|
+
onMouseLeave: hover ? handleHidePopover : undefined,
|
|
79
|
+
onClick: !hover ? toggleOpenPopover : function (event) {
|
|
58
80
|
return event.preventDefault();
|
|
59
|
-
},
|
|
60
|
-
onKeyDown: function onKeyDown(event) {
|
|
61
|
-
if (event.key === 'Enter') {
|
|
62
|
-
setIsPopoverOpen(function (current) {
|
|
63
|
-
return !current;
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
81
|
}
|
|
67
82
|
}), children));
|
|
68
|
-
}
|
|
69
|
-
|
|
83
|
+
});
|
|
70
84
|
Popover.propTypes = {
|
|
71
85
|
a11yId: string,
|
|
72
86
|
children: node.isRequired,
|
|
@@ -77,7 +91,8 @@ Popover.propTypes = {
|
|
|
77
91
|
position: oneOf(['bottom-start', 'bottom-center', 'bottom-end', 'left-start', 'left-center', 'left-end', 'top-start', 'top-center', 'top-end', 'right-start', 'right-center', 'right-end']),
|
|
78
92
|
width: number,
|
|
79
93
|
height: number,
|
|
80
|
-
zIndex: number
|
|
94
|
+
zIndex: number,
|
|
95
|
+
hover: bool
|
|
81
96
|
};
|
|
82
97
|
Popover.defaultProps = {
|
|
83
98
|
a11yId: undefined,
|
|
@@ -85,6 +100,7 @@ Popover.defaultProps = {
|
|
|
85
100
|
position: 'bottom-center',
|
|
86
101
|
width: 265,
|
|
87
102
|
height: 200,
|
|
88
|
-
zIndex: 1
|
|
103
|
+
zIndex: 1,
|
|
104
|
+
hover: false
|
|
89
105
|
};
|
|
90
106
|
export default Popover;
|
|
@@ -1,19 +1,39 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { render } from '@testing-library/react';
|
|
2
|
+
import { render, fireEvent } from '@testing-library/react';
|
|
3
3
|
import { Info } from '@gympass/yoga-icons';
|
|
4
4
|
import { ThemeProvider, Popover } from '../..';
|
|
5
5
|
describe('<Popover />', function () {
|
|
6
|
-
it('should match snapshot', function () {
|
|
6
|
+
it('should match snapshot when hover is false', function () {
|
|
7
7
|
var _render = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Popover, {
|
|
8
8
|
title: "Making wellbeing universal",
|
|
9
|
-
description: "Try
|
|
9
|
+
description: "Try click on the button. Your new favorite activity could be arround the corner.",
|
|
10
10
|
width: 265
|
|
11
11
|
}, /*#__PURE__*/React.createElement(Info, {
|
|
12
12
|
width: 26,
|
|
13
13
|
height: 26
|
|
14
14
|
})))),
|
|
15
|
-
container = _render.container
|
|
15
|
+
container = _render.container,
|
|
16
|
+
getByRole = _render.getByRole;
|
|
17
|
+
|
|
18
|
+
var popoverButton = getByRole('button');
|
|
19
|
+
fireEvent.click(popoverButton);
|
|
20
|
+
expect(container).toMatchSnapshot();
|
|
21
|
+
});
|
|
22
|
+
it('should match snapshot when hover is true', function () {
|
|
23
|
+
var _render2 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Popover, {
|
|
24
|
+
title: "Making wellbeing universal",
|
|
25
|
+
description: "Try moving to another spot. Your new favorite activity could be arround the corner.",
|
|
26
|
+
width: 265,
|
|
27
|
+
hover: true
|
|
28
|
+
}, /*#__PURE__*/React.createElement(Info, {
|
|
29
|
+
width: 26,
|
|
30
|
+
height: 26
|
|
31
|
+
})))),
|
|
32
|
+
container = _render2.container,
|
|
33
|
+
getByRole = _render2.getByRole;
|
|
16
34
|
|
|
35
|
+
var popoverButton = getByRole('button');
|
|
36
|
+
fireEvent.mouseOver(popoverButton);
|
|
17
37
|
expect(container).toMatchSnapshot();
|
|
18
38
|
});
|
|
19
39
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gympass/yoga",
|
|
3
|
-
"version": "7.79.
|
|
3
|
+
"version": "7.79.1",
|
|
4
4
|
"description": "Gympass component library",
|
|
5
5
|
"main": "./cjs",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"react-native": "0.72.3",
|
|
56
56
|
"styled-components": "^4.4.0"
|
|
57
57
|
},
|
|
58
|
-
"gitHead": "
|
|
58
|
+
"gitHead": "bc63a12251de39e078526250b7971ad3fc1548a0",
|
|
59
59
|
"module": "./esm",
|
|
60
60
|
"types": "./typings/index.d.ts",
|
|
61
61
|
"private": false,
|