@@ -24,6 +24,7 @@ import ThemingStyles from '../common/theming';
24
24
import API from '../../api' ;
25
25
import MetadataQueryAPIHelperV2 from './MetadataQueryAPIHelper' ;
26
26
import MetadataQueryAPIHelper from '../../features/metadata-based-view/MetadataQueryAPIHelper' ;
27
+ import MetadataSidePanel from './MetadataSidePanel' ;
27
28
import Footer from './Footer' ;
28
29
import PreviewDialog from '../common/preview-dialog/PreviewDialog' ;
29
30
import ShareDialog from './ShareDialog' ;
@@ -169,6 +170,7 @@ type State = {
169
170
isCreateFolderModalOpen : boolean ;
170
171
isDeleteModalOpen : boolean ;
171
172
isLoading : boolean ;
173
+ isMetadataSidePanelOpen : boolean ;
172
174
isPreviewModalOpen : boolean ;
173
175
isRenameModalOpen : boolean ;
174
176
isShareModalOpen : boolean ;
@@ -294,6 +296,7 @@ class ContentExplorer extends Component<ContentExplorerProps, State> {
294
296
isCreateFolderModalOpen : false ,
295
297
isDeleteModalOpen : false ,
296
298
isLoading : false ,
299
+ isMetadataSidePanelOpen : false ,
297
300
isPreviewModalOpen : false ,
298
301
isRenameModalOpen : false ,
299
302
isShareModalOpen : false ,
@@ -1543,7 +1546,11 @@ class ContentExplorer extends Component<ContentExplorerProps, State> {
1543
1546
selectedKeys : selectedItemIds ,
1544
1547
onSelectionChange : ( ids : Selection ) => {
1545
1548
onSelectionChange ?.( ids ) ;
1546
- this . setState ( { selectedItemIds : ids } ) ;
1549
+ const isSelectionEmpty = ids !== 'all' && ids . size === 0 ;
1550
+ this . setState ( {
1551
+ selectedItemIds : ids ,
1552
+ ...( isSelectionEmpty && { isMetadataSidePanelOpen : false } ) ,
1553
+ } ) ;
1547
1554
} ,
1548
1555
} ,
1549
1556
} ;
@@ -1625,7 +1632,32 @@ class ContentExplorer extends Component<ContentExplorerProps, State> {
1625
1632
} ;
1626
1633
1627
1634
clearSelectedItemIds = ( ) => {
1628
- this . setState ( { selectedItemIds : new Set ( ) } ) ;
1635
+ this . setState ( {
1636
+ selectedItemIds : new Set ( ) ,
1637
+ isMetadataSidePanelOpen : false ,
1638
+ } ) ;
1639
+ } ;
1640
+
1641
+ /**
1642
+ * Toggle metadata side panel visibility
1643
+ *
1644
+ * @private
1645
+ * @return {void }
1646
+ */
1647
+ toggleMetadataSidePanel = ( ) => {
1648
+ this . setState ( prevState => ( {
1649
+ isMetadataSidePanelOpen : ! prevState . isMetadataSidePanelOpen ,
1650
+ } ) ) ;
1651
+ } ;
1652
+
1653
+ /**
1654
+ * Close metadata side panel
1655
+ *
1656
+ * @private
1657
+ * @return {void }
1658
+ */
1659
+ closeMetadataSidePanel = ( ) => {
1660
+ this . setState ( { isMetadataSidePanelOpen : false } ) ;
1629
1661
} ;
1630
1662
1631
1663
/**
@@ -1725,6 +1757,7 @@ class ContentExplorer extends Component<ContentExplorerProps, State> {
1725
1757
const allowUpload : boolean = canUpload && ! ! can_upload ;
1726
1758
const allowCreate : boolean = canCreateNewFolder && ! ! can_upload ;
1727
1759
const isDefaultViewMetadata : boolean = defaultView === DEFAULT_VIEW_METADATA ;
1760
+ const isMetadataViewV2Feature = isFeatureEnabled ( features , 'contentExplorer.metadataViewV2' ) ;
1728
1761
const isErrorView : boolean = view === VIEW_ERROR ;
1729
1762
1730
1763
const viewMode = this . getViewMode ( ) ;
@@ -1743,76 +1776,96 @@ class ContentExplorer extends Component<ContentExplorerProps, State> {
1743
1776
< div id = { this . id } className = { styleClassName } ref = { measureRef } data-testid = "content-explorer" >
1744
1777
< ThemingStyles selector = { `#${ this . id } ` } theme = { theme } />
1745
1778
< div className = "be-app-element" onKeyDown = { this . onKeyDown } tabIndex = { 0 } >
1746
- { ! isDefaultViewMetadata && < Header view = { view } logoUrl = { logoUrl } onSearch = { this . search } /> }
1747
-
1748
- < SubHeader
1749
- view = { view }
1750
- viewMode = { viewMode }
1751
- rootId = { rootFolderId }
1752
- isSmall = { isSmall }
1753
- rootName = { rootName }
1754
- currentCollection = { currentCollection }
1755
- canUpload = { allowUpload }
1756
- canCreateNewFolder = { allowCreate }
1757
- gridColumnCount = { gridColumnCount }
1758
- gridMaxColumns = { GRID_VIEW_MAX_COLUMNS }
1759
- gridMinColumns = { GRID_VIEW_MIN_COLUMNS }
1760
- maxGridColumnCountForWidth = { maxGridColumnCount }
1761
- onUpload = { this . upload }
1762
- onClearSelectedItemIds = { this . clearSelectedItemIds }
1763
- onCreate = { this . createFolder }
1764
- onGridViewSliderChange = { this . onGridViewSliderChange }
1765
- onItemClick = { this . fetchFolder }
1766
- onSortChange = { this . sort }
1767
- onViewModeChange = { this . changeViewMode }
1768
- portalElement = { this . rootElement }
1769
- selectedItemIds = { this . state . selectedItemIds }
1770
- title = { title }
1771
- />
1779
+ < div className = "bce-container" >
1780
+ < div className = "bce-main" >
1781
+ { ! isDefaultViewMetadata && (
1782
+ < Header view = { view } logoUrl = { logoUrl } onSearch = { this . search } />
1783
+ ) }
1784
+
1785
+ < SubHeader
1786
+ view = { view }
1787
+ viewMode = { viewMode }
1788
+ rootId = { rootFolderId }
1789
+ isSmall = { isSmall }
1790
+ rootName = { rootName }
1791
+ currentCollection = { currentCollection }
1792
+ canUpload = { allowUpload }
1793
+ canCreateNewFolder = { allowCreate }
1794
+ gridColumnCount = { gridColumnCount }
1795
+ gridMaxColumns = { GRID_VIEW_MAX_COLUMNS }
1796
+ gridMinColumns = { GRID_VIEW_MIN_COLUMNS }
1797
+ maxGridColumnCountForWidth = { maxGridColumnCount }
1798
+ onUpload = { this . upload }
1799
+ onClearSelectedItemIds = { this . clearSelectedItemIds }
1800
+ onCreate = { this . createFolder }
1801
+ onGridViewSliderChange = { this . onGridViewSliderChange }
1802
+ onItemClick = { this . fetchFolder }
1803
+ onSortChange = { this . sort }
1804
+ onToggleMetadataSidePanel = { this . toggleMetadataSidePanel }
1805
+ onViewModeChange = { this . changeViewMode }
1806
+ portalElement = { this . rootElement }
1807
+ selectedItemIds = { this . state . selectedItemIds }
1808
+ title = { title }
1809
+ />
1772
1810
1773
- < Content
1774
- canDelete = { canDelete }
1775
- canDownload = { canDownload }
1776
- canPreview = { canPreview }
1777
- canRename = { canRename }
1778
- canShare = { canShare }
1779
- currentCollection = { currentCollection }
1780
- features = { features }
1781
- gridColumnCount = { Math . min ( gridColumnCount , maxGridColumnCount ) }
1782
- isMedium = { isMedium }
1783
- isSmall = { isSmall }
1784
- isTouch = { isTouch }
1785
- itemActions = { itemActions }
1786
- fieldsToShow = { fieldsToShow }
1787
- metadataTemplate = { metadataTemplate }
1788
- metadataViewProps = { metadataViewProps }
1789
- onItemClick = { this . onItemClick }
1790
- onItemDelete = { this . delete }
1791
- onItemDownload = { this . download }
1792
- onItemPreview = { this . preview }
1793
- onItemRename = { this . rename }
1794
- onItemSelect = { this . select }
1795
- onItemShare = { this . share }
1796
- onMetadataUpdate = { this . updateMetadata }
1797
- onSortChange = { this . sort }
1798
- portalElement = { this . rootElement }
1799
- view = { view }
1800
- viewMode = { viewMode }
1801
- />
1802
- { ! isErrorView && (
1803
- < Footer >
1804
- < Pagination
1805
- hasNextMarker = { hasNextMarker }
1806
- hasPrevMarker = { hasPreviousMarker }
1811
+ < Content
1812
+ canDelete = { canDelete }
1813
+ canDownload = { canDownload }
1814
+ canPreview = { canPreview }
1815
+ canRename = { canRename }
1816
+ canShare = { canShare }
1817
+ currentCollection = { currentCollection }
1818
+ features = { features }
1819
+ gridColumnCount = { Math . min ( gridColumnCount , maxGridColumnCount ) }
1820
+ isMedium = { isMedium }
1807
1821
isSmall = { isSmall }
1808
- offset = { offset }
1809
- onOffsetChange = { this . paginate }
1810
- pageSize = { currentPageSize }
1811
- totalCount = { totalCount }
1812
- onMarkerBasedPageChange = { this . markerBasedPaginate }
1822
+ isTouch = { isTouch }
1823
+ itemActions = { itemActions }
1824
+ fieldsToShow = { fieldsToShow }
1825
+ metadataTemplate = { metadataTemplate }
1826
+ metadataViewProps = { metadataViewProps }
1827
+ onItemClick = { this . onItemClick }
1828
+ onItemDelete = { this . delete }
1829
+ onItemDownload = { this . download }
1830
+ onItemPreview = { this . preview }
1831
+ onItemRename = { this . rename }
1832
+ onItemSelect = { this . select }
1833
+ onItemShare = { this . share }
1834
+ onMetadataUpdate = { this . updateMetadata }
1835
+ onSortChange = { this . sort }
1836
+ portalElement = { this . rootElement }
1837
+ view = { view }
1838
+ viewMode = { viewMode }
1813
1839
/>
1814
- </ Footer >
1815
- ) }
1840
+
1841
+ { ! isErrorView && (
1842
+ < Footer >
1843
+ < Pagination
1844
+ hasNextMarker = { hasNextMarker }
1845
+ hasPrevMarker = { hasPreviousMarker }
1846
+ isSmall = { isSmall }
1847
+ offset = { offset }
1848
+ onOffsetChange = { this . paginate }
1849
+ pageSize = { currentPageSize }
1850
+ totalCount = { totalCount }
1851
+ onMarkerBasedPageChange = { this . markerBasedPaginate }
1852
+ />
1853
+ </ Footer >
1854
+ ) }
1855
+ </ div >
1856
+ { isDefaultViewMetadata &&
1857
+ isMetadataViewV2Feature &&
1858
+ this . state . isMetadataSidePanelOpen && (
1859
+ < div className = "bce-sidepanel" >
1860
+ < MetadataSidePanel
1861
+ currentCollection = { currentCollection }
1862
+ closeMetadataSidePanel = { this . closeMetadataSidePanel }
1863
+ metadataTemplate = { metadataTemplate }
1864
+ selectedItemIds = { this . state . selectedItemIds }
1865
+ />
1866
+ </ div >
1867
+ ) }
1868
+ </ div >
1816
1869
</ div >
1817
1870
{ allowUpload && ! ! this . appElement ? (
1818
1871
< UploadDialog
0 commit comments