box-ui-elements 17.1.0-beta.4 → 17.1.0-beta.5
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/es/features/content-explorer/content-explorer/ContentExplorer.js +89 -72
- package/es/features/content-explorer/content-explorer/ContentExplorer.js.flow +22 -6
- package/es/features/content-explorer/content-explorer/ContentExplorer.js.map +1 -1
- package/package.json +1 -1
- package/src/features/content-explorer/content-explorer/ContentExplorer.js +22 -6
- package/src/features/content-explorer/content-explorer/__tests__/ContentExplorer.test.js +66 -0
|
@@ -59,6 +59,20 @@ function (_Component) {
|
|
|
59
59
|
|
|
60
60
|
_this = _possibleConstructorReturn(this, _getPrototypeOf(ContentExplorer).call(this, props));
|
|
61
61
|
|
|
62
|
+
_defineProperty(_assertThisInitialized(_this), "areAllItemsSelected", function () {
|
|
63
|
+
var items = _this.props.items;
|
|
64
|
+
var selectedItems = _this.state.selectedItems;
|
|
65
|
+
return items.every(function (item) {
|
|
66
|
+
return selectedItems[item.id];
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
_defineProperty(_assertThisInitialized(_this), "isLoadingItems", function () {
|
|
71
|
+
var _this$props, _this$props$items, _this$props$items$;
|
|
72
|
+
|
|
73
|
+
return (_this$props = _this.props) === null || _this$props === void 0 ? void 0 : (_this$props$items = _this$props.items) === null || _this$props$items === void 0 ? void 0 : (_this$props$items$ = _this$props$items[0]) === null || _this$props$items$ === void 0 ? void 0 : _this$props$items$.isLoading;
|
|
74
|
+
});
|
|
75
|
+
|
|
62
76
|
_defineProperty(_assertThisInitialized(_this), "doAncestersContainClassname", function (node, className, limit) {
|
|
63
77
|
var nodeOfInterest = node;
|
|
64
78
|
var counter = 0;
|
|
@@ -102,10 +116,10 @@ function (_Component) {
|
|
|
102
116
|
});
|
|
103
117
|
|
|
104
118
|
_defineProperty(_assertThisInitialized(_this), "enterFolder", function (enteredFolder) {
|
|
105
|
-
var _this$
|
|
106
|
-
contentExplorerMode = _this$
|
|
107
|
-
onEnterFolder = _this$
|
|
108
|
-
onFoldersPathUpdate = _this$
|
|
119
|
+
var _this$props2 = _this.props,
|
|
120
|
+
contentExplorerMode = _this$props2.contentExplorerMode,
|
|
121
|
+
onEnterFolder = _this$props2.onEnterFolder,
|
|
122
|
+
onFoldersPathUpdate = _this$props2.onFoldersPathUpdate;
|
|
109
123
|
var foldersPath = _this.state.foldersPath;
|
|
110
124
|
var folderIndex = foldersPath.findIndex(function (folder) {
|
|
111
125
|
return folder.id === enteredFolder.id;
|
|
@@ -172,11 +186,11 @@ function (_Component) {
|
|
|
172
186
|
_defineProperty(_assertThisInitialized(_this), "handleItemClick", function (_ref) {
|
|
173
187
|
var event = _ref.event,
|
|
174
188
|
index = _ref.index;
|
|
175
|
-
var _this$
|
|
176
|
-
contentExplorerMode = _this$
|
|
177
|
-
items = _this$
|
|
178
|
-
onSelectItem = _this$
|
|
179
|
-
onSelectedItemsUpdate = _this$
|
|
189
|
+
var _this$props3 = _this.props,
|
|
190
|
+
contentExplorerMode = _this$props3.contentExplorerMode,
|
|
191
|
+
items = _this$props3.items,
|
|
192
|
+
onSelectItem = _this$props3.onSelectItem,
|
|
193
|
+
onSelectedItemsUpdate = _this$props3.onSelectedItemsUpdate;
|
|
180
194
|
var selectedItems = _this.state.selectedItems;
|
|
181
195
|
var item = items[index];
|
|
182
196
|
|
|
@@ -195,8 +209,7 @@ function (_Component) {
|
|
|
195
209
|
}
|
|
196
210
|
|
|
197
211
|
_this.setState({
|
|
198
|
-
selectedItems: newSelectedItems
|
|
199
|
-
isSelectAllChecked: false
|
|
212
|
+
selectedItems: newSelectedItems
|
|
200
213
|
});
|
|
201
214
|
|
|
202
215
|
if (onSelectedItemsUpdate) {
|
|
@@ -210,9 +223,9 @@ function (_Component) {
|
|
|
210
223
|
|
|
211
224
|
_defineProperty(_assertThisInitialized(_this), "handleItemDoubleClick", function (_ref2) {
|
|
212
225
|
var index = _ref2.index;
|
|
213
|
-
var _this$
|
|
214
|
-
items = _this$
|
|
215
|
-
onChooseItems = _this$
|
|
226
|
+
var _this$props4 = _this.props,
|
|
227
|
+
items = _this$props4.items,
|
|
228
|
+
onChooseItems = _this$props4.onChooseItems;
|
|
216
229
|
var item = items[index];
|
|
217
230
|
|
|
218
231
|
if (item.isDisabled || item.isLoading) {
|
|
@@ -224,10 +237,6 @@ function (_Component) {
|
|
|
224
237
|
} else if (!item.isActionDisabled) {
|
|
225
238
|
onChooseItems([item]);
|
|
226
239
|
}
|
|
227
|
-
|
|
228
|
-
_this.setState({
|
|
229
|
-
isSelectAllChecked: false
|
|
230
|
-
});
|
|
231
240
|
});
|
|
232
241
|
|
|
233
242
|
_defineProperty(_assertThisInitialized(_this), "handleItemNameClick", function (event, index) {
|
|
@@ -247,10 +256,6 @@ function (_Component) {
|
|
|
247
256
|
event.stopPropagation();
|
|
248
257
|
|
|
249
258
|
_this.enterFolder(item);
|
|
250
|
-
|
|
251
|
-
_this.setState({
|
|
252
|
-
isSelectAllChecked: false
|
|
253
|
-
});
|
|
254
259
|
});
|
|
255
260
|
|
|
256
261
|
_defineProperty(_assertThisInitialized(_this), "toggleSelectedItem", function (selectedItems, item) {
|
|
@@ -298,15 +303,14 @@ function (_Component) {
|
|
|
298
303
|
_asyncToGenerator(
|
|
299
304
|
/*#__PURE__*/
|
|
300
305
|
regeneratorRuntime.mark(function _callee() {
|
|
301
|
-
var
|
|
302
|
-
|
|
306
|
+
var onSelectedItemsUpdate, isSelectAllChecked, newSelectedItems;
|
|
303
307
|
return regeneratorRuntime.wrap(function _callee$(_context) {
|
|
304
308
|
while (1) {
|
|
305
309
|
switch (_context.prev = _context.next) {
|
|
306
310
|
case 0:
|
|
307
|
-
|
|
311
|
+
onSelectedItemsUpdate = _this.props.onSelectedItemsUpdate;
|
|
308
312
|
|
|
309
|
-
if (!(
|
|
313
|
+
if (!_this.isLoadingItems()) {
|
|
310
314
|
_context.next = 3;
|
|
311
315
|
break;
|
|
312
316
|
}
|
|
@@ -362,11 +366,24 @@ function (_Component) {
|
|
|
362
366
|
key: "componentDidUpdate",
|
|
363
367
|
value: function componentDidUpdate(_ref4) {
|
|
364
368
|
var prevInitialFoldersPath = _ref4.initialFoldersPath;
|
|
365
|
-
var
|
|
369
|
+
var _this$props5 = this.props,
|
|
370
|
+
initialFoldersPath = _this$props5.initialFoldersPath,
|
|
371
|
+
isSelectAllAllowed = _this$props5.isSelectAllAllowed;
|
|
372
|
+
var isSelectAllChecked = this.state.isSelectAllChecked;
|
|
366
373
|
|
|
367
374
|
if (prevInitialFoldersPath !== initialFoldersPath) {
|
|
368
375
|
this.handleFoldersPathUpdated(initialFoldersPath);
|
|
369
376
|
}
|
|
377
|
+
|
|
378
|
+
if (!this.isLoadingItems() && isSelectAllAllowed) {
|
|
379
|
+
var areAllItemsSelected = this.areAllItemsSelected();
|
|
380
|
+
|
|
381
|
+
if (areAllItemsSelected !== isSelectAllChecked) {
|
|
382
|
+
this.setState({
|
|
383
|
+
isSelectAllChecked: areAllItemsSelected
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
}
|
|
370
387
|
}
|
|
371
388
|
}, {
|
|
372
389
|
key: "componentWillUnmount",
|
|
@@ -400,51 +417,51 @@ function (_Component) {
|
|
|
400
417
|
value: function render() {
|
|
401
418
|
var _this2 = this;
|
|
402
419
|
|
|
403
|
-
var _this$
|
|
404
|
-
actionButtonsProps = _this$
|
|
405
|
-
additionalColumns = _this$
|
|
406
|
-
_this$
|
|
407
|
-
isNoSelectionAllowed = _this$
|
|
408
|
-
breadcrumbProps = _this$
|
|
409
|
-
cancelButtonProps = _this$
|
|
410
|
-
chooseButtonProps = _this$
|
|
411
|
-
chooseButtonText = _this$
|
|
412
|
-
className = _this$
|
|
413
|
-
contentExplorerMode = _this$
|
|
414
|
-
customInput = _this$
|
|
415
|
-
hasFolderTreeBreadcrumbs = _this$
|
|
416
|
-
headerActionsAccessory = _this$
|
|
417
|
-
onChooseItems = _this$
|
|
418
|
-
onMoveItem = _this$
|
|
419
|
-
onCopyItem = _this$
|
|
420
|
-
onCancelButtonClick = _this$
|
|
421
|
-
onCreateNewFolderButtonClick = _this$
|
|
422
|
-
onSelectedClick = _this$
|
|
423
|
-
onViewSelectedClick = _this$
|
|
424
|
-
showCreateNewFolderButton = _this$
|
|
425
|
-
isChooseButtonLoading = _this$
|
|
426
|
-
isCopyButtonLoading = _this$
|
|
427
|
-
isCreateNewFolderAllowed = _this$
|
|
428
|
-
isMoveButtonLoading = _this$
|
|
429
|
-
_this$
|
|
430
|
-
isResponsive = _this$
|
|
431
|
-
isSelectAllAllowed = _this$
|
|
432
|
-
items = _this$
|
|
433
|
-
numItemsPerPage = _this$
|
|
434
|
-
numTotalItems = _this$
|
|
435
|
-
onLoadMoreItems = _this$
|
|
436
|
-
includeSubfoldersProps = _this$
|
|
437
|
-
itemIconRenderer = _this$
|
|
438
|
-
itemNameLinkRenderer = _this$
|
|
439
|
-
itemButtonRenderer = _this$
|
|
440
|
-
itemRowHeight = _this$
|
|
441
|
-
itemRowRenderer = _this$
|
|
442
|
-
listHeaderHeight = _this$
|
|
443
|
-
listHeaderRenderer = _this$
|
|
444
|
-
listWidth = _this$
|
|
445
|
-
listHeight = _this$
|
|
446
|
-
searchInputProps = _this$
|
|
447
|
-
rest = _objectWithoutProperties(_this$
|
|
420
|
+
var _this$props6 = this.props,
|
|
421
|
+
actionButtonsProps = _this$props6.actionButtonsProps,
|
|
422
|
+
additionalColumns = _this$props6.additionalColumns,
|
|
423
|
+
_this$props6$isNoSele = _this$props6.isNoSelectionAllowed,
|
|
424
|
+
isNoSelectionAllowed = _this$props6$isNoSele === void 0 ? false : _this$props6$isNoSele,
|
|
425
|
+
breadcrumbProps = _this$props6.breadcrumbProps,
|
|
426
|
+
cancelButtonProps = _this$props6.cancelButtonProps,
|
|
427
|
+
chooseButtonProps = _this$props6.chooseButtonProps,
|
|
428
|
+
chooseButtonText = _this$props6.chooseButtonText,
|
|
429
|
+
className = _this$props6.className,
|
|
430
|
+
contentExplorerMode = _this$props6.contentExplorerMode,
|
|
431
|
+
customInput = _this$props6.customInput,
|
|
432
|
+
hasFolderTreeBreadcrumbs = _this$props6.hasFolderTreeBreadcrumbs,
|
|
433
|
+
headerActionsAccessory = _this$props6.headerActionsAccessory,
|
|
434
|
+
onChooseItems = _this$props6.onChooseItems,
|
|
435
|
+
onMoveItem = _this$props6.onMoveItem,
|
|
436
|
+
onCopyItem = _this$props6.onCopyItem,
|
|
437
|
+
onCancelButtonClick = _this$props6.onCancelButtonClick,
|
|
438
|
+
onCreateNewFolderButtonClick = _this$props6.onCreateNewFolderButtonClick,
|
|
439
|
+
onSelectedClick = _this$props6.onSelectedClick,
|
|
440
|
+
onViewSelectedClick = _this$props6.onViewSelectedClick,
|
|
441
|
+
showCreateNewFolderButton = _this$props6.showCreateNewFolderButton,
|
|
442
|
+
isChooseButtonLoading = _this$props6.isChooseButtonLoading,
|
|
443
|
+
isCopyButtonLoading = _this$props6.isCopyButtonLoading,
|
|
444
|
+
isCreateNewFolderAllowed = _this$props6.isCreateNewFolderAllowed,
|
|
445
|
+
isMoveButtonLoading = _this$props6.isMoveButtonLoading,
|
|
446
|
+
_this$props6$isRespon = _this$props6.isResponsive,
|
|
447
|
+
isResponsive = _this$props6$isRespon === void 0 ? false : _this$props6$isRespon,
|
|
448
|
+
isSelectAllAllowed = _this$props6.isSelectAllAllowed,
|
|
449
|
+
items = _this$props6.items,
|
|
450
|
+
numItemsPerPage = _this$props6.numItemsPerPage,
|
|
451
|
+
numTotalItems = _this$props6.numTotalItems,
|
|
452
|
+
onLoadMoreItems = _this$props6.onLoadMoreItems,
|
|
453
|
+
includeSubfoldersProps = _this$props6.includeSubfoldersProps,
|
|
454
|
+
itemIconRenderer = _this$props6.itemIconRenderer,
|
|
455
|
+
itemNameLinkRenderer = _this$props6.itemNameLinkRenderer,
|
|
456
|
+
itemButtonRenderer = _this$props6.itemButtonRenderer,
|
|
457
|
+
itemRowHeight = _this$props6.itemRowHeight,
|
|
458
|
+
itemRowRenderer = _this$props6.itemRowRenderer,
|
|
459
|
+
listHeaderHeight = _this$props6.listHeaderHeight,
|
|
460
|
+
listHeaderRenderer = _this$props6.listHeaderRenderer,
|
|
461
|
+
listWidth = _this$props6.listWidth,
|
|
462
|
+
listHeight = _this$props6.listHeight,
|
|
463
|
+
searchInputProps = _this$props6.searchInputProps,
|
|
464
|
+
rest = _objectWithoutProperties(_this$props6, ["actionButtonsProps", "additionalColumns", "isNoSelectionAllowed", "breadcrumbProps", "cancelButtonProps", "chooseButtonProps", "chooseButtonText", "className", "contentExplorerMode", "customInput", "hasFolderTreeBreadcrumbs", "headerActionsAccessory", "onChooseItems", "onMoveItem", "onCopyItem", "onCancelButtonClick", "onCreateNewFolderButtonClick", "onSelectedClick", "onViewSelectedClick", "showCreateNewFolderButton", "isChooseButtonLoading", "isCopyButtonLoading", "isCreateNewFolderAllowed", "isMoveButtonLoading", "isResponsive", "isSelectAllAllowed", "items", "numItemsPerPage", "numTotalItems", "onLoadMoreItems", "includeSubfoldersProps", "itemIconRenderer", "itemNameLinkRenderer", "itemButtonRenderer", "itemRowHeight", "itemRowRenderer", "listHeaderHeight", "listHeaderRenderer", "listWidth", "listHeight", "searchInputProps"]);
|
|
448
465
|
|
|
449
466
|
var _this$state2 = this.state,
|
|
450
467
|
isInSearchMode = _this$state2.isInSearchMode,
|
|
@@ -181,17 +181,35 @@ class ContentExplorer extends Component {
|
|
|
181
181
|
}
|
|
182
182
|
|
|
183
183
|
componentDidUpdate({ initialFoldersPath: prevInitialFoldersPath }) {
|
|
184
|
-
const { initialFoldersPath } = this.props;
|
|
184
|
+
const { initialFoldersPath, isSelectAllAllowed } = this.props;
|
|
185
|
+
const { isSelectAllChecked } = this.state;
|
|
185
186
|
|
|
186
187
|
if (prevInitialFoldersPath !== initialFoldersPath) {
|
|
187
188
|
this.handleFoldersPathUpdated(initialFoldersPath);
|
|
188
189
|
}
|
|
190
|
+
if (!this.isLoadingItems() && isSelectAllAllowed) {
|
|
191
|
+
const areAllItemsSelected = this.areAllItemsSelected();
|
|
192
|
+
if (areAllItemsSelected !== isSelectAllChecked) {
|
|
193
|
+
this.setState({ isSelectAllChecked: areAllItemsSelected });
|
|
194
|
+
}
|
|
195
|
+
}
|
|
189
196
|
}
|
|
190
197
|
|
|
191
198
|
componentWillUnmount() {
|
|
192
199
|
document.removeEventListener('click', this.handleDocumentClick, true);
|
|
193
200
|
}
|
|
194
201
|
|
|
202
|
+
areAllItemsSelected = () => {
|
|
203
|
+
const { items } = this.props;
|
|
204
|
+
const { selectedItems } = this.state;
|
|
205
|
+
|
|
206
|
+
return items.every(item => selectedItems[item.id]);
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
isLoadingItems = () => {
|
|
210
|
+
return this.props?.items?.[0]?.isLoading;
|
|
211
|
+
};
|
|
212
|
+
|
|
195
213
|
getCurrentFolder() {
|
|
196
214
|
const { foldersPath } = this.state;
|
|
197
215
|
return foldersPath[foldersPath.length - 1];
|
|
@@ -329,7 +347,7 @@ class ContentExplorer extends Component {
|
|
|
329
347
|
newSelectedItems[item.id] = item;
|
|
330
348
|
}
|
|
331
349
|
|
|
332
|
-
this.setState({ selectedItems: newSelectedItems
|
|
350
|
+
this.setState({ selectedItems: newSelectedItems });
|
|
333
351
|
|
|
334
352
|
if (onSelectedItemsUpdate) {
|
|
335
353
|
onSelectedItemsUpdate(newSelectedItems);
|
|
@@ -353,7 +371,6 @@ class ContentExplorer extends Component {
|
|
|
353
371
|
} else if (!item.isActionDisabled) {
|
|
354
372
|
onChooseItems([item]);
|
|
355
373
|
}
|
|
356
|
-
this.setState({ isSelectAllChecked: false });
|
|
357
374
|
};
|
|
358
375
|
|
|
359
376
|
handleItemNameClick = (event, index) => {
|
|
@@ -373,7 +390,6 @@ class ContentExplorer extends Component {
|
|
|
373
390
|
event.stopPropagation();
|
|
374
391
|
|
|
375
392
|
this.enterFolder(item);
|
|
376
|
-
this.setState({ isSelectAllChecked: false });
|
|
377
393
|
};
|
|
378
394
|
|
|
379
395
|
toggleSelectedItem = (selectedItems, item) => {
|
|
@@ -414,8 +430,8 @@ class ContentExplorer extends Component {
|
|
|
414
430
|
};
|
|
415
431
|
|
|
416
432
|
handleSelectAllClick = async () => {
|
|
417
|
-
const {
|
|
418
|
-
if (
|
|
433
|
+
const { onSelectedItemsUpdate } = this.props;
|
|
434
|
+
if (this.isLoadingItems()) {
|
|
419
435
|
return;
|
|
420
436
|
}
|
|
421
437
|
const { isSelectAllChecked } = this.state;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/features/content-explorer/content-explorer/ContentExplorer.js"],"names":["PropTypes","React","Component","classNames","omit","ContentExplorerHeaderActions","ContentExplorerEmptyState","ContentExplorerActionButtons","ContentExplorerSelectAll","ContentExplorerIncludeSubfolders","ItemList","ContentExplorerModePropType","FoldersPathPropType","ItemsPropType","ContentExplorerModes","TYPE_FOLDER","ContentExplorer","props","node","className","limit","nodeOfInterest","counter","parentNode","includes","contentExplorerMode","MULTI_SELECT","event","isInside","domNode","contains","target","shouldDeselectItems","deselectItems","enteredFolder","onEnterFolder","onFoldersPathUpdate","foldersPath","state","folderIndex","findIndex","folder","id","newFoldersPath","slice","concat","newState","selectedItems","setState","searchQuery","onSearchSubmit","isInSearchMode","folderBeforeSearch","onExitSearch","index","items","onSelectItem","onSelectedItemsUpdate","item","isDisabled","isLoading","isActionDisabled","stopPropagation","newSelectedItems","toggleSelectedItem","isSelectAllChecked","onChooseItems","type","enterFolder","preventDefault","result","forEach","unselectAll","selectAll","isViewingSearchResults","length","initialSelectedItems","initialFoldersPath","document","addEventListener","handleDocumentClick","prevInitialFoldersPath","handleFoldersPathUpdated","removeEventListener","actionButtonsProps","additionalColumns","isNoSelectionAllowed","breadcrumbProps","cancelButtonProps","chooseButtonProps","chooseButtonText","customInput","hasFolderTreeBreadcrumbs","headerActionsAccessory","onMoveItem","onCopyItem","onCancelButtonClick","onCreateNewFolderButtonClick","onSelectedClick","onViewSelectedClick","showCreateNewFolderButton","isChooseButtonLoading","isCopyButtonLoading","isCreateNewFolderAllowed","isMoveButtonLoading","isResponsive","isSelectAllAllowed","numItemsPerPage","numTotalItems","onLoadMoreItems","includeSubfoldersProps","itemIconRenderer","itemNameLinkRenderer","itemButtonRenderer","itemRowHeight","itemRowRenderer","listHeaderHeight","listHeaderRenderer","listWidth","listHeight","searchInputProps","rest","currentFolder","getCurrentFolder","contentExplorerProps","canIncludeSubfolders","hasSubheader","selectedItemsIds","Object","keys","areActionButtonsDisabled","SELECT_FILE","handleContentExplorerClick","ref","handleExitSearch","handleSearchSubmit","handleSelectAllClick","renderItemListEmptyState","handleItemClick","handleItemDoubleClick","handleItemNameClick","object","arrayOf","element","bool","string","isRequired","func","number"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAOA,SAAP,MAAsB,YAAtB;AACA,OAAOC,KAAP,IAAgBC,SAAhB,QAAiC,OAAjC;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,OAAOC,IAAP,MAAiB,aAAjB;AAEA,OAAOC,4BAAP,MAAyC,gCAAzC;AACA,OAAOC,yBAAP,MAAsC,6BAAtC;AACA,OAAOC,4BAAP,MAAyC,gCAAzC;AACA,OAAOC,wBAAP,MAAqC,4BAArC;AACA,OAAOC,gCAAP,MAA6C,oCAA7C;AAEA,OAAOC,QAAP,MAAqB,cAArB;AACA,SAASC,2BAAT,EAAsCC,mBAAtC,EAA2DC,aAA3D,QAAgF,eAAhF;AACA,OAAOC,oBAAP,MAAiC,UAAjC;AAEA,SAASC,WAAT,QAA4B,oBAA5B;AAEA,OAAO,wBAAP;;IAEMC,e;;;;;AAqJF,2BAAYC,KAAZ,EAAmB;AAAA;;AAAA;;AACf,yFAAMA,KAAN;;AADe,kFAkCW,UAACC,IAAD,EAAOC,SAAP,EAAkBC,KAAlB,EAA4B;AACtD,UAAIC,cAAc,GAAGH,IAArB;AACA,UAAII,OAAO,GAAG,CAAd;;AACA,aAAOD,cAAc,CAACE,UAAf,IAA6BD,OAAO,GAAGF,KAA9C,EAAqD;AACjD;AACA,YAAI,CAACC,cAAc,CAACE,UAAf,CAA0BJ,SAA/B,EAA0C;AACtC;AACH;;AAED,YAAIE,cAAc,CAACE,UAAf,CAA0BJ,SAA1B,CAAoCK,QAApC,CAA6CL,SAA7C,CAAJ,EAA6D;AACzD,iBAAO,IAAP;AACH;;AAEDE,QAAAA,cAAc,GAAGA,cAAc,CAACE,UAAhC;AACAD,QAAAA,OAAO,IAAI,CAAX;AACH;;AAED,aAAO,KAAP;AACH,KApDkB;;AAAA,0EAsDG,YAAM;AAAA,UAChBG,mBADgB,GACQ,MAAKR,KADb,CAChBQ,mBADgB;AAGxB,aACI;AACAA,QAAAA,mBAAmB,KAAKX,oBAAoB,CAACY;AAFjD;AAIH,KA7DkB;;AAAA,0EA+DG,UAAAC,KAAK,EAAI;AAC3B,UAAMC,QAAQ,GAAI,MAAKC,OAAL,IAAgB,MAAKA,OAAL,CAAaC,QAAb,CAAsBH,KAAK,CAACI,MAA5B,CAAjB,IAAyD,MAAKF,OAAL,KAAiBF,KAAK,CAACI,MAAjG;;AAEA,UAAI,CAACH,QAAD,IAAa,MAAKI,mBAAL,EAAjB,EAA6C;AACzC,cAAKC,aAAL;AACH;AACJ,KArEkB;;AAAA,iFAuEU,YAAM;AAC/B,UAAI,MAAKD,mBAAL,EAAJ,EAAgC;AAC5B,cAAKC,aAAL;AACH;AACJ,KA3EkB;;AAAA,kEAuFL,UAAAC,aAAa,EAAI;AAAA,wBACyC,MAAKjB,KAD9C;AAAA,UACnBQ,mBADmB,eACnBA,mBADmB;AAAA,UACEU,aADF,eACEA,aADF;AAAA,UACiBC,mBADjB,eACiBA,mBADjB;AAAA,UAEnBC,WAFmB,GAEH,MAAKC,KAFF,CAEnBD,WAFmB;AAI3B,UAAME,WAAW,GAAGF,WAAW,CAACG,SAAZ,CAAsB,UAAAC,MAAM;AAAA,eAAIA,MAAM,CAACC,EAAP,KAAcR,aAAa,CAACQ,EAAhC;AAAA,OAA5B,CAApB;AACA,UAAIC,cAAc,GAAGN,WAAW,CAACO,KAAZ,EAArB;;AAEA,UAAIL,WAAW,KAAK,CAAC,CAArB,EAAwB;AACpB;AACAI,QAAAA,cAAc,GAAGA,cAAc,CAACE,MAAf,CAAsB,mBAE5BX,aAF4B,EAAtB,CAAjB;AAKH,OAPD,MAOO;AACH;AACAS,QAAAA,cAAc,GAAGA,cAAc,CAACC,KAAf,CAAqB,CAArB,EAAwBL,WAAW,GAAG,CAAtC,CAAjB;AACH;;AAED,UAAMO,QAAQ,GAAG;AAAET,QAAAA,WAAW,EAAEM;AAAf,OAAjB;;AACA,UAAIlB,mBAAmB,KAAKX,oBAAoB,CAACY,YAAjD,EAA+D;AAC3DoB,QAAAA,QAAQ,CAACC,aAAT,GAAyB,EAAzB;AACH;;AAED,YAAKC,QAAL,CAAcF,QAAd;;AACA,UAAIV,mBAAJ,EAAyB;AACrBA,QAAAA,mBAAmB,CAACO,cAAD,CAAnB;AACH;;AAEDR,MAAAA,aAAa,CAACD,aAAD,EAAgBS,cAAhB,CAAb;AACH,KArHkB;;AAAA,+EAuHQ,UAAAA,cAAc,EAAI;AAAA,UACjCP,mBADiC,GACT,MAAKnB,KADI,CACjCmB,mBADiC;;AAGzC,YAAKY,QAAL,CAAc;AACVX,QAAAA,WAAW,EAAEM;AADH,OAAd;;AAGA,UAAIP,mBAAJ,EAAyB;AACrBA,QAAAA,mBAAmB,CAACO,cAAD,CAAnB;AACH;AACJ,KAhIkB;;AAAA,yEAkIE,UAAAM,WAAW,EAAI;AAAA,UACxBC,cADwB,GACL,MAAKjC,KADA,CACxBiC,cADwB;;AAGhC,YAAKF,QAAL,CAAc;AAAEG,QAAAA,cAAc,EAAE;AAAlB,OAAd;;AACAD,MAAAA,cAAc,CAACD,WAAD,CAAd;AACH,KAvIkB;;AAAA,uEAyIA,UAAAG,kBAAkB,EAAI;AAAA,UAC7BC,YAD6B,GACZ,MAAKpC,KADO,CAC7BoC,YAD6B;;AAGrC,YAAKL,QAAL,CAAc;AAAEG,QAAAA,cAAc,EAAE;AAAlB,OAAd;;AACAE,MAAAA,YAAY,CAACD,kBAAD,CAAZ;AACH,KA9IkB;;AAAA,sEAgJD,gBAAsB;AAAA,UAAnBzB,KAAmB,QAAnBA,KAAmB;AAAA,UAAZ2B,KAAY,QAAZA,KAAY;AAAA,yBACwC,MAAKrC,KAD7C;AAAA,UAC5BQ,mBAD4B,gBAC5BA,mBAD4B;AAAA,UACP8B,KADO,gBACPA,KADO;AAAA,UACAC,YADA,gBACAA,YADA;AAAA,UACcC,qBADd,gBACcA,qBADd;AAAA,UAE5BV,aAF4B,GAEV,MAAKT,KAFK,CAE5BS,aAF4B;AAGpC,UAAMW,IAAI,GAAGH,KAAK,CAACD,KAAD,CAAlB;;AAEA,UAAII,IAAI,CAACC,UAAL,IAAmBD,IAAI,CAACE,SAAxB,IAAqCF,IAAI,CAACG,gBAA9C,EAAgE;AAC5D;AACH,OAPmC,CASpC;;;AACAlC,MAAAA,KAAK,CAACmC,eAAN;AAEA,UAAIC,gBAAgB,GAAG,EAAvB;;AACA,UAAItC,mBAAmB,KAAKX,oBAAoB,CAACY,YAAjD,EAA+D;AAC3DqC,QAAAA,gBAAgB,GAAG,MAAKC,kBAAL,CAAwBjB,aAAxB,EAAuCW,IAAvC,CAAnB;AACH,OAFD,MAEO;AACHK,QAAAA,gBAAgB,CAACL,IAAI,CAAChB,EAAN,CAAhB,GAA4BgB,IAA5B;AACH;;AAED,YAAKV,QAAL,CAAc;AAAED,QAAAA,aAAa,EAAEgB,gBAAjB;AAAmCE,QAAAA,kBAAkB,EAAE;AAAvD,OAAd;;AAEA,UAAIR,qBAAJ,EAA2B;AACvBA,QAAAA,qBAAqB,CAACM,gBAAD,CAArB;AACH;;AAED,UAAIP,YAAJ,EAAkB;AACdA,QAAAA,YAAY,CAACE,IAAD,EAAOJ,KAAP,CAAZ;AACH;AACJ,KA5KkB;;AAAA,4EA8KK,iBAAe;AAAA,UAAZA,KAAY,SAAZA,KAAY;AAAA,yBACF,MAAKrC,KADH;AAAA,UAC3BsC,KAD2B,gBAC3BA,KAD2B;AAAA,UACpBW,aADoB,gBACpBA,aADoB;AAEnC,UAAMR,IAAI,GAAGH,KAAK,CAACD,KAAD,CAAlB;;AAEA,UAAII,IAAI,CAACC,UAAL,IAAmBD,IAAI,CAACE,SAA5B,EAAuC;AACnC;AACH;;AAED,UAAIF,IAAI,CAACS,IAAL,KAAcpD,WAAlB,EAA+B;AAC3B,cAAKqD,WAAL,CAAiBV,IAAjB;AACH,OAFD,MAEO,IAAI,CAACA,IAAI,CAACG,gBAAV,EAA4B;AAC/BK,QAAAA,aAAa,CAAC,CAACR,IAAD,CAAD,CAAb;AACH;;AACD,YAAKV,QAAL,CAAc;AAAEiB,QAAAA,kBAAkB,EAAE;AAAtB,OAAd;AACH,KA5LkB;;AAAA,0EA8LG,UAACtC,KAAD,EAAQ2B,KAAR,EAAkB;AAAA,UAC5BC,KAD4B,GAClB,MAAKtC,KADa,CAC5BsC,KAD4B;AAEpC,UAAMG,IAAI,GAAGH,KAAK,CAACD,KAAD,CAAlB;;AAEA,UAAII,IAAI,CAACC,UAAL,IAAmBD,IAAI,CAACE,SAA5B,EAAuC;AACnC;AACH;;AAED,UAAIF,IAAI,CAACS,IAAL,KAAcpD,WAAlB,EAA+B;AAC3B;AACH,OAVmC,CAYpC;;;AACAY,MAAAA,KAAK,CAAC0C,cAAN;AACA1C,MAAAA,KAAK,CAACmC,eAAN;;AAEA,YAAKM,WAAL,CAAiBV,IAAjB;;AACA,YAAKV,QAAL,CAAc;AAAEiB,QAAAA,kBAAkB,EAAE;AAAtB,OAAd;AACH,KAhNkB;;AAAA,yEAkNE,UAAClB,aAAD,EAAgBW,IAAhB,EAAyB;AAC1C,UAAMY,MAAM,qBAAQvB,aAAR,CAAZ;;AACA,UAAIuB,MAAM,CAACZ,IAAI,CAAChB,EAAN,CAAV,EAAqB;AACjB,eAAO4B,MAAM,CAACZ,IAAI,CAAChB,EAAN,CAAb;AACH,OAFD,MAEO;AACH4B,QAAAA,MAAM,CAACZ,IAAI,CAAChB,EAAN,CAAN,GAAkBgB,IAAlB;AACH;;AAED,aAAOY,MAAP;AACH,KA3NkB;;AAAA,gEA6NP,YAAM;AAAA,UACNf,KADM,GACI,MAAKtC,KADT,CACNsC,KADM;AAAA,UAENR,aAFM,GAEY,MAAKT,KAFjB,CAENS,aAFM;;AAGd,UAAMuB,MAAM,qBAAQvB,aAAR,CAAZ;;AACAQ,MAAAA,KAAK,CAACgB,OAAN,CAAc,UAAAb,IAAI,EAAI;AAClB,YAAI,CAACY,MAAM,CAACZ,IAAI,CAAChB,EAAN,CAAX,EAAsB;AAClB4B,UAAAA,MAAM,CAACZ,IAAI,CAAChB,EAAN,CAAN,GAAkBgB,IAAlB;AACH;AACJ,OAJD;AAMA,aAAOY,MAAP;AACH,KAxOkB;;AAAA,kEA0OL,YAAM;AAAA,UACRf,KADQ,GACE,MAAKtC,KADP,CACRsC,KADQ;AAAA,UAERR,aAFQ,GAEU,MAAKT,KAFf,CAERS,aAFQ;;AAGhB,UAAMuB,MAAM,qBAAQvB,aAAR,CAAZ;;AACAQ,MAAAA,KAAK,CAACgB,OAAN,CAAc,UAAAb,IAAI,EAAI;AAClB,YAAIY,MAAM,CAACZ,IAAI,CAAChB,EAAN,CAAV,EAAqB;AACjB,iBAAO4B,MAAM,CAACZ,IAAI,CAAChB,EAAN,CAAb;AACH;AACJ,OAJD;AAMA,aAAO4B,MAAP;AACH,KArPkB;;AAAA;AAAA;AAAA;AAAA;AAAA,4BAuPI;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,6BACsB,MAAKrD,KAD3B,EACXsC,KADW,gBACXA,KADW,EACJE,qBADI,gBACJA,qBADI;;AAAA,oBAEfF,KAAK,IAAIA,KAAK,CAAC,CAAD,CAAd,IAAqBA,KAAK,CAAC,CAAD,CAAL,CAASK,SAFf;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAKXK,cAAAA,kBALW,GAKY,MAAK3B,KALjB,CAKX2B,kBALW;AAMbF,cAAAA,gBANa,GAMME,kBAAkB,GAAG,MAAKO,WAAL,EAAH,GAAwB,MAAKC,SAAL,EANhD;;AAOnB,oBAAKzB,QAAL,CAAc;AAAED,gBAAAA,aAAa,EAAEgB,gBAAjB;AAAmCE,gBAAAA,kBAAkB,EAAE,CAACA;AAAxD,eAAd;;AACA,kBAAIR,qBAAJ,EAA2B;AACvBA,gBAAAA,qBAAqB,CAACM,gBAAD,CAArB;AACH;;AAVkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAvPJ;;AAAA,+EAoQQ,YAAM;AAAA,wBACW,MAAKzB,KADhB;AAAA,UACrBD,WADqB,eACrBA,WADqB;AAAA,UACRc,cADQ,eACRA,cADQ;AAE7B,UAAMuB,sBAAsB,GAAGvB,cAAc,IAAId,WAAW,CAACsC,MAAZ,KAAuB,CAAxE;AAEA,aAAO,oBAAC,yBAAD;AAA2B,QAAA,QAAQ,EAAED;AAArC,QAAP;AACH,KAzQkB;;AAEf,UAAKpC,KAAL,GAAa;AACTS,MAAAA,aAAa,EAAE9B,KAAK,CAAC2D,oBAAN,IAA8B,EADpC;AAETvC,MAAAA,WAAW,EAAEpB,KAAK,CAAC4D,kBAFV;AAGT1B,MAAAA,cAAc,EAAE,KAHP;AAITc,MAAAA,kBAAkB,EAAE;AAJX,KAAb;AAFe;AAQlB;;;;wCAEmB;AAChBa,MAAAA,QAAQ,CAACC,gBAAT,CAA0B,OAA1B,EAAmC,KAAKC,mBAAxC,EAA6D,IAA7D;AACH;;;8CAEkE;AAAA,UAA1BC,sBAA0B,SAA9CJ,kBAA8C;AAAA,UACvDA,kBADuD,GAChC,KAAK5D,KAD2B,CACvD4D,kBADuD;;AAG/D,UAAII,sBAAsB,KAAKJ,kBAA/B,EAAmD;AAC/C,aAAKK,wBAAL,CAA8BL,kBAA9B;AACH;AACJ;;;2CAEsB;AACnBC,MAAAA,QAAQ,CAACK,mBAAT,CAA6B,OAA7B,EAAsC,KAAKH,mBAA3C,EAAgE,IAAhE;AACH;;;uCAEkB;AAAA,UACP3C,WADO,GACS,KAAKC,KADd,CACPD,WADO;AAEf,aAAOA,WAAW,CAACA,WAAW,CAACsC,MAAZ,GAAqB,CAAtB,CAAlB;AACH;AAED;;;;;;oCA8CgB;AAAA,UACJlB,qBADI,GACsB,KAAKxC,KAD3B,CACJwC,qBADI;AAEZ,WAAKT,QAAL,CAAc;AACVD,QAAAA,aAAa,EAAE;AADL,OAAd;;AAGA,UAAIU,qBAAJ,EAA2B;AACvBA,QAAAA,qBAAqB,CAAC,EAAD,CAArB;AACH;AACJ;;;6BAsLQ;AAAA;;AAAA,yBA4CD,KAAKxC,KA5CJ;AAAA,UAEDmE,kBAFC,gBAEDA,kBAFC;AAAA,UAGDC,iBAHC,gBAGDA,iBAHC;AAAA,+CAIDC,oBAJC;AAAA,UAIDA,oBAJC,sCAIsB,KAJtB;AAAA,UAKDC,eALC,gBAKDA,eALC;AAAA,UAMDC,iBANC,gBAMDA,iBANC;AAAA,UAODC,iBAPC,gBAODA,iBAPC;AAAA,UAQDC,gBARC,gBAQDA,gBARC;AAAA,UASDvE,SATC,gBASDA,SATC;AAAA,UAUDM,mBAVC,gBAUDA,mBAVC;AAAA,UAWDkE,WAXC,gBAWDA,WAXC;AAAA,UAYDC,wBAZC,gBAYDA,wBAZC;AAAA,UAaDC,sBAbC,gBAaDA,sBAbC;AAAA,UAcD3B,aAdC,gBAcDA,aAdC;AAAA,UAeD4B,UAfC,gBAeDA,UAfC;AAAA,UAgBDC,UAhBC,gBAgBDA,UAhBC;AAAA,UAiBDC,mBAjBC,gBAiBDA,mBAjBC;AAAA,UAkBDC,4BAlBC,gBAkBDA,4BAlBC;AAAA,UAmBDC,eAnBC,gBAmBDA,eAnBC;AAAA,UAoBDC,mBApBC,gBAoBDA,mBApBC;AAAA,UAqBDC,yBArBC,gBAqBDA,yBArBC;AAAA,UAsBDC,qBAtBC,gBAsBDA,qBAtBC;AAAA,UAuBDC,mBAvBC,gBAuBDA,mBAvBC;AAAA,UAwBDC,wBAxBC,gBAwBDA,wBAxBC;AAAA,UAyBDC,mBAzBC,gBAyBDA,mBAzBC;AAAA,+CA0BDC,YA1BC;AAAA,UA0BDA,YA1BC,sCA0Bc,KA1Bd;AAAA,UA2BDC,kBA3BC,gBA2BDA,kBA3BC;AAAA,UA4BDnD,KA5BC,gBA4BDA,KA5BC;AAAA,UA6BDoD,eA7BC,gBA6BDA,eA7BC;AAAA,UA8BDC,aA9BC,gBA8BDA,aA9BC;AAAA,UA+BDC,eA/BC,gBA+BDA,eA/BC;AAAA,UAgCDC,sBAhCC,gBAgCDA,sBAhCC;AAAA,UAiCDC,gBAjCC,gBAiCDA,gBAjCC;AAAA,UAkCDC,oBAlCC,gBAkCDA,oBAlCC;AAAA,UAmCDC,kBAnCC,gBAmCDA,kBAnCC;AAAA,UAoCDC,aApCC,gBAoCDA,aApCC;AAAA,UAqCDC,eArCC,gBAqCDA,eArCC;AAAA,UAsCDC,gBAtCC,gBAsCDA,gBAtCC;AAAA,UAuCDC,kBAvCC,gBAuCDA,kBAvCC;AAAA,UAwCDC,SAxCC,gBAwCDA,SAxCC;AAAA,UAyCDC,UAzCC,gBAyCDA,UAzCC;AAAA,UA0CDC,gBA1CC,gBA0CDA,gBA1CC;AAAA,UA2CEC,IA3CF;;AAAA,yBA6CsE,KAAKnF,KA7C3E;AAAA,UA6CGa,cA7CH,gBA6CGA,cA7CH;AAAA,UA6CmBd,WA7CnB,gBA6CmBA,WA7CnB;AAAA,UA6CgCU,aA7ChC,gBA6CgCA,aA7ChC;AAAA,UA6C+CkB,kBA7C/C,gBA6C+CA,kBA7C/C;AA8CL,UAAMS,sBAAsB,GAAGvB,cAAc,IAAId,WAAW,CAACsC,MAAZ,KAAuB,CAAxE;AACA,UAAM+C,aAAa,GAAG,KAAKC,gBAAL,EAAtB;AACA,UAAMC,oBAAoB,GAAGxH,IAAI,CAACqH,IAAD,EAAO,CACpC,oBADoC,EAEpC,eAFoC,EAGpC,cAHoC,EAIpC,gBAJoC,EAKpC,cALoC,EAMpC,sBANoC,EAOpC,qBAPoC,EAQpC,uBARoC,CAAP,CAAjC;AAUA,UAAMI,oBAAoB,GAAG,CAAC,CAACf,sBAA/B;AACA,UAAMgB,YAAY,GAAGD,oBAAoB,IAAInB,kBAA7C;AAEA,UAAMqB,gBAAgB,GAAGC,MAAM,CAACC,IAAP,CAAYlF,aAAZ,CAAzB;AACA,UAAImF,wBAAJ,CA9DK,CA+DL;AACA;AACA;;AACA,UAAIzG,mBAAmB,KAAKX,oBAAoB,CAACY,YAAjD,EAA+D;AAC3D;AACA;AACAwG,QAAAA,wBAAwB,GACnBH,gBAAgB,CAACpD,MAAjB,KAA4B,CAA5B,IAAiC,CAACW,oBAAnC,IACCyC,gBAAgB,CAACpD,MAAjB,KAA4B,CAA5B,IAAiC5B,aAAa,CAACgF,gBAAgB,CAAC,CAAD,CAAjB,CAAb,CAAmClE,gBAFzE;AAGH,OAND,MAMO,IAAIa,sBAAsB,IAAIjD,mBAAmB,KAAKX,oBAAoB,CAACqH,WAA3E,EAAwF;AAC3F;AACA;AACA;AACAD,QAAAA,wBAAwB,GACpBH,gBAAgB,CAACpD,MAAjB,KAA4B,CAA5B,IAAiC5B,aAAa,CAACgF,gBAAgB,CAAC,CAAD,CAAjB,CAAb,CAAmClE,gBADxE;AAEH,OANM,MAMA;AACH;AACAqE,QAAAA,wBAAwB,GACpBH,gBAAgB,CAACpD,MAAjB,GAA0B,CAA1B,GACM5B,aAAa,CAACgF,gBAAgB,CAAC,CAAD,CAAjB,CAAb,CAAmClE,gBADzC,GAEM6D,aAAa,CAAC7D,gBAHxB;AAIH;;AAED,aACI;AACA;AACI,UAAA,SAAS,EAAE1D,UAAU,CAAC,kBAAD,EAAqBgB,SAArB,EAAgC;AACjD,+CAAmCsF;AADc,WAAhC,CADzB;AAII,yBAAY,kBAJhB;AAKI,UAAA,OAAO,EAAE,KAAK2B,0BALlB;AAMI,UAAA,GAAG,EAAE,aAAAC,KAAG,EAAI;AACR,YAAA,MAAI,CAACxG,OAAL,GAAewG,KAAf;AACH;AARL,WASQT,oBATR,GAWI,oBAAC,4BAAD;AACI,UAAA,eAAe,EAAErC,eADrB;AAEI,UAAA,mBAAmB,EAAE9D,mBAFzB;AAGI,UAAA,WAAW,EAAEkE,WAHjB;AAII,UAAA,WAAW,EAAEtD,WAJjB;AAKI,UAAA,wBAAwB,EAAEuD,wBAL9B;AAMI,UAAA,wBAAwB,EAAEW,wBAN9B;AAOI,UAAA,4BAA4B,EAAEN,4BAPlC;AAQI,UAAA,oBAAoB,EAAE,KAAKf,wBAR/B;AASI,UAAA,aAAa,EAAE,KAAKd,WATxB;AAUI,UAAA,YAAY,EAAE,KAAKkE,gBAVvB;AAWI,UAAA,cAAc,EAAE,KAAKC,kBAXzB;AAYI,UAAA,aAAa,EAAE3B,aAZnB;AAaI,UAAA,gBAAgB,EAAEY,gBAbtB;AAcI,UAAA,yBAAyB,EAAEpB;AAd/B,WAgBKP,sBAhBL,CAXJ,EA6BKiC,YAAY,IACT;AAAK,UAAA,SAAS,EAAC;AAAf,WACKD,oBAAoB,IAAI,oBAAC,gCAAD,EAAsCf,sBAAtC,CAD7B,EAEKJ,kBAAkB,IACf,oBAAC,wBAAD;AACI,UAAA,oBAAoB,EAAE,KAAK8B,oBAD/B;AAEI,UAAA,aAAa,EAAEX,oBAFnB;AAGI,UAAA,kBAAkB,EAAE5D,kBAHxB;AAII,UAAA,aAAa,EAAE2C;AAJnB,UAHR,CA9BR,EA0CI,oBAAC,QAAD;AACI,UAAA,iBAAiB,EAAEvB,iBADvB;AAEI,UAAA,mBAAmB,EAAE5D,mBAFzB;AAGI,UAAA,YAAY,EAAE2F,gBAHlB;AAII,UAAA,cAAc,EAAEC,kBAJpB;AAKI,UAAA,MAAM,EAAEE,UALZ;AAMI,UAAA,YAAY,EAAEd,YANlB;AAOI,UAAA,kBAAkB,EAAEQ,kBAPxB;AAQI,UAAA,gBAAgB,EAAEF,gBARtB;AASI,UAAA,oBAAoB,EAAEC,oBAT1B;AAUI,UAAA,KAAK,EAAEzD,KAVX;AAWI,UAAA,eAAe,EAAE4D,eAXrB;AAYI,UAAA,eAAe,EAAE,KAAKsB,wBAZ1B;AAaI,UAAA,eAAe,EAAE9B,eAbrB;AAcI,UAAA,aAAa,EAAEC,aAdnB;AAeI,UAAA,WAAW,EAAE,KAAK8B,eAftB;AAgBI,UAAA,iBAAiB,EAAE,KAAKC,qBAhB5B;AAiBI,UAAA,eAAe,EAAE,KAAKC,mBAjB1B;AAkBI,UAAA,eAAe,EAAE/B,eAlBrB;AAmBI,UAAA,SAAS,EAAEK,aAnBf;AAoBI,UAAA,aAAa,EAAEnE,aApBnB;AAqBI,UAAA,KAAK,EAAEuE;AArBX,UA1CJ,EAiEI,oBAAC,4BAAD;AACI,UAAA,kBAAkB,EAAElC,kBADxB;AAEI,UAAA,kBAAkB,EAAE8C,wBAFxB;AAGI,UAAA,iBAAiB,EAAE1C,iBAHvB;AAII,UAAA,oBAAoB,EAAEqC,oBAJ1B;AAKI,UAAA,iBAAiB,EAAEpC,iBALvB;AAMI,UAAA,gBAAgB,EAAEC,gBANtB;AAOI,UAAA,mBAAmB,EAAEjE,mBAPzB;AAQI,UAAA,aAAa,EAAEiG,aARnB;AASI,UAAA,qBAAqB,EAAErB,qBAT3B;AAUI,UAAA,mBAAmB,EAAEC,mBAVzB;AAWI,UAAA,mBAAmB,EAAEE,mBAXzB;AAYI,UAAA,YAAY,EAAEC,YAZlB;AAaI,UAAA,kBAAkB,EAAEC,kBAbxB;AAcI,UAAA,aAAa,EAAEV,mBAdnB;AAeI,UAAA,aAAa,EAAE9B,aAfnB;AAgBI,UAAA,WAAW,EAAE6B,UAhBjB;AAiBI,UAAA,oBAAoB,EAAE,KAAKb,wBAjB/B;AAkBI,UAAA,eAAe,EAAEgB,eAlBrB;AAmBI,UAAA,WAAW,EAAEJ,UAnBjB;AAoBI,UAAA,mBAAmB,EAAEK,mBApBzB;AAqBI,UAAA,aAAa,EAAEpD,aArBnB;AAsBI,UAAA,oBAAoB,EAAEuC;AAtB1B,UAjEJ;AAFJ;AA6FH;;;;EAnlByBpF,S;;gBAAxBc,e,eACiB;AACf;AACAoE,EAAAA,kBAAkB,EAAEpF,SAAS,CAAC6I,MAFf;;AAGf;;;;AAIAxD,EAAAA,iBAAiB,EAAErF,SAAS,CAAC8I,OAAV,CAAkB9I,SAAS,CAAC+I,OAA5B,CAPJ;;AAQf;AACAzD,EAAAA,oBAAoB,EAAEtF,SAAS,CAACgJ,IATjB;;AAUf;AACAzD,EAAAA,eAAe,EAAEvF,SAAS,CAAC6I,MAXZ;;AAYf;AACArD,EAAAA,iBAAiB,EAAExF,SAAS,CAAC6I,MAbd;;AAcf;AACApD,EAAAA,iBAAiB,EAAEzF,SAAS,CAAC6I,MAfd;;AAgBf;AACAnD,EAAAA,gBAAgB,EAAE1F,SAAS,CAACkB,IAjBb;;AAkBf;AACAC,EAAAA,SAAS,EAAEnB,SAAS,CAACiJ,MAnBN;;AAoBf;AACAxH,EAAAA,mBAAmB,EAAEd,2BAA2B,CAACuI,UArBlC;;AAsBf;AACAvD,EAAAA,WAAW,EAAE3F,SAAS,CAACmJ,IAvBR;;AAwBf;AACAvD,EAAAA,wBAAwB,EAAE5F,SAAS,CAACgJ,IAzBrB;;AA0Bf;AACAnD,EAAAA,sBAAsB,EAAE7F,SAAS,CAACkB,IA3BnB;;AA4Bf;AACA4F,EAAAA,sBAAsB,EAAE9G,SAAS,CAAC6I,MA7BnB;;AA8Bf;AACAhE,EAAAA,kBAAkB,EAAEjE,mBAAmB,CAACsI,UA/BzB;;AAgCf;AACAtE,EAAAA,oBAAoB,EAAE5E,SAAS,CAAC6I,MAjCjB;;AAkCf;AACApC,EAAAA,YAAY,EAAEzG,SAAS,CAACgJ,IAnCT;;AAoCf;;;;;;AAMA7G,EAAAA,aAAa,EAAEnC,SAAS,CAACmJ,IAAV,CAAeD,UA1Cf;;AA2Cf;;;;AAIA9G,EAAAA,mBAAmB,EAAEpC,SAAS,CAACmJ,IA/ChB;;AAgDf;;;;AAIA1F,EAAAA,qBAAqB,EAAEzD,SAAS,CAACmJ,IApDlB;;AAqDf;;;;;;AAMA3F,EAAAA,YAAY,EAAExD,SAAS,CAACmJ,IA3DT;;AA4Df;;;;;AAKAjF,EAAAA,aAAa,EAAElE,SAAS,CAACmJ,IAjEV;;AAkEf;AACAjD,EAAAA,eAAe,EAAElG,SAAS,CAACmJ,IAnEZ;;AAoEf;AACAhD,EAAAA,mBAAmB,EAAEnG,SAAS,CAACmJ,IArEhB;;AAsEf;;;;;AAKArD,EAAAA,UAAU,EAAE9F,SAAS,CAACmJ,IA3EP;;AA4Ef;;;;;AAKApD,EAAAA,UAAU,EAAE/F,SAAS,CAACmJ,IAjFP;;AAkFf;AACAnD,EAAAA,mBAAmB,EAAEhG,SAAS,CAACmJ,IAnFhB;;AAoFf;AACAlD,EAAAA,4BAA4B,EAAEjG,SAAS,CAACmJ,IArFzB;;AAsFf;AACA/C,EAAAA,yBAAyB,EAAEpG,SAAS,CAACgJ,IAvFtB;;AAwFf;AACA3C,EAAAA,qBAAqB,EAAErG,SAAS,CAACgJ,IAzFlB;;AA0Ff;AACA1C,EAAAA,mBAAmB,EAAEtG,SAAS,CAACgJ,IA3FhB;;AA4Ff;AACAzC,EAAAA,wBAAwB,EAAEvG,SAAS,CAACgJ,IA7FrB;;AA8Ff;AACAtC,EAAAA,kBAAkB,EAAE1G,SAAS,CAACgJ,IA/Ff;;AAgGf;AACAxC,EAAAA,mBAAmB,EAAExG,SAAS,CAACgJ,IAjGhB;;AAkGf;;;;;AAKA9F,EAAAA,cAAc,EAAElD,SAAS,CAACmJ,IAAV,CAAeD,UAvGhB;;AAwGf;;;;;AAKA7F,EAAAA,YAAY,EAAErD,SAAS,CAACmJ,IAAV,CAAeD,UA7Gd;;AA8Gf;AACA3F,EAAAA,KAAK,EAAE1C,aAAa,CAACqI,UA/GN;;AAgHf;AACAvC,EAAAA,eAAe,EAAE3G,SAAS,CAACoJ,MAjHZ;;AAkHf;AACAxC,EAAAA,aAAa,EAAE5G,SAAS,CAACoJ,MAnHV;;AAoHf;AACAvC,EAAAA,eAAe,EAAE7G,SAAS,CAACmJ,IArHZ;;AAsHf;AACApC,EAAAA,gBAAgB,EAAE/G,SAAS,CAACmJ,IAvHb;;AAwHf;AACAnC,EAAAA,oBAAoB,EAAEhH,SAAS,CAACmJ,IAzHjB;;AA0Hf;AACAlC,EAAAA,kBAAkB,EAAEjH,SAAS,CAACmJ,IA3Hf;;AA4Hf;AACAjC,EAAAA,aAAa,EAAElH,SAAS,CAACoJ,MA7HV;;AA8Hf;AACAjC,EAAAA,eAAe,EAAEnH,SAAS,CAACmJ,IA/HZ;;AAgIf;AACA/B,EAAAA,gBAAgB,EAAEpH,SAAS,CAACoJ,MAjIb;;AAkIf;AACA/B,EAAAA,kBAAkB,EAAErH,SAAS,CAACmJ,IAnIf;;AAoIf;AACA7B,EAAAA,SAAS,EAAEtH,SAAS,CAACoJ,MAAV,CAAiBF,UArIb;;AAsIf;AACA3B,EAAAA,UAAU,EAAEvH,SAAS,CAACoJ,MAAV,CAAiBF,UAvId;;AAwIf;AACA1B,EAAAA,gBAAgB,EAAExH,SAAS,CAAC6I;AAzIb,C;;gBADjB7H,e,kBA6IoB;AAClBoE,EAAAA,kBAAkB,EAAE,EADF;AAElBI,EAAAA,iBAAiB,EAAE,EAFD;AAGlBC,EAAAA,iBAAiB,EAAE,EAHD;AAIlBtE,EAAAA,SAAS,EAAE,EAJO;AAKlBqG,EAAAA,gBAAgB,EAAE;AALA,C;;AAyc1B,eAAexG,eAAf","sourcesContent":["import PropTypes from 'prop-types';\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport omit from 'lodash/omit';\n\nimport ContentExplorerHeaderActions from './ContentExplorerHeaderActions';\nimport ContentExplorerEmptyState from './ContentExplorerEmptyState';\nimport ContentExplorerActionButtons from './ContentExplorerActionButtons';\nimport ContentExplorerSelectAll from './ContentExplorerSelectAll';\nimport ContentExplorerIncludeSubfolders from './ContentExplorerIncludeSubfolders';\n\nimport ItemList from '../item-list';\nimport { ContentExplorerModePropType, FoldersPathPropType, ItemsPropType } from '../prop-types';\nimport ContentExplorerModes from '../modes';\n\nimport { TYPE_FOLDER } from '../../../constants';\n\nimport './ContentExplorer.scss';\n\nclass ContentExplorer extends Component {\n static propTypes = {\n /** Props for the action buttons container */\n actionButtonsProps: PropTypes.object,\n /**\n * Extra columns displayed in the folders table after folder name column\n * Each column has to be a Column element\n */\n additionalColumns: PropTypes.arrayOf(PropTypes.element),\n /** Allow users to choose no selections in MULTI_SELECT mode, defaults to false */\n isNoSelectionAllowed: PropTypes.bool,\n /** Props for breadcrumbs */\n breadcrumbProps: PropTypes.object,\n /** Props for the cancel button */\n cancelButtonProps: PropTypes.object,\n /** Props for the choose button */\n chooseButtonProps: PropTypes.object,\n /** Custom text for the choose button */\n chooseButtonText: PropTypes.node,\n /** Adds class name. */\n className: PropTypes.string,\n /** Configures the content explorer based on the user's intended action (ex. select file or move/copy) */\n contentExplorerMode: ContentExplorerModePropType.isRequired,\n /** Props that contains the custom search input. Is rendered in header actions */\n customInput: PropTypes.func,\n /** Whether the user can see the breadcrumbs represented with the folder tree button */\n hasFolderTreeBreadcrumbs: PropTypes.bool,\n /** Any extra items in the header to the right of the search input (and new folder button) */\n headerActionsAccessory: PropTypes.node,\n /** Props for the include subfolders toggle */\n includeSubfoldersProps: PropTypes.object,\n /** Initial path of folders. The last folder in the array is the current folder. */\n initialFoldersPath: FoldersPathPropType.isRequired,\n /** Initial items that will show up as selected */\n initialSelectedItems: PropTypes.object,\n /** Whether to use the responsive version */\n isResponsive: PropTypes.bool,\n /**\n * Called when the current folder changes\n *\n * @param {Object} enteredFolder\n * @param {Array} newFoldersPath\n */\n onEnterFolder: PropTypes.func.isRequired,\n /** Called when the folders path is updated\n *\n * @param {Array} newFoldersPath\n */\n onFoldersPathUpdate: PropTypes.func,\n /** Called whenever the selected items list changes\n *\n * @param {Object} selectedItems\n */\n onSelectedItemsUpdate: PropTypes.func,\n /**\n * Called when an item is selected\n *\n * @param {Object} selectedItem\n * @param {number} selectedItemIndex\n */\n onSelectItem: PropTypes.func,\n /**\n * Called when an item is chosen\n *\n * @param {Object[]} chosenItems\n */\n onChooseItems: PropTypes.func,\n /** Called when selected button is clicked */\n onSelectedClick: PropTypes.func,\n /** Called when the number of items selected text is clicked */\n onViewSelectedClick: PropTypes.func,\n /**\n * Called when a destination folder has been selected for moving an item to\n *\n * @param {Object} destFolder destination folder\n */\n onMoveItem: PropTypes.func,\n /**\n * Called when a destination folder has been selected for copying an item to\n *\n * @param {Object} destFolder destination folder\n */\n onCopyItem: PropTypes.func,\n /** Called when cancel button is clicked */\n onCancelButtonClick: PropTypes.func,\n /** Called when new folder button is clicked */\n onCreateNewFolderButtonClick: PropTypes.func,\n /** Whether the new folder button should be shown */\n showCreateNewFolderButton: PropTypes.bool,\n /** Whether the choose button should be shown with a loading indicator */\n isChooseButtonLoading: PropTypes.bool,\n /** Whether the copy button should be shown with a loading indicator */\n isCopyButtonLoading: PropTypes.bool,\n /** Whether the user has permission to create a new folder */\n isCreateNewFolderAllowed: PropTypes.bool,\n /** Whether the user can see select all checkbox */\n isSelectAllAllowed: PropTypes.bool,\n /** Whether the move button should be shown with a loading indicator */\n isMoveButtonLoading: PropTypes.bool,\n /**\n * Called when a search query is submitted.\n *\n * @param {string} searchQuery\n */\n onSearchSubmit: PropTypes.func.isRequired,\n /**\n * Called when search mode is exited. An updated items list should now be passed in to display the user's file tree.\n *\n * @param {Object} folderBeforeSearch the previous folder object before entering search mode\n */\n onExitSearch: PropTypes.func.isRequired,\n /** List of items to display */\n items: ItemsPropType.isRequired,\n /** Number of items to load per page as the user scrolls */\n numItemsPerPage: PropTypes.number,\n /** Total number of items across all pages */\n numTotalItems: PropTypes.number,\n /** Called to load more items */\n onLoadMoreItems: PropTypes.func,\n /** Used to render item icons in the list. Overrides the default icons. */\n itemIconRenderer: PropTypes.func,\n /** Used to render item name links in the list. Overrides the default links. */\n itemNameLinkRenderer: PropTypes.func,\n /** Used to render item buttons in the list. Overrides the default buttons. */\n itemButtonRenderer: PropTypes.func,\n /** Height of an item row */\n itemRowHeight: PropTypes.number,\n /** Used to render the row element for items on the list. Allows row customizations such as adding tooltips, etc. */\n itemRowRenderer: PropTypes.func,\n /** Height of the item list header, defaults to 0, which makes header not visible */\n listHeaderHeight: PropTypes.number,\n /** Used to render the header row on the item list */\n listHeaderRenderer: PropTypes.func,\n /** Width of the item list */\n listWidth: PropTypes.number.isRequired,\n /** Height of the item list */\n listHeight: PropTypes.number.isRequired,\n /** Props for the search input */\n searchInputProps: PropTypes.object,\n };\n\n static defaultProps = {\n actionButtonsProps: {},\n cancelButtonProps: {},\n chooseButtonProps: {},\n className: '',\n searchInputProps: {},\n };\n\n constructor(props) {\n super(props);\n this.state = {\n selectedItems: props.initialSelectedItems || {},\n foldersPath: props.initialFoldersPath,\n isInSearchMode: false,\n isSelectAllChecked: false,\n };\n }\n\n componentDidMount() {\n document.addEventListener('click', this.handleDocumentClick, true);\n }\n\n componentDidUpdate({ initialFoldersPath: prevInitialFoldersPath }) {\n const { initialFoldersPath } = this.props;\n\n if (prevInitialFoldersPath !== initialFoldersPath) {\n this.handleFoldersPathUpdated(initialFoldersPath);\n }\n }\n\n componentWillUnmount() {\n document.removeEventListener('click', this.handleDocumentClick, true);\n }\n\n getCurrentFolder() {\n const { foldersPath } = this.state;\n return foldersPath[foldersPath.length - 1];\n }\n\n /**\n * Traverse the hirerachy up to the limit to see if any of the parent has the className\n */\n doAncestersContainClassname = (node, className, limit) => {\n let nodeOfInterest = node;\n let counter = 0;\n while (nodeOfInterest.parentNode && counter < limit) {\n // Done traversing (Document node does not have classnames)\n if (!nodeOfInterest.parentNode.className) {\n break;\n }\n\n if (nodeOfInterest.parentNode.className.includes(className)) {\n return true;\n }\n\n nodeOfInterest = nodeOfInterest.parentNode;\n counter += 1;\n }\n\n return false;\n };\n\n shouldDeselectItems = () => {\n const { contentExplorerMode } = this.props;\n\n return (\n // always deselect when not in multi select mode\n contentExplorerMode !== ContentExplorerModes.MULTI_SELECT\n );\n };\n\n handleDocumentClick = event => {\n const isInside = (this.domNode && this.domNode.contains(event.target)) || this.domNode === event.target;\n\n if (!isInside && this.shouldDeselectItems()) {\n this.deselectItems();\n }\n };\n\n handleContentExplorerClick = () => {\n if (this.shouldDeselectItems()) {\n this.deselectItems();\n }\n };\n\n deselectItems() {\n const { onSelectedItemsUpdate } = this.props;\n this.setState({\n selectedItems: {},\n });\n if (onSelectedItemsUpdate) {\n onSelectedItemsUpdate({});\n }\n }\n\n enterFolder = enteredFolder => {\n const { contentExplorerMode, onEnterFolder, onFoldersPathUpdate } = this.props;\n const { foldersPath } = this.state;\n\n const folderIndex = foldersPath.findIndex(folder => folder.id === enteredFolder.id);\n let newFoldersPath = foldersPath.slice();\n\n if (folderIndex === -1) {\n // Append folder to the path if it's not already in the folders path\n newFoldersPath = newFoldersPath.concat([\n {\n ...enteredFolder,\n },\n ]);\n } else {\n // Otherwise, remove all folders that came after the entered folder\n newFoldersPath = newFoldersPath.slice(0, folderIndex + 1);\n }\n\n const newState = { foldersPath: newFoldersPath };\n if (contentExplorerMode !== ContentExplorerModes.MULTI_SELECT) {\n newState.selectedItems = {};\n }\n\n this.setState(newState);\n if (onFoldersPathUpdate) {\n onFoldersPathUpdate(newFoldersPath);\n }\n\n onEnterFolder(enteredFolder, newFoldersPath);\n };\n\n handleFoldersPathUpdated = newFoldersPath => {\n const { onFoldersPathUpdate } = this.props;\n\n this.setState({\n foldersPath: newFoldersPath,\n });\n if (onFoldersPathUpdate) {\n onFoldersPathUpdate(newFoldersPath);\n }\n };\n\n handleSearchSubmit = searchQuery => {\n const { onSearchSubmit } = this.props;\n\n this.setState({ isInSearchMode: true });\n onSearchSubmit(searchQuery);\n };\n\n handleExitSearch = folderBeforeSearch => {\n const { onExitSearch } = this.props;\n\n this.setState({ isInSearchMode: false });\n onExitSearch(folderBeforeSearch);\n };\n\n handleItemClick = ({ event, index }) => {\n const { contentExplorerMode, items, onSelectItem, onSelectedItemsUpdate } = this.props;\n const { selectedItems } = this.state;\n const item = items[index];\n\n if (item.isDisabled || item.isLoading || item.isActionDisabled) {\n return;\n }\n\n // Prevent the event from bubbling up (so our content explorer click handler doesn't fire)\n event.stopPropagation();\n\n let newSelectedItems = {};\n if (contentExplorerMode === ContentExplorerModes.MULTI_SELECT) {\n newSelectedItems = this.toggleSelectedItem(selectedItems, item);\n } else {\n newSelectedItems[item.id] = item;\n }\n\n this.setState({ selectedItems: newSelectedItems, isSelectAllChecked: false });\n\n if (onSelectedItemsUpdate) {\n onSelectedItemsUpdate(newSelectedItems);\n }\n\n if (onSelectItem) {\n onSelectItem(item, index);\n }\n };\n\n handleItemDoubleClick = ({ index }) => {\n const { items, onChooseItems } = this.props;\n const item = items[index];\n\n if (item.isDisabled || item.isLoading) {\n return;\n }\n\n if (item.type === TYPE_FOLDER) {\n this.enterFolder(item);\n } else if (!item.isActionDisabled) {\n onChooseItems([item]);\n }\n this.setState({ isSelectAllChecked: false });\n };\n\n handleItemNameClick = (event, index) => {\n const { items } = this.props;\n const item = items[index];\n\n if (item.isDisabled || item.isLoading) {\n return;\n }\n\n if (item.type !== TYPE_FOLDER) {\n return;\n }\n\n // Prevent the event from bubbling (so our row click handler doesn't fire)\n event.preventDefault();\n event.stopPropagation();\n\n this.enterFolder(item);\n this.setState({ isSelectAllChecked: false });\n };\n\n toggleSelectedItem = (selectedItems, item) => {\n const result = { ...selectedItems };\n if (result[item.id]) {\n delete result[item.id];\n } else {\n result[item.id] = item;\n }\n\n return result;\n };\n\n selectAll = () => {\n const { items } = this.props;\n const { selectedItems } = this.state;\n const result = { ...selectedItems };\n items.forEach(item => {\n if (!result[item.id]) {\n result[item.id] = item;\n }\n });\n\n return result;\n };\n\n unselectAll = () => {\n const { items } = this.props;\n const { selectedItems } = this.state;\n const result = { ...selectedItems };\n items.forEach(item => {\n if (result[item.id]) {\n delete result[item.id];\n }\n });\n\n return result;\n };\n\n handleSelectAllClick = async () => {\n const { items, onSelectedItemsUpdate } = this.props;\n if (items && items[0] && items[0].isLoading) {\n return;\n }\n const { isSelectAllChecked } = this.state;\n const newSelectedItems = isSelectAllChecked ? this.unselectAll() : this.selectAll();\n this.setState({ selectedItems: newSelectedItems, isSelectAllChecked: !isSelectAllChecked });\n if (onSelectedItemsUpdate) {\n onSelectedItemsUpdate(newSelectedItems);\n }\n };\n\n renderItemListEmptyState = () => {\n const { foldersPath, isInSearchMode } = this.state;\n const isViewingSearchResults = isInSearchMode && foldersPath.length === 1;\n\n return <ContentExplorerEmptyState isSearch={isViewingSearchResults} />;\n };\n\n render() {\n const {\n actionButtonsProps,\n additionalColumns,\n isNoSelectionAllowed = false,\n breadcrumbProps,\n cancelButtonProps,\n chooseButtonProps,\n chooseButtonText,\n className,\n contentExplorerMode,\n customInput,\n hasFolderTreeBreadcrumbs,\n headerActionsAccessory,\n onChooseItems,\n onMoveItem,\n onCopyItem,\n onCancelButtonClick,\n onCreateNewFolderButtonClick,\n onSelectedClick,\n onViewSelectedClick,\n showCreateNewFolderButton,\n isChooseButtonLoading,\n isCopyButtonLoading,\n isCreateNewFolderAllowed,\n isMoveButtonLoading,\n isResponsive = false,\n isSelectAllAllowed,\n items,\n numItemsPerPage,\n numTotalItems,\n onLoadMoreItems,\n includeSubfoldersProps,\n itemIconRenderer,\n itemNameLinkRenderer,\n itemButtonRenderer,\n itemRowHeight,\n itemRowRenderer,\n listHeaderHeight,\n listHeaderRenderer,\n listWidth,\n listHeight,\n searchInputProps,\n ...rest\n } = this.props;\n const { isInSearchMode, foldersPath, selectedItems, isSelectAllChecked } = this.state;\n const isViewingSearchResults = isInSearchMode && foldersPath.length === 1;\n const currentFolder = this.getCurrentFolder();\n const contentExplorerProps = omit(rest, [\n 'initialFoldersPath',\n 'onEnterFolder',\n 'onSelectItem',\n 'onSearchSubmit',\n 'onExitSearch',\n 'initialSelectedItems',\n 'onFoldersPathUpdate',\n 'onSelectedItemsUpdate',\n ]);\n const canIncludeSubfolders = !!includeSubfoldersProps;\n const hasSubheader = canIncludeSubfolders || isSelectAllAllowed;\n\n const selectedItemsIds = Object.keys(selectedItems);\n let areActionButtonsDisabled;\n // NOTE: it almost feels like this whole section should be inside the\n // ContentExplorerActionButtons instead. There's a lot of implicit knowledge\n // of what the action buttons are and what they should be doing.\n if (contentExplorerMode === ContentExplorerModes.MULTI_SELECT) {\n // NOTE: only expecting to have 1 (choose) button so as long as something\n // is selected and that item's isActionDisabled is false, we enable the action button\n areActionButtonsDisabled =\n (selectedItemsIds.length === 0 && !isNoSelectionAllowed) ||\n (selectedItemsIds.length === 1 && selectedItems[selectedItemsIds[0]].isActionDisabled);\n } else if (isViewingSearchResults || contentExplorerMode === ContentExplorerModes.SELECT_FILE) {\n // Buttons are only enabled when an item is selected\n // When viewing search results, there is no \"current folder\"\n // When selecting a file, the file can only selected from the list\n areActionButtonsDisabled =\n selectedItemsIds.length === 0 || selectedItems[selectedItemsIds[0]].isActionDisabled;\n } else {\n // Buttons are enabled using the selected item or the current folder if no item is selected\n areActionButtonsDisabled =\n selectedItemsIds.length > 0\n ? selectedItems[selectedItemsIds[0]].isActionDisabled\n : currentFolder.isActionDisabled;\n }\n\n return (\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events\n <div\n className={classNames('content-explorer', className, {\n 'bdl-ContentExplorer--responsive': isResponsive,\n })}\n data-testid=\"content-explorer\"\n onClick={this.handleContentExplorerClick}\n ref={ref => {\n this.domNode = ref;\n }}\n {...contentExplorerProps}\n >\n <ContentExplorerHeaderActions\n breadcrumbProps={breadcrumbProps}\n contentExplorerMode={contentExplorerMode}\n customInput={customInput}\n foldersPath={foldersPath}\n hasFolderTreeBreadcrumbs={hasFolderTreeBreadcrumbs}\n isCreateNewFolderAllowed={isCreateNewFolderAllowed}\n onCreateNewFolderButtonClick={onCreateNewFolderButtonClick}\n onFoldersPathUpdated={this.handleFoldersPathUpdated}\n onEnterFolder={this.enterFolder}\n onExitSearch={this.handleExitSearch}\n onSearchSubmit={this.handleSearchSubmit}\n numTotalItems={numTotalItems}\n searchInputProps={searchInputProps}\n showCreateNewFolderButton={showCreateNewFolderButton}\n >\n {headerActionsAccessory}\n </ContentExplorerHeaderActions>\n {hasSubheader && (\n <div className=\"bdl-ContentExplorer-subheader\">\n {canIncludeSubfolders && <ContentExplorerIncludeSubfolders {...includeSubfoldersProps} />}\n {isSelectAllAllowed && (\n <ContentExplorerSelectAll\n handleSelectAllClick={this.handleSelectAllClick}\n isLabelHidden={canIncludeSubfolders}\n isSelectAllChecked={isSelectAllChecked}\n numTotalItems={numTotalItems}\n />\n )}\n </div>\n )}\n <ItemList\n additionalColumns={additionalColumns}\n contentExplorerMode={contentExplorerMode}\n headerHeight={listHeaderHeight}\n headerRenderer={listHeaderRenderer}\n height={listHeight}\n isResponsive={isResponsive}\n itemButtonRenderer={itemButtonRenderer}\n itemIconRenderer={itemIconRenderer}\n itemNameLinkRenderer={itemNameLinkRenderer}\n items={items}\n itemRowRenderer={itemRowRenderer}\n noItemsRenderer={this.renderItemListEmptyState}\n numItemsPerPage={numItemsPerPage}\n numTotalItems={numTotalItems}\n onItemClick={this.handleItemClick}\n onItemDoubleClick={this.handleItemDoubleClick}\n onItemNameClick={this.handleItemNameClick}\n onLoadMoreItems={onLoadMoreItems}\n rowHeight={itemRowHeight}\n selectedItems={selectedItems}\n width={listWidth}\n />\n <ContentExplorerActionButtons\n actionButtonsProps={actionButtonsProps}\n areButtonsDisabled={areActionButtonsDisabled}\n cancelButtonProps={cancelButtonProps}\n canIncludeSubfolders={canIncludeSubfolders}\n chooseButtonProps={chooseButtonProps}\n chooseButtonText={chooseButtonText}\n contentExplorerMode={contentExplorerMode}\n currentFolder={currentFolder}\n isChooseButtonLoading={isChooseButtonLoading}\n isCopyButtonLoading={isCopyButtonLoading}\n isMoveButtonLoading={isMoveButtonLoading}\n isResponsive={isResponsive}\n isSelectAllAllowed={isSelectAllAllowed}\n onCancelClick={onCancelButtonClick}\n onChooseClick={onChooseItems}\n onCopyClick={onCopyItem}\n onFoldersPathUpdated={this.handleFoldersPathUpdated}\n onSelectedClick={onSelectedClick}\n onMoveClick={onMoveItem}\n onViewSelectedClick={onViewSelectedClick}\n selectedItems={selectedItems}\n isNoSelectionAllowed={isNoSelectionAllowed}\n />\n </div>\n );\n }\n}\n\nexport default ContentExplorer;\n"],"file":"ContentExplorer.js"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/features/content-explorer/content-explorer/ContentExplorer.js"],"names":["PropTypes","React","Component","classNames","omit","ContentExplorerHeaderActions","ContentExplorerEmptyState","ContentExplorerActionButtons","ContentExplorerSelectAll","ContentExplorerIncludeSubfolders","ItemList","ContentExplorerModePropType","FoldersPathPropType","ItemsPropType","ContentExplorerModes","TYPE_FOLDER","ContentExplorer","props","items","selectedItems","state","every","item","id","isLoading","node","className","limit","nodeOfInterest","counter","parentNode","includes","contentExplorerMode","MULTI_SELECT","event","isInside","domNode","contains","target","shouldDeselectItems","deselectItems","enteredFolder","onEnterFolder","onFoldersPathUpdate","foldersPath","folderIndex","findIndex","folder","newFoldersPath","slice","concat","newState","setState","searchQuery","onSearchSubmit","isInSearchMode","folderBeforeSearch","onExitSearch","index","onSelectItem","onSelectedItemsUpdate","isDisabled","isActionDisabled","stopPropagation","newSelectedItems","toggleSelectedItem","onChooseItems","type","enterFolder","preventDefault","result","forEach","isLoadingItems","isSelectAllChecked","unselectAll","selectAll","isViewingSearchResults","length","initialSelectedItems","initialFoldersPath","document","addEventListener","handleDocumentClick","prevInitialFoldersPath","isSelectAllAllowed","handleFoldersPathUpdated","areAllItemsSelected","removeEventListener","actionButtonsProps","additionalColumns","isNoSelectionAllowed","breadcrumbProps","cancelButtonProps","chooseButtonProps","chooseButtonText","customInput","hasFolderTreeBreadcrumbs","headerActionsAccessory","onMoveItem","onCopyItem","onCancelButtonClick","onCreateNewFolderButtonClick","onSelectedClick","onViewSelectedClick","showCreateNewFolderButton","isChooseButtonLoading","isCopyButtonLoading","isCreateNewFolderAllowed","isMoveButtonLoading","isResponsive","numItemsPerPage","numTotalItems","onLoadMoreItems","includeSubfoldersProps","itemIconRenderer","itemNameLinkRenderer","itemButtonRenderer","itemRowHeight","itemRowRenderer","listHeaderHeight","listHeaderRenderer","listWidth","listHeight","searchInputProps","rest","currentFolder","getCurrentFolder","contentExplorerProps","canIncludeSubfolders","hasSubheader","selectedItemsIds","Object","keys","areActionButtonsDisabled","SELECT_FILE","handleContentExplorerClick","ref","handleExitSearch","handleSearchSubmit","handleSelectAllClick","renderItemListEmptyState","handleItemClick","handleItemDoubleClick","handleItemNameClick","object","arrayOf","element","bool","string","isRequired","func","number"],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types';\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport omit from 'lodash/omit';\n\nimport ContentExplorerHeaderActions from './ContentExplorerHeaderActions';\nimport ContentExplorerEmptyState from './ContentExplorerEmptyState';\nimport ContentExplorerActionButtons from './ContentExplorerActionButtons';\nimport ContentExplorerSelectAll from './ContentExplorerSelectAll';\nimport ContentExplorerIncludeSubfolders from './ContentExplorerIncludeSubfolders';\n\nimport ItemList from '../item-list';\nimport { ContentExplorerModePropType, FoldersPathPropType, ItemsPropType } from '../prop-types';\nimport ContentExplorerModes from '../modes';\n\nimport { TYPE_FOLDER } from '../../../constants';\n\nimport './ContentExplorer.scss';\n\nclass ContentExplorer extends Component {\n static propTypes = {\n /** Props for the action buttons container */\n actionButtonsProps: PropTypes.object,\n /**\n * Extra columns displayed in the folders table after folder name column\n * Each column has to be a Column element\n */\n additionalColumns: PropTypes.arrayOf(PropTypes.element),\n /** Allow users to choose no selections in MULTI_SELECT mode, defaults to false */\n isNoSelectionAllowed: PropTypes.bool,\n /** Props for breadcrumbs */\n breadcrumbProps: PropTypes.object,\n /** Props for the cancel button */\n cancelButtonProps: PropTypes.object,\n /** Props for the choose button */\n chooseButtonProps: PropTypes.object,\n /** Custom text for the choose button */\n chooseButtonText: PropTypes.node,\n /** Adds class name. */\n className: PropTypes.string,\n /** Configures the content explorer based on the user's intended action (ex. select file or move/copy) */\n contentExplorerMode: ContentExplorerModePropType.isRequired,\n /** Props that contains the custom search input. Is rendered in header actions */\n customInput: PropTypes.func,\n /** Whether the user can see the breadcrumbs represented with the folder tree button */\n hasFolderTreeBreadcrumbs: PropTypes.bool,\n /** Any extra items in the header to the right of the search input (and new folder button) */\n headerActionsAccessory: PropTypes.node,\n /** Props for the include subfolders toggle */\n includeSubfoldersProps: PropTypes.object,\n /** Initial path of folders. The last folder in the array is the current folder. */\n initialFoldersPath: FoldersPathPropType.isRequired,\n /** Initial items that will show up as selected */\n initialSelectedItems: PropTypes.object,\n /** Whether to use the responsive version */\n isResponsive: PropTypes.bool,\n /**\n * Called when the current folder changes\n *\n * @param {Object} enteredFolder\n * @param {Array} newFoldersPath\n */\n onEnterFolder: PropTypes.func.isRequired,\n /** Called when the folders path is updated\n *\n * @param {Array} newFoldersPath\n */\n onFoldersPathUpdate: PropTypes.func,\n /** Called whenever the selected items list changes\n *\n * @param {Object} selectedItems\n */\n onSelectedItemsUpdate: PropTypes.func,\n /**\n * Called when an item is selected\n *\n * @param {Object} selectedItem\n * @param {number} selectedItemIndex\n */\n onSelectItem: PropTypes.func,\n /**\n * Called when an item is chosen\n *\n * @param {Object[]} chosenItems\n */\n onChooseItems: PropTypes.func,\n /** Called when selected button is clicked */\n onSelectedClick: PropTypes.func,\n /** Called when the number of items selected text is clicked */\n onViewSelectedClick: PropTypes.func,\n /**\n * Called when a destination folder has been selected for moving an item to\n *\n * @param {Object} destFolder destination folder\n */\n onMoveItem: PropTypes.func,\n /**\n * Called when a destination folder has been selected for copying an item to\n *\n * @param {Object} destFolder destination folder\n */\n onCopyItem: PropTypes.func,\n /** Called when cancel button is clicked */\n onCancelButtonClick: PropTypes.func,\n /** Called when new folder button is clicked */\n onCreateNewFolderButtonClick: PropTypes.func,\n /** Whether the new folder button should be shown */\n showCreateNewFolderButton: PropTypes.bool,\n /** Whether the choose button should be shown with a loading indicator */\n isChooseButtonLoading: PropTypes.bool,\n /** Whether the copy button should be shown with a loading indicator */\n isCopyButtonLoading: PropTypes.bool,\n /** Whether the user has permission to create a new folder */\n isCreateNewFolderAllowed: PropTypes.bool,\n /** Whether the user can see select all checkbox */\n isSelectAllAllowed: PropTypes.bool,\n /** Whether the move button should be shown with a loading indicator */\n isMoveButtonLoading: PropTypes.bool,\n /**\n * Called when a search query is submitted.\n *\n * @param {string} searchQuery\n */\n onSearchSubmit: PropTypes.func.isRequired,\n /**\n * Called when search mode is exited. An updated items list should now be passed in to display the user's file tree.\n *\n * @param {Object} folderBeforeSearch the previous folder object before entering search mode\n */\n onExitSearch: PropTypes.func.isRequired,\n /** List of items to display */\n items: ItemsPropType.isRequired,\n /** Number of items to load per page as the user scrolls */\n numItemsPerPage: PropTypes.number,\n /** Total number of items across all pages */\n numTotalItems: PropTypes.number,\n /** Called to load more items */\n onLoadMoreItems: PropTypes.func,\n /** Used to render item icons in the list. Overrides the default icons. */\n itemIconRenderer: PropTypes.func,\n /** Used to render item name links in the list. Overrides the default links. */\n itemNameLinkRenderer: PropTypes.func,\n /** Used to render item buttons in the list. Overrides the default buttons. */\n itemButtonRenderer: PropTypes.func,\n /** Height of an item row */\n itemRowHeight: PropTypes.number,\n /** Used to render the row element for items on the list. Allows row customizations such as adding tooltips, etc. */\n itemRowRenderer: PropTypes.func,\n /** Height of the item list header, defaults to 0, which makes header not visible */\n listHeaderHeight: PropTypes.number,\n /** Used to render the header row on the item list */\n listHeaderRenderer: PropTypes.func,\n /** Width of the item list */\n listWidth: PropTypes.number.isRequired,\n /** Height of the item list */\n listHeight: PropTypes.number.isRequired,\n /** Props for the search input */\n searchInputProps: PropTypes.object,\n };\n\n static defaultProps = {\n actionButtonsProps: {},\n cancelButtonProps: {},\n chooseButtonProps: {},\n className: '',\n searchInputProps: {},\n };\n\n constructor(props) {\n super(props);\n this.state = {\n selectedItems: props.initialSelectedItems || {},\n foldersPath: props.initialFoldersPath,\n isInSearchMode: false,\n isSelectAllChecked: false,\n };\n }\n\n componentDidMount() {\n document.addEventListener('click', this.handleDocumentClick, true);\n }\n\n componentDidUpdate({ initialFoldersPath: prevInitialFoldersPath }) {\n const { initialFoldersPath, isSelectAllAllowed } = this.props;\n const { isSelectAllChecked } = this.state;\n\n if (prevInitialFoldersPath !== initialFoldersPath) {\n this.handleFoldersPathUpdated(initialFoldersPath);\n }\n if (!this.isLoadingItems() && isSelectAllAllowed) {\n const areAllItemsSelected = this.areAllItemsSelected();\n if (areAllItemsSelected !== isSelectAllChecked) {\n this.setState({ isSelectAllChecked: areAllItemsSelected });\n }\n }\n }\n\n componentWillUnmount() {\n document.removeEventListener('click', this.handleDocumentClick, true);\n }\n\n areAllItemsSelected = () => {\n const { items } = this.props;\n const { selectedItems } = this.state;\n\n return items.every(item => selectedItems[item.id]);\n };\n\n isLoadingItems = () => {\n return this.props?.items?.[0]?.isLoading;\n };\n\n getCurrentFolder() {\n const { foldersPath } = this.state;\n return foldersPath[foldersPath.length - 1];\n }\n\n /**\n * Traverse the hirerachy up to the limit to see if any of the parent has the className\n */\n doAncestersContainClassname = (node, className, limit) => {\n let nodeOfInterest = node;\n let counter = 0;\n while (nodeOfInterest.parentNode && counter < limit) {\n // Done traversing (Document node does not have classnames)\n if (!nodeOfInterest.parentNode.className) {\n break;\n }\n\n if (nodeOfInterest.parentNode.className.includes(className)) {\n return true;\n }\n\n nodeOfInterest = nodeOfInterest.parentNode;\n counter += 1;\n }\n\n return false;\n };\n\n shouldDeselectItems = () => {\n const { contentExplorerMode } = this.props;\n\n return (\n // always deselect when not in multi select mode\n contentExplorerMode !== ContentExplorerModes.MULTI_SELECT\n );\n };\n\n handleDocumentClick = event => {\n const isInside = (this.domNode && this.domNode.contains(event.target)) || this.domNode === event.target;\n\n if (!isInside && this.shouldDeselectItems()) {\n this.deselectItems();\n }\n };\n\n handleContentExplorerClick = () => {\n if (this.shouldDeselectItems()) {\n this.deselectItems();\n }\n };\n\n deselectItems() {\n const { onSelectedItemsUpdate } = this.props;\n this.setState({\n selectedItems: {},\n });\n if (onSelectedItemsUpdate) {\n onSelectedItemsUpdate({});\n }\n }\n\n enterFolder = enteredFolder => {\n const { contentExplorerMode, onEnterFolder, onFoldersPathUpdate } = this.props;\n const { foldersPath } = this.state;\n\n const folderIndex = foldersPath.findIndex(folder => folder.id === enteredFolder.id);\n let newFoldersPath = foldersPath.slice();\n\n if (folderIndex === -1) {\n // Append folder to the path if it's not already in the folders path\n newFoldersPath = newFoldersPath.concat([\n {\n ...enteredFolder,\n },\n ]);\n } else {\n // Otherwise, remove all folders that came after the entered folder\n newFoldersPath = newFoldersPath.slice(0, folderIndex + 1);\n }\n\n const newState = { foldersPath: newFoldersPath };\n if (contentExplorerMode !== ContentExplorerModes.MULTI_SELECT) {\n newState.selectedItems = {};\n }\n\n this.setState(newState);\n if (onFoldersPathUpdate) {\n onFoldersPathUpdate(newFoldersPath);\n }\n\n onEnterFolder(enteredFolder, newFoldersPath);\n };\n\n handleFoldersPathUpdated = newFoldersPath => {\n const { onFoldersPathUpdate } = this.props;\n\n this.setState({\n foldersPath: newFoldersPath,\n });\n if (onFoldersPathUpdate) {\n onFoldersPathUpdate(newFoldersPath);\n }\n };\n\n handleSearchSubmit = searchQuery => {\n const { onSearchSubmit } = this.props;\n\n this.setState({ isInSearchMode: true });\n onSearchSubmit(searchQuery);\n };\n\n handleExitSearch = folderBeforeSearch => {\n const { onExitSearch } = this.props;\n\n this.setState({ isInSearchMode: false });\n onExitSearch(folderBeforeSearch);\n };\n\n handleItemClick = ({ event, index }) => {\n const { contentExplorerMode, items, onSelectItem, onSelectedItemsUpdate } = this.props;\n const { selectedItems } = this.state;\n const item = items[index];\n\n if (item.isDisabled || item.isLoading || item.isActionDisabled) {\n return;\n }\n\n // Prevent the event from bubbling up (so our content explorer click handler doesn't fire)\n event.stopPropagation();\n\n let newSelectedItems = {};\n if (contentExplorerMode === ContentExplorerModes.MULTI_SELECT) {\n newSelectedItems = this.toggleSelectedItem(selectedItems, item);\n } else {\n newSelectedItems[item.id] = item;\n }\n\n this.setState({ selectedItems: newSelectedItems });\n\n if (onSelectedItemsUpdate) {\n onSelectedItemsUpdate(newSelectedItems);\n }\n\n if (onSelectItem) {\n onSelectItem(item, index);\n }\n };\n\n handleItemDoubleClick = ({ index }) => {\n const { items, onChooseItems } = this.props;\n const item = items[index];\n\n if (item.isDisabled || item.isLoading) {\n return;\n }\n\n if (item.type === TYPE_FOLDER) {\n this.enterFolder(item);\n } else if (!item.isActionDisabled) {\n onChooseItems([item]);\n }\n };\n\n handleItemNameClick = (event, index) => {\n const { items } = this.props;\n const item = items[index];\n\n if (item.isDisabled || item.isLoading) {\n return;\n }\n\n if (item.type !== TYPE_FOLDER) {\n return;\n }\n\n // Prevent the event from bubbling (so our row click handler doesn't fire)\n event.preventDefault();\n event.stopPropagation();\n\n this.enterFolder(item);\n };\n\n toggleSelectedItem = (selectedItems, item) => {\n const result = { ...selectedItems };\n if (result[item.id]) {\n delete result[item.id];\n } else {\n result[item.id] = item;\n }\n\n return result;\n };\n\n selectAll = () => {\n const { items } = this.props;\n const { selectedItems } = this.state;\n const result = { ...selectedItems };\n items.forEach(item => {\n if (!result[item.id]) {\n result[item.id] = item;\n }\n });\n\n return result;\n };\n\n unselectAll = () => {\n const { items } = this.props;\n const { selectedItems } = this.state;\n const result = { ...selectedItems };\n items.forEach(item => {\n if (result[item.id]) {\n delete result[item.id];\n }\n });\n\n return result;\n };\n\n handleSelectAllClick = async () => {\n const { onSelectedItemsUpdate } = this.props;\n if (this.isLoadingItems()) {\n return;\n }\n const { isSelectAllChecked } = this.state;\n const newSelectedItems = isSelectAllChecked ? this.unselectAll() : this.selectAll();\n this.setState({ selectedItems: newSelectedItems, isSelectAllChecked: !isSelectAllChecked });\n if (onSelectedItemsUpdate) {\n onSelectedItemsUpdate(newSelectedItems);\n }\n };\n\n renderItemListEmptyState = () => {\n const { foldersPath, isInSearchMode } = this.state;\n const isViewingSearchResults = isInSearchMode && foldersPath.length === 1;\n\n return <ContentExplorerEmptyState isSearch={isViewingSearchResults} />;\n };\n\n render() {\n const {\n actionButtonsProps,\n additionalColumns,\n isNoSelectionAllowed = false,\n breadcrumbProps,\n cancelButtonProps,\n chooseButtonProps,\n chooseButtonText,\n className,\n contentExplorerMode,\n customInput,\n hasFolderTreeBreadcrumbs,\n headerActionsAccessory,\n onChooseItems,\n onMoveItem,\n onCopyItem,\n onCancelButtonClick,\n onCreateNewFolderButtonClick,\n onSelectedClick,\n onViewSelectedClick,\n showCreateNewFolderButton,\n isChooseButtonLoading,\n isCopyButtonLoading,\n isCreateNewFolderAllowed,\n isMoveButtonLoading,\n isResponsive = false,\n isSelectAllAllowed,\n items,\n numItemsPerPage,\n numTotalItems,\n onLoadMoreItems,\n includeSubfoldersProps,\n itemIconRenderer,\n itemNameLinkRenderer,\n itemButtonRenderer,\n itemRowHeight,\n itemRowRenderer,\n listHeaderHeight,\n listHeaderRenderer,\n listWidth,\n listHeight,\n searchInputProps,\n ...rest\n } = this.props;\n const { isInSearchMode, foldersPath, selectedItems, isSelectAllChecked } = this.state;\n const isViewingSearchResults = isInSearchMode && foldersPath.length === 1;\n const currentFolder = this.getCurrentFolder();\n const contentExplorerProps = omit(rest, [\n 'initialFoldersPath',\n 'onEnterFolder',\n 'onSelectItem',\n 'onSearchSubmit',\n 'onExitSearch',\n 'initialSelectedItems',\n 'onFoldersPathUpdate',\n 'onSelectedItemsUpdate',\n ]);\n const canIncludeSubfolders = !!includeSubfoldersProps;\n const hasSubheader = canIncludeSubfolders || isSelectAllAllowed;\n\n const selectedItemsIds = Object.keys(selectedItems);\n let areActionButtonsDisabled;\n // NOTE: it almost feels like this whole section should be inside the\n // ContentExplorerActionButtons instead. There's a lot of implicit knowledge\n // of what the action buttons are and what they should be doing.\n if (contentExplorerMode === ContentExplorerModes.MULTI_SELECT) {\n // NOTE: only expecting to have 1 (choose) button so as long as something\n // is selected and that item's isActionDisabled is false, we enable the action button\n areActionButtonsDisabled =\n (selectedItemsIds.length === 0 && !isNoSelectionAllowed) ||\n (selectedItemsIds.length === 1 && selectedItems[selectedItemsIds[0]].isActionDisabled);\n } else if (isViewingSearchResults || contentExplorerMode === ContentExplorerModes.SELECT_FILE) {\n // Buttons are only enabled when an item is selected\n // When viewing search results, there is no \"current folder\"\n // When selecting a file, the file can only selected from the list\n areActionButtonsDisabled =\n selectedItemsIds.length === 0 || selectedItems[selectedItemsIds[0]].isActionDisabled;\n } else {\n // Buttons are enabled using the selected item or the current folder if no item is selected\n areActionButtonsDisabled =\n selectedItemsIds.length > 0\n ? selectedItems[selectedItemsIds[0]].isActionDisabled\n : currentFolder.isActionDisabled;\n }\n\n return (\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events\n <div\n className={classNames('content-explorer', className, {\n 'bdl-ContentExplorer--responsive': isResponsive,\n })}\n data-testid=\"content-explorer\"\n onClick={this.handleContentExplorerClick}\n ref={ref => {\n this.domNode = ref;\n }}\n {...contentExplorerProps}\n >\n <ContentExplorerHeaderActions\n breadcrumbProps={breadcrumbProps}\n contentExplorerMode={contentExplorerMode}\n customInput={customInput}\n foldersPath={foldersPath}\n hasFolderTreeBreadcrumbs={hasFolderTreeBreadcrumbs}\n isCreateNewFolderAllowed={isCreateNewFolderAllowed}\n onCreateNewFolderButtonClick={onCreateNewFolderButtonClick}\n onFoldersPathUpdated={this.handleFoldersPathUpdated}\n onEnterFolder={this.enterFolder}\n onExitSearch={this.handleExitSearch}\n onSearchSubmit={this.handleSearchSubmit}\n numTotalItems={numTotalItems}\n searchInputProps={searchInputProps}\n showCreateNewFolderButton={showCreateNewFolderButton}\n >\n {headerActionsAccessory}\n </ContentExplorerHeaderActions>\n {hasSubheader && (\n <div className=\"bdl-ContentExplorer-subheader\">\n {canIncludeSubfolders && <ContentExplorerIncludeSubfolders {...includeSubfoldersProps} />}\n {isSelectAllAllowed && (\n <ContentExplorerSelectAll\n handleSelectAllClick={this.handleSelectAllClick}\n isLabelHidden={canIncludeSubfolders}\n isSelectAllChecked={isSelectAllChecked}\n numTotalItems={numTotalItems}\n />\n )}\n </div>\n )}\n <ItemList\n additionalColumns={additionalColumns}\n contentExplorerMode={contentExplorerMode}\n headerHeight={listHeaderHeight}\n headerRenderer={listHeaderRenderer}\n height={listHeight}\n isResponsive={isResponsive}\n itemButtonRenderer={itemButtonRenderer}\n itemIconRenderer={itemIconRenderer}\n itemNameLinkRenderer={itemNameLinkRenderer}\n items={items}\n itemRowRenderer={itemRowRenderer}\n noItemsRenderer={this.renderItemListEmptyState}\n numItemsPerPage={numItemsPerPage}\n numTotalItems={numTotalItems}\n onItemClick={this.handleItemClick}\n onItemDoubleClick={this.handleItemDoubleClick}\n onItemNameClick={this.handleItemNameClick}\n onLoadMoreItems={onLoadMoreItems}\n rowHeight={itemRowHeight}\n selectedItems={selectedItems}\n width={listWidth}\n />\n <ContentExplorerActionButtons\n actionButtonsProps={actionButtonsProps}\n areButtonsDisabled={areActionButtonsDisabled}\n cancelButtonProps={cancelButtonProps}\n canIncludeSubfolders={canIncludeSubfolders}\n chooseButtonProps={chooseButtonProps}\n chooseButtonText={chooseButtonText}\n contentExplorerMode={contentExplorerMode}\n currentFolder={currentFolder}\n isChooseButtonLoading={isChooseButtonLoading}\n isCopyButtonLoading={isCopyButtonLoading}\n isMoveButtonLoading={isMoveButtonLoading}\n isResponsive={isResponsive}\n isSelectAllAllowed={isSelectAllAllowed}\n onCancelClick={onCancelButtonClick}\n onChooseClick={onChooseItems}\n onCopyClick={onCopyItem}\n onFoldersPathUpdated={this.handleFoldersPathUpdated}\n onSelectedClick={onSelectedClick}\n onMoveClick={onMoveItem}\n onViewSelectedClick={onViewSelectedClick}\n selectedItems={selectedItems}\n isNoSelectionAllowed={isNoSelectionAllowed}\n />\n </div>\n );\n }\n}\n\nexport default ContentExplorer;\n"],"file":"ContentExplorer.js"}
|
package/package.json
CHANGED
|
@@ -181,17 +181,35 @@ class ContentExplorer extends Component {
|
|
|
181
181
|
}
|
|
182
182
|
|
|
183
183
|
componentDidUpdate({ initialFoldersPath: prevInitialFoldersPath }) {
|
|
184
|
-
const { initialFoldersPath } = this.props;
|
|
184
|
+
const { initialFoldersPath, isSelectAllAllowed } = this.props;
|
|
185
|
+
const { isSelectAllChecked } = this.state;
|
|
185
186
|
|
|
186
187
|
if (prevInitialFoldersPath !== initialFoldersPath) {
|
|
187
188
|
this.handleFoldersPathUpdated(initialFoldersPath);
|
|
188
189
|
}
|
|
190
|
+
if (!this.isLoadingItems() && isSelectAllAllowed) {
|
|
191
|
+
const areAllItemsSelected = this.areAllItemsSelected();
|
|
192
|
+
if (areAllItemsSelected !== isSelectAllChecked) {
|
|
193
|
+
this.setState({ isSelectAllChecked: areAllItemsSelected });
|
|
194
|
+
}
|
|
195
|
+
}
|
|
189
196
|
}
|
|
190
197
|
|
|
191
198
|
componentWillUnmount() {
|
|
192
199
|
document.removeEventListener('click', this.handleDocumentClick, true);
|
|
193
200
|
}
|
|
194
201
|
|
|
202
|
+
areAllItemsSelected = () => {
|
|
203
|
+
const { items } = this.props;
|
|
204
|
+
const { selectedItems } = this.state;
|
|
205
|
+
|
|
206
|
+
return items.every(item => selectedItems[item.id]);
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
isLoadingItems = () => {
|
|
210
|
+
return this.props?.items?.[0]?.isLoading;
|
|
211
|
+
};
|
|
212
|
+
|
|
195
213
|
getCurrentFolder() {
|
|
196
214
|
const { foldersPath } = this.state;
|
|
197
215
|
return foldersPath[foldersPath.length - 1];
|
|
@@ -329,7 +347,7 @@ class ContentExplorer extends Component {
|
|
|
329
347
|
newSelectedItems[item.id] = item;
|
|
330
348
|
}
|
|
331
349
|
|
|
332
|
-
this.setState({ selectedItems: newSelectedItems
|
|
350
|
+
this.setState({ selectedItems: newSelectedItems });
|
|
333
351
|
|
|
334
352
|
if (onSelectedItemsUpdate) {
|
|
335
353
|
onSelectedItemsUpdate(newSelectedItems);
|
|
@@ -353,7 +371,6 @@ class ContentExplorer extends Component {
|
|
|
353
371
|
} else if (!item.isActionDisabled) {
|
|
354
372
|
onChooseItems([item]);
|
|
355
373
|
}
|
|
356
|
-
this.setState({ isSelectAllChecked: false });
|
|
357
374
|
};
|
|
358
375
|
|
|
359
376
|
handleItemNameClick = (event, index) => {
|
|
@@ -373,7 +390,6 @@ class ContentExplorer extends Component {
|
|
|
373
390
|
event.stopPropagation();
|
|
374
391
|
|
|
375
392
|
this.enterFolder(item);
|
|
376
|
-
this.setState({ isSelectAllChecked: false });
|
|
377
393
|
};
|
|
378
394
|
|
|
379
395
|
toggleSelectedItem = (selectedItems, item) => {
|
|
@@ -414,8 +430,8 @@ class ContentExplorer extends Component {
|
|
|
414
430
|
};
|
|
415
431
|
|
|
416
432
|
handleSelectAllClick = async () => {
|
|
417
|
-
const {
|
|
418
|
-
if (
|
|
433
|
+
const { onSelectedItemsUpdate } = this.props;
|
|
434
|
+
if (this.isLoadingItems()) {
|
|
419
435
|
return;
|
|
420
436
|
}
|
|
421
437
|
const { isSelectAllChecked } = this.state;
|
|
@@ -453,6 +453,72 @@ describe('features/content-explorer/content-explorer/ContentExplorer', () => {
|
|
|
453
453
|
|
|
454
454
|
expect(onSelectItemSpy.notCalled).toBe(true);
|
|
455
455
|
});
|
|
456
|
+
|
|
457
|
+
test('should set isSelectAllChecked to true if all displayed items are selected and isSelectAllAllowed is true', () => {
|
|
458
|
+
const clickedItemIndex = 0;
|
|
459
|
+
const clickedItemIndex2 = 1;
|
|
460
|
+
const clickedItemIndex3 = 2;
|
|
461
|
+
const items = [
|
|
462
|
+
{ id: '1', name: 'item1' },
|
|
463
|
+
{ id: '2', name: 'item2' },
|
|
464
|
+
{ id: '3', name: 'item3' },
|
|
465
|
+
];
|
|
466
|
+
const wrapper = renderComponent(
|
|
467
|
+
{
|
|
468
|
+
items,
|
|
469
|
+
isSelectAllAllowed: true,
|
|
470
|
+
onSelectItem: onSelectItemSpy,
|
|
471
|
+
contentExplorerMode: ContentExplorerModes.MULTI_SELECT,
|
|
472
|
+
},
|
|
473
|
+
true,
|
|
474
|
+
);
|
|
475
|
+
|
|
476
|
+
wrapper
|
|
477
|
+
.find('.table-row')
|
|
478
|
+
.at(clickedItemIndex)
|
|
479
|
+
.simulate('click');
|
|
480
|
+
|
|
481
|
+
wrapper
|
|
482
|
+
.find('.table-row')
|
|
483
|
+
.at(clickedItemIndex2)
|
|
484
|
+
.simulate('click');
|
|
485
|
+
|
|
486
|
+
wrapper
|
|
487
|
+
.find('.table-row')
|
|
488
|
+
.at(clickedItemIndex3)
|
|
489
|
+
.simulate('click');
|
|
490
|
+
|
|
491
|
+
expect(Object.keys(wrapper.state('selectedItems')).length).toBe(3);
|
|
492
|
+
expect(wrapper.state('isSelectAllChecked')).toBe(true);
|
|
493
|
+
});
|
|
494
|
+
|
|
495
|
+
test('should set isSelectAllChecked to false if an item is unchecked while isSelectAllChecked is true', () => {
|
|
496
|
+
const clickedItemIndex = 0;
|
|
497
|
+
const clickedItemIndex2 = 1;
|
|
498
|
+
const items = [
|
|
499
|
+
{ id: '1', name: 'item1' },
|
|
500
|
+
{ id: '2', name: 'item2' },
|
|
501
|
+
];
|
|
502
|
+
const selectedItems = { '1': items[clickedItemIndex], '2': items[clickedItemIndex2] };
|
|
503
|
+
const wrapper = renderComponent(
|
|
504
|
+
{
|
|
505
|
+
items,
|
|
506
|
+
isSelectAllAllowed: true,
|
|
507
|
+
onSelectItem: onSelectItemSpy,
|
|
508
|
+
contentExplorerMode: ContentExplorerModes.MULTI_SELECT,
|
|
509
|
+
},
|
|
510
|
+
true,
|
|
511
|
+
);
|
|
512
|
+
wrapper.setState({ selectedItems, isSelectAllChecked: true });
|
|
513
|
+
|
|
514
|
+
wrapper
|
|
515
|
+
.find('.table-row')
|
|
516
|
+
.at(clickedItemIndex)
|
|
517
|
+
.simulate('click');
|
|
518
|
+
|
|
519
|
+
expect(Object.keys(wrapper.state('selectedItems')).length).toBe(1);
|
|
520
|
+
expect(wrapper.state('isSelectAllChecked')).toBe(false);
|
|
521
|
+
});
|
|
456
522
|
});
|
|
457
523
|
|
|
458
524
|
describe('onChooseItems', () => {
|