import { clsx } from 'clsx' import { createEffect, createMemo, createSignal, Show } from 'solid-js' import { useLocalize } from '../../../context/localize' import { useMediaQuery } from '../../../context/mediaQuery' import { useSession } from '../../../context/session' import { FollowingEntity, Topic } from '../../../graphql/schema/core.gen' import { follow, unfollow } from '../../../stores/zine/common' import { capitalize } from '../../../utils/capitalize' import { getImageUrl } from '../../../utils/getImageUrl' import { Button } from '../../_shared/Button' import { CheckButton } from '../../_shared/CheckButton' import styles from './TopicBadge.module.scss' type Props = { topic: Topic minimizeSubscribeButton?: boolean } export const TopicBadge = (props: Props) => { const { t, lang } = useLocalize() const { mediaMatches } = useMediaQuery() const [isMobileView, setIsMobileView] = createSignal(false) const [isSubscribing, setIsSubscribing] = createSignal(false) createEffect(() => { setIsMobileView(!mediaMatches.sm) }) const { subscriptions, actions: { loadSubscriptions }, } = useSession() const subscribed = createMemo(() => subscriptions().topics.some((topic) => topic.slug === props.topic.slug), ) const subscribe = async (really = true) => { setIsSubscribing(true) await (really ? follow({ what: FollowingEntity.Topic, slug: props.topic.slug }) : unfollow({ what: FollowingEntity.Topic, slug: props.topic.slug })) await loadSubscriptions() setIsSubscribing(false) } const title = () => lang() === 'en' ? capitalize(props.topic.slug.replaceAll('-', ' ')) : props.topic.title return (