fix: added packageMeta type

This commit is contained in:
Griffith Tchen Pan
2019-06-22 10:43:59 +01:00
committed by Griffithtp
parent c0b0189cc6
commit 3c54b116c9
16 changed files with 83 additions and 65 deletions

View File

@@ -1,4 +1,4 @@
import React, { Component, ReactNode } from 'react';
import React, { Component, ReactNode, ReactElement } from 'react';
import Avatar from '@material-ui/core/Avatar';
import List from '@material-ui/core/List';
@@ -8,18 +8,18 @@ import { DetailContextConsumer } from '../../pages/version/Version';
import { Heading, AuthorListItem } from './styles';
import { isEmail } from '../../utils/url';
class Authors extends Component<any, any> {
render() {
class Authors extends Component {
public render(): ReactElement<HTMLElement> {
return (
<DetailContextConsumer>
{(context: any) => {
{context => {
return context && context.packageMeta && this.renderAuthor(context.packageMeta);
}}
</DetailContextConsumer>
);
}
renderLinkForMail(email: string, avatarComponent: ReactNode, packageName: string, version: string) {
public renderLinkForMail(email: string, avatarComponent: ReactNode, packageName: string, version: string): ReactElement<HTMLElement> | ReactNode {
if (!email || isEmail(email) === false) {
return avatarComponent;
}
@@ -31,7 +31,7 @@ class Authors extends Component<any, any> {
);
}
renderAuthor = packageMeta => {
public renderAuthor = packageMeta => {
const { author, name: packageName, version } = packageMeta.latest;
if (!author) {

View File

@@ -23,10 +23,10 @@ interface Dist {
unpackedSize: number;
}
interface Props {
export interface PackageInterface {
name: string;
version: string;
time: string;
time?: number | string;
author: Author;
description?: string;
keywords?: string[];
@@ -35,6 +35,7 @@ interface Props {
bugs?: Bugs;
dist?: Dist;
}
// interface Props {} & PackageInterface;
import {
Author,
@@ -56,7 +57,7 @@ import {
} from './styles';
import { isURL } from '../../utils/url';
const Package: React.FC<Props> = ({
const Package: React.FC<PackageInterface> = ({
author: { name: authorName, avatar: authorAvatar },
bugs,
description,

View File

@@ -1,25 +1,21 @@
import React, { Fragment } from 'react';
import PropTypes from 'prop-types';
import React, { Fragment, ReactElement } from 'react';
import Divider from '@material-ui/core/Divider';
import Package from '../Package';
import Help from '../Help';
import { formatLicense } from '../../utils/package';
import { PackageInterface } from '../Package/Package';
// @ts-ignore
import classes from './packageList.scss';
interface Props {
packages: any;
packages: PackageInterface[];
}
export default class PackageList extends React.Component<Props, {}> {
static propTypes = {
packages: PropTypes.array,
};
render() {
public render(): ReactElement<HTMLElement> {
return (
<div className={'package-list-items'}>
<div className={classes.pkgContainer}>{this.hasPackages() ? this.renderPackages() : <Help />}</div>
@@ -27,20 +23,19 @@ export default class PackageList extends React.Component<Props, {}> {
);
}
hasPackages() {
private hasPackages(): boolean {
const { packages } = this.props;
return packages.length > 0;
}
renderPackages = () => {
private renderPackages = () => {
return <>{this.renderList()}</>;
};
renderList = () => {
private renderList = () => {
const { packages } = this.props;
return packages.map((pkg, i) => {
const { name, version, description, time, keywords, dist, homepage, bugs } = pkg;
const author = pkg.author;
const { name, version, description, time, keywords, dist, homepage, bugs, author } = pkg;
// TODO: move format license to API side.
const license = formatLicense(pkg.license);
return (

View File

@@ -13,7 +13,7 @@ import { Heading, GithubLink, RepositoryListItem } from './styles';
import git from './img/git.png';
import { isURL } from '../../utils/url';
class Repository extends Component<any, any> {
class Repository extends Component {
public render(): ReactElement<HTMLElement> {
return (
<DetailContextConsumer>
@@ -33,12 +33,7 @@ class Repository extends Component<any, any> {
}
private renderRepository = packageMeta => {
const {
repository: {
// @ts-ignore
url,
} = {},
} = packageMeta.latest;
const { repository: { url = null } = {} } = packageMeta.latest;
if (!url || isURL(url) === false) {
return null;

View File

@@ -8,7 +8,7 @@ import { formatDateDistance } from '../../utils/package';
import { Heading, Spacer, ListItemText } from './styles';
class UpLinks extends React.PureComponent<any> {
class UpLinks extends React.PureComponent<{}> {
public render(): ReactElement<HTMLElement> {
return (
<DetailContextConsumer>