diff --git a/src/element/NoteGhost.js b/src/element/NoteGhost.js
index 19643dbe..3beffb89 100644
--- a/src/element/NoteGhost.js
+++ b/src/element/NoteGhost.js
@@ -8,7 +8,7 @@ export default function NoteGhost(props) {
- {props.text ?? "Loading..."}
+ {props.children}
diff --git a/src/element/Thread.js b/src/element/Thread.js
index 91deeb98..202d6e6e 100644
--- a/src/element/Thread.js
+++ b/src/element/Thread.js
@@ -1,4 +1,5 @@
import { useMemo } from "react";
+import { Link } from "react-router-dom";
import Event from "../nostr/Event";
import EventKind from "../nostr/EventKind";
import Note from "./Note";
@@ -24,7 +25,7 @@ export default function Thread(props) {
} else {
chains.get(replyTo).push(v);
}
- } else if(v.Tags.length > 0) {
+ } else if (v.Tags.length > 0) {
console.log("Not replying to anything: ", v);
}
});
@@ -32,6 +33,10 @@ export default function Thread(props) {
return chains;
}, [notes]);
+ const brokenChains = useMemo(() => {
+ return Array.from(chains?.keys()).filter(a => !notes.some(b => b.Id === a));
+ }, [chains]);
+
function reactions(id, kind = EventKind.Reaction) {
return notes?.filter(a => a.Kind === kind && a.Tags.find(a => a.Key === "e" && a.Event === id));
}
@@ -40,11 +45,13 @@ export default function Thread(props) {
if (root) {
return
} else {
- return
+ return
+ Loading thread root.. ({notes.length} notes loaded)
+
}
}
- function renderChain(from, acc) {
+ function renderChain(from) {
if (from && chains) {
let replies = chains.get(from);
if (replies) {
@@ -68,6 +75,19 @@ export default function Thread(props) {
<>
{renderRoot()}
{root ? renderChain(root.Id) : null}
+ {root ? null : <>
+ Other Replies
+ {brokenChains.map(a => {
+ return (
+ <>
+
+ Missing event {a.substring(0, 8)}
+
+ {renderChain(a)}
+ >
+ )
+ })}
+ >}
>
);
}
\ No newline at end of file
diff --git a/src/feed/LoginFeed.js b/src/feed/LoginFeed.js
index 657164a5..49903352 100644
--- a/src/feed/LoginFeed.js
+++ b/src/feed/LoginFeed.js
@@ -1,4 +1,3 @@
-import Nostrich from "../nostrich.jpg";
import { useEffect, useMemo } from "react";
import { useDispatch, useSelector } from "react-redux";
import EventKind from "../nostr/EventKind";
diff --git a/src/feed/UsersFeed.js b/src/feed/UsersFeed.js
index 1e8349da..554559da 100644
--- a/src/feed/UsersFeed.js
+++ b/src/feed/UsersFeed.js
@@ -42,11 +42,15 @@ export default function useUsersCache() {
}
export function mapEventToProfile(ev) {
- let data = JSON.parse(ev.content);
- return {
- pubkey: ev.pubkey,
- fromEvent: ev,
- loaded: new Date().getTime(),
- ...data
- };
+ try {
+ let data = JSON.parse(ev.content);
+ return {
+ pubkey: ev.pubkey,
+ fromEvent: ev,
+ loaded: new Date().getTime(),
+ ...data
+ };
+ } catch (e) {
+ console.error("Failed to parse JSON", ev, e);
+ }
}
\ No newline at end of file