import { clsx } from 'clsx' import { Show, createEffect, createSignal, on } from 'solid-js' import { useFollowing } from '../../../context/following' import { useLocalize } from '../../../context/localize' import { useMediaQuery } from '../../../context/mediaQuery' import { useSession } from '../../../context/session' import { FollowingEntity, Topic } from '../../../graphql/schema/core.gen' import { capitalize } from '../../../utils/capitalize' import { getImageUrl } from '../../../utils/getImageUrl' import { Button } from '../../_shared/Button' import { CheckButton } from '../../_shared/CheckButton' import { FollowedInfo } from '../../../pages/types' import styles from './TopicBadge.module.scss' type Props = { topic: Topic minimizeSubscribeButton?: boolean isFollowed?: FollowedInfo showStat?: boolean } export const TopicBadge = (props: Props) => { const { t, lang } = useLocalize() const { mediaMatches } = useMediaQuery() const [isMobileView, setIsMobileView] = createSignal(false) const { requireAuthentication } = useSession() const { setFollowing, loading: subLoading } = useFollowing() const [isFollowed, setIsFollowed] = createSignal() const handleFollowClick = () => { const value = !isFollowed() requireAuthentication(() => { setIsFollowed(value) setFollowing(FollowingEntity.Topic, props.topic.slug, value) }, 'subscribe') } createEffect(() => { setIsMobileView(!mediaMatches.sm) }) createEffect( on( () => props.isFollowed, () => { setIsFollowed(props.isFollowed.value) }, ), ) const title = () => lang() === 'en' ? capitalize(props.topic.slug.replaceAll('-', ' ')) : props.topic.title return (
} > } >
{t('shoutsWithCount', { count: props.topic?.stat?.shouts })} {t('authorsWithCount', { count: props.topic?.stat?.authors })} {t('followersWithCount', { count: props.topic?.stat?.followers })}
) }