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 (
<>