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.
Files changed (20) hide show
  1. package/es/features/content-explorer/content-explorer/ContentExplorer.js +27 -9
  2. package/es/features/content-explorer/content-explorer/ContentExplorer.js.flow +20 -5
  3. package/es/features/content-explorer/content-explorer/ContentExplorer.js.map +1 -1
  4. package/es/features/content-explorer/content-explorer-modal/ContentExplorerModal.js +1 -0
  5. package/es/features/content-explorer/content-explorer-modal/ContentExplorerModal.js.flow +6 -1
  6. package/es/features/content-explorer/content-explorer-modal/ContentExplorerModal.js.map +1 -1
  7. package/es/features/content-explorer/content-explorer-modal-container/ContentExplorerModalContainer.js +19 -4
  8. package/es/features/content-explorer/content-explorer-modal-container/ContentExplorerModalContainer.js.flow +13 -2
  9. package/es/features/content-explorer/content-explorer-modal-container/ContentExplorerModalContainer.js.map +1 -1
  10. package/es/features/content-explorer/item-list/ItemList.js +10 -2
  11. package/es/features/content-explorer/item-list/ItemList.js.flow +9 -0
  12. package/es/features/content-explorer/item-list/ItemList.js.map +1 -1
  13. package/es/features/metadata-instance-editor/TemplateDropdown.scss +2 -2
  14. package/package.json +1 -1
  15. package/src/features/content-explorer/content-explorer/ContentExplorer.js +20 -5
  16. package/src/features/content-explorer/content-explorer-modal/ContentExplorerModal.js +6 -1
  17. package/src/features/content-explorer/content-explorer-modal-container/ContentExplorerModalContainer.js +13 -2
  18. package/src/features/content-explorer/item-list/ItemList.js +9 -0
  19. package/src/features/content-explorer/item-list/__tests__/ItemList.test.js +46 -0
  20. 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
- rowHeight = _this$props4.rowHeight,
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:o nly expecting to have 1 (choose) button so as long as something
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:o nly expecting to have 1 (choose) button so as long as something
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;;AAgBA,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,EAAEP,UAAU,CAAC,wBAAD,EAA2BK,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 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 breadcrumbProps?: BreadcrumbProps,\n className?: string,\n customInput?: React.ComponentType<any>,\n description?: string,\n isOpen?: boolean,\n isResponsive?: boolean,\n onRequestClose?: Function,\n onSelectItem?: (item: Object, index: number) => void,\n onSelectedClick?: () => void,\n rowHeight?: number,\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"}
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":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAOA,SAAP,MAAsB,YAAtB;AACA,OAAOC,KAAP,IAAgBC,SAAhB,QAAiC,OAAjC;AACA,OAAOC,UAAP,MAAuB,YAAvB;AAEA,SAASC,kBAAT,EAA6BC,2BAA7B,EAA0DC,mBAA1D,EAA+EC,aAA/E,QAAoG,eAApG;AACA,OAAOC,oBAAP,MAAiC,2BAAjC;AACA,OAAOC,cAAP,MAA2B,qBAA3B;;IAEMC,6B;;;;;AAsHF,yCAAYC,KAAZ,EAAmB;AAAA;;AAAA;;AACf,uGAAMA,KAAN;;AADe,wEAoBC,UAACC,aAAD,EAAgBC,cAAhB,EAAmC;AAAA,UAC3CC,aAD2C,GACzB,MAAKH,KADoB,CAC3CG,aAD2C;;AAGnD,YAAKC,QAAL,CAAc;AAAEC,QAAAA,WAAW,EAAEH;AAAf,OAAd;;AACAC,MAAAA,aAAa,CAACF,aAAD,EAAgBC,cAAhB,CAAb;AACH,KAzBkB;;AAAA,uFA2BgB,YAAM;AAAA,UAC7BI,qBAD6B,GACH,MAAKN,KADF,CAC7BM,qBAD6B;;AAGrC,YAAKF,QAAL,CAAc;AAAEG,QAAAA,oBAAoB,EAAE;AAAxB,OAAd,EAA8C;AAAA,eAAMD,qBAAqB,IAAIA,qBAAqB,EAApD;AAAA,OAA9C;AACH,KA/BkB;;AAAA,gFAiCS,YAAM;AAAA,UACtBE,sBADsB,GACK,MAAKR,KADV,CACtBQ,sBADsB;;AAG9B,YAAKJ,QAAL,CAAc;AAAEG,QAAAA,oBAAoB,EAAE;AAAxB,OAAd,EAA+C;AAAA,eAAMC,sBAAsB,IAAIA,sBAAsB,EAAtD;AAAA,OAA/C;AACH,KArCkB;;AAEf,UAAKC,KAAL,GAAa;AACTJ,MAAAA,WAAW,EAAEL,KAAK,CAACU,kBADV;AAETH,MAAAA,oBAAoB,EAAE;AAFb,KAAb;AAFe;AAMlB;;;;6CAEkE;AAAA,UAA1BI,sBAA0B,QAA9CD,kBAA8C;AAAA,UACvDA,kBADuD,GAChC,KAAKV,KAD2B,CACvDU,kBADuD;;AAG/D,UAAIC,sBAAsB,KAAKD,kBAA/B,EAAmD;AAC/C;AACA,aAAKN,QAAL,CAAc;AACVC,UAAAA,WAAW,EAAEK,kBADH;AAEVH,UAAAA,oBAAoB,EAAE;AAFZ,SAAd;AAIH;AACJ;;;6BAqBQ;AAAA,wBAWD,KAAKP,KAXJ;AAAA,UAEDY,SAFC,eAEDA,SAFC;AAAA,UAGDC,UAHC,eAGDA,UAHC;AAAA,UAIDC,gBAJC,eAIDA,gBAJC;AAAA,UAKDC,oBALC,eAKDA,oBALC;AAAA,UAMDC,mBANC,eAMDA,mBANC;AAAA,UAODC,gBAPC,eAODA,gBAPC;AAAA,UAQDC,iBARC,eAQDA,iBARC;AAAA,UASDR,kBATC,eASDA,kBATC;AAAA,UAUES,IAVF;;AAAA,wBAYyC,KAAKV,KAZ9C;AAAA,UAYGJ,WAZH,eAYGA,WAZH;AAAA,UAYgBE,oBAZhB,eAYgBA,oBAZhB;AAaL,UAAMa,aAAa,GAAGf,WAAW,CAACA,WAAW,CAACgB,MAAZ,GAAqB,CAAtB,CAAjC;AAEA,aACI;AAAK,QAAA,SAAS,EAAE7B,UAAU,CAAC,kCAAD,EAAqCoB,SAArC;AAA1B,SACI,oBAAC,oBAAD;AACI,QAAA,SAAS,EAAEL,oBAAoB,GAAG,QAAH,GAAc,EADjD;AAEI,QAAA,KAAK,EAAEM,UAFX;AAGI,QAAA,WAAW,EAAEC,gBAHjB;AAII,QAAA,kBAAkB,EAAEJ,kBAJxB;AAKI,QAAA,MAAM,MALV;AAMI,QAAA,aAAa,EAAE,KAAKY,iBANxB;AAOI,QAAA,4BAA4B,EAAE,KAAKC;AAPvC,SAQQJ,IARR,EADJ,EAWKZ,oBAAoB,IACjB,oBAAC,cAAD;AACI,QAAA,MAAM,MADV;AAEI,QAAA,gBAAgB,EAAEa,aAAa,CAACI,IAFpC;AAGI,QAAA,cAAc,EAAE,KAAKC,yBAHzB;AAII,QAAA,oBAAoB,EAAEV,oBAJ1B;AAKI,QAAA,mBAAmB,EAAEC,mBALzB;AAMI,QAAA,gBAAgB,EAAEC,gBANtB;AAOI,QAAA,iBAAiB,EAAEC;AAPvB,QAZR,CADJ;AAyBH;;;;EArMuC3B,S;;gBAAtCQ,6B,eACiB;AACf;AACA2B,EAAAA,eAAe,EAAEjC,kBAFF;;AAGf;AACAmB,EAAAA,SAAS,EAAEvB,SAAS,CAACsC,MAJN;;AAKf;AACAC,EAAAA,sBAAsB,EAAEvC,SAAS,CAACwC,IANnB;;AAOf;AACAhB,EAAAA,UAAU,EAAExB,SAAS,CAACsC,MARP;;AASf;AACAb,EAAAA,gBAAgB,EAAEzB,SAAS,CAACsC,MAVb;;AAWf;AACAG,EAAAA,cAAc,EAAEzC,SAAS,CAAC0C,IAAV,CAAeC,UAZhB;;AAaf;;;;;AAKAjB,EAAAA,oBAAoB,EAAE1B,SAAS,CAAC0C,IAlBjB;;AAmBf;;;;;AAKAf,EAAAA,mBAAmB,EAAE3B,SAAS,CAAC0C,IAxBhB;;AAyBf;AACAzB,EAAAA,qBAAqB,EAAEjB,SAAS,CAAC0C,IA1BlB;;AA2Bf;AACAvB,EAAAA,sBAAsB,EAAEnB,SAAS,CAAC0C,IA5BnB;;AA6Bf;AACAE,EAAAA,eAAe,EAAE5C,SAAS,CAAC0C,IA9BZ;;AA+Bf;;;;;;AAMAG,EAAAA,YAAY,EAAE7C,SAAS,CAAC0C,IArCT;;AAsCf;AACAd,EAAAA,gBAAgB,EAAE5B,SAAS,CAAC8C,IAvCb;;AAwCf;AACAC,EAAAA,kBAAkB,EAAE/C,SAAS,CAAC8C,IAzCf;;AA0Cf;AACAjB,EAAAA,iBAAiB,EAAE7B,SAAS,CAACsC,MA3Cd;;AA4Cf;AACAU,EAAAA,mBAAmB,EAAE3C,2BAA2B,CAACsC,UA7ClC;;AA8Cf;AACAtB,EAAAA,kBAAkB,EAAEf,mBAAmB,CAACqC,UA/CzB;;AAgDf;AACAM,EAAAA,oBAAoB,EAAEjD,SAAS,CAACkD,MAjDjB;;AAkDf;;;;;;AAMApC,EAAAA,aAAa,EAAEd,SAAS,CAAC0C,IAAV,CAAeC,UAxDf;;AAyDf;;;;;AAKAQ,EAAAA,aAAa,EAAEnD,SAAS,CAAC0C,IA9DV;;AA+Df;;;;;AAKAU,EAAAA,UAAU,EAAEpD,SAAS,CAAC0C,IApEP;;AAqEf;;;;;AAKAW,EAAAA,UAAU,EAAErD,SAAS,CAAC0C,IA1EP;;AA2Ef;AACAY,EAAAA,wBAAwB,EAAEtD,SAAS,CAAC8C,IA5ErB;;AA6Ef;;;;;AAKAS,EAAAA,cAAc,EAAEvD,SAAS,CAAC0C,IAAV,CAAeC,UAlFhB;;AAmFf;;;;;AAKAa,EAAAA,YAAY,EAAExD,SAAS,CAAC0C,IAAV,CAAeC,UAxFd;;AAyFf;AACAc,EAAAA,KAAK,EAAElD,aAAa,CAACoC,UA1FN;;AA2Ff;AACAe,EAAAA,eAAe,EAAE1D,SAAS,CAAC2D,MA5FZ;;AA6Ff;AACAC,EAAAA,aAAa,EAAE5D,SAAS,CAAC2D,MA9FV;;AA+Ff;AACAE,EAAAA,eAAe,EAAE7D,SAAS,CAAC0C,IAhGZ;;AAiGf;AACAoB,EAAAA,gBAAgB,EAAE9D,SAAS,CAAC0C,IAlGb;;AAmGf;AACAqB,EAAAA,oBAAoB,EAAE/D,SAAS,CAAC0C,IApGjB;;AAqGf;AACAsB,EAAAA,kBAAkB,EAAEhE,SAAS,CAAC0C,IAtGf;;AAuGf;AACAuB,EAAAA,yBAAyB,EAAEjE,SAAS,CAAC8C,IAxGtB;;AAyGf;AACAoB,EAAAA,gBAAgB,EAAElE,SAAS,CAACkD,MA1Gb;;AA2Gf;AACAiB,EAAAA,gBAAgB,EAAEnE,SAAS,CAACwC,IA5Gb;;AA6Gf;AACA4B,EAAAA,SAAS,EAAEpE,SAAS,CAAC2D;AA9GN,C;;gBADjBjD,6B,kBAkHoB;AAClBgB,EAAAA,oBAAoB,EAAE,gCAAM,CAAE;AADZ,C;;AAsF1B,eAAehB,6BAAf","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 contentExplorerMode = _ref2.contentExplorerMode,
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 (cwei): targets ie11
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
- // Note (lbarrick) Avoids cutting off the last item in the list.
70
+ // NOTE: Avoids cutting off the last item in the list
71
71
  height: 300px;
72
72
  }
73
73
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "box-ui-elements",
3
- "version": "16.1.0-beta.16",
3
+ "version": "16.1.0-beta.17",
4
4
  "description": "Box UI Elements",
5
5
  "author": "Box (https://www.box.com/)",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -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:o nly expecting to have 1 (choose) button so as long as something
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 (cwei): targets ie11
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
- // Note (lbarrick) Avoids cutting off the last item in the list.
70
+ // NOTE: Avoids cutting off the last item in the list
71
71
  height: 300px;
72
72
  }
73
73