import React, { ReactElement } from 'react'; import List from '@material-ui/core/List'; import { Link as RouterLink } from 'react-router-dom'; import Link from '@material-ui/core/Link'; import ListItem from '@material-ui/core/ListItem'; import { DetailContextConsumer } from '../../pages/Version'; import { formatDateDistance } from '../../utils/package'; import { DIST_TAGS } from '../../../lib/constants'; import { Heading, Spacer, ListItemText } from './styles'; export const NOT_AVAILABLE = 'Not available'; export const LABEL_CURRENT_TAGS = 'Current Tags'; export const LABEL_VERSION_HISTORY = 'Version History'; class Versions extends React.PureComponent { public render(): ReactElement { return ( {context => { const { packageMeta, packageName } = context; if (!packageMeta) { return null; } return this.renderContent(packageMeta, packageName); }} ); } public renderPackageList = (packages: {}, timeMap: Record, packageName): ReactElement => { return ( {Object.keys(packages) .reverse() .map(version => ( {version} {timeMap[version] ? `${formatDateDistance(timeMap[version])} ago` : NOT_AVAILABLE} ))} ); }; public renderTagList = (packages: {}): ReactElement => { return ( {Object.keys(packages) .reverse() .map(tag => ( {tag} {packages[tag]} ))} ); }; public renderContent(packageMeta, packageName): ReactElement { const { versions = {}, time: timeMap = {}, [DIST_TAGS]: distTags = {} } = packageMeta; return ( <> {distTags && ( <> {LABEL_CURRENT_TAGS} {this.renderTagList(distTags)} )} {versions && ( <> {LABEL_VERSION_HISTORY} {this.renderPackageList(versions, timeMap, packageName)} )} ); } } export default Versions;