webapp/src/components/_shared/VotersList/VotersList.tsx

45 lines
1.4 KiB
TypeScript
Raw Normal View History

2023-03-09 23:39:07 +00:00
import { For, Show } from 'solid-js'
2023-08-11 16:42:41 +00:00
import type { Reaction } from '../../../graphql/types.gen'
import { ReactionKind } from '../../../graphql/types.gen'
import { Userpic } from '../../Author/Userpic'
2023-03-09 23:39:07 +00:00
import styles from './VotersList.module.scss'
import { clsx } from 'clsx'
type Props = {
reactions: Reaction[]
fallbackMessage: string
}
2023-03-09 23:56:19 +00:00
export const VotersList = (props: Props) => {
2023-03-09 23:39:07 +00:00
return (
<div class={styles.VotersList}>
<ul class={clsx('nodash', styles.users)}>
<Show
when={props.reactions.length > 0}
2023-07-09 18:34:59 +00:00
fallback={<li class={clsx(styles.item, styles.fallbackMessage)}>{props.fallbackMessage}</li>}
2023-03-09 23:39:07 +00:00
>
<For each={props.reactions}>
{(reaction) => (
<li class={styles.item}>
<div class={styles.user}>
2023-10-25 21:41:04 +00:00
<Userpic
name={reaction.createdBy.name}
userpic={reaction.createdBy.userpic}
class={styles.userpic}
/>
2023-03-09 23:39:07 +00:00
<a href={`/author/${reaction.createdBy.slug}`}>{reaction.createdBy.name || ''}</a>
</div>
{reaction.kind === ReactionKind.Like ? (
<div class={styles.commentRatingPositive}>+1</div>
) : (
<div class={styles.commentRatingNegative}>&minus;1</div>
)}
</li>
)}
</For>
</Show>
</ul>
</div>
)
}