@reltio/components 1.4.2071 → 1.4.2072

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 (174) hide show
  1. package/AttributesView/AttributesView.js +1 -1
  2. package/ColumnsSettings/components/ColumnsSettingsPopup/ColumnsSettingsPopup.d.ts +2 -3
  3. package/ColumnsSettings/helpers.d.ts +3 -1
  4. package/ColumnsSettings/types.d.ts +8 -0
  5. package/CommentsContainer/CommentsContainer.js +1 -1
  6. package/ConfigureColumnsPopup/ConfigureColumnsPopup.d.ts +23 -40
  7. package/ConfigureColumnsPopup/ConfigureColumnsPopup.js +6 -26
  8. package/EditModeAttributesList/EditModeAttributesList.js +1 -1
  9. package/EditModeAttributesPager/EditModeAttributesPager.test.js +1 -1
  10. package/EditModeAttributesPager/components/AttributeRenderer/AttributeRenderer.js +1 -1
  11. package/MetadataTypesSelector/MetadataTypesSelector.d.ts +2 -1
  12. package/MetadataTypesSelector/components/SelectMetadataTypesList/SelectMetadataTypesList.d.ts +5 -6
  13. package/MoreAttributesButton/useMoreAttributesItems.d.ts +1 -1
  14. package/ReadOnlyAttributesList/ReadOnlyAttributesList.js +1 -1
  15. package/ReadOnlyAttributesPager/ReadOnlyAttributesPager.js +1 -1
  16. package/ReadOnlyAttributesView/ReadOnlyAttributesView.js +1 -1
  17. package/ScrollableTabs/ScrollableTabs.test.js +69 -19
  18. package/SearchHighlighter/SearchHighlighter.test.js +18 -7
  19. package/SelectAttributesList/SelectAttributesList.d.ts +11 -6
  20. package/SelectAttributesList/SelectAttributesList.js +5 -2
  21. package/SelectorWithOnlyOptionAutoSelect/SelectorWithOnlyOptionAutoSelect.test.js +109 -60
  22. package/SidePanelContentHeader/SidePanelContentHeader.js +2 -2
  23. package/SidePanelContentHeader/SidePanelContentHeader.test.js +104 -0
  24. package/SidePanelEmptyState/SidePanelEmptyState.js +1 -1
  25. package/SidePanelEmptyState/SidePanelEmptyState.test.js +24 -0
  26. package/SimpleAttribute/SimpleAttribute.js +1 -1
  27. package/SimpleAttribute/SimpleAttribute.test.js +155 -80
  28. package/SimpleAttributeEditor/SimpleAttributeEditor.test.js +339 -330
  29. package/SimpleAttributeEditor/useAttributeValuePermissions.js +1 -1
  30. package/SimpleDropDownSelector/SimpleDropDownSelector.test.js +86 -10
  31. package/SimpleDropDownSelector/components/DropDownPlaceholder/DropDownPlaceholder.js +1 -1
  32. package/SimpleDropDownSelector/components/DropDownValue/DropDownValue.js +1 -1
  33. package/SimpleMatchRulesBlock/SimpleMatchRulesBlock.test.js +128 -32
  34. package/SmallIconButton/SmallIconButton.test.js +98 -25
  35. package/TableWithBars/TableWithBars.test.js +98 -60
  36. package/TableWithBars/components/AttributeCellRenderer/AttributeCellRenderer.js +1 -1
  37. package/TableWithBars/components/HeadCellRenderer/HeadCellRenderer.js +1 -1
  38. package/Tags/Tags.d.ts +0 -1
  39. package/Tags/Tags.test.js +8 -7
  40. package/TransitiveMatchBlock/TransitiveMatchBlock.test.js +78 -22
  41. package/TransitiveMatchRule/TransitiveMatchRule.test.js +78 -37
  42. package/TransitiveMatchRulesTooltip/TransitiveMatchRulesTooltip.js +1 -1
  43. package/TransitiveMatchRulesTooltip/TransitiveMatchRulesTooltip.test.js +12 -18
  44. package/UploadFileButton/UploadFileButton.d.ts +2 -2
  45. package/UploadFileButton/UploadFileButton.test.js +199 -0
  46. package/UploadImageDialog/UploadImageDialog.test.js +1 -0
  47. package/UploadImageDialog/components/DividerWithText/DividerWithText.js +1 -1
  48. package/UploadImageDialog/components/ErrorSnackbar/ErrorSnackbar.test.js +80 -22
  49. package/UploadImageDialog/components/ImageByUrlField/ImageByUrlField.js +1 -1
  50. package/UploadImageDialog/components/ImageByUrlField/ImageByUrlField.test.js +162 -49
  51. package/ValueChip/ValueChip.test.js +7 -23
  52. package/VirtualGroupedList/VirtualGroupedList.d.ts +19 -31
  53. package/VirtualGroupedList/VirtualGroupedList.js +11 -36
  54. package/VirtualGroupedList/VirtualGroupedList.test.js +224 -0
  55. package/VirtualGroupedList/helpers.d.ts +7 -2
  56. package/VirtualGroupedList/helpers.js +3 -1
  57. package/VirtualGroupedList/index.d.ts +1 -1
  58. package/VirtualGroupedList/types.d.ts +10 -6
  59. package/VirtualGroupedList/useScrollToFocusItem.d.ts +8 -5
  60. package/WhiteSearchInput/{WhiteSearchInput.spec.js → WhiteSearchInput.test.js} +3 -8
  61. package/cjs/AttributesView/AttributesView.js +2 -2
  62. package/cjs/ColumnsSettings/components/ColumnsSettingsPopup/ColumnsSettingsPopup.d.ts +2 -3
  63. package/cjs/ColumnsSettings/helpers.d.ts +3 -1
  64. package/cjs/ColumnsSettings/types.d.ts +8 -0
  65. package/cjs/ColumnsSettings/types.js +2 -0
  66. package/cjs/CommentsContainer/CommentsContainer.js +1 -1
  67. package/cjs/ConfigureColumnsPopup/ConfigureColumnsPopup.d.ts +23 -40
  68. package/cjs/ConfigureColumnsPopup/ConfigureColumnsPopup.js +6 -26
  69. package/cjs/EditModeAttributesList/EditModeAttributesList.js +2 -2
  70. package/cjs/EditModeAttributesPager/EditModeAttributesPager.test.js +2 -2
  71. package/cjs/EditModeAttributesPager/components/AttributeRenderer/AttributeRenderer.js +2 -2
  72. package/cjs/MetadataTypesSelector/MetadataTypesSelector.d.ts +2 -1
  73. package/cjs/MetadataTypesSelector/components/SelectMetadataTypesList/SelectMetadataTypesList.d.ts +5 -6
  74. package/cjs/MoreAttributesButton/useMoreAttributesItems.d.ts +1 -1
  75. package/cjs/ReadOnlyAttributesList/ReadOnlyAttributesList.js +2 -2
  76. package/cjs/ReadOnlyAttributesPager/ReadOnlyAttributesPager.js +2 -2
  77. package/cjs/ReadOnlyAttributesView/ReadOnlyAttributesView.js +2 -2
  78. package/cjs/ScrollableTabs/ScrollableTabs.test.js +69 -19
  79. package/cjs/SearchHighlighter/SearchHighlighter.test.js +18 -7
  80. package/cjs/SelectAttributesList/SelectAttributesList.d.ts +11 -6
  81. package/cjs/SelectAttributesList/SelectAttributesList.js +5 -2
  82. package/cjs/SelectorWithOnlyOptionAutoSelect/SelectorWithOnlyOptionAutoSelect.test.js +109 -60
  83. package/cjs/SidePanelContentHeader/SidePanelContentHeader.js +2 -2
  84. package/cjs/SidePanelContentHeader/SidePanelContentHeader.test.js +109 -0
  85. package/cjs/SidePanelEmptyState/SidePanelEmptyState.js +1 -1
  86. package/cjs/SidePanelEmptyState/SidePanelEmptyState.test.js +29 -0
  87. package/cjs/SimpleAttribute/SimpleAttribute.js +1 -1
  88. package/cjs/SimpleAttribute/SimpleAttribute.test.js +155 -80
  89. package/cjs/SimpleAttributeEditor/SimpleAttributeEditor.test.js +338 -352
  90. package/cjs/SimpleAttributeEditor/useAttributeValuePermissions.js +2 -2
  91. package/cjs/SimpleDropDownSelector/SimpleDropDownSelector.test.js +86 -10
  92. package/cjs/SimpleDropDownSelector/components/DropDownPlaceholder/DropDownPlaceholder.js +1 -1
  93. package/cjs/SimpleDropDownSelector/components/DropDownValue/DropDownValue.js +1 -1
  94. package/cjs/SimpleMatchRulesBlock/SimpleMatchRulesBlock.test.js +127 -31
  95. package/cjs/SmallIconButton/SmallIconButton.test.js +98 -25
  96. package/cjs/TableWithBars/TableWithBars.test.js +98 -60
  97. package/cjs/TableWithBars/components/AttributeCellRenderer/AttributeCellRenderer.js +1 -1
  98. package/cjs/TableWithBars/components/HeadCellRenderer/HeadCellRenderer.js +1 -1
  99. package/cjs/Tags/Tags.d.ts +0 -1
  100. package/cjs/Tags/Tags.test.js +8 -7
  101. package/cjs/TransitiveMatchBlock/TransitiveMatchBlock.test.js +77 -21
  102. package/cjs/TransitiveMatchRule/TransitiveMatchRule.test.js +78 -37
  103. package/cjs/TransitiveMatchRulesTooltip/TransitiveMatchRulesTooltip.js +1 -1
  104. package/cjs/TransitiveMatchRulesTooltip/TransitiveMatchRulesTooltip.test.js +12 -18
  105. package/cjs/UploadFileButton/UploadFileButton.d.ts +2 -2
  106. package/cjs/UploadFileButton/UploadFileButton.test.js +204 -0
  107. package/cjs/UploadImageDialog/UploadImageDialog.test.js +1 -0
  108. package/cjs/UploadImageDialog/components/DividerWithText/DividerWithText.js +1 -1
  109. package/cjs/UploadImageDialog/components/ErrorSnackbar/ErrorSnackbar.test.js +80 -22
  110. package/cjs/UploadImageDialog/components/ImageByUrlField/ImageByUrlField.js +1 -1
  111. package/cjs/UploadImageDialog/components/ImageByUrlField/ImageByUrlField.test.js +162 -49
  112. package/cjs/ValueChip/ValueChip.test.js +7 -23
  113. package/cjs/VirtualGroupedList/VirtualGroupedList.d.ts +19 -31
  114. package/cjs/VirtualGroupedList/VirtualGroupedList.js +11 -36
  115. package/cjs/VirtualGroupedList/VirtualGroupedList.test.js +252 -0
  116. package/cjs/VirtualGroupedList/helpers.d.ts +7 -2
  117. package/cjs/VirtualGroupedList/helpers.js +3 -1
  118. package/cjs/VirtualGroupedList/index.d.ts +1 -1
  119. package/cjs/VirtualGroupedList/types.d.ts +10 -6
  120. package/cjs/VirtualGroupedList/useScrollToFocusItem.d.ts +8 -5
  121. package/cjs/WhiteSearchInput/{WhiteSearchInput.spec.js → WhiteSearchInput.test.js} +3 -8
  122. package/cjs/features/crosswalks/hooks/useAttributeActions.test.js +24 -25
  123. package/cjs/features/crosswalks/hooks/useCrosswalkActions.test.js +10 -11
  124. package/cjs/features/workflow/hooks/useChangeRequest.test.js +5 -6
  125. package/cjs/hooks/useCommentsEntitiesMap/useCommentsEntitiesMap.test.js +8 -9
  126. package/cjs/hooks/useKeyboardNavigation/useKeyboardNavigation.d.ts +9 -13
  127. package/features/crosswalks/hooks/useAttributeActions.test.js +1 -2
  128. package/features/crosswalks/hooks/useCrosswalkActions.test.js +1 -2
  129. package/features/workflow/hooks/useChangeRequest.test.js +1 -2
  130. package/hooks/useCommentsEntitiesMap/useCommentsEntitiesMap.test.js +1 -2
  131. package/hooks/useKeyboardNavigation/useKeyboardNavigation.d.ts +9 -13
  132. package/package.json +1 -1
  133. package/SidePanelContentHeader/SidePanelContentHeader.spec.js +0 -49
  134. package/SidePanelEmptyState/SidePanelEmptyState.spec.js +0 -24
  135. package/SimpleAttributeEditor/SimpleAttributeEditorWithoutPermissions.test.js +0 -103
  136. package/SimpleDropDownSelector/components/DropDownPlaceholder/DropDownPlaceholder.test.js +0 -13
  137. package/TableWithBars/components/AttributeCellRenderer/AttributeCellRenderer.test.js +0 -21
  138. package/TableWithBars/components/HeadCellRenderer/HeadCellRenderer.test.js +0 -20
  139. package/UploadFileButton/UploadFileButton.spec.js +0 -219
  140. package/UploadImageDialog/components/DividerWithText/DividerWithText.test.js +0 -9
  141. package/VirtualGroupedList/VirtualGroupedList.spec.js +0 -282
  142. package/cjs/SidePanelContentHeader/SidePanelContentHeader.spec.js +0 -54
  143. package/cjs/SidePanelEmptyState/SidePanelEmptyState.spec.d.ts +0 -1
  144. package/cjs/SidePanelEmptyState/SidePanelEmptyState.spec.js +0 -29
  145. package/cjs/SimpleAttributeEditor/SimpleAttributeEditorWithoutPermissions.test.d.ts +0 -1
  146. package/cjs/SimpleAttributeEditor/SimpleAttributeEditorWithoutPermissions.test.js +0 -108
  147. package/cjs/SimpleDropDownSelector/components/DropDownPlaceholder/DropDownPlaceholder.test.d.ts +0 -1
  148. package/cjs/SimpleDropDownSelector/components/DropDownPlaceholder/DropDownPlaceholder.test.js +0 -18
  149. package/cjs/TableWithBars/components/AttributeCellRenderer/AttributeCellRenderer.test.d.ts +0 -1
  150. package/cjs/TableWithBars/components/AttributeCellRenderer/AttributeCellRenderer.test.js +0 -26
  151. package/cjs/TableWithBars/components/HeadCellRenderer/HeadCellRenderer.test.d.ts +0 -1
  152. package/cjs/TableWithBars/components/HeadCellRenderer/HeadCellRenderer.test.js +0 -25
  153. package/cjs/UploadFileButton/UploadFileButton.spec.d.ts +0 -1
  154. package/cjs/UploadFileButton/UploadFileButton.spec.js +0 -224
  155. package/cjs/UploadImageDialog/components/DividerWithText/DividerWithText.test.d.ts +0 -1
  156. package/cjs/UploadImageDialog/components/DividerWithText/DividerWithText.test.js +0 -14
  157. package/cjs/VirtualGroupedList/VirtualGroupedList.spec.d.ts +0 -1
  158. package/cjs/VirtualGroupedList/VirtualGroupedList.spec.js +0 -287
  159. package/cjs/WhiteSearchInput/WhiteSearchInput.spec.d.ts +0 -1
  160. /package/{SidePanelContentHeader/SidePanelContentHeader.spec.d.ts → ColumnsSettings/types.js} +0 -0
  161. /package/{SidePanelEmptyState/SidePanelEmptyState.spec.d.ts → SidePanelContentHeader/SidePanelContentHeader.test.d.ts} +0 -0
  162. /package/{SimpleAttributeEditor/SimpleAttributeEditorWithoutPermissions.test.d.ts → SidePanelEmptyState/SidePanelEmptyState.test.d.ts} +0 -0
  163. /package/{SimpleDropDownSelector/components/DropDownPlaceholder/DropDownPlaceholder.test.d.ts → UploadFileButton/UploadFileButton.test.d.ts} +0 -0
  164. /package/{TableWithBars/components/AttributeCellRenderer/AttributeCellRenderer.test.d.ts → VirtualGroupedList/VirtualGroupedList.test.d.ts} +0 -0
  165. /package/{TableWithBars/components/HeadCellRenderer/HeadCellRenderer.test.d.ts → WhiteSearchInput/WhiteSearchInput.test.d.ts} +0 -0
  166. /package/{UploadFileButton/UploadFileButton.spec.d.ts → cjs/SidePanelContentHeader/SidePanelContentHeader.test.d.ts} +0 -0
  167. /package/{UploadImageDialog/components/DividerWithText/DividerWithText.test.d.ts → cjs/SidePanelEmptyState/SidePanelEmptyState.test.d.ts} +0 -0
  168. /package/{VirtualGroupedList/VirtualGroupedList.spec.d.ts → cjs/UploadFileButton/UploadFileButton.test.d.ts} +0 -0
  169. /package/{WhiteSearchInput/WhiteSearchInput.spec.d.ts → cjs/VirtualGroupedList/VirtualGroupedList.test.d.ts} +0 -0
  170. /package/cjs/{SidePanelContentHeader/SidePanelContentHeader.spec.d.ts → WhiteSearchInput/WhiteSearchInput.test.d.ts} +0 -0
  171. /package/cjs/contexts/{AllwaysVisibleAttributesContext → AlwaysVisibleAttributesContext}/index.d.ts +0 -0
  172. /package/cjs/contexts/{AllwaysVisibleAttributesContext → AlwaysVisibleAttributesContext}/index.js +0 -0
  173. /package/contexts/{AllwaysVisibleAttributesContext → AlwaysVisibleAttributesContext}/index.d.ts +0 -0
  174. /package/contexts/{AllwaysVisibleAttributesContext → AlwaysVisibleAttributesContext}/index.js +0 -0
@@ -1,30 +1,88 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
23
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
1
48
  import React from 'react';
2
- import Snackbar from '@mui/material/Snackbar';
3
- import { shallow } from 'enzyme';
49
+ import { render, screen } from '@testing-library/react';
50
+ import userEvent from '@testing-library/user-event';
4
51
  import { ErrorSnackbar } from './ErrorSnackbar';
5
52
  describe('ErrorSnackbar tests', function () {
53
+ var setUp = function (props) {
54
+ if (props === void 0) { props = {}; }
55
+ var user = userEvent.setup();
56
+ return __assign({ user: user }, render(React.createElement(ErrorSnackbar, __assign({ error: null }, props))));
57
+ };
6
58
  it('should render correctly with error is "null"', function () {
7
- var component = shallow(React.createElement(ErrorSnackbar, { error: null }));
8
- expect(component.find(Snackbar).props()).toMatchObject({
9
- open: false,
10
- message: null
11
- });
59
+ var container = setUp({ error: null }).container;
60
+ expect(container).toBeEmptyDOMElement();
12
61
  });
13
62
  it('should render correctly with error is not "null"', function () {
14
- var component = shallow(React.createElement(ErrorSnackbar, { error: "Some error" }));
15
- expect(component.find(Snackbar).props()).toMatchObject({
16
- open: true,
17
- message: 'Some error'
18
- });
19
- });
20
- it('onClose handler work correctly', function () {
21
- var onClose = jest.fn();
22
- var component = shallow(React.createElement(ErrorSnackbar, { error: "Some error", onClose: onClose }));
23
- var closeEvent = {};
24
- component.find(Snackbar).prop('onClose')(closeEvent, 'clickaway');
25
- expect(onClose).toHaveBeenCalledTimes(1);
26
- var action = component.find(Snackbar).prop('action');
27
- action.props.onClick();
28
- expect(onClose).toHaveBeenCalledTimes(2);
63
+ setUp({ error: 'Some error' });
64
+ expect(screen.getByRole('alert')).toBeInTheDocument();
65
+ expect(screen.getByText('Some error')).toBeInTheDocument();
66
+ expect(screen.getByRole('button', { name: 'Close' })).toBeInTheDocument();
29
67
  });
68
+ it('onClose handler work correctly', function () { return __awaiter(void 0, void 0, void 0, function () {
69
+ var onClose, user;
70
+ return __generator(this, function (_a) {
71
+ switch (_a.label) {
72
+ case 0:
73
+ onClose = jest.fn();
74
+ user = setUp({ error: 'Some error', onClose: onClose }).user;
75
+ expect(onClose).toHaveBeenCalledTimes(0);
76
+ return [4 /*yield*/, user.click(screen.getByRole('button', { name: 'Close' }))];
77
+ case 1:
78
+ _a.sent();
79
+ expect(onClose).toHaveBeenCalledTimes(1);
80
+ return [4 /*yield*/, user.click(screen.getByRole('presentation').parentElement)];
81
+ case 2:
82
+ _a.sent();
83
+ expect(onClose).toHaveBeenCalledTimes(2);
84
+ return [2 /*return*/];
85
+ }
86
+ });
87
+ }); });
30
88
  });
@@ -33,5 +33,5 @@ export var ImageByUrlField = function (_a) {
33
33
  React.createElement(Paper, { className: styles.paper },
34
34
  React.createElement(InputBase, { value: value, onChange: handleChange, classes: { root: styles.inputRoot, input: styles.input }, placeholder: i18n.text('Paste an image URL here') }),
35
35
  React.createElement(Button, { disabled: Boolean(error) || isEmptyField(value), variant: "outlined", color: "primary", onClick: handleSend }, i18n.text('Send'))),
36
- error && React.createElement(Typography, { className: styles.errorMessage }, error)));
36
+ error && (React.createElement(Typography, { "data-reltio-id": "url-error-message", className: styles.errorMessage }, error))));
37
37
  };
@@ -1,59 +1,172 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
23
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
1
48
  import React from 'react';
2
- import { shallow } from 'enzyme';
3
- import InputBase from '@mui/material/InputBase';
4
- import Button from '@mui/material/Button';
49
+ import { render, screen } from '@testing-library/react';
50
+ import userEvent from '@testing-library/user-event';
5
51
  import { ImageByUrlField } from './ImageByUrlField';
6
52
  describe('ImageByUrlField tests', function () {
7
- var onSend;
53
+ var defaultProps = { onSend: jest.fn() };
8
54
  beforeEach(function () {
9
- onSend = jest.fn();
55
+ jest.clearAllMocks();
10
56
  });
57
+ var setUp = function (props) {
58
+ if (props === void 0) { props = {}; }
59
+ var user = userEvent.setup();
60
+ return __assign({ user: user }, render(React.createElement(ImageByUrlField, __assign({}, defaultProps, props))));
61
+ };
11
62
  it('should not render error message if error is null', function () {
12
- var component = shallow(React.createElement(ImageByUrlField, { onSend: onSend }));
13
- expect(component.find('.errorMessage')).toHaveLength(0);
14
- });
15
- it('should not render error message if value is correct', function () {
16
- var component = shallow(React.createElement(ImageByUrlField, { onSend: onSend }));
17
- component.find(InputBase).simulate('change', { target: { value: 'https://reltio.com' } });
18
- expect(component.find('.errorMessage')).toHaveLength(0);
19
- });
20
- it('should not render error message if value is empty string', function () {
21
- var component = shallow(React.createElement(ImageByUrlField, { onSend: onSend }));
22
- component.find(InputBase).simulate('change', { target: { value: '' } });
23
- expect(component.find('.errorMessage')).toHaveLength(0);
24
- });
25
- it('should render error message if value is not correct', function () {
26
- var component = shallow(React.createElement(ImageByUrlField, { onSend: onSend }));
27
- component.find(InputBase).simulate('change', { target: { value: 'wrong url' } });
28
- expect(component.find('.errorMessage').text()).toBe('URL is not correct');
29
- });
30
- it('should update input value', function () {
31
- var component = shallow(React.createElement(ImageByUrlField, { onSend: onSend }));
32
- expect(component.find(InputBase).prop('value')).toBe('');
33
- component.find(InputBase).simulate('change', { target: { value: 'value' } });
34
- expect(component.find(InputBase).prop('value')).toBe('value');
63
+ setUp();
64
+ expect(screen.queryByTestId('url-error-message')).not.toBeInTheDocument();
35
65
  });
66
+ it('should not render error message if value is correct', function () { return __awaiter(void 0, void 0, void 0, function () {
67
+ var user;
68
+ return __generator(this, function (_a) {
69
+ switch (_a.label) {
70
+ case 0:
71
+ user = setUp().user;
72
+ return [4 /*yield*/, user.type(screen.getByRole('textbox'), 'https://reltio.com')];
73
+ case 1:
74
+ _a.sent();
75
+ expect(screen.queryByTestId('url-error-message')).not.toBeInTheDocument();
76
+ return [2 /*return*/];
77
+ }
78
+ });
79
+ }); });
80
+ it('should not render error message if value is empty string', function () { return __awaiter(void 0, void 0, void 0, function () {
81
+ var user;
82
+ return __generator(this, function (_a) {
83
+ switch (_a.label) {
84
+ case 0:
85
+ user = setUp().user;
86
+ return [4 /*yield*/, user.clear(screen.getByRole('textbox'))];
87
+ case 1:
88
+ _a.sent();
89
+ expect(screen.queryByTestId('url-error-message')).not.toBeInTheDocument();
90
+ return [2 /*return*/];
91
+ }
92
+ });
93
+ }); });
94
+ it('should render error message if value is not correct', function () { return __awaiter(void 0, void 0, void 0, function () {
95
+ var user;
96
+ return __generator(this, function (_a) {
97
+ switch (_a.label) {
98
+ case 0:
99
+ user = setUp().user;
100
+ return [4 /*yield*/, user.type(screen.getByRole('textbox'), 'wrong url')];
101
+ case 1:
102
+ _a.sent();
103
+ expect(screen.getByTestId('url-error-message')).toHaveTextContent('URL is not correct');
104
+ return [2 /*return*/];
105
+ }
106
+ });
107
+ }); });
108
+ it('should update input value', function () { return __awaiter(void 0, void 0, void 0, function () {
109
+ var user;
110
+ return __generator(this, function (_a) {
111
+ switch (_a.label) {
112
+ case 0:
113
+ user = setUp().user;
114
+ return [4 /*yield*/, user.type(screen.getByRole('textbox'), 'value')];
115
+ case 1:
116
+ _a.sent();
117
+ expect(screen.getByRole('textbox')).toHaveValue('value');
118
+ return [2 /*return*/];
119
+ }
120
+ });
121
+ }); });
36
122
  it('should disable Send button if value is empty string', function () {
37
- var component = shallow(React.createElement(ImageByUrlField, { onSend: onSend }));
38
- expect(component.find(InputBase).prop('value')).toBe('');
39
- expect(component.find(Button).prop('disabled')).toBe(true);
40
- });
41
- it('should disable Send button if value is incorrect url', function () {
42
- var component = shallow(React.createElement(ImageByUrlField, { onSend: onSend }));
43
- component.find(InputBase).simulate('change', { target: { value: 'wrong url' } });
44
- expect(component.find(Button).prop('disabled')).toBe(true);
45
- });
46
- it('should not disable Send button if value is correct url', function () {
47
- var component = shallow(React.createElement(ImageByUrlField, { onSend: onSend }));
48
- component.find(InputBase).simulate('change', { target: { value: 'https://reltio.com' } });
49
- expect(component.find(Button).prop('disabled')).toBe(false);
50
- });
51
- it('onSend handler should work correctly', function () {
52
- var component = shallow(React.createElement(ImageByUrlField, { onSend: onSend }));
53
- component.find(InputBase).simulate('change', { target: { value: 'https://reltio.com' } });
54
- expect(component.find(InputBase).prop('value')).toBe('https://reltio.com');
55
- component.find(Button).simulate('click');
56
- expect(onSend).toHaveBeenCalledWith('https://reltio.com');
57
- expect(component.find(InputBase).prop('value')).toBe('');
123
+ setUp();
124
+ expect(screen.getByRole('textbox')).toHaveValue('');
125
+ expect(screen.getByRole('button', { name: 'Send' })).toBeDisabled();
58
126
  });
127
+ it('should disable Send button if value is incorrect url', function () { return __awaiter(void 0, void 0, void 0, function () {
128
+ var user;
129
+ return __generator(this, function (_a) {
130
+ switch (_a.label) {
131
+ case 0:
132
+ user = setUp().user;
133
+ return [4 /*yield*/, user.type(screen.getByRole('textbox'), 'wrong url')];
134
+ case 1:
135
+ _a.sent();
136
+ expect(screen.getByRole('button', { name: 'Send' })).toBeDisabled();
137
+ return [2 /*return*/];
138
+ }
139
+ });
140
+ }); });
141
+ it('should not disable Send button if value is correct url', function () { return __awaiter(void 0, void 0, void 0, function () {
142
+ var user;
143
+ return __generator(this, function (_a) {
144
+ switch (_a.label) {
145
+ case 0:
146
+ user = setUp().user;
147
+ return [4 /*yield*/, user.type(screen.getByRole('textbox'), 'https://reltio.com')];
148
+ case 1:
149
+ _a.sent();
150
+ expect(screen.getByRole('button', { name: 'Send' })).not.toBeDisabled();
151
+ return [2 /*return*/];
152
+ }
153
+ });
154
+ }); });
155
+ it('onSend handler should work correctly', function () { return __awaiter(void 0, void 0, void 0, function () {
156
+ var user;
157
+ return __generator(this, function (_a) {
158
+ switch (_a.label) {
159
+ case 0:
160
+ user = setUp().user;
161
+ return [4 /*yield*/, user.type(screen.getByRole('textbox'), 'https://reltio.com')];
162
+ case 1:
163
+ _a.sent();
164
+ return [4 /*yield*/, user.click(screen.getByRole('button', { name: 'Send' }))];
165
+ case 2:
166
+ _a.sent();
167
+ expect(defaultProps.onSend).toHaveBeenCalledWith('https://reltio.com');
168
+ return [2 /*return*/];
169
+ }
170
+ });
171
+ }); });
59
172
  });
@@ -1,34 +1,18 @@
1
1
  import React from 'react';
2
- import { shallow, ReactWrapper } from 'enzyme';
3
- import Chip from '@mui/material/Chip';
4
- import { ExpandedValueTooltip } from '../ExpandedValueTooltip';
2
+ import { render, screen } from '@testing-library/react';
5
3
  import { ValueChip } from './ValueChip';
6
4
  describe('ValueChip tests', function () {
7
5
  it('should render main parts', function () {
8
6
  var label = '123';
9
- var component = shallow(React.createElement(ValueChip, { label: label }));
10
- var chip = component.find(Chip);
11
- expect(chip.length).toBe(1);
12
- var chipLabel = new ReactWrapper(chip.prop('label'));
13
- var valueTooltip = chipLabel.find(ExpandedValueTooltip);
14
- expect(valueTooltip.length).toBe(1);
15
- expect(valueTooltip.prop('value')).toBe(label);
16
- expect(valueTooltip.text()).toBe(label);
17
- expect(chipLabel.find('.count')).toHaveLength(0);
7
+ var container = render(React.createElement(ValueChip, { label: label })).container;
8
+ expect(screen.getByText('123')).toBeInTheDocument();
9
+ expect(container.querySelector('.count')).toBeNull();
18
10
  });
19
11
  it('should render main parts with count', function () {
20
12
  var label = '123';
21
13
  var count = '15K';
22
- var component = shallow(React.createElement(ValueChip, { label: label, count: count }));
23
- var chip = component.find(Chip);
24
- expect(chip.length).toBe(1);
25
- var chipLabel = new ReactWrapper(chip.prop('label'));
26
- var valueTooltip = chipLabel.find(ExpandedValueTooltip);
27
- expect(valueTooltip.length).toBe(1);
28
- expect(valueTooltip.prop('value')).toBe(label);
29
- expect(valueTooltip.text()).toBe(label);
30
- var countComponent = chipLabel.find('.count');
31
- expect(countComponent).toHaveLength(1);
32
- expect(countComponent.text()).toBe(count);
14
+ render(React.createElement(ValueChip, { label: label, count: count }));
15
+ expect(screen.getByText('123')).toBeInTheDocument();
16
+ expect(screen.getByText('15K')).toHaveClass('count');
33
17
  });
34
18
  });
@@ -1,32 +1,20 @@
1
- export function VirtualGroupedList({ items, getItemSize, renderItem, renderGroupTitle, width, height, fixedTitle, itemKey, disableHorizontalScrollbar, hideSubtitles, focusIndex, onInnerContainerResize }: {
2
- items: any;
3
- getItemSize: any;
4
- renderItem: any;
5
- renderGroupTitle: any;
6
- width?: string;
7
- height: any;
8
- fixedTitle?: boolean;
9
- itemKey?: (i: any) => any;
10
- disableHorizontalScrollbar: any;
11
- hideSubtitles: any;
12
- focusIndex?: any;
13
- onInnerContainerResize: any;
14
- }): React.JSX.Element;
15
- export namespace VirtualGroupedList {
16
- namespace propTypes {
17
- let items: PropTypes.Validator<object[]>;
18
- let getItemSize: PropTypes.Validator<(...args: any[]) => any>;
19
- let renderItem: PropTypes.Validator<(...args: any[]) => any>;
20
- let width: PropTypes.Requireable<NonNullable<string | number>>;
21
- let height: PropTypes.Validator<number>;
22
- let renderGroupTitle: PropTypes.Requireable<(...args: any[]) => any>;
23
- let fixedTitle: PropTypes.Requireable<boolean>;
24
- let hideSubtitles: PropTypes.Requireable<boolean>;
25
- let itemKey: PropTypes.Requireable<(...args: any[]) => any>;
26
- let disableHorizontalScrollbar: PropTypes.Requireable<boolean>;
27
- let focusIndex: PropTypes.Requireable<number>;
28
- let onInnerContainerResize: PropTypes.Requireable<(...args: any[]) => any>;
29
- }
30
- }
31
1
  import React from 'react';
32
- import PropTypes from 'prop-types';
2
+ import { VariableSizeList as List } from 'react-window';
3
+ import { OnResizeCallback } from 'react-resize-detector/build/types/types';
4
+ import { VirtualGroupedListItem, VirtualGroupedListMainItem, VirtualGroupedListRenderGroupTitle, VirtualGroupedListRenderItem } from './types';
5
+ type Props<T> = {
6
+ items: VirtualGroupedListMainItem<T>[];
7
+ getItemSize: (index: number, item: VirtualGroupedListItem<T>) => number;
8
+ renderItem: VirtualGroupedListRenderItem<T>;
9
+ renderGroupTitle?: VirtualGroupedListRenderGroupTitle<T>;
10
+ width?: string | number;
11
+ height: number;
12
+ fixedTitle?: boolean;
13
+ itemKey?: React.ComponentProps<typeof List>['itemKey'];
14
+ disableHorizontalScrollbar?: boolean;
15
+ hideSubtitles?: boolean;
16
+ focusIndex?: number;
17
+ onInnerContainerResize?: OnResizeCallback;
18
+ };
19
+ export declare const VirtualGroupedList: <Data>({ items, getItemSize, renderItem, renderGroupTitle, width, height, fixedTitle, itemKey, disableHorizontalScrollbar, hideSubtitles, focusIndex, onInnerContainerResize }: Props<Data>) => React.JSX.Element;
20
+ export {};
@@ -8,27 +8,11 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
8
8
  return to.concat(ar || Array.prototype.slice.call(from));
9
9
  };
10
10
  import React, { useCallback, useEffect, useRef, useMemo } from 'react';
11
- import PropTypes from 'prop-types';
12
11
  import { VariableSizeList as List } from 'react-window';
13
12
  import ReactResizeDetector from 'react-resize-detector';
14
13
  import { useScrollToFocusItem } from './useScrollToFocusItem';
15
14
  import { isTitleListItem } from './helpers';
16
15
  import { useStyles } from './styles';
17
- /*
18
- items = [
19
- {
20
- item: {
21
- item: {},
22
- level: number
23
- },
24
- titleItemIndex: number,
25
- index: number,
26
- moveTo: true|false,
27
- items: [...]
28
- ...
29
- }
30
- ]
31
- */
32
16
  var OVERSCAN_COUNT = 5;
33
17
  export var VirtualGroupedList = function (_a) {
34
18
  var items = _a.items, getItemSize = _a.getItemSize, renderItem = _a.renderItem, renderGroupTitle = _a.renderGroupTitle, _b = _a.width, width = _b === void 0 ? '100%' : _b, height = _a.height, _c = _a.fixedTitle, fixedTitle = _c === void 0 ? true : _c, _d = _a.itemKey, itemKey = _d === void 0 ? function (i) { return i; } : _d, disableHorizontalScrollbar = _a.disableHorizontalScrollbar, hideSubtitles = _a.hideSubtitles, _e = _a.focusIndex, focusIndex = _e === void 0 ? null : _e, onInnerContainerResize = _a.onInnerContainerResize;
@@ -40,9 +24,12 @@ export var VirtualGroupedList = function (_a) {
40
24
  var stepCalcOffset = 10;
41
25
  var stickyItemClass = 'stickyTitleItem';
42
26
  var currentTitleParams = {
43
- topMargin: 0
27
+ topMargin: 0,
28
+ index: undefined
29
+ };
30
+ var isGroupHasSubTitles = function (groupedItems) {
31
+ return (groupedItems || []).some(function (item) { return item.titleItemIndex !== null; });
44
32
  };
45
- var isGroupHasSubTitles = function (groupedItems) { return (groupedItems || []).some(function (item) { return item.titleItemIndex !== null; }); };
46
33
  var hasSubTitles = useMemo(function () { return !hideSubtitles || isGroupHasSubTitles(items); }, [items, hideSubtitles]);
47
34
  var calcOffsetsToIndex = useCallback(function (index) {
48
35
  var curItemsLength = itemOffsets.current.length;
@@ -176,9 +163,11 @@ export var VirtualGroupedList = function (_a) {
176
163
  var render = useCallback(function (_a) {
177
164
  var index = _a.index, style = _a.style, data = _a.data;
178
165
  var listItem = getItemByIndex(index);
179
- return (listItem.item &&
180
- ((isTitleListItem(listItem) && renderGroupTitle(style, listItem.item)) ||
181
- renderItem(style, listItem.item, index, data)));
166
+ if (!listItem.item)
167
+ return null;
168
+ return isTitleListItem(listItem)
169
+ ? renderGroupTitle(style, listItem.item)
170
+ : renderItem(style, listItem.item, index, data);
182
171
  }, [getItemByIndex, renderGroupTitle, renderItem]);
183
172
  var handleOnItemsRendered = useScrollToFocusItem({ items: items, focusIndex: focusIndex, listRef: listRef }).handleOnItemsRendered;
184
173
  var renderTitles = useCallback(function () {
@@ -186,21 +175,7 @@ export var VirtualGroupedList = function (_a) {
186
175
  return items.filter(function (listItem) { return isTitleListItem(listItem); }).map(function (listItem) { return renderTitle(listItem); });
187
176
  }, [getItemSize, items, renderGroupTitle]);
188
177
  return (React.createElement(React.Fragment, null,
189
- React.createElement("div", { ref: titlesRef, className: styles.stickyTitlesWrapper }, fixedTitle && renderTitles()),
178
+ React.createElement("div", { ref: titlesRef, "data-reltio-id": "grouped-list-sticky-titles", className: styles.stickyTitlesWrapper }, fixedTitle && renderTitles()),
190
179
  onInnerContainerResize && itemsRef.current && (React.createElement(ReactResizeDetector, { handleHeight: true, onResize: onInnerContainerResize, targetRef: itemsRef })),
191
180
  React.createElement(List, { ref: listRef, itemCount: items.length, itemSize: _getItemSize, width: width, height: height, itemKey: itemKey, innerRef: itemsRef, onScroll: onScroll, style: disableHorizontalScrollbar ? { overflowX: 'hidden' } : undefined, overscanCount: OVERSCAN_COUNT, onItemsRendered: handleOnItemsRendered }, render)));
192
181
  };
193
- VirtualGroupedList.propTypes = {
194
- items: PropTypes.arrayOf(PropTypes.object).isRequired,
195
- getItemSize: PropTypes.func.isRequired,
196
- renderItem: PropTypes.func.isRequired,
197
- width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
198
- height: PropTypes.number.isRequired,
199
- renderGroupTitle: PropTypes.func,
200
- fixedTitle: PropTypes.bool,
201
- hideSubtitles: PropTypes.bool,
202
- itemKey: PropTypes.func,
203
- disableHorizontalScrollbar: PropTypes.bool,
204
- focusIndex: PropTypes.number,
205
- onInnerContainerResize: PropTypes.func
206
- };