// Copyright (C) The Arvados Authors. All rights reserved. // // SPDX-License-Identifier: AGPL-3.0 import * as React from 'react'; import { CollectionIcon } from '~/components/icon/icon'; import { CollectionResource } from '~/models/collection'; import { DetailsData } from "./details-data"; import { CollectionDetailsAttributes } from '~/views/collection-panel/collection-panel'; import { RootState } from '~/store/store'; import { filterResources, getResource } from '~/store/resources/resources'; import { connect } from 'react-redux'; import { Grid, ListItem, StyleRulesCallback, Typography, withStyles, WithStyles } from '@material-ui/core'; import { formatDate, formatFileSize } from '~/common/formatters'; import { Dispatch } from 'redux'; import { navigateTo } from '~/store/navigation/navigation-action'; export type CssRules = 'versionBrowserHeader' | 'versionBrowserItem'; const styles: StyleRulesCallback = theme => ({ versionBrowserHeader: { textAlign: 'center', fontWeight: 'bold', }, versionBrowserItem: { textAlign: 'center', } }); export class CollectionDetails extends DetailsData { getIcon(className?: string) { return ; } getTabLabels() { return ['Details', 'Versions']; } getDetails(tabNumber: number) { switch (tabNumber) { case 0: return this.getCollectionInfo(); case 1: return this.getVersionBrowser(); default: return
; } } private getCollectionInfo() { return ; } private getVersionBrowser() { return ; } } interface CollectionVersionBrowserProps { currentCollection: CollectionResource | undefined; versions: CollectionResource[]; } interface CollectionVersionBrowserDispatchProps { showVersion: (c: CollectionResource) => void; } const mapStateToProps = (state: RootState): CollectionVersionBrowserProps => { const currentCollection = getResource(state.detailsPanel.resourceUuid)(state.resources); const versions = currentCollection && filterResources(rsc => (rsc as CollectionResource).currentVersionUuid === currentCollection.currentVersionUuid)(state.resources) .sort((a: CollectionResource, b: CollectionResource) => b.version - a.version) as CollectionResource[] || []; return { currentCollection, versions }; }; const mapDispatchToProps = () => (dispatch: Dispatch): CollectionVersionBrowserDispatchProps => ({ showVersion: (collection) => dispatch(navigateTo(collection.uuid)), }); const CollectionVersionBrowser = withStyles(styles)( connect(mapStateToProps, mapDispatchToProps)( ({ currentCollection, versions, showVersion, classes }: CollectionVersionBrowserProps & CollectionVersionBrowserDispatchProps & WithStyles) => { return
Nr Size Date { versions.map(item => { const isSelectedVersion = !!(currentCollection && currentCollection.uuid === item.uuid); return ( showVersion(item)} selected={isSelectedVersion}> {item.version} {formatFileSize(item.fileSizeTotal)} {formatDate(item.modifiedAt)} ); })}
; }));