import type { Topic } from '../../graphql/schema/core.gen' import { clsx } from 'clsx' import { createMemo, createSignal, Show } from 'solid-js' import { useLocalize } from '../../context/localize' import { useSession } from '../../context/session' import { FollowingEntity } from '../../graphql/schema/core.gen' import { follow, unfollow } from '../../stores/zine/common' import { capitalize } from '../../utils/capitalize' import { Button } from '../_shared/Button' import { CheckButton } from '../_shared/CheckButton' import { Icon } from '../_shared/Icon' import { ShowOnlyOnClient } from '../_shared/ShowOnlyOnClient' import { CardTopic } from '../Feed/CardTopic' import styles from './Card.module.scss' import stylesButton from '../_shared/Button/Button.module.scss' interface TopicProps { topic: Topic compact?: boolean subscribed?: boolean shortDescription?: boolean subscribeButtonBottom?: boolean additionalClass?: string isTopicInRow?: boolean iconButton?: boolean showPublications?: boolean showDescription?: boolean isCardMode?: boolean minimizeSubscribeButton?: boolean isNarrow?: boolean withIcon?: boolean } export const TopicCard = (props: TopicProps) => { const { t, lang } = useLocalize() const { subscriptions, isSessionLoaded, actions: { loadSubscriptions, requireAuthentication }, } = useSession() const [isSubscribing, setIsSubscribing] = createSignal(false) const subscribed = createMemo(() => { return 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 handleSubscribe = () => { requireAuthentication(() => { subscribe(!subscribed()) }, 'subscribe') } const subscribeValue = () => { return ( <> {t('Unfollow')} {t('Following')} ) } const title = createMemo(() => capitalize(lang() == 'en' ? props.topic.slug.replaceAll('-', ' ') : props.topic.title || ''), ) return (

{title()}

{props.topic.body}
} >
) }