import { capitalize } from '../../utils' import styles from './Card.module.scss' import { createMemo, createSignal, Show } from 'solid-js' import type { Topic } from '../../graphql/types.gen' import { FollowingEntity } from '../../graphql/types.gen' import { follow, unfollow } from '../../stores/zine/common' import { clsx } from 'clsx' import { useSession } from '../../context/session' import { ShowOnlyOnClient } from '../_shared/ShowOnlyOnClient' import { Icon } from '../_shared/Icon' import { useLocalize } from '../../context/localize' interface TopicProps { topic: Topic compact?: boolean subscribed?: boolean shortDescription?: boolean subscribeButtonBottom?: boolean additionalClass?: string isTopicInRow?: boolean iconButton?: boolean showPublications?: boolean } export const TopicCard = (props: TopicProps) => { const { t } = useLocalize() const { session, isSessionLoaded, actions: { loadSession } } = useSession() const [isSubscribing, setIsSubscribing] = createSignal(false) const subscribed = createMemo(() => { if (!session()?.user?.slug || !session()?.news?.topics) { return false } return session()?.news.topics.includes(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 loadSession() setIsSubscribing(false) } return (

{capitalize(props.topic.title || '')}

{props.topic.body}
) }