@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.
@@ -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
- function Popover(_ref) {
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
- onMouseEnter: handleShowPopover,
66
- onMouseLeave: handleHidePopover,
67
- onTouchStart: handleShowPopover,
68
- onTouchEnd: handleHidePopover,
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
- onMouseEnter: handleShowPopover,
54
- onMouseLeave: handleHidePopover,
55
- onTouchStart: handleShowPopover,
56
- onTouchEnd: handleHidePopover,
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 moving to another spot. Your new favorite activity could be arround the corner.",
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.0",
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": "37d07a5f38b80bc2623d8a50af6ad59a6e070dce",
58
+ "gitHead": "bc63a12251de39e078526250b7971ad3fc1548a0",
59
59
  "module": "./esm",
60
60
  "types": "./typings/index.d.ts",
61
61
  "private": false,