@carbon/ibm-products 1.59.1 → 1.60.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. package/css/index-full-carbon.css +42 -21
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +1 -1
  4. package/css/index-full-carbon.min.css.map +1 -1
  5. package/css/index-without-carbon.css +42 -21
  6. package/css/index-without-carbon.css.map +1 -1
  7. package/css/index-without-carbon.min.css +1 -1
  8. package/css/index-without-carbon.min.css.map +1 -1
  9. package/css/index.css +42 -21
  10. package/css/index.css.map +1 -1
  11. package/css/index.min.css +1 -1
  12. package/css/index.min.css.map +1 -1
  13. package/es/components/Datagrid/Datagrid/Datagrid.js +2 -1
  14. package/es/components/Datagrid/Datagrid/DatagridContent.js +7 -1
  15. package/es/components/Datagrid/Datagrid/DatagridEmptyBody.js +4 -4
  16. package/es/components/Datagrid/Datagrid/DatagridSelectAll.js +13 -1
  17. package/es/components/Datagrid/Datagrid/DatagridToolbar.js +3 -15
  18. package/es/components/Datagrid/Datagrid/DraggableElement.js +32 -135
  19. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/Columns.js +14 -38
  20. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsTearsheet.js +1 -0
  21. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/DraggableItemsList.js +128 -40
  22. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +7 -6
  23. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +104 -18
  24. package/es/components/Datagrid/Datagrid/addons/Filtering/constants.js +1 -0
  25. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +37 -4
  26. package/es/components/Datagrid/useFiltering.js +4 -1
  27. package/es/components/Datagrid/useNestedRowExpander.js +22 -9
  28. package/es/components/Datagrid/useRowExpander.js +22 -9
  29. package/es/components/Datagrid/utils/getArgTypes.js +12 -0
  30. package/es/components/EmptyStates/EmptyState.js +1 -1
  31. package/es/components/EmptyStates/ErrorEmptyState/ErrorEmptyState.js +1 -1
  32. package/es/components/EmptyStates/NoDataEmptyState/NoDataEmptyState.js +1 -1
  33. package/es/components/EmptyStates/NoTagsEmptyState/NoTagsEmptyState.js +1 -1
  34. package/es/components/EmptyStates/NotFoundEmptyState/NotFoundEmptyState.js +1 -1
  35. package/es/components/EmptyStates/NotificationsEmptyState/NotificationsEmptyState.js +1 -1
  36. package/es/components/EmptyStates/UnauthorizedEmptyState/UnauthorizedEmptyState.js +1 -1
  37. package/es/components/EmptyStates/assets/ErrorIllustration.js +6 -11
  38. package/es/components/EmptyStates/assets/NoDataIllustration.js +6 -11
  39. package/es/components/EmptyStates/assets/NoTagsIllustration.js +6 -12
  40. package/es/components/EmptyStates/assets/NotFoundIllustration.js +6 -12
  41. package/es/components/EmptyStates/assets/NotificationsIllustration.js +6 -12
  42. package/es/components/EmptyStates/assets/UnauthorizedIllustration.js +6 -12
  43. package/es/components/FilterSummary/FilterSummary.js +9 -3
  44. package/es/components/TagSet/TagSet.js +3 -7
  45. package/es/global/js/hooks/useWindowScroll.js +5 -0
  46. package/lib/components/Datagrid/Datagrid/Datagrid.js +2 -1
  47. package/lib/components/Datagrid/Datagrid/DatagridContent.js +6 -0
  48. package/lib/components/Datagrid/Datagrid/DatagridEmptyBody.js +3 -3
  49. package/lib/components/Datagrid/Datagrid/DatagridSelectAll.js +13 -1
  50. package/lib/components/Datagrid/Datagrid/DatagridToolbar.js +3 -15
  51. package/lib/components/Datagrid/Datagrid/DraggableElement.js +34 -140
  52. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/Columns.js +17 -38
  53. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsTearsheet.js +1 -0
  54. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/DraggableItemsList.js +128 -47
  55. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +7 -6
  56. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +104 -24
  57. package/lib/components/Datagrid/Datagrid/addons/Filtering/constants.js +4 -2
  58. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +36 -3
  59. package/lib/components/Datagrid/useFiltering.js +4 -1
  60. package/lib/components/Datagrid/useNestedRowExpander.js +24 -9
  61. package/lib/components/Datagrid/useRowExpander.js +24 -9
  62. package/lib/components/Datagrid/utils/getArgTypes.js +12 -0
  63. package/lib/components/EmptyStates/EmptyState.js +1 -1
  64. package/lib/components/EmptyStates/ErrorEmptyState/ErrorEmptyState.js +1 -1
  65. package/lib/components/EmptyStates/NoDataEmptyState/NoDataEmptyState.js +1 -1
  66. package/lib/components/EmptyStates/NoTagsEmptyState/NoTagsEmptyState.js +1 -1
  67. package/lib/components/EmptyStates/NotFoundEmptyState/NotFoundEmptyState.js +1 -1
  68. package/lib/components/EmptyStates/NotificationsEmptyState/NotificationsEmptyState.js +1 -1
  69. package/lib/components/EmptyStates/UnauthorizedEmptyState/UnauthorizedEmptyState.js +1 -1
  70. package/lib/components/EmptyStates/assets/ErrorIllustration.js +6 -11
  71. package/lib/components/EmptyStates/assets/NoDataIllustration.js +6 -11
  72. package/lib/components/EmptyStates/assets/NoTagsIllustration.js +6 -12
  73. package/lib/components/EmptyStates/assets/NotFoundIllustration.js +6 -12
  74. package/lib/components/EmptyStates/assets/NotificationsIllustration.js +6 -12
  75. package/lib/components/EmptyStates/assets/UnauthorizedIllustration.js +6 -12
  76. package/lib/components/FilterSummary/FilterSummary.js +9 -10
  77. package/lib/components/TagSet/TagSet.js +2 -6
  78. package/lib/global/js/hooks/useWindowScroll.js +6 -0
  79. package/package.json +6 -5
  80. package/scss/components/Datagrid/_datagrid.scss +1 -1
  81. package/scss/components/Datagrid/styles/_draggableElement.scss +44 -20
  82. package/scss/components/Datagrid/styles/addons/_CustomizeColumnsTearsheet.scss +0 -1
@@ -1,13 +1,17 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
4
+ 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; }
5
+ 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) { _defineProperty(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; }
2
6
  /**
3
- * Copyright IBM Corp. 2022, 2022
7
+ * Copyright IBM Corp. 2022, 2023
4
8
  *
5
9
  * This source code is licensed under the Apache-2.0 license found in the
6
10
  * LICENSE file in the root directory of this source tree.
7
11
  */
8
12
  import React, { createContext, useState } from 'react';
9
13
  import PropTypes from 'prop-types';
10
- import { DATE, DROPDOWN, NUMBER, RADIO, CHECKBOX } from './constants';
14
+ import { DATE, DROPDOWN, NUMBER, RADIO, CHECKBOX, CLEAR_SINGLE_FILTER } from './constants';
11
15
  export var FilterContext = /*#__PURE__*/createContext();
12
16
  var EventEmitter = {
13
17
  events: {},
@@ -27,42 +31,123 @@ var EventEmitter = {
27
31
  }
28
32
  }
29
33
  };
30
- var prepareFiltersForTags = function prepareFiltersForTags(filters) {
34
+ var removeFilterItem = function removeFilterItem(state, index) {
35
+ return state.splice(index, 1);
36
+ };
37
+ var updateFilterState = function updateFilterState(state, type, value) {
38
+ if (type === CHECKBOX) {
39
+ return;
40
+ }
41
+ if (type === DATE) {
42
+ var _filterTagIndex = state.findIndex(function (val) {
43
+ return formatDateRange(val.value[0], val.value[1]) === formatDateRange(value[0], value[1]);
44
+ });
45
+ return removeFilterItem(state, _filterTagIndex);
46
+ }
47
+ var filterTagIndex = state.findIndex(function (val) {
48
+ return val.value === value;
49
+ });
50
+ return removeFilterItem(state, filterTagIndex);
51
+ };
52
+ export var clearSingleFilter = function clearSingleFilter(_ref, setAllFilters, state) {
53
+ var key = _ref.key,
54
+ value = _ref.value;
55
+ var tempState = _toConsumableArray(state.filters);
56
+ tempState.forEach(function (f, filterIndex) {
57
+ if (f.id === key) {
58
+ var filterValues = f.value;
59
+ var filterType = f.type;
60
+ updateFilterState(tempState, filterType, value);
61
+ if (filterType === CHECKBOX) {
62
+ /**
63
+ When all checkboxes of a group are all unselected the value still exists in the filtersObjectArray
64
+ This checks if all the checkboxes are selected = false and removes it from the array
65
+ */
66
+ var valueIndex = filterValues.findIndex(function (val) {
67
+ return val.id === value;
68
+ });
69
+ filterValues[valueIndex].selected = false;
70
+ var updatedFilterObject = _objectSpread(_objectSpread({}, f), {}, {
71
+ value: _toConsumableArray(filterValues)
72
+ });
73
+ tempState[filterIndex] = updatedFilterObject;
74
+ var index = tempState.findIndex(function (filter) {
75
+ return filter.id === key;
76
+ });
77
+
78
+ // If all the selected state is false remove from array
79
+ var shouldRemoveFromArray = tempState[index].value.every(function (val) {
80
+ return val.selected === false;
81
+ });
82
+ if (shouldRemoveFromArray) {
83
+ removeFilterItem(tempState, index);
84
+ }
85
+ }
86
+ }
87
+ });
88
+ setAllFilters(tempState);
89
+ };
90
+ var handleSingleFilterRemoval = function handleSingleFilterRemoval(key, value) {
91
+ EventEmitter.dispatch(CLEAR_SINGLE_FILTER, {
92
+ key: key,
93
+ value: value
94
+ });
95
+ };
96
+ var formatDateRange = function formatDateRange(startDate, endDate) {
97
+ var startDateObj = new Date(startDate);
98
+ var endDateObj = new Date(endDate);
99
+ return "".concat(startDateObj.toLocaleDateString(), " - ").concat(endDateObj.toLocaleDateString());
100
+ };
101
+ var prepareFiltersForTags = function prepareFiltersForTags(filters, renderDateLabel) {
31
102
  var tags = [];
32
- filters.forEach(function (_ref) {
33
- var id = _ref.id,
34
- type = _ref.type,
35
- value = _ref.value;
103
+ filters.forEach(function (_ref2) {
104
+ var id = _ref2.id,
105
+ type = _ref2.type,
106
+ value = _ref2.value;
107
+ var sharedFilterProps = {
108
+ filter: true,
109
+ onClose: function onClose() {
110
+ return handleSingleFilterRemoval(id, value);
111
+ }
112
+ };
36
113
  if (type === DROPDOWN || type === RADIO || type === NUMBER) {
37
- tags.push({
114
+ tags.push(_objectSpread({
38
115
  key: id,
39
116
  value: value
40
- });
117
+ }, sharedFilterProps));
41
118
  } else if (type === DATE) {
119
+ var _renderDateLabel;
42
120
  var _value = _slicedToArray(value, 2),
43
121
  startDate = _value[0],
44
122
  endDate = _value[1];
45
- tags.push({
123
+ tags.push(_objectSpread({
46
124
  key: id,
47
- value: "".concat(startDate.toLocaleDateString(), " - ").concat(endDate.toLocaleDateString())
48
- });
125
+ value: (_renderDateLabel = renderDateLabel === null || renderDateLabel === void 0 ? void 0 : renderDateLabel(startDate, endDate)) !== null && _renderDateLabel !== void 0 ? _renderDateLabel : formatDateRange(startDate, endDate)
126
+ }, sharedFilterProps));
49
127
  } else if (type === CHECKBOX) {
50
128
  value.forEach(function (checkbox) {
51
129
  if (checkbox.selected) {
52
- tags.push({
130
+ tags.push(_objectSpread(_objectSpread({
53
131
  key: id,
54
132
  value: checkbox.value
55
- });
133
+ }, sharedFilterProps), {}, {
134
+ onClose: function onClose() {
135
+ return handleSingleFilterRemoval(id, checkbox.value);
136
+ }
137
+ }));
56
138
  }
57
139
  });
58
140
  }
59
141
  });
60
142
  return tags;
61
143
  };
62
- export var FilterProvider = function FilterProvider(_ref2) {
63
- var children = _ref2.children,
64
- filters = _ref2.filters;
65
- var filterTags = prepareFiltersForTags(filters);
144
+ export var FilterProvider = function FilterProvider(_ref3) {
145
+ var children = _ref3.children,
146
+ filters = _ref3.filters,
147
+ filterProps = _ref3.filterProps;
148
+ var _ref4 = filterProps || {},
149
+ renderDateLabel = _ref4.renderDateLabel;
150
+ var filterTags = prepareFiltersForTags(filters, renderDateLabel);
66
151
  var _useState = useState(false),
67
152
  _useState2 = _slicedToArray(_useState, 2),
68
153
  panelOpen = _useState2[0],
@@ -79,5 +164,6 @@ export var FilterProvider = function FilterProvider(_ref2) {
79
164
  };
80
165
  FilterProvider.propTypes = {
81
166
  children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,
167
+ filterProps: PropTypes.object,
82
168
  filters: PropTypes.arrayOf(PropTypes.object).isRequired
83
169
  };
@@ -21,6 +21,7 @@ export var DROPDOWN = 'dropdown';
21
21
 
22
22
  /** Constants for event emitters */
23
23
  export var CLEAR_FILTERS = 'clearFilters';
24
+ export var CLEAR_SINGLE_FILTER = 'clearSingleFilter';
24
25
 
25
26
  /** Constants for panel dimensions */
26
27
  export var PANEL_WIDTH = 320;
@@ -11,10 +11,11 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
11
11
  * US Government Users Restricted Rights - Use, duplication or disclosure
12
12
  * restricted by GSA ADP Schedule Contract with IBM Corp.
13
13
  */
14
- import React, { useState, useRef, useEffect } from 'react';
14
+ import React, { useState, useRef, useEffect, useCallback } from 'react';
15
15
  import { Checkbox, DatePicker, DatePickerInput, Dropdown, FormGroup, NumberInput, RadioButton, RadioButtonGroup } from 'carbon-components-react';
16
16
  import { INSTANT, BATCH, DATE, CHECKBOX, NUMBER, RADIO, DROPDOWN, PANEL } from '../constants';
17
17
  import { getInitialStateFromFilters } from '../utils';
18
+ import { usePreviousValue } from '../../../../../../global/js/hooks';
18
19
  var useFilters = function useFilters(_ref) {
19
20
  var updateMethod = _ref.updateMethod,
20
21
  _ref$filters = _ref.filters,
@@ -23,7 +24,8 @@ var useFilters = function useFilters(_ref) {
23
24
  variation = _ref.variation,
24
25
  reactTableFiltersState = _ref.reactTableFiltersState,
25
26
  _ref$onCancel = _ref.onCancel,
26
- onCancel = _ref$onCancel === void 0 ? function () {} : _ref$onCancel;
27
+ onCancel = _ref$onCancel === void 0 ? function () {} : _ref$onCancel,
28
+ panelOpen = _ref.panelOpen;
27
29
  /** State */
28
30
  var _useState = useState(getInitialStateFromFilters(filters, variation, reactTableFiltersState)),
29
31
  _useState2 = _slicedToArray(_useState, 2),
@@ -33,11 +35,17 @@ var useFilters = function useFilters(_ref) {
33
35
  _useState4 = _slicedToArray(_useState3, 2),
34
36
  filtersObjectArray = _useState4[0],
35
37
  setFiltersObjectArray = _useState4[1];
38
+ var previousState = usePreviousValue({
39
+ panelOpen: panelOpen
40
+ });
36
41
 
37
42
  // When using batch actions we have to store the filters to then apply them later
38
43
  var prevFiltersRef = useRef(JSON.stringify(filtersState));
39
44
  var lastAppliedFilters = useRef(JSON.stringify(reactTableFiltersState));
40
45
  var prevFiltersObjectArrayRef = useRef(JSON.stringify(filtersObjectArray));
46
+ var holdingPrevFiltersRef = useRef();
47
+ var holdingLastAppliedFiltersRef = useRef([]);
48
+ var holdingPrevFiltersObjectArrayRef = useRef([]);
41
49
 
42
50
  /** Methods */
43
51
  // If the user decides to cancel or click outside the flyout, it reverts back to the filters that were
@@ -46,8 +54,14 @@ var useFilters = function useFilters(_ref) {
46
54
  setFiltersState(JSON.parse(prevFiltersRef.current));
47
55
  setFiltersObjectArray(JSON.parse(prevFiltersObjectArrayRef.current));
48
56
  setAllFilters(JSON.parse(lastAppliedFilters.current));
57
+
58
+ // Set the temp prev refs, these will be used to populate the prev values once the
59
+ // panel opens again
60
+ holdingPrevFiltersRef.current = JSON.parse(prevFiltersRef.current);
61
+ holdingLastAppliedFiltersRef.current = JSON.parse(prevFiltersObjectArrayRef.current);
62
+ holdingPrevFiltersObjectArrayRef.current = JSON.parse(lastAppliedFilters.current);
49
63
  };
50
- var reset = function reset() {
64
+ var reset = useCallback(function () {
51
65
  // When we reset we want the "initialFilters" to be an empty array
52
66
  var resetFiltersArray = [];
53
67
 
@@ -63,7 +77,7 @@ var useFilters = function useFilters(_ref) {
63
77
  // Update their respective refs so everything is in sync
64
78
  prevFiltersRef.current = JSON.stringify(initialFiltersState);
65
79
  prevFiltersObjectArrayRef.current = JSON.stringify(initialFiltersObjectArray);
66
- };
80
+ }, [filters, setAllFilters, variation]);
67
81
  var applyFilters = function applyFilters(_ref2) {
68
82
  var column = _ref2.column,
69
83
  value = _ref2.value,
@@ -291,6 +305,25 @@ var useFilters = function useFilters(_ref) {
291
305
  key: column
292
306
  }, filter);
293
307
  };
308
+
309
+ /** This useEffect will properly handle the previous filters when the panel closes
310
+ * 1. If the panel closes we need to call the reset fn but also store the
311
+ * previous filters in a (new) temporary place.
312
+ * 2. When the panel opens again, take the values from the temporary place
313
+ * and populate the filter state with them
314
+ */
315
+ useEffect(function () {
316
+ if (!panelOpen && previousState !== null && previousState !== void 0 && previousState.panelOpen) {
317
+ setAllFilters(holdingLastAppliedFiltersRef.current);
318
+ }
319
+ if (panelOpen && !(previousState !== null && previousState !== void 0 && previousState.panelOpen)) {
320
+ if (holdingPrevFiltersRef.current && holdingLastAppliedFiltersRef.current && holdingPrevFiltersObjectArrayRef.current) {
321
+ setFiltersState(holdingPrevFiltersRef.current);
322
+ setFiltersObjectArray(holdingLastAppliedFiltersRef.current);
323
+ setAllFilters(JSON.parse(prevFiltersObjectArrayRef.current));
324
+ }
325
+ }
326
+ }, [panelOpen, previousState, previousState === null || previousState === void 0 ? void 0 : previousState.panelOpen, reset, setAllFilters]);
294
327
  var cancel = function cancel() {
295
328
  // Reverting to previous filters only applies when using batch actions
296
329
  if (updateMethod === BATCH) {
@@ -1,4 +1,5 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _typeof from "@babel/runtime/helpers/typeof";
2
3
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
4
  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; }
4
5
  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) { _defineProperty(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; }
@@ -25,7 +26,9 @@ var useFiltering = function useFiltering(hooks) {
25
26
  endDate = _ref2[1];
26
27
  return rows.filter(function (row) {
27
28
  var rowValue = row.values[id];
28
- if (rowValue.getTime() <= endDate.getTime() && rowValue.getTime() >= startDate.getTime()) {
29
+ var startDateObj = _typeof(startDate) === 'object' ? startDate : new Date(startDate);
30
+ var endDateObj = _typeof(endDate) === 'object' ? endDate : new Date(endDate);
31
+ if (rowValue.getTime() <= endDateObj.getTime() && rowValue.getTime() >= startDateObj.getTime()) {
29
32
  // In date range
30
33
  return true;
31
34
  } else {
@@ -2,30 +2,42 @@ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
2
  import _extends from "@babel/runtime/helpers/extends";
3
3
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
4
4
  /* eslint-disable react/prop-types */
5
- /*
6
- * Licensed Materials - Property of IBM
7
- * 5724-Q36
8
- * (c) Copyright IBM Corp. 2020
9
- * US Government Users Restricted Rights - Use, duplication or disclosure
10
- * restricted by GSA ADP Schedule Contract with IBM Corp.
5
+ /**
6
+ * Copyright IBM Corp. 2020, 2023
7
+ *
8
+ * This source code is licensed under the Apache-2.0 license found in the
9
+ * LICENSE file in the root directory of this source tree.
11
10
  */
12
- import React from 'react';
11
+
12
+ import React, { useRef } from 'react';
13
13
  import { ChevronRight16 } from '@carbon/icons-react';
14
14
  import cx from 'classnames';
15
15
  import { pkg, carbon } from '../../settings';
16
16
  var blockClass = "".concat(pkg.prefix, "--datagrid");
17
17
  var useNestedRowExpander = function useNestedRowExpander(hooks) {
18
+ var tempState = useRef();
19
+ var useInstance = function useInstance(instance) {
20
+ tempState.current = instance;
21
+ };
18
22
  var visibleColumns = function visibleColumns(columns) {
19
23
  var expanderColumn = {
20
24
  id: 'expander',
21
25
  Cell: function Cell(_ref) {
22
26
  var _cx;
23
27
  var row = _ref.row;
28
+ var _ref2 = (tempState === null || tempState === void 0 ? void 0 : tempState.current) || {},
29
+ _ref2$expanderButtonT = _ref2.expanderButtonTitleExpanded,
30
+ expanderButtonTitleExpanded = _ref2$expanderButtonT === void 0 ? 'Collapse row' : _ref2$expanderButtonT,
31
+ _ref2$expanderButtonT2 = _ref2.expanderButtonTitleCollapsed,
32
+ expanderButtonTitleCollapsed = _ref2$expanderButtonT2 === void 0 ? 'Expand row' : _ref2$expanderButtonT2;
33
+ var expanderTitle = row.isExpanded ? expanderButtonTitleExpanded : expanderButtonTitleCollapsed;
24
34
  return row.canExpand && /*#__PURE__*/React.createElement("button", _extends({
25
35
  type: "button",
26
- "aria-label": "Expand current row",
36
+ "aria-label": expanderTitle,
27
37
  className: cx("".concat(blockClass, "__row-expander"), "".concat(carbon.prefix, "--btn"), "".concat(carbon.prefix, "--btn--ghost"))
28
- }, row.getToggleRowExpandedProps()), /*#__PURE__*/React.createElement(ChevronRight16, {
38
+ }, row.getToggleRowExpandedProps(), {
39
+ title: expanderTitle
40
+ }), /*#__PURE__*/React.createElement(ChevronRight16, {
29
41
  className: cx("".concat(blockClass, "__expander-icon"), "".concat(blockClass, "__row-expander--icon"), (_cx = {}, _defineProperty(_cx, "".concat(blockClass, "__expander-icon--not-open"), !row.isExpanded), _defineProperty(_cx, "".concat(blockClass, "__expander-icon--open"), row.isExpanded), _cx))
30
42
  }));
31
43
  },
@@ -37,5 +49,6 @@ var useNestedRowExpander = function useNestedRowExpander(hooks) {
37
49
  return [expanderColumn].concat(_toConsumableArray(columns));
38
50
  };
39
51
  hooks.visibleColumns.push(visibleColumns);
52
+ hooks.useInstance.push(useInstance);
40
53
  };
41
54
  export default useNestedRowExpander;
@@ -1,29 +1,41 @@
1
1
  import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
2
  import _extends from "@babel/runtime/helpers/extends";
3
3
  /* eslint-disable react/prop-types */
4
- /*
5
- * Licensed Materials - Property of IBM
6
- * 5724-Q36
7
- * (c) Copyright IBM Corp. 2020
8
- * US Government Users Restricted Rights - Use, duplication or disclosure
9
- * restricted by GSA ADP Schedule Contract with IBM Corp.
4
+ /**
5
+ * Copyright IBM Corp. 2020, 2023
6
+ *
7
+ * This source code is licensed under the Apache-2.0 license found in the
8
+ * LICENSE file in the root directory of this source tree.
10
9
  */
11
- import React from 'react';
10
+
11
+ import React, { useRef } from 'react';
12
12
  import { ChevronDown16, ChevronUp16 } from '@carbon/icons-react';
13
13
  import cx from 'classnames';
14
14
  import { pkg, carbon } from '../../settings';
15
15
  var blockClass = "".concat(pkg.prefix, "--datagrid");
16
16
  var useRowExpander = function useRowExpander(hooks) {
17
+ var tempState = useRef();
18
+ var useInstance = function useInstance(instance) {
19
+ tempState.current = instance;
20
+ };
17
21
  var visibleColumns = function visibleColumns(columns) {
18
22
  var expanderColumn = {
19
23
  id: 'expander',
20
24
  Cell: function Cell(_ref) {
21
25
  var row = _ref.row;
26
+ var _ref2 = (tempState === null || tempState === void 0 ? void 0 : tempState.current) || {},
27
+ _ref2$expanderButtonT = _ref2.expanderButtonTitleExpanded,
28
+ expanderButtonTitleExpanded = _ref2$expanderButtonT === void 0 ? 'Collapse row' : _ref2$expanderButtonT,
29
+ _ref2$expanderButtonT2 = _ref2.expanderButtonTitleCollapsed,
30
+ expanderButtonTitleCollapsed = _ref2$expanderButtonT2 === void 0 ? 'Expand row' : _ref2$expanderButtonT2;
31
+ var expanderTitle = row.isExpanded ? expanderButtonTitleExpanded : expanderButtonTitleCollapsed;
22
32
  return row.canExpand && /*#__PURE__*/React.createElement("button", _extends({
23
33
  type: "button",
24
- "aria-label": "Expand current row",
34
+ "aria-label": expanderTitle,
25
35
  className: cx("".concat(blockClass, "__row-expander"), "".concat(carbon.prefix, "--btn"), "".concat(carbon.prefix, "--btn--ghost"))
26
- }, row.getToggleRowExpandedProps()), row.isExpanded ? /*#__PURE__*/React.createElement(ChevronUp16, {
36
+ }, row.getToggleRowExpandedProps(), {
37
+ title: expanderTitle
38
+ }), row.isExpanded ? /*#__PURE__*/React.createElement(ChevronUp16, {
27
39
  className: "".concat(blockClass, "__row-expander--icon")
28
40
  }) : /*#__PURE__*/React.createElement(ChevronDown16, {
29
41
  className: "".concat(blockClass, "__row-expander--icon")
@@ -37,5 +49,6 @@ var useRowExpander = function useRowExpander(hooks) {
37
49
  return [expanderColumn].concat(_toConsumableArray(columns));
38
50
  };
39
51
  hooks.visibleColumns.push(visibleColumns);
52
+ hooks.useInstance.push(useInstance);
40
53
  };
41
54
  export default useRowExpander;
@@ -91,6 +91,18 @@ export var ARG_TYPES = {
91
91
  },
92
92
  description: 'This value controls the height of the expanded content area. _This value is set/passed inside of the `datagridState` object._'
93
93
  },
94
+ expanderButtonTitleExpanded: {
95
+ control: {
96
+ type: 'text'
97
+ },
98
+ description: 'This value controls the expander title/aria-label when expanded. _This value is set/passed inside of the `datagridState` object._'
99
+ },
100
+ expanderButtonTitleCollapsed: {
101
+ control: {
102
+ type: 'text'
103
+ },
104
+ description: 'This value controls the expander title/aria-label when expanded. _This value is set/passed inside of the `datagridState` object._'
105
+ },
94
106
  customizeColumnsProps: {
95
107
  control: 'object',
96
108
  description: 'This is an object containing all of the props used with the column customization extension. _This value is set/passed inside of the `datagridState` object._'
@@ -50,7 +50,7 @@ export var EmptyState = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
50
50
  });
51
51
  };
52
52
  return /*#__PURE__*/React.createElement("div", _extends({}, rest, {
53
- className: cx(blockClass, className),
53
+ className: cx(blockClass, className, "".concat(blockClass, "-type--default")),
54
54
  ref: ref
55
55
  }, getDevtoolsProps(componentName)), illustration && renderIllustration(), /*#__PURE__*/React.createElement(EmptyStateContent, {
56
56
  action: action,
@@ -38,7 +38,7 @@ export var ErrorEmptyState = /*#__PURE__*/React.forwardRef(function (_ref, ref)
38
38
  title = _ref.title,
39
39
  rest = _objectWithoutProperties(_ref, _excluded);
40
40
  return /*#__PURE__*/React.createElement("div", _extends({}, rest, {
41
- className: cx(blockClass, className),
41
+ className: cx(blockClass, className, "".concat(blockClass, "-type--error")),
42
42
  ref: ref
43
43
  }, getDevtoolsProps(componentName)), /*#__PURE__*/React.createElement(ErrorIllustration, {
44
44
  theme: illustrationTheme,
@@ -38,7 +38,7 @@ export var NoDataEmptyState = /*#__PURE__*/React.forwardRef(function (_ref, ref)
38
38
  title = _ref.title,
39
39
  rest = _objectWithoutProperties(_ref, _excluded);
40
40
  return /*#__PURE__*/React.createElement("div", _extends({}, rest, {
41
- className: cx(blockClass, className),
41
+ className: cx(blockClass, className, "".concat(blockClass, "-type--noData")),
42
42
  ref: ref
43
43
  }, getDevtoolsProps(componentName)), /*#__PURE__*/React.createElement(NoDataIllustration, {
44
44
  theme: illustrationTheme,
@@ -38,7 +38,7 @@ export var NoTagsEmptyState = /*#__PURE__*/React.forwardRef(function (_ref, ref)
38
38
  title = _ref.title,
39
39
  rest = _objectWithoutProperties(_ref, _excluded);
40
40
  return /*#__PURE__*/React.createElement("div", _extends({}, rest, {
41
- className: cx(blockClass, className),
41
+ className: cx(blockClass, className, "".concat(blockClass, "-type--noTags")),
42
42
  ref: ref
43
43
  }, getDevtoolsProps(componentName)), /*#__PURE__*/React.createElement(NoTagsIllustration, {
44
44
  theme: illustrationTheme,
@@ -38,7 +38,7 @@ export var NotFoundEmptyState = /*#__PURE__*/React.forwardRef(function (_ref, re
38
38
  title = _ref.title,
39
39
  rest = _objectWithoutProperties(_ref, _excluded);
40
40
  return /*#__PURE__*/React.createElement("div", _extends({}, rest, {
41
- className: cx(blockClass, className),
41
+ className: cx(blockClass, className, "".concat(blockClass, "-type--notFound")),
42
42
  ref: ref
43
43
  }, getDevtoolsProps(componentName)), /*#__PURE__*/React.createElement(NotFoundIllustration, {
44
44
  theme: illustrationTheme,
@@ -38,7 +38,7 @@ export var NotificationsEmptyState = /*#__PURE__*/React.forwardRef(function (_re
38
38
  title = _ref.title,
39
39
  rest = _objectWithoutProperties(_ref, _excluded);
40
40
  return /*#__PURE__*/React.createElement("div", _extends({}, rest, {
41
- className: cx(blockClass, className),
41
+ className: cx(blockClass, className, "".concat(blockClass, "-type--notifications")),
42
42
  ref: ref
43
43
  }, getDevtoolsProps(componentName)), /*#__PURE__*/React.createElement(NotificationsIllustration, {
44
44
  size: size,
@@ -38,7 +38,7 @@ export var UnauthorizedEmptyState = /*#__PURE__*/React.forwardRef(function (_ref
38
38
  title = _ref.title,
39
39
  rest = _objectWithoutProperties(_ref, _excluded);
40
40
  return /*#__PURE__*/React.createElement("div", _extends({}, rest, {
41
- className: cx(blockClass, className),
41
+ className: cx(blockClass, className, "".concat(blockClass, "-type--default")),
42
42
  ref: ref
43
43
  }, getDevtoolsProps(componentName)), /*#__PURE__*/React.createElement(UnauthorizedIllustration, {
44
44
  size: size,
@@ -24,13 +24,14 @@ export var ErrorIllustration = function ErrorIllustration(_ref) {
24
24
  size = _ref.size,
25
25
  rest = _objectWithoutProperties(_ref, _excluded);
26
26
  var svgId = uuidv4();
27
- return theme === 'dark' ? /*#__PURE__*/React.createElement("svg", _extends({}, rest, {
27
+ return /*#__PURE__*/React.createElement("svg", _extends({}, rest, {
28
28
  xmlns: "http://www.w3.org/2000/svg",
29
29
  width: 80,
30
30
  height: 80,
31
31
  viewBox: "0 0 80 80",
32
- className: cx(["".concat(blockClass, "__illustration"), "".concat(blockClass, "__illustration--").concat(size)])
33
- }), /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("linearGradient", {
32
+ className: cx(["".concat(blockClass, "__illustration"), "".concat(blockClass, "__illustration-error"), "".concat(blockClass, "__illustration--").concat(size)]),
33
+ role: "img"
34
+ }), theme === 'dark' ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("linearGradient", {
34
35
  id: "prefix__a_dark_".concat(svgId),
35
36
  x1: 38.9,
36
37
  y1: 77.08,
@@ -94,13 +95,7 @@ export var ErrorIllustration = function ErrorIllustration(_ref) {
94
95
  }), /*#__PURE__*/React.createElement("path", {
95
96
  d: "M38.93 49.79a6.9 6.9 0 01-2.66-2.51 6.11 6.11 0 01-.81-3v-1a2.26 2.26 0 01.81-2c.54-.35 1.43-.17 2.66.54a6.71 6.71 0 012.61 2.5 6.06 6.06 0 01.81 3v1a2.24 2.24 0 01-.81 2.05c-.54.29-1.41.12-2.61-.58zm-1.16-11.63L36 22.77V13l5.81 3.36v9.73l-1.64 13.46z",
96
97
  fill: "#525252"
97
- })) : /*#__PURE__*/React.createElement("svg", _extends({}, rest, {
98
- xmlns: "http://www.w3.org/2000/svg",
99
- width: 80,
100
- height: 80,
101
- viewBox: "0 0 80 80",
102
- className: cx(["".concat(blockClass, "__illustration"), "".concat(blockClass, "__illustration--").concat(size)])
103
- }), /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("linearGradient", {
98
+ })) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("linearGradient", {
104
99
  id: "prefix__a_".concat(svgId),
105
100
  x1: 29.96,
106
101
  y1: 45.68,
@@ -210,7 +205,7 @@ export var ErrorIllustration = function ErrorIllustration(_ref) {
210
205
  }), /*#__PURE__*/React.createElement("path", {
211
206
  d: "M38.93 49.79a6.9 6.9 0 01-2.66-2.51 6.11 6.11 0 01-.81-3v-1a2.26 2.26 0 01.81-2c.54-.35 1.43-.17 2.66.54a6.71 6.71 0 012.61 2.5 6.06 6.06 0 01.81 3v1a2.24 2.24 0 01-.81 2.05c-.54.29-1.41.12-2.61-.58zm-1.16-11.63L36 22.77V13l5.81 3.36v9.73l-1.64 13.46z",
212
207
  fill: "url(#prefix__e_".concat(svgId, ")")
213
- }));
208
+ })));
214
209
  };
215
210
  ErrorIllustration.propTypes = {
216
211
  size: PropTypes.oneOf(['lg', 'sm']),
@@ -24,13 +24,14 @@ export var NoDataIllustration = function NoDataIllustration(_ref) {
24
24
  size = _ref.size,
25
25
  rest = _objectWithoutProperties(_ref, _excluded);
26
26
  var svgId = uuidv4();
27
- return theme === 'dark' ? /*#__PURE__*/React.createElement("svg", _extends({}, rest, {
27
+ return /*#__PURE__*/React.createElement("svg", _extends({}, rest, {
28
28
  xmlns: "http://www.w3.org/2000/svg",
29
29
  width: 80,
30
30
  height: 80,
31
31
  viewBox: "0 0 80 80",
32
- className: cx(["".concat(blockClass, "__illustration"), "".concat(blockClass, "__illustration--").concat(size)])
33
- }), /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("linearGradient", {
32
+ className: cx(["".concat(blockClass, "__illustration"), "".concat(blockClass, "__illustration-noData"), "".concat(blockClass, "__illustration--").concat(size)]),
33
+ role: "img"
34
+ }), theme === 'dark' ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("linearGradient", {
34
35
  id: "prefix__a_dark_".concat(svgId),
35
36
  x1: 11.12,
36
37
  y1: 43.34,
@@ -93,13 +94,7 @@ export var NoDataIllustration = function NoDataIllustration(_ref) {
93
94
  }), /*#__PURE__*/React.createElement("path", {
94
95
  fill: "#525252",
95
96
  d: "M21.49 33.33l-8.2-4.73.01-5.69 8.19 4.74v5.68z"
96
- })) : /*#__PURE__*/React.createElement("svg", _extends({}, rest, {
97
- xmlns: "http://www.w3.org/2000/svg",
98
- width: 80,
99
- height: 80,
100
- viewBox: "0 0 80 80",
101
- className: cx(["".concat(blockClass, "__illustration"), "".concat(blockClass, "__illustration--").concat(size)])
102
- }), /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("linearGradient", {
97
+ })) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("linearGradient", {
103
98
  id: "prefix__a_".concat(svgId),
104
99
  x1: 18.35,
105
100
  y1: 74.17,
@@ -173,7 +168,7 @@ export var NoDataIllustration = function NoDataIllustration(_ref) {
173
168
  }), /*#__PURE__*/React.createElement("path", {
174
169
  className: "prefix__g_".concat(svgId),
175
170
  d: "M40 35.24L11.13 18.57v-.24l.21-.12 28.87 16.67-.21.11v.25zM21.49 33.33l-8.2-4.73.01-5.69 8.19 4.74v5.68z"
176
- }));
171
+ })));
177
172
  };
178
173
  NoDataIllustration.propTypes = {
179
174
  size: PropTypes.oneOf(['lg', 'sm']),
@@ -24,14 +24,15 @@ export var NoTagsIllustration = function NoTagsIllustration(_ref) {
24
24
  size = _ref.size,
25
25
  rest = _objectWithoutProperties(_ref, _excluded);
26
26
  var svgId = uuidv4();
27
- return theme === 'dark' ? /*#__PURE__*/React.createElement("svg", _extends({}, rest, {
27
+ return /*#__PURE__*/React.createElement("svg", _extends({}, rest, {
28
28
  xmlns: "http://www.w3.org/2000/svg",
29
29
  xmlnsXlink: "http://www.w3.org/1999/xlink",
30
30
  width: 80,
31
31
  height: 80,
32
32
  viewBox: "0 0 80 80",
33
- className: cx(["".concat(blockClass, "__illustration"), "".concat(blockClass, "__illustration--").concat(size)])
34
- }), /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("linearGradient", {
33
+ className: cx(["".concat(blockClass, "__illustration"), "".concat(blockClass, "__illustration-noTags"), "".concat(blockClass, "__illustration--").concat(size)]),
34
+ role: "img"
35
+ }), theme === 'dark' ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("linearGradient", {
35
36
  id: "prefix__c_dark_".concat(svgId),
36
37
  x1: 34.96,
37
38
  y1: 5.37,
@@ -231,14 +232,7 @@ export var NoTagsIllustration = function NoTagsIllustration(_ref) {
231
232
  }), /*#__PURE__*/React.createElement("path", {
232
233
  d: "M35.67 16.33a2.88 2.88 0 011.41.43 7 7 0 013.13 5.44c0 1.42-.7 2.24-1.73 2.24a2.82 2.82 0 01-1.4-.43 6.93 6.93 0 01-3.14-5.44c0-1.42.7-2.24 1.73-2.24m0-.41c-1.3 0-2.15 1-2.15 2.65a7.3 7.3 0 003.35 5.8 3.23 3.23 0 001.61.48c1.3 0 2.15-1 2.15-2.65a7.29 7.29 0 00-3.35-5.8 3.2 3.2 0 00-1.61-.48z",
233
234
  fill: "url(#prefix__i_dark_".concat(svgId, ")")
234
- })) : /*#__PURE__*/React.createElement("svg", _extends({}, rest, {
235
- xmlns: "http://www.w3.org/2000/svg",
236
- xmlnsXlink: "http://www.w3.org/1999/xlink",
237
- width: 80,
238
- height: 80,
239
- viewBox: "0 0 80 80",
240
- className: cx(["".concat(blockClass, "__illustration"), "".concat(blockClass, "__illustration--").concat(size)])
241
- }), /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("linearGradient", {
235
+ })) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("linearGradient", {
242
236
  id: "prefix__b_".concat(svgId),
243
237
  x1: 634.81,
244
238
  y1: 667.18,
@@ -481,7 +475,7 @@ export var NoTagsIllustration = function NoTagsIllustration(_ref) {
481
475
  }), /*#__PURE__*/React.createElement("path", {
482
476
  d: "M35.67 16.33a2.88 2.88 0 011.41.43 7 7 0 013.13 5.44c0 1.42-.7 2.24-1.73 2.24a2.82 2.82 0 01-1.4-.43 6.93 6.93 0 01-3.14-5.44c0-1.42.7-2.24 1.73-2.24m0-.41c-1.3 0-2.15 1-2.15 2.65a7.3 7.3 0 003.35 5.8 3.23 3.23 0 001.61.48c1.3 0 2.15-1 2.15-2.65a7.29 7.29 0 00-3.35-5.8 3.2 3.2 0 00-1.61-.48z",
483
477
  fill: "url(#prefix__j_".concat(svgId, ")")
484
- }));
478
+ })));
485
479
  };
486
480
  NoTagsIllustration.propTypes = {
487
481
  size: PropTypes.oneOf(['lg', 'sm']),