|
1 | | -import React, { ReactElement } from 'react'; |
| 1 | +import React, { useContext } from 'react'; |
2 | 2 | import List from '@material-ui/core/List'; |
3 | 3 | import ListItem from '@material-ui/core/ListItem'; |
4 | 4 |
|
5 | | -import { DetailContextConsumer } from '../../pages/Version'; |
| 5 | +import { DetailContext } from '../../pages/Version'; |
6 | 6 | import NoItems from '../NoItems'; |
7 | 7 | import { formatDateDistance } from '../../utils/package'; |
8 | 8 |
|
9 | 9 | import { Heading, Spacer, ListItemText } from './styles'; |
10 | 10 |
|
11 | | -class UpLinks extends React.PureComponent<{}> { |
12 | | - public render(): ReactElement<HTMLElement> { |
13 | | - return ( |
14 | | - <DetailContextConsumer> |
15 | | - {context => { |
16 | | - return ( |
17 | | - context && |
18 | | - context.packageMeta && |
19 | | - context.packageMeta && |
20 | | - context.packageMeta._uplinks && |
21 | | - context.packageMeta.latest && |
22 | | - this.renderContent(context.packageMeta._uplinks, context.packageMeta.latest) |
23 | | - ); |
24 | | - }} |
25 | | - </DetailContextConsumer> |
26 | | - ); |
| 11 | +const UpLinks: React.FC = () => { |
| 12 | + const { packageMeta } = useContext(DetailContext); |
| 13 | + |
| 14 | + if (!packageMeta || !packageMeta._uplinks || !packageMeta.latest) { |
| 15 | + return null; |
27 | 16 | } |
28 | 17 |
|
29 | | - public renderUpLinksList = uplinks => ( |
30 | | - <List> |
31 | | - {Object.keys(uplinks) |
32 | | - .reverse() |
33 | | - .map(name => ( |
34 | | - <ListItem key={name}> |
35 | | - <ListItemText>{name}</ListItemText> |
36 | | - <Spacer /> |
37 | | - <ListItemText>{`${formatDateDistance(uplinks[name].fetched)} ago`}</ListItemText> |
38 | | - </ListItem> |
39 | | - ))} |
40 | | - </List> |
41 | | - ); |
| 18 | + const { _uplinks: uplinks, latest } = packageMeta; |
42 | 19 |
|
43 | | - public renderContent(uplinks, { name }): ReactElement<HTMLElement> { |
44 | | - if (Object.keys(uplinks).length > 0) { |
45 | | - return ( |
46 | | - uplinks && ( |
47 | | - <> |
48 | | - <Heading variant="subtitle1">{'Uplinks'}</Heading> |
49 | | - {this.renderUpLinksList(uplinks)} |
50 | | - </> |
51 | | - ) |
52 | | - ); |
53 | | - } |
54 | | - return <NoItems text={`${name} has no uplinks.`} />; |
| 20 | + if (Object.keys(uplinks).length === 0) { |
| 21 | + return <NoItems text={`${latest.name} has no uplinks.`} />; |
55 | 22 | } |
56 | | -} |
| 23 | + |
| 24 | + return ( |
| 25 | + <> |
| 26 | + <Heading variant="subtitle1">{'Uplinks'}</Heading> |
| 27 | + <List> |
| 28 | + {Object.keys(uplinks) |
| 29 | + .reverse() |
| 30 | + .map(name => ( |
| 31 | + <ListItem key={name}> |
| 32 | + <ListItemText>{name}</ListItemText> |
| 33 | + <Spacer /> |
| 34 | + <ListItemText>{`${formatDateDistance(uplinks[name].fetched)} ago`}</ListItemText> |
| 35 | + </ListItem> |
| 36 | + ))} |
| 37 | + </List> |
| 38 | + </> |
| 39 | + ); |
| 40 | +}; |
57 | 41 |
|
58 | 42 | export default UpLinks; |
0 commit comments