import "./SettingsPage.css"; import Nostrich from "../nostrich.jpg"; import { useEffect, useState } from "react"; import { useDispatch, 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 useProfile from "../feed/ProfileFeed"; import VoidUpload from "../feed/VoidUpload"; import { logout, setRelays } from "../state/Login"; import { resetProfile } from "../state/Users"; import { hexToBech32, openFile } from "../Util"; import Relay from "../element/Relay"; import Copy from "../element/Copy"; export default function SettingsPage(props) { const navigate = useNavigate(); const id = useSelector(s => s.login.publicKey); const privKey = useSelector(s => s.login.privateKey); const relays = useSelector(s => s.login.relays); const dispatch = useDispatch(); const user = useProfile(id); const publisher = useEventPublisher(); const [name, setName] = useState(""); const [displayName, setDisplayName] = useState(""); const [picture, setPicture] = useState(""); const [about, setAbout] = useState(""); const [website, setWebsite] = useState(""); const [nip05, setNip05] = useState(""); const [lud06, setLud06] = useState(""); const [lud16, setLud16] = useState(""); const [newRelay, setNewRelay] = useState(""); useEffect(() => { if (user) { setName(user.name ?? ""); setDisplayName(user.display_name ?? "") setPicture(user.picture ?? ""); setAbout(user.about ?? ""); setWebsite(user.website ?? ""); setNip05(user.nip05 ?? ""); setLud06(user.lud06 ?? ""); setLud16(user.lud16 ?? ""); } }, [user]); async function saveProfile() { // copy user object and delete internal fields let userCopy = { ...user, name, display_name: displayName, about, picture, website, nip05, lud16 }; delete userCopy["loaded"]; delete userCopy["fromEvent"]; // event top level props should not be copied into metadata (bug) delete userCopy["pubkey"]; delete userCopy["sig"]; delete userCopy["pubkey"]; delete userCopy["tags"]; delete userCopy["content"]; delete userCopy["created_at"]; delete userCopy["id"]; delete userCopy["kind"] // trim empty string fields Object.keys(userCopy).forEach(k => { if (userCopy[k] === "") { delete userCopy[k]; } }); console.debug(userCopy); let ev = await publisher.metadata(userCopy); console.debug(ev); dispatch(resetProfile(id)); publisher.broadcast(ev); } async function setNewAvatar() { let file = await openFile(); console.log(file); let rsp = await VoidUpload(file); if (!rsp) { throw "Upload failed, please try again later"; } console.log(rsp); setPicture(rsp.metadata.url ?? `https://void.cat/d/${rsp.id}`) } async function saveRelays() { let ev = await publisher.saveRelays(); publisher.broadcast(ev); } 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)} />
navigate("/verification")}>   Buy
LN Address:
setLud16(e.target.value)} />
{ dispatch(logout()); navigate("/"); }}>Logout
saveProfile()}>Save
) } function addRelay() { return ( <>

Add Relays

setNewRelay(e.target.value)} />
dispatch(setRelays({ [newRelay]: { read: false, write: false } }))}>Add
) } function settings() { if (!id) return null; return ( <>

Settings

setNewAvatar()}>Edit
{editor()} ) } return (
{settings()} {privKey && (

Private Key:

)}

Relays

{Object.keys(relays || {}).map(a => )}
saveRelays()}>Save
{addRelay()}
); }