import "./ProfilePage.css"; import { useEffect, useMemo, useState } from "react"; import { useSelector } from "react-redux"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faGear, faEnvelope } from "@fortawesome/free-solid-svg-icons"; import { useNavigate, useParams } from "react-router-dom"; import useProfile from "../feed/ProfileFeed"; import FollowButton from "../element/FollowButton"; import { extractLnAddress, parseId, hexToBech32 } from "../Util"; import Avatar from "../element/Avatar"; import Timeline from "../element/Timeline"; import Text from '../element/Text' import LNURLTip from "../element/LNURLTip"; import Nip05 from "../element/Nip05"; import Copy from "../element/Copy"; import ProfilePreview from "../element/ProfilePreview"; import FollowersList from "../element/FollowersList"; import FollowsList from "../element/FollowsList"; import { RootState } from "../state/Store"; import { HexKey } from "../nostr"; import FollowsYou from "../element/FollowsYou" enum ProfileTab { Notes = "Notes", Reactions = "Reactions", Followers = "Followers", Follows = "Follows" }; export default function ProfilePage() { const params = useParams(); const navigate = useNavigate(); const id = useMemo(() => parseId(params.id!), [params]); const user = useProfile(id)?.get(id); const loginPubKey = useSelector(s => s.login.publicKey); const follows = useSelector(s => s.login.follows); const isMe = loginPubKey === id; const [showLnQr, setShowLnQr] = useState(false); const [tab, setTab] = useState(ProfileTab.Notes); const about = Text({ content: user?.about || '', tags: [], users: new Map() }) useEffect(() => { setTab(ProfileTab.Notes); }, [params]); function username() { return (

{user?.display_name || user?.name || 'Nostrich'}

{user?.nip05 && } { followsYou() }
) } function followsYou(){ return (
{ }
) } function bio() { const lnurl = extractLnAddress(user?.lud16 || user?.lud06 || ""); return (
{about}
{user?.website && ( )} {lnurl && (
setShowLnQr(true)}> ⚡️ {lnurl}
)}
setShowLnQr(false)} />
) } function tabContent() { switch (tab) { case ProfileTab.Notes: return ; case ProfileTab.Follows: { if (isMe) { return ( <>

Following {follows.length}

{follows.map(a => )} ); } else { return ; } } case ProfileTab.Followers: { return } } } function avatar() { return (
) } function userDetails() { return (
{username()} {isMe ? (
navigate("/settings")}>
) : <>
navigate(`/messages/${hexToBech32("npub", id)}`)}>
} {bio()}
) } return ( <>
{user?.banner && banner} {user?.banner ? ( <> {avatar()} {userDetails()} ) : (
{avatar()} {userDetails()}
)}
{[ProfileTab.Notes, ProfileTab.Followers, ProfileTab.Follows].map(v => { return
setTab(v)}>{v}
})}
{tabContent()} ) }