mirror of
https://github.com/smolgrrr/TAO.git
synced 2024-09-20 01:11:25 +00:00
small thread fixes
This commit is contained in:
parent
22c98b76ae
commit
0061c1a729
@ -34,6 +34,7 @@ const PostCard = ({
|
|||||||
const [sumReplyPow, setReplySumPow] = useState(0);
|
const [sumReplyPow, setReplySumPow] = useState(0);
|
||||||
const [repostedEvent, setRepostedEvent] = useState<Event>();
|
const [repostedEvent, setRepostedEvent] = useState<Event>();
|
||||||
const [parsedEvent, setParsedEvent] = useState<Event>(event);
|
const [parsedEvent, setParsedEvent] = useState<Event>(event);
|
||||||
|
const cachedMetadataEvents = JSON.parse(localStorage.getItem("cachedMetadataEvents") || "[]");
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const allRelatedEvents = [event, ...(replies || [])];
|
const allRelatedEvents = [event, ...(replies || [])];
|
||||||
@ -73,15 +74,19 @@ const PostCard = ({
|
|||||||
</div>
|
</div>
|
||||||
{repliedTo && <div className="flex items-center mt-1" >
|
{repliedTo && <div className="flex items-center mt-1" >
|
||||||
<span className="text-xs text-gray-500">Reply to: </span>
|
<span className="text-xs text-gray-500">Reply to: </span>
|
||||||
{uniqBy(repliedTo, 'pubkey').map((parsedEvent, index) => (
|
{uniqBy(repliedTo, 'pubkey').map((parsedEvent, index) => {
|
||||||
|
// Move the logic outside of the JSX return statement
|
||||||
|
const replyMetadata = cachedMetadataEvents.find((e: Event) => e.pubkey === parsedEvent.pubkey && e.kind === 0) || null;
|
||||||
|
return (
|
||||||
<div key={index}>
|
<div key={index}>
|
||||||
{event.kind === 0 ? (
|
{replyMetadata ? (
|
||||||
<img className={`h-5 w-5 rounded-full`} src={getMetadata(parsedEvent)?.picture} />
|
<img className={`h-5 w-5 rounded-full`} src={getMetadata(replyMetadata)?.picture} />
|
||||||
) : (
|
) : (
|
||||||
<div className={`h-4 w-4 ${getIconFromHash(parsedEvent.pubkey)} rounded-full`} />
|
<div className={`h-4 w-4 ${getIconFromHash(parsedEvent.pubkey)} rounded-full`} />
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
))}
|
);
|
||||||
|
})}
|
||||||
</div>}
|
</div>}
|
||||||
<div className={`flex justify-between items-center ${type !== "OP" ? 'hover:cursor-pointer' : ''}`} onClick={handleClick}>
|
<div className={`flex justify-between items-center ${type !== "OP" ? 'hover:cursor-pointer' : ''}`} onClick={handleClick}>
|
||||||
{metadataParsed ?
|
{metadataParsed ?
|
||||||
|
@ -15,18 +15,12 @@ const Thread = () => {
|
|||||||
let decodeResult = nip19.decode(id as string);
|
let decodeResult = nip19.decode(id as string);
|
||||||
let hexID = decodeResult.data as string;
|
let hexID = decodeResult.data as string;
|
||||||
const { noteEvents, metadataEvents } = useFetchEvents(undefined,false,hexID);
|
const { noteEvents, metadataEvents } = useFetchEvents(undefined,false,hexID);
|
||||||
|
|
||||||
// Load cached thread from localStorage
|
// Load cached thread from localStorage
|
||||||
const [threadCache, setThreadCache] = useState<Event[]>(
|
const threadCache = JSON.parse(sessionStorage.getItem("cachedThread") || "[]")
|
||||||
JSON.parse(sessionStorage.getItem("cachedThread") || "[]")
|
|
||||||
);
|
|
||||||
// Combine noteEvents and threadCache into a single array
|
// Combine noteEvents and threadCache into a single array
|
||||||
const allEvents = [...noteEvents, ...threadCache];
|
const allEvents = [...noteEvents, ...threadCache];
|
||||||
|
|
||||||
const countReplies = (event: Event) => {
|
|
||||||
return allEvents.filter(e => e.tags.some(tag => tag[0] === 'e' && tag[1] === event.id));
|
|
||||||
}
|
|
||||||
|
|
||||||
const repliedList = (event: Event): Event[] => {
|
const repliedList = (event: Event): Event[] => {
|
||||||
return allEvents.filter(e => event.tags.some(tag => tag[0] === 'p' && tag[1] === e.pubkey));
|
return allEvents.filter(e => event.tags.some(tag => tag[0] === 'p' && tag[1] === e.pubkey));
|
||||||
}
|
}
|
||||||
@ -36,9 +30,9 @@ const Thread = () => {
|
|||||||
setPrevMentions((prevEvents) => [...prevEvents, event]);
|
setPrevMentions((prevEvents) => [...prevEvents, event]);
|
||||||
};
|
};
|
||||||
|
|
||||||
const OPEvent = allEvents.find(event => event.id === hexID);
|
const OPEvent: Event = allEvents.find(event => event.id === hexID);
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (OPEvent && prevMentions.length == 0) {
|
if (OPEvent && prevMentions.length === 0) {
|
||||||
const OPMentionIDs = OPEvent.tags.filter(tag => tag[0] === 'e').map(tag => tag[1]);
|
const OPMentionIDs = OPEvent.tags.filter(tag => tag[0] === 'e').map(tag => tag[1]);
|
||||||
subNotesOnce(OPMentionIDs, onEvent);
|
subNotesOnce(OPMentionIDs, onEvent);
|
||||||
}
|
}
|
||||||
@ -52,7 +46,7 @@ const Thread = () => {
|
|||||||
)
|
)
|
||||||
|
|
||||||
const uniqReplyEvents = uniqBy(allEvents, "id");
|
const uniqReplyEvents = uniqBy(allEvents, "id");
|
||||||
const replyEvents = [...uniqReplyEvents].slice(1)
|
const replyEvents = [...uniqReplyEvents]
|
||||||
.filter(event =>
|
.filter(event =>
|
||||||
!earlierEvents.map(e => e.id).includes(event.id) &&
|
!earlierEvents.map(e => e.id).includes(event.id) &&
|
||||||
(OPEvent ? OPEvent.id !== event.id : true)
|
(OPEvent ? OPEvent.id !== event.id : true)
|
||||||
@ -65,7 +59,7 @@ const Thread = () => {
|
|||||||
{earlierEvents
|
{earlierEvents
|
||||||
.filter(event => event.kind === 1)
|
.filter(event => event.kind === 1)
|
||||||
.sort((a, b) => a.created_at - b.created_at).map((event, index) => (
|
.sort((a, b) => a.created_at - b.created_at).map((event, index) => (
|
||||||
<PostCard event={event} metadata={metadataEvents.find((e) => e.pubkey === event.pubkey && e.kind === 0) || null} replies={countReplies(event)} />
|
<PostCard event={event} metadata={metadataEvents.find((e) => e.pubkey === event.pubkey && e.kind === 0) || null} replies={uniqEvents.filter((e: Event) => e.tags.some((tag) => tag[0] === "e" && tag[1] === event.id))} />
|
||||||
))}
|
))}
|
||||||
<PostCard event={OPEvent} metadata={metadataEvents.find((e) => e.pubkey === OPEvent.pubkey && e.kind === 0) || null} replies={replyEvents} type={'OP'}/>
|
<PostCard event={OPEvent} metadata={metadataEvents.find((e) => e.pubkey === OPEvent.pubkey && e.kind === 0) || null} replies={replyEvents} type={'OP'}/>
|
||||||
</div>
|
</div>
|
||||||
@ -77,7 +71,7 @@ const Thread = () => {
|
|||||||
key={index}
|
key={index}
|
||||||
event={event}
|
event={event}
|
||||||
metadata={metadataEvents.find((e) => e.pubkey === event.pubkey && e.kind === 0) || null}
|
metadata={metadataEvents.find((e) => e.pubkey === event.pubkey && e.kind === 0) || null}
|
||||||
replies={replyEvents.filter((e) => e.tags.some((tag) => tag[0] === "e" && tag[1] === event.id))}
|
replies={replyEvents.filter((e: Event) => e.tags.some((tag) => tag[0] === "e" && tag[1] === event.id))}
|
||||||
repliedTo={repliedList(event)}
|
repliedTo={repliedList(event)}
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
|
Loading…
Reference in New Issue
Block a user