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< Array >([]); 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) ? ( ) : ( ) }
); };