@carbon/ibm-products 1.27.0 → 1.32.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (167) hide show
  1. package/css/index-full-carbon.css +570 -80
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +3 -3
  4. package/css/index-full-carbon.min.css.map +1 -1
  5. package/css/index-without-carbon-released-only.css +942 -23
  6. package/css/index-without-carbon-released-only.css.map +1 -1
  7. package/css/index-without-carbon-released-only.min.css +3 -3
  8. package/css/index-without-carbon-released-only.min.css.map +1 -1
  9. package/css/index-without-carbon.css +569 -79
  10. package/css/index-without-carbon.css.map +1 -1
  11. package/css/index-without-carbon.min.css +3 -3
  12. package/css/index-without-carbon.min.css.map +1 -1
  13. package/css/index.css +570 -80
  14. package/css/index.css.map +1 -1
  15. package/css/index.min.css +3 -3
  16. package/css/index.min.css.map +1 -1
  17. package/es/components/AddSelect/AddSelect.js +0 -3
  18. package/es/components/AddSelect/AddSelectBody.js +20 -3
  19. package/es/components/AddSelect/AddSelectBreadcrumbs.js +11 -3
  20. package/es/components/AddSelect/AddSelectColumn.js +4 -3
  21. package/es/components/AddSelect/AddSelectFilter.js +4 -3
  22. package/es/components/AddSelect/AddSelectList.js +40 -14
  23. package/es/components/Card/Card.js +16 -6
  24. package/es/components/Card/CardFooter.js +3 -1
  25. package/es/components/Card/CardHeader.js +20 -1
  26. package/es/components/DataSpreadsheet/DataSpreadsheet.js +63 -11
  27. package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +2 -1
  28. package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +7 -0
  29. package/es/components/DataSpreadsheet/utils/handleCellDeletion.js +31 -0
  30. package/es/components/DataSpreadsheet/utils/handleMultipleKeys.js +1 -1
  31. package/es/components/Datagrid/Datagrid/Datagrid.js +10 -38
  32. package/es/components/Datagrid/Datagrid/DatagridContent.js +127 -0
  33. package/es/components/Datagrid/Datagrid/DatagridExpandedRow.js +9 -1
  34. package/es/components/Datagrid/Datagrid/DatagridSelectAll.js +10 -3
  35. package/es/components/Datagrid/Datagrid/DatagridSelectAllWithToggle.js +12 -3
  36. package/es/components/Datagrid/Datagrid/DraggableElement.js +5 -1
  37. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/Actions.js +5 -40
  38. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/Columns.js +35 -10
  39. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsModal.js +61 -24
  40. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/ModalWrapper.js +3 -2
  41. package/es/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditButton/InlineEditButton.js +60 -0
  42. package/es/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditButton/index.js +1 -0
  43. package/es/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditCell/InlineEditCell.js +467 -0
  44. package/es/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditCell/index.js +1 -0
  45. package/es/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditContext/InlineEditContext.js +112 -0
  46. package/es/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditContext/getCellIdAsObject.js +27 -0
  47. package/es/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditContext/index.js +1 -0
  48. package/es/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditContext/returnUpdatedActiveCell.js +39 -0
  49. package/es/components/Datagrid/Datagrid/addons/InlineEdit/handleGridFocus.js +19 -0
  50. package/es/components/Datagrid/Datagrid/addons/InlineEdit/handleGridKeyPress.js +263 -0
  51. package/es/components/Datagrid/Datagrid/addons/InlineEdit/handleMultipleKeys.js +66 -0
  52. package/es/components/Datagrid/Datagrid/addons/RowSize/RowSizeDropdown.js +6 -5
  53. package/es/components/Datagrid/Datagrid/addons/RowSize/RowSizeRadioGroup.js +1 -2
  54. package/es/components/Datagrid/index.js +3 -1
  55. package/es/components/Datagrid/useActionsColumn.js +28 -12
  56. package/es/components/Datagrid/useColumnOrder.js +8 -0
  57. package/es/components/Datagrid/useCustomizeColumns.js +5 -0
  58. package/es/components/Datagrid/useDisableSelectRows.js +6 -2
  59. package/es/components/Datagrid/useExpandedRow.js +0 -1
  60. package/es/components/Datagrid/useInlineEdit.js +71 -0
  61. package/es/components/Datagrid/useNestedRowExpander.js +42 -0
  62. package/es/components/Datagrid/useNestedRows.js +2 -2
  63. package/es/components/Datagrid/useRowSize.js +17 -6
  64. package/es/components/Datagrid/useSelectAllToggle.js +17 -4
  65. package/es/components/Datagrid/useSelectRows.js +12 -2
  66. package/es/components/Datagrid/useStickyColumn.js +11 -0
  67. package/es/components/Datagrid/utils/DatagridActions.js +121 -0
  68. package/es/components/Datagrid/utils/DatagridPagination.js +33 -0
  69. package/es/components/Datagrid/utils/Wrapper.js +21 -0
  70. package/es/components/Datagrid/utils/getArgTypes.js +85 -0
  71. package/es/components/Datagrid/utils/getInlineEditColumns.js +121 -0
  72. package/es/components/Datagrid/utils/makeData.js +17 -1
  73. package/es/components/ImportModal/ImportModal.js +2 -2
  74. package/es/components/InlineEdit/InlineEdit.js +4 -2
  75. package/es/components/ProductiveCard/ProductiveCard.js +5 -0
  76. package/es/components/index.js +1 -1
  77. package/es/global/js/hooks/useClickOutside.js +1 -1
  78. package/es/global/js/package-settings.js +3 -3
  79. package/es/global/js/utils/rangeWithCallback.js +13 -0
  80. package/es/global/js/utils/story-helper.js +5 -1
  81. package/es/global/js/utils/uuidv4.spec.js +4 -0
  82. package/lib/components/AddSelect/AddSelect.js +0 -4
  83. package/lib/components/AddSelect/AddSelectBody.js +20 -3
  84. package/lib/components/AddSelect/AddSelectBreadcrumbs.js +14 -3
  85. package/lib/components/AddSelect/AddSelectColumn.js +3 -2
  86. package/lib/components/AddSelect/AddSelectFilter.js +3 -2
  87. package/lib/components/AddSelect/AddSelectList.js +39 -13
  88. package/lib/components/Card/Card.js +16 -6
  89. package/lib/components/Card/CardFooter.js +3 -1
  90. package/lib/components/Card/CardHeader.js +21 -1
  91. package/lib/components/DataSpreadsheet/DataSpreadsheet.js +63 -10
  92. package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +2 -1
  93. package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +7 -0
  94. package/lib/components/DataSpreadsheet/utils/handleCellDeletion.js +42 -0
  95. package/lib/components/DataSpreadsheet/utils/handleMultipleKeys.js +1 -1
  96. package/lib/components/Datagrid/Datagrid/Datagrid.js +12 -45
  97. package/lib/components/Datagrid/Datagrid/DatagridContent.js +160 -0
  98. package/lib/components/Datagrid/Datagrid/DatagridExpandedRow.js +9 -1
  99. package/lib/components/Datagrid/Datagrid/DatagridSelectAll.js +12 -3
  100. package/lib/components/Datagrid/Datagrid/DatagridSelectAllWithToggle.js +14 -3
  101. package/lib/components/Datagrid/Datagrid/DraggableElement.js +5 -1
  102. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/Actions.js +12 -41
  103. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/Columns.js +47 -25
  104. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsModal.js +59 -23
  105. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/ModalWrapper.js +3 -2
  106. package/lib/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditButton/InlineEditButton.js +76 -0
  107. package/lib/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditButton/index.js +13 -0
  108. package/lib/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditCell/InlineEditCell.js +491 -0
  109. package/lib/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditCell/index.js +13 -0
  110. package/lib/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditContext/InlineEditContext.js +129 -0
  111. package/lib/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditContext/getCellIdAsObject.js +36 -0
  112. package/lib/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditContext/index.js +19 -0
  113. package/lib/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditContext/returnUpdatedActiveCell.js +45 -0
  114. package/lib/components/Datagrid/Datagrid/addons/InlineEdit/handleGridFocus.js +28 -0
  115. package/lib/components/Datagrid/Datagrid/addons/InlineEdit/handleGridKeyPress.js +272 -0
  116. package/lib/components/Datagrid/Datagrid/addons/InlineEdit/handleMultipleKeys.js +78 -0
  117. package/lib/components/Datagrid/Datagrid/addons/RowSize/RowSizeDropdown.js +6 -5
  118. package/lib/components/Datagrid/Datagrid/addons/RowSize/RowSizeRadioGroup.js +1 -2
  119. package/lib/components/Datagrid/index.js +17 -1
  120. package/lib/components/Datagrid/useActionsColumn.js +28 -13
  121. package/lib/components/Datagrid/useColumnOrder.js +17 -0
  122. package/lib/components/Datagrid/useCustomizeColumns.js +5 -0
  123. package/lib/components/Datagrid/useDisableSelectRows.js +6 -2
  124. package/lib/components/Datagrid/useExpandedRow.js +0 -1
  125. package/lib/components/Datagrid/useInlineEdit.js +85 -0
  126. package/lib/components/Datagrid/useNestedRowExpander.js +57 -0
  127. package/lib/components/Datagrid/useNestedRows.js +3 -3
  128. package/lib/components/Datagrid/useRowSize.js +18 -13
  129. package/lib/components/Datagrid/useSelectAllToggle.js +18 -4
  130. package/lib/components/Datagrid/useSelectRows.js +12 -2
  131. package/lib/components/Datagrid/useStickyColumn.js +11 -0
  132. package/lib/components/Datagrid/utils/DatagridActions.js +139 -0
  133. package/lib/components/Datagrid/utils/DatagridPagination.js +46 -0
  134. package/lib/components/Datagrid/utils/Wrapper.js +33 -0
  135. package/lib/components/Datagrid/utils/getArgTypes.js +93 -0
  136. package/lib/components/Datagrid/utils/getInlineEditColumns.js +133 -0
  137. package/lib/components/Datagrid/utils/makeData.js +17 -1
  138. package/lib/components/ImportModal/ImportModal.js +2 -2
  139. package/lib/components/InlineEdit/InlineEdit.js +4 -2
  140. package/lib/components/ProductiveCard/ProductiveCard.js +5 -0
  141. package/lib/components/index.js +12 -0
  142. package/lib/global/js/hooks/useClickOutside.js +1 -1
  143. package/lib/global/js/package-settings.js +3 -3
  144. package/lib/global/js/utils/rangeWithCallback.js +22 -0
  145. package/lib/global/js/utils/story-helper.js +5 -1
  146. package/lib/global/js/utils/uuidv4.spec.js +4 -0
  147. package/package.json +13 -13
  148. package/scss/components/AddSelect/_add-select.scss +126 -28
  149. package/scss/components/Card/_card.scss +1 -0
  150. package/scss/components/Cascade/_cascade.scss +1 -1
  151. package/scss/components/CreateTearsheet/_create-tearsheet.scss +1 -0
  152. package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +18 -1
  153. package/scss/components/Datagrid/_storybook-styles.scss +1 -1
  154. package/scss/components/Datagrid/styles/_datagrid.scss +27 -4
  155. package/scss/components/Datagrid/styles/_draggableElement.scss +26 -9
  156. package/scss/components/Datagrid/styles/_index.scss +1 -0
  157. package/scss/components/Datagrid/styles/_useActionsColumn.scss +12 -0
  158. package/scss/components/Datagrid/styles/_useExpandedRow.scss +30 -0
  159. package/scss/components/Datagrid/styles/_useInlineEdit.scss +211 -0
  160. package/scss/components/Datagrid/styles/_useNestedRows.scss +15 -1
  161. package/scss/components/Datagrid/styles/_useStickyColumn.scss +30 -2
  162. package/scss/components/Datagrid/styles/addons/_CustomizeColumnsModal.scss +44 -6
  163. package/scss/components/NotificationsPanel/_notifications-panel.scss +5 -6
  164. package/scss/components/ProductiveCard/_productive-card.scss +39 -0
  165. package/scss/components/RemoveModal/_remove-modal.scss +0 -4
  166. package/scss/components/SidePanel/_side-panel.scss +4 -6
  167. package/scss/components/_index-released-only.scss +1 -0
@@ -0,0 +1,491 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.InlineEditCell = void 0;
11
+
12
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
+
14
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
+
16
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
17
+
18
+ var _react = _interopRequireWildcard(require("react"));
19
+
20
+ var _propTypes = _interopRequireDefault(require("prop-types"));
21
+
22
+ var _carbonComponentsReact = require("carbon-components-react");
23
+
24
+ var _iconsReact = require("@carbon/icons-react");
25
+
26
+ var _InlineEditButton = require("../InlineEditButton");
27
+
28
+ var _settings = require("../../../../../../settings");
29
+
30
+ var _classnames = _interopRequireDefault(require("classnames"));
31
+
32
+ var _InlineEditContext = require("../InlineEditContext");
33
+
34
+ var _hooks = require("../../../../../../global/js/hooks");
35
+
36
+ var _propsHelper = require("../../../../../../global/js/utils/props-helper");
37
+
38
+ 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); }
39
+
40
+ 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; }
41
+
42
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
43
+
44
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
45
+
46
+ var blockClass = "".concat(_settings.pkg.prefix, "--datagrid");
47
+
48
+ var InlineEditCell = function InlineEditCell(_ref) {
49
+ var _cx3;
50
+
51
+ var cell = _ref.cell,
52
+ config = _ref.config,
53
+ instance = _ref.instance,
54
+ _ref$placeholder = _ref.placeholder,
55
+ placeholder = _ref$placeholder === void 0 ? '' : _ref$placeholder,
56
+ tabIndex = _ref.tabIndex,
57
+ value = _ref.value,
58
+ nonEditCell = _ref.nonEditCell,
59
+ totalInlineEditColumns = _ref.totalInlineEditColumns,
60
+ type = _ref.type;
61
+ var columnId = cell.column.id;
62
+ var columnIndex = instance.columns.findIndex(function (col) {
63
+ return col.id === columnId;
64
+ });
65
+ var cellId = "column-".concat(columnIndex, "-row-").concat(cell.row.index);
66
+ var totalColumns = instance.columns.length;
67
+
68
+ var _useContext = (0, _react.useContext)(_InlineEditContext.InlineEditContext),
69
+ state = _useContext.state,
70
+ dispatch = _useContext.dispatch;
71
+
72
+ var _useState = (0, _react.useState)(false),
73
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
74
+ inEditMode = _useState2[0],
75
+ setInEditMode = _useState2[1];
76
+
77
+ var _useState3 = (0, _react.useState)(value),
78
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
79
+ cellValue = _useState4[0],
80
+ setCellValue = _useState4[1];
81
+
82
+ var _useState5 = (0, _react.useState)(),
83
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
84
+ initialValue = _useState6[0],
85
+ setInitialValue = _useState6[1];
86
+
87
+ var _useState7 = (0, _react.useState)(),
88
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
89
+ cellLabel = _useState8[0],
90
+ setCellLabel = _useState8[1];
91
+
92
+ var activeCellId = state.activeCellId,
93
+ editId = state.editId;
94
+ var previousState = (0, _hooks.usePreviousValue)({
95
+ editId: editId,
96
+ activeCellId: activeCellId
97
+ });
98
+
99
+ var _ref2 = config || {},
100
+ inputProps = _ref2.inputProps;
101
+
102
+ var textInputRef = (0, _react.useRef)();
103
+ var numberInputRef = (0, _react.useRef)();
104
+ var dropdownRef = (0, _react.useRef)();
105
+ var datePickerRef = (0, _react.useRef)();
106
+ var outerButtonElement = (0, _react.useRef)();
107
+ (0, _react.useEffect)(function () {
108
+ setInitialValue(value);
109
+ var columnId = cell.column.id;
110
+ var columnLabel = instance.columns.find(function (item) {
111
+ return item.id === columnId;
112
+ });
113
+ setCellLabel(typeof columnLabel.Header === 'string' ? columnLabel.Header : 'Inline edit cell label'); // eslint-disable-next-line react-hooks/exhaustive-deps
114
+ }, []); // If you are in edit mode and click outside of the cell,
115
+ // this changes the cell back to the InlineEditButton
116
+
117
+ (0, _react.useEffect)(function () {
118
+ if (activeCellId !== cellId || !editId) {
119
+ setInEditMode(false);
120
+ }
121
+
122
+ if (activeCellId === cellId && editId === cellId && !nonEditCell) {
123
+ setInEditMode(true);
124
+ saveCellData(cellValue);
125
+ }
126
+ }, [activeCellId, cellId, nonEditCell, editId, cellValue, saveCellData]);
127
+
128
+ var openDropdown = function openDropdown(type) {
129
+ var _datePickerRef$curren;
130
+
131
+ var dropdownTrigger = type === 'selection' ? dropdownRef === null || dropdownRef === void 0 ? void 0 : dropdownRef.current : datePickerRef === null || datePickerRef === void 0 ? void 0 : (_datePickerRef$curren = datePickerRef.current) === null || _datePickerRef$curren === void 0 ? void 0 : _datePickerRef$curren.inputField;
132
+ dropdownTrigger.click();
133
+
134
+ if (type === 'date') {
135
+ // datePickerRef.current.cal.calendarContainer.focus();
136
+ dropdownTrigger === null || dropdownTrigger === void 0 ? void 0 : dropdownTrigger.focus();
137
+ }
138
+ }; // Re-initializes initialValue if clicking outside of a cell that was previously
139
+ // in edit mode, otherwise `initialValue` becomes stale
140
+
141
+
142
+ (0, _react.useEffect)(function () {
143
+ if ((previousState === null || previousState === void 0 ? void 0 : previousState.editId) === cellId && (previousState === null || previousState === void 0 ? void 0 : previousState.activeCellId) === cellId && activeCellId !== cellId) {
144
+ setInitialValue(cellValue);
145
+ }
146
+ }, [previousState, cellId, cellValue, activeCellId]);
147
+
148
+ var handleInlineCellClick = function handleInlineCellClick() {
149
+ if (!inEditMode) {
150
+ dispatch({
151
+ type: 'ENTER_EDIT_MODE',
152
+ payload: {
153
+ activeCellId: cellId,
154
+ editId: cellId
155
+ }
156
+ });
157
+ setInEditMode(true);
158
+ setTimeout(function () {
159
+ if (type === 'selection' || type === 'date') {
160
+ openDropdown(type);
161
+ }
162
+ }, 1);
163
+ }
164
+ };
165
+
166
+ var rowSize = instance.rowSize,
167
+ onDataUpdate = instance.onDataUpdate; // Auto focus text input when entering edit mode
168
+
169
+ (0, _react.useEffect)(function () {
170
+ if (inEditMode) {
171
+ if (type === 'text') {
172
+ textInputRef.current.focus();
173
+ }
174
+
175
+ if (type === 'number') {
176
+ numberInputRef.current.focus();
177
+ }
178
+ }
179
+ }, [inEditMode, type]); // Initialize cellValue from value prop
180
+
181
+ (0, _react.useEffect)(function () {
182
+ setCellValue(value);
183
+ }, [value]); // Saves the new cell data, onDataUpdate is a required function to be
184
+ // passed to useDatagrid when using useInlineEdit
185
+
186
+ var saveCellData = (0, _react.useCallback)(function (newValue) {
187
+ var columnId = cell.column.id;
188
+ var rowIndex = cell.row.index;
189
+ onDataUpdate(function (prev) {
190
+ return prev.map(function (row, index) {
191
+ if (index === rowIndex) {
192
+ return _objectSpread(_objectSpread({}, prev[rowIndex]), {}, (0, _defineProperty2.default)({}, columnId, newValue));
193
+ }
194
+
195
+ return row;
196
+ });
197
+ });
198
+ }, [cell, onDataUpdate]);
199
+
200
+ var sendFocusBackToGrid = function sendFocusBackToGrid() {
201
+ // Allows the onKeyDown listener to go back to the entire grid area
202
+ var inlineEditArea = document.querySelector("#".concat(instance.tableId, " .").concat(blockClass, "__table-with-inline-edit"));
203
+ inlineEditArea.focus();
204
+ };
205
+
206
+ var getNewCellId = function getNewCellId(key) {
207
+ var totalRows = instance.rows.length;
208
+ var newCellId = key === 'Enter' ? "column-".concat(columnIndex, "-row-").concat(cell.row.index < totalRows - 1 ? cell.row.index + 1 : cell.row.index) : "column-".concat(columnIndex < instance.columns.length - 1 ? columnIndex + 1 : columnIndex, "-row-").concat(cell.row.index);
209
+ return newCellId;
210
+ };
211
+
212
+ var handleKeyDown = function handleKeyDown(event) {
213
+ var key = event.key;
214
+
215
+ switch (key) {
216
+ // Save cell contents to data
217
+ case 'Tab':
218
+ case 'Enter':
219
+ {
220
+ if (inEditMode) {
221
+ // Dropdown saves are handled in the Dropdown's/DatePicker's onChange prop
222
+ if (type === 'selection' || type === 'date') {
223
+ return;
224
+ }
225
+
226
+ var newCellId = getNewCellId(key);
227
+ saveCellData(cellValue);
228
+ setInitialValue(cellValue);
229
+ dispatch({
230
+ type: 'EXIT_EDIT_MODE',
231
+ payload: newCellId
232
+ });
233
+ setInEditMode(false);
234
+ sendFocusBackToGrid();
235
+ }
236
+
237
+ break;
238
+ }
239
+
240
+ case 'Escape':
241
+ {
242
+ if (inEditMode) {
243
+ dispatch({
244
+ type: 'EXIT_EDIT_MODE',
245
+ payload: cellId
246
+ });
247
+ setCellValue(initialValue);
248
+ saveCellData(initialValue);
249
+ setInEditMode(false);
250
+ sendFocusBackToGrid();
251
+ }
252
+
253
+ break;
254
+ }
255
+
256
+ default:
257
+ return;
258
+ }
259
+ };
260
+
261
+ var addActiveState = function addActiveState() {
262
+ dispatch({
263
+ type: 'UPDATE_ACTIVE_CELL_ID',
264
+ payload: cellId
265
+ });
266
+ };
267
+
268
+ var renderDropdownItem = function renderDropdownItem(item) {
269
+ var includesIcon = !!(item !== null && item !== void 0 && item.icon);
270
+ return includesIcon ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(item.icon), /*#__PURE__*/_react.default.createElement("span", {
271
+ className: (0, _classnames.default)("".concat(blockClass, "__inline-edit--select-item"))
272
+ }, item === null || item === void 0 ? void 0 : item.text)) : item === null || item === void 0 ? void 0 : item.text;
273
+ };
274
+
275
+ var renderSelectCell = function renderSelectCell() {
276
+ var _ref3 = config || {},
277
+ inputProps = _ref3.inputProps;
278
+
279
+ return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Dropdown, (0, _extends2.default)({
280
+ id: cellId,
281
+ label: cellLabel || 'Dropdown menu options',
282
+ ariaLabel: cellLabel || 'Dropdown menu options'
283
+ }, inputProps, {
284
+ hideLabel: true,
285
+ style: {
286
+ width: cell.column.totalWidth
287
+ },
288
+ className: (0, _classnames.default)("".concat(blockClass, "__inline-edit--select"), (0, _defineProperty2.default)({}, "".concat(blockClass, "__inline-edit--select-").concat(rowSize), rowSize)),
289
+ items: (inputProps === null || inputProps === void 0 ? void 0 : inputProps.items) || [],
290
+ initialSelectedItem: cell.value,
291
+ itemToElement: function itemToElement(item) {
292
+ return renderDropdownItem(item);
293
+ },
294
+ renderSelectedItem: function renderSelectedItem(item) {
295
+ return renderDropdownItem(item);
296
+ },
297
+ onChange: function onChange(item) {
298
+ var _inputProps$onChange;
299
+
300
+ var newCellId = getNewCellId('Enter');
301
+ saveCellData(item.selectedItem);
302
+ setCellValue(item.selectedItem);
303
+ dispatch({
304
+ type: 'EXIT_EDIT_MODE',
305
+ payload: newCellId
306
+ });
307
+ setInEditMode(false);
308
+ sendFocusBackToGrid();
309
+ inputProps === null || inputProps === void 0 ? void 0 : (_inputProps$onChange = inputProps.onChange) === null || _inputProps$onChange === void 0 ? void 0 : _inputProps$onChange.call(inputProps, item.selectedItem);
310
+ },
311
+ downshiftProps: {
312
+ onStateChange: function onStateChange(downshiftState) {
313
+ var _ref4 = downshiftState || {},
314
+ isOpen = _ref4.isOpen; // !isOpen does not work in this case because a state change occurs on hover of the
315
+ // menu items and isOpen is changed to undefined which causes dispatch to be called unexpectedly
316
+
317
+
318
+ if (isOpen === false) {
319
+ dispatch({
320
+ type: 'EXIT_EDIT_MODE',
321
+ payload: cellId
322
+ });
323
+ setInEditMode(false);
324
+ sendFocusBackToGrid();
325
+ }
326
+ }
327
+ },
328
+ ref: dropdownRef
329
+ }));
330
+ };
331
+
332
+ var setRenderIcon = function setRenderIcon() {
333
+ if (type === 'text') {
334
+ return _iconsReact.Edit16;
335
+ }
336
+
337
+ if (type === 'number') {
338
+ return _iconsReact.CaretSort16;
339
+ }
340
+
341
+ if (type === 'selection') {
342
+ return _iconsReact.ChevronDown16;
343
+ }
344
+
345
+ if (type === 'date') {
346
+ return _iconsReact.Calendar16;
347
+ }
348
+ };
349
+
350
+ var renderDateCell = function renderDateCell() {
351
+ var _config$inputProps, _outerButtonElement$c;
352
+
353
+ var datePickerPreparedProps = (0, _propsHelper.prepareProps)(config.inputProps, ['datePickerInputProps']);
354
+ var datePickerInputProps = config === null || config === void 0 ? void 0 : (_config$inputProps = config.inputProps) === null || _config$inputProps === void 0 ? void 0 : _config$inputProps.datePickerInputProps;
355
+ return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.DatePicker, (0, _extends2.default)({}, datePickerPreparedProps, {
356
+ appendTo: outerButtonElement === null || outerButtonElement === void 0 ? void 0 : (_outerButtonElement$c = outerButtonElement.current) === null || _outerButtonElement$c === void 0 ? void 0 : _outerButtonElement$c.parentElement,
357
+ ref: datePickerRef,
358
+ style: {
359
+ width: cell.column.totalWidth
360
+ },
361
+ datePickerType: "single",
362
+ className: (0, _classnames.default)("".concat(blockClass, "__inline-edit--date"), (0, _defineProperty2.default)({}, "".concat(blockClass, "__inline-edit--date-").concat(rowSize), rowSize)),
363
+ onChange: function onChange(newDate) {
364
+ var _datePickerPreparedPr;
365
+
366
+ var newDateObj = newDate[0];
367
+ datePickerPreparedProps === null || datePickerPreparedProps === void 0 ? void 0 : (_datePickerPreparedPr = datePickerPreparedProps.onChange) === null || _datePickerPreparedPr === void 0 ? void 0 : _datePickerPreparedPr.call(datePickerPreparedProps, newDateObj, cell);
368
+ var newCellId = getNewCellId('Enter');
369
+ saveCellData(newDateObj);
370
+ setCellValue(newDateObj);
371
+ setInEditMode(false);
372
+ sendFocusBackToGrid();
373
+ dispatch({
374
+ type: 'EXIT_EDIT_MODE',
375
+ payload: newCellId
376
+ });
377
+ },
378
+ value: cell.value
379
+ }), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.DatePickerInput, (0, _extends2.default)({}, datePickerInputProps, {
380
+ style: {
381
+ position: 'static'
382
+ },
383
+ placeholder: (datePickerInputProps === null || datePickerInputProps === void 0 ? void 0 : datePickerInputProps.placeholder) || 'mm/dd/yyyy',
384
+ labelText: (datePickerInputProps === null || datePickerInputProps === void 0 ? void 0 : datePickerInputProps.labelText) || cellLabel || 'Set date',
385
+ id: datePickerInputProps.id || "".concat(blockClass, "__inline-edit--date-picker--").concat(cell.row.index),
386
+ hideLabel: true
387
+ })));
388
+ }; // Ensures that months and days are all 2 digits, prefixes 0 if `num` is a single digit
389
+
390
+
391
+ var padTo2Digits = function padTo2Digits(num) {
392
+ return num.toString().padStart(2, '0');
393
+ };
394
+
395
+ var buildDate = function buildDate(value) {
396
+ if (value instanceof Date) {
397
+ var _config$dateFormat = config.dateFormat,
398
+ dateFormat = _config$dateFormat === void 0 ? 'm/d/Y' : _config$dateFormat;
399
+ var maskedFullYear = value.getFullYear();
400
+ var maskedMonth = padTo2Digits(value.getMonth() + 1);
401
+ var maskedDay = padTo2Digits(value.getDate());
402
+
403
+ if (dateFormat === 'm/d/Y' || dateFormat === 'm/d/y') {
404
+ return [maskedMonth, maskedDay, maskedFullYear].join('/');
405
+ }
406
+
407
+ if (dateFormat === 'd/m/Y' || dateFormat === 'd/m/y') {
408
+ return [maskedDay, maskedMonth, maskedFullYear].join('/');
409
+ }
410
+ }
411
+
412
+ return null;
413
+ };
414
+
415
+ return (
416
+ /*#__PURE__*/
417
+ // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions
418
+ _react.default.createElement("div", {
419
+ ref: outerButtonElement,
420
+ "data-cell-id": cellId,
421
+ "data-column-index": columnIndex,
422
+ "data-row-index": cell.row.index,
423
+ "data-disabled": nonEditCell,
424
+ "data-inline-type": type,
425
+ onClick: !nonEditCell ? handleInlineCellClick : addActiveState,
426
+ onKeyDown: !nonEditCell ? handleKeyDown : null,
427
+ className: (0, _classnames.default)("".concat(blockClass, "__inline-edit--outer-cell-button"), (_cx3 = {}, (0, _defineProperty2.default)(_cx3, "".concat(blockClass, "__inline-edit--outer-cell-button--").concat(rowSize), rowSize), (0, _defineProperty2.default)(_cx3, "".concat(blockClass, "__inline-edit--outer-cell-button--lg"), !rowSize), _cx3))
428
+ }, !inEditMode && /*#__PURE__*/_react.default.createElement(_InlineEditButton.InlineEditButton, {
429
+ isActiveCell: cellId === activeCellId,
430
+ renderIcon: setRenderIcon(),
431
+ label: type === 'selection' ? value.text : type === 'date' ? buildDate(value) : value,
432
+ labelIcon: (value === null || value === void 0 ? void 0 : value.icon) || null,
433
+ placeholder: placeholder,
434
+ tabIndex: tabIndex,
435
+ nonEditCell: nonEditCell,
436
+ columnConfig: cell.column,
437
+ totalInlineEditColumns: totalInlineEditColumns,
438
+ totalColumns: totalColumns,
439
+ type: type
440
+ }), !nonEditCell && inEditMode && cellId === activeCellId && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, type === 'text' && /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.TextInput, (0, _extends2.default)({
441
+ labelText: cellLabel,
442
+ placeholder: placeholder
443
+ }, inputProps, {
444
+ id: cellId,
445
+ hideLabel: true,
446
+ defaultValue: cellValue,
447
+ onChange: function onChange(event) {
448
+ setCellValue(event.target.value);
449
+
450
+ if (inputProps.onChange) {
451
+ inputProps.onChange(event.target.value);
452
+ }
453
+ },
454
+ ref: textInputRef
455
+ })), type === 'number' && /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.NumberInput, (0, _extends2.default)({
456
+ placeholder: placeholder,
457
+ label: cellLabel
458
+ }, inputProps, {
459
+ id: cellId,
460
+ hideLabel: true,
461
+ defaultValue: cellValue,
462
+ onChange: function onChange(event) {
463
+ setCellValue(event.imaginaryTarget.value);
464
+
465
+ if (inputProps.onChange) {
466
+ inputProps.onChange(event.imaginaryTarget.value);
467
+ }
468
+ },
469
+ ref: numberInputRef
470
+ })), type === 'selection' && renderSelectCell(), type === 'date' && renderDateCell()))
471
+ );
472
+ };
473
+
474
+ exports.InlineEditCell = InlineEditCell;
475
+ InlineEditCell.propTypes = {
476
+ cell: _propTypes.default.object,
477
+ config: _propTypes.default.object,
478
+ instance: _propTypes.default.shape({
479
+ columns: _propTypes.default.arrayOf(_propTypes.default.object),
480
+ onDataUpdate: _propTypes.default.func,
481
+ rows: _propTypes.default.arrayOf(_propTypes.default.object),
482
+ rowSize: _propTypes.default.string,
483
+ tableId: _propTypes.default.string
484
+ }),
485
+ nonEditCell: _propTypes.default.bool,
486
+ placeholder: _propTypes.default.string,
487
+ tabIndex: _propTypes.default.number,
488
+ totalInlineEditColumns: _propTypes.default.number,
489
+ type: _propTypes.default.oneOf(['text', 'number', 'selection', 'date']),
490
+ value: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.node, _propTypes.default.object])
491
+ };
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "InlineEditCell", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _InlineEditCell.InlineEditCell;
10
+ }
11
+ });
12
+
13
+ var _InlineEditCell = require("./InlineEditCell");
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.InlineEditProvider = exports.InlineEditContext = void 0;
11
+
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
+
14
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
+
16
+ var _react = _interopRequireWildcard(require("react"));
17
+
18
+ var _propTypes = _interopRequireDefault(require("prop-types"));
19
+
20
+ var _returnUpdatedActiveCell = require("./returnUpdatedActiveCell");
21
+
22
+ var _getCellIdAsObject = require("./getCellIdAsObject");
23
+
24
+ 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); }
25
+
26
+ 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; }
27
+
28
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
29
+
30
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
31
+
32
+ var InlineEditContext = /*#__PURE__*/(0, _react.createContext)();
33
+ exports.InlineEditContext = InlineEditContext;
34
+
35
+ var inlineEditReducer = function inlineEditReducer(state, action) {
36
+ switch (action.type) {
37
+ case 'ADD_GRID_ACTIVE_FOCUS':
38
+ {
39
+ return _objectSpread(_objectSpread({}, state), {}, {
40
+ gridActive: true,
41
+ activeCellId: action.payload,
42
+ // set default active cell when grid receives focus
43
+ previousActiveCellId: null
44
+ });
45
+ }
46
+
47
+ case 'REMOVE_GRID_ACTIVE_FOCUS':
48
+ {
49
+ return _objectSpread(_objectSpread({}, state), {}, {
50
+ gridActive: false,
51
+ editId: null,
52
+ activeCellId: null,
53
+ previousActiveCellId: action.payload
54
+ });
55
+ }
56
+
57
+ case 'ENTER_EDIT_MODE':
58
+ {
59
+ return _objectSpread(_objectSpread({}, state), {}, {
60
+ activeCellId: action.payload.activeCellId,
61
+ editId: action.payload.editId
62
+ });
63
+ }
64
+
65
+ case 'EXIT_EDIT_MODE':
66
+ {
67
+ return _objectSpread(_objectSpread({}, state), {}, {
68
+ activeCellId: action.payload,
69
+ editId: null
70
+ });
71
+ }
72
+
73
+ case 'UPDATE_ACTIVE_CELL_ID':
74
+ {
75
+ var _action$payload = action.payload,
76
+ direction = _action$payload.direction,
77
+ oldId = _action$payload.oldId,
78
+ instance = _action$payload.instance;
79
+
80
+ if (!action.payload.direction) {
81
+ return _objectSpread(_objectSpread({}, state), {}, {
82
+ activeCellId: action.payload,
83
+ editId: null
84
+ });
85
+ }
86
+
87
+ if (direction && typeof direction === 'string') {
88
+ var activeCellCoords = (0, _getCellIdAsObject.getCellIdAsObject)(oldId);
89
+ var totalVisibleColumns = instance.visibleColumns.filter(function (item) {
90
+ return item.id !== 'spacer';
91
+ });
92
+ return (0, _returnUpdatedActiveCell.returnUpdatedActiveCell)({
93
+ activeCellCoords: activeCellCoords,
94
+ direction: direction,
95
+ totalVisibleColumns: totalVisibleColumns,
96
+ state: state,
97
+ instance: instance
98
+ });
99
+ }
100
+
101
+ break;
102
+ }
103
+
104
+ default:
105
+ return state;
106
+ }
107
+ };
108
+
109
+ var InlineEditProvider = function InlineEditProvider(_ref) {
110
+ var children = _ref.children;
111
+ var initialState = {};
112
+
113
+ var _useReducer = (0, _react.useReducer)(inlineEditReducer, initialState),
114
+ _useReducer2 = (0, _slicedToArray2.default)(_useReducer, 2),
115
+ state = _useReducer2[0],
116
+ dispatch = _useReducer2[1];
117
+
118
+ return /*#__PURE__*/_react.default.createElement(InlineEditContext.Provider, {
119
+ value: {
120
+ state: state,
121
+ dispatch: dispatch
122
+ }
123
+ }, children);
124
+ };
125
+
126
+ exports.InlineEditProvider = InlineEditProvider;
127
+ InlineEditProvider.propTypes = {
128
+ children: _propTypes.default.element
129
+ };
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getCellIdAsObject = void 0;
7
+
8
+ /**
9
+ * Copyright IBM Corp. 2022, 2022
10
+ *
11
+ * This source code is licensed under the Apache-2.0 license found in the
12
+ * LICENSE file in the root directory of this source tree.
13
+ */
14
+ // Turns activeCellId into an object to be able to
15
+ // update cell coordinates more easily
16
+ var getCellIdAsObject = function getCellIdAsObject(oldId) {
17
+ var oldIdArr = oldId.split('-');
18
+ var updatedOldValuesArray = oldIdArr.map(function (item) {
19
+ if (isNaN(item)) {
20
+ return item;
21
+ }
22
+
23
+ return Number(item);
24
+ });
25
+ var indexArray = updatedOldValuesArray.filter(Number.isFinite);
26
+ var keyArray = updatedOldValuesArray.filter(function (item) {
27
+ return typeof item === 'string';
28
+ });
29
+ var activeCellCoords = {};
30
+ keyArray.forEach(function (element, index) {
31
+ activeCellCoords[element] = indexArray[index];
32
+ });
33
+ return activeCellCoords;
34
+ };
35
+
36
+ exports.getCellIdAsObject = getCellIdAsObject;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "InlineEditContext", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _InlineEditContext.InlineEditContext;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "InlineEditProvider", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _InlineEditContext.InlineEditProvider;
16
+ }
17
+ });
18
+
19
+ var _InlineEditContext = require("./InlineEditContext");