box-ui-elements 16.1.0-beta.16 → 16.1.0-beta.17
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 +27 -9
- package/es/features/content-explorer/content-explorer/ContentExplorer.js.flow +20 -5
- package/es/features/content-explorer/content-explorer/ContentExplorer.js.map +1 -1
- package/es/features/content-explorer/content-explorer-modal/ContentExplorerModal.js +1 -0
- package/es/features/content-explorer/content-explorer-modal/ContentExplorerModal.js.flow +6 -1
- package/es/features/content-explorer/content-explorer-modal/ContentExplorerModal.js.map +1 -1
- package/es/features/content-explorer/content-explorer-modal-container/ContentExplorerModalContainer.js +19 -4
- package/es/features/content-explorer/content-explorer-modal-container/ContentExplorerModalContainer.js.flow +13 -2
- package/es/features/content-explorer/content-explorer-modal-container/ContentExplorerModalContainer.js.map +1 -1
- package/es/features/content-explorer/item-list/ItemList.js +10 -2
- package/es/features/content-explorer/item-list/ItemList.js.flow +9 -0
- package/es/features/content-explorer/item-list/ItemList.js.map +1 -1
- package/es/features/metadata-instance-editor/TemplateDropdown.scss +2 -2
- package/package.json +1 -1
- package/src/features/content-explorer/content-explorer/ContentExplorer.js +20 -5
- package/src/features/content-explorer/content-explorer-modal/ContentExplorerModal.js +6 -1
- package/src/features/content-explorer/content-explorer-modal-container/ContentExplorerModalContainer.js +13 -2
- package/src/features/content-explorer/item-list/ItemList.js +9 -0
- package/src/features/content-explorer/item-list/__tests__/ItemList.test.js +46 -0
- package/src/features/metadata-instance-editor/TemplateDropdown.scss +2 -2
|
@@ -378,6 +378,7 @@ function (_Component) {
|
|
|
378
378
|
|
|
379
379
|
var _this$props4 = this.props,
|
|
380
380
|
actionButtonsProps = _this$props4.actionButtonsProps,
|
|
381
|
+
additionalColumns = _this$props4.additionalColumns,
|
|
381
382
|
breadcrumbProps = _this$props4.breadcrumbProps,
|
|
382
383
|
cancelButtonProps = _this$props4.cancelButtonProps,
|
|
383
384
|
chooseButtonProps = _this$props4.chooseButtonProps,
|
|
@@ -407,12 +408,14 @@ function (_Component) {
|
|
|
407
408
|
itemIconRenderer = _this$props4.itemIconRenderer,
|
|
408
409
|
itemNameLinkRenderer = _this$props4.itemNameLinkRenderer,
|
|
409
410
|
itemButtonRenderer = _this$props4.itemButtonRenderer,
|
|
411
|
+
itemRowHeight = _this$props4.itemRowHeight,
|
|
410
412
|
itemRowRenderer = _this$props4.itemRowRenderer,
|
|
413
|
+
listHeaderHeight = _this$props4.listHeaderHeight,
|
|
414
|
+
listHeaderRenderer = _this$props4.listHeaderRenderer,
|
|
411
415
|
listWidth = _this$props4.listWidth,
|
|
412
416
|
listHeight = _this$props4.listHeight,
|
|
413
417
|
searchInputProps = _this$props4.searchInputProps,
|
|
414
|
-
|
|
415
|
-
rest = _objectWithoutProperties(_this$props4, ["actionButtonsProps", "breadcrumbProps", "cancelButtonProps", "chooseButtonProps", "chooseButtonText", "className", "contentExplorerMode", "customInput", "headerActionsAccessory", "onChooseItems", "onMoveItem", "onCopyItem", "onCancelButtonClick", "onCreateNewFolderButtonClick", "onSelectedClick", "showCreateNewFolderButton", "isChooseButtonLoading", "isCopyButtonLoading", "isCreateNewFolderAllowed", "isMoveButtonLoading", "isResponsive", "isSelectAllAllowed", "items", "numItemsPerPage", "numTotalItems", "onLoadMoreItems", "itemIconRenderer", "itemNameLinkRenderer", "itemButtonRenderer", "itemRowRenderer", "listWidth", "listHeight", "searchInputProps", "rowHeight"]);
|
|
418
|
+
rest = _objectWithoutProperties(_this$props4, ["actionButtonsProps", "additionalColumns", "breadcrumbProps", "cancelButtonProps", "chooseButtonProps", "chooseButtonText", "className", "contentExplorerMode", "customInput", "headerActionsAccessory", "onChooseItems", "onMoveItem", "onCopyItem", "onCancelButtonClick", "onCreateNewFolderButtonClick", "onSelectedClick", "showCreateNewFolderButton", "isChooseButtonLoading", "isCopyButtonLoading", "isCreateNewFolderAllowed", "isMoveButtonLoading", "isResponsive", "isSelectAllAllowed", "items", "numItemsPerPage", "numTotalItems", "onLoadMoreItems", "itemIconRenderer", "itemNameLinkRenderer", "itemButtonRenderer", "itemRowHeight", "itemRowRenderer", "listHeaderHeight", "listHeaderRenderer", "listWidth", "listHeight", "searchInputProps"]);
|
|
416
419
|
|
|
417
420
|
var _this$state2 = this.state,
|
|
418
421
|
isInSearchMode = _this$state2.isInSearchMode,
|
|
@@ -428,7 +431,7 @@ function (_Component) {
|
|
|
428
431
|
// of what the action buttons are and what they should be doing.
|
|
429
432
|
|
|
430
433
|
if (contentExplorerMode === ContentExplorerModes.MULTI_SELECT) {
|
|
431
|
-
// NOTE:
|
|
434
|
+
// NOTE: only expecting to have 1 (choose) button so as long as something
|
|
432
435
|
// is selected and that item's isActionDisabled is false, we enable the action button
|
|
433
436
|
areActionButtonsDisabled = selectedItemsIds.length === 0 || selectedItemsIds.length === 1 && selectedItems[selectedItemsIds[0]].isActionDisabled;
|
|
434
437
|
} else if (isViewingSearchResults || contentExplorerMode === ContentExplorerModes.SELECT_FILE) {
|
|
@@ -469,7 +472,10 @@ function (_Component) {
|
|
|
469
472
|
isSelectAllChecked: isSelectAllChecked,
|
|
470
473
|
handleSelectAllClick: this.handleSelectAllClick
|
|
471
474
|
}), React.createElement(ItemList, {
|
|
475
|
+
additionalColumns: additionalColumns,
|
|
472
476
|
contentExplorerMode: contentExplorerMode,
|
|
477
|
+
headerHeight: listHeaderHeight,
|
|
478
|
+
headerRenderer: listHeaderRenderer,
|
|
473
479
|
height: listHeight,
|
|
474
480
|
isResponsive: isResponsive,
|
|
475
481
|
itemButtonRenderer: itemButtonRenderer,
|
|
@@ -484,9 +490,9 @@ function (_Component) {
|
|
|
484
490
|
onItemDoubleClick: this.handleItemDoubleClick,
|
|
485
491
|
onItemNameClick: this.handleItemNameClick,
|
|
486
492
|
onLoadMoreItems: onLoadMoreItems,
|
|
493
|
+
rowHeight: itemRowHeight,
|
|
487
494
|
selectedItems: selectedItems,
|
|
488
|
-
width: listWidth
|
|
489
|
-
rowHeight: rowHeight
|
|
495
|
+
width: listWidth
|
|
490
496
|
}), React.createElement(ContentExplorerActionButtons, {
|
|
491
497
|
actionButtonsProps: actionButtonsProps,
|
|
492
498
|
areButtonsDisabled: areActionButtonsDisabled,
|
|
@@ -517,6 +523,12 @@ _defineProperty(ContentExplorer, "propTypes", {
|
|
|
517
523
|
/** Props for the action buttons container */
|
|
518
524
|
actionButtonsProps: PropTypes.object,
|
|
519
525
|
|
|
526
|
+
/**
|
|
527
|
+
* Extra columns displayed in the folders table after folder name column
|
|
528
|
+
* Each column has to be a Column element
|
|
529
|
+
*/
|
|
530
|
+
additionalColumns: PropTypes.arrayOf(PropTypes.element),
|
|
531
|
+
|
|
520
532
|
/** Props for breadcrumbs */
|
|
521
533
|
breadcrumbProps: PropTypes.object,
|
|
522
534
|
|
|
@@ -649,9 +661,18 @@ _defineProperty(ContentExplorer, "propTypes", {
|
|
|
649
661
|
/** Used to render item buttons in the list. Overrides the default buttons. */
|
|
650
662
|
itemButtonRenderer: PropTypes.func,
|
|
651
663
|
|
|
664
|
+
/** Height of an item row */
|
|
665
|
+
itemRowHeight: PropTypes.number,
|
|
666
|
+
|
|
652
667
|
/** Used to render the row element for items on the list. Allows row customizations such as adding tooltips, etc. */
|
|
653
668
|
itemRowRenderer: PropTypes.func,
|
|
654
669
|
|
|
670
|
+
/** Height of the item list header, defaults to 0, which makes header not visible */
|
|
671
|
+
listHeaderHeight: PropTypes.number,
|
|
672
|
+
|
|
673
|
+
/** Used to render the header row on the item list */
|
|
674
|
+
listHeaderRenderer: PropTypes.func,
|
|
675
|
+
|
|
655
676
|
/** Width of the item list */
|
|
656
677
|
listWidth: PropTypes.number.isRequired,
|
|
657
678
|
|
|
@@ -659,10 +680,7 @@ _defineProperty(ContentExplorer, "propTypes", {
|
|
|
659
680
|
listHeight: PropTypes.number.isRequired,
|
|
660
681
|
|
|
661
682
|
/** Props for the search input */
|
|
662
|
-
searchInputProps: PropTypes.object
|
|
663
|
-
|
|
664
|
-
/** Height of the row */
|
|
665
|
-
rowHeight: PropTypes.number
|
|
683
|
+
searchInputProps: PropTypes.object
|
|
666
684
|
});
|
|
667
685
|
|
|
668
686
|
_defineProperty(ContentExplorer, "defaultProps", {
|
|
@@ -19,6 +19,11 @@ class ContentExplorer extends Component {
|
|
|
19
19
|
static propTypes = {
|
|
20
20
|
/** Props for the action buttons container */
|
|
21
21
|
actionButtonsProps: PropTypes.object,
|
|
22
|
+
/**
|
|
23
|
+
* Extra columns displayed in the folders table after folder name column
|
|
24
|
+
* Each column has to be a Column element
|
|
25
|
+
*/
|
|
26
|
+
additionalColumns: PropTypes.arrayOf(PropTypes.element),
|
|
22
27
|
/** Props for breadcrumbs */
|
|
23
28
|
breadcrumbProps: PropTypes.object,
|
|
24
29
|
/** Props for the cancel button */
|
|
@@ -117,16 +122,20 @@ class ContentExplorer extends Component {
|
|
|
117
122
|
itemNameLinkRenderer: PropTypes.func,
|
|
118
123
|
/** Used to render item buttons in the list. Overrides the default buttons. */
|
|
119
124
|
itemButtonRenderer: PropTypes.func,
|
|
125
|
+
/** Height of an item row */
|
|
126
|
+
itemRowHeight: PropTypes.number,
|
|
120
127
|
/** Used to render the row element for items on the list. Allows row customizations such as adding tooltips, etc. */
|
|
121
128
|
itemRowRenderer: PropTypes.func,
|
|
129
|
+
/** Height of the item list header, defaults to 0, which makes header not visible */
|
|
130
|
+
listHeaderHeight: PropTypes.number,
|
|
131
|
+
/** Used to render the header row on the item list */
|
|
132
|
+
listHeaderRenderer: PropTypes.func,
|
|
122
133
|
/** Width of the item list */
|
|
123
134
|
listWidth: PropTypes.number.isRequired,
|
|
124
135
|
/** Height of the item list */
|
|
125
136
|
listHeight: PropTypes.number.isRequired,
|
|
126
137
|
/** Props for the search input */
|
|
127
138
|
searchInputProps: PropTypes.object,
|
|
128
|
-
/** Height of the row */
|
|
129
|
-
rowHeight: PropTypes.number,
|
|
130
139
|
};
|
|
131
140
|
|
|
132
141
|
static defaultProps = {
|
|
@@ -391,6 +400,7 @@ class ContentExplorer extends Component {
|
|
|
391
400
|
render() {
|
|
392
401
|
const {
|
|
393
402
|
actionButtonsProps,
|
|
403
|
+
additionalColumns,
|
|
394
404
|
breadcrumbProps,
|
|
395
405
|
cancelButtonProps,
|
|
396
406
|
chooseButtonProps,
|
|
@@ -419,11 +429,13 @@ class ContentExplorer extends Component {
|
|
|
419
429
|
itemIconRenderer,
|
|
420
430
|
itemNameLinkRenderer,
|
|
421
431
|
itemButtonRenderer,
|
|
432
|
+
itemRowHeight,
|
|
422
433
|
itemRowRenderer,
|
|
434
|
+
listHeaderHeight,
|
|
435
|
+
listHeaderRenderer,
|
|
423
436
|
listWidth,
|
|
424
437
|
listHeight,
|
|
425
438
|
searchInputProps,
|
|
426
|
-
rowHeight,
|
|
427
439
|
...rest
|
|
428
440
|
} = this.props;
|
|
429
441
|
const { isInSearchMode, foldersPath, selectedItems, isSelectAllChecked } = this.state;
|
|
@@ -443,7 +455,7 @@ class ContentExplorer extends Component {
|
|
|
443
455
|
// ContentExplorerActionButtons instead. There's a lot of implicit knowledge
|
|
444
456
|
// of what the action buttons are and what they should be doing.
|
|
445
457
|
if (contentExplorerMode === ContentExplorerModes.MULTI_SELECT) {
|
|
446
|
-
// NOTE:
|
|
458
|
+
// NOTE: only expecting to have 1 (choose) button so as long as something
|
|
447
459
|
// is selected and that item's isActionDisabled is false, we enable the action button
|
|
448
460
|
areActionButtonsDisabled =
|
|
449
461
|
selectedItemsIds.length === 0 ||
|
|
@@ -499,7 +511,10 @@ class ContentExplorer extends Component {
|
|
|
499
511
|
/>
|
|
500
512
|
)}
|
|
501
513
|
<ItemList
|
|
514
|
+
additionalColumns={additionalColumns}
|
|
502
515
|
contentExplorerMode={contentExplorerMode}
|
|
516
|
+
headerHeight={listHeaderHeight}
|
|
517
|
+
headerRenderer={listHeaderRenderer}
|
|
503
518
|
height={listHeight}
|
|
504
519
|
isResponsive={isResponsive}
|
|
505
520
|
itemButtonRenderer={itemButtonRenderer}
|
|
@@ -514,9 +529,9 @@ class ContentExplorer extends Component {
|
|
|
514
529
|
onItemDoubleClick={this.handleItemDoubleClick}
|
|
515
530
|
onItemNameClick={this.handleItemNameClick}
|
|
516
531
|
onLoadMoreItems={onLoadMoreItems}
|
|
532
|
+
rowHeight={itemRowHeight}
|
|
517
533
|
selectedItems={selectedItems}
|
|
518
534
|
width={listWidth}
|
|
519
|
-
rowHeight={rowHeight}
|
|
520
535
|
/>
|
|
521
536
|
<ContentExplorerActionButtons
|
|
522
537
|
actionButtonsProps={actionButtonsProps}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/features/content-explorer/content-explorer/ContentExplorer.js"],"names":["PropTypes","React","Component","classNames","omit","ContentExplorerHeaderActions","ContentExplorerEmptyState","ContentExplorerActionButtons","ContentExplorerSelectAll","ItemList","ContentExplorerModePropType","FoldersPathPropType","ItemsPropType","ContentExplorerModes","ItemTypes","ContentExplorer","props","node","className","limit","nodeOfInterest","counter","parentNode","includes","contentExplorerMode","MULTI_SELECT","event","isInside","domNode","contains","target","shouldDeselectItems","deselectItems","enteredFolder","onEnterFolder","foldersPath","state","folderIndex","findIndex","folder","id","newFoldersPath","slice","concat","newState","selectedItems","setState","searchQuery","onSearchSubmit","isInSearchMode","folderBeforeSearch","onExitSearch","index","items","onSelectItem","item","isDisabled","isLoading","stopPropagation","newSelectedItems","toggleSelectedItem","isSelectAllChecked","onChooseItems","type","FOLDER","enterFolder","preventDefault","result","forEach","unselectAll","selectAll","isViewingSearchResults","length","initialSelectedItems","initialFoldersPath","document","addEventListener","handleDocumentClick","prevInitialFoldersPath","removeEventListener","actionButtonsProps","breadcrumbProps","cancelButtonProps","chooseButtonProps","chooseButtonText","customInput","headerActionsAccessory","onMoveItem","onCopyItem","onCancelButtonClick","onCreateNewFolderButtonClick","onSelectedClick","showCreateNewFolderButton","isChooseButtonLoading","isCopyButtonLoading","isCreateNewFolderAllowed","isMoveButtonLoading","isResponsive","isSelectAllAllowed","numItemsPerPage","numTotalItems","onLoadMoreItems","itemIconRenderer","itemNameLinkRenderer","itemButtonRenderer","itemRowRenderer","listWidth","listHeight","searchInputProps","rowHeight","rest","currentFolder","getCurrentFolder","contentExplorerProps","selectedItemsIds","Object","keys","areActionButtonsDisabled","isActionDisabled","SELECT_FILE","handleContentExplorerClick","ref","handleFoldersPathUpdated","handleExitSearch","handleSearchSubmit","handleSelectAllClick","renderItemListEmptyState","handleItemClick","handleItemDoubleClick","handleItemNameClick","object","string","isRequired","func","bool","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';\n\nimport ItemList from '../item-list';\nimport { ContentExplorerModePropType, FoldersPathPropType, ItemsPropType } from '../prop-types';\nimport ContentExplorerModes from '../modes';\nimport ItemTypes from '../item-types';\n\nimport './ContentExplorer.scss';\n\nclass ContentExplorer extends Component {\n static propTypes = {\n /** Props for the action buttons container */\n actionButtonsProps: PropTypes.object,\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 /** Any extra items in the header to the right of the search input (and new folder button) */\n headerActionsAccessory: PropTypes.node,\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 /**\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 /**\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 /** Used to render the row element for items on the list. Allows row customizations such as adding tooltips, etc. */\n itemRowRenderer: 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 /** Height of the row */\n rowHeight: PropTypes.number,\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.setState({\n foldersPath: initialFoldersPath,\n });\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 this.setState({\n selectedItems: {},\n });\n }\n\n enterFolder = enteredFolder => {\n const { contentExplorerMode, onEnterFolder } = 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\n onEnterFolder(enteredFolder, newFoldersPath);\n };\n\n handleFoldersPathUpdated = newFoldersPath => {\n this.setState({\n foldersPath: 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 } = this.props;\n const { selectedItems } = this.state;\n const item = items[index];\n\n if (item.isDisabled || item.isLoading) {\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 (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 === ItemTypes.FOLDER) {\n this.enterFolder(item);\n } else {\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 !== ItemTypes.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 // check if the items list is still loading\n const { items } = 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 };\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 breadcrumbProps,\n cancelButtonProps,\n chooseButtonProps,\n chooseButtonText,\n className,\n contentExplorerMode,\n customInput,\n headerActionsAccessory,\n onChooseItems,\n onMoveItem,\n onCopyItem,\n onCancelButtonClick,\n onCreateNewFolderButtonClick,\n onSelectedClick,\n showCreateNewFolderButton,\n isChooseButtonLoading,\n isCopyButtonLoading,\n isCreateNewFolderAllowed,\n isMoveButtonLoading,\n isResponsive = false,\n isSelectAllAllowed,\n items,\n numItemsPerPage,\n numTotalItems,\n onLoadMoreItems,\n itemIconRenderer,\n itemNameLinkRenderer,\n itemButtonRenderer,\n itemRowRenderer,\n listWidth,\n listHeight,\n searchInputProps,\n rowHeight,\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 ]);\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:o nly 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 ||\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 isCreateNewFolderAllowed={isCreateNewFolderAllowed}\n onCreateNewFolderButtonClick={onCreateNewFolderButtonClick}\n onFoldersPathUpdated={this.handleFoldersPathUpdated}\n onEnterFolder={this.enterFolder}\n onExitSearch={this.handleExitSearch}\n onSearchSubmit={this.handleSearchSubmit}\n searchInputProps={searchInputProps}\n showCreateNewFolderButton={showCreateNewFolderButton}\n >\n {headerActionsAccessory}\n </ContentExplorerHeaderActions>\n {isSelectAllAllowed && (\n <ContentExplorerSelectAll\n numTotalItems={numTotalItems}\n isSelectAllChecked={isSelectAllChecked}\n handleSelectAllClick={this.handleSelectAllClick}\n />\n )}\n <ItemList\n contentExplorerMode={contentExplorerMode}\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 selectedItems={selectedItems}\n width={listWidth}\n rowHeight={rowHeight}\n />\n <ContentExplorerActionButtons\n actionButtonsProps={actionButtonsProps}\n areButtonsDisabled={areActionButtonsDisabled}\n cancelButtonProps={cancelButtonProps}\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 onCancelClick={onCancelButtonClick}\n onChooseClick={onChooseItems}\n onCopyClick={onCopyItem}\n onSelectedClick={onSelectedClick}\n onMoveClick={onMoveItem}\n selectedItems={selectedItems}\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","ItemList","ContentExplorerModePropType","FoldersPathPropType","ItemsPropType","ContentExplorerModes","ItemTypes","ContentExplorer","props","node","className","limit","nodeOfInterest","counter","parentNode","includes","contentExplorerMode","MULTI_SELECT","event","isInside","domNode","contains","target","shouldDeselectItems","deselectItems","enteredFolder","onEnterFolder","foldersPath","state","folderIndex","findIndex","folder","id","newFoldersPath","slice","concat","newState","selectedItems","setState","searchQuery","onSearchSubmit","isInSearchMode","folderBeforeSearch","onExitSearch","index","items","onSelectItem","item","isDisabled","isLoading","stopPropagation","newSelectedItems","toggleSelectedItem","isSelectAllChecked","onChooseItems","type","FOLDER","enterFolder","preventDefault","result","forEach","unselectAll","selectAll","isViewingSearchResults","length","initialSelectedItems","initialFoldersPath","document","addEventListener","handleDocumentClick","prevInitialFoldersPath","removeEventListener","actionButtonsProps","additionalColumns","breadcrumbProps","cancelButtonProps","chooseButtonProps","chooseButtonText","customInput","headerActionsAccessory","onMoveItem","onCopyItem","onCancelButtonClick","onCreateNewFolderButtonClick","onSelectedClick","showCreateNewFolderButton","isChooseButtonLoading","isCopyButtonLoading","isCreateNewFolderAllowed","isMoveButtonLoading","isResponsive","isSelectAllAllowed","numItemsPerPage","numTotalItems","onLoadMoreItems","itemIconRenderer","itemNameLinkRenderer","itemButtonRenderer","itemRowHeight","itemRowRenderer","listHeaderHeight","listHeaderRenderer","listWidth","listHeight","searchInputProps","rest","currentFolder","getCurrentFolder","contentExplorerProps","selectedItemsIds","Object","keys","areActionButtonsDisabled","isActionDisabled","SELECT_FILE","handleContentExplorerClick","ref","handleFoldersPathUpdated","handleExitSearch","handleSearchSubmit","handleSelectAllClick","renderItemListEmptyState","handleItemClick","handleItemDoubleClick","handleItemNameClick","object","arrayOf","element","string","isRequired","func","bool","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';\n\nimport ItemList from '../item-list';\nimport { ContentExplorerModePropType, FoldersPathPropType, ItemsPropType } from '../prop-types';\nimport ContentExplorerModes from '../modes';\nimport ItemTypes from '../item-types';\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 /** 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 /** Any extra items in the header to the right of the search input (and new folder button) */\n headerActionsAccessory: PropTypes.node,\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 /**\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 /**\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.setState({\n foldersPath: initialFoldersPath,\n });\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 this.setState({\n selectedItems: {},\n });\n }\n\n enterFolder = enteredFolder => {\n const { contentExplorerMode, onEnterFolder } = 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\n onEnterFolder(enteredFolder, newFoldersPath);\n };\n\n handleFoldersPathUpdated = newFoldersPath => {\n this.setState({\n foldersPath: 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 } = this.props;\n const { selectedItems } = this.state;\n const item = items[index];\n\n if (item.isDisabled || item.isLoading) {\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 (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 === ItemTypes.FOLDER) {\n this.enterFolder(item);\n } else {\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 !== ItemTypes.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 // check if the items list is still loading\n const { items } = 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 };\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 breadcrumbProps,\n cancelButtonProps,\n chooseButtonProps,\n chooseButtonText,\n className,\n contentExplorerMode,\n customInput,\n headerActionsAccessory,\n onChooseItems,\n onMoveItem,\n onCopyItem,\n onCancelButtonClick,\n onCreateNewFolderButtonClick,\n onSelectedClick,\n showCreateNewFolderButton,\n isChooseButtonLoading,\n isCopyButtonLoading,\n isCreateNewFolderAllowed,\n isMoveButtonLoading,\n isResponsive = false,\n isSelectAllAllowed,\n items,\n numItemsPerPage,\n numTotalItems,\n onLoadMoreItems,\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 ]);\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 ||\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 isCreateNewFolderAllowed={isCreateNewFolderAllowed}\n onCreateNewFolderButtonClick={onCreateNewFolderButtonClick}\n onFoldersPathUpdated={this.handleFoldersPathUpdated}\n onEnterFolder={this.enterFolder}\n onExitSearch={this.handleExitSearch}\n onSearchSubmit={this.handleSearchSubmit}\n searchInputProps={searchInputProps}\n showCreateNewFolderButton={showCreateNewFolderButton}\n >\n {headerActionsAccessory}\n </ContentExplorerHeaderActions>\n {isSelectAllAllowed && (\n <ContentExplorerSelectAll\n numTotalItems={numTotalItems}\n isSelectAllChecked={isSelectAllChecked}\n handleSelectAllClick={this.handleSelectAllClick}\n />\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 chooseButtonProps={chooseButtonProps}\n chooseButtonText={chooseButtonText}\n contentExplorerMode={contentExplorerMode}\n currentFolder={currentFolder}\n isChooseButtonLoading={isChooseButtonLoading}\n isCopyButtonLoading={isCopyButtonLoading}\n isMoveButtonLoading={isMoveButtonLoading}\n isResponsive={isResponsive}\n onCancelClick={onCancelButtonClick}\n onChooseClick={onChooseItems}\n onCopyClick={onCopyItem}\n onSelectedClick={onSelectedClick}\n onMoveClick={onMoveItem}\n selectedItems={selectedItems}\n />\n </div>\n );\n }\n}\n\nexport default ContentExplorer;\n"],"file":"ContentExplorer.js"}
|
|
@@ -6,6 +6,7 @@ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) r
|
|
|
6
6
|
|
|
7
7
|
import * as React from 'react';
|
|
8
8
|
import classNames from 'classnames';
|
|
9
|
+
import Column from '@box/react-virtualized/dist/commonjs/Table/Column';
|
|
9
10
|
import ContentExplorer from '../content-explorer';
|
|
10
11
|
import { Modal } from '../../../components/modal';
|
|
11
12
|
import './ContentExplorerModal.scss';
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import classNames from 'classnames';
|
|
4
4
|
|
|
5
|
+
import Column from '@box/react-virtualized/dist/commonjs/Table/Column';
|
|
5
6
|
import ContentExplorer from '../content-explorer';
|
|
6
7
|
import { Modal } from '../../../components/modal';
|
|
7
8
|
|
|
@@ -10,16 +11,20 @@ import type { BreadcrumbProps } from '../../../components/breadcrumb/Breadcrumb'
|
|
|
10
11
|
import './ContentExplorerModal.scss';
|
|
11
12
|
|
|
12
13
|
type Props = {
|
|
14
|
+
additionalColumns?: Array<React.ComponentType<Column>>,
|
|
13
15
|
breadcrumbProps?: BreadcrumbProps,
|
|
14
16
|
className?: string,
|
|
15
17
|
customInput?: React.ComponentType<any>,
|
|
16
18
|
description?: string,
|
|
17
19
|
isOpen?: boolean,
|
|
18
20
|
isResponsive?: boolean,
|
|
21
|
+
itemRowHeight?: number,
|
|
22
|
+
itemRowRenderer?: Function,
|
|
23
|
+
listHeaderHeight?: number,
|
|
24
|
+
listHeaderRenderer?: Function,
|
|
19
25
|
onRequestClose?: Function,
|
|
20
26
|
onSelectItem?: (item: Object, index: number) => void,
|
|
21
27
|
onSelectedClick?: () => void,
|
|
22
|
-
rowHeight?: number,
|
|
23
28
|
title?: string,
|
|
24
29
|
};
|
|
25
30
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/features/content-explorer/content-explorer-modal/ContentExplorerModal.js"],"names":["React","classNames","ContentExplorer","Modal","ContentExplorerModal","breadcrumbProps","className","customInput","title","description","isOpen","isResponsive","onRequestClose","onSelectedClick","onSelectItem","rest"],"mappings":";;;;;;AACA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AACA,OAAOC,UAAP,MAAuB,YAAvB;AAEA,OAAOC,eAAP,MAA4B,qBAA5B;AACA,SAASC,KAAT,QAAsB,2BAAtB;AAIA,OAAO,6BAAP;;
|
|
1
|
+
{"version":3,"sources":["../../../../src/features/content-explorer/content-explorer-modal/ContentExplorerModal.js"],"names":["React","classNames","Column","ContentExplorer","Modal","ContentExplorerModal","breadcrumbProps","className","customInput","title","description","isOpen","isResponsive","onRequestClose","onSelectedClick","onSelectItem","rest"],"mappings":";;;;;;AACA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AACA,OAAOC,UAAP,MAAuB,YAAvB;AAEA,OAAOC,MAAP,MAAmB,mDAAnB;AACA,OAAOC,eAAP,MAA4B,qBAA5B;AACA,SAASC,KAAT,QAAsB,2BAAtB;AAIA,OAAO,6BAAP;;AAoBA,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAuB;AAAA,kCACzBC,eADyB;AAAA,MACzBA,eADyB,qCACP,EADO;AAAA,4BAEzBC,SAFyB;AAAA,MAEzBA,SAFyB,+BAEb,EAFa;AAAA,MAGzBC,WAHyB,QAGzBA,WAHyB;AAAA,wBAIzBC,KAJyB;AAAA,MAIzBA,KAJyB,2BAIjB,EAJiB;AAAA,8BAKzBC,WALyB;AAAA,MAKzBA,WALyB,iCAKX,EALW;AAAA,yBAMzBC,MANyB;AAAA,MAMzBA,MANyB,4BAMhB,KANgB;AAAA,+BAOzBC,YAPyB;AAAA,MAOzBA,YAPyB,kCAOV,KAPU;AAAA,MAQzBC,cARyB,QAQzBA,cARyB;AAAA,MASzBC,eATyB,QASzBA,eATyB;AAAA,MAUzBC,YAVyB,QAUzBA,YAVyB;AAAA,MAWtBC,IAXsB;;AAAA,SAazB,oBAAC,KAAD;AACI,IAAA,KAAK,EAAEP,KADX;AAEI,IAAA,SAAS,EAAER,UAAU,CAAC,wBAAD,EAA2BM,SAA3B,EAAsC;AACvD,8CAAwCK;AADe,KAAtC,CAFzB;AAKI,IAAA,MAAM,EAAED,MALZ;AAMI,IAAA,cAAc,EAAEE;AANpB,KAQKH,WARL,EASI,oBAAC,eAAD;AACI,IAAA,eAAe,EAAEJ,eADrB;AAEI,IAAA,WAAW,EAAEE,WAFjB;AAGI,IAAA,YAAY,EAAEI,YAHlB;AAII,IAAA,mBAAmB,EAAEC,cAJzB;AAKI,IAAA,eAAe,EAAEC,eALrB;AAMI,IAAA,YAAY,EAAEC,YANlB;AAOI,IAAA,SAAS,EAAE,GAPf;AAQI,IAAA,UAAU,EAAE;AARhB,KASQC,IATR,EATJ,CAbyB;AAAA,CAA7B;;AAoCA,eAAeX,oBAAf","sourcesContent":["/* @flow */\nimport * as React from 'react';\nimport classNames from 'classnames';\n\nimport Column from '@box/react-virtualized/dist/commonjs/Table/Column';\nimport ContentExplorer from '../content-explorer';\nimport { Modal } from '../../../components/modal';\n\nimport type { BreadcrumbProps } from '../../../components/breadcrumb/Breadcrumb';\n\nimport './ContentExplorerModal.scss';\n\ntype Props = {\n additionalColumns?: Array<React.ComponentType<Column>>,\n breadcrumbProps?: BreadcrumbProps,\n className?: string,\n customInput?: React.ComponentType<any>,\n description?: string,\n isOpen?: boolean,\n isResponsive?: boolean,\n itemRowHeight?: number,\n itemRowRenderer?: Function,\n listHeaderHeight?: number,\n listHeaderRenderer?: Function,\n onRequestClose?: Function,\n onSelectItem?: (item: Object, index: number) => void,\n onSelectedClick?: () => void,\n title?: string,\n};\n\nconst ContentExplorerModal = ({\n breadcrumbProps = {},\n className = '',\n customInput,\n title = '',\n description = '',\n isOpen = false,\n isResponsive = false,\n onRequestClose,\n onSelectedClick,\n onSelectItem,\n ...rest\n}: Props) => (\n <Modal\n title={title}\n className={classNames('content-explorer-modal', className, {\n 'bdl-ContentExplorerModal--responsive': isResponsive,\n })}\n isOpen={isOpen}\n onRequestClose={onRequestClose}\n >\n {description}\n <ContentExplorer\n breadcrumbProps={breadcrumbProps}\n customInput={customInput}\n isResponsive={isResponsive}\n onCancelButtonClick={onRequestClose}\n onSelectedClick={onSelectedClick}\n onSelectItem={onSelectItem}\n listWidth={560}\n listHeight={285}\n {...rest}\n />\n </Modal>\n);\n\nexport default ContentExplorerModal;\n"],"file":"ContentExplorerModal.js"}
|
|
@@ -138,6 +138,12 @@ function (_Component) {
|
|
|
138
138
|
}(Component);
|
|
139
139
|
|
|
140
140
|
_defineProperty(ContentExplorerModalContainer, "propTypes", {
|
|
141
|
+
/**
|
|
142
|
+
* Extra columns displayed in the folders table after folder name column
|
|
143
|
+
* Each column has to be a Column element
|
|
144
|
+
*/
|
|
145
|
+
additionalColumns: PropTypes.arrayOf(PropTypes.element),
|
|
146
|
+
|
|
141
147
|
/** Breadcrumb component options */
|
|
142
148
|
breadcrumbProps: BreadcrumbPropType,
|
|
143
149
|
|
|
@@ -272,6 +278,18 @@ _defineProperty(ContentExplorerModalContainer, "propTypes", {
|
|
|
272
278
|
/** Used to render item buttons in the list. Overrides the default buttons. */
|
|
273
279
|
itemButtonRenderer: PropTypes.func,
|
|
274
280
|
|
|
281
|
+
/** Height of an item row */
|
|
282
|
+
itemRowHeight: PropTypes.number,
|
|
283
|
+
|
|
284
|
+
/** Used to render the row element for items on the list */
|
|
285
|
+
itemRowRenderer: PropTypes.func,
|
|
286
|
+
|
|
287
|
+
/** Height of the item list header, defaults to 0, which makes header not visible */
|
|
288
|
+
listHeaderHeight: PropTypes.number,
|
|
289
|
+
|
|
290
|
+
/** Used to render the header row on the item list */
|
|
291
|
+
listHeaderRenderer: PropTypes.func,
|
|
292
|
+
|
|
275
293
|
/** Whether the new folder button should be shown */
|
|
276
294
|
showCreateNewFolderButton: PropTypes.bool,
|
|
277
295
|
|
|
@@ -279,10 +297,7 @@ _defineProperty(ContentExplorerModalContainer, "propTypes", {
|
|
|
279
297
|
searchInputProps: PropTypes.object,
|
|
280
298
|
|
|
281
299
|
/** Custom text for the choose button */
|
|
282
|
-
chooseButtonText: PropTypes.node
|
|
283
|
-
|
|
284
|
-
/** Table row height */
|
|
285
|
-
rowHeight: PropTypes.number
|
|
300
|
+
chooseButtonText: PropTypes.node
|
|
286
301
|
});
|
|
287
302
|
|
|
288
303
|
_defineProperty(ContentExplorerModalContainer, "defaultProps", {
|
|
@@ -8,6 +8,11 @@ import NewFolderModal from '../new-folder-modal';
|
|
|
8
8
|
|
|
9
9
|
class ContentExplorerModalContainer extends Component {
|
|
10
10
|
static propTypes = {
|
|
11
|
+
/**
|
|
12
|
+
* Extra columns displayed in the folders table after folder name column
|
|
13
|
+
* Each column has to be a Column element
|
|
14
|
+
*/
|
|
15
|
+
additionalColumns: PropTypes.arrayOf(PropTypes.element),
|
|
11
16
|
/** Breadcrumb component options */
|
|
12
17
|
breadcrumbProps: BreadcrumbPropType,
|
|
13
18
|
/** Adds class name. */
|
|
@@ -110,14 +115,20 @@ class ContentExplorerModalContainer extends Component {
|
|
|
110
115
|
itemNameLinkRenderer: PropTypes.func,
|
|
111
116
|
/** Used to render item buttons in the list. Overrides the default buttons. */
|
|
112
117
|
itemButtonRenderer: PropTypes.func,
|
|
118
|
+
/** Height of an item row */
|
|
119
|
+
itemRowHeight: PropTypes.number,
|
|
120
|
+
/** Used to render the row element for items on the list */
|
|
121
|
+
itemRowRenderer: PropTypes.func,
|
|
122
|
+
/** Height of the item list header, defaults to 0, which makes header not visible */
|
|
123
|
+
listHeaderHeight: PropTypes.number,
|
|
124
|
+
/** Used to render the header row on the item list */
|
|
125
|
+
listHeaderRenderer: PropTypes.func,
|
|
113
126
|
/** Whether the new folder button should be shown */
|
|
114
127
|
showCreateNewFolderButton: PropTypes.bool,
|
|
115
128
|
/** Props for the search input */
|
|
116
129
|
searchInputProps: PropTypes.object,
|
|
117
130
|
/** Custom text for the choose button */
|
|
118
131
|
chooseButtonText: PropTypes.node,
|
|
119
|
-
/** Table row height */
|
|
120
|
-
rowHeight: PropTypes.number,
|
|
121
132
|
};
|
|
122
133
|
|
|
123
134
|
static defaultProps = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/features/content-explorer/content-explorer-modal-container/ContentExplorerModalContainer.js"],"names":["PropTypes","React","Component","classNames","BreadcrumbPropType","ContentExplorerModePropType","FoldersPathPropType","ItemsPropType","ContentExplorerModal","NewFolderModal","ContentExplorerModalContainer","props","enteredFolder","newFoldersPath","onEnterFolder","setState","foldersPath","onNewFolderModalShown","isNewFolderModalOpen","onNewFolderModalClosed","state","initialFoldersPath","prevInitialFoldersPath","className","modalTitle","modalDescription","onCreateFolderSubmit","onCreateFolderInput","isCreatingFolder","createFolderError","rest","currentFolder","length","handleEnterFolder","handleCreateNewFolderButtonClick","name","handleNewFolderModalClose","breadcrumbProps","string","headerActionsAccessory","node","onRequestClose","func","isRequired","onSelectedClick","onSelectItem","bool","isSelectAllAllowed","contentExplorerMode","initialSelectedItems","object","onChooseItems","onMoveItem","onCopyItem","isCreateNewFolderAllowed","onSearchSubmit","onExitSearch","items","numItemsPerPage","number","numTotalItems","onLoadMoreItems","itemIconRenderer","itemNameLinkRenderer","itemButtonRenderer","showCreateNewFolderButton","searchInputProps","chooseButtonText","rowHeight"],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types';\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\n\nimport { BreadcrumbPropType, ContentExplorerModePropType, FoldersPathPropType, ItemsPropType } from '../prop-types';\nimport ContentExplorerModal from '../content-explorer-modal';\nimport NewFolderModal from '../new-folder-modal';\n\nclass ContentExplorerModalContainer extends Component {\n static propTypes = {\n /** Breadcrumb component options */\n breadcrumbProps: BreadcrumbPropType,\n /** Adds class name. */\n className: PropTypes.string,\n /** Any extra items in the header to the right of the search input (and new folder button) */\n headerActionsAccessory: PropTypes.node,\n /** Title shown in the ContentExplorerModal. */\n modalTitle: PropTypes.string,\n /** Description text shown in the ContentExplorerModal. */\n modalDescription: PropTypes.string,\n /** Called when the ContentExplorerModal is closed. */\n onRequestClose: PropTypes.func.isRequired,\n /**\n * Called when the folder creation is submitted.\n *\n * @param {string} folderName\n */\n onCreateFolderSubmit: PropTypes.func,\n /**\n * Called with the latest folder name input.\n *\n * @param {string} folderName\n */\n onCreateFolderInput: PropTypes.func,\n /** Called when the NewFolderModal is shown. */\n onNewFolderModalShown: PropTypes.func,\n /** Called when the NewFolderModal is closed. */\n onNewFolderModalClosed: PropTypes.func,\n /** Called when selected button is clicked */\n onSelectedClick: 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 /** Folder is in the process of being created. */\n isCreatingFolder: PropTypes.bool,\n /** Whether the user can see select all checkbox */\n isSelectAllAllowed: PropTypes.bool,\n /** Message that will be shown when there was an error creating the folder. */\n createFolderError: 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 /** 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 /**\n * Called when the current folder changes\n *\n * @param {Object} enteredFolder\n * @param {Array} newFoldersPath\n */\n onEnterFolder: PropTypes.func.isRequired,\n /**\n * Called when items are chosen.\n *\n * @param {Object[]} chosenItems In non-multi select mode, the chosenItems will be a 1 element array contain the one chosen item\n */\n onChooseItems: 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 /** Whether the user has permission to create a new folder */\n isCreateNewFolderAllowed: 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 /** Whether the new folder button should be shown */\n showCreateNewFolderButton: PropTypes.bool,\n /** Props for the search input */\n searchInputProps: PropTypes.object,\n /** Custom text for the choose button */\n chooseButtonText: PropTypes.node,\n /** Table row height */\n rowHeight: PropTypes.number,\n };\n\n static defaultProps = {\n onCreateFolderSubmit: () => {},\n };\n\n constructor(props) {\n super(props);\n this.state = {\n foldersPath: props.initialFoldersPath,\n isNewFolderModalOpen: false,\n };\n }\n\n componentDidUpdate({ initialFoldersPath: prevInitialFoldersPath }) {\n const { initialFoldersPath } = this.props;\n\n if (prevInitialFoldersPath !== initialFoldersPath) {\n // Close the new folder modal when the folders path has changed\n this.setState({\n foldersPath: initialFoldersPath,\n isNewFolderModalOpen: false,\n });\n }\n }\n\n handleEnterFolder = (enteredFolder, newFoldersPath) => {\n const { onEnterFolder } = this.props;\n\n this.setState({ foldersPath: newFoldersPath });\n onEnterFolder(enteredFolder, newFoldersPath);\n };\n\n handleCreateNewFolderButtonClick = () => {\n const { onNewFolderModalShown } = this.props;\n\n this.setState({ isNewFolderModalOpen: true }, () => onNewFolderModalShown && onNewFolderModalShown());\n };\n\n handleNewFolderModalClose = () => {\n const { onNewFolderModalClosed } = this.props;\n\n this.setState({ isNewFolderModalOpen: false }, () => onNewFolderModalClosed && onNewFolderModalClosed());\n };\n\n render() {\n const {\n className,\n modalTitle,\n modalDescription,\n onCreateFolderSubmit,\n onCreateFolderInput,\n isCreatingFolder,\n createFolderError,\n initialFoldersPath,\n ...rest\n } = this.props;\n const { foldersPath, isNewFolderModalOpen } = this.state;\n const currentFolder = foldersPath[foldersPath.length - 1];\n\n return (\n <div className={classNames('content-explorer-modal-container', className)}>\n <ContentExplorerModal\n className={isNewFolderModalOpen ? 'hidden' : ''}\n title={modalTitle}\n description={modalDescription}\n initialFoldersPath={initialFoldersPath}\n isOpen\n onEnterFolder={this.handleEnterFolder}\n onCreateNewFolderButtonClick={this.handleCreateNewFolderButtonClick}\n {...rest}\n />\n {isNewFolderModalOpen && (\n <NewFolderModal\n isOpen\n parentFolderName={currentFolder.name}\n onRequestClose={this.handleNewFolderModalClose}\n onCreateFolderSubmit={onCreateFolderSubmit}\n onCreateFolderInput={onCreateFolderInput}\n isCreatingFolder={isCreatingFolder}\n createFolderError={createFolderError}\n />\n )}\n </div>\n );\n }\n}\n\nexport default ContentExplorerModalContainer;\n"],"file":"ContentExplorerModalContainer.js"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/features/content-explorer/content-explorer-modal-container/ContentExplorerModalContainer.js"],"names":["PropTypes","React","Component","classNames","BreadcrumbPropType","ContentExplorerModePropType","FoldersPathPropType","ItemsPropType","ContentExplorerModal","NewFolderModal","ContentExplorerModalContainer","props","enteredFolder","newFoldersPath","onEnterFolder","setState","foldersPath","onNewFolderModalShown","isNewFolderModalOpen","onNewFolderModalClosed","state","initialFoldersPath","prevInitialFoldersPath","className","modalTitle","modalDescription","onCreateFolderSubmit","onCreateFolderInput","isCreatingFolder","createFolderError","rest","currentFolder","length","handleEnterFolder","handleCreateNewFolderButtonClick","name","handleNewFolderModalClose","additionalColumns","arrayOf","element","breadcrumbProps","string","headerActionsAccessory","node","onRequestClose","func","isRequired","onSelectedClick","onSelectItem","bool","isSelectAllAllowed","contentExplorerMode","initialSelectedItems","object","onChooseItems","onMoveItem","onCopyItem","isCreateNewFolderAllowed","onSearchSubmit","onExitSearch","items","numItemsPerPage","number","numTotalItems","onLoadMoreItems","itemIconRenderer","itemNameLinkRenderer","itemButtonRenderer","itemRowHeight","itemRowRenderer","listHeaderHeight","listHeaderRenderer","showCreateNewFolderButton","searchInputProps","chooseButtonText"],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types';\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\n\nimport { BreadcrumbPropType, ContentExplorerModePropType, FoldersPathPropType, ItemsPropType } from '../prop-types';\nimport ContentExplorerModal from '../content-explorer-modal';\nimport NewFolderModal from '../new-folder-modal';\n\nclass ContentExplorerModalContainer extends Component {\n static propTypes = {\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 /** Breadcrumb component options */\n breadcrumbProps: BreadcrumbPropType,\n /** Adds class name. */\n className: PropTypes.string,\n /** Any extra items in the header to the right of the search input (and new folder button) */\n headerActionsAccessory: PropTypes.node,\n /** Title shown in the ContentExplorerModal. */\n modalTitle: PropTypes.string,\n /** Description text shown in the ContentExplorerModal. */\n modalDescription: PropTypes.string,\n /** Called when the ContentExplorerModal is closed. */\n onRequestClose: PropTypes.func.isRequired,\n /**\n * Called when the folder creation is submitted.\n *\n * @param {string} folderName\n */\n onCreateFolderSubmit: PropTypes.func,\n /**\n * Called with the latest folder name input.\n *\n * @param {string} folderName\n */\n onCreateFolderInput: PropTypes.func,\n /** Called when the NewFolderModal is shown. */\n onNewFolderModalShown: PropTypes.func,\n /** Called when the NewFolderModal is closed. */\n onNewFolderModalClosed: PropTypes.func,\n /** Called when selected button is clicked */\n onSelectedClick: 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 /** Folder is in the process of being created. */\n isCreatingFolder: PropTypes.bool,\n /** Whether the user can see select all checkbox */\n isSelectAllAllowed: PropTypes.bool,\n /** Message that will be shown when there was an error creating the folder. */\n createFolderError: 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 /** 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 /**\n * Called when the current folder changes\n *\n * @param {Object} enteredFolder\n * @param {Array} newFoldersPath\n */\n onEnterFolder: PropTypes.func.isRequired,\n /**\n * Called when items are chosen.\n *\n * @param {Object[]} chosenItems In non-multi select mode, the chosenItems will be a 1 element array contain the one chosen item\n */\n onChooseItems: 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 /** Whether the user has permission to create a new folder */\n isCreateNewFolderAllowed: 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 */\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 /** Whether the new folder button should be shown */\n showCreateNewFolderButton: PropTypes.bool,\n /** Props for the search input */\n searchInputProps: PropTypes.object,\n /** Custom text for the choose button */\n chooseButtonText: PropTypes.node,\n };\n\n static defaultProps = {\n onCreateFolderSubmit: () => {},\n };\n\n constructor(props) {\n super(props);\n this.state = {\n foldersPath: props.initialFoldersPath,\n isNewFolderModalOpen: false,\n };\n }\n\n componentDidUpdate({ initialFoldersPath: prevInitialFoldersPath }) {\n const { initialFoldersPath } = this.props;\n\n if (prevInitialFoldersPath !== initialFoldersPath) {\n // Close the new folder modal when the folders path has changed\n this.setState({\n foldersPath: initialFoldersPath,\n isNewFolderModalOpen: false,\n });\n }\n }\n\n handleEnterFolder = (enteredFolder, newFoldersPath) => {\n const { onEnterFolder } = this.props;\n\n this.setState({ foldersPath: newFoldersPath });\n onEnterFolder(enteredFolder, newFoldersPath);\n };\n\n handleCreateNewFolderButtonClick = () => {\n const { onNewFolderModalShown } = this.props;\n\n this.setState({ isNewFolderModalOpen: true }, () => onNewFolderModalShown && onNewFolderModalShown());\n };\n\n handleNewFolderModalClose = () => {\n const { onNewFolderModalClosed } = this.props;\n\n this.setState({ isNewFolderModalOpen: false }, () => onNewFolderModalClosed && onNewFolderModalClosed());\n };\n\n render() {\n const {\n className,\n modalTitle,\n modalDescription,\n onCreateFolderSubmit,\n onCreateFolderInput,\n isCreatingFolder,\n createFolderError,\n initialFoldersPath,\n ...rest\n } = this.props;\n const { foldersPath, isNewFolderModalOpen } = this.state;\n const currentFolder = foldersPath[foldersPath.length - 1];\n\n return (\n <div className={classNames('content-explorer-modal-container', className)}>\n <ContentExplorerModal\n className={isNewFolderModalOpen ? 'hidden' : ''}\n title={modalTitle}\n description={modalDescription}\n initialFoldersPath={initialFoldersPath}\n isOpen\n onEnterFolder={this.handleEnterFolder}\n onCreateNewFolderButtonClick={this.handleCreateNewFolderButtonClick}\n {...rest}\n />\n {isNewFolderModalOpen && (\n <NewFolderModal\n isOpen\n parentFolderName={currentFolder.name}\n onRequestClose={this.handleNewFolderModalClose}\n onCreateFolderSubmit={onCreateFolderSubmit}\n onCreateFolderInput={onCreateFolderInput}\n isCreatingFolder={isCreatingFolder}\n createFolderError={createFolderError}\n />\n )}\n </div>\n );\n }\n}\n\nexport default ContentExplorerModalContainer;\n"],"file":"ContentExplorerModalContainer.js"}
|
|
@@ -129,7 +129,8 @@ var itemLoadingPlaceholderRenderer = function itemLoadingPlaceholderRenderer(ren
|
|
|
129
129
|
};
|
|
130
130
|
|
|
131
131
|
var ItemList = function ItemList(_ref2) {
|
|
132
|
-
var
|
|
132
|
+
var additionalColumns = _ref2.additionalColumns,
|
|
133
|
+
contentExplorerMode = _ref2.contentExplorerMode,
|
|
133
134
|
_ref2$className = _ref2.className,
|
|
134
135
|
className = _ref2$className === void 0 ? '' : _ref2$className,
|
|
135
136
|
_ref2$isResponsive = _ref2.isResponsive,
|
|
@@ -143,6 +144,8 @@ var ItemList = function ItemList(_ref2) {
|
|
|
143
144
|
onItemDoubleClick = _ref2.onItemDoubleClick,
|
|
144
145
|
onItemNameClick = _ref2.onItemNameClick,
|
|
145
146
|
onLoadMoreItems = _ref2.onLoadMoreItems,
|
|
147
|
+
headerHeight = _ref2.headerHeight,
|
|
148
|
+
headerRenderer = _ref2.headerRenderer,
|
|
146
149
|
itemIconRenderer = _ref2.itemIconRenderer,
|
|
147
150
|
itemNameLinkRenderer = _ref2.itemNameLinkRenderer,
|
|
148
151
|
itemButtonRenderer = _ref2.itemButtonRenderer,
|
|
@@ -233,6 +236,8 @@ var ItemList = function ItemList(_ref2) {
|
|
|
233
236
|
headerClassName: "table-header-item",
|
|
234
237
|
width: width,
|
|
235
238
|
height: height,
|
|
239
|
+
headerHeight: headerHeight,
|
|
240
|
+
headerRowRenderer: headerRenderer,
|
|
236
241
|
rowHeight: rowHeight,
|
|
237
242
|
rowCount: items.length,
|
|
238
243
|
onRowClick: onItemClick,
|
|
@@ -260,7 +265,7 @@ var ItemList = function ItemList(_ref2) {
|
|
|
260
265
|
width: 0,
|
|
261
266
|
flexGrow: 1,
|
|
262
267
|
flexShrink: 0
|
|
263
|
-
}), React.createElement(Column, {
|
|
268
|
+
}), additionalColumns, React.createElement(Column, {
|
|
264
269
|
className: "item-list-button-col",
|
|
265
270
|
cellRenderer: itemButtonCellRenderer,
|
|
266
271
|
columnData: {
|
|
@@ -275,6 +280,7 @@ var ItemList = function ItemList(_ref2) {
|
|
|
275
280
|
|
|
276
281
|
ItemList.displayName = 'ItemList';
|
|
277
282
|
ItemList.propTypes = {
|
|
283
|
+
additionalColumns: PropTypes.arrayOf(PropTypes.element),
|
|
278
284
|
className: PropTypes.string,
|
|
279
285
|
contentExplorerMode: ContentExplorerModePropType.isRequired,
|
|
280
286
|
isResponsive: PropTypes.bool,
|
|
@@ -286,6 +292,8 @@ ItemList.propTypes = {
|
|
|
286
292
|
onItemDoubleClick: PropTypes.func,
|
|
287
293
|
onItemNameClick: PropTypes.func,
|
|
288
294
|
onLoadMoreItems: PropTypes.func,
|
|
295
|
+
headerHeight: PropTypes.number,
|
|
296
|
+
headerRenderer: PropTypes.func,
|
|
289
297
|
itemIconRenderer: PropTypes.func,
|
|
290
298
|
itemNameLinkRenderer: PropTypes.func,
|
|
291
299
|
itemButtonRenderer: PropTypes.func,
|
|
@@ -125,6 +125,7 @@ const itemLoadingPlaceholderRenderer = rendererParams => {
|
|
|
125
125
|
};
|
|
126
126
|
|
|
127
127
|
const ItemList = ({
|
|
128
|
+
additionalColumns,
|
|
128
129
|
contentExplorerMode,
|
|
129
130
|
className = '',
|
|
130
131
|
isResponsive = false,
|
|
@@ -136,6 +137,8 @@ const ItemList = ({
|
|
|
136
137
|
onItemDoubleClick,
|
|
137
138
|
onItemNameClick,
|
|
138
139
|
onLoadMoreItems,
|
|
140
|
+
headerHeight,
|
|
141
|
+
headerRenderer,
|
|
139
142
|
itemIconRenderer,
|
|
140
143
|
itemNameLinkRenderer,
|
|
141
144
|
itemButtonRenderer,
|
|
@@ -218,6 +221,8 @@ const ItemList = ({
|
|
|
218
221
|
headerClassName="table-header-item"
|
|
219
222
|
width={width}
|
|
220
223
|
height={height}
|
|
224
|
+
headerHeight={headerHeight}
|
|
225
|
+
headerRowRenderer={headerRenderer}
|
|
221
226
|
rowHeight={rowHeight}
|
|
222
227
|
rowCount={items.length}
|
|
223
228
|
onRowClick={onItemClick}
|
|
@@ -249,6 +254,7 @@ const ItemList = ({
|
|
|
249
254
|
flexGrow={1}
|
|
250
255
|
flexShrink={0}
|
|
251
256
|
/>
|
|
257
|
+
{additionalColumns}
|
|
252
258
|
<Column
|
|
253
259
|
className="item-list-button-col"
|
|
254
260
|
cellRenderer={itemButtonCellRenderer}
|
|
@@ -268,6 +274,7 @@ const ItemList = ({
|
|
|
268
274
|
ItemList.displayName = 'ItemList';
|
|
269
275
|
|
|
270
276
|
ItemList.propTypes = {
|
|
277
|
+
additionalColumns: PropTypes.arrayOf(PropTypes.element),
|
|
271
278
|
className: PropTypes.string,
|
|
272
279
|
contentExplorerMode: ContentExplorerModePropType.isRequired,
|
|
273
280
|
isResponsive: PropTypes.bool,
|
|
@@ -279,6 +286,8 @@ ItemList.propTypes = {
|
|
|
279
286
|
onItemDoubleClick: PropTypes.func,
|
|
280
287
|
onItemNameClick: PropTypes.func,
|
|
281
288
|
onLoadMoreItems: PropTypes.func,
|
|
289
|
+
headerHeight: PropTypes.number,
|
|
290
|
+
headerRenderer: PropTypes.func,
|
|
282
291
|
itemIconRenderer: PropTypes.func,
|
|
283
292
|
itemNameLinkRenderer: PropTypes.func,
|
|
284
293
|
itemButtonRenderer: PropTypes.func,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/features/content-explorer/item-list/ItemList.js"],"names":["PropTypes","React","classNames","getProp","AutoSizer","Column","Table","defaultTableRowRenderer","withInfiniteLoader","ContentExplorerModePropType","ItemsPropType","ItemsMapPropType","ItemListIcon","ItemListLoadingPlaceholder","ItemListName","ItemListButton","TABLE_CELL_CLASS","InfiniteLoaderTable","DEFAULT_ROW_HEIGHT","withAutoSizer","WrappedComponent","props","flex","w","width","h","height","TableResponsive","itemIconCellRenderer","rendererParams","rowData","type","extension","hasCollaborations","isExternallyOwned","itemIconRenderer","columnData","isItemSelected","itemId","selectedItems","undefined","itemNameCellRenderer","rowIndex","id","name","label","onItemNameClick","itemNameLinkRenderer","event","renderItemListButton","contentExplorerMode","isActionDisabled","isDisabled","itemButtonCellRenderer","itemButtonRenderer","itemLoadingPlaceholderRenderer","loadingPlaceholderColumnWidths","columnIndex","ItemList","className","isResponsive","items","numItemsPerPage","numTotalItems","onItemClick","onItemDoubleClick","onLoadMoreItems","itemRowRenderer","noItemsRenderer","rowHeight","getRow","index","getRowClassNames","item","result","isLoading","renderRow","key","style","rowClassName","columns","itemRowClassname","testId","map","column","defaultRow","cloneElement","TableComponent","tableProps","infiniteLoaderProps","isRowLoaded","loadMoreRows","minimumBatchSize","rowCount","threshold","length","displayName","propTypes","string","isRequired","bool","number","func","ItemListBase"],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types';\nimport React from 'react';\nimport classNames from 'classnames';\nimport getProp from 'lodash/get';\nimport AutoSizer from '@box/react-virtualized/dist/commonjs/AutoSizer';\nimport Column from '@box/react-virtualized/dist/commonjs/Table/Column';\nimport Table from '@box/react-virtualized/dist/commonjs/Table';\nimport defaultTableRowRenderer from '@box/react-virtualized/dist/commonjs/Table/defaultRowRenderer';\nimport '@box/react-virtualized/styles.css';\n\nimport { withInfiniteLoader } from '../../../components/react-virtualized-helpers';\n\nimport { ContentExplorerModePropType, ItemsPropType, ItemsMapPropType } from '../prop-types';\n\nimport ItemListIcon from './ItemListIcon';\nimport ItemListLoadingPlaceholder from './ItemListLoadingPlaceholder';\nimport ItemListName from './ItemListName';\nimport ItemListButton from './ItemListButton';\n\nimport './ItemList.scss';\n\nconst TABLE_CELL_CLASS = 'table-cell';\n\nconst InfiniteLoaderTable = withInfiniteLoader(Table);\n\nconst DEFAULT_ROW_HEIGHT = 40;\n\nconst withAutoSizer = WrappedComponent => {\n return props => {\n return (\n <div style={{ flex: 1 }}>\n <AutoSizer>\n {({ width: w, height: h }) => <WrappedComponent {...props} width={w} height={h} />}\n </AutoSizer>\n </div>\n );\n };\n};\n\nconst TableResponsive = withAutoSizer(Table);\n\nconst itemIconCellRenderer = rendererParams => {\n const {\n rowData: { type, extension, hasCollaborations, isExternallyOwned },\n columnData: { itemIconRenderer },\n } = rendererParams;\n return (\n <div className={TABLE_CELL_CLASS}>\n {itemIconRenderer ? (\n itemIconRenderer(rendererParams)\n ) : (\n <ItemListIcon\n type={type}\n extension={extension}\n hasCollaborations={hasCollaborations}\n isExternallyOwned={isExternallyOwned}\n />\n )}\n </div>\n );\n};\n\nconst isItemSelected = (itemId, selectedItems) => selectedItems[itemId] !== undefined;\n\nconst itemNameCellRenderer = rendererParams => {\n const {\n rowIndex,\n rowData: { id, type, name, label },\n columnData: { selectedItems, onItemNameClick, itemNameLinkRenderer },\n } = rendererParams;\n // loading placeholder may not have name and ItemListName requires name\n return (\n name && (\n <div className={TABLE_CELL_CLASS}>\n <ItemListName\n itemId={id}\n type={type}\n name={name}\n label={label}\n isSelected={isItemSelected(id, selectedItems)}\n onClick={event => onItemNameClick(event, rowIndex)}\n linkRenderer={itemNameLinkRenderer}\n />\n </div>\n )\n );\n};\n\nconst renderItemListButton = (contentExplorerMode, id, isActionDisabled, isDisabled, name, selectedItems) =>\n name && (\n <ItemListButton\n contentExplorerMode={contentExplorerMode}\n id={id}\n isDisabled={isActionDisabled}\n isSelected={isItemSelected(id, selectedItems)}\n name={name}\n />\n );\n\nconst itemButtonCellRenderer = rendererParams => {\n const {\n columnData: { contentExplorerMode, itemButtonRenderer, selectedItems },\n rowData: { id, isActionDisabled, isDisabled, name },\n } = rendererParams;\n return (\n !isDisabled && (\n <div className={TABLE_CELL_CLASS}>\n {itemButtonRenderer\n ? itemButtonRenderer(rendererParams)\n : renderItemListButton(contentExplorerMode, id, isActionDisabled, isDisabled, name, selectedItems)}\n </div>\n )\n );\n};\n\nconst itemLoadingPlaceholderRenderer = rendererParams => {\n const { loadingPlaceholderColumnWidths, columnIndex } = rendererParams;\n return (\n <div className={TABLE_CELL_CLASS}>\n <ItemListLoadingPlaceholder\n width={loadingPlaceholderColumnWidths && loadingPlaceholderColumnWidths[columnIndex]}\n />\n </div>\n );\n};\n\nconst ItemList = ({\n contentExplorerMode,\n className = '',\n isResponsive = false,\n items,\n numItemsPerPage,\n numTotalItems,\n selectedItems = {},\n onItemClick,\n onItemDoubleClick,\n onItemNameClick,\n onLoadMoreItems,\n itemIconRenderer,\n itemNameLinkRenderer,\n itemButtonRenderer,\n itemRowRenderer = defaultTableRowRenderer,\n noItemsRenderer,\n width,\n height,\n rowHeight = DEFAULT_ROW_HEIGHT,\n}) => {\n const getRow = ({ index }) => items[index];\n\n const getRowClassNames = (index, item) => {\n let result = index === -1 ? 'table-header' : 'table-row';\n\n if (isItemSelected(item.id, selectedItems)) {\n result = classNames('is-selected', result);\n }\n if (item && (item.isDisabled || item.isLoading)) {\n result = classNames('disabled', result);\n }\n\n return result;\n };\n\n const renderRow = rendererParams => {\n const { index, key, style, className: rowClassName, columns } = rendererParams;\n const item = items[index];\n const itemRowClassname = classNames(rowClassName, getRowClassNames(index, item));\n const testId = getProp(rendererParams, 'rowData.id', '');\n\n if (item.isLoading) {\n return (\n <div key={key} style={style} className={itemRowClassname} role=\"row\">\n {columns.map((column, columnIndex) => (\n <div\n key={columnIndex}\n className={column.props.className}\n style={column.props.style}\n role=\"gridcell\"\n >\n {itemLoadingPlaceholderRenderer({\n item,\n columnIndex,\n })}\n </div>\n ))}\n </div>\n );\n }\n\n const defaultRow = itemRowRenderer({\n ...rendererParams,\n className: itemRowClassname,\n });\n return React.cloneElement(defaultRow, { 'data-testid': `item-row-${testId}` });\n };\n\n let TableComponent = isResponsive ? TableResponsive : Table;\n const tableProps = {};\n\n if (onLoadMoreItems) {\n TableComponent = InfiniteLoaderTable;\n tableProps.infiniteLoaderProps = {\n isRowLoaded: getRow,\n loadMoreRows: onLoadMoreItems,\n minimumBatchSize: numItemsPerPage,\n rowCount: numTotalItems,\n threshold: numItemsPerPage,\n };\n }\n\n return (\n <div\n className={classNames('content-explorer-item-list table', className, {\n 'bdl-ContentExplorerItemList--responsive': isResponsive,\n })}\n >\n <TableComponent\n gridClassName=\"table-body\"\n headerClassName=\"table-header-item\"\n width={width}\n height={height}\n rowHeight={rowHeight}\n rowCount={items.length}\n onRowClick={onItemClick}\n onRowDoubleClick={onItemDoubleClick}\n rowGetter={getRow}\n rowRenderer={renderRow}\n noRowsRenderer={noItemsRenderer}\n {...tableProps}\n >\n <Column\n className=\"item-list-icon-col\"\n cellRenderer={itemIconCellRenderer}\n columnData={{\n itemIconRenderer,\n }}\n dataKey=\"icon\"\n width={32}\n />\n <Column\n className=\"item-list-name-col\"\n cellRenderer={itemNameCellRenderer}\n columnData={{\n selectedItems,\n onItemNameClick,\n itemNameLinkRenderer,\n }}\n dataKey=\"name\"\n width={0}\n flexGrow={1}\n flexShrink={0}\n />\n <Column\n className=\"item-list-button-col\"\n cellRenderer={itemButtonCellRenderer}\n columnData={{\n contentExplorerMode,\n itemButtonRenderer,\n selectedItems,\n }}\n dataKey=\"button\"\n width={30}\n />\n </TableComponent>\n </div>\n );\n};\n\nItemList.displayName = 'ItemList';\n\nItemList.propTypes = {\n className: PropTypes.string,\n contentExplorerMode: ContentExplorerModePropType.isRequired,\n isResponsive: PropTypes.bool,\n items: ItemsPropType.isRequired,\n numItemsPerPage: PropTypes.number,\n numTotalItems: PropTypes.number,\n selectedItems: ItemsMapPropType.isRequired,\n onItemClick: PropTypes.func,\n onItemDoubleClick: PropTypes.func,\n onItemNameClick: PropTypes.func,\n onLoadMoreItems: PropTypes.func,\n itemIconRenderer: PropTypes.func,\n itemNameLinkRenderer: PropTypes.func,\n itemButtonRenderer: PropTypes.func,\n itemRowRenderer: PropTypes.func,\n noItemsRenderer: PropTypes.func,\n width: PropTypes.number.isRequired,\n height: PropTypes.number.isRequired,\n rowHeight: PropTypes.number,\n};\n\nexport { ItemList as ItemListBase };\nexport default ItemList;\n"],"file":"ItemList.js"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/features/content-explorer/item-list/ItemList.js"],"names":["PropTypes","React","classNames","getProp","AutoSizer","Column","Table","defaultTableRowRenderer","withInfiniteLoader","ContentExplorerModePropType","ItemsPropType","ItemsMapPropType","ItemListIcon","ItemListLoadingPlaceholder","ItemListName","ItemListButton","TABLE_CELL_CLASS","InfiniteLoaderTable","DEFAULT_ROW_HEIGHT","withAutoSizer","WrappedComponent","props","flex","w","width","h","height","TableResponsive","itemIconCellRenderer","rendererParams","rowData","type","extension","hasCollaborations","isExternallyOwned","itemIconRenderer","columnData","isItemSelected","itemId","selectedItems","undefined","itemNameCellRenderer","rowIndex","id","name","label","onItemNameClick","itemNameLinkRenderer","event","renderItemListButton","contentExplorerMode","isActionDisabled","isDisabled","itemButtonCellRenderer","itemButtonRenderer","itemLoadingPlaceholderRenderer","loadingPlaceholderColumnWidths","columnIndex","ItemList","additionalColumns","className","isResponsive","items","numItemsPerPage","numTotalItems","onItemClick","onItemDoubleClick","onLoadMoreItems","headerHeight","headerRenderer","itemRowRenderer","noItemsRenderer","rowHeight","getRow","index","getRowClassNames","item","result","isLoading","renderRow","key","style","rowClassName","columns","itemRowClassname","testId","map","column","defaultRow","cloneElement","TableComponent","tableProps","infiniteLoaderProps","isRowLoaded","loadMoreRows","minimumBatchSize","rowCount","threshold","length","displayName","propTypes","arrayOf","element","string","isRequired","bool","number","func","ItemListBase"],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types';\nimport React from 'react';\nimport classNames from 'classnames';\nimport getProp from 'lodash/get';\nimport AutoSizer from '@box/react-virtualized/dist/commonjs/AutoSizer';\nimport Column from '@box/react-virtualized/dist/commonjs/Table/Column';\nimport Table from '@box/react-virtualized/dist/commonjs/Table';\nimport defaultTableRowRenderer from '@box/react-virtualized/dist/commonjs/Table/defaultRowRenderer';\nimport '@box/react-virtualized/styles.css';\n\nimport { withInfiniteLoader } from '../../../components/react-virtualized-helpers';\n\nimport { ContentExplorerModePropType, ItemsPropType, ItemsMapPropType } from '../prop-types';\n\nimport ItemListIcon from './ItemListIcon';\nimport ItemListLoadingPlaceholder from './ItemListLoadingPlaceholder';\nimport ItemListName from './ItemListName';\nimport ItemListButton from './ItemListButton';\n\nimport './ItemList.scss';\n\nconst TABLE_CELL_CLASS = 'table-cell';\n\nconst InfiniteLoaderTable = withInfiniteLoader(Table);\n\nconst DEFAULT_ROW_HEIGHT = 40;\n\nconst withAutoSizer = WrappedComponent => {\n return props => {\n return (\n <div style={{ flex: 1 }}>\n <AutoSizer>\n {({ width: w, height: h }) => <WrappedComponent {...props} width={w} height={h} />}\n </AutoSizer>\n </div>\n );\n };\n};\n\nconst TableResponsive = withAutoSizer(Table);\n\nconst itemIconCellRenderer = rendererParams => {\n const {\n rowData: { type, extension, hasCollaborations, isExternallyOwned },\n columnData: { itemIconRenderer },\n } = rendererParams;\n return (\n <div className={TABLE_CELL_CLASS}>\n {itemIconRenderer ? (\n itemIconRenderer(rendererParams)\n ) : (\n <ItemListIcon\n type={type}\n extension={extension}\n hasCollaborations={hasCollaborations}\n isExternallyOwned={isExternallyOwned}\n />\n )}\n </div>\n );\n};\n\nconst isItemSelected = (itemId, selectedItems) => selectedItems[itemId] !== undefined;\n\nconst itemNameCellRenderer = rendererParams => {\n const {\n rowIndex,\n rowData: { id, type, name, label },\n columnData: { selectedItems, onItemNameClick, itemNameLinkRenderer },\n } = rendererParams;\n // loading placeholder may not have name and ItemListName requires name\n return (\n name && (\n <div className={TABLE_CELL_CLASS}>\n <ItemListName\n itemId={id}\n type={type}\n name={name}\n label={label}\n isSelected={isItemSelected(id, selectedItems)}\n onClick={event => onItemNameClick(event, rowIndex)}\n linkRenderer={itemNameLinkRenderer}\n />\n </div>\n )\n );\n};\n\nconst renderItemListButton = (contentExplorerMode, id, isActionDisabled, isDisabled, name, selectedItems) =>\n name && (\n <ItemListButton\n contentExplorerMode={contentExplorerMode}\n id={id}\n isDisabled={isActionDisabled}\n isSelected={isItemSelected(id, selectedItems)}\n name={name}\n />\n );\n\nconst itemButtonCellRenderer = rendererParams => {\n const {\n columnData: { contentExplorerMode, itemButtonRenderer, selectedItems },\n rowData: { id, isActionDisabled, isDisabled, name },\n } = rendererParams;\n return (\n !isDisabled && (\n <div className={TABLE_CELL_CLASS}>\n {itemButtonRenderer\n ? itemButtonRenderer(rendererParams)\n : renderItemListButton(contentExplorerMode, id, isActionDisabled, isDisabled, name, selectedItems)}\n </div>\n )\n );\n};\n\nconst itemLoadingPlaceholderRenderer = rendererParams => {\n const { loadingPlaceholderColumnWidths, columnIndex } = rendererParams;\n return (\n <div className={TABLE_CELL_CLASS}>\n <ItemListLoadingPlaceholder\n width={loadingPlaceholderColumnWidths && loadingPlaceholderColumnWidths[columnIndex]}\n />\n </div>\n );\n};\n\nconst ItemList = ({\n additionalColumns,\n contentExplorerMode,\n className = '',\n isResponsive = false,\n items,\n numItemsPerPage,\n numTotalItems,\n selectedItems = {},\n onItemClick,\n onItemDoubleClick,\n onItemNameClick,\n onLoadMoreItems,\n headerHeight,\n headerRenderer,\n itemIconRenderer,\n itemNameLinkRenderer,\n itemButtonRenderer,\n itemRowRenderer = defaultTableRowRenderer,\n noItemsRenderer,\n width,\n height,\n rowHeight = DEFAULT_ROW_HEIGHT,\n}) => {\n const getRow = ({ index }) => items[index];\n\n const getRowClassNames = (index, item) => {\n let result = index === -1 ? 'table-header' : 'table-row';\n\n if (isItemSelected(item.id, selectedItems)) {\n result = classNames('is-selected', result);\n }\n if (item && (item.isDisabled || item.isLoading)) {\n result = classNames('disabled', result);\n }\n\n return result;\n };\n\n const renderRow = rendererParams => {\n const { index, key, style, className: rowClassName, columns } = rendererParams;\n const item = items[index];\n const itemRowClassname = classNames(rowClassName, getRowClassNames(index, item));\n const testId = getProp(rendererParams, 'rowData.id', '');\n\n if (item.isLoading) {\n return (\n <div key={key} style={style} className={itemRowClassname} role=\"row\">\n {columns.map((column, columnIndex) => (\n <div\n key={columnIndex}\n className={column.props.className}\n style={column.props.style}\n role=\"gridcell\"\n >\n {itemLoadingPlaceholderRenderer({\n item,\n columnIndex,\n })}\n </div>\n ))}\n </div>\n );\n }\n\n const defaultRow = itemRowRenderer({\n ...rendererParams,\n className: itemRowClassname,\n });\n return React.cloneElement(defaultRow, { 'data-testid': `item-row-${testId}` });\n };\n\n let TableComponent = isResponsive ? TableResponsive : Table;\n const tableProps = {};\n\n if (onLoadMoreItems) {\n TableComponent = InfiniteLoaderTable;\n tableProps.infiniteLoaderProps = {\n isRowLoaded: getRow,\n loadMoreRows: onLoadMoreItems,\n minimumBatchSize: numItemsPerPage,\n rowCount: numTotalItems,\n threshold: numItemsPerPage,\n };\n }\n\n return (\n <div\n className={classNames('content-explorer-item-list table', className, {\n 'bdl-ContentExplorerItemList--responsive': isResponsive,\n })}\n >\n <TableComponent\n gridClassName=\"table-body\"\n headerClassName=\"table-header-item\"\n width={width}\n height={height}\n headerHeight={headerHeight}\n headerRowRenderer={headerRenderer}\n rowHeight={rowHeight}\n rowCount={items.length}\n onRowClick={onItemClick}\n onRowDoubleClick={onItemDoubleClick}\n rowGetter={getRow}\n rowRenderer={renderRow}\n noRowsRenderer={noItemsRenderer}\n {...tableProps}\n >\n <Column\n className=\"item-list-icon-col\"\n cellRenderer={itemIconCellRenderer}\n columnData={{\n itemIconRenderer,\n }}\n dataKey=\"icon\"\n width={32}\n />\n <Column\n className=\"item-list-name-col\"\n cellRenderer={itemNameCellRenderer}\n columnData={{\n selectedItems,\n onItemNameClick,\n itemNameLinkRenderer,\n }}\n dataKey=\"name\"\n width={0}\n flexGrow={1}\n flexShrink={0}\n />\n {additionalColumns}\n <Column\n className=\"item-list-button-col\"\n cellRenderer={itemButtonCellRenderer}\n columnData={{\n contentExplorerMode,\n itemButtonRenderer,\n selectedItems,\n }}\n dataKey=\"button\"\n width={30}\n />\n </TableComponent>\n </div>\n );\n};\n\nItemList.displayName = 'ItemList';\n\nItemList.propTypes = {\n additionalColumns: PropTypes.arrayOf(PropTypes.element),\n className: PropTypes.string,\n contentExplorerMode: ContentExplorerModePropType.isRequired,\n isResponsive: PropTypes.bool,\n items: ItemsPropType.isRequired,\n numItemsPerPage: PropTypes.number,\n numTotalItems: PropTypes.number,\n selectedItems: ItemsMapPropType.isRequired,\n onItemClick: PropTypes.func,\n onItemDoubleClick: PropTypes.func,\n onItemNameClick: PropTypes.func,\n onLoadMoreItems: PropTypes.func,\n headerHeight: PropTypes.number,\n headerRenderer: PropTypes.func,\n itemIconRenderer: PropTypes.func,\n itemNameLinkRenderer: PropTypes.func,\n itemButtonRenderer: PropTypes.func,\n itemRowRenderer: PropTypes.func,\n noItemsRenderer: PropTypes.func,\n width: PropTypes.number.isRequired,\n height: PropTypes.number.isRequired,\n rowHeight: PropTypes.number,\n};\n\nexport { ItemList as ItemListBase };\nexport default ItemList;\n"],"file":"ItemList.js"}
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
border-top: none;
|
|
35
35
|
border-radius: 0 0 $bdl-border-radius-size-med $bdl-border-radius-size-med;
|
|
36
36
|
|
|
37
|
-
// NOTE
|
|
37
|
+
// NOTE: targets ie11
|
|
38
38
|
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
|
|
39
39
|
max-height: 300px;
|
|
40
40
|
}
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
|
|
68
68
|
// NOTE: targets ie11
|
|
69
69
|
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
|
|
70
|
-
//
|
|
70
|
+
// NOTE: Avoids cutting off the last item in the list
|
|
71
71
|
height: 300px;
|
|
72
72
|
}
|
|
73
73
|
|
package/package.json
CHANGED
|
@@ -19,6 +19,11 @@ class ContentExplorer extends Component {
|
|
|
19
19
|
static propTypes = {
|
|
20
20
|
/** Props for the action buttons container */
|
|
21
21
|
actionButtonsProps: PropTypes.object,
|
|
22
|
+
/**
|
|
23
|
+
* Extra columns displayed in the folders table after folder name column
|
|
24
|
+
* Each column has to be a Column element
|
|
25
|
+
*/
|
|
26
|
+
additionalColumns: PropTypes.arrayOf(PropTypes.element),
|
|
22
27
|
/** Props for breadcrumbs */
|
|
23
28
|
breadcrumbProps: PropTypes.object,
|
|
24
29
|
/** Props for the cancel button */
|
|
@@ -117,16 +122,20 @@ class ContentExplorer extends Component {
|
|
|
117
122
|
itemNameLinkRenderer: PropTypes.func,
|
|
118
123
|
/** Used to render item buttons in the list. Overrides the default buttons. */
|
|
119
124
|
itemButtonRenderer: PropTypes.func,
|
|
125
|
+
/** Height of an item row */
|
|
126
|
+
itemRowHeight: PropTypes.number,
|
|
120
127
|
/** Used to render the row element for items on the list. Allows row customizations such as adding tooltips, etc. */
|
|
121
128
|
itemRowRenderer: PropTypes.func,
|
|
129
|
+
/** Height of the item list header, defaults to 0, which makes header not visible */
|
|
130
|
+
listHeaderHeight: PropTypes.number,
|
|
131
|
+
/** Used to render the header row on the item list */
|
|
132
|
+
listHeaderRenderer: PropTypes.func,
|
|
122
133
|
/** Width of the item list */
|
|
123
134
|
listWidth: PropTypes.number.isRequired,
|
|
124
135
|
/** Height of the item list */
|
|
125
136
|
listHeight: PropTypes.number.isRequired,
|
|
126
137
|
/** Props for the search input */
|
|
127
138
|
searchInputProps: PropTypes.object,
|
|
128
|
-
/** Height of the row */
|
|
129
|
-
rowHeight: PropTypes.number,
|
|
130
139
|
};
|
|
131
140
|
|
|
132
141
|
static defaultProps = {
|
|
@@ -391,6 +400,7 @@ class ContentExplorer extends Component {
|
|
|
391
400
|
render() {
|
|
392
401
|
const {
|
|
393
402
|
actionButtonsProps,
|
|
403
|
+
additionalColumns,
|
|
394
404
|
breadcrumbProps,
|
|
395
405
|
cancelButtonProps,
|
|
396
406
|
chooseButtonProps,
|
|
@@ -419,11 +429,13 @@ class ContentExplorer extends Component {
|
|
|
419
429
|
itemIconRenderer,
|
|
420
430
|
itemNameLinkRenderer,
|
|
421
431
|
itemButtonRenderer,
|
|
432
|
+
itemRowHeight,
|
|
422
433
|
itemRowRenderer,
|
|
434
|
+
listHeaderHeight,
|
|
435
|
+
listHeaderRenderer,
|
|
423
436
|
listWidth,
|
|
424
437
|
listHeight,
|
|
425
438
|
searchInputProps,
|
|
426
|
-
rowHeight,
|
|
427
439
|
...rest
|
|
428
440
|
} = this.props;
|
|
429
441
|
const { isInSearchMode, foldersPath, selectedItems, isSelectAllChecked } = this.state;
|
|
@@ -443,7 +455,7 @@ class ContentExplorer extends Component {
|
|
|
443
455
|
// ContentExplorerActionButtons instead. There's a lot of implicit knowledge
|
|
444
456
|
// of what the action buttons are and what they should be doing.
|
|
445
457
|
if (contentExplorerMode === ContentExplorerModes.MULTI_SELECT) {
|
|
446
|
-
// NOTE:
|
|
458
|
+
// NOTE: only expecting to have 1 (choose) button so as long as something
|
|
447
459
|
// is selected and that item's isActionDisabled is false, we enable the action button
|
|
448
460
|
areActionButtonsDisabled =
|
|
449
461
|
selectedItemsIds.length === 0 ||
|
|
@@ -499,7 +511,10 @@ class ContentExplorer extends Component {
|
|
|
499
511
|
/>
|
|
500
512
|
)}
|
|
501
513
|
<ItemList
|
|
514
|
+
additionalColumns={additionalColumns}
|
|
502
515
|
contentExplorerMode={contentExplorerMode}
|
|
516
|
+
headerHeight={listHeaderHeight}
|
|
517
|
+
headerRenderer={listHeaderRenderer}
|
|
503
518
|
height={listHeight}
|
|
504
519
|
isResponsive={isResponsive}
|
|
505
520
|
itemButtonRenderer={itemButtonRenderer}
|
|
@@ -514,9 +529,9 @@ class ContentExplorer extends Component {
|
|
|
514
529
|
onItemDoubleClick={this.handleItemDoubleClick}
|
|
515
530
|
onItemNameClick={this.handleItemNameClick}
|
|
516
531
|
onLoadMoreItems={onLoadMoreItems}
|
|
532
|
+
rowHeight={itemRowHeight}
|
|
517
533
|
selectedItems={selectedItems}
|
|
518
534
|
width={listWidth}
|
|
519
|
-
rowHeight={rowHeight}
|
|
520
535
|
/>
|
|
521
536
|
<ContentExplorerActionButtons
|
|
522
537
|
actionButtonsProps={actionButtonsProps}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import classNames from 'classnames';
|
|
4
4
|
|
|
5
|
+
import Column from '@box/react-virtualized/dist/commonjs/Table/Column';
|
|
5
6
|
import ContentExplorer from '../content-explorer';
|
|
6
7
|
import { Modal } from '../../../components/modal';
|
|
7
8
|
|
|
@@ -10,16 +11,20 @@ import type { BreadcrumbProps } from '../../../components/breadcrumb/Breadcrumb'
|
|
|
10
11
|
import './ContentExplorerModal.scss';
|
|
11
12
|
|
|
12
13
|
type Props = {
|
|
14
|
+
additionalColumns?: Array<React.ComponentType<Column>>,
|
|
13
15
|
breadcrumbProps?: BreadcrumbProps,
|
|
14
16
|
className?: string,
|
|
15
17
|
customInput?: React.ComponentType<any>,
|
|
16
18
|
description?: string,
|
|
17
19
|
isOpen?: boolean,
|
|
18
20
|
isResponsive?: boolean,
|
|
21
|
+
itemRowHeight?: number,
|
|
22
|
+
itemRowRenderer?: Function,
|
|
23
|
+
listHeaderHeight?: number,
|
|
24
|
+
listHeaderRenderer?: Function,
|
|
19
25
|
onRequestClose?: Function,
|
|
20
26
|
onSelectItem?: (item: Object, index: number) => void,
|
|
21
27
|
onSelectedClick?: () => void,
|
|
22
|
-
rowHeight?: number,
|
|
23
28
|
title?: string,
|
|
24
29
|
};
|
|
25
30
|
|
|
@@ -8,6 +8,11 @@ import NewFolderModal from '../new-folder-modal';
|
|
|
8
8
|
|
|
9
9
|
class ContentExplorerModalContainer extends Component {
|
|
10
10
|
static propTypes = {
|
|
11
|
+
/**
|
|
12
|
+
* Extra columns displayed in the folders table after folder name column
|
|
13
|
+
* Each column has to be a Column element
|
|
14
|
+
*/
|
|
15
|
+
additionalColumns: PropTypes.arrayOf(PropTypes.element),
|
|
11
16
|
/** Breadcrumb component options */
|
|
12
17
|
breadcrumbProps: BreadcrumbPropType,
|
|
13
18
|
/** Adds class name. */
|
|
@@ -110,14 +115,20 @@ class ContentExplorerModalContainer extends Component {
|
|
|
110
115
|
itemNameLinkRenderer: PropTypes.func,
|
|
111
116
|
/** Used to render item buttons in the list. Overrides the default buttons. */
|
|
112
117
|
itemButtonRenderer: PropTypes.func,
|
|
118
|
+
/** Height of an item row */
|
|
119
|
+
itemRowHeight: PropTypes.number,
|
|
120
|
+
/** Used to render the row element for items on the list */
|
|
121
|
+
itemRowRenderer: PropTypes.func,
|
|
122
|
+
/** Height of the item list header, defaults to 0, which makes header not visible */
|
|
123
|
+
listHeaderHeight: PropTypes.number,
|
|
124
|
+
/** Used to render the header row on the item list */
|
|
125
|
+
listHeaderRenderer: PropTypes.func,
|
|
113
126
|
/** Whether the new folder button should be shown */
|
|
114
127
|
showCreateNewFolderButton: PropTypes.bool,
|
|
115
128
|
/** Props for the search input */
|
|
116
129
|
searchInputProps: PropTypes.object,
|
|
117
130
|
/** Custom text for the choose button */
|
|
118
131
|
chooseButtonText: PropTypes.node,
|
|
119
|
-
/** Table row height */
|
|
120
|
-
rowHeight: PropTypes.number,
|
|
121
132
|
};
|
|
122
133
|
|
|
123
134
|
static defaultProps = {
|
|
@@ -125,6 +125,7 @@ const itemLoadingPlaceholderRenderer = rendererParams => {
|
|
|
125
125
|
};
|
|
126
126
|
|
|
127
127
|
const ItemList = ({
|
|
128
|
+
additionalColumns,
|
|
128
129
|
contentExplorerMode,
|
|
129
130
|
className = '',
|
|
130
131
|
isResponsive = false,
|
|
@@ -136,6 +137,8 @@ const ItemList = ({
|
|
|
136
137
|
onItemDoubleClick,
|
|
137
138
|
onItemNameClick,
|
|
138
139
|
onLoadMoreItems,
|
|
140
|
+
headerHeight,
|
|
141
|
+
headerRenderer,
|
|
139
142
|
itemIconRenderer,
|
|
140
143
|
itemNameLinkRenderer,
|
|
141
144
|
itemButtonRenderer,
|
|
@@ -218,6 +221,8 @@ const ItemList = ({
|
|
|
218
221
|
headerClassName="table-header-item"
|
|
219
222
|
width={width}
|
|
220
223
|
height={height}
|
|
224
|
+
headerHeight={headerHeight}
|
|
225
|
+
headerRowRenderer={headerRenderer}
|
|
221
226
|
rowHeight={rowHeight}
|
|
222
227
|
rowCount={items.length}
|
|
223
228
|
onRowClick={onItemClick}
|
|
@@ -249,6 +254,7 @@ const ItemList = ({
|
|
|
249
254
|
flexGrow={1}
|
|
250
255
|
flexShrink={0}
|
|
251
256
|
/>
|
|
257
|
+
{additionalColumns}
|
|
252
258
|
<Column
|
|
253
259
|
className="item-list-button-col"
|
|
254
260
|
cellRenderer={itemButtonCellRenderer}
|
|
@@ -268,6 +274,7 @@ const ItemList = ({
|
|
|
268
274
|
ItemList.displayName = 'ItemList';
|
|
269
275
|
|
|
270
276
|
ItemList.propTypes = {
|
|
277
|
+
additionalColumns: PropTypes.arrayOf(PropTypes.element),
|
|
271
278
|
className: PropTypes.string,
|
|
272
279
|
contentExplorerMode: ContentExplorerModePropType.isRequired,
|
|
273
280
|
isResponsive: PropTypes.bool,
|
|
@@ -279,6 +286,8 @@ ItemList.propTypes = {
|
|
|
279
286
|
onItemDoubleClick: PropTypes.func,
|
|
280
287
|
onItemNameClick: PropTypes.func,
|
|
281
288
|
onLoadMoreItems: PropTypes.func,
|
|
289
|
+
headerHeight: PropTypes.number,
|
|
290
|
+
headerRenderer: PropTypes.func,
|
|
282
291
|
itemIconRenderer: PropTypes.func,
|
|
283
292
|
itemNameLinkRenderer: PropTypes.func,
|
|
284
293
|
itemButtonRenderer: PropTypes.func,
|
|
@@ -2,6 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import { mount } from 'enzyme';
|
|
3
3
|
import sinon from 'sinon';
|
|
4
4
|
|
|
5
|
+
import { Column } from '@box/react-virtualized';
|
|
5
6
|
import { ItemListBase as ItemList } from '../ItemList';
|
|
6
7
|
import ContentExplorerMode from '../../modes';
|
|
7
8
|
|
|
@@ -267,4 +268,49 @@ describe('features/content-explorer/item-list/ItemList', () => {
|
|
|
267
268
|
expect(wrapper.find('h1').text()).toEqual(emptyText);
|
|
268
269
|
});
|
|
269
270
|
});
|
|
271
|
+
|
|
272
|
+
describe('additionalColumns', () => {
|
|
273
|
+
test('should render extra column', () => {
|
|
274
|
+
const items = [
|
|
275
|
+
{ id: '1', name: 'item1' },
|
|
276
|
+
{ id: '2', name: 'item2' },
|
|
277
|
+
{ id: '3', name: 'item3' },
|
|
278
|
+
];
|
|
279
|
+
|
|
280
|
+
const additionalColumns = [
|
|
281
|
+
<Column
|
|
282
|
+
key="accessLevel"
|
|
283
|
+
className="item-list-accessLevel-col"
|
|
284
|
+
dataKey="accessLevel"
|
|
285
|
+
flexGrow={1}
|
|
286
|
+
flexShrink={0}
|
|
287
|
+
width={0}
|
|
288
|
+
/>,
|
|
289
|
+
];
|
|
290
|
+
const wrapper = renderComponent({ items, additionalColumns });
|
|
291
|
+
expect(wrapper.find('.item-list-accessLevel-col').length).toBe(3);
|
|
292
|
+
});
|
|
293
|
+
});
|
|
294
|
+
|
|
295
|
+
describe('headerHeight', () => {
|
|
296
|
+
test('should display header row with specified height', () => {
|
|
297
|
+
const headerHeight = 30;
|
|
298
|
+
const wrapper = renderComponent({
|
|
299
|
+
headerHeight,
|
|
300
|
+
});
|
|
301
|
+
|
|
302
|
+
const header = wrapper.find('.ReactVirtualized__Table__headerRow');
|
|
303
|
+
expect(header.props().style.height).toBe(headerHeight);
|
|
304
|
+
});
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
describe('headerRenderer', () => {
|
|
308
|
+
test('should use headerRenderer when specified', () => {
|
|
309
|
+
const wrapper = renderComponent({
|
|
310
|
+
headerRenderer: () => <div data-testid="customHeader">Custom Header</div>,
|
|
311
|
+
});
|
|
312
|
+
const headerRow = wrapper.find("[data-testid='customHeader']");
|
|
313
|
+
expect(headerRow.length).toBe(1);
|
|
314
|
+
});
|
|
315
|
+
});
|
|
270
316
|
});
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
border-top: none;
|
|
35
35
|
border-radius: 0 0 $bdl-border-radius-size-med $bdl-border-radius-size-med;
|
|
36
36
|
|
|
37
|
-
// NOTE
|
|
37
|
+
// NOTE: targets ie11
|
|
38
38
|
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
|
|
39
39
|
max-height: 300px;
|
|
40
40
|
}
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
|
|
68
68
|
// NOTE: targets ie11
|
|
69
69
|
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
|
|
70
|
-
//
|
|
70
|
+
// NOTE: Avoids cutting off the last item in the list
|
|
71
71
|
height: 300px;
|
|
72
72
|
}
|
|
73
73
|
|