LearnersGuild/echo

View on GitHub
src/common/components/UserGrid/index.jsx

Summary

Maintainability
A
1 hr
Test Coverage
import React, {Component, PropTypes} from 'react'
 
import styles from './index.css'
 
export default class UserGrid extends Component {
Function `render` has 33 lines of code (exceeds 25 allowed). Consider refactoring.
render() {
const {users, activeUserIds} = this.props
const isReady = users && users.length > 0
 
if (!isReady) {
return <span/>
}
 
const inactiveUserIds = users
.filter(user => !activeUserIds.includes(user.id))
.map(user => user.id)
 
const _imagesForUserIds = (userIds, active = true, baseKey = 0) => {
const classNames = active ?
styles.userImage :
`${styles.userImage} ${styles.inactiveUserImage}`
 
return userIds.map((userId, i) => {
const user = users.find(user => user.id === userId)
const altTitle = `${user.name} (${user.handle})`
return (
<img
key={baseKey + i}
className={classNames}
src={user.avatarUrl}
alt={altTitle}
title={altTitle}
/>
)
})
}
 
const userImages = _imagesForUserIds(activeUserIds)
.concat(_imagesForUserIds(inactiveUserIds, false, activeUserIds.length))
 
return (
<div className={styles.userGrid}>
{userImages}
</div>
)
}
}
 
UserGrid.propTypes = {
users: PropTypes.arrayOf(PropTypes.shape({
handle: PropTypes.string.isRequired,
name: PropTypes.string.isRequired,
avatarUrl: PropTypes.string.isRequired,
})).isRequired,
activeUserIds: PropTypes.arrayOf(PropTypes.string).isRequired,
}