import "./Profile.css"; import Nostrich from "nostrich.webp"; import { useEffect, useState } from "react"; import { useSelector } from "react-redux"; import { useNavigate } from "react-router-dom"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faShop } from "@fortawesome/free-solid-svg-icons"; import useEventPublisher from "Feed/EventPublisher"; import { useUserProfile } from "Feed/ProfileFeed"; import LogoutButton from "Element/LogoutButton"; import { hexToBech32, openFile } from "Util"; import Copy from "Element/Copy"; import { RootState } from "State/Store"; import { HexKey } from "Nostr"; import useFileUpload from "Feed/FileUpload"; export default function ProfileSettings() { const navigate = useNavigate(); const id = useSelector(s => s.login.publicKey); const privKey = useSelector(s => s.login.privateKey); const user = useUserProfile(id!); const publisher = useEventPublisher(); const uploader = useFileUpload(); const [name, setName] = useState(); const [displayName, setDisplayName] = useState(); const [picture, setPicture] = useState(); const [banner, setBanner] = useState(); const [about, setAbout] = useState(); const [website, setWebsite] = useState(); const [nip05, setNip05] = useState(); const [lud16, setLud16] = useState(); const avatarPicture = (picture?.length ?? 0) === 0 ? Nostrich : picture useEffect(() => { if (user) { setName(user.name); setDisplayName(user.display_name) setPicture(user.picture); setBanner(user.banner); setAbout(user.about); setWebsite(user.website); setNip05(user.nip05); setLud16(user.lud16); } }, [user]); async function saveProfile() { // copy user object and delete internal fields let userCopy = { ...user, name, display_name: displayName, about, picture, banner, website, nip05, lud16 }; delete userCopy["loaded"]; delete userCopy["created"]; delete userCopy["pubkey"]; delete userCopy["npub"]; console.debug(userCopy); let ev = await publisher.metadata(userCopy); console.debug(ev); publisher.broadcast(ev); } async function uploadFile() { let file = await openFile(); if (file) { console.log(file); let rsp = await uploader.upload(file, file.name); console.log(rsp); if (typeof rsp?.error === "string") { throw new Error(`Upload failed ${rsp.error}`); } return rsp.url; } } async function setNewAvatar() { const rsp = await uploadFile(); if (rsp) { setPicture(rsp); } } async function setNewBanner() { const rsp = await uploadFile(); if (rsp) { setBanner(rsp); } } function editor() { return (
Name:
setName(e.target.value)} />
Display name:
setDisplayName(e.target.value)} />
About:
Website:
setWebsite(e.target.value)} />
NIP-05:
setNip05(e.target.value)} />
LN Address:
setLud16(e.target.value)} />
) } function settings() { if (!id) return null; return ( <>

Avatar

setNewAvatar()}>Edit

Header

setNewBanner()}>Edit
{editor()} ) } return (

Profile

{settings()} {privKey && (

Your Private Key Is (do not share this with anyone):

)}
); }