@carbon/ibm-products 1.27.0 → 1.31.0

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