import { openPage } from '@nanostores/router' import { clsx } from 'clsx' import { Match, Show, Switch, createEffect, createMemo, createSignal, on } from 'solid-js' import { useFollowing } from '../../../context/following' import { useLocalize } from '../../../context/localize' import { useMediaQuery } from '../../../context/mediaQuery' import { useSession } from '../../../context/session' import { Author, FollowingEntity } from '../../../graphql/schema/core.gen' import { router, useRouter } from '../../../stores/router' import { translit } from '../../../utils/ru2en' import { isCyrillic } from '../../../utils/translate' import { Button } from '../../_shared/Button' import { CheckButton } from '../../_shared/CheckButton' import { ConditionalWrapper } from '../../_shared/ConditionalWrapper' import { Icon } from '../../_shared/Icon' import { Userpic } from '../Userpic' import stylesButton from '../../_shared/Button/Button.module.scss' import styles from './AuthorBadge.module.scss' import { BadgeSubscribeButton } from "../../_shared/BadgeSubscribeButton"; type Props = { author: Author minimizeSubscribeButton?: boolean showMessageButton?: boolean iconButtons?: boolean nameOnly?: boolean inviteView?: boolean onInvite?: (id: number) => void selected?: boolean } export const AuthorBadge = (props: Props) => { const { mediaMatches } = useMediaQuery() const { author, requireAuthentication } = useSession() const { follow, unfollow, subscriptions, subscribeInAction } = useFollowing() const [isMobileView, setIsMobileView] = createSignal(false) const [isSubscribed, setIsSubscribed] = createSignal() createEffect(() => { if(!subscriptions || !props.author) return const subscribed = subscriptions.authors?.some((authorEntity) => authorEntity.id === props.author?.id); setIsSubscribed(subscribed) }) createEffect(() => { setIsMobileView(!mediaMatches.sm) }) const { setFollowing } = useFollowing() const { changeSearchParams } = useRouter() const { t, formatDate, lang } = useLocalize() const initChat = () => { // eslint-disable-next-line solid/reactivity requireAuthentication(() => { openPage(router, 'inbox') changeSearchParams({ initChat: props.author.id.toString(), }) }, 'discussions') } 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 }) const handleFollowClick = () => { requireAuthentication(() => { isSubscribed() ? unfollow(FollowingEntity.Author, props.author.slug) : follow(FollowingEntity.Author, props.author.slug) }, 'subscribe') } return (
( {children} )} >
{name()}
{t('Registered since {date}', { date: formatDate(new Date(props.author.created_at * 1000)), })}
} >
0}>
{t('PublicationsWithCount', { count: props.author.stat?.shouts ?? 0 })}
0}>
{t('FollowersWithCount', { count: props.author.stat?.followers ?? 0 })}
handleFollowClick()} isSubscribed={isSubscribed()} /> {/*}*/} {/*>*/} {/* */} {/* */} {/* */} {/* }*/} {/* onClick={handleFollowClick}*/} {/* isSubscribeButton={true}*/} {/* class={clsx(styles.actionButton, {*/} {/* [styles.iconed]: props.iconButtons,*/} {/* [stylesButton.subscribed]: isSubscribed(),*/} {/* })}*/} {/* />*/} {/* }*/} {/* >*/} {/* */} {/* {t('Following')}*/} {/* {t('Unfollow')}*/} {/* */} {/* }*/} {/* >*/} {/* */} {/* */} {/* }*/} {/* onClick={handleFollowClick}*/} {/* isSubscribeButton={true}*/} {/* class={clsx(styles.actionButton, {*/} {/* [styles.iconed]: props.iconButtons,*/} {/* [stylesButton.subscribed]: isSubscribed(),*/} {/* })}*/} {/* />*/} {/* */} {/**/}
props.onInvite(props.author.id)} />
) }