import type { Author, Community } from '../../../graphql/schema/core.gen' import { openPage, redirectPage } from '@nanostores/router' import { clsx } from 'clsx' import { For, Show, createEffect, createMemo, createSignal, onMount } from 'solid-js' import { useFollowing } from '../../../context/following' import { useLocalize } from '../../../context/localize' import { useSession } from '../../../context/session' import { FollowingEntity, Topic } from '../../../graphql/schema/core.gen' import { SubscriptionFilter } from '../../../pages/types' import { router, useRouter } from '../../../stores/router' import { isAuthor } from '../../../utils/isAuthor' import { translit } from '../../../utils/ru2en' import { isCyrillic } from '../../../utils/translate' import { SharePopup, getShareUrl } from '../../Article/SharePopup' import { Modal } from '../../Nav/Modal' import { TopicBadge } from '../../Topic/TopicBadge' import { Button } from '../../_shared/Button' import { ShowOnlyOnClient } from '../../_shared/ShowOnlyOnClient' import { AuthorBadge } from '../AuthorBadge' import { Userpic } from '../Userpic' import stylesButton from '../../_shared/Button/Button.module.scss' import styles from './AuthorCard.module.scss' type Props = { author: Author followers?: Author[] following?: Array } export const AuthorCard = (props: Props) => { const { t, lang } = useLocalize() const { author, isSessionLoaded, requireAuthentication } = useSession() const [authorSubs, setAuthorSubs] = createSignal>([]) const [subscriptionFilter, setSubscriptionFilter] = createSignal('all') const [isFollowed, setIsFollowed] = createSignal() const isProfileOwner = createMemo(() => author()?.slug === props.author.slug) const { setFollowing, isOwnerSubscribed } = useFollowing() onMount(() => { setAuthorSubs(props.following) }) createEffect(() => { setIsFollowed(isOwnerSubscribed(props.author?.id)) }) const name = createMemo(() => { if (lang() !== 'ru' && isCyrillic(props.author.name)) { if (props.author.name === 'Дискурс') { return 'Discours' } return translit(props.author.name) } return props.author.name }) // TODO: reimplement AuthorCard const { changeSearchParams } = useRouter() const initChat = () => { // eslint-disable-next-line solid/reactivity requireAuthentication(() => { openPage(router, 'inbox') changeSearchParams({ initChat: props.author.id.toString(), }) }, 'discussions') } createEffect(() => { if (props.following) { if (subscriptionFilter() === 'authors') { setAuthorSubs(props.following.filter((s) => 'name' in s)) } else if (subscriptionFilter() === 'topics') { setAuthorSubs(props.following.filter((s) => 'title' in s)) } else if (subscriptionFilter() === 'communities') { setAuthorSubs(props.following.filter((s) => 'title' in s)) } else { setAuthorSubs(props.following) } } }) const handleFollowClick = () => { const value = !isFollowed() requireAuthentication(() => { setIsFollowed(value) setFollowing(FollowingEntity.Author, props.author.slug, value) }, 'subscribe') } const followButtonText = createMemo(() => { if (isOwnerSubscribed(props.author?.id)) { return ( <> {t('Following')} {t('Unfollow')} ) } return t('Follow') }) return (
} >
<>

{t('Followers')}

{(follower: Author) => ( )}
<>

{t('Subscriptions')}

  • {props.following.length}
  • {props.following.filter((s) => 'name' in s).length}
  • {props.following.filter((s) => 'title' in s).length}

{(subscription) => isAuthor(subscription) ? ( ) : ( ) }
) }