@carbon/ibm-products 1.42.1 → 1.43.0
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 +154 -24
- package/css/index-full-carbon.css.map +1 -1
- package/css/index-full-carbon.min.css +2 -2
- package/css/index-full-carbon.min.css.map +1 -1
- package/css/index-without-carbon.css +154 -24
- package/css/index-without-carbon.css.map +1 -1
- package/css/index-without-carbon.min.css +2 -2
- package/css/index-without-carbon.min.css.map +1 -1
- package/css/index.css +154 -24
- package/css/index.css.map +1 -1
- package/css/index.min.css +2 -2
- package/css/index.min.css.map +1 -1
- package/es/components/AddSelect/AddSelect.js +1 -1
- package/es/components/AddSelect/AddSelectBody.js +1 -1
- package/es/components/AddSelect/AddSelectColumn.js +1 -1
- package/es/components/Datagrid/Datagrid/Datagrid.js +3 -3
- package/es/components/Datagrid/Datagrid/DatagridContent.js +43 -15
- package/es/components/Datagrid/Datagrid/DatagridToolbar.js +2 -18
- package/es/components/Datagrid/Datagrid/DraggableElement.js +1 -1
- package/es/components/Datagrid/Datagrid/addons/Filtering/FilterFlyout.js +65 -34
- package/es/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +436 -0
- package/es/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +8 -2
- package/es/components/Datagrid/Datagrid/addons/Filtering/constants.js +9 -1
- package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/index.js +2 -0
- package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useInitialStateFromFilters.js +3 -1
- package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useSubscribeToEventEmitter.js +23 -0
- package/es/components/Datagrid/Datagrid/addons/Filtering/index.js +3 -1
- package/es/components/Datagrid/Datagrid/addons/Filtering/motion/variants.js +55 -0
- package/es/components/Datagrid/Datagrid/addons/Filtering/utils.js +49 -17
- package/es/components/Datagrid/Datagrid.stories/index.js +0 -1
- package/es/components/Datagrid/useFiltering.js +10 -3
- package/es/components/Datagrid/utils/DatagridActions.js +59 -6
- package/lib/components/AddSelect/AddSelect.js +1 -1
- package/lib/components/AddSelect/AddSelectBody.js +1 -1
- package/lib/components/AddSelect/AddSelectColumn.js +1 -1
- package/lib/components/Datagrid/Datagrid/Datagrid.js +3 -3
- package/lib/components/Datagrid/Datagrid/DatagridContent.js +43 -15
- package/lib/components/Datagrid/Datagrid/DatagridToolbar.js +2 -17
- package/lib/components/Datagrid/Datagrid/DraggableElement.js +1 -1
- package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterFlyout.js +64 -31
- package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +445 -0
- package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +7 -1
- package/lib/components/Datagrid/Datagrid/addons/Filtering/constants.js +15 -3
- package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/index.js +20 -0
- package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useInitialStateFromFilters.js +3 -1
- package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useSubscribeToEventEmitter.js +30 -0
- package/lib/components/Datagrid/Datagrid/addons/Filtering/index.js +21 -1
- package/lib/components/Datagrid/Datagrid/addons/Filtering/motion/variants.js +64 -0
- package/lib/components/Datagrid/Datagrid/addons/Filtering/utils.js +48 -17
- package/lib/components/Datagrid/Datagrid.stories/index.js +0 -7
- package/lib/components/Datagrid/useFiltering.js +10 -3
- package/lib/components/Datagrid/utils/DatagridActions.js +57 -4
- package/package.json +2 -2
- package/scss/components/Datagrid/styles/_datagrid.scss +18 -18
- package/scss/components/Datagrid/styles/_draggableElement.scss +12 -4
- package/scss/components/Datagrid/styles/_index.scss +1 -0
- package/scss/components/Datagrid/styles/_useInlineEdit.scss +7 -3
- package/scss/components/Datagrid/styles/addons/_CustomizeColumnsTearsheet.scss +5 -1
- package/scss/components/Datagrid/styles/addons/_FilterPanel.scss +123 -0
- package/scss/components/FilterSummary/_filter-summary.scss +1 -0
- package/es/components/Datagrid/Datagrid.stories/LeftPanelStory.js +0 -6
- package/lib/components/Datagrid/Datagrid.stories/LeftPanelStory.js +0 -13
@@ -0,0 +1,445 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
6
|
+
value: true
|
7
|
+
});
|
8
|
+
exports.default = void 0;
|
9
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
11
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
12
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
13
|
+
var _react = _interopRequireWildcard(require("react"));
|
14
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
15
|
+
var _carbonComponentsReact = require("carbon-components-react");
|
16
|
+
var _layout = require("@carbon/layout");
|
17
|
+
var _settings = require("../../../../../settings");
|
18
|
+
var _constants = require("./constants");
|
19
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
20
|
+
var _framerMotion = require("framer-motion");
|
21
|
+
var _variants = require("./motion/variants");
|
22
|
+
var _iconsReact = require("@carbon/icons-react");
|
23
|
+
var _ActionSet = require("../../../../ActionSet");
|
24
|
+
var _ = require(".");
|
25
|
+
var _hooks = require("./hooks");
|
26
|
+
var _utils = require("./utils");
|
27
|
+
var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
|
28
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
29
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
30
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
31
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
32
|
+
var blockClass = "".concat(_settings.pkg.prefix, "--datagrid");
|
33
|
+
var componentClass = "".concat(blockClass, "-filter-panel");
|
34
|
+
var MotionActionSet = (0, _framerMotion.motion)(_ActionSet.ActionSet);
|
35
|
+
var FilterPanel = function FilterPanel(_ref) {
|
36
|
+
var _cx;
|
37
|
+
var title = _ref.title,
|
38
|
+
_ref$closeIconDescrip = _ref.closeIconDescription,
|
39
|
+
closeIconDescription = _ref$closeIconDescrip === void 0 ? 'Close filter panel' : _ref$closeIconDescrip,
|
40
|
+
_ref$updateMethod = _ref.updateMethod,
|
41
|
+
updateMethod = _ref$updateMethod === void 0 ? _constants.BATCH : _ref$updateMethod,
|
42
|
+
filterSections = _ref.filterSections,
|
43
|
+
setAllFilters = _ref.setAllFilters,
|
44
|
+
_ref$onApply = _ref.onApply,
|
45
|
+
onApply = _ref$onApply === void 0 ? function () {} : _ref$onApply,
|
46
|
+
_ref$onCancel = _ref.onCancel,
|
47
|
+
onCancel = _ref$onCancel === void 0 ? function () {} : _ref$onCancel,
|
48
|
+
_ref$onPanelOpen = _ref.onPanelOpen,
|
49
|
+
onPanelOpen = _ref$onPanelOpen === void 0 ? function () {} : _ref$onPanelOpen,
|
50
|
+
_ref$onPanelClose = _ref.onPanelClose,
|
51
|
+
onPanelClose = _ref$onPanelClose === void 0 ? function () {} : _ref$onPanelClose,
|
52
|
+
_ref$showFilterSearch = _ref.showFilterSearch,
|
53
|
+
showFilterSearch = _ref$showFilterSearch === void 0 ? false : _ref$showFilterSearch,
|
54
|
+
_ref$filterPanelMinHe = _ref.filterPanelMinHeight,
|
55
|
+
filterPanelMinHeight = _ref$filterPanelMinHe === void 0 ? 600 : _ref$filterPanelMinHe;
|
56
|
+
/** State */
|
57
|
+
var _useInitialStateFromF = (0, _hooks.useInitialStateFromFilters)(filterSections, _constants.PANEL),
|
58
|
+
_useInitialStateFromF2 = (0, _slicedToArray2.default)(_useInitialStateFromF, 2),
|
59
|
+
filtersState = _useInitialStateFromF2[0],
|
60
|
+
setFiltersState = _useInitialStateFromF2[1];
|
61
|
+
var _useState = (0, _react.useState)([]),
|
62
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
63
|
+
filtersObjectArray = _useState2[0],
|
64
|
+
setFiltersObjectArray = _useState2[1];
|
65
|
+
var _useState3 = (0, _react.useState)(true),
|
66
|
+
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
67
|
+
shouldDisableButtons = _useState4[0],
|
68
|
+
setShouldDisableButtons = _useState4[1];
|
69
|
+
var _useState5 = (0, _react.useState)(false),
|
70
|
+
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
|
71
|
+
showDividerLine = _useState6[0],
|
72
|
+
setShowDividerLine = _useState6[1];
|
73
|
+
|
74
|
+
/** Refs */
|
75
|
+
var filterPanelRef = (0, _react.useRef)();
|
76
|
+
var filterHeadingRef = (0, _react.useRef)();
|
77
|
+
var filterSearchRef = (0, _react.useRef)();
|
78
|
+
var actionSetRef = (0, _react.useRef)();
|
79
|
+
// When using batch actions we have to store the filters to then apply them later
|
80
|
+
var prevFiltersRef = (0, _react.useRef)(JSON.stringify(filtersState));
|
81
|
+
var prevFiltersObjectArrayRef = (0, _react.useRef)(JSON.stringify(filtersObjectArray));
|
82
|
+
|
83
|
+
/** Memos */
|
84
|
+
var showActionSet = (0, _react.useMemo)(function () {
|
85
|
+
return updateMethod === _constants.BATCH;
|
86
|
+
}, [updateMethod]);
|
87
|
+
|
88
|
+
/** Context */
|
89
|
+
var _useContext = (0, _react.useContext)(_.FilterContext),
|
90
|
+
leftPanelOpen = _useContext.leftPanelOpen,
|
91
|
+
setLeftPanelOpen = _useContext.setLeftPanelOpen;
|
92
|
+
|
93
|
+
/** Methods */
|
94
|
+
var closePanel = function closePanel() {
|
95
|
+
return setLeftPanelOpen(false);
|
96
|
+
};
|
97
|
+
|
98
|
+
// If the user decides to cancel or click outside the flyout, it reverts back to the filters that were
|
99
|
+
// there when they opened the flyout
|
100
|
+
var revertToPreviousFilters = function revertToPreviousFilters() {
|
101
|
+
setFiltersState(JSON.parse(prevFiltersRef.current));
|
102
|
+
setFiltersObjectArray(JSON.parse(prevFiltersObjectArrayRef.current));
|
103
|
+
};
|
104
|
+
var cancel = function cancel() {
|
105
|
+
// Reverting to previous filters only applies when using batch actions
|
106
|
+
if (updateMethod === _constants.BATCH) {
|
107
|
+
revertToPreviousFilters();
|
108
|
+
onCancel();
|
109
|
+
}
|
110
|
+
};
|
111
|
+
var reset = function reset() {
|
112
|
+
// Get the initial values for the filters
|
113
|
+
var initialFiltersState = (0, _utils.getInitialStateFromFilters)(filterSections, _constants.PANEL);
|
114
|
+
var initialFiltersObjectArray = [];
|
115
|
+
|
116
|
+
// Set the state to the initial values
|
117
|
+
setFiltersState(initialFiltersState);
|
118
|
+
setFiltersObjectArray(initialFiltersObjectArray);
|
119
|
+
setAllFilters([]);
|
120
|
+
|
121
|
+
// Update their respective refs so everything is in sync
|
122
|
+
prevFiltersRef.current = JSON.stringify(initialFiltersState);
|
123
|
+
prevFiltersObjectArrayRef.current = JSON.stringify(initialFiltersObjectArray);
|
124
|
+
};
|
125
|
+
var apply = function apply() {
|
126
|
+
setAllFilters(filtersObjectArray);
|
127
|
+
onApply();
|
128
|
+
setShouldDisableButtons(true);
|
129
|
+
|
130
|
+
// updates the ref so next time the flyout opens we have records of the previous filters
|
131
|
+
prevFiltersRef.current = JSON.stringify(filtersState);
|
132
|
+
prevFiltersObjectArrayRef.current = JSON.stringify(filtersObjectArray);
|
133
|
+
};
|
134
|
+
var applyFilters = function applyFilters(_ref2) {
|
135
|
+
var column = _ref2.column,
|
136
|
+
value = _ref2.value,
|
137
|
+
type = _ref2.type;
|
138
|
+
// If no end date is selected return because we need the end date to do computations
|
139
|
+
if (type === _constants.DATE && value.length > 0 && !value[1]) {
|
140
|
+
return;
|
141
|
+
}
|
142
|
+
var filtersObjectArrayCopy = (0, _toConsumableArray2.default)(filtersObjectArray);
|
143
|
+
// // check if the filter already exists in the array
|
144
|
+
var filter = filtersObjectArrayCopy.find(function (item) {
|
145
|
+
return item.id === column;
|
146
|
+
});
|
147
|
+
|
148
|
+
// // if filter exists in array then update the filter's new value
|
149
|
+
if (filter) {
|
150
|
+
filter.value = value;
|
151
|
+
} else {
|
152
|
+
filtersObjectArrayCopy.push({
|
153
|
+
id: column,
|
154
|
+
value: value,
|
155
|
+
type: type
|
156
|
+
});
|
157
|
+
}
|
158
|
+
|
159
|
+
// ATTENTION: this is where you would reset or remove individual filters from the filters array
|
160
|
+
if (type === _constants.CHECKBOX) {
|
161
|
+
/**
|
162
|
+
When all checkboxes of a group are all unselected the value still exists in the filtersObjectArray
|
163
|
+
This checks if all the checkboxes are selected = false and removes it from the array
|
164
|
+
*/
|
165
|
+
var index = filtersObjectArrayCopy.findIndex(function (filter) {
|
166
|
+
return filter.id === column;
|
167
|
+
});
|
168
|
+
|
169
|
+
// If all the selected state is false remove from array
|
170
|
+
var shouldRemoveFromArray = filtersObjectArrayCopy[index].value.every(function (val) {
|
171
|
+
return val.selected === false;
|
172
|
+
});
|
173
|
+
if (shouldRemoveFromArray) {
|
174
|
+
filtersObjectArrayCopy.splice(index, 1);
|
175
|
+
}
|
176
|
+
} else if (type === _constants.DATE) {
|
177
|
+
if (value.length === 0) {
|
178
|
+
/**
|
179
|
+
Checks to see if the date value is an empty array, if it is that means the user wants
|
180
|
+
to reset the date filter
|
181
|
+
*/
|
182
|
+
var _index = filtersObjectArrayCopy.findIndex(function (filter) {
|
183
|
+
return filter.id === column;
|
184
|
+
});
|
185
|
+
|
186
|
+
// Remove it from the filters array since there is nothing to filter
|
187
|
+
filtersObjectArrayCopy.splice(_index, 1);
|
188
|
+
}
|
189
|
+
}
|
190
|
+
setFiltersObjectArray(filtersObjectArrayCopy);
|
191
|
+
|
192
|
+
// // Automatically apply the filters if the updateMethod is instant
|
193
|
+
if (updateMethod === _constants.INSTANT) {
|
194
|
+
setAllFilters(filtersObjectArrayCopy);
|
195
|
+
}
|
196
|
+
};
|
197
|
+
|
198
|
+
/** Render the individual filter component */
|
199
|
+
var renderFilter = function renderFilter(_ref3) {
|
200
|
+
var type = _ref3.type,
|
201
|
+
column = _ref3.column,
|
202
|
+
components = _ref3.props;
|
203
|
+
switch (type) {
|
204
|
+
case _constants.DATE:
|
205
|
+
return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.DatePicker, (0, _extends2.default)({}, components.DatePicker, {
|
206
|
+
onChange: function onChange(value) {
|
207
|
+
var _components$DatePicke, _components$DatePicke2;
|
208
|
+
setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column, {
|
209
|
+
value: value,
|
210
|
+
type: type
|
211
|
+
})));
|
212
|
+
applyFilters({
|
213
|
+
column: column,
|
214
|
+
value: value,
|
215
|
+
type: type
|
216
|
+
});
|
217
|
+
(_components$DatePicke = (_components$DatePicke2 = components.DatePicker).onChange) === null || _components$DatePicke === void 0 ? void 0 : _components$DatePicke.call(_components$DatePicke2, value);
|
218
|
+
},
|
219
|
+
value: filtersState[column].value,
|
220
|
+
datePickerType: "range",
|
221
|
+
light: true
|
222
|
+
}), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.DatePickerInput, (0, _extends2.default)({
|
223
|
+
placeholder: "mm/dd/yyyy",
|
224
|
+
labelText: "Start date"
|
225
|
+
}, components.DatePickerInput.start)), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.DatePickerInput, (0, _extends2.default)({
|
226
|
+
placeholder: "mm/dd/yyyy",
|
227
|
+
labelText: "End date"
|
228
|
+
}, components.DatePickerInput.end)));
|
229
|
+
case _constants.NUMBER:
|
230
|
+
return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.NumberInput, (0, _extends2.default)({
|
231
|
+
step: 1,
|
232
|
+
allowEmpty: true,
|
233
|
+
hideSteppers: true
|
234
|
+
}, components.NumberInput, {
|
235
|
+
onChange: function onChange(event) {
|
236
|
+
var _components$NumberInp, _components$NumberInp2;
|
237
|
+
setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column, {
|
238
|
+
value: event.target.value,
|
239
|
+
type: type
|
240
|
+
})));
|
241
|
+
applyFilters({
|
242
|
+
column: column,
|
243
|
+
value: event.target.value,
|
244
|
+
type: type
|
245
|
+
});
|
246
|
+
(_components$NumberInp = (_components$NumberInp2 = components.NumberInput).onChange) === null || _components$NumberInp === void 0 ? void 0 : _components$NumberInp.call(_components$NumberInp2, event);
|
247
|
+
},
|
248
|
+
value: filtersState[column].value,
|
249
|
+
light: true
|
250
|
+
}));
|
251
|
+
case _constants.CHECKBOX:
|
252
|
+
return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.FormGroup, components.FormGroup, filtersState[column].value.map(function (option) {
|
253
|
+
return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Checkbox, (0, _extends2.default)({
|
254
|
+
key: option.labelText
|
255
|
+
}, option, {
|
256
|
+
onChange: function onChange(isSelected) {
|
257
|
+
var _option$onChange;
|
258
|
+
var checkboxCopy = filtersState[column].value;
|
259
|
+
var foundCheckbox = checkboxCopy.find(function (checkbox) {
|
260
|
+
return checkbox.value === option.value;
|
261
|
+
});
|
262
|
+
foundCheckbox.selected = isSelected;
|
263
|
+
setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column, {
|
264
|
+
value: checkboxCopy,
|
265
|
+
type: type
|
266
|
+
})));
|
267
|
+
applyFilters({
|
268
|
+
column: column,
|
269
|
+
value: (0, _toConsumableArray2.default)(filtersState[column].value),
|
270
|
+
type: type
|
271
|
+
});
|
272
|
+
(_option$onChange = option.onChange) === null || _option$onChange === void 0 ? void 0 : _option$onChange.call(option, isSelected);
|
273
|
+
},
|
274
|
+
checked: option.selected
|
275
|
+
}));
|
276
|
+
}));
|
277
|
+
case _constants.RADIO:
|
278
|
+
return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.FormGroup, components.FormGroup, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.RadioButtonGroup, (0, _extends2.default)({}, components.RadioButtonGroup, {
|
279
|
+
valueSelected: filtersState[column].value,
|
280
|
+
onChange: function onChange(selected) {
|
281
|
+
var _components$RadioButt, _components$RadioButt2;
|
282
|
+
setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column, {
|
283
|
+
value: selected,
|
284
|
+
type: type
|
285
|
+
})));
|
286
|
+
applyFilters({
|
287
|
+
column: column,
|
288
|
+
value: selected,
|
289
|
+
type: type
|
290
|
+
});
|
291
|
+
(_components$RadioButt = (_components$RadioButt2 = components.RadioButtonGroup).onChange) === null || _components$RadioButt === void 0 ? void 0 : _components$RadioButt.call(_components$RadioButt2, selected);
|
292
|
+
}
|
293
|
+
}), components.RadioButton.map(function (radio) {
|
294
|
+
var _ref4, _radio$id;
|
295
|
+
return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.RadioButton, (0, _extends2.default)({
|
296
|
+
key: (_ref4 = (_radio$id = radio.id) !== null && _radio$id !== void 0 ? _radio$id : radio.labelText) !== null && _ref4 !== void 0 ? _ref4 : radio.value
|
297
|
+
}, radio));
|
298
|
+
})));
|
299
|
+
case _constants.DROPDOWN:
|
300
|
+
return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Dropdown, (0, _extends2.default)({}, components.Dropdown, {
|
301
|
+
selectedItem: filtersState[column].value,
|
302
|
+
onChange: function onChange(_ref5) {
|
303
|
+
var _components$Dropdown$, _components$Dropdown;
|
304
|
+
var selectedItem = _ref5.selectedItem;
|
305
|
+
setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column, {
|
306
|
+
value: selectedItem,
|
307
|
+
type: type
|
308
|
+
})));
|
309
|
+
applyFilters({
|
310
|
+
column: column,
|
311
|
+
value: selectedItem,
|
312
|
+
type: type
|
313
|
+
});
|
314
|
+
(_components$Dropdown$ = (_components$Dropdown = components.Dropdown).onChange) === null || _components$Dropdown$ === void 0 ? void 0 : _components$Dropdown$.call(_components$Dropdown, selectedItem);
|
315
|
+
},
|
316
|
+
light: true
|
317
|
+
}));
|
318
|
+
}
|
319
|
+
};
|
320
|
+
var renderActionSet = function renderActionSet() {
|
321
|
+
return showActionSet && /*#__PURE__*/_react.default.createElement(MotionActionSet, {
|
322
|
+
actions: [{
|
323
|
+
key: 1,
|
324
|
+
kind: 'primary',
|
325
|
+
label: 'Apply',
|
326
|
+
onClick: apply,
|
327
|
+
disabled: shouldDisableButtons
|
328
|
+
}, {
|
329
|
+
key: 2,
|
330
|
+
kind: 'secondary',
|
331
|
+
label: 'Cancel',
|
332
|
+
onClick: cancel,
|
333
|
+
disabled: shouldDisableButtons
|
334
|
+
}],
|
335
|
+
className: "".concat(componentClass, "__action-set"),
|
336
|
+
ref: actionSetRef,
|
337
|
+
variants: _variants.actionSetVariants
|
338
|
+
});
|
339
|
+
};
|
340
|
+
var onInnerContainerScroll = function onInnerContainerScroll(event) {
|
341
|
+
if (event.target.scrollTop > 0) {
|
342
|
+
setShowDividerLine(true);
|
343
|
+
} else {
|
344
|
+
setShowDividerLine(false);
|
345
|
+
}
|
346
|
+
};
|
347
|
+
|
348
|
+
/** Effects */
|
349
|
+
(0, _react.useEffect)(function liftOpenStateToParent() {
|
350
|
+
if (leftPanelOpen) {
|
351
|
+
onPanelOpen(leftPanelOpen);
|
352
|
+
} else {
|
353
|
+
onPanelClose(leftPanelOpen);
|
354
|
+
}
|
355
|
+
}, [leftPanelOpen, onPanelClose, onPanelOpen]);
|
356
|
+
(0, _react.useEffect)(function setPanelMinimumHeight() {
|
357
|
+
var _filterPanelRef$curre;
|
358
|
+
(_filterPanelRef$curre = filterPanelRef.current) === null || _filterPanelRef$curre === void 0 ? void 0 : _filterPanelRef$curre.style.setProperty('--filter-panel-min-height', (0, _layout.rem)(filterPanelMinHeight));
|
359
|
+
}, [filterPanelMinHeight]);
|
360
|
+
(0, _react.useEffect)(function updateDisabledButtonsState() {
|
361
|
+
setShouldDisableButtons((0, _isEqual.default)(filtersState, JSON.parse(prevFiltersRef.current)));
|
362
|
+
}, [filtersState]);
|
363
|
+
(0, _hooks.useSubscribeToEventEmitter)(_constants.CLEAR_FILTERS, reset);
|
364
|
+
var getScrollableContainerHeight = function getScrollableContainerHeight() {
|
365
|
+
var _filterHeadingRef$cur, _filterSearchRef$curr, _actionSetRef$current;
|
366
|
+
var filterHeadingHeight = (_filterHeadingRef$cur = filterHeadingRef.current) === null || _filterHeadingRef$cur === void 0 ? void 0 : _filterHeadingRef$cur.getBoundingClientRect().height;
|
367
|
+
var filterSearchHeight = (_filterSearchRef$curr = filterSearchRef.current) === null || _filterSearchRef$curr === void 0 ? void 0 : _filterSearchRef$curr.getBoundingClientRect().height;
|
368
|
+
var actionSetHeight = (_actionSetRef$current = actionSetRef.current) === null || _actionSetRef$current === void 0 ? void 0 : _actionSetRef$current.getBoundingClientRect().height;
|
369
|
+
var height = "calc(100vh - ".concat(filterHeadingHeight, "px - ").concat(showFilterSearch ? filterSearchHeight : 0, "px - ").concat(updateMethod === _constants.BATCH ? actionSetHeight : 0, "px)");
|
370
|
+
return height;
|
371
|
+
};
|
372
|
+
return /*#__PURE__*/_react.default.createElement(_framerMotion.motion.div, {
|
373
|
+
ref: filterPanelRef,
|
374
|
+
className: (0, _classnames.default)(componentClass, "".concat(componentClass, "__container"), (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(componentClass, "--open"), leftPanelOpen), (0, _defineProperty2.default)(_cx, "".concat(componentClass, "--batch"), showActionSet), (0, _defineProperty2.default)(_cx, "".concat(componentClass, "--instant"), !showActionSet), _cx)),
|
375
|
+
initial: false,
|
376
|
+
animate: leftPanelOpen ? 'visible' : 'hidden',
|
377
|
+
variants: _variants.panelVariants
|
378
|
+
}, /*#__PURE__*/_react.default.createElement(_framerMotion.motion.div, {
|
379
|
+
variants: _variants.innerContainerVariants
|
380
|
+
}, /*#__PURE__*/_react.default.createElement("header", {
|
381
|
+
ref: filterHeadingRef,
|
382
|
+
className: (0, _classnames.default)("".concat(componentClass, "__heading"), (0, _defineProperty2.default)({}, "".concat(componentClass, "__heading--with-divider"), showDividerLine))
|
383
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
384
|
+
className: "".concat(componentClass, "__title")
|
385
|
+
}, title), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
|
386
|
+
hasIconOnly: true,
|
387
|
+
renderIcon: _iconsReact.Close32,
|
388
|
+
iconDescription: closeIconDescription,
|
389
|
+
kind: "ghost",
|
390
|
+
tooltipPosition: "bottom",
|
391
|
+
tooltipAlignment: "end",
|
392
|
+
onClick: closePanel
|
393
|
+
}), showFilterSearch && /*#__PURE__*/_react.default.createElement("div", {
|
394
|
+
ref: filterSearchRef,
|
395
|
+
className: "".concat(componentClass, "__search")
|
396
|
+
}, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Search, {
|
397
|
+
labelText: "Filter search",
|
398
|
+
placeHolderText: "Find filters",
|
399
|
+
light: true,
|
400
|
+
size: "sm"
|
401
|
+
}))), /*#__PURE__*/_react.default.createElement("div", {
|
402
|
+
className: "".concat(componentClass, "__inner-container"),
|
403
|
+
style: {
|
404
|
+
height: getScrollableContainerHeight()
|
405
|
+
},
|
406
|
+
onScroll: onInnerContainerScroll
|
407
|
+
}, filterSections.map(function (_ref6) {
|
408
|
+
var _ref6$categoryTitle = _ref6.categoryTitle,
|
409
|
+
categoryTitle = _ref6$categoryTitle === void 0 ? null : _ref6$categoryTitle,
|
410
|
+
_ref6$filters = _ref6.filters,
|
411
|
+
filters = _ref6$filters === void 0 ? [] : _ref6$filters,
|
412
|
+
hasAccordion = _ref6.hasAccordion;
|
413
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
414
|
+
className: "".concat(componentClass, "__category")
|
415
|
+
}, categoryTitle && /*#__PURE__*/_react.default.createElement("div", {
|
416
|
+
className: "".concat(componentClass, "__category-title")
|
417
|
+
}, categoryTitle), hasAccordion ? /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Accordion, null, filters.map(function (_ref7) {
|
418
|
+
var filterLabel = _ref7.filterLabel,
|
419
|
+
filter = _ref7.filter;
|
420
|
+
return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.AccordionItem, {
|
421
|
+
title: filterLabel,
|
422
|
+
key: filterLabel
|
423
|
+
}, renderFilter(filter));
|
424
|
+
})) : filters.map(function (_ref8) {
|
425
|
+
var filter = _ref8.filter;
|
426
|
+
return renderFilter(filter);
|
427
|
+
}));
|
428
|
+
})), renderActionSet()));
|
429
|
+
};
|
430
|
+
FilterPanel.propTypes = {
|
431
|
+
closeIconDescription: _propTypes.default.string,
|
432
|
+
filterPanelMinHeight: _propTypes.default.number,
|
433
|
+
filterSections: _propTypes.default.array,
|
434
|
+
onApply: _propTypes.default.func,
|
435
|
+
onCancel: _propTypes.default.func,
|
436
|
+
onPanelClose: _propTypes.default.func,
|
437
|
+
onPanelOpen: _propTypes.default.func,
|
438
|
+
open: _propTypes.default.bool,
|
439
|
+
setAllFilters: _propTypes.default.func.isRequired,
|
440
|
+
showFilterSearch: _propTypes.default.bool,
|
441
|
+
title: _propTypes.default.string,
|
442
|
+
updateMethod: _propTypes.default.oneOf([_constants.BATCH, _constants.INSTANT])
|
443
|
+
};
|
444
|
+
var _default = FilterPanel;
|
445
|
+
exports.default = _default;
|
@@ -75,9 +75,15 @@ var FilterProvider = function FilterProvider(_ref2) {
|
|
75
75
|
var children = _ref2.children,
|
76
76
|
filters = _ref2.filters;
|
77
77
|
var filterTags = prepareFiltersForTags(filters);
|
78
|
+
var _useState = (0, _react.useState)(false),
|
79
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
80
|
+
leftPanelOpen = _useState2[0],
|
81
|
+
setLeftPanelOpen = _useState2[1];
|
78
82
|
var value = {
|
79
83
|
filterTags: filterTags,
|
80
|
-
EventEmitter: EventEmitter
|
84
|
+
EventEmitter: EventEmitter,
|
85
|
+
leftPanelOpen: leftPanelOpen,
|
86
|
+
setLeftPanelOpen: setLeftPanelOpen
|
81
87
|
};
|
82
88
|
return /*#__PURE__*/_react.default.createElement(FilterContext.Provider, {
|
83
89
|
value: value
|
@@ -3,7 +3,7 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports.RADIO = exports.NUMBER = exports.INSTANT = exports.DROPDOWN = exports.DATE = exports.CLEAR_FILTERS = exports.CHECKBOX = exports.BATCH = void 0;
|
6
|
+
exports.RADIO = exports.PANEL_WIDTH = exports.PANEL = exports.NUMBER = exports.INSTANT = exports.FLYOUT = exports.DROPDOWN = exports.DATE = exports.CLEAR_FILTERS = exports.CHECKBOX = exports.BATCH = exports.ACTION_SET_HEIGHT = void 0;
|
7
7
|
/**
|
8
8
|
* Copyright IBM Corp. 2022, 2022
|
9
9
|
*
|
@@ -15,8 +15,14 @@ var BATCH = 'batch';
|
|
15
15
|
exports.BATCH = BATCH;
|
16
16
|
var INSTANT = 'instant';
|
17
17
|
|
18
|
-
/** Constants for filter
|
18
|
+
/** Constants for filter variation */
|
19
19
|
exports.INSTANT = INSTANT;
|
20
|
+
var FLYOUT = 'flyout';
|
21
|
+
exports.FLYOUT = FLYOUT;
|
22
|
+
var PANEL = 'panel';
|
23
|
+
|
24
|
+
/** Constants for filter type */
|
25
|
+
exports.PANEL = PANEL;
|
20
26
|
var DATE = 'date';
|
21
27
|
exports.DATE = DATE;
|
22
28
|
var NUMBER = 'number';
|
@@ -30,4 +36,10 @@ var DROPDOWN = 'dropdown';
|
|
30
36
|
/** Constants for event emitters */
|
31
37
|
exports.DROPDOWN = DROPDOWN;
|
32
38
|
var CLEAR_FILTERS = 'clearFilters';
|
33
|
-
|
39
|
+
|
40
|
+
/** Constants for panel dimensions */
|
41
|
+
exports.CLEAR_FILTERS = CLEAR_FILTERS;
|
42
|
+
var PANEL_WIDTH = 320;
|
43
|
+
exports.PANEL_WIDTH = PANEL_WIDTH;
|
44
|
+
var ACTION_SET_HEIGHT = 64;
|
45
|
+
exports.ACTION_SET_HEIGHT = ACTION_SET_HEIGHT;
|
@@ -0,0 +1,20 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
5
|
+
value: true
|
6
|
+
});
|
7
|
+
Object.defineProperty(exports, "useInitialStateFromFilters", {
|
8
|
+
enumerable: true,
|
9
|
+
get: function get() {
|
10
|
+
return _useInitialStateFromFilters.default;
|
11
|
+
}
|
12
|
+
});
|
13
|
+
Object.defineProperty(exports, "useSubscribeToEventEmitter", {
|
14
|
+
enumerable: true,
|
15
|
+
get: function get() {
|
16
|
+
return _useSubscribeToEventEmitter.default;
|
17
|
+
}
|
18
|
+
});
|
19
|
+
var _useInitialStateFromFilters = _interopRequireDefault(require("./useInitialStateFromFilters"));
|
20
|
+
var _useSubscribeToEventEmitter = _interopRequireDefault(require("./useSubscribeToEventEmitter"));
|
package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useInitialStateFromFilters.js
CHANGED
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
7
7
|
exports.default = void 0;
|
8
8
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
9
9
|
var _react = require("react");
|
10
|
+
var _constants = require("../constants");
|
10
11
|
var _utils = require("../utils");
|
11
12
|
/*
|
12
13
|
* Licensed Materials - Property of IBM
|
@@ -17,7 +18,8 @@ var _utils = require("../utils");
|
|
17
18
|
*/
|
18
19
|
|
19
20
|
var useInitialStateFromFilters = function useInitialStateFromFilters(filters) {
|
20
|
-
var
|
21
|
+
var variation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _constants.FLYOUT;
|
22
|
+
var _useState = (0, _react.useState)((0, _utils.getInitialStateFromFilters)(filters, variation)),
|
21
23
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
22
24
|
state = _useState2[0],
|
23
25
|
setState = _useState2[1];
|
@@ -0,0 +1,30 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.default = void 0;
|
7
|
+
var _react = require("react");
|
8
|
+
var _FilterProvider = require("../FilterProvider");
|
9
|
+
/**
|
10
|
+
* Copyright IBM Corp. 2022, 2023
|
11
|
+
*
|
12
|
+
* This source code is licensed under the Apache-2.0 license found in the
|
13
|
+
* LICENSE file in the root directory of this source tree.
|
14
|
+
*/
|
15
|
+
|
16
|
+
/**
|
17
|
+
* Subscribes to the filter event emitter
|
18
|
+
* @param {string} type - the type of event to call
|
19
|
+
* @param {Function} callback - a callback to run when the event is dispatched
|
20
|
+
*/
|
21
|
+
var useSubscribeToEventEmitter = function useSubscribeToEventEmitter(type, callback) {
|
22
|
+
var _useContext = (0, _react.useContext)(_FilterProvider.FilterContext),
|
23
|
+
EventEmitter = _useContext.EventEmitter;
|
24
|
+
(0, _react.useEffect)(function subscribeToEmitter() {
|
25
|
+
// This event is emitted from the DatagridToolbar component when clearFilters is clicked in FilterSummary
|
26
|
+
EventEmitter.subscribe(type, callback);
|
27
|
+
});
|
28
|
+
};
|
29
|
+
var _default = useSubscribeToEventEmitter;
|
30
|
+
exports.default = _default;
|
@@ -4,10 +4,30 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
5
5
|
value: true
|
6
6
|
});
|
7
|
+
Object.defineProperty(exports, "FilterContext", {
|
8
|
+
enumerable: true,
|
9
|
+
get: function get() {
|
10
|
+
return _FilterProvider.FilterContext;
|
11
|
+
}
|
12
|
+
});
|
7
13
|
Object.defineProperty(exports, "FilterFlyout", {
|
8
14
|
enumerable: true,
|
9
15
|
get: function get() {
|
10
16
|
return _FilterFlyout.default;
|
11
17
|
}
|
12
18
|
});
|
13
|
-
|
19
|
+
Object.defineProperty(exports, "FilterPanel", {
|
20
|
+
enumerable: true,
|
21
|
+
get: function get() {
|
22
|
+
return _FilterPanel.default;
|
23
|
+
}
|
24
|
+
});
|
25
|
+
Object.defineProperty(exports, "FilterProvider", {
|
26
|
+
enumerable: true,
|
27
|
+
get: function get() {
|
28
|
+
return _FilterProvider.FilterProvider;
|
29
|
+
}
|
30
|
+
});
|
31
|
+
var _FilterFlyout = _interopRequireDefault(require("./FilterFlyout"));
|
32
|
+
var _FilterPanel = _interopRequireDefault(require("./FilterPanel"));
|
33
|
+
var _FilterProvider = require("./FilterProvider");
|
@@ -0,0 +1,64 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.panelVariants = exports.innerContainerVariants = exports.actionSetVariants = void 0;
|
7
|
+
var _motionConstants = require("../../../../../../global/js/utils/motionConstants");
|
8
|
+
var _constants = require("../constants");
|
9
|
+
var panelVariants = {
|
10
|
+
hidden: {
|
11
|
+
width: 0,
|
12
|
+
overflow: 'hidden',
|
13
|
+
transition: {
|
14
|
+
duration: _motionConstants.DURATIONS.fast02,
|
15
|
+
ease: _motionConstants.EASINGS.productive.exit,
|
16
|
+
when: 'afterChildren'
|
17
|
+
}
|
18
|
+
},
|
19
|
+
visible: {
|
20
|
+
width: _constants.PANEL_WIDTH,
|
21
|
+
overflow: 'visible',
|
22
|
+
transition: {
|
23
|
+
duration: _motionConstants.DURATIONS.moderate02,
|
24
|
+
ease: _motionConstants.EASINGS.productive.entrance,
|
25
|
+
when: 'beforeChildren'
|
26
|
+
}
|
27
|
+
}
|
28
|
+
};
|
29
|
+
exports.panelVariants = panelVariants;
|
30
|
+
var innerContainerVariants = {
|
31
|
+
hidden: {
|
32
|
+
opacity: 0,
|
33
|
+
transition: {
|
34
|
+
duration: _motionConstants.DURATIONS.fast01,
|
35
|
+
ease: _motionConstants.EASINGS.productive.exit
|
36
|
+
}
|
37
|
+
},
|
38
|
+
visible: {
|
39
|
+
opacity: 1,
|
40
|
+
transition: {
|
41
|
+
duration: _motionConstants.DURATIONS.fast02,
|
42
|
+
ease: _motionConstants.EASINGS.productive.entrance,
|
43
|
+
when: 'beforeChildren'
|
44
|
+
}
|
45
|
+
}
|
46
|
+
};
|
47
|
+
exports.innerContainerVariants = innerContainerVariants;
|
48
|
+
var actionSetVariants = {
|
49
|
+
hidden: {
|
50
|
+
y: _constants.ACTION_SET_HEIGHT,
|
51
|
+
transition: {
|
52
|
+
duration: _motionConstants.DURATIONS.fast01,
|
53
|
+
ease: _motionConstants.EASINGS.productive.exit
|
54
|
+
}
|
55
|
+
},
|
56
|
+
visible: {
|
57
|
+
y: 0,
|
58
|
+
transition: {
|
59
|
+
duration: _motionConstants.DURATIONS.fast02,
|
60
|
+
ease: _motionConstants.EASINGS.productive.entrance
|
61
|
+
}
|
62
|
+
}
|
63
|
+
};
|
64
|
+
exports.actionSetVariants = actionSetVariants;
|