\n
\n
{name}
\n \n \n
{desc}
\n {showNumber && followerCount !== undefined && (\n
\n {formatNum(followerCount)}\n {t('fans_count_number')}\n
\n )}\n
\n \n );\n};\n\nexport default UserLineCard;\n","/**\n * 该路由下所有可能用到的方法\n */\n\nexport enum Methods {\n UserFollowerLoadMore = 'user-follower-load-more',\n UserFollowingLoadMore = 'user-following-load-more',\n}\n","import { atom } from 'jotai';\nimport { $CurrentUserLinkName } from '@user/shared/atoms/current-user';\nimport { $UserFollowing } from 'shared/atoms';\n\nexport const $CurrentUserFollowing = atom((get) => {\n const userLinkName = get($CurrentUserLinkName);\n return get($UserFollowing(userLinkName));\n});\n","import { atom } from 'jotai';\nimport { $CurrentUserLinkName } from '@user/shared/atoms/current-user';\nimport { $UserFollower } from 'shared/atoms';\n\nexport const $CurrentUserFollower = atom((get) => {\n const userLinkName = get($CurrentUserLinkName);\n return get($UserFollower(userLinkName));\n});\n","import { atom } from 'jotai';\nimport { $CurrentUserLinkName } from '@user/shared/atoms/current-user';\nimport { $UserFollowingTopic } from 'shared/atoms';\n\nexport const $CurrentUserFollowingTopic = atom((get) => {\n const userLinkName = get($CurrentUserLinkName);\n return get($UserFollowingTopic(userLinkName));\n});\n","import { FC, useState } from 'react';\nimport { useNavigate, useSearchParams } from '@remix-run/react';\nimport cs from 'classnames';\nimport { useTranslation } from 'react-i18next';\nimport { useAtomValue } from 'jotai';\nimport { $Locale, $UserAgent } from '@lemon8/web-app-shared/atom';\nimport { TabItemProps, Tabs } from '~/components/tabs';\nimport LoadMore from '~/components/load-more';\nimport HashtagCard from '~/components/simple-topic-card';\nimport { Loading } from '~/components/loading';\nimport UserLineCard from '~/components/user-line-card';\nimport { Methods } from '../../constant';\nimport { $CurrentUserAsAvailable } from '@user/shared/atoms/current-user';\nimport { $CurrentUserFollowing } from '@user-follow/shared/atoms/current-user-following';\nimport { $CurrentUserFollower } from '@user-follow/shared/atoms/current-user-follower';\nimport { $CurrentUserFollowingTopic } from '@user-follow/shared/atoms/current-user-following-topic';\nimport { useRouteLoader } from '~/utils/use-route-loader';\nimport { $UserFollowerLoadmore, $UserFollowingLoadmore } from 'shared/atoms';\nimport { IUserFollowTopic, LegacyUserUtil, User, UserTypeUtil } from 'shared/models';\nimport { useSEOLinkBuilder } from '~/utils/build-seo-url';\n\nimport './style.scss';\n\ninterface TabItemData {\n key: 'following' | 'follower';\n value: JSX.Element;\n isLoading: boolean;\n data_list: User[];\n cursor: number;\n has_more: boolean;\n forumList: IUserFollowTopic[];\n}\n\nconst FollowLoadMore: FC<{ data: TabItemData; className: string }> = ({ data, className }) => {\n const { data_list = [], has_more = false, isLoading, cursor, key, forumList = [] } = data;\n\n const buildSEOLink = useSEOLinkBuilder();\n\n const { linkName, userId, userType } = useAtomValue($CurrentUserAsAvailable);\n const { region } = useAtomValue($Locale);\n\n const { t } = useTranslation();\n const navigate = useNavigate();\n\n const followerLoader = useRouteLoader(\n Methods.UserFollowerLoadMore,\n {\n user_id: userId,\n count: 10,\n cursor,\n },\n {\n atomFamilies: {\n $UserFollowerLoadmore,\n },\n },\n );\n\n const followingLoader = useRouteLoader(\n Methods.UserFollowingLoadMore,\n {\n user_id: userId,\n count: 10,\n cursor,\n },\n {\n atomFamilies: {\n $UserFollowingLoadmore,\n },\n },\n );\n\n const loadData = async (): Promise<{\n data: unknown[];\n }> => {\n if (data.key === 'follower') {\n followerLoader.load();\n } else {\n followingLoader.load();\n }\n\n return { data: [] };\n };\n\n let forumName: string;\n if (forumList.length) {\n // 拼接话题名\n const forumNameList: string[] = [];\n forumList.forEach((el: any) => {\n forumNameList.push(el.name);\n });\n forumName = forumNameList.join('、');\n }\n\n return (\n \n {data_list.length ? (\n
}\n endText={t('no_more_items')}\n render={() => (\n
\n {Boolean(forumList.length) && key === 'following' && (\n {\n event.preventDefault();\n navigate(`/${UserTypeUtil.getLinkNamePrefix(userType)}${linkName}/topic?region=${region}`);\n }}\n />\n )}\n {data_list.map((item, i) => {\n const href = buildSEOLink(LegacyUserUtil.getPath(item));\n return (\n {\n event.preventDefault();\n navigate(href);\n }}\n />\n );\n })}\n
\n )}\n />\n ) : (\n
\n {isLoading || userId === '' ?
:
{t('no_content')}
}\n
\n )}\n
\n );\n};\n\nexport const UserFollowTabs: FC = () => {\n const { isMobile } = useAtomValue($UserAgent);\n const isPC = !isMobile;\n const autoFixed = true;\n const { t } = useTranslation();\n\n const [searchParams] = useSearchParams();\n const [tabKey, setTabKey] = useState(searchParams.get('tabkey'));\n\n const followingData = useAtomValue($CurrentUserFollowing);\n const followerData = useAtomValue($CurrentUserFollower);\n const followingTopicData = useAtomValue($CurrentUserFollowingTopic);\n\n const tabs = [\n {\n key: 'following' as const,\n value: