@@ -10,42 +10,71 @@ import InlineError from '../../../components/inline-error';
1010import messages from './messages' ;
1111import messagesCommon from '../../common/messages' ;
1212import SidebarContent from '../SidebarContent' ;
13- import VersionsList from './VersionsList ' ;
13+ import VersionsGroup , { getGroup } from './VersionsGroup ' ;
1414import { BackButton } from '../../common/nav-button' ;
1515import { LoadingIndicatorWrapper } from '../../../components/loading-indicator' ;
16- import type { VersionActionCallback } from './Versions' ;
1716import './VersionsSidebar.scss' ;
1817
1918type Props = {
2019 error ?: string ,
2120 fileId : string ,
2221 isLoading : boolean ,
23- onDelete : VersionActionCallback ,
24- onDownload : VersionActionCallback ,
25- onPreview : VersionActionCallback ,
26- onPromote : VersionActionCallback ,
27- onRestore : VersionActionCallback ,
2822 parentName : string ,
2923 versions : Array < BoxItemVersion > ,
3024} ;
3125
32- const VersionsSidebar = ( { error, isLoading, parentName, ...rest } : Props ) => (
33- < SidebarContent
34- className = "bcs-Versions"
35- data-resin-component = "preview"
36- data-resin-feature = "versions"
37- title = {
38- < React . Fragment >
39- < BackButton data-resin-target = "back" to = { `/${ parentName } ` } />
40- < FormattedMessage { ...messages . versionsTitle } />
41- </ React . Fragment >
42- }
43- >
44- < LoadingIndicatorWrapper className = "bcs-Versions-content" crawlerPosition = "top" isLoading = { isLoading } >
45- { error && < InlineError title = { < FormattedMessage { ...messagesCommon . error } /> } > { error } </ InlineError > }
46- < VersionsList isLoading = { isLoading } { ...rest } />
47- </ LoadingIndicatorWrapper >
48- </ SidebarContent >
49- ) ;
26+ const VersionsSidebar = ( { error, isLoading, fileId, parentName, versions, ...rest } : Props ) => {
27+ const { id : currentId } = versions [ 0 ] || { } ;
28+ const showVersions = ! ! versions . length ;
29+ const showEmpty = ! isLoading && ! showVersions ;
30+ const versionGroups = versions . reduce ( ( groups , version ) => {
31+ const versionGroup = getGroup ( version ) ;
32+
33+ groups [ versionGroup ] = groups [ versionGroup ] || [ ] ;
34+ groups [ versionGroup ] . push ( version ) ;
35+
36+ return groups ;
37+ } , { } ) ;
38+
39+ return (
40+ < SidebarContent
41+ className = "bcs-Versions"
42+ data-resin-component = "preview"
43+ data-resin-feature = "versions"
44+ title = {
45+ < React . Fragment >
46+ < BackButton data-resin-target = "back" to = { `/${ parentName } ` } />
47+ < FormattedMessage { ...messages . versionsTitle } />
48+ </ React . Fragment >
49+ }
50+ >
51+ < LoadingIndicatorWrapper className = "bcs-Versions-content" crawlerPosition = "top" isLoading = { isLoading } >
52+ { error && < InlineError title = { < FormattedMessage { ...messagesCommon . error } /> } > { error } </ InlineError > }
53+
54+ { showEmpty && (
55+ < div className = "bcs-Versions-empty" >
56+ < FormattedMessage { ...messages . versionsEmpty } />
57+ </ div >
58+ ) }
59+
60+ { showVersions && (
61+ < ul className = "bcs-Versions-menu" >
62+ { Object . keys ( versionGroups ) . map ( versionGroupKey => (
63+ < li className = "bcs-Versions-menu-item" key = { versionGroupKey } >
64+ < VersionsGroup
65+ currentId = { currentId }
66+ fileId = { fileId }
67+ versionGroup = { versionGroupKey }
68+ versions = { versionGroups [ versionGroupKey ] }
69+ { ...rest }
70+ />
71+ </ li >
72+ ) ) }
73+ </ ul >
74+ ) }
75+ </ LoadingIndicatorWrapper >
76+ </ SidebarContent >
77+ ) ;
78+ } ;
5079
5180export default VersionsSidebar ;
0 commit comments