import React, { Component } from 'react'; import Avatar from '@material-ui/core/Avatar'; import Add from '@material-ui/icons/Add'; import Tooltip from '@material-ui/core/Tooltip'; import { DetailContextConsumer } from '../../pages/version/Version'; import { Details, Heading, Content, Fab } from './styles'; import { isEmail } from '../../utils/url'; interface Props { type: 'contributors' | 'maintainers'; } class Developers extends Component { public state = { visibleDevs: 6, }; public render(): JSX.Element { return ( {({ packageMeta }: any) => { const { type } = this.props; const developerType = packageMeta.latest[type]; if (!developerType || developerType.length === 0) return null; return this.renderDevelopers(developerType, packageMeta); }} ); } public handleLoadMore = () => { this.setState(prev => ({ visibleDevs: prev.visibleDevs + 6 })); }; private renderDevelopers = (developers, packageMeta) => { const { type } = this.props; const { visibleDevs } = this.state; return ( <> {type} {developers.slice(0, visibleDevs).map(developer => (
{this.renderDeveloperDetails(developer, packageMeta)}
))} {visibleDevs < developers.length && ( )}
); }; private renderLinkForMail(email, avatarComponent, packageName, version): JSX.Element { if (!email || isEmail(email) === false) { return avatarComponent; } return ( {avatarComponent} ); } private renderDeveloperDetails = ({ name, avatar, email }, packageMeta) => { const { name: packageName, version } = packageMeta.latest; const avatarComponent = ; return {this.renderLinkForMail(email, avatarComponent, packageName, version)}; }; } export default Developers;