feat: mention all users in the thread by default
This commit is contained in:
@@ -24,8 +24,8 @@ export default function Mentions({
|
|||||||
const { pubkey } = useNostr()
|
const { pubkey } = useNostr()
|
||||||
const [pubkeys, setPubkeys] = useState<string[]>([])
|
const [pubkeys, setPubkeys] = useState<string[]>([])
|
||||||
const [relatedPubkeys, setRelatedPubkeys] = useState<string[]>([])
|
const [relatedPubkeys, setRelatedPubkeys] = useState<string[]>([])
|
||||||
|
const [potentialMentions, setPotentialMentions] = useState<string[]>([])
|
||||||
const [parentEventPubkey, setParentEventPubkey] = useState<string | undefined>()
|
const [parentEventPubkey, setParentEventPubkey] = useState<string | undefined>()
|
||||||
const [addedPubkeys, setAddedPubkeys] = useState<string[]>([])
|
|
||||||
const [removedPubkeys, setRemovedPubkeys] = useState<string[]>([])
|
const [removedPubkeys, setRemovedPubkeys] = useState<string[]>([])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -34,9 +34,10 @@ export default function Mentions({
|
|||||||
setRelatedPubkeys(relatedPubkeys.filter((p) => p !== pubkey))
|
setRelatedPubkeys(relatedPubkeys.filter((p) => p !== pubkey))
|
||||||
setParentEventPubkey(parentEventPubkey !== pubkey ? parentEventPubkey : undefined)
|
setParentEventPubkey(parentEventPubkey !== pubkey ? parentEventPubkey : undefined)
|
||||||
const potentialMentions = [...pubkeys, ...relatedPubkeys]
|
const potentialMentions = [...pubkeys, ...relatedPubkeys]
|
||||||
setAddedPubkeys((pubkeys) => {
|
if (parentEventPubkey) {
|
||||||
return pubkeys.filter((p) => potentialMentions.includes(p))
|
potentialMentions.push(parentEventPubkey)
|
||||||
})
|
}
|
||||||
|
setPotentialMentions(potentialMentions)
|
||||||
setRemovedPubkeys((pubkeys) => {
|
setRemovedPubkeys((pubkeys) => {
|
||||||
return pubkeys.filter((p) => potentialMentions.includes(p))
|
return pubkeys.filter((p) => potentialMentions.includes(p))
|
||||||
})
|
})
|
||||||
@@ -44,23 +45,9 @@ export default function Mentions({
|
|||||||
}, [content, parentEvent, pubkey])
|
}, [content, parentEvent, pubkey])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const newMentions = [...pubkeys]
|
const newMentions = potentialMentions.filter((pubkey) => !removedPubkeys.includes(pubkey))
|
||||||
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)
|
|
||||||
}
|
|
||||||
setMentions(newMentions)
|
setMentions(newMentions)
|
||||||
}, [pubkeys, relatedPubkeys, parentEventPubkey, addedPubkeys, removedPubkeys])
|
}, [potentialMentions, removedPubkeys])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Popover>
|
<Popover>
|
||||||
@@ -71,43 +58,40 @@ export default function Mentions({
|
|||||||
disabled={pubkeys.length === 0 && relatedPubkeys.length === 0 && !parentEventPubkey}
|
disabled={pubkeys.length === 0 && relatedPubkeys.length === 0 && !parentEventPubkey}
|
||||||
onClick={(e) => e.stopPropagation()}
|
onClick={(e) => e.stopPropagation()}
|
||||||
>
|
>
|
||||||
{t('Mentions')} {mentions.length > 0 && `(${mentions.length})`}
|
{t('Mentions')}{' '}
|
||||||
|
{potentialMentions.length > 0 && `(${mentions.length}/${potentialMentions.length})`}
|
||||||
</Button>
|
</Button>
|
||||||
</PopoverTrigger>
|
</PopoverTrigger>
|
||||||
<PopoverContent className="w-52 p-0 py-1">
|
<PopoverContent className="w-52 p-0 py-1">
|
||||||
<div className="space-y-1">
|
<div className="space-y-1">
|
||||||
{parentEventPubkey && (
|
{potentialMentions.map((_, index) => {
|
||||||
<PopoverCheckboxItem checked disabled>
|
const pubkey = potentialMentions[potentialMentions.length - 1 - index]
|
||||||
<SimpleUserAvatar userId={parentEventPubkey} size="small" />
|
const isParentPubkey = pubkey === parentEventPubkey
|
||||||
<SimpleUsername
|
return (
|
||||||
userId={parentEventPubkey}
|
<PopoverCheckboxItem
|
||||||
className="font-semibold text-sm truncate"
|
key={`${pubkey}-${index}`}
|
||||||
skeletonClassName="h-3"
|
checked={isParentPubkey ? true : mentions.includes(pubkey)}
|
||||||
/>
|
onCheckedChange={(checked) => {
|
||||||
</PopoverCheckboxItem>
|
if (isParentPubkey) {
|
||||||
)}
|
return
|
||||||
{pubkeys.concat(relatedPubkeys).map((pubkey, index) => (
|
}
|
||||||
<PopoverCheckboxItem
|
if (checked) {
|
||||||
key={`${pubkey}-${index}`}
|
setRemovedPubkeys((pubkeys) => pubkeys.filter((p) => p !== pubkey))
|
||||||
checked={mentions.includes(pubkey)}
|
} else {
|
||||||
onCheckedChange={(checked) => {
|
setRemovedPubkeys((pubkeys) => [...pubkeys, pubkey])
|
||||||
if (checked) {
|
}
|
||||||
setAddedPubkeys((pubkeys) => [...pubkeys, pubkey])
|
}}
|
||||||
setRemovedPubkeys((pubkeys) => pubkeys.filter((p) => p !== pubkey))
|
disabled={isParentPubkey}
|
||||||
} else {
|
>
|
||||||
setRemovedPubkeys((pubkeys) => [...pubkeys, pubkey])
|
<SimpleUserAvatar userId={pubkey} size="small" />
|
||||||
setAddedPubkeys((pubkeys) => pubkeys.filter((p) => p !== pubkey))
|
<SimpleUsername
|
||||||
}
|
userId={pubkey}
|
||||||
}}
|
className="font-semibold text-sm truncate"
|
||||||
>
|
skeletonClassName="h-3"
|
||||||
<SimpleUserAvatar userId={pubkey} size="small" />
|
/>
|
||||||
<SimpleUsername
|
</PopoverCheckboxItem>
|
||||||
userId={pubkey}
|
)
|
||||||
className="font-semibold text-sm truncate"
|
})}
|
||||||
skeletonClassName="h-3"
|
|
||||||
/>
|
|
||||||
</PopoverCheckboxItem>
|
|
||||||
))}
|
|
||||||
</div>
|
</div>
|
||||||
</PopoverContent>
|
</PopoverContent>
|
||||||
</Popover>
|
</Popover>
|
||||||
|
|||||||
Reference in New Issue
Block a user