import { Box, chakra, Flex, HStack, VStack, Image, Heading, Text, Button, useColorModeValue, Divider, Wrap, Avatar, Center, useDisclosure, Modal, ModalOverlay, ModalContent, ModalCloseButton, ModalBody, StackDivider, Stack, ModalHeader } from "@chakra-ui/react" import Card from "components/card" import Container from "components/container" import SEO from "components/seo" import siteConfig from "configs/site-config" import useSession from "hooks/use-session" import PageContainer1 from "layouts/page-container1" import { useRouter } from "next/router" import React, { useEffect, useState } from "react" import { FaFacebook, FaFile, FaGithub, FaHeart, FaPlus, FaRegStar, FaStackOverflow, FaStar, FaTwitter, FaWeibo, FaZhihu } from "react-icons/fa" import { ReserveUrls } from "src/data/reserve-urls" import { Navbar, NavbarType, User } from "src/types/user" import { requestApi } from "utils/axios/request" import moment from 'moment' import { Story } from "src/types/story" import Stories from "components/story/stories" import Link from "next/link" import Empty from "components/empty" import Count from "components/count" import { Tag } from "src/types/tag" import { IDType } from "src/types/id" import UserCard from "components/users/user-card" import userCustomTheme from "theme/user-custom" import SearchFilters from "components/search-filters" import Follow from "components/interaction/follow" const UserPage = () => { const { isOpen, onOpen, onClose } = useDisclosure() const router = useRouter() const username = router.query.username const nav = router.query.nav const session = useSession() const [user, setUser]: [User, any] = useState(null) const [rawPosts, setRawPosts]: [Story[], any] = useState([]) const [posts, setPosts]: [Story[], any] = useState([]) const [tags, setTags]: [Tag[], any] = useState([]) const [tagFilter, setTagFilter]: [Tag, any] = useState(null) const [followers, setFollowers]: [User[], any] = useState([]) const [navbars,setNavbars]:[Navbar[],any] = useState([]) const borderColor = useColorModeValue('white', 'transparent') const stackBorderColor = useColorModeValue(userCustomTheme.borderColor.light, userCustomTheme.borderColor.dark) useEffect(() => { if (username) { initData(username) } }, [username]) const initData = async (username) => { const res = await requestApi.get(`/user/info/${username}`) setUser(res.data) getTags(res.data.id) getNavbars(res.data.id) const res1 = await requestApi.get(`/user/posts/${res.data.id}`) setPosts(res1.data) setRawPosts(res1.data) } const getNavbars = async userID => { const res = await requestApi.get(`/user/navbars/${userID}`) setNavbars(res.data) } const getTags = async (userID) => { const res = await requestApi.get(`/tag/user/${userID}`) setTags(res.data) } const filterPostsByTag = tag => { if (tag.id === tagFilter?.id) { setTagFilter(null) setPosts(rawPosts) return } setTagFilter(tag) const p = [] rawPosts.forEach(post => { for (let i = 0; i < post.rawTags.length; i++) { if (post.rawTags[i].id === tag.id) { p.push(post) break } } }) setPosts(p) } const viewFollowers = async tp => { let res if (tp === 1) { // followings const res0 = await requestApi.get(`/interaction/following/${user.id}?type=${user.id.substring(0,1)}`) const ids = [] for (const f of res0.data) { ids.push(f.id) } res = await requestApi.post(`/user/ids`, ids) } else if (tp === 0) { // followers res = await requestApi.get(`/interaction/followers/${user.id}?type=${user.id.substring(0,1)}`) } else if (tp === 2) { // org members res = await requestApi.get(`/org/members/${user.id}`) } setFollowers(res.data) if (res.data.length > 0) { onOpen() } } const isSubNavActive = (id) => { return id === nav } return ( <> { user && {user.nickname} {user.tagline && {user.tagline}} HOME { navbars.map((nv,i) => {nv.label} ) } {session?.user.id === user.id ? : } Followers viewFollowers(0)}> {user.type === IDType.User ? "Following" : "Members"} viewFollowers(1) : () => viewFollowers(2)}> {user.about && <> {user.about} } {user.location && Location: {user.location} } {user.website && Website: {user.website} } {user.email && 联系邮箱: {user.email} } Joined: {moment(user.created).fromNow()} {user.github && } {user.twitter && } {user.facebook && } {user.stackoverflow && } {user.zhihu && } {user.weibo && } {user.availFor && I am available for {user.availFor} } {user.rawSkills?.length > 0 && {user.type === IDType.User ? "擅长技术" : "组织技术栈"} { user.rawSkills.map(skill => {skill.title} ) } } {tags.length > 0 && 博客标签 { tags.map(tag => ) } } {posts.length === 0 ? : } } } > {followers.map(user => )} ) } export default UserPage