diff --git a/src/element/FollowButton.js b/src/element/FollowButton.js index 39a2e46ed..7205ffa36 100644 --- a/src/element/FollowButton.js +++ b/src/element/FollowButton.js @@ -12,9 +12,14 @@ export default function FollowButton(props) { publiser.broadcast(ev); } + async function unfollow(pubkey) { + let ev = await publiser.removeFollow(pubkey); + publiser.broadcast(ev); + } + let isFollowing = follows?.includes(pubkey) ?? false; return ( -
follow(pubkey)}> +
isFollowing ? unfollow(pubkey) : follow(pubkey)}> {isFollowing ? "Unfollow" : "Follow"}
) diff --git a/src/feed/EventPublisher.js b/src/feed/EventPublisher.js index ff89136bf..792f1a2a4 100644 --- a/src/feed/EventPublisher.js +++ b/src/feed/EventPublisher.js @@ -98,14 +98,27 @@ export default function useEventPublisher() { ev.Tags.push(new Tag(["p", evRef.PubKey], 1)); return await signEvent(ev, privKey); }, - addFollow: async (pubkey) => { + addFollow: async (pkAdd) => { let ev = Event.ForPubKey(pubKey); ev.Kind = EventKind.ContactList; ev.Content = JSON.stringify(relays); for(let pk of follows) { ev.Tags.push(new Tag(["p", pk])); } - ev.Tags.push(new Tag(["p", pubkey])); + ev.Tags.push(new Tag(["p", pkAdd])); + + return await signEvent(ev, privKey); + }, + removeFollow: async (pkRemove) => { + let ev = Event.ForPubKey(pubKey); + ev.Kind = EventKind.ContactList; + ev.Content = JSON.stringify(relays); + for(let pk of follows) { + if(pk === pkRemove) { + continue; + } + ev.Tags.push(new Tag(["p", pk])); + } return await signEvent(ev, privKey); } diff --git a/src/index.css b/src/index.css index 94809d3a7..e3ca0af1c 100644 --- a/src/index.css +++ b/src/index.css @@ -75,10 +75,8 @@ input[type="text"], input[type="password"] { .flex { display: flex; -} - -.f-center { align-items: center; + min-width: 0; } .f-grow { diff --git a/src/pages/EventPage.js b/src/pages/EventPage.js index 43c2ec827..35a44b02b 100644 --- a/src/pages/EventPage.js +++ b/src/pages/EventPage.js @@ -10,5 +10,5 @@ export default function EventPage() { return a.indexOf(b => b.id === v.id) === -1)} this={id} />; + ].filter((v, i, a) => a.indexOf(v) === i)} this={id} />; } \ No newline at end of file diff --git a/src/pages/ProfilePage.js b/src/pages/ProfilePage.js index f25543de5..732d8ac64 100644 --- a/src/pages/ProfilePage.js +++ b/src/pages/ProfilePage.js @@ -15,6 +15,7 @@ import Note from "../element/Note"; import QRCodeStyling from "qr-code-styling"; import Modal from "../element/Modal"; import { logout } from "../state/Login"; +import FollowButton from "../element/FollowButton"; export default function ProfilePage() { const dispatch = useDispatch(); @@ -66,7 +67,7 @@ export default function ProfilePage() { useMemo(() => { if (qrRef.current && showLnQr) { let qr = new QRCodeStyling({ - data: {lud16}, + data: { lud16 }, type: "canvas" }); qrRef.current.innerHTML = ""; @@ -98,7 +99,7 @@ export default function ProfilePage() { elm.click(); }); } - + async function setNewAvatar() { let file = await openFile(); console.log(file); @@ -153,10 +154,16 @@ export default function ProfilePage() { function details() { return ( <> -

{name}

+
+

{name}

+
+ +
+

{about}

{website ? {website} : null} - {lud16 ?
+ + {lud16 ?
setShowLnQr(true)}>