From 979d5e9ecc8652ea9aaa3f466f73c356c85ff89a Mon Sep 17 00:00:00 2001 From: codytseng Date: Thu, 27 Feb 2025 22:01:17 +0800 Subject: [PATCH] feat: mention all users in the thread by default --- src/components/PostEditor/Mentions.tsx | 90 +++++++++++--------------- 1 file changed, 37 insertions(+), 53 deletions(-) diff --git a/src/components/PostEditor/Mentions.tsx b/src/components/PostEditor/Mentions.tsx index 726538e3..60539208 100644 --- a/src/components/PostEditor/Mentions.tsx +++ b/src/components/PostEditor/Mentions.tsx @@ -24,8 +24,8 @@ export default function Mentions({ const { pubkey } = useNostr() const [pubkeys, setPubkeys] = useState([]) const [relatedPubkeys, setRelatedPubkeys] = useState([]) + const [potentialMentions, setPotentialMentions] = useState([]) const [parentEventPubkey, setParentEventPubkey] = useState() - const [addedPubkeys, setAddedPubkeys] = useState([]) const [removedPubkeys, setRemovedPubkeys] = useState([]) useEffect(() => { @@ -34,9 +34,10 @@ export default function Mentions({ setRelatedPubkeys(relatedPubkeys.filter((p) => p !== pubkey)) setParentEventPubkey(parentEventPubkey !== pubkey ? parentEventPubkey : undefined) const potentialMentions = [...pubkeys, ...relatedPubkeys] - setAddedPubkeys((pubkeys) => { - return pubkeys.filter((p) => potentialMentions.includes(p)) - }) + if (parentEventPubkey) { + potentialMentions.push(parentEventPubkey) + } + setPotentialMentions(potentialMentions) setRemovedPubkeys((pubkeys) => { return pubkeys.filter((p) => potentialMentions.includes(p)) }) @@ -44,23 +45,9 @@ export default function Mentions({ }, [content, parentEvent, pubkey]) useEffect(() => { - const newMentions = [...pubkeys] - addedPubkeys.forEach((pubkey) => { - if (!newMentions.includes(pubkey) && pubkey !== parentEventPubkey) { - newMentions.push(pubkey) - } - }) - removedPubkeys.forEach((pubkey) => { - const index = newMentions.indexOf(pubkey) - if (index !== -1) { - newMentions.splice(index, 1) - } - }) - if (parentEventPubkey) { - newMentions.push(parentEventPubkey) - } + const newMentions = potentialMentions.filter((pubkey) => !removedPubkeys.includes(pubkey)) setMentions(newMentions) - }, [pubkeys, relatedPubkeys, parentEventPubkey, addedPubkeys, removedPubkeys]) + }, [potentialMentions, removedPubkeys]) return ( @@ -71,43 +58,40 @@ export default function Mentions({ disabled={pubkeys.length === 0 && relatedPubkeys.length === 0 && !parentEventPubkey} onClick={(e) => e.stopPropagation()} > - {t('Mentions')} {mentions.length > 0 && `(${mentions.length})`} + {t('Mentions')}{' '} + {potentialMentions.length > 0 && `(${mentions.length}/${potentialMentions.length})`}
- {parentEventPubkey && ( - - - - - )} - {pubkeys.concat(relatedPubkeys).map((pubkey, index) => ( - { - if (checked) { - setAddedPubkeys((pubkeys) => [...pubkeys, pubkey]) - setRemovedPubkeys((pubkeys) => pubkeys.filter((p) => p !== pubkey)) - } else { - setRemovedPubkeys((pubkeys) => [...pubkeys, pubkey]) - setAddedPubkeys((pubkeys) => pubkeys.filter((p) => p !== pubkey)) - } - }} - > - - - - ))} + {potentialMentions.map((_, index) => { + const pubkey = potentialMentions[potentialMentions.length - 1 - index] + const isParentPubkey = pubkey === parentEventPubkey + return ( + { + if (isParentPubkey) { + return + } + if (checked) { + setRemovedPubkeys((pubkeys) => pubkeys.filter((p) => p !== pubkey)) + } else { + setRemovedPubkeys((pubkeys) => [...pubkeys, pubkey]) + } + }} + disabled={isParentPubkey} + > + + + + ) + })}