@carbon/ibm-products 2.0.1 → 2.1.1
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/css/index-full-carbon.css +192 -56
- package/css/index-full-carbon.css.map +1 -1
- package/css/index-full-carbon.min.css +3 -3
- package/css/index-full-carbon.min.css.map +1 -1
- package/css/index-without-carbon-released-only.css +53 -10
- package/css/index-without-carbon-released-only.css.map +1 -1
- package/css/index-without-carbon-released-only.min.css +1 -1
- package/css/index-without-carbon-released-only.min.css.map +1 -1
- package/css/index-without-carbon.css +68 -28
- package/css/index-without-carbon.css.map +1 -1
- package/css/index-without-carbon.min.css +3 -3
- package/css/index-without-carbon.min.css.map +1 -1
- package/css/index.css +97 -27
- package/css/index.css.map +1 -1
- package/css/index.min.css +3 -3
- package/css/index.min.css.map +1 -1
- package/es/components/AboutModal/AboutModal.js +1 -3
- package/es/components/ActionBar/ActionBar.js +2 -6
- package/es/components/AddSelect/AddSelectFormControl.js +6 -6
- package/es/components/AddSelect/AddSelectRow.js +15 -5
- package/es/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +2 -6
- package/es/components/ButtonMenu/ButtonMenu.js +4 -4
- 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 +34 -36
- package/es/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +20 -24
- package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/index.js +0 -1
- package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +44 -15
- package/es/components/Datagrid/useFiltering.js +1 -1
- package/es/components/Datagrid/useStickyColumn.js +10 -3
- package/es/components/PageHeader/PageHeader.js +2 -6
- package/es/components/SidePanel/SidePanel.js +1 -3
- package/es/components/TagSet/TagSet.js +4 -7
- package/es/components/UserProfileImage/UserProfileImage.js +13 -2
- package/es/global/js/hooks/useResizeObserver.js +14 -28
- package/lib/components/AboutModal/AboutModal.js +1 -3
- package/lib/components/ActionBar/ActionBar.js +2 -6
- package/lib/components/AddSelect/AddSelectFormControl.js +6 -6
- package/lib/components/AddSelect/AddSelectRow.js +15 -5
- package/lib/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +2 -6
- package/lib/components/ButtonMenu/ButtonMenu.js +4 -4
- 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 +20 -24
- package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/index.js +0 -7
- package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +42 -13
- package/lib/components/Datagrid/useFiltering.js +1 -1
- package/lib/components/Datagrid/useStickyColumn.js +10 -3
- package/lib/components/PageHeader/PageHeader.js +2 -6
- package/lib/components/SidePanel/SidePanel.js +1 -3
- package/lib/components/TagSet/TagSet.js +4 -7
- package/lib/components/UserProfileImage/UserProfileImage.js +13 -2
- package/lib/global/js/hooks/useResizeObserver.js +13 -27
- package/package.json +17 -17
- package/scss/components/AddSelect/_add-select.scss +4 -0
- package/scss/components/BreadcrumbWithOverflow/_breadcrumb-with-overflow.scss +0 -1
- package/scss/components/ButtonMenu/_button-menu.scss +32 -1
- package/scss/components/Datagrid/_datagrid.scss +4 -2
- package/scss/components/Datagrid/_storybook-styles.scss +8 -0
- package/scss/components/Datagrid/styles/_datagrid.scss +12 -13
- package/scss/components/NotificationsPanel/_notifications-panel.scss +1 -1
- package/scss/components/PageHeader/_page-header.scss +0 -1
- package/scss/components/SidePanel/_side-panel.scss +0 -2
- package/scss/components/Tearsheet/_tearsheet.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,7 +12,7 @@ import { Filter } from '@carbon/react/icons';
|
|
12
12
|
import { Button, usePrefix } from '@carbon/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';
|
@@ -45,11 +45,8 @@ var FilterFlyout = function FilterFlyout(_ref) {
|
|
45
45
|
setAllFilters = _ref.setAllFilters,
|
46
46
|
_ref$data = _ref.data,
|
47
47
|
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
|
-
|
48
|
+
_ref$reactTableFilter = _ref.reactTableFiltersState,
|
49
|
+
reactTableFiltersState = _ref$reactTableFilter === void 0 ? [] : _ref$reactTableFilter;
|
53
50
|
/** State */
|
54
51
|
var _useState = useState(false),
|
55
52
|
_useState2 = _slicedToArray(_useState, 2),
|
@@ -60,15 +57,17 @@ var FilterFlyout = function FilterFlyout(_ref) {
|
|
60
57
|
filters: filters,
|
61
58
|
setAllFilters: setAllFilters,
|
62
59
|
variation: FLYOUT,
|
63
|
-
|
60
|
+
reactTableFiltersState: reactTableFiltersState,
|
61
|
+
onCancel: onCancel
|
64
62
|
}),
|
65
63
|
filtersState = _useFilters.filtersState,
|
66
64
|
prevFiltersObjectArrayRef = _useFilters.prevFiltersObjectArrayRef,
|
67
65
|
prevFiltersRef = _useFilters.prevFiltersRef,
|
68
|
-
|
66
|
+
cancel = _useFilters.cancel,
|
69
67
|
reset = _useFilters.reset,
|
70
68
|
renderFilter = _useFilters.renderFilter,
|
71
|
-
filtersObjectArray = _useFilters.filtersObjectArray
|
69
|
+
filtersObjectArray = _useFilters.filtersObjectArray,
|
70
|
+
lastAppliedFilters = _useFilters.lastAppliedFilters;
|
72
71
|
|
73
72
|
/** Refs */
|
74
73
|
var filterFlyoutRef = useRef(null);
|
@@ -107,26 +106,10 @@ var FilterFlyout = function FilterFlyout(_ref) {
|
|
107
106
|
// updates the ref so next time the flyout opens we have records of the previous filters
|
108
107
|
prevFiltersRef.current = JSON.stringify(filtersState);
|
109
108
|
prevFiltersObjectArrayRef.current = JSON.stringify(filtersObjectArray);
|
110
|
-
};
|
111
|
-
var cancel = function cancel() {
|
112
|
-
// Reverting to previous filters only applies when using batch actions
|
113
|
-
if (updateMethod === BATCH) {
|
114
|
-
revertToPreviousFilters();
|
115
|
-
onCancel();
|
116
|
-
}
|
117
|
-
closeFlyout();
|
118
|
-
};
|
119
109
|
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
var hasClickedOnDropdown = target.className === "".concat(carbonPrefix, "--list-box__menu-item__option");
|
124
|
-
if (!open || hasClickedOnDatePicker || hasClickedOnDropdown) {
|
125
|
-
return;
|
126
|
-
}
|
127
|
-
cancel();
|
128
|
-
});
|
129
|
-
useSubscribeToEventEmitter(CLEAR_FILTERS, reset);
|
110
|
+
// Update the last applied filters
|
111
|
+
lastAppliedFilters.current = JSON.stringify(filtersObjectArray);
|
112
|
+
};
|
130
113
|
|
131
114
|
/** Renders all filters */
|
132
115
|
var renderFilters = function renderFilters() {
|
@@ -153,6 +136,21 @@ var FilterFlyout = function FilterFlyout(_ref) {
|
|
153
136
|
buttonSize: "md"
|
154
137
|
});
|
155
138
|
};
|
139
|
+
|
140
|
+
/** Effects */
|
141
|
+
useClickOutside(filterFlyoutRef, function (target) {
|
142
|
+
var hasClickedOnDatePicker = target.closest('.flatpickr-calendar');
|
143
|
+
var hasClickedOnDropdown = target.className === "".concat(carbonPrefix, "--list-box__menu-item__option");
|
144
|
+
if (!open || hasClickedOnDatePicker || hasClickedOnDropdown) {
|
145
|
+
return;
|
146
|
+
}
|
147
|
+
closeFlyout();
|
148
|
+
cancel();
|
149
|
+
});
|
150
|
+
useSubscribeToEventEmitter(CLEAR_FILTERS, reset);
|
151
|
+
useEffect(function reflectLastAppliedFiltersWhenReactTableUpdates() {
|
152
|
+
lastAppliedFilters.current = JSON.stringify(reactTableFiltersState);
|
153
|
+
}, [reactTableFiltersState, lastAppliedFilters]);
|
156
154
|
return /*#__PURE__*/React.createElement("div", {
|
157
155
|
className: "".concat(componentClass, "__container")
|
158
156
|
}, /*#__PURE__*/React.createElement(Button, {
|
@@ -196,14 +194,6 @@ FilterFlyout.propTypes = {
|
|
196
194
|
* Icon description for the filter flyout button
|
197
195
|
*/
|
198
196
|
flyoutIconDescription: PropTypes.string,
|
199
|
-
/**
|
200
|
-
* Filters that should be applied on load
|
201
|
-
*/
|
202
|
-
initialFilters: PropTypes.arrayOf(PropTypes.shape({
|
203
|
-
id: PropTypes.string.isRequired,
|
204
|
-
type: PropTypes.string.isRequired,
|
205
|
-
value: PropTypes.any.isRequired
|
206
|
-
})),
|
207
197
|
/**
|
208
198
|
* Callback when the apply button is clicked
|
209
199
|
*/
|
@@ -224,6 +214,14 @@ FilterFlyout.propTypes = {
|
|
224
214
|
* Label text of the primary action in the flyout
|
225
215
|
*/
|
226
216
|
primaryActionLabel: PropTypes.string,
|
217
|
+
/**
|
218
|
+
* Filters from react table's state
|
219
|
+
*/
|
220
|
+
reactTableFiltersState: PropTypes.arrayOf(PropTypes.shape({
|
221
|
+
id: PropTypes.string.isRequired,
|
222
|
+
type: PropTypes.string.isRequired,
|
223
|
+
value: PropTypes.any.isRequired
|
224
|
+
})),
|
227
225
|
/**
|
228
226
|
* Label text of the secondary action in the flyout
|
229
227
|
*/
|
@@ -56,11 +56,8 @@ var FilterPanel = function FilterPanel(_ref) {
|
|
56
56
|
searchLabelText = _ref$searchLabelText === void 0 ? 'Filter search' : _ref$searchLabelText,
|
57
57
|
_ref$searchPlaceholde = _ref.searchPlaceholder,
|
58
58
|
searchPlaceholder = _ref$searchPlaceholde === void 0 ? 'Find filters' : _ref$searchPlaceholde,
|
59
|
-
_ref$
|
60
|
-
|
61
|
-
// Save the initial filters we only need the filters once
|
62
|
-
var initialFiltersRef = useRef(initialFilters);
|
63
|
-
|
59
|
+
_ref$reactTableFilter = _ref.reactTableFiltersState,
|
60
|
+
reactTableFiltersState = _ref$reactTableFilter === void 0 ? [] : _ref$reactTableFilter;
|
64
61
|
/** State */
|
65
62
|
var _useState = useState(false),
|
66
63
|
_useState2 = _slicedToArray(_useState, 2),
|
@@ -71,15 +68,17 @@ var FilterPanel = function FilterPanel(_ref) {
|
|
71
68
|
filters: filterSections,
|
72
69
|
setAllFilters: setAllFilters,
|
73
70
|
variation: PANEL,
|
74
|
-
|
71
|
+
reactTableFiltersState: reactTableFiltersState,
|
72
|
+
onCancel: onCancel
|
75
73
|
}),
|
76
74
|
filtersState = _useFilters.filtersState,
|
77
75
|
prevFiltersObjectArrayRef = _useFilters.prevFiltersObjectArrayRef,
|
78
76
|
prevFiltersRef = _useFilters.prevFiltersRef,
|
79
|
-
|
77
|
+
cancel = _useFilters.cancel,
|
80
78
|
reset = _useFilters.reset,
|
81
79
|
renderFilter = _useFilters.renderFilter,
|
82
|
-
filtersObjectArray = _useFilters.filtersObjectArray
|
80
|
+
filtersObjectArray = _useFilters.filtersObjectArray,
|
81
|
+
lastAppliedFilters = _useFilters.lastAppliedFilters;
|
83
82
|
|
84
83
|
/** Refs */
|
85
84
|
var filterPanelRef = useRef();
|
@@ -109,14 +108,8 @@ var FilterPanel = function FilterPanel(_ref) {
|
|
109
108
|
|
110
109
|
/** Methods */
|
111
110
|
var closePanel = function closePanel() {
|
112
|
-
|
113
|
-
|
114
|
-
var cancel = function cancel() {
|
115
|
-
// Reverting to previous filters only applies when using batch actions
|
116
|
-
if (updateMethod === BATCH) {
|
117
|
-
revertToPreviousFilters();
|
118
|
-
onCancel();
|
119
|
-
}
|
111
|
+
cancel();
|
112
|
+
setPanelOpen(false);
|
120
113
|
};
|
121
114
|
var apply = function apply() {
|
122
115
|
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, {
|
@@ -244,20 +240,20 @@ FilterPanel.propTypes = {
|
|
244
240
|
closeIconDescription: PropTypes.string,
|
245
241
|
filterPanelMinHeight: PropTypes.number,
|
246
242
|
filterSections: PropTypes.array,
|
247
|
-
/**
|
248
|
-
* Filters that should be applied on load
|
249
|
-
*/
|
250
|
-
initialFilters: PropTypes.arrayOf(PropTypes.shape({
|
251
|
-
id: PropTypes.string.isRequired,
|
252
|
-
type: PropTypes.string.isRequired,
|
253
|
-
value: PropTypes.any.isRequired
|
254
|
-
})),
|
255
243
|
onApply: PropTypes.func,
|
256
244
|
onCancel: PropTypes.func,
|
257
245
|
onPanelClose: PropTypes.func,
|
258
246
|
onPanelOpen: PropTypes.func,
|
259
247
|
open: PropTypes.bool,
|
260
248
|
primaryActionLabel: PropTypes.string,
|
249
|
+
/**
|
250
|
+
* Filters from react table's state
|
251
|
+
*/
|
252
|
+
reactTableFiltersState: PropTypes.arrayOf(PropTypes.shape({
|
253
|
+
id: PropTypes.string.isRequired,
|
254
|
+
type: PropTypes.string.isRequired,
|
255
|
+
value: PropTypes.any.isRequired
|
256
|
+
})),
|
261
257
|
searchLabelText: PropTypes.string,
|
262
258
|
searchPlaceholder: PropTypes.string,
|
263
259
|
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 useFilters } from './useFilters';
|
11
10
|
export { default as useShouldDisableButtons } from './useShouldDisableButtons';
|
@@ -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, Layer } from '@carbon/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,8 +157,11 @@ var useFilters = function useFilters(_ref) {
|
|
154
157
|
var type = _ref3.type,
|
155
158
|
column = _ref3.column,
|
156
159
|
components = _ref3.props;
|
157
|
-
var isPanel = variation === PANEL;
|
158
160
|
var filter;
|
161
|
+
var isPanel = variation === PANEL;
|
162
|
+
if (!type) {
|
163
|
+
return console.error("type: ".concat(type, "; does not exist as a type of filter."));
|
164
|
+
}
|
159
165
|
switch (type) {
|
160
166
|
case DATE:
|
161
167
|
filter = /*#__PURE__*/React.createElement(DatePicker, _extends({}, components.DatePicker, {
|
@@ -281,10 +287,31 @@ var useFilters = function useFilters(_ref) {
|
|
281
287
|
break;
|
282
288
|
}
|
283
289
|
if (isPanel) {
|
284
|
-
return /*#__PURE__*/React.createElement(Layer,
|
290
|
+
return /*#__PURE__*/React.createElement(Layer, {
|
291
|
+
key: column
|
292
|
+
}, filter);
|
285
293
|
}
|
286
|
-
return
|
294
|
+
return /*#__PURE__*/React.createElement(React.Fragment, {
|
295
|
+
key: column
|
296
|
+
}, filter);
|
287
297
|
};
|
298
|
+
var cancel = function cancel() {
|
299
|
+
// Reverting to previous filters only applies when using batch actions
|
300
|
+
if (updateMethod === BATCH) {
|
301
|
+
revertToPreviousFilters();
|
302
|
+
onCancel();
|
303
|
+
}
|
304
|
+
};
|
305
|
+
|
306
|
+
/** The purpose of this function is to sync any changes in react-tables state.filters array and reflect
|
307
|
+
those new filter changes in the panel/flyout state. The external change is triggered if setAllFilters is called outside of the Datagrid */
|
308
|
+
useEffect(function updateStateAndFiltersToReflectExternalFilterChanges() {
|
309
|
+
var newFiltersState = getInitialStateFromFilters(filters, variation, reactTableFiltersState);
|
310
|
+
setFiltersState(newFiltersState);
|
311
|
+
prevFiltersRef.current = JSON.stringify(newFiltersState);
|
312
|
+
prevFiltersObjectArrayRef.current = JSON.stringify(reactTableFiltersState);
|
313
|
+
setFiltersObjectArray(reactTableFiltersState);
|
314
|
+
}, [filters, reactTableFiltersState, variation]);
|
288
315
|
return {
|
289
316
|
filtersState: filtersState,
|
290
317
|
setFiltersState: setFiltersState,
|
@@ -293,7 +320,9 @@ var useFilters = function useFilters(_ref) {
|
|
293
320
|
revertToPreviousFilters: revertToPreviousFilters,
|
294
321
|
reset: reset,
|
295
322
|
renderFilter: renderFilter,
|
296
|
-
filtersObjectArray: filtersObjectArray
|
323
|
+
filtersObjectArray: filtersObjectArray,
|
324
|
+
lastAppliedFilters: lastAppliedFilters,
|
325
|
+
cancel: cancel
|
297
326
|
};
|
298
327
|
};
|
299
328
|
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 () {
|
@@ -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);
|
@@ -444,9 +444,7 @@ export var SidePanel = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
444
444
|
}, title));
|
445
445
|
};
|
446
446
|
var contentRef = ref || sidePanelRef;
|
447
|
-
useResizeObserver(contentRef,
|
448
|
-
callback: handleResize
|
449
|
-
});
|
447
|
+
useResizeObserver(contentRef, handleResize);
|
450
448
|
return /*#__PURE__*/React.createElement(AnimatePresence, null, open && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(motion.div, _extends({}, getDevtoolsProps(componentName), rest, {
|
451
449
|
id: "".concat(blockClass, "-outer"),
|
452
450
|
className: mainPanelClassNames,
|
@@ -156,7 +156,8 @@ export var TagSet = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
156
156
|
if (sizingTags.length > 0) {
|
157
157
|
var spaceAvailable = tagSetRef.current.offsetWidth;
|
158
158
|
for (var i in sizingTags) {
|
159
|
-
var
|
159
|
+
var _sizingTags$i;
|
160
|
+
var tagWidth = ((_sizingTags$i = sizingTags[i]) === null || _sizingTags$i === void 0 ? void 0 : _sizingTags$i.offsetWidth) || 0;
|
160
161
|
if (spaceAvailable >= tagWidth) {
|
161
162
|
spaceAvailable -= tagWidth;
|
162
163
|
willFit += 1;
|
@@ -198,12 +199,8 @@ export var TagSet = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
198
199
|
var handleModalClose = function handleModalClose() {
|
199
200
|
setShowAllModalOpen(false);
|
200
201
|
};
|
201
|
-
useResizeObserver(sizingContainerRef,
|
202
|
-
|
203
|
-
});
|
204
|
-
useResizeObserver(tagSetRef, {
|
205
|
-
callback: handleResize
|
206
|
-
});
|
202
|
+
useResizeObserver(sizingContainerRef, handleSizerTagsResize);
|
203
|
+
useResizeObserver(tagSetRef, handleResize);
|
207
204
|
return /*#__PURE__*/React.createElement("div", _extends({}, rest, {
|
208
205
|
className: cx([blockClass, className]),
|
209
206
|
ref: tagSetRef
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
2
2
|
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
3
|
-
var _excluded = ["backgroundColor", "className", "kind", "icon", "initials", "image", "imageDescription", "size", "theme", "tooltipText"];
|
3
|
+
var _excluded = ["backgroundColor", "className", "kind", "icon", "initials", "image", "imageDescription", "size", "theme", "tooltipText", "tooltipAlignment"];
|
4
4
|
/**
|
5
5
|
* Copyright IBM Corp. 2021, 2021
|
6
6
|
*
|
@@ -28,6 +28,10 @@ var componentName = 'UserProfileImage';
|
|
28
28
|
|
29
29
|
// NOTE: the component SCSS is not imported here: it is rolled up separately.
|
30
30
|
|
31
|
+
// Default values for props
|
32
|
+
var defaults = {
|
33
|
+
tooltipAlignment: 'bottom'
|
34
|
+
};
|
31
35
|
/**
|
32
36
|
* This is a user profile image component which displays an image, or initials or icon for a user.
|
33
37
|
*/
|
@@ -42,6 +46,8 @@ export var UserProfileImage = /*#__PURE__*/React.forwardRef(function (_ref, ref)
|
|
42
46
|
size = _ref.size,
|
43
47
|
theme = _ref.theme,
|
44
48
|
tooltipText = _ref.tooltipText,
|
49
|
+
_ref$tooltipAlignment = _ref.tooltipAlignment,
|
50
|
+
tooltipAlignment = _ref$tooltipAlignment === void 0 ? defaults.tooltipAlignment : _ref$tooltipAlignment,
|
45
51
|
rest = _objectWithoutProperties(_ref, _excluded);
|
46
52
|
var icons = {
|
47
53
|
user: {
|
@@ -121,7 +127,8 @@ export var UserProfileImage = /*#__PURE__*/React.forwardRef(function (_ref, ref)
|
|
121
127
|
return FillItem && (tooltipText ? /*#__PURE__*/React.createElement(IconButton, {
|
122
128
|
label: tooltipText,
|
123
129
|
className: "".concat(blockClass, "__tooltip"),
|
124
|
-
kind: "ghost"
|
130
|
+
kind: "ghost",
|
131
|
+
align: tooltipAlignment
|
125
132
|
}, renderUserProfileImage()) : renderUserProfileImage());
|
126
133
|
});
|
127
134
|
|
@@ -169,6 +176,10 @@ UserProfileImage.propTypes = {
|
|
169
176
|
* Set theme in which the component will be rendered
|
170
177
|
*/
|
171
178
|
theme: PropTypes.oneOf(['light', 'dark']).isRequired,
|
179
|
+
/**
|
180
|
+
* Specify how the trigger should align with the tooltip
|
181
|
+
*/
|
182
|
+
tooltipAlignment: PropTypes.oneOf(['top', 'top-left', 'top-right', 'bottom', 'bottom-left', 'bottom-right', 'left', 'right']),
|
172
183
|
/**
|
173
184
|
* Pass in the display name to have it shown on hover
|
174
185
|
*/
|
@@ -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
|
@@ -81,9 +81,7 @@ var AboutModal = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
|
|
81
81
|
}, [bodyRef]);
|
82
82
|
|
83
83
|
// Detect resize of the ModalBody to recalculate whether scrolling is enabled
|
84
|
-
(0, _useResizeObserver.useResizeObserver)(bodyRef,
|
85
|
-
callback: handleResize
|
86
|
-
});
|
84
|
+
(0, _useResizeObserver.useResizeObserver)(bodyRef, handleResize);
|
87
85
|
return /*#__PURE__*/_react.default.createElement(_react2.ComposedModal, (0, _extends2.default)({}, rest, {
|
88
86
|
className: (0, _classnames.default)(blockClass,
|
89
87
|
// Apply the block class to the main HTML element
|
@@ -192,12 +192,8 @@ var ActionBar = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
|
|
192
192
|
};
|
193
193
|
|
194
194
|
// // resize of the items
|
195
|
-
(0, _useResizeObserver.useResizeObserver)(sizingRef,
|
196
|
-
|
197
|
-
});
|
198
|
-
(0, _useResizeObserver.useResizeObserver)(localRef, {
|
199
|
-
callback: handleResize
|
200
|
-
});
|
195
|
+
(0, _useResizeObserver.useResizeObserver)(sizingRef, handleResize);
|
196
|
+
(0, _useResizeObserver.useResizeObserver)(localRef, handleResize);
|
201
197
|
return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({}, rest, {
|
202
198
|
className: (0, _classnames.default)([blockClass, className]),
|
203
199
|
ref: localRef
|
@@ -14,16 +14,15 @@ var _UserProfileImage = require("../UserProfileImage");
|
|
14
14
|
var componentName = 'AddSelectFormControl';
|
15
15
|
var blockClass = "".concat(_settings.pkg.prefix, "--add-select__selections");
|
16
16
|
var AddSelectFormControl = function AddSelectFormControl(_ref) {
|
17
|
-
var _controlProps;
|
18
17
|
var item = _ref.item,
|
19
18
|
onClick = _ref.onClick,
|
20
19
|
selected = _ref.selected,
|
21
20
|
type = _ref.type;
|
22
|
-
var controlProps = (
|
21
|
+
var controlProps = (0, _defineProperty2.default)({
|
23
22
|
onClick: onClick,
|
24
|
-
|
25
|
-
|
26
|
-
},
|
23
|
+
className: "".concat(blockClass, "-form-control-wrapper ").concat(blockClass, "-form-control-wrapper--").concat(type),
|
24
|
+
size: 20
|
25
|
+
}, "aria-labelledby", "control-label-".concat(item.id));
|
27
26
|
var getCheckbox = function getCheckbox() {
|
28
27
|
if (selected) {
|
29
28
|
return /*#__PURE__*/_react.default.createElement(_icons.CheckboxCheckedFilled, controlProps);
|
@@ -75,7 +74,8 @@ var AddSelectFormControl = function AddSelectFormControl(_ref) {
|
|
75
74
|
}, getItemIcon(item)), /*#__PURE__*/_react.default.createElement("div", {
|
76
75
|
className: "".concat(blockClass, "-form-control-label-text")
|
77
76
|
}, /*#__PURE__*/_react.default.createElement("span", {
|
78
|
-
className: "".concat(blockClass, "-cell-title")
|
77
|
+
className: "".concat(blockClass, "-cell-title"),
|
78
|
+
id: "control-label-".concat(item.id)
|
79
79
|
}, item.title), item.subtitle && /*#__PURE__*/_react.default.createElement("span", {
|
80
80
|
className: "".concat(blockClass, "-cell-subtitle")
|
81
81
|
}, item.subtitle))));
|