Skip to content

Commit 90a2702

Browse files
Merge branch 'members-page' into ssopage-cleanup
2 parents 9a6976e + af406f8 commit 90a2702

File tree

2 files changed

+53
-30
lines changed

2 files changed

+53
-30
lines changed

frontend/src/components/EditMemberDrawer/EditMemberDrawer.tsx

Lines changed: 51 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -89,40 +89,64 @@ function EditMemberDrawer({
8989
[formatTimezoneAdjustedTimestamp],
9090
);
9191

92+
const saveInvitedMember = useCallback(async (): Promise<void> => {
93+
if (!member || !inviteId) {
94+
return;
95+
}
96+
await cancelInvite({ id: inviteId });
97+
try {
98+
await sendInvite({
99+
email: member.email,
100+
name: displayName,
101+
role: selectedRole,
102+
frontendBaseUrl: window.location.origin,
103+
});
104+
toast.success('Invite updated successfully', { richColors: true });
105+
onComplete();
106+
onClose();
107+
} catch {
108+
onRefetch?.();
109+
onClose();
110+
toast.error(
111+
'Failed to send the updated invite. Please re-invite this member.',
112+
{ richColors: true },
113+
);
114+
}
115+
}, [
116+
member,
117+
inviteId,
118+
displayName,
119+
selectedRole,
120+
onComplete,
121+
onClose,
122+
onRefetch,
123+
]);
124+
125+
const saveActiveMember = useCallback(async (): Promise<void> => {
126+
if (!member) {
127+
return;
128+
}
129+
await update({
130+
userId: member.id,
131+
displayName,
132+
role: selectedRole,
133+
});
134+
toast.success('Member details updated successfully', { richColors: true });
135+
onComplete();
136+
onClose();
137+
}, [member, displayName, selectedRole, onComplete, onClose]);
138+
92139
const handleSave = useCallback(async (): Promise<void> => {
93140
if (!member || !isDirty) {
94141
return;
95142
}
96143
setIsSaving(true);
97144
try {
98145
if (isInvited && inviteId) {
99-
await cancelInvite({ id: inviteId });
100-
try {
101-
await sendInvite({
102-
email: member.email,
103-
name: displayName,
104-
role: selectedRole,
105-
frontendBaseUrl: window.location.origin,
106-
});
107-
toast.success('Invite updated successfully', { richColors: true });
108-
} catch {
109-
onRefetch?.();
110-
onClose();
111-
toast.error(
112-
'Failed to send the updated invite. Please re-invite this member.',
113-
{ richColors: true },
114-
);
115-
}
146+
await saveInvitedMember();
116147
} else {
117-
await update({
118-
userId: member.id,
119-
displayName,
120-
role: selectedRole,
121-
});
122-
toast.success('Member details updated successfully', { richColors: true });
148+
await saveActiveMember();
123149
}
124-
onComplete();
125-
onClose();
126150
} catch {
127151
toast.error(
128152
isInvited ? 'Failed to update invite' : 'Failed to update member details',
@@ -136,11 +160,8 @@ function EditMemberDrawer({
136160
isDirty,
137161
isInvited,
138162
inviteId,
139-
displayName,
140-
selectedRole,
141-
onComplete,
142-
onClose,
143-
onRefetch,
163+
saveInvitedMember,
164+
saveActiveMember,
144165
]);
145166

146167
const handleDelete = useCallback(async (): Promise<void> => {

frontend/src/container/MembersSettings/MembersSettings.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ function MembersSettings(): JSX.Element {
2828
const pageParam = parseInt(urlQuery.get('page') ?? '1', 10);
2929
const currentPage = Number.isNaN(pageParam) || pageParam < 1 ? 1 : pageParam;
3030

31+
// TODO(nuqs): Replace with nuqs once the nuqs setup and integration is done - for search
3132
const [searchQuery, setSearchQuery] = useState('');
3233
const [filterMode, setFilterMode] = useState<FilterMode>(FilterMode.All);
3334
const [isInviteModalOpen, setIsInviteModalOpen] = useState(false);
@@ -104,6 +105,7 @@ function MembersSettings(): JSX.Element {
104105
return filteredMembers.slice(start, start + PAGE_SIZE);
105106
}, [filteredMembers, currentPage]);
106107

108+
// TODO(nuqs): Replace with nuqs once the nuqs setup and integration is done
107109
const setPage = useCallback(
108110
(page: number): void => {
109111
urlQuery.set('page', String(page));

0 commit comments

Comments
 (0)