Update GridRep to optionally display the username

This commit is contained in:
Justin Edmund 2022-02-27 00:37:44 -08:00
parent 0139b66e2e
commit 5a337003df
2 changed files with 80 additions and 11 deletions

View file

@ -73,13 +73,44 @@
flex-direction: row; flex-direction: row;
} }
.raid, time { .raid, .user, time {
color: $grey-50; color: $grey-50;
font-size: $font-small; font-size: $font-small;
} }
.raid { .raid, .user {
flex-grow: 1; flex-grow: 1;
} }
.raid {
margin-bottom: $unit / 2;
}
.user {
display: flex;
gap: $unit / 2;
align-items: center;
img, .no-user {
$diameter: 18px;
border-radius: $diameter / 2;
height: $diameter;
width: $diameter;
}
img.gran {
background-color: #CEE7FE;
}
img.djeeta {
background-color: #FFE1FE;
}
.no-user {
background: $grey-80;
}
}
} }
} }

View file

@ -11,7 +11,9 @@ interface Props {
name: string name: string
raid: Raid raid: Raid
grid: GridWeapon[] grid: GridWeapon[]
updatedAt: Date user?: User
createdAt: Date
displayUser: boolean
onClick: (shortcode: string) => void onClick: (shortcode: string) => void
} }
@ -30,6 +32,11 @@ const GridRep = (props: Props) => {
'empty': !props.raid 'empty': !props.raid
}) })
const userClass = classNames({
'user': true,
'empty': !props.user
})
useEffect(() => { useEffect(() => {
const newWeapons = Array(numWeapons) const newWeapons = Array(numWeapons)
@ -57,16 +64,47 @@ const GridRep = (props: Props) => {
<img alt={weapons[position]?.name.en} src={`${process.env.NEXT_PUBLIC_SIERO_IMG_URL}/weapon-grid/${weapons[position]?.granblue_id}.jpg`} /> : '' <img alt={weapons[position]?.name.en} src={`${process.env.NEXT_PUBLIC_SIERO_IMG_URL}/weapon-grid/${weapons[position]?.granblue_id}.jpg`} /> : ''
} }
const userImage = () => {
if (props.user)
return (
<img
alt="Gran"
className="gran"
srcSet="/profile/gran.png,
/profile/gran@2x.png 2x"
src="/profile/gran.png" />
)
else
return (<div className="no-user" />)
}
const details = (
<div className="Details">
<h2 className={titleClass}>{ (props.name) ? props.name : 'Untitled' }</h2>
<div className="bottom">
<div className={raidClass}>{ (props.raid) ? props.raid.name.en : 'No raid set' }</div>
<time className="last-updated" dateTime={props.createdAt.toISOString()}>{formatTimeAgo(props.createdAt, 'en-us')}</time>
</div>
</div>
)
const detailsWithUsername = (
<div className="Details">
<h2 className={titleClass}>{ (props.name) ? props.name : 'Untitled' }</h2>
<div className={raidClass}>{ (props.raid) ? props.raid.name.en : 'No raid set' }</div>
<div className="bottom">
<div className={userClass}>
{ userImage() }
{ (props.user) ? props.user.username : 'Anonymous' }
</div>
<time className="last-updated" dateTime={props.createdAt.toISOString()}>{formatTimeAgo(props.createdAt, 'en-us')}</time>
</div>
</div>
)
return ( return (
<div className="GridRep" onClick={navigate}> <div className="GridRep" onClick={navigate}>
<div className="Details"> { (props.displayUser) ? detailsWithUsername : details}
<h2 className={titleClass}>{ (props.name) ? props.name : 'Untitled' }</h2>
<div className="bottom">
<div className={raidClass}>{ (props.raid) ? props.raid.name.en : 'No raid set' }</div>
<time className="last-updated" dateTime={props.updatedAt.toISOString()}>{formatTimeAgo(props.updatedAt, 'en-us')}</time>
</div>
</div>
<div className="Grid"> <div className="Grid">
<div className="weapon grid_mainhand"> <div className="weapon grid_mainhand">
{generateMainhandImage()} {generateMainhandImage()}