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}
+
{about}
{website ? {website} : null}
- {lud16 ?