@carbon/ibm-products 2.11.3 → 2.12.0
Sign up to get free protection for your applications and to get access to all the features.
- package/css/index-full-carbon.css +40 -7
- 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 +36 -7
- package/css/index-without-carbon-released-only.css.map +1 -1
- package/css/index-without-carbon-released-only.min.css +2 -2
- package/css/index-without-carbon-released-only.min.css.map +1 -1
- package/css/index-without-carbon.css +40 -7
- 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 +40 -7
- 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/Card/Card.js +9 -1
- package/es/components/Card/CardFooter.js +8 -2
- package/es/components/Card/CardHeader.js +8 -2
- package/es/components/CreateFullPage/CreateFullPage.docs-page.js +6 -0
- package/es/components/CreateFullPage/CreateFullPage.js +66 -8
- package/es/components/Datagrid/Datagrid/Datagrid.js +2 -1
- package/es/components/Datagrid/Datagrid/DatagridContent.js +7 -1
- package/es/components/Datagrid/Datagrid/DatagridSelectAll.js +13 -1
- package/es/components/Datagrid/Datagrid/DraggableElement.js +1 -0
- package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/DraggableItemsList.js +31 -10
- package/es/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +18 -17
- package/es/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +104 -18
- package/es/components/Datagrid/Datagrid/addons/Filtering/OverflowCheckboxes.js +68 -0
- package/es/components/Datagrid/Datagrid/addons/Filtering/constants.js +1 -0
- package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +120 -54
- package/es/components/Datagrid/Datagrid/addons/Filtering/utils.js +9 -3
- package/es/components/Datagrid/useActionsColumn.js +0 -2
- package/es/components/Datagrid/useFiltering.js +4 -1
- package/es/components/Datagrid/utils/DatagridActions.js +2 -3
- package/es/components/SimpleHeader/SimpleHeader.docs-page.js +17 -0
- package/es/components/SimpleHeader/SimpleHeader.js +92 -0
- package/es/components/SimpleHeader/index.js +8 -0
- package/es/components/StatusIcon/StatusIcon.js +13 -13
- package/es/global/js/utils/StoryDocsPage.js +3 -3
- package/lib/components/Card/Card.js +9 -1
- package/lib/components/Card/CardFooter.js +8 -2
- package/lib/components/Card/CardHeader.js +8 -2
- package/lib/components/CreateFullPage/CreateFullPage.docs-page.js +6 -0
- package/lib/components/CreateFullPage/CreateFullPage.js +65 -7
- package/lib/components/Datagrid/Datagrid/Datagrid.js +2 -1
- package/lib/components/Datagrid/Datagrid/DatagridContent.js +6 -0
- package/lib/components/Datagrid/Datagrid/DatagridSelectAll.js +13 -1
- package/lib/components/Datagrid/Datagrid/DraggableElement.js +1 -0
- package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/DraggableItemsList.js +31 -10
- package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +40 -38
- package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +109 -24
- package/lib/components/Datagrid/Datagrid/addons/Filtering/OverflowCheckboxes.js +79 -0
- package/lib/components/Datagrid/Datagrid/addons/Filtering/constants.js +4 -2
- package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +136 -70
- package/lib/components/Datagrid/Datagrid/addons/Filtering/utils.js +10 -4
- package/lib/components/Datagrid/useActionsColumn.js +0 -2
- package/lib/components/Datagrid/useFiltering.js +4 -1
- package/lib/components/Datagrid/utils/DatagridActions.js +2 -3
- package/lib/components/SimpleHeader/SimpleHeader.docs-page.js +28 -0
- package/lib/components/SimpleHeader/SimpleHeader.js +102 -0
- package/lib/components/SimpleHeader/index.js +12 -0
- package/lib/components/StatusIcon/StatusIcon.js +12 -12
- package/lib/global/js/utils/StoryDocsPage.js +3 -3
- package/package.json +2 -2
- package/scss/components/Card/_card.scss +1 -1
- package/scss/components/CreateFullPage/_create-full-page.scss +11 -2
- package/scss/components/Datagrid/styles/addons/_FilterPanel.scss +4 -0
- package/scss/components/ProductiveCard/_productive-card.scss +0 -1
- package/scss/components/SimpleHeader/_carbon-imports.scss +11 -0
- package/scss/components/SimpleHeader/_index-with-carbon.scss +9 -0
- package/scss/components/SimpleHeader/_index.scss +10 -0
- package/scss/components/SimpleHeader/_simple-header.scss +37 -0
- package/scss/components/StatusIcon/_status-icon.scss +0 -1
- package/scss/components/_index-with-carbon.scss +1 -0
@@ -1,7 +1,7 @@
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
2
2
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
3
3
|
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
4
|
-
var _excluded = ["backButtonText", "cancelButtonText", "children", "className", "initialStep", "modalDangerButtonText", "modalDescription", "modalSecondaryButtonText", "modalTitle", "nextButtonText", "onClose", "onRequestSubmit", "firstFocusElement", "submitButtonText", "title"];
|
4
|
+
var _excluded = ["breadcrumbsOverflowAriaLabel", "breadcrumbs", "backButtonText", "cancelButtonText", "children", "className", "initialStep", "maxVisibleBreadcrumbs", "modalDangerButtonText", "modalDescription", "modalSecondaryButtonText", "modalTitle", "nextButtonText", "onClose", "onRequestSubmit", "firstFocusElement", "submitButtonText", "noTrailingSlash", "title", "secondaryTitle"];
|
5
5
|
/**
|
6
6
|
* Copyright IBM Corp. 2021, 2023
|
7
7
|
*
|
@@ -10,7 +10,7 @@ var _excluded = ["backButtonText", "cancelButtonText", "children", "className",
|
|
10
10
|
*/
|
11
11
|
|
12
12
|
// Import portions of React that are needed.
|
13
|
-
import React, { useEffect, useState, createContext } from 'react';
|
13
|
+
import React, { useEffect, useState, createContext, useRef } from 'react';
|
14
14
|
|
15
15
|
// Other standard imports.
|
16
16
|
import PropTypes from 'prop-types';
|
@@ -25,6 +25,7 @@ import { ActionSet } from '../ActionSet';
|
|
25
25
|
import { usePreviousValue, useValidCreateStepCount, useResetCreateComponent, useCreateComponentFocus, useCreateComponentStepChange } from '../../global/js/hooks';
|
26
26
|
import { lastIndexInArray } from '../../global/js/utils/lastIndexInArray';
|
27
27
|
import { getNumberOfHiddenSteps } from '../../global/js/utils/getNumberOfHiddenSteps';
|
28
|
+
import { SimpleHeader, overflowAriaLabel_required_if_breadcrumbs_exist } from '../SimpleHeader/SimpleHeader';
|
28
29
|
var blockClass = "".concat(pkg.prefix, "--create-full-page");
|
29
30
|
var componentName = 'CreateFullPage';
|
30
31
|
|
@@ -50,11 +51,14 @@ include `<Row>` and `<Column>` components inside of each `CreateFullPageStep`
|
|
50
51
|
component to get the desired affect.
|
51
52
|
*/
|
52
53
|
export var CreateFullPage = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
53
|
-
var
|
54
|
+
var breadcrumbsOverflowAriaLabel = _ref.breadcrumbsOverflowAriaLabel,
|
55
|
+
breadcrumbs = _ref.breadcrumbs,
|
56
|
+
backButtonText = _ref.backButtonText,
|
54
57
|
cancelButtonText = _ref.cancelButtonText,
|
55
58
|
children = _ref.children,
|
56
59
|
className = _ref.className,
|
57
60
|
initialStep = _ref.initialStep,
|
61
|
+
maxVisibleBreadcrumbs = _ref.maxVisibleBreadcrumbs,
|
58
62
|
modalDangerButtonText = _ref.modalDangerButtonText,
|
59
63
|
modalDescription = _ref.modalDescription,
|
60
64
|
modalSecondaryButtonText = _ref.modalSecondaryButtonText,
|
@@ -64,7 +68,9 @@ export var CreateFullPage = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
64
68
|
onRequestSubmit = _ref.onRequestSubmit,
|
65
69
|
firstFocusElement = _ref.firstFocusElement,
|
66
70
|
submitButtonText = _ref.submitButtonText,
|
71
|
+
noTrailingSlash = _ref.noTrailingSlash,
|
67
72
|
title = _ref.title,
|
73
|
+
secondaryTitle = _ref.secondaryTitle,
|
68
74
|
rest = _objectWithoutProperties(_ref, _excluded);
|
69
75
|
var _useState = useState([]),
|
70
76
|
_useState2 = _slicedToArray(_useState, 2),
|
@@ -114,6 +120,11 @@ export var CreateFullPage = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
114
120
|
_useState22 = _slicedToArray(_useState21, 2),
|
115
121
|
lastIncludedStep = _useState22[0],
|
116
122
|
setLastIncludedStep = _useState22[1];
|
123
|
+
var _useState23 = useState(0),
|
124
|
+
_useState24 = _slicedToArray(_useState23, 2),
|
125
|
+
headerHeight = _useState24[0],
|
126
|
+
setHeaderHeight = _useState24[1];
|
127
|
+
var headerRef = useRef(null);
|
117
128
|
useEffect(function () {
|
118
129
|
var firstItem = stepData.findIndex(function (item) {
|
119
130
|
return item === null || item === void 0 ? void 0 : item.shouldIncludeStep;
|
@@ -130,6 +141,13 @@ export var CreateFullPage = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
130
141
|
setCurrentStep(Number(initialStep + numberOfHiddenSteps));
|
131
142
|
}
|
132
143
|
}, [stepData, firstIncludedStep, lastIncludedStep, initialStep]);
|
144
|
+
useEffect(function () {
|
145
|
+
var headerHeight = 0;
|
146
|
+
if (title || (breadcrumbs === null || breadcrumbs === void 0 ? void 0 : breadcrumbs.length) > 0) {
|
147
|
+
headerHeight = headerRef.current.getBoundingClientRect().height;
|
148
|
+
}
|
149
|
+
setHeaderHeight(headerHeight);
|
150
|
+
}, [title, breadcrumbs]);
|
133
151
|
useCreateComponentFocus({
|
134
152
|
previousState: previousState,
|
135
153
|
currentStep: currentStep,
|
@@ -171,18 +189,31 @@ export var CreateFullPage = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
171
189
|
setCreateComponentActions: setCreateFullPageActions,
|
172
190
|
setModalIsOpen: setModalIsOpen
|
173
191
|
});
|
174
|
-
|
175
192
|
// currently, we are not supporting the use of 'view all' toggle state
|
176
193
|
/* istanbul ignore next */
|
177
194
|
return /*#__PURE__*/React.createElement("div", _extends({}, rest, {
|
178
195
|
ref: ref,
|
179
196
|
className: cx(blockClass, className)
|
180
|
-
}, getDevtoolsProps(componentName)), /*#__PURE__*/React.createElement("div", {
|
197
|
+
}, getDevtoolsProps(componentName)), (title || (breadcrumbs === null || breadcrumbs === void 0 ? void 0 : breadcrumbs.length) > 0) && /*#__PURE__*/React.createElement("div", {
|
198
|
+
className: "".concat(blockClass, "__header"),
|
199
|
+
ref: headerRef
|
200
|
+
}, /*#__PURE__*/React.createElement(SimpleHeader, {
|
201
|
+
title: title,
|
202
|
+
breadcrumbs: breadcrumbs,
|
203
|
+
noTrailingSlash: noTrailingSlash,
|
204
|
+
overflowAriaLabel: breadcrumbsOverflowAriaLabel,
|
205
|
+
maxVisible: maxVisibleBreadcrumbs
|
206
|
+
})), /*#__PURE__*/React.createElement("div", {
|
207
|
+
className: "".concat(blockClass, "__influencer-and-body-container"),
|
208
|
+
style: {
|
209
|
+
height: "calc(100vh - ".concat(headerHeight, "px)")
|
210
|
+
}
|
211
|
+
}, /*#__PURE__*/React.createElement("div", {
|
181
212
|
className: "".concat(blockClass, "__influencer")
|
182
213
|
}, /*#__PURE__*/React.createElement(CreateInfluencer, {
|
183
214
|
stepData: stepData,
|
184
215
|
currentStep: currentStep,
|
185
|
-
title:
|
216
|
+
title: secondaryTitle
|
186
217
|
})), /*#__PURE__*/React.createElement("div", {
|
187
218
|
className: "".concat(blockClass, "__body")
|
188
219
|
}, /*#__PURE__*/React.createElement("div", {
|
@@ -239,7 +270,7 @@ export var CreateFullPage = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
239
270
|
type: "button",
|
240
271
|
kind: "danger",
|
241
272
|
onClick: onClose
|
242
|
-
}, modalDangerButtonText))));
|
273
|
+
}, modalDangerButtonText)))));
|
243
274
|
});
|
244
275
|
|
245
276
|
// Return a placeholder if not released and not enabled by feature flag.
|
@@ -257,6 +288,23 @@ CreateFullPage.propTypes = {
|
|
257
288
|
* The back button text
|
258
289
|
*/
|
259
290
|
backButtonText: PropTypes.string.isRequired,
|
291
|
+
/** The header breadcrumbs */
|
292
|
+
breadcrumbs: PropTypes.arrayOf(PropTypes.shape({
|
293
|
+
/** breadcrumb item key */
|
294
|
+
key: PropTypes.string.isRequired,
|
295
|
+
/** breadcrumb item label */
|
296
|
+
label: PropTypes.string.isRequired,
|
297
|
+
/** breadcrumb item link */
|
298
|
+
href: PropTypes.string,
|
299
|
+
/** breadcrumb item title tooltip */
|
300
|
+
title: PropTypes.string,
|
301
|
+
/** Provide if this breadcrumb item represents the current page */
|
302
|
+
isCurrentPage: PropTypes.bool
|
303
|
+
})),
|
304
|
+
/**
|
305
|
+
* Label for open/close overflow button used for breadcrumb items that do not fit
|
306
|
+
*/
|
307
|
+
breadcrumbsOverflowAriaLabel: overflowAriaLabel_required_if_breadcrumbs_exist,
|
260
308
|
/**
|
261
309
|
* The cancel button text
|
262
310
|
*/
|
@@ -279,6 +327,8 @@ CreateFullPage.propTypes = {
|
|
279
327
|
* is now being completed.
|
280
328
|
*/
|
281
329
|
initialStep: PropTypes.number,
|
330
|
+
/** Maximum visible breadcrumb-items before overflow is used (values less than 1 are treated as 1) */
|
331
|
+
maxVisibleBreadcrumbs: PropTypes.number,
|
282
332
|
/**
|
283
333
|
* The primary 'danger' button text in the modal
|
284
334
|
*/
|
@@ -299,6 +349,10 @@ CreateFullPage.propTypes = {
|
|
299
349
|
* The next button text
|
300
350
|
*/
|
301
351
|
nextButtonText: PropTypes.string.isRequired,
|
352
|
+
/**
|
353
|
+
* A prop to omit the trailing slash for the breadcrumbs
|
354
|
+
*/
|
355
|
+
noTrailingSlash: PropTypes.bool,
|
302
356
|
/**
|
303
357
|
* An optional handler that is called when the user closes the full page (by
|
304
358
|
* clicking the secondary button, located in the modal, which triggers after
|
@@ -310,6 +364,10 @@ CreateFullPage.propTypes = {
|
|
310
364
|
* This function can _optionally_ return a promise that is either resolved or rejected and the CreateFullPage will handle the submitting state of the create button.
|
311
365
|
*/
|
312
366
|
onRequestSubmit: PropTypes.func.isRequired,
|
367
|
+
/**
|
368
|
+
* A secondary title of the full page, displayed in the influencer area
|
369
|
+
*/
|
370
|
+
secondaryTitle: PropTypes.string,
|
313
371
|
/**
|
314
372
|
* @ignore
|
315
373
|
* The aria label to be used for the UI Shell SideNav Carbon component
|
@@ -320,7 +378,7 @@ CreateFullPage.propTypes = {
|
|
320
378
|
*/
|
321
379
|
submitButtonText: PropTypes.string.isRequired,
|
322
380
|
/**
|
323
|
-
* The main title of the full page, displayed in the
|
381
|
+
* The main title of the full page, displayed in the header area
|
324
382
|
*/
|
325
383
|
title: PropTypes.string
|
326
384
|
};
|
@@ -44,7 +44,8 @@ export var Datagrid = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
44
44
|
datagridState: datagridState
|
45
45
|
};
|
46
46
|
return /*#__PURE__*/React.createElement(FilterProvider, {
|
47
|
-
filters: filters
|
47
|
+
filters: filters,
|
48
|
+
filterProps: filterProps
|
48
49
|
}, /*#__PURE__*/React.createElement(InlineEditProvider, null, /*#__PURE__*/React.createElement("div", _extends({}, rest, {
|
49
50
|
id: tableId,
|
50
51
|
ref: ref,
|
@@ -11,7 +11,7 @@ import { FilterContext, FilterPanel } from './addons/Filtering';
|
|
11
11
|
import React, { useContext, useEffect, useRef } from 'react';
|
12
12
|
import { Table, TableContainer } from '@carbon/react';
|
13
13
|
import { carbon, pkg } from '../../../settings';
|
14
|
-
import { CLEAR_FILTERS } from './addons/Filtering/constants';
|
14
|
+
import { CLEAR_FILTERS, CLEAR_SINGLE_FILTER } from './addons/Filtering/constants';
|
15
15
|
import DatagridBody from './DatagridBody';
|
16
16
|
import DatagridHead from './DatagridHead';
|
17
17
|
import DatagridToolbar from './DatagridToolbar';
|
@@ -24,6 +24,8 @@ import { handleGridKeyPress } from './addons/InlineEdit/handleGridKeyPress';
|
|
24
24
|
import { px } from '@carbon/layout';
|
25
25
|
import { useClickOutside } from '../../../global/js/hooks';
|
26
26
|
import { useMultipleKeyTracking } from '../../DataSpreadsheet/hooks';
|
27
|
+
import { useSubscribeToEventEmitter } from './addons/Filtering/hooks';
|
28
|
+
import { clearSingleFilter } from './addons/Filtering/FilterProvider';
|
27
29
|
var blockClass = "".concat(pkg.prefix, "--datagrid");
|
28
30
|
export var DatagridContent = function DatagridContent(_ref) {
|
29
31
|
var _cx4;
|
@@ -59,6 +61,7 @@ export var DatagridContent = function DatagridContent(_ref) {
|
|
59
61
|
DatagridActions = datagridState.DatagridActions,
|
60
62
|
totalColumnsWidth = datagridState.totalColumnsWidth,
|
61
63
|
gridRef = datagridState.gridRef,
|
64
|
+
setAllFilters = datagridState.setAllFilters,
|
62
65
|
state = datagridState.state,
|
63
66
|
page = datagridState.page,
|
64
67
|
rows = datagridState.rows;
|
@@ -124,6 +127,9 @@ export var DatagridContent = function DatagridContent(_ref) {
|
|
124
127
|
gridElement.style.setProperty("--".concat(blockClass, "--grid-header-height"), px((tableHeader === null || tableHeader === void 0 ? void 0 : tableHeader.clientHeight) || 0));
|
125
128
|
}
|
126
129
|
}, [withInlineEdit, tableId, totalColumnsWidth, datagridState, gridActive]);
|
130
|
+
useSubscribeToEventEmitter(CLEAR_SINGLE_FILTER, function (id) {
|
131
|
+
return clearSingleFilter(id, setAllFilters, state);
|
132
|
+
});
|
127
133
|
var renderFilterSummary = function renderFilterSummary() {
|
128
134
|
return state.filters.length > 0 && /*#__PURE__*/React.createElement(FilterSummary, {
|
129
135
|
className: "".concat(blockClass, "__filter-summary"),
|
@@ -50,11 +50,23 @@ var SelectAll = function SelectAll(datagridState) {
|
|
50
50
|
var _getProps = getProps(),
|
51
51
|
onChange = _getProps.onChange,
|
52
52
|
selectProps = _objectWithoutProperties(_getProps, _excluded);
|
53
|
+
var _ref = selectProps || {},
|
54
|
+
indeterminate = _ref.indeterminate;
|
55
|
+
var handleSelectAllChange = function handleSelectAllChange(event) {
|
56
|
+
if (indeterminate) {
|
57
|
+
return onChange === null || onChange === void 0 ? void 0 : onChange({
|
58
|
+
target: {
|
59
|
+
checked: false
|
60
|
+
}
|
61
|
+
});
|
62
|
+
}
|
63
|
+
return onChange === null || onChange === void 0 ? void 0 : onChange(event);
|
64
|
+
};
|
53
65
|
return /*#__PURE__*/React.createElement("div", {
|
54
66
|
className: cx("".concat(blockClass, "__head-select-all"), "".concat(blockClass, "__checkbox-cell"), _defineProperty({}, "".concat(blockClass, "__checkbox-cell-sticky-left"), isFirstColumnStickyLeft && windowSize > 671))
|
55
67
|
}, /*#__PURE__*/React.createElement(TableSelectAll, _extends({}, selectProps, {
|
56
68
|
name: "".concat(tableId, "-select-all-checkbox-name"),
|
57
|
-
onSelect:
|
69
|
+
onSelect: handleSelectAllChange,
|
58
70
|
disabled: isFetching || selectProps.disabled,
|
59
71
|
id: "".concat(tableId, "-select-all-checkbox-id")
|
60
72
|
})));
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
2
|
+
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
2
3
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
3
4
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
4
5
|
/**
|
@@ -39,19 +40,39 @@ export var DraggableItemsList = function DraggableItemsList(_ref) {
|
|
39
40
|
var _getColTitle;
|
40
41
|
return filterString.length === 0 || ((_getColTitle = getColTitle(colDef)) === null || _getColTitle === void 0 ? void 0 : _getColTitle.toLowerCase().includes(filterString)) && colDef.id !== 'spacer';
|
41
42
|
});
|
43
|
+
var getUpdatedDragCols = function getUpdatedDragCols() {
|
44
|
+
var tempCols = _toConsumableArray(visibleCols);
|
45
|
+
tempCols.forEach(function (col) {
|
46
|
+
if (col.sticky) {
|
47
|
+
col.disabled = true;
|
48
|
+
}
|
49
|
+
});
|
50
|
+
return tempCols;
|
51
|
+
};
|
52
|
+
var updatedDragCols = getUpdatedDragCols();
|
42
53
|
|
43
54
|
// let localRefCopy;
|
44
55
|
var handleDragEnd = function handleDragEnd(event) {
|
56
|
+
var _destOverCol$;
|
45
57
|
var active = event.active,
|
46
58
|
over = event.over;
|
59
|
+
|
60
|
+
// Stop any re-ordering updates if the destination column is disabled
|
61
|
+
// ie: it is a frozen column.
|
62
|
+
var destOverCol = updatedDragCols.filter(function (item) {
|
63
|
+
return item.id === over.id;
|
64
|
+
});
|
65
|
+
if (destOverCol !== null && destOverCol !== void 0 && destOverCol.length && (_destOverCol$ = destOverCol[0]) !== null && _destOverCol$ !== void 0 && _destOverCol$.disabled) {
|
66
|
+
return;
|
67
|
+
}
|
47
68
|
var fromVisibleIndex = columns.findIndex(function (col) {
|
48
69
|
return matchedColsById(col, active);
|
49
70
|
});
|
50
71
|
var toVisibleIndex = columns.findIndex(function (col) {
|
51
72
|
return matchedColsById(col, over);
|
52
73
|
});
|
53
|
-
var colTitle = getColTitle(
|
54
|
-
setAriaRegionText("".concat(colTitle, " dropped. New position ").concat(toVisibleIndex + 1, " of ").concat(
|
74
|
+
var colTitle = getColTitle(updatedDragCols[fromVisibleIndex]);
|
75
|
+
setAriaRegionText("".concat(colTitle, " dropped. New position ").concat(toVisibleIndex + 1, " of ").concat(updatedDragCols.length, "."));
|
55
76
|
var fromIndex = columns.findIndex(function (col) {
|
56
77
|
return matchedColsById(col, active);
|
57
78
|
});
|
@@ -62,23 +83,23 @@ export var DraggableItemsList = function DraggableItemsList(_ref) {
|
|
62
83
|
};
|
63
84
|
var handleDragStart = function handleDragStart(event) {
|
64
85
|
var active = event.active;
|
65
|
-
var fromIndex =
|
86
|
+
var fromIndex = updatedDragCols.findIndex(function (col) {
|
66
87
|
return matchedColsById(col, active);
|
67
88
|
});
|
68
|
-
var colTitle = getColTitle(
|
69
|
-
setAriaRegionText("".concat(colTitle, " grabbed. Current position ").concat(fromIndex + 1, " of ").concat(
|
89
|
+
var colTitle = getColTitle(updatedDragCols[fromIndex]);
|
90
|
+
setAriaRegionText("".concat(colTitle, " grabbed. Current position ").concat(fromIndex + 1, " of ").concat(updatedDragCols.length, "."));
|
70
91
|
};
|
71
92
|
var handleDragUpdate = function handleDragUpdate(event) {
|
72
93
|
var active = event.active,
|
73
94
|
over = event.over;
|
74
|
-
var fromIndex =
|
95
|
+
var fromIndex = updatedDragCols.findIndex(function (col) {
|
75
96
|
return matchedColsById(col, active);
|
76
97
|
});
|
77
|
-
var toIndex =
|
98
|
+
var toIndex = updatedDragCols.findIndex(function (col) {
|
78
99
|
return matchedColsById(col, over);
|
79
100
|
});
|
80
|
-
var colTitle = getColTitle(
|
81
|
-
setAriaRegionText("".concat(colTitle, " grabbed. Original position ").concat(fromIndex + 1, ", new position ").concat(toIndex + 1, " of ").concat(
|
101
|
+
var colTitle = getColTitle(updatedDragCols[fromIndex]);
|
102
|
+
setAriaRegionText("".concat(colTitle, " grabbed. Original position ").concat(fromIndex + 1, ", new position ").concat(toIndex + 1, " of ").concat(updatedDragCols.length, "."));
|
82
103
|
};
|
83
104
|
var pointerSensor = useSensor(PointerSensor, {
|
84
105
|
// Require the mouse to move by 10 pixels before activating
|
@@ -137,7 +158,7 @@ export var DraggableItemsList = function DraggableItemsList(_ref) {
|
|
137
158
|
key: colDef.id
|
138
159
|
});
|
139
160
|
})), /*#__PURE__*/React.createElement(SortableContext, {
|
140
|
-
items:
|
161
|
+
items: updatedDragCols,
|
141
162
|
strategy: verticalListSortingStrategy
|
142
163
|
}, visibleCols.map(function (colDef) {
|
143
164
|
var colHeaderTitle = getColTitle(colDef);
|
@@ -10,21 +10,21 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
10
10
|
|
11
11
|
/* eslint-disable react/jsx-key */
|
12
12
|
|
13
|
-
import
|
14
|
-
import PropTypes from 'prop-types';
|
15
|
-
import { Accordion, AccordionItem, Button, Search, Layer } from '@carbon/react';
|
16
|
-
import { rem } from '@carbon/layout';
|
17
|
-
import { pkg } from '../../../../../settings';
|
13
|
+
import { Accordion, AccordionItem, Button, Layer, Search } from '@carbon/react';
|
18
14
|
import { BATCH, CLEAR_FILTERS, INSTANT, PANEL } from './constants';
|
19
|
-
import
|
20
|
-
import {
|
21
|
-
import {
|
22
|
-
import { Close } from '@carbon/react/icons';
|
15
|
+
import React, { useContext, useEffect, useMemo, useRef, useState } from 'react';
|
16
|
+
import { actionSetVariants, innerContainerVariants, panelVariants } from './motion/variants';
|
17
|
+
import { useFilters, useShouldDisableButtons, useSubscribeToEventEmitter } from './hooks';
|
23
18
|
import { ActionSet } from '../../../../ActionSet';
|
19
|
+
import { Close } from '@carbon/react/icons';
|
24
20
|
import { FilterContext } from '.';
|
25
|
-
import
|
21
|
+
import PropTypes from 'prop-types';
|
22
|
+
import cx from 'classnames';
|
23
|
+
import { motion } from 'framer-motion';
|
24
|
+
import { pkg } from '../../../../../settings';
|
25
|
+
import { rem } from '@carbon/layout';
|
26
26
|
var blockClass = "".concat(pkg.prefix, "--datagrid");
|
27
|
-
var componentClass = "".concat(blockClass, "-filter-panel");
|
27
|
+
export var componentClass = "".concat(blockClass, "-filter-panel");
|
28
28
|
var MotionActionSet = motion(ActionSet);
|
29
29
|
var FilterPanel = function FilterPanel(_ref) {
|
30
30
|
var _cx;
|
@@ -63,13 +63,19 @@ var FilterPanel = function FilterPanel(_ref) {
|
|
63
63
|
_useState2 = _slicedToArray(_useState, 2),
|
64
64
|
showDividerLine = _useState2[0],
|
65
65
|
setShowDividerLine = _useState2[1];
|
66
|
+
|
67
|
+
/** Context */
|
68
|
+
var _useContext = useContext(FilterContext),
|
69
|
+
panelOpen = _useContext.panelOpen,
|
70
|
+
setPanelOpen = _useContext.setPanelOpen;
|
66
71
|
var _useFilters = useFilters({
|
67
72
|
updateMethod: updateMethod,
|
68
73
|
filters: filterSections,
|
69
74
|
setAllFilters: setAllFilters,
|
70
75
|
variation: PANEL,
|
71
76
|
reactTableFiltersState: reactTableFiltersState,
|
72
|
-
onCancel: onCancel
|
77
|
+
onCancel: onCancel,
|
78
|
+
panelOpen: panelOpen
|
73
79
|
}),
|
74
80
|
filtersState = _useFilters.filtersState,
|
75
81
|
prevFiltersObjectArrayRef = _useFilters.prevFiltersObjectArrayRef,
|
@@ -101,11 +107,6 @@ var FilterPanel = function FilterPanel(_ref) {
|
|
101
107
|
return updateMethod === BATCH;
|
102
108
|
}, [updateMethod]);
|
103
109
|
|
104
|
-
/** Context */
|
105
|
-
var _useContext = useContext(FilterContext),
|
106
|
-
panelOpen = _useContext.panelOpen,
|
107
|
-
setPanelOpen = _useContext.setPanelOpen;
|
108
|
-
|
109
110
|
/** Methods */
|
110
111
|
var closePanel = function closePanel() {
|
111
112
|
cancel();
|
@@ -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(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
5
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
2
6
|
/**
|
3
|
-
* Copyright IBM Corp. 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
|
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 (
|
33
|
-
var id =
|
34
|
-
type =
|
35
|
-
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:
|
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(
|
63
|
-
var children =
|
64
|
-
filters =
|
65
|
-
|
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
|
};
|
@@ -0,0 +1,68 @@
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
3
|
+
import { Button, Checkbox, FormGroup } from '@carbon/react';
|
4
|
+
import React, { useState } from 'react';
|
5
|
+
import PropTypes from 'prop-types';
|
6
|
+
import { componentClass } from './FilterPanel';
|
7
|
+
import { handleCheckboxChange } from './hooks/useFilters';
|
8
|
+
var OverflowCheckboxes = function OverflowCheckboxes(_ref) {
|
9
|
+
var components = _ref.components,
|
10
|
+
filtersState = _ref.filtersState,
|
11
|
+
column = _ref.column,
|
12
|
+
setFiltersState = _ref.setFiltersState,
|
13
|
+
type = _ref.type,
|
14
|
+
applyFilters = _ref.applyFilters,
|
15
|
+
_ref$viewAllLabel = _ref.viewAllLabel,
|
16
|
+
viewAllLabel = _ref$viewAllLabel === void 0 ? 'View all' : _ref$viewAllLabel,
|
17
|
+
_ref$viewLessLabel = _ref.viewLessLabel,
|
18
|
+
viewLessLabel = _ref$viewLessLabel === void 0 ? 'View less' : _ref$viewLessLabel;
|
19
|
+
var _useState = useState(false),
|
20
|
+
_useState2 = _slicedToArray(_useState, 2),
|
21
|
+
showAllItems = _useState2[0],
|
22
|
+
setShowAllItems = _useState2[1];
|
23
|
+
var firstFiveItems = filtersState[column].value.slice(0, 5);
|
24
|
+
var restOfTheItems = filtersState[column].value.slice(5, filtersState[column].value.length - 1);
|
25
|
+
var renderCheckbox = function renderCheckbox(option) {
|
26
|
+
return /*#__PURE__*/React.createElement(Checkbox, _extends({
|
27
|
+
key: option.labelText
|
28
|
+
}, option, {
|
29
|
+
onChange: function onChange(_, _ref2) {
|
30
|
+
var checked = _ref2.checked;
|
31
|
+
return handleCheckboxChange({
|
32
|
+
checked: checked,
|
33
|
+
filtersState: filtersState,
|
34
|
+
column: column,
|
35
|
+
option: option,
|
36
|
+
setFiltersState: setFiltersState,
|
37
|
+
applyFilters: applyFilters,
|
38
|
+
type: type
|
39
|
+
});
|
40
|
+
},
|
41
|
+
checked: option.selected,
|
42
|
+
disabled: option.disabled
|
43
|
+
}));
|
44
|
+
};
|
45
|
+
var renderViewAllButtonText = function renderViewAllButtonText() {
|
46
|
+
/** This should render the text "View all ([amount of checkboxes])" or "View less" */
|
47
|
+
return showAllItems ? viewLessLabel : "".concat(viewAllLabel, " (").concat(filtersState[column].value.length, ")");
|
48
|
+
};
|
49
|
+
return /*#__PURE__*/React.createElement(FormGroup, components.FormGroup, firstFiveItems.map(renderCheckbox), showAllItems && restOfTheItems.map(renderCheckbox), /*#__PURE__*/React.createElement(Button, {
|
50
|
+
className: "".concat(componentClass, "__view-all-button"),
|
51
|
+
kind: "ghost",
|
52
|
+
size: "sm",
|
53
|
+
onClick: function onClick() {
|
54
|
+
return setShowAllItems(!showAllItems);
|
55
|
+
}
|
56
|
+
}, renderViewAllButtonText()));
|
57
|
+
};
|
58
|
+
OverflowCheckboxes.propTypes = {
|
59
|
+
applyFilters: PropTypes.func,
|
60
|
+
column: PropTypes.string,
|
61
|
+
components: PropTypes.object,
|
62
|
+
filtersState: PropTypes.object,
|
63
|
+
setFiltersState: PropTypes.func,
|
64
|
+
type: PropTypes.string,
|
65
|
+
viewAllLabel: PropTypes.string,
|
66
|
+
viewLessLabel: PropTypes.string
|
67
|
+
};
|
68
|
+
export default OverflowCheckboxes;
|