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