mirror of
https://github.com/block/buzz.git
synced 2026-10-27 04:30:52 +00:00
fix(desktop): keep MembersSidebar input usable while an add is in flight (#1106)
Signed-off-by: npub1xhqc4cnnln86lqxk983qulu8yxusfxfhntwl75es2jkvy5zvz26qzr0685 <35c18ae273fccfaf80d629e20e7f8721b90499379addff533054acc2504c12b4@sprout-oss.stage.blox.sqprod.co> Co-authored-by: npub1jmc9dt2lyvzu3h0kxlwxt5zg4fxp9476awyxw6gwxn72g6cw7exqs64whm <96f056ad5f2305c8ddf637dc65d048aa4c12d7daeb8867690e34fca46b0ef64c@sprout-oss.stage.blox.sqprod.co> Co-authored-by: npub1xhqc4cnnln86lqxk983qulu8yxusfxfhntwl75es2jkvy5zvz26qzr0685 <35c18ae273fccfaf80d629e20e7f8721b90499379addff533054acc2504c12b4@sprout-oss.stage.blox.sqprod.co>
This commit is contained in:
@@ -105,6 +105,9 @@ export function MembersSidebar({
|
|||||||
const [inviteSubmissionErrors, setInviteSubmissionErrors] = React.useState<
|
const [inviteSubmissionErrors, setInviteSubmissionErrors] = React.useState<
|
||||||
AddChannelMembersResult["errors"]
|
AddChannelMembersResult["errors"]
|
||||||
>([]);
|
>([]);
|
||||||
|
const [addingMemberPubkeys, setAddingMemberPubkeys] = React.useState<
|
||||||
|
ReadonlySet<string>
|
||||||
|
>(() => new Set());
|
||||||
const membersQuery = useChannelMembersQuery(channelId, open);
|
const membersQuery = useChannelMembersQuery(channelId, open);
|
||||||
const addMembersMutation = useAddChannelMembersMutation(channelId);
|
const addMembersMutation = useAddChannelMembersMutation(channelId);
|
||||||
const changeRoleMutation = useMutation({
|
const changeRoleMutation = useMutation({
|
||||||
@@ -410,6 +413,7 @@ export function MembersSidebar({
|
|||||||
if (!open) {
|
if (!open) {
|
||||||
setSearchQuery("");
|
setSearchQuery("");
|
||||||
setInviteSubmissionErrors([]);
|
setInviteSubmissionErrors([]);
|
||||||
|
setAddingMemberPubkeys(new Set());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -421,13 +425,25 @@ export function MembersSidebar({
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function handleAddSearchResult(user: UserSearchResult) {
|
async function handleAddSearchResult(user: UserSearchResult) {
|
||||||
setInviteSubmissionErrors([]);
|
if (addingMemberPubkeys.has(user.pubkey)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const result = await addMembersMutation.mutateAsync({
|
setAddingMemberPubkeys((prev) => new Set(prev).add(user.pubkey));
|
||||||
pubkeys: [user.pubkey],
|
|
||||||
role: user.isAgent ? "bot" : "member",
|
try {
|
||||||
});
|
const result = await addMembersMutation.mutateAsync({
|
||||||
setInviteSubmissionErrors(result.errors);
|
pubkeys: [user.pubkey],
|
||||||
|
role: user.isAgent ? "bot" : "member",
|
||||||
|
});
|
||||||
|
setInviteSubmissionErrors((prev) => [...prev, ...result.errors]);
|
||||||
|
} finally {
|
||||||
|
setAddingMemberPubkeys((prev) => {
|
||||||
|
const next = new Set(prev);
|
||||||
|
next.delete(user.pubkey);
|
||||||
|
return next;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderMemberCard(member: ChannelMember, memberIsBot: boolean) {
|
function renderMemberCard(member: ChannelMember, memberIsBot: boolean) {
|
||||||
@@ -507,7 +523,7 @@ export function MembersSidebar({
|
|||||||
autoCorrect="off"
|
autoCorrect="off"
|
||||||
className={MODAL_SEARCH_INPUT_CLASS}
|
className={MODAL_SEARCH_INPUT_CLASS}
|
||||||
data-testid="channel-management-search-users"
|
data-testid="channel-management-search-users"
|
||||||
disabled={addMembersMutation.isPending || isArchived}
|
disabled={isArchived}
|
||||||
id="channel-management-search-users"
|
id="channel-management-search-users"
|
||||||
onChange={(event) => {
|
onChange={(event) => {
|
||||||
setSearchQuery(event.target.value);
|
setSearchQuery(event.target.value);
|
||||||
@@ -559,7 +575,7 @@ export function MembersSidebar({
|
|||||||
{addSearchResults.map((user) => (
|
{addSearchResults.map((user) => (
|
||||||
<AddMemberSearchResultRow
|
<AddMemberSearchResultRow
|
||||||
disabled={
|
disabled={
|
||||||
addMembersMutation.isPending || isArchived
|
addingMemberPubkeys.has(user.pubkey) || isArchived
|
||||||
}
|
}
|
||||||
key={user.pubkey}
|
key={user.pubkey}
|
||||||
onSelect={(selectedUser) => {
|
onSelect={(selectedUser) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user