import { openPage } from '@nanostores/router' import { clsx } from 'clsx' import { createEffect, createMemo, createSignal, Match, Show, Switch } from 'solid-js' 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 { follow, unfollow } from '../../../stores/zine/common' // import { capitalize } from '../../../utils/capitalize' import { isCyrillic } from '../../../utils/cyrillic' import { translit } from '../../../utils/ru2en' 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 styles from './AuthorBadge.module.scss' import stylesButton from '../../_shared/Button/Button.module.scss' 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 [isMobileView, setIsMobileView] = createSignal(false) const [isSubscribing, setIsSubscribing] = createSignal(false) createEffect(() => { setIsMobileView(!mediaMatches.sm) }) const { author, subscriptions, actions: { loadSubscriptions, requireAuthentication }, } = useSession() const { changeSearchParams } = useRouter() const { t, formatDate, lang } = useLocalize() const subscribed = createMemo(() => { const sss = subscriptions() return sss?.authors.some((a: Author) => a?.slug === props.author.slug) }) const subscribe = async (really = true) => { setIsSubscribing(true) await (really ? follow({ what: FollowingEntity.Author, slug: props.author.slug }) : unfollow({ what: FollowingEntity.Author, slug: props.author.slug })) await loadSubscriptions() setIsSubscribing(false) } const handleSubscribe = (really: boolean) => { requireAuthentication(() => { subscribe(really) }, 'subscribe') } const initChat = () => { 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 }) return (