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 { FollowsFilter } 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 { Subscribers } from '../../_shared/Subscribers' 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[] flatFollows?: Array } export const AuthorCard = (props: Props) => { const { t, lang } = useLocalize() const { author, isSessionLoaded, requireAuthentication } = useSession() const [authorSubs, setAuthorSubs] = createSignal>([]) const [followsFilter, setFollowsFilter] = createSignal('all') const [isFollowed, setIsFollowed] = createSignal() const isProfileOwner = createMemo(() => author()?.slug === props.author.slug) const { follow, unfollow, follows, following } = useFollowing() onMount(() => { setAuthorSubs(props.flatFollows) }) createEffect(() => { if (!(follows && props.author)) return const followed = follows?.authors?.some((authorEntity) => authorEntity.id === props.author?.id) setIsFollowed(followed) }) 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.flatFollows) { if (followsFilter() === 'authors') { setAuthorSubs(props.flatFollows.filter((s) => 'name' in s)) } else if (followsFilter() === 'topics') { setAuthorSubs(props.flatFollows.filter((s) => 'title' in s)) } else if (followsFilter() === 'communities') { setAuthorSubs(props.flatFollows.filter((s) => 'title' in s)) } else { setAuthorSubs(props.flatFollows) } } }) const handleFollowClick = () => { requireAuthentication(() => { isFollowed() ? unfollow(FollowingEntity.Author, props.author.slug) : follow(FollowingEntity.Author, props.author.slug) }, 'follow') } const followButtonText = createMemo(() => { if (following()?.slug === props.author.slug) { return following().type === 'follow' ? t('Following...') : t('Unfollowing...') } if (isFollowed()) { return ( <> {t('Following')} {t('Unfollow')} ) } return t('Follow') }) const FollowersModalView = () => ( <>

{t('Followers')}

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

{t('Subscriptions')}

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

{(subscription) => isAuthor(subscription) ? ( ) : ( ) }
) return (
{name()}
0 || props.flatFollows?.length > 0}>
0}>
} >
) }