linear-react-components-ui 0.4.75-beta.8 → 0.4.76-rc.0

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.
Files changed (125) hide show
  1. package/.eslintrc.js +2 -5
  2. package/.tool-versions +1 -0
  3. package/.vscode/settings.json +8 -9
  4. package/README.md +23 -0
  5. package/config/jest/cssTransform.js +14 -0
  6. package/config/jest/fileTransform.js +12 -0
  7. package/config/jest/storageMock.js +40 -0
  8. package/jest.config.js +18 -0
  9. package/lib/alerts/alert.spec.js +133 -0
  10. package/lib/assets/styles/dropdown.scss +25 -2
  11. package/lib/assets/styles/effects.scss +12 -0
  12. package/lib/assets/styles/floatMenu.scss +0 -1
  13. package/lib/assets/styles/multiSelect.scss +105 -0
  14. package/lib/assets/styles/panel.scss +0 -1
  15. package/lib/assets/styles/periodpicker.scss +65 -0
  16. package/lib/assets/styles/popover.scss +9 -11
  17. package/lib/assets/styles/progress.scss +8 -1
  18. package/lib/assets/styles/select.scss +1 -0
  19. package/lib/assets/styles/table.scss +13 -5
  20. package/lib/assets/styles/tabs.scss +77 -43
  21. package/lib/avatar/avatar.spec.js +190 -0
  22. package/lib/avatar/index.js +6 -2
  23. package/lib/badge/badge.spec.js +127 -0
  24. package/lib/badge/index.js +3 -5
  25. package/lib/buttons/buttons.spec.js +504 -0
  26. package/lib/calendar/calendar.spec.js +171 -0
  27. package/lib/checkbox/checkbox.spec.js +215 -0
  28. package/lib/checkbox/index.js +1 -0
  29. package/lib/dialog/Custom.js +7 -1
  30. package/lib/dialog/base/index.js +18 -6
  31. package/lib/dialog/dialog.spec.js +488 -0
  32. package/lib/dialog/form/index.js +23 -4
  33. package/lib/drawer/Drawer.js +3 -0
  34. package/lib/drawer/Drawer.spec.js +258 -0
  35. package/lib/drawer/Header.js +4 -1
  36. package/lib/drawer/index.js +4 -1
  37. package/lib/dropdown/Popup.js +1 -0
  38. package/lib/dropdown/dropdown.spec.js +168 -0
  39. package/lib/dropdown/withDropdown.js +10 -4
  40. package/lib/fieldset/fieldset.spec.js +329 -0
  41. package/lib/form/Field.js +2 -0
  42. package/lib/form/FieldNumber.js +10 -2
  43. package/lib/form/FieldPeriod.js +100 -0
  44. package/lib/form/form.spec.js +285 -0
  45. package/lib/form/helpers.js +9 -1
  46. package/lib/form/index.js +76 -10
  47. package/lib/form/withFieldHOC.js +2 -0
  48. package/lib/form/withFormSecurity.js +106 -0
  49. package/lib/gridlayout/GridRow.js +1 -1
  50. package/lib/gridlayout/gridLayout.spec.js +169 -0
  51. package/lib/icons/helper.js +16 -0
  52. package/lib/icons/icons.spec.js +86 -0
  53. package/lib/icons/index.js +2 -0
  54. package/lib/inputs/base/InputTextBase.js +15 -5
  55. package/lib/inputs/base/base.spec.js +690 -0
  56. package/lib/inputs/color/color_input.spec.js +174 -0
  57. package/lib/inputs/color/index.js +2 -2
  58. package/lib/inputs/date/date.spec.js +344 -0
  59. package/lib/inputs/date/index.js +7 -6
  60. package/lib/inputs/mask/Cpf.js +9 -9
  61. package/lib/inputs/mask/input_mask.spec.js +590 -0
  62. package/lib/inputs/multiSelect/ActionButtons.js +68 -0
  63. package/lib/inputs/multiSelect/Dropdown.js +200 -0
  64. package/lib/inputs/multiSelect/helper.js +18 -0
  65. package/lib/inputs/multiSelect/index.js +343 -0
  66. package/lib/inputs/number/BaseNumber.js +1 -1
  67. package/lib/inputs/number/index.js +7 -5
  68. package/lib/inputs/number/numberfield.spec.js +215 -0
  69. package/lib/inputs/period/Dialog.js +38 -0
  70. package/lib/inputs/period/Dropdown.js +90 -0
  71. package/lib/inputs/period/PeriodList.js +79 -0
  72. package/lib/inputs/period/helper.js +118 -0
  73. package/lib/inputs/period/index.js +490 -0
  74. package/lib/inputs/search/search_input.spec.js +209 -0
  75. package/lib/inputs/select/Dropdown.js +4 -4
  76. package/lib/inputs/select/index.js +26 -3
  77. package/lib/inputs/select/multiple/index.js +9 -7
  78. package/lib/inputs/select/select.spec.js +391 -0
  79. package/lib/inputs/select/simple/index.js +30 -18
  80. package/lib/inputs/text/textfield.spec.js +215 -0
  81. package/lib/inputs/textarea/textarea.spec.js +59 -0
  82. package/lib/internals/withTooltip.js +83 -82
  83. package/lib/labelMessages/index.js +3 -2
  84. package/lib/labelMessages/labelMessages.spec.js +176 -0
  85. package/lib/labels/label.spec.js +162 -0
  86. package/lib/list/Item.js +3 -3
  87. package/lib/list/index.js +21 -10
  88. package/lib/list/list.spec.js +611 -0
  89. package/lib/menus/float/MenuItem.js +25 -8
  90. package/lib/menus/float/float-menu.spec.js +221 -0
  91. package/lib/menus/sidenav/index.js +7 -3
  92. package/lib/menus/sidenav/popup_menu_search/index.js +1 -1
  93. package/lib/menus/sidenav/sidenav.spec.js +312 -0
  94. package/lib/noPermission/index.js +2 -1
  95. package/lib/panel/panel.spec.js +216 -0
  96. package/lib/popover/index.js +2 -1
  97. package/lib/popover/popover.spec.js +146 -0
  98. package/lib/progress/Bar.js +40 -9
  99. package/lib/progress/index.js +12 -4
  100. package/lib/progress/progress.spec.js +86 -0
  101. package/lib/radio/radio.spec.js +189 -0
  102. package/lib/spinner/SpinnerLoading.js +14 -24
  103. package/lib/spinner/index.js +6 -1
  104. package/lib/spinner/spinner.spec.js +152 -0
  105. package/lib/split/Split.js +10 -12
  106. package/lib/split/split.spec.js +151 -0
  107. package/lib/table/Header.js +3 -1
  108. package/lib/table/Row.js +2 -5
  109. package/lib/table/index.js +1 -4
  110. package/lib/table/table.spec.js +352 -0
  111. package/lib/tabs/DropdownItems.js +84 -0
  112. package/lib/tabs/Menu.js +18 -5
  113. package/lib/tabs/MenuItems.js +7 -7
  114. package/lib/tabs/Panel.js +1 -3
  115. package/lib/tabs/index.js +126 -17
  116. package/lib/tabs/tabs.spec.js +346 -0
  117. package/lib/toolbar/index.js +8 -4
  118. package/lib/toolbar/toolbar.spec.js +394 -0
  119. package/lib/tooltip/index.js +13 -0
  120. package/lib/tooltip/tooltip.spec.js +203 -0
  121. package/lib/treeview/Node.js +55 -32
  122. package/lib/treeview/index.js +30 -3
  123. package/lib/treeview/treeview.spec.js +261 -0
  124. package/package.json +19 -9
  125. package/.DS_Store +0 -0
@@ -0,0 +1,258 @@
1
+ "use strict";
2
+
3
+ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4
+
5
+ var _react = _interopRequireDefault(require("react"));
6
+
7
+ var _react2 = require("@testing-library/react");
8
+
9
+ require("@testing-library/jest-dom/extend-expect");
10
+
11
+ require("babel-polyfill");
12
+
13
+ var _ = _interopRequireWildcard(require("."));
14
+
15
+ var _icons = _interopRequireDefault(require("../icons"));
16
+
17
+ var _avatar = _interopRequireDefault(require("../avatar"));
18
+
19
+ var _storageMock = _interopRequireWildcard(require("../../../config/jest/storageMock"));
20
+
21
+ 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); }
22
+
23
+ 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; }
24
+
25
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
26
+
27
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
28
+
29
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
30
+
31
+ function _extends() { _extends = Object.assign || 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); }
32
+
33
+ var drawerMock = function drawerMock(drawerProps, drawerHeaderProps) {
34
+ return /*#__PURE__*/_react["default"].createElement(_["default"], _extends({
35
+ position: "right",
36
+ customClass: "customMockClass",
37
+ customClassForContent: "CustomContentMockClass",
38
+ style: {
39
+ backgroundColor: '#FFF'
40
+ },
41
+ overlay: true
42
+ }, drawerProps), /*#__PURE__*/_react["default"].createElement(_.DrawerHeader, _extends({
43
+ title: "Header Test",
44
+ subTitle: "Subtitle test",
45
+ titleIcon: "user",
46
+ customClass: "customMockHeaderClass",
47
+ showCloseButton: true
48
+ }, drawerHeaderProps)), /*#__PURE__*/_react["default"].createElement(_.DrawerContent, {
49
+ style: {
50
+ background: '#333',
51
+ marginTop: 10
52
+ }
53
+ }, "DrawerContent", /*#__PURE__*/_react["default"].createElement(_avatar["default"], null)));
54
+ };
55
+
56
+ describe('Drawer', function () {
57
+ describe('Drawer Container', function () {
58
+ var DrawerTestId = 'drawercontainer-component';
59
+ var DrawerContentTestId = 'drawercontent';
60
+ it('should render the drawer component with children', function () {
61
+ var _render = (0, _react2.render)(drawerMock()),
62
+ getByTestId = _render.getByTestId;
63
+
64
+ expect(getByTestId(DrawerTestId)).toHaveTextContent('DrawerContent');
65
+ });
66
+ it('should change the position of Drawer', function () {
67
+ var _render2 = (0, _react2.render)(drawerMock()),
68
+ getByTestId = _render2.getByTestId;
69
+
70
+ expect(getByTestId(DrawerTestId)).toHaveClass('right');
71
+ });
72
+ it('should apply customClass', function () {
73
+ var _render3 = (0, _react2.render)(drawerMock()),
74
+ getByTestId = _render3.getByTestId;
75
+
76
+ expect(getByTestId(DrawerTestId)).toHaveClass('customMockClass');
77
+ });
78
+ it('should apply customClassContent', function () {
79
+ var _render4 = (0, _react2.render)(drawerMock()),
80
+ getByTestId = _render4.getByTestId;
81
+
82
+ expect(getByTestId(DrawerContentTestId)).toHaveClass('CustomContentMockClass');
83
+ });
84
+ it('should apply inline style', function () {
85
+ var _render5 = (0, _react2.render)(drawerMock()),
86
+ getByTestId = _render5.getByTestId;
87
+
88
+ expect(getByTestId(DrawerTestId)).toHaveStyle('background-color: #FFF');
89
+ });
90
+ it('should render overlay over the page', function () {
91
+ (0, _react2.render)(drawerMock());
92
+ expect(_react2.screen.getByTestId('drawer-overlay')).toBeInTheDocument();
93
+ });
94
+ it('should close the Drawer when press Escape', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
95
+ var mockHandlerClose, _render6, container;
96
+
97
+ return regeneratorRuntime.wrap(function _callee$(_context) {
98
+ while (1) {
99
+ switch (_context.prev = _context.next) {
100
+ case 0:
101
+ mockHandlerClose = jest.fn();
102
+ _render6 = (0, _react2.render)(drawerMock({
103
+ handlerClose: mockHandlerClose,
104
+ closeOnEsc: true
105
+ })), container = _render6.container;
106
+
107
+ _react2.fireEvent.keyUp(container, {
108
+ key: 'Escape',
109
+ code: 'Escape',
110
+ keyCode: 27,
111
+ charCode: 27
112
+ });
113
+
114
+ expect(mockHandlerClose).toHaveBeenCalled();
115
+
116
+ case 4:
117
+ case "end":
118
+ return _context.stop();
119
+ }
120
+ }
121
+ }, _callee);
122
+ })));
123
+ });
124
+ describe('Drawer Header', function () {
125
+ var CloseButtonTestId = 'header-closebutton';
126
+ var mockHandlerClose = jest.fn();
127
+
128
+ var mockImage = /*#__PURE__*/_react["default"].createElement("img", {
129
+ src: "https://devfront.erplinear.com.br/auth/static/media/auth_bg.96d98c39.jpg",
130
+ alt: "imagem teste"
131
+ });
132
+
133
+ var DrawerHeaderMock = drawerMock({
134
+ handlerClose: mockHandlerClose
135
+ });
136
+ it('should renders correctly DrawerHeader', function () {
137
+ var _render7 = (0, _react2.render)(DrawerHeaderMock),
138
+ getByText = _render7.getByText;
139
+
140
+ expect(getByText('Header Test')).toBeInTheDocument();
141
+ });
142
+ it('should render titleContent', function () {
143
+ var _render8 = (0, _react2.render)(drawerMock({}, {
144
+ titleContent: mockImage
145
+ })),
146
+ getByAltText = _render8.getByAltText;
147
+
148
+ expect(getByAltText('imagem teste')).toBeInTheDocument();
149
+ });
150
+ it('should render titleRightContent', function () {
151
+ var _render9 = (0, _react2.render)(drawerMock({}, {
152
+ titleRightContent: mockImage
153
+ })),
154
+ getByAltText = _render9.getByAltText;
155
+
156
+ expect(getByAltText('imagem teste')).toBeInTheDocument();
157
+ });
158
+ it('should render subtitle', function () {
159
+ var _render10 = (0, _react2.render)(DrawerHeaderMock),
160
+ getByText = _render10.getByText;
161
+
162
+ expect(getByText('Subtitle test')).toBeInTheDocument();
163
+ });
164
+ it('should render subTitleContent', function () {
165
+ var _render11 = (0, _react2.render)(drawerMock({}, {
166
+ subTitleContent: mockImage
167
+ })),
168
+ getByAltText = _render11.getByAltText;
169
+
170
+ expect(getByAltText('imagem teste')).toBeInTheDocument();
171
+ });
172
+ it('should render title icon', function () {
173
+ var _render12 = (0, _react2.render)(DrawerHeaderMock),
174
+ getByTestId = _render12.getByTestId;
175
+
176
+ expect(getByTestId('icon-header')).toBeInTheDocument();
177
+ expect(getByTestId('icon-header')).toHaveClass('icon-header');
178
+ });
179
+ it('should render icon', function () {
180
+ var _render13 = (0, _react2.render)(drawerMock({}, {
181
+ icon: /*#__PURE__*/_react["default"].createElement(_icons["default"], {
182
+ name: "user"
183
+ }),
184
+ showCloseButton: true
185
+ })),
186
+ getByTestId = _render13.getByTestId;
187
+
188
+ expect(getByTestId('icon-header')).toBeInTheDocument();
189
+ expect(getByTestId('icon-header')).toHaveClass('icon-header');
190
+ });
191
+ it('should render close button', function () {
192
+ var _render14 = (0, _react2.render)(DrawerHeaderMock),
193
+ getByTestId = _render14.getByTestId;
194
+
195
+ expect(getByTestId(CloseButtonTestId)).toBeInTheDocument();
196
+ expect(getByTestId(CloseButtonTestId)).toHaveClass('closebutton');
197
+ });
198
+ it('should fire click in close button', function () {
199
+ var _render15 = (0, _react2.render)(DrawerHeaderMock),
200
+ getByTestId = _render15.getByTestId;
201
+
202
+ _react2.fireEvent.click(getByTestId(CloseButtonTestId));
203
+
204
+ expect(mockHandlerClose).toHaveBeenCalledTimes(1);
205
+ });
206
+ it('should apply customClass', function () {
207
+ var _render16 = (0, _react2.render)(DrawerHeaderMock),
208
+ getByTestId = _render16.getByTestId;
209
+
210
+ expect(getByTestId('drawerheader')).toHaveClass('customMockHeaderClass');
211
+ });
212
+ });
213
+ describe('Drawer Content', function () {
214
+ it('should DrawerContent renders correctly', function () {
215
+ var _render17 = (0, _react2.render)(drawerMock()),
216
+ getByText = _render17.getByText,
217
+ getByTestId = _render17.getByTestId;
218
+
219
+ expect(getByText('DrawerContent')).toBeInTheDocument();
220
+ expect(getByTestId('avatar')).toBeInTheDocument();
221
+ });
222
+ it('should apply inline style', function () {
223
+ var _render18 = (0, _react2.render)(drawerMock()),
224
+ getByText = _render18.getByText;
225
+
226
+ expect(getByText('DrawerContent')).toHaveStyle('background-color: #333; margin-top: 10px;');
227
+ });
228
+ });
229
+ describe('Permissions', function () {
230
+ var defineStorageMock = function defineStorageMock() {
231
+ Object.defineProperty(window, 'sessionStorage', {
232
+ value: (0, _storageMock["default"])()
233
+ });
234
+ };
235
+
236
+ it('should check permission', function () {
237
+ defineStorageMock();
238
+
239
+ var _render19 = (0, _react2.render)(drawerMock({
240
+ permissionAttr: (0, _storageMock.permissionAttrMockAuthorized)('hideContent')
241
+ })),
242
+ container = _render19.container;
243
+
244
+ expect(container.querySelector('.no-permission-component')).not.toBeInTheDocument();
245
+ });
246
+ it('should render non-permission', function () {
247
+ defineStorageMock();
248
+
249
+ var _render20 = (0, _react2.render)(drawerMock({
250
+ permissionAttr: (0, _storageMock.permissionAttrMockUnauthorized)('hideContent')
251
+ })),
252
+ getByText = _render20.getByText;
253
+
254
+ expect(getByText('Acesso Negado')).toBeInTheDocument();
255
+ expect(getByText('Você não tem permissão para acessar este conteúdo. Consulte o Administrador do sistema!')).toBeInTheDocument();
256
+ });
257
+ });
258
+ });
@@ -23,6 +23,7 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
23
23
 
24
24
  var getCloseButton = function getCloseButton(handlerClose) {
25
25
  return /*#__PURE__*/_react["default"].createElement("span", {
26
+ "data-testid": "header-closebutton",
26
27
  className: "closebutton",
27
28
  onClick: handlerClose,
28
29
  onKeyPress: null,
@@ -34,6 +35,7 @@ var getCloseButton = function getCloseButton(handlerClose) {
34
35
  var getIcon = function getIcon(titleIcon, icon) {
35
36
  if (titleIcon || icon) {
36
37
  return /*#__PURE__*/_react["default"].createElement("span", {
38
+ "data-testid": "icon-header",
37
39
  className: "icon-header"
38
40
  }, icon || /*#__PURE__*/_react["default"].createElement(_icons["default"], {
39
41
  name: titleIcon,
@@ -60,7 +62,8 @@ var Header = function Header(_ref) {
60
62
  handlerClose = _useContext.handlerClose;
61
63
 
62
64
  return /*#__PURE__*/_react["default"].createElement("div", {
63
- className: "drawerheader ".concat(customClass)
65
+ className: "drawerheader ".concat(customClass),
66
+ "data-testid": "drawerheader"
64
67
  }, /*#__PURE__*/_react["default"].createElement("div", {
65
68
  className: "left"
66
69
  }, /*#__PURE__*/_react["default"].createElement("div", {
@@ -25,7 +25,10 @@ var _Content = _interopRequireDefault(require("./Content"));
25
25
 
26
26
  require("../assets/styles/drawers.scss");
27
27
 
28
+ var _withFormSecurity = _interopRequireDefault(require("../form/withFormSecurity"));
29
+
28
30
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
29
31
 
30
- var _default = _Drawer["default"];
32
+ var _default = (0, _withFormSecurity["default"])(_Drawer["default"]);
33
+
31
34
  exports["default"] = _default;
@@ -35,6 +35,7 @@ var body = document.getElementsByTagName('body')[0];
35
35
  var DropdownPopup = function DropdownPopup(props) {
36
36
  var popup = (0, _react.useRef)(document.createElement('div'));
37
37
  popup.current.className = "dropdown-component ".concat(props.customClassForDropdown);
38
+ popup.current.dataset.testid = 'dropdown-component';
38
39
  popup.current.style = getCalendarDropdownStyle(props);
39
40
  (0, _react.useEffect)(function () {
40
41
  body.appendChild(popup.current);
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+
3
+ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4
+
5
+ var _react = require("@testing-library/react");
6
+
7
+ var _react2 = _interopRequireWildcard(require("react"));
8
+
9
+ require("babel-polyfill");
10
+
11
+ var _withDropdown = _interopRequireDefault(require("./withDropdown"));
12
+
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
14
+
15
+ 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); }
16
+
17
+ 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; }
18
+
19
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
20
+
21
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
22
+
23
+ function _extends() { _extends = Object.assign || 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); }
24
+
25
+ var WhappedComponent = function WhappedComponent(props) {
26
+ var btnRef = (0, _react2.useRef)(null);
27
+ return /*#__PURE__*/_react2["default"].createElement(_react2.Fragment, null, /*#__PURE__*/_react2["default"].createElement("button", {
28
+ ref: btnRef,
29
+ onClick: function onClick() {
30
+ return props.showDropdown();
31
+ }
32
+ }, "OPEN"), props.getDropdownPopup(btnRef.current));
33
+ };
34
+
35
+ var DropdownTest = (0, _withDropdown["default"])(WhappedComponent);
36
+
37
+ var renderDropdownTestMock = function renderDropdownTestMock(props) {
38
+ return /*#__PURE__*/_react2["default"].createElement(DropdownTest, _extends({
39
+ dropdown: true
40
+ }, props), /*#__PURE__*/_react2["default"].createElement("div", null, "DROP_DOWN_CONTENT"));
41
+ };
42
+
43
+ describe('withDropdown', function () {
44
+ describe('Default', function () {
45
+ it('should render dropdown', function () {
46
+ var _render = (0, _react.render)(renderDropdownTestMock()),
47
+ container = _render.container,
48
+ getByTestId = _render.getByTestId,
49
+ getByText = _render.getByText;
50
+
51
+ _react.fireEvent.click(container.firstChild);
52
+
53
+ expect(getByTestId('dropdown-component')).toBeInTheDocument();
54
+ expect(getByText('DROP_DOWN_CONTENT')).toBeInTheDocument();
55
+ });
56
+ it('should apply customClass in dropdown', function () {
57
+ var _render2 = (0, _react.render)(renderDropdownTestMock({
58
+ customClassForDropdown: 'customClass'
59
+ })),
60
+ container = _render2.container,
61
+ getByTestId = _render2.getByTestId;
62
+
63
+ _react.fireEvent.click(container.firstChild);
64
+
65
+ expect(getByTestId('dropdown-component')).toBeInTheDocument();
66
+ expect(getByTestId('dropdown-component')).toHaveClass('customClass');
67
+ });
68
+ it('should control dropdown open with dropdownOpened prop', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
69
+ var _render3, rerender, getByTestId;
70
+
71
+ return regeneratorRuntime.wrap(function _callee$(_context) {
72
+ while (1) {
73
+ switch (_context.prev = _context.next) {
74
+ case 0:
75
+ _render3 = (0, _react.render)(renderDropdownTestMock()), rerender = _render3.rerender, getByTestId = _render3.getByTestId;
76
+ rerender(renderDropdownTestMock({
77
+ dropdownOpened: true
78
+ }));
79
+ _context.next = 4;
80
+ return (0, _react.waitFor)(function () {
81
+ return expect(getByTestId('dropdown-component')).toBeInTheDocument();
82
+ }, {
83
+ timeout: 3000
84
+ });
85
+
86
+ case 4:
87
+ case "end":
88
+ return _context.stop();
89
+ }
90
+ }
91
+ }, _callee);
92
+ })));
93
+ it('should closeDropdownOnClickOutside', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
94
+ var _render4, getByText, queryByTestId;
95
+
96
+ return regeneratorRuntime.wrap(function _callee2$(_context2) {
97
+ while (1) {
98
+ switch (_context2.prev = _context2.next) {
99
+ case 0:
100
+ _render4 = (0, _react.render)( /*#__PURE__*/_react2["default"].createElement("div", null, /*#__PURE__*/_react2["default"].createElement("a", null, "OUTSIDE_CLICK"), renderDropdownTestMock())), getByText = _render4.getByText, queryByTestId = _render4.queryByTestId;
101
+
102
+ _react.fireEvent.click(getByText('OPEN'));
103
+
104
+ _context2.next = 4;
105
+ return (0, _react.waitFor)(function () {
106
+ return expect(queryByTestId('dropdown-component')).toBeInTheDocument();
107
+ }, {
108
+ timeout: 3000
109
+ });
110
+
111
+ case 4:
112
+ _react.fireEvent.click(getByText('OUTSIDE_CLICK'));
113
+
114
+ _context2.next = 7;
115
+ return (0, _react.waitFor)(function () {
116
+ return expect(queryByTestId('dropdown-component')).not.toBeInTheDocument();
117
+ }, {
118
+ timeout: 3000
119
+ });
120
+
121
+ case 7:
122
+ case "end":
123
+ return _context2.stop();
124
+ }
125
+ }
126
+ }, _callee2);
127
+ })));
128
+ it('should not closeDropdownOnClickOutside', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {
129
+ var _render5, getByText, queryByTestId;
130
+
131
+ return regeneratorRuntime.wrap(function _callee3$(_context3) {
132
+ while (1) {
133
+ switch (_context3.prev = _context3.next) {
134
+ case 0:
135
+ // eslint-disable-next-line function-paren-newline
136
+ _render5 = (0, _react.render)( /*#__PURE__*/_react2["default"].createElement("div", null, /*#__PURE__*/_react2["default"].createElement("a", null, "OUTSIDE_CLICK"), renderDropdownTestMock({
137
+ closeDropdownOnClickOutside: false
138
+ })) // eslint-disable-next-line function-paren-newline
139
+ ), getByText = _render5.getByText, queryByTestId = _render5.queryByTestId;
140
+
141
+ _react.fireEvent.click(getByText('OPEN'));
142
+
143
+ _context3.next = 4;
144
+ return (0, _react.waitFor)(function () {
145
+ return expect(queryByTestId('dropdown-component')).toBeInTheDocument();
146
+ }, {
147
+ timeout: 3000
148
+ });
149
+
150
+ case 4:
151
+ _react.fireEvent.click(getByText('OUTSIDE_CLICK'));
152
+
153
+ _context3.next = 7;
154
+ return (0, _react.waitFor)(function () {
155
+ return expect(queryByTestId('dropdown-component')).toBeInTheDocument();
156
+ }, {
157
+ timeout: 3000
158
+ });
159
+
160
+ case 7:
161
+ case "end":
162
+ return _context3.stop();
163
+ }
164
+ }
165
+ }, _callee3);
166
+ })));
167
+ });
168
+ });
@@ -46,12 +46,14 @@ var getDisplayName = function getDisplayName(Component) {
46
46
  var withDropdown = function withDropdown(WrappedComponent) {
47
47
  var EnhancedComponent = function EnhancedComponent(props) {
48
48
  var dropdownOpened = props.dropdownOpened,
49
+ showDropdown = props.showDropdown,
49
50
  dropdown = props.dropdown,
50
51
  closeDropdownOnClickOutside = props.closeDropdownOnClickOutside,
51
52
  customClassForDropdown = props.customClassForDropdown,
52
53
  children = props.children,
53
54
  dropdownAlign = props.dropdownAlign,
54
- isFloatMenu = props.isFloatMenu;
55
+ isFloatMenu = props.isFloatMenu,
56
+ isDropdownOpened = props.isDropdownOpened;
55
57
 
56
58
  var _useState = (0, _react.useState)(dropdownOpened),
57
59
  _useState2 = _slicedToArray(_useState, 2),
@@ -124,10 +126,10 @@ var withDropdown = function withDropdown(WrappedComponent) {
124
126
  getDropdownPopup: function getDropdownPopup(targetRef) {
125
127
  return getDropdown(targetRef);
126
128
  },
127
- showDropdown: function showDropdown() {
129
+ showDropdown: !showDropdown ? function () {
128
130
  return setOpened(!opened);
129
- },
130
- isDropdownOpened: opened
131
+ } : showDropdown,
132
+ isDropdownOpened: isDropdownOpened || opened
131
133
  };
132
134
  if (!dropdown) return /*#__PURE__*/_react["default"].createElement(WrappedComponent, props);
133
135
  return /*#__PURE__*/_react["default"].createElement(WithDropdownContext.Provider, {
@@ -142,6 +144,8 @@ var withDropdown = function withDropdown(WrappedComponent) {
142
144
  closeDropdownOnClickOutside: _propTypes["default"].bool,
143
145
  dropdownAlign: _propTypes["default"].oneOf(['left', 'right']),
144
146
  dropdownOpened: _propTypes["default"].bool,
147
+ isDropdownOpened: _propTypes["default"].bool,
148
+ showDropdown: _propTypes["default"].func,
145
149
  isFloatMenu: _propTypes["default"].bool
146
150
  };
147
151
  EnhancedComponent.defaultProps = {
@@ -151,6 +155,8 @@ var withDropdown = function withDropdown(WrappedComponent) {
151
155
  closeDropdownOnClickOutside: true,
152
156
  dropdownAlign: 'left',
153
157
  dropdownOpened: false,
158
+ isDropdownOpened: false,
159
+ showDropdown: undefined,
154
160
  isFloatMenu: false
155
161
  };
156
162
  EnhancedComponent.displayName = "withDropdown(".concat(getDisplayName(WrappedComponent), ")");