import "./ProfilePage.css"; import { useDispatch, useSelector } from "react-redux"; import { useParams } from "react-router-dom"; import useProfile from "./feed/ProfileFeed"; import { useEffect, useState } from "react"; import { resetProfile } from "../state/Users"; import Nostrich from "../nostrich.jpg"; import useEventPublisher from "./feed/EventPublisher"; import useTimelineFeed from "./feed/TimelineFeed"; import Note from "../element/Note"; import { bech32 } from "bech32"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faQrcode } from "@fortawesome/free-solid-svg-icons"; export default function ProfilePage() { const dispatch = useDispatch(); const params = useParams(); const id = params.id; const user = useProfile(id); const publisher = useEventPublisher(); const { notes } = useTimelineFeed([id]); const loginPubKey = useSelector(s => s.login.publicKey); const isMe = loginPubKey === id; let [name, setName] = useState(""); let [picture, setPicture] = useState(""); let [about, setAbout] = useState(""); let [website, setWebsite] = useState(""); let [nip05, setNip05] = useState(""); let [lud16, setLud16] = useState(""); useEffect(() => { if (user) { setName(user.name ?? ""); setPicture(user.picture ?? Nostrich); setAbout(user.about ?? ""); setWebsite(user.website ?? ""); setNip05(user.nip05 ?? ""); setLud16(user.lud16 ?? ""); } }, [user]); useEffect(() => { // some clients incorrectly set this to LNURL service, patch this if (lud16.toLowerCase().startsWith("lnurl")) { let decoded = bech32.decode(lud16, 1000); let url = new TextDecoder().decode(Uint8Array.from(bech32.fromWords(decoded.words))); if (url.startsWith("http")) { let parsedUri = new URL(url); // is lightning address if (parsedUri.pathname.startsWith("/.well-known/lnurlp/")) { let pathParts = parsedUri.pathname.split('/'); let username = pathParts[pathParts.length - 1]; setLud16(`${username}@${parsedUri.hostname}`); } } } }, [lud16]); async function saveProfile() { let ev = await publisher.metadata({ name, about, picture, website, nip05, lud16 }); console.debug(ev); publisher.broadcast(ev); dispatch(resetProfile(id)); } function editor() { return ( <>
Name:
setName(e.target.value)} />
About:
setAbout(e.target.value)} />
Website:
setWebsite(e.target.value)} />
NIP-05:
setNip05(e.target.value)} />
LN Address:
setLud16(e.target.value)} />
saveProfile()}>Save
) } function details() { return ( <>
Name:
{name}
About:
{about}
{website ?
Website:
{website}
: null} {nip05 ?
NIP-05:
{nip05}
: null} {lud16 ?
LN Address:
{lud16} 
{ }}>
: null} ) } return ( <>
{isMe ?
Edit
: null }
{isMe ? editor() : details()}

Notes

{notes?.sort((a, b) => b.created_at - a.created_at).map(a => )} ) }