@carbon/ibm-products 1.53.1 → 1.54.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -15
- package/css/index-full-carbon.css +0 -5
- package/css/index-full-carbon.css.map +1 -1
- package/css/index-full-carbon.min.css +1 -1
- package/css/index-full-carbon.min.css.map +1 -1
- package/css/index-without-carbon.css +0 -5
- package/css/index-without-carbon.css.map +1 -1
- package/css/index-without-carbon.min.css +1 -1
- package/css/index-without-carbon.min.css.map +1 -1
- package/css/index.css +0 -5
- package/css/index.css.map +1 -1
- package/css/index.min.css +1 -1
- package/css/index.min.css.map +1 -1
- package/es/components/AboutModal/AboutModal.js +1 -3
- package/es/components/ActionBar/ActionBar.js +4 -6
- package/es/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +2 -6
- package/es/components/ButtonSetWithOverflow/ButtonSetWithOverflow.js +3 -9
- package/es/components/Datagrid/Datagrid/DatagridVirtualBody.js +1 -3
- package/es/components/Datagrid/Datagrid/addons/Filtering/FilterFlyout.js +35 -36
- package/es/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +22 -26
- package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/index.js +0 -1
- package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +50 -17
- package/es/components/Datagrid/useFiltering.js +1 -1
- package/es/components/Datagrid/useStickyColumn.js +10 -3
- package/es/components/Datagrid/utils/makeData.js +1 -1
- package/es/components/PageHeader/PageHeader.js +2 -6
- package/es/components/SidePanel/SidePanel.js +1 -3
- package/es/components/TagSet/TagSet.js +2 -6
- package/es/global/js/hooks/useResizeObserver.js +14 -28
- package/es/global/js/utils/story-helper.js +1 -1
- package/lib/components/AboutModal/AboutModal.js +1 -3
- package/lib/components/ActionBar/ActionBar.js +4 -6
- package/lib/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +2 -6
- package/lib/components/ButtonSetWithOverflow/ButtonSetWithOverflow.js +3 -9
- package/lib/components/Datagrid/Datagrid/DatagridVirtualBody.js +1 -3
- package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterFlyout.js +33 -35
- package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +22 -26
- package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/index.js +0 -7
- package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +48 -15
- package/lib/components/Datagrid/useFiltering.js +1 -1
- package/lib/components/Datagrid/useStickyColumn.js +10 -3
- package/lib/components/Datagrid/utils/makeData.js +1 -1
- package/lib/components/PageHeader/PageHeader.js +2 -6
- package/lib/components/SidePanel/SidePanel.js +1 -3
- package/lib/components/TagSet/TagSet.js +2 -6
- package/lib/global/js/hooks/useResizeObserver.js +13 -27
- package/lib/global/js/utils/story-helper.js +1 -1
- package/package.json +7 -7
- package/scss/components/Datagrid/_storybook-styles.scss +8 -0
- package/scss/components/Datagrid/styles/_datagrid.scss +0 -5
- package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useInitialStateFromFilters.js +0 -21
- package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useInitialStateFromFilters.js +0 -30
|
@@ -12,12 +12,13 @@ import { Filter16 } from '@carbon/icons-react';
|
|
|
12
12
|
import { Button } from 'carbon-components-react';
|
|
13
13
|
import cx from 'classnames';
|
|
14
14
|
import PropTypes from 'prop-types';
|
|
15
|
-
import React, { useRef, useState } from 'react';
|
|
15
|
+
import React, { useRef, useState, useEffect } from 'react';
|
|
16
16
|
import { useClickOutside } from '../../../../../global/js/hooks';
|
|
17
17
|
import { pkg } from '../../../../../settings';
|
|
18
18
|
import { ActionSet } from '../../../../ActionSet';
|
|
19
19
|
import { BATCH, CLEAR_FILTERS, FLYOUT, INSTANT } from './constants';
|
|
20
20
|
import { useSubscribeToEventEmitter, useFilters, useShouldDisableButtons } from './hooks';
|
|
21
|
+
import { carbon } from '../../../../../settings';
|
|
21
22
|
var blockClass = "".concat(pkg.prefix, "--datagrid");
|
|
22
23
|
var componentClass = "".concat(blockClass, "-filter-flyout");
|
|
23
24
|
var FilterFlyout = function FilterFlyout(_ref) {
|
|
@@ -45,11 +46,8 @@ var FilterFlyout = function FilterFlyout(_ref) {
|
|
|
45
46
|
setAllFilters = _ref.setAllFilters,
|
|
46
47
|
_ref$data = _ref.data,
|
|
47
48
|
data = _ref$data === void 0 ? [] : _ref$data,
|
|
48
|
-
_ref$
|
|
49
|
-
|
|
50
|
-
// Save the initial filters we only need the filters once when it loads
|
|
51
|
-
var initialFiltersRef = useRef(initialFilters);
|
|
52
|
-
|
|
49
|
+
_ref$reactTableFilter = _ref.reactTableFiltersState,
|
|
50
|
+
reactTableFiltersState = _ref$reactTableFilter === void 0 ? [] : _ref$reactTableFilter;
|
|
53
51
|
/** State */
|
|
54
52
|
var _useState = useState(false),
|
|
55
53
|
_useState2 = _slicedToArray(_useState, 2),
|
|
@@ -60,15 +58,17 @@ var FilterFlyout = function FilterFlyout(_ref) {
|
|
|
60
58
|
filters: filters,
|
|
61
59
|
setAllFilters: setAllFilters,
|
|
62
60
|
variation: FLYOUT,
|
|
63
|
-
|
|
61
|
+
reactTableFiltersState: reactTableFiltersState,
|
|
62
|
+
onCancel: onCancel
|
|
64
63
|
}),
|
|
65
64
|
filtersState = _useFilters.filtersState,
|
|
66
65
|
prevFiltersObjectArrayRef = _useFilters.prevFiltersObjectArrayRef,
|
|
67
66
|
prevFiltersRef = _useFilters.prevFiltersRef,
|
|
68
|
-
|
|
67
|
+
cancel = _useFilters.cancel,
|
|
69
68
|
reset = _useFilters.reset,
|
|
70
69
|
renderFilter = _useFilters.renderFilter,
|
|
71
|
-
filtersObjectArray = _useFilters.filtersObjectArray
|
|
70
|
+
filtersObjectArray = _useFilters.filtersObjectArray,
|
|
71
|
+
lastAppliedFilters = _useFilters.lastAppliedFilters;
|
|
72
72
|
|
|
73
73
|
/** Refs */
|
|
74
74
|
var filterFlyoutRef = useRef(null);
|
|
@@ -105,26 +105,10 @@ var FilterFlyout = function FilterFlyout(_ref) {
|
|
|
105
105
|
// updates the ref so next time the flyout opens we have records of the previous filters
|
|
106
106
|
prevFiltersRef.current = JSON.stringify(filtersState);
|
|
107
107
|
prevFiltersObjectArrayRef.current = JSON.stringify(filtersObjectArray);
|
|
108
|
-
};
|
|
109
|
-
var cancel = function cancel() {
|
|
110
|
-
// Reverting to previous filters only applies when using batch actions
|
|
111
|
-
if (updateMethod === BATCH) {
|
|
112
|
-
revertToPreviousFilters();
|
|
113
|
-
onCancel();
|
|
114
|
-
}
|
|
115
|
-
closeFlyout();
|
|
116
|
-
};
|
|
117
108
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
var hasClickedOnDropdown = target.className === 'bx--list-box__menu-item__option';
|
|
122
|
-
if (!open || hasClickedOnDatePicker || hasClickedOnDropdown) {
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
|
-
cancel();
|
|
126
|
-
});
|
|
127
|
-
useSubscribeToEventEmitter(CLEAR_FILTERS, reset);
|
|
109
|
+
// Update the last applied filters
|
|
110
|
+
lastAppliedFilters.current = JSON.stringify(filtersObjectArray);
|
|
111
|
+
};
|
|
128
112
|
|
|
129
113
|
/** Renders all filters */
|
|
130
114
|
var renderFilters = function renderFilters() {
|
|
@@ -151,6 +135,21 @@ var FilterFlyout = function FilterFlyout(_ref) {
|
|
|
151
135
|
buttonSize: "md"
|
|
152
136
|
});
|
|
153
137
|
};
|
|
138
|
+
|
|
139
|
+
/** Effects */
|
|
140
|
+
useClickOutside(filterFlyoutRef, function (target) {
|
|
141
|
+
var hasClickedOnDatePicker = target.closest('.flatpickr-calendar');
|
|
142
|
+
var hasClickedOnDropdown = target.className === "".concat(carbon.prefix, "--list-box__menu-item__option");
|
|
143
|
+
if (!open || hasClickedOnDatePicker || hasClickedOnDropdown) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
closeFlyout();
|
|
147
|
+
cancel();
|
|
148
|
+
});
|
|
149
|
+
useSubscribeToEventEmitter(CLEAR_FILTERS, reset);
|
|
150
|
+
useEffect(function reflectLastAppliedFiltersWhenReactTableUpdates() {
|
|
151
|
+
lastAppliedFilters.current = JSON.stringify(reactTableFiltersState);
|
|
152
|
+
}, [reactTableFiltersState, lastAppliedFilters]);
|
|
154
153
|
return /*#__PURE__*/React.createElement("div", {
|
|
155
154
|
className: "".concat(componentClass, "__container")
|
|
156
155
|
}, /*#__PURE__*/React.createElement(Button, {
|
|
@@ -190,14 +189,6 @@ FilterFlyout.propTypes = {
|
|
|
190
189
|
* Icon description for the filter flyout button
|
|
191
190
|
*/
|
|
192
191
|
flyoutIconDescription: PropTypes.string,
|
|
193
|
-
/**
|
|
194
|
-
* Filters that should be applied on load
|
|
195
|
-
*/
|
|
196
|
-
initialFilters: PropTypes.arrayOf(PropTypes.shape({
|
|
197
|
-
id: PropTypes.string.isRequired,
|
|
198
|
-
type: PropTypes.string.isRequired,
|
|
199
|
-
value: PropTypes.any.isRequired
|
|
200
|
-
})),
|
|
201
192
|
/**
|
|
202
193
|
* Callback when the apply button is clicked
|
|
203
194
|
*/
|
|
@@ -218,6 +209,14 @@ FilterFlyout.propTypes = {
|
|
|
218
209
|
* Label text of the primary action in the flyout
|
|
219
210
|
*/
|
|
220
211
|
primaryActionLabel: PropTypes.string,
|
|
212
|
+
/**
|
|
213
|
+
* Filters from react table's state
|
|
214
|
+
*/
|
|
215
|
+
reactTableFiltersState: PropTypes.arrayOf(PropTypes.shape({
|
|
216
|
+
id: PropTypes.string.isRequired,
|
|
217
|
+
type: PropTypes.string.isRequired,
|
|
218
|
+
value: PropTypes.any.isRequired
|
|
219
|
+
})),
|
|
221
220
|
/**
|
|
222
221
|
* Label text of the secondary action in the flyout
|
|
223
222
|
*/
|
|
@@ -54,11 +54,8 @@ var FilterPanel = function FilterPanel(_ref) {
|
|
|
54
54
|
searchLabelText = _ref$searchLabelText === void 0 ? 'Filter search' : _ref$searchLabelText,
|
|
55
55
|
_ref$searchPlaceholde = _ref.searchPlaceholder,
|
|
56
56
|
searchPlaceholder = _ref$searchPlaceholde === void 0 ? 'Find filters' : _ref$searchPlaceholde,
|
|
57
|
-
_ref$
|
|
58
|
-
|
|
59
|
-
// Save the initial filters we only need the filters once
|
|
60
|
-
var initialFiltersRef = useRef(initialFilters);
|
|
61
|
-
|
|
57
|
+
_ref$reactTableFilter = _ref.reactTableFiltersState,
|
|
58
|
+
reactTableFiltersState = _ref$reactTableFilter === void 0 ? [] : _ref$reactTableFilter;
|
|
62
59
|
/** State */
|
|
63
60
|
var _useState = useState(false),
|
|
64
61
|
_useState2 = _slicedToArray(_useState, 2),
|
|
@@ -69,15 +66,17 @@ var FilterPanel = function FilterPanel(_ref) {
|
|
|
69
66
|
filters: filterSections,
|
|
70
67
|
setAllFilters: setAllFilters,
|
|
71
68
|
variation: PANEL,
|
|
72
|
-
|
|
69
|
+
reactTableFiltersState: reactTableFiltersState,
|
|
70
|
+
onCancel: onCancel
|
|
73
71
|
}),
|
|
74
72
|
filtersState = _useFilters.filtersState,
|
|
75
73
|
prevFiltersObjectArrayRef = _useFilters.prevFiltersObjectArrayRef,
|
|
76
74
|
prevFiltersRef = _useFilters.prevFiltersRef,
|
|
77
|
-
|
|
75
|
+
cancel = _useFilters.cancel,
|
|
78
76
|
reset = _useFilters.reset,
|
|
79
77
|
renderFilter = _useFilters.renderFilter,
|
|
80
|
-
filtersObjectArray = _useFilters.filtersObjectArray
|
|
78
|
+
filtersObjectArray = _useFilters.filtersObjectArray,
|
|
79
|
+
lastAppliedFilters = _useFilters.lastAppliedFilters;
|
|
81
80
|
|
|
82
81
|
/** Refs */
|
|
83
82
|
var filterPanelRef = useRef();
|
|
@@ -107,14 +106,8 @@ var FilterPanel = function FilterPanel(_ref) {
|
|
|
107
106
|
|
|
108
107
|
/** Methods */
|
|
109
108
|
var closePanel = function closePanel() {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
var cancel = function cancel() {
|
|
113
|
-
// Reverting to previous filters only applies when using batch actions
|
|
114
|
-
if (updateMethod === BATCH) {
|
|
115
|
-
revertToPreviousFilters();
|
|
116
|
-
onCancel();
|
|
117
|
-
}
|
|
109
|
+
cancel();
|
|
110
|
+
setPanelOpen(false);
|
|
118
111
|
};
|
|
119
112
|
var apply = function apply() {
|
|
120
113
|
setAllFilters(filtersObjectArray);
|
|
@@ -128,6 +121,9 @@ var FilterPanel = function FilterPanel(_ref) {
|
|
|
128
121
|
// updates the ref so next time the flyout opens we have records of the previous filters
|
|
129
122
|
prevFiltersRef.current = JSON.stringify(filtersState);
|
|
130
123
|
prevFiltersObjectArrayRef.current = JSON.stringify(filtersObjectArray);
|
|
124
|
+
|
|
125
|
+
// Update the last applied filters
|
|
126
|
+
lastAppliedFilters.current = JSON.stringify(filtersObjectArray);
|
|
131
127
|
};
|
|
132
128
|
var renderActionSet = function renderActionSet() {
|
|
133
129
|
return showActionSet && /*#__PURE__*/React.createElement(MotionActionSet, {
|
|
@@ -213,14 +209,14 @@ var FilterPanel = function FilterPanel(_ref) {
|
|
|
213
209
|
height: getScrollableContainerHeight()
|
|
214
210
|
},
|
|
215
211
|
onScroll: onInnerContainerScroll
|
|
216
|
-
}, filterSections.map(function (_ref2) {
|
|
212
|
+
}, filterSections.map(function (_ref2, index) {
|
|
217
213
|
var _ref2$categoryTitle = _ref2.categoryTitle,
|
|
218
214
|
categoryTitle = _ref2$categoryTitle === void 0 ? null : _ref2$categoryTitle,
|
|
219
215
|
_ref2$filters = _ref2.filters,
|
|
220
216
|
filters = _ref2$filters === void 0 ? [] : _ref2$filters,
|
|
221
217
|
hasAccordion = _ref2.hasAccordion;
|
|
222
218
|
return /*#__PURE__*/React.createElement("div", {
|
|
223
|
-
key:
|
|
219
|
+
key: index,
|
|
224
220
|
className: "".concat(componentClass, "__category")
|
|
225
221
|
}, categoryTitle && /*#__PURE__*/React.createElement("div", {
|
|
226
222
|
className: "".concat(componentClass, "__category-title")
|
|
@@ -241,20 +237,20 @@ FilterPanel.propTypes = {
|
|
|
241
237
|
closeIconDescription: PropTypes.string,
|
|
242
238
|
filterPanelMinHeight: PropTypes.number,
|
|
243
239
|
filterSections: PropTypes.array,
|
|
244
|
-
/**
|
|
245
|
-
* Filters that should be applied on load
|
|
246
|
-
*/
|
|
247
|
-
initialFilters: PropTypes.arrayOf(PropTypes.shape({
|
|
248
|
-
id: PropTypes.string.isRequired,
|
|
249
|
-
type: PropTypes.string.isRequired,
|
|
250
|
-
value: PropTypes.any.isRequired
|
|
251
|
-
})),
|
|
252
240
|
onApply: PropTypes.func,
|
|
253
241
|
onCancel: PropTypes.func,
|
|
254
242
|
onPanelClose: PropTypes.func,
|
|
255
243
|
onPanelOpen: PropTypes.func,
|
|
256
244
|
open: PropTypes.bool,
|
|
257
245
|
primaryActionLabel: PropTypes.string,
|
|
246
|
+
/**
|
|
247
|
+
* Filters from react table's state
|
|
248
|
+
*/
|
|
249
|
+
reactTableFiltersState: PropTypes.arrayOf(PropTypes.shape({
|
|
250
|
+
id: PropTypes.string.isRequired,
|
|
251
|
+
type: PropTypes.string.isRequired,
|
|
252
|
+
value: PropTypes.any.isRequired
|
|
253
|
+
})),
|
|
258
254
|
searchLabelText: PropTypes.string,
|
|
259
255
|
searchPlaceholder: PropTypes.string,
|
|
260
256
|
secondaryActionLabel: PropTypes.string,
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
export { default as useInitialStateFromFilters } from './useInitialStateFromFilters';
|
|
9
8
|
export { default as useSubscribeToEventEmitter } from './useSubscribeToEventEmitter';
|
|
10
9
|
export { default as useShouldDisableButtons } from './useShouldDisableButtons';
|
|
11
10
|
export { default as useFilters } from './useFilters';
|
|
@@ -11,10 +11,9 @@ 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 } from 'react';
|
|
14
|
+
import React, { useState, useRef, useEffect } from 'react';
|
|
15
15
|
import { Checkbox, DatePicker, DatePickerInput, Dropdown, FormGroup, NumberInput, RadioButton, RadioButtonGroup } from 'carbon-components-react';
|
|
16
|
-
import { INSTANT, DATE, CHECKBOX, NUMBER, RADIO, DROPDOWN, PANEL } from '../constants';
|
|
17
|
-
import useInitialStateFromFilters from './useInitialStateFromFilters';
|
|
16
|
+
import { INSTANT, BATCH, DATE, CHECKBOX, NUMBER, RADIO, DROPDOWN, PANEL } from '../constants';
|
|
18
17
|
import { getInitialStateFromFilters } from '../utils';
|
|
19
18
|
var useFilters = function useFilters(_ref) {
|
|
20
19
|
var updateMethod = _ref.updateMethod,
|
|
@@ -22,19 +21,22 @@ var useFilters = function useFilters(_ref) {
|
|
|
22
21
|
filters = _ref$filters === void 0 ? [] : _ref$filters,
|
|
23
22
|
setAllFilters = _ref.setAllFilters,
|
|
24
23
|
variation = _ref.variation,
|
|
25
|
-
|
|
24
|
+
reactTableFiltersState = _ref.reactTableFiltersState,
|
|
25
|
+
_ref$onCancel = _ref.onCancel,
|
|
26
|
+
onCancel = _ref$onCancel === void 0 ? function () {} : _ref$onCancel;
|
|
26
27
|
/** State */
|
|
27
|
-
var
|
|
28
|
-
_useInitialStateFromF2 = _slicedToArray(_useInitialStateFromF, 2),
|
|
29
|
-
filtersState = _useInitialStateFromF2[0],
|
|
30
|
-
setFiltersState = _useInitialStateFromF2[1];
|
|
31
|
-
var _useState = useState(initialFilters),
|
|
28
|
+
var _useState = useState(getInitialStateFromFilters(filters, variation, reactTableFiltersState)),
|
|
32
29
|
_useState2 = _slicedToArray(_useState, 2),
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
filtersState = _useState2[0],
|
|
31
|
+
setFiltersState = _useState2[1];
|
|
32
|
+
var _useState3 = useState(reactTableFiltersState),
|
|
33
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
34
|
+
filtersObjectArray = _useState4[0],
|
|
35
|
+
setFiltersObjectArray = _useState4[1];
|
|
35
36
|
|
|
36
37
|
// When using batch actions we have to store the filters to then apply them later
|
|
37
38
|
var prevFiltersRef = useRef(JSON.stringify(filtersState));
|
|
39
|
+
var lastAppliedFilters = useRef(JSON.stringify(reactTableFiltersState));
|
|
38
40
|
var prevFiltersObjectArrayRef = useRef(JSON.stringify(filtersObjectArray));
|
|
39
41
|
|
|
40
42
|
/** Methods */
|
|
@@ -43,6 +45,7 @@ var useFilters = function useFilters(_ref) {
|
|
|
43
45
|
var revertToPreviousFilters = function revertToPreviousFilters() {
|
|
44
46
|
setFiltersState(JSON.parse(prevFiltersRef.current));
|
|
45
47
|
setFiltersObjectArray(JSON.parse(prevFiltersObjectArrayRef.current));
|
|
48
|
+
setAllFilters(JSON.parse(lastAppliedFilters.current));
|
|
46
49
|
};
|
|
47
50
|
var reset = function reset() {
|
|
48
51
|
// When we reset we want the "initialFilters" to be an empty array
|
|
@@ -154,10 +157,14 @@ var useFilters = function useFilters(_ref) {
|
|
|
154
157
|
var type = _ref3.type,
|
|
155
158
|
column = _ref3.column,
|
|
156
159
|
components = _ref3.props;
|
|
160
|
+
var filter;
|
|
157
161
|
var isPanel = variation === PANEL;
|
|
162
|
+
if (!type) {
|
|
163
|
+
return console.error("type: ".concat(type, "; does not exist as a type of filter."));
|
|
164
|
+
}
|
|
158
165
|
switch (type) {
|
|
159
166
|
case DATE:
|
|
160
|
-
|
|
167
|
+
filter = /*#__PURE__*/React.createElement(DatePicker, _extends({}, components.DatePicker, {
|
|
161
168
|
onChange: function onChange(value) {
|
|
162
169
|
var _components$DatePicke, _components$DatePicke2;
|
|
163
170
|
setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, _defineProperty({}, column, {
|
|
@@ -181,8 +188,9 @@ var useFilters = function useFilters(_ref) {
|
|
|
181
188
|
placeholder: "mm/dd/yyyy",
|
|
182
189
|
labelText: "End date"
|
|
183
190
|
}, components.DatePickerInput.end)));
|
|
191
|
+
break;
|
|
184
192
|
case NUMBER:
|
|
185
|
-
|
|
193
|
+
filter = /*#__PURE__*/React.createElement(NumberInput, _extends({
|
|
186
194
|
step: 1,
|
|
187
195
|
allowEmpty: true,
|
|
188
196
|
hideSteppers: true
|
|
@@ -203,8 +211,9 @@ var useFilters = function useFilters(_ref) {
|
|
|
203
211
|
value: filtersState[column].value,
|
|
204
212
|
light: isPanel
|
|
205
213
|
}));
|
|
214
|
+
break;
|
|
206
215
|
case CHECKBOX:
|
|
207
|
-
|
|
216
|
+
filter = /*#__PURE__*/React.createElement(FormGroup, components.FormGroup, filtersState[column].value.map(function (option) {
|
|
208
217
|
return /*#__PURE__*/React.createElement(Checkbox, _extends({
|
|
209
218
|
key: option.labelText
|
|
210
219
|
}, option, {
|
|
@@ -229,8 +238,9 @@ var useFilters = function useFilters(_ref) {
|
|
|
229
238
|
checked: option.selected
|
|
230
239
|
}));
|
|
231
240
|
}));
|
|
241
|
+
break;
|
|
232
242
|
case RADIO:
|
|
233
|
-
|
|
243
|
+
filter = /*#__PURE__*/React.createElement(FormGroup, components.FormGroup, /*#__PURE__*/React.createElement(RadioButtonGroup, _extends({}, components.RadioButtonGroup, {
|
|
234
244
|
valueSelected: ((_filtersState$column = filtersState[column]) === null || _filtersState$column === void 0 ? void 0 : _filtersState$column.value) === '' ? 'Any' : (_filtersState$column2 = filtersState[column]) === null || _filtersState$column2 === void 0 ? void 0 : _filtersState$column2.value,
|
|
235
245
|
onChange: function onChange(selected) {
|
|
236
246
|
var _components$RadioButt, _components$RadioButt2;
|
|
@@ -255,8 +265,9 @@ var useFilters = function useFilters(_ref) {
|
|
|
255
265
|
key: (_ref4 = (_radio$id = radio.id) !== null && _radio$id !== void 0 ? _radio$id : radio.labelText) !== null && _ref4 !== void 0 ? _ref4 : radio.value
|
|
256
266
|
}, radio));
|
|
257
267
|
})));
|
|
268
|
+
break;
|
|
258
269
|
case DROPDOWN:
|
|
259
|
-
|
|
270
|
+
filter = /*#__PURE__*/React.createElement(Dropdown, _extends({}, components.Dropdown, {
|
|
260
271
|
items: ['Any'].concat(_toConsumableArray(components.Dropdown.items)),
|
|
261
272
|
selectedItem: filtersState[column].value === '' ? 'Any' : filtersState[column].value,
|
|
262
273
|
onChange: function onChange(_ref5) {
|
|
@@ -276,7 +287,27 @@ var useFilters = function useFilters(_ref) {
|
|
|
276
287
|
light: isPanel
|
|
277
288
|
}));
|
|
278
289
|
}
|
|
290
|
+
return /*#__PURE__*/React.createElement(React.Fragment, {
|
|
291
|
+
key: column
|
|
292
|
+
}, filter);
|
|
293
|
+
};
|
|
294
|
+
var cancel = function cancel() {
|
|
295
|
+
// Reverting to previous filters only applies when using batch actions
|
|
296
|
+
if (updateMethod === BATCH) {
|
|
297
|
+
revertToPreviousFilters();
|
|
298
|
+
onCancel();
|
|
299
|
+
}
|
|
279
300
|
};
|
|
301
|
+
|
|
302
|
+
/** The purpose of this function is to sync any changes in react-tables state.filters array and reflect
|
|
303
|
+
those new filter changes in the panel/flyout state. The external change is triggered if setAllFilters is called outside of the Datagrid */
|
|
304
|
+
useEffect(function updateStateAndFiltersToReflectExternalFilterChanges() {
|
|
305
|
+
var newFiltersState = getInitialStateFromFilters(filters, variation, reactTableFiltersState);
|
|
306
|
+
setFiltersState(newFiltersState);
|
|
307
|
+
prevFiltersRef.current = JSON.stringify(newFiltersState);
|
|
308
|
+
prevFiltersObjectArrayRef.current = JSON.stringify(reactTableFiltersState);
|
|
309
|
+
setFiltersObjectArray(reactTableFiltersState);
|
|
310
|
+
}, [filters, reactTableFiltersState, variation]);
|
|
280
311
|
return {
|
|
281
312
|
filtersState: filtersState,
|
|
282
313
|
setFiltersState: setFiltersState,
|
|
@@ -285,7 +316,9 @@ var useFilters = function useFilters(_ref) {
|
|
|
285
316
|
revertToPreviousFilters: revertToPreviousFilters,
|
|
286
317
|
reset: reset,
|
|
287
318
|
renderFilter: renderFilter,
|
|
288
|
-
filtersObjectArray: filtersObjectArray
|
|
319
|
+
filtersObjectArray: filtersObjectArray,
|
|
320
|
+
lastAppliedFilters: lastAppliedFilters,
|
|
321
|
+
cancel: cancel
|
|
289
322
|
};
|
|
290
323
|
};
|
|
291
324
|
export default useFilters;
|
|
@@ -74,7 +74,7 @@ var useFiltering = function useFiltering(hooks) {
|
|
|
74
74
|
variation: 'flyout',
|
|
75
75
|
updateMethod: BATCH,
|
|
76
76
|
panelIconDescription: 'Open filter panel',
|
|
77
|
-
|
|
77
|
+
reactTableFiltersState: state.filters
|
|
78
78
|
};
|
|
79
79
|
var getFilterFlyoutProps = function getFilterFlyoutProps() {
|
|
80
80
|
return _objectSpread(_objectSpread(_objectSpread({}, defaultProps), filterProps), {}, {
|
|
@@ -21,10 +21,13 @@ var OFFSET_SCROLL_CLASS = "".concat(styleClassPrefix, "-offset-scroll");
|
|
|
21
21
|
var useStickyColumn = function useStickyColumn(hooks) {
|
|
22
22
|
var tableBodyRef = useRef();
|
|
23
23
|
var stickyHeaderCellRef = useRef();
|
|
24
|
-
var _useState = useState(
|
|
24
|
+
var _useState = useState(null),
|
|
25
25
|
_useState2 = _slicedToArray(_useState, 2),
|
|
26
26
|
windowSize = _useState2[0],
|
|
27
27
|
setWindowSize = _useState2[1];
|
|
28
|
+
useEffect(function () {
|
|
29
|
+
setWindowSize(window.innerWidth);
|
|
30
|
+
}, []);
|
|
28
31
|
useLayoutEffect(function () {
|
|
29
32
|
function updateSize() {
|
|
30
33
|
setWindowSize(window.innerWidth);
|
|
@@ -53,9 +56,13 @@ var useStickyColumn = function useStickyColumn(hooks) {
|
|
|
53
56
|
headerCellElement.classList.add(OFFSET_SCROLL_CLASS);
|
|
54
57
|
}
|
|
55
58
|
var boundListener = debounce(onBodyResize.bind(null, tableBodyElement, headerCellElement), 250);
|
|
56
|
-
window
|
|
59
|
+
if (typeof window !== 'undefined') {
|
|
60
|
+
window.addEventListener('resize', boundListener);
|
|
61
|
+
}
|
|
57
62
|
return function () {
|
|
58
|
-
window
|
|
63
|
+
if (typeof window !== 'undefined') {
|
|
64
|
+
window.removeEventListener('resize', boundListener);
|
|
65
|
+
}
|
|
59
66
|
};
|
|
60
67
|
}, [instance.rows, instance.isFetching]);
|
|
61
68
|
useEffect(function () {
|
|
@@ -55,7 +55,7 @@ var getPasswordStrength = function getPasswordStrength() {
|
|
|
55
55
|
var renderDocLink = function renderDocLink() {
|
|
56
56
|
var chance = Math.random();
|
|
57
57
|
var docLinkObj = {
|
|
58
|
-
href: chance > 0.66 ? '
|
|
58
|
+
href: chance > 0.66 ? 'https://carbondesignsystem.com/' : chance > 0.33 ? 'https://pages.github.ibm.com/cdai-design/pal/' : 'https://ibm-products.carbondesignsystem.com/',
|
|
59
59
|
text: chance > 0.66 ? 'Carbon Design System' : chance > 0.33 ? 'Carbon for IBM Products PAL' : 'Carbon for IBM Products storybook'
|
|
60
60
|
};
|
|
61
61
|
return docLinkObj;
|
|
@@ -314,12 +314,8 @@ export var PageHeader = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
314
314
|
utilSetCollapsed(collapseHeader, metrics.headerOffset, metrics.headerTopValue);
|
|
315
315
|
}
|
|
316
316
|
}, [collapseHeader, metrics.headerOffset, metrics.headerTopValue]);
|
|
317
|
-
useResizeObserver(sizingContainerRef,
|
|
318
|
-
|
|
319
|
-
});
|
|
320
|
-
useResizeObserver(headerRef, {
|
|
321
|
-
callback: handleResize
|
|
322
|
-
});
|
|
317
|
+
useResizeObserver(sizingContainerRef, handleResizeActionBarColumn);
|
|
318
|
+
useResizeObserver(headerRef, handleResize);
|
|
323
319
|
|
|
324
320
|
// Determine what form of title to display in the breadcrumb
|
|
325
321
|
var breadcrumbItemForTitle = utilGetBreadcrumbItemForTitle(blockClass, collapseTitle, title);
|
|
@@ -436,9 +436,7 @@ export var SidePanel = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
436
436
|
}, title));
|
|
437
437
|
};
|
|
438
438
|
var contentRef = ref || sidePanelRef;
|
|
439
|
-
useResizeObserver(contentRef,
|
|
440
|
-
callback: handleResize
|
|
441
|
-
});
|
|
439
|
+
useResizeObserver(contentRef, handleResize);
|
|
442
440
|
return /*#__PURE__*/React.createElement(AnimatePresence, null, open && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(motion.div, _extends({}, getDevtoolsProps(componentName), rest, {
|
|
443
441
|
id: "".concat(blockClass, "-outer"),
|
|
444
442
|
className: mainPanelClassNames,
|
|
@@ -202,12 +202,8 @@ export var TagSet = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
202
202
|
var handleModalClose = function handleModalClose() {
|
|
203
203
|
setShowAllModalOpen(false);
|
|
204
204
|
};
|
|
205
|
-
useResizeObserver(sizingContainerRef,
|
|
206
|
-
|
|
207
|
-
});
|
|
208
|
-
useResizeObserver(tagSetRef, {
|
|
209
|
-
callback: handleResize
|
|
210
|
-
});
|
|
205
|
+
useResizeObserver(sizingContainerRef, handleSizerTagsResize);
|
|
206
|
+
useResizeObserver(tagSetRef, handleResize);
|
|
211
207
|
return /*#__PURE__*/React.createElement("div", _extends({}, rest, {
|
|
212
208
|
className: cx([blockClass, className]),
|
|
213
209
|
ref: tagSetRef
|
|
@@ -5,14 +5,8 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
|
5
5
|
* This source code is licensed under the Apache-2.0 license found in the
|
|
6
6
|
* LICENSE file in the root directory of this source tree.
|
|
7
7
|
*/
|
|
8
|
-
import { useRef, useState, useLayoutEffect } from 'react';
|
|
9
|
-
export var useResizeObserver = function useResizeObserver(ref) {
|
|
10
|
-
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
|
|
11
|
-
callback: null,
|
|
12
|
-
throttleInterval: 0
|
|
13
|
-
};
|
|
14
|
-
var callback = options.callback,
|
|
15
|
-
throttleInterval = options.throttleInterval;
|
|
8
|
+
import { useRef, useState, useLayoutEffect, useEffect } from 'react';
|
|
9
|
+
export var useResizeObserver = function useResizeObserver(ref, callback) {
|
|
16
10
|
var _useState = useState(0),
|
|
17
11
|
_useState2 = _slicedToArray(_useState, 2),
|
|
18
12
|
width = _useState2[0],
|
|
@@ -21,8 +15,14 @@ export var useResizeObserver = function useResizeObserver(ref) {
|
|
|
21
15
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
22
16
|
height = _useState4[0],
|
|
23
17
|
setHeight = _useState4[1];
|
|
24
|
-
var throttleTimeout = useRef(null);
|
|
25
18
|
var entriesToHandle = useRef(null);
|
|
19
|
+
var cb = useRef(callback);
|
|
20
|
+
useEffect(function () {
|
|
21
|
+
// ref for callback removes it as dependency fro useLayoutEffect
|
|
22
|
+
// This significantly reduces repeated calls if a function is redefined on every
|
|
23
|
+
// render
|
|
24
|
+
cb.current = callback;
|
|
25
|
+
}, [callback]);
|
|
26
26
|
useLayoutEffect(function () {
|
|
27
27
|
if (!(ref !== null && ref !== void 0 && ref.current)) {
|
|
28
28
|
return;
|
|
@@ -34,29 +34,15 @@ export var useResizeObserver = function useResizeObserver(ref) {
|
|
|
34
34
|
var entry = entriesToHandle.current[0];
|
|
35
35
|
setWidth(entry.contentRect.width);
|
|
36
36
|
setHeight(entry.contentRect.height);
|
|
37
|
-
|
|
38
|
-
callback && callback(entry.contentRect);
|
|
37
|
+
cb.current && cb.current(entry.contentRect);
|
|
39
38
|
};
|
|
40
39
|
var observer = new ResizeObserver(function (entries) {
|
|
41
40
|
// always update entriesToHandle
|
|
42
41
|
entriesToHandle.current = entries;
|
|
43
|
-
|
|
44
|
-
//
|
|
45
|
-
if (throttleTimeout.current === null) {
|
|
46
|
-
// no live timeout set entries to handle and move on
|
|
47
|
-
|
|
48
|
-
// set up throttle
|
|
49
|
-
throttleTimeout.current = setTimeout(function () {
|
|
50
|
-
// do callbacks
|
|
51
|
-
doCallbacks();
|
|
52
|
-
// reset throttle
|
|
53
|
-
throttleTimeout.current = null;
|
|
54
|
-
}, throttleInterval);
|
|
55
|
-
}
|
|
56
|
-
} else {
|
|
57
|
-
// no throttle do callbacks every time
|
|
42
|
+
window.requestAnimationFrame(function () {
|
|
43
|
+
// do callbacks
|
|
58
44
|
doCallbacks();
|
|
59
|
-
}
|
|
45
|
+
});
|
|
60
46
|
});
|
|
61
47
|
|
|
62
48
|
// observe all refs passed
|
|
@@ -66,7 +52,7 @@ export var useResizeObserver = function useResizeObserver(ref) {
|
|
|
66
52
|
observer = null;
|
|
67
53
|
};
|
|
68
54
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
69
|
-
}, [ref
|
|
55
|
+
}, [ref]);
|
|
70
56
|
return {
|
|
71
57
|
width: width,
|
|
72
58
|
height: height
|
|
@@ -66,7 +66,7 @@ export var prepareStory = function prepareStory(template, options) {
|
|
|
66
66
|
export var CodesandboxLink = function CodesandboxLink(_ref) {
|
|
67
67
|
var exampleDirectory = _ref.exampleDirectory;
|
|
68
68
|
return /*#__PURE__*/React.createElement("a", {
|
|
69
|
-
href: "https://codesandbox.io/s/github/carbon-design-system/ibm-
|
|
69
|
+
href: "https://codesandbox.io/s/github/carbon-design-system/ibm-products/tree/main_v1/examples/carbon-for-ibm-products/".concat(exampleDirectory)
|
|
70
70
|
}, /*#__PURE__*/React.createElement("img", {
|
|
71
71
|
alt: "Edit on CodeSandbox",
|
|
72
72
|
src: "https://codesandbox.io/static/img/play-codesandbox.svg"
|
|
@@ -71,9 +71,7 @@ var AboutModal = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
|
|
|
71
71
|
}, [bodyRef]);
|
|
72
72
|
|
|
73
73
|
// Detect resize of the ModalBody to recalculate whether scrolling is enabled
|
|
74
|
-
(0, _useResizeObserver.useResizeObserver)(bodyRef,
|
|
75
|
-
callback: handleResize
|
|
76
|
-
});
|
|
74
|
+
(0, _useResizeObserver.useResizeObserver)(bodyRef, handleResize);
|
|
77
75
|
return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.ComposedModal, (0, _extends2.default)({}, rest, {
|
|
78
76
|
className: (0, _classnames.default)(blockClass,
|
|
79
77
|
// Apply the block class to the main HTML element
|
|
@@ -181,12 +181,10 @@ var ActionBar = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
|
|
|
181
181
|
/* istanbul ignore next */ // not sure how to fake window resize
|
|
182
182
|
checkFullyVisibleItems();
|
|
183
183
|
};
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
(0, _useResizeObserver.useResizeObserver)(localRef,
|
|
188
|
-
callback: handleResize
|
|
189
|
-
});
|
|
184
|
+
|
|
185
|
+
// // resize of the items
|
|
186
|
+
(0, _useResizeObserver.useResizeObserver)(sizingRef, handleResize);
|
|
187
|
+
(0, _useResizeObserver.useResizeObserver)(localRef, handleResize);
|
|
190
188
|
return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({}, rest, {
|
|
191
189
|
className: (0, _classnames.default)([blockClass, className]),
|
|
192
190
|
ref: localRef
|
|
@@ -240,13 +240,9 @@ var BreadcrumbWithOverflow = function BreadcrumbWithOverflow(_ref) {
|
|
|
240
240
|
}
|
|
241
241
|
|
|
242
242
|
// container resize
|
|
243
|
-
(0, _useResizeObserver.useResizeObserver)(sizingContainerRef,
|
|
244
|
-
callback: handleResize
|
|
245
|
-
});
|
|
243
|
+
(0, _useResizeObserver.useResizeObserver)(sizingContainerRef, handleResize);
|
|
246
244
|
// item resize
|
|
247
|
-
(0, _useResizeObserver.useResizeObserver)(breadcrumbItemWithOverflow,
|
|
248
|
-
callback: handleResize
|
|
249
|
-
});
|
|
245
|
+
(0, _useResizeObserver.useResizeObserver)(breadcrumbItemWithOverflow, handleResize);
|
|
250
246
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
251
247
|
className: (0, _classnames.default)(blockClass, className, (0, _defineProperty2.default)({}, "".concat(blockClass, "__with-items"), displayedBreadcrumbItems.length > 1)),
|
|
252
248
|
ref: breadcrumbItemWithOverflow
|
|
@@ -138,15 +138,9 @@ var ButtonSetWithOverflow = function ButtonSetWithOverflow(_ref) {
|
|
|
138
138
|
}, (0, _propsHelper.prepareProps)(other, ['iconDescription', 'renderIcon'])));
|
|
139
139
|
}).reverse());
|
|
140
140
|
});
|
|
141
|
-
(0, _useResizeObserver.useResizeObserver)(sizingContainerRefSet,
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
(0, _useResizeObserver.useResizeObserver)(sizingContainerRefCombo, {
|
|
145
|
-
callback: checkFullyVisibleItems
|
|
146
|
-
});
|
|
147
|
-
(0, _useResizeObserver.useResizeObserver)(spaceAvailableRef, {
|
|
148
|
-
callback: checkFullyVisibleItems
|
|
149
|
-
});
|
|
141
|
+
(0, _useResizeObserver.useResizeObserver)(sizingContainerRefSet, checkFullyVisibleItems);
|
|
142
|
+
(0, _useResizeObserver.useResizeObserver)(sizingContainerRefCombo, checkFullyVisibleItems);
|
|
143
|
+
(0, _useResizeObserver.useResizeObserver)(spaceAvailableRef, checkFullyVisibleItems);
|
|
150
144
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
151
145
|
className: (0, _classnames.default)([blockClass, className, (0, _defineProperty2.default)({}, "".concat(blockClass, "--right"), rightAlign)]),
|
|
152
146
|
ref: spaceAvailableRef
|
|
@@ -54,9 +54,7 @@ var DatagridVirtualBody = function DatagridVirtualBody(datagridState) {
|
|
|
54
54
|
var gridRefElement = gridRef === null || gridRef === void 0 ? void 0 : gridRef.current;
|
|
55
55
|
gridRefElement.style.width = gridRefElement === null || gridRefElement === void 0 ? void 0 : gridRefElement.clientWidth;
|
|
56
56
|
};
|
|
57
|
-
(0, _useResizeObserver.useResizeObserver)(gridRef,
|
|
58
|
-
callback: handleVirtualGridResize
|
|
59
|
-
});
|
|
57
|
+
(0, _useResizeObserver.useResizeObserver)(gridRef, handleVirtualGridResize);
|
|
60
58
|
var syncScroll = function syncScroll(e) {
|
|
61
59
|
var virtualBody = e.target;
|
|
62
60
|
document.querySelector(".".concat(blockClass, "__head-wrap")).scrollLeft = virtualBody.scrollLeft;
|