gatsby-theme-try-ghost
Version:
A Gatsby theme for building flaring fast blogs from headless Ghost CMS.
79 lines (70 loc) • 3.74 kB
JavaScript
import React from 'react'
import PropTypes from 'prop-types'
import { Link } from 'gatsby'
import { resolveUrl } from '../../utils/routing'
import useOptions from '../../utils/use-options'
import { useLang, get } from '../../utils/use-lang'
import { HoverOnAvatar } from './effects'
import { ImgSharp } from '.'
import AvatarIcon from './icons/avatar-icon'
const AuthorList = ({ authors, isPost }) => {
const { basePath } = useOptions()
const text = get(useLang())
return (
<ul className="author-list">
{authors.map((author, i) => {
const url = resolveUrl(basePath, `/`, author.slug, author.url)
const profileImg = author.profileImageSharp && author.profileImageSharp.publicURL || author.profile_image
const fluidProfileImg = author.profileImageSharp && author.profileImageSharp.childImageSharp && author.profileImageSharp.childImageSharp.fluid
return (
<HoverOnAvatar key={i} activeClass="hovered" render={ hover => (
<li key={i} ref={hover.anchorRef} className="author-list-item">
{ !isPost &&
<div className="author-name-tooltip">
{author.name}
</div>
}
{ isPost &&
<div className={`author-card ${hover.state.currentClass}`}>
{ profileImg ? (
<ImgSharp fluidClass="author-profile-image" fluidImg={fluidProfileImg} srcImg={profileImg} title={author.name}/>
) : (
<div className="author-profile-image"><AvatarIcon /></div>
)}
<div className="author-info">
{ author.bio ? (
<div className="bio">
<h2>{author.name}</h2>
<p>{author.bio}</p>
<p><Link to={url}>{text(`MORE_POSTS`)}</Link> {text(`BY`)} {author.name}.</p>
</div>
) : (
<React.Fragment>
<h2>{author.name}</h2>
<p>{text(`READ`)} <Link to={url}>{text(`MORE_POSTS_SM`)}</Link> {text(`BY_THIS_AUTHOR`)}.</p>
</React.Fragment>
)}
</div>
</div>
}
{ profileImg ? (
<Link to={url} className={`${isPost && `author` || `static`}-avatar`}>
<ImgSharp fluidClass="author-profile-image" fluidImg={fluidProfileImg} srcImg={profileImg} title={author.name}/>
</Link>
) : (
<Link to={url} className={`${isPost && `author` || `static`}-avatar author-profile-image`}><AvatarIcon /></Link>
)}
</li>
)}/>
)
})}
</ul>
)
}
AuthorList.propTypes = {
authors: PropTypes.arrayOf(
PropTypes.object,
).isRequired,
isPost: PropTypes.bool,
}
export default AuthorList