address greptile review feedback (greploop iteration 1)

- Separate save failure from refresh failure: close drawer after successful
  save even if teamInfoCall refresh fails
- Preserve unknown permissions not in availablePermissions when saving,
  preventing silent drops of permissions from newer backend versions

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
yuneng-jiang 2026-03-21 00:21:39 -07:00
parent 4f98b4ea3c
commit 42fe911e1c

View file

@ -74,14 +74,23 @@ const MemberPermissionsDrawer: React.FC<MemberPermissionsDrawerProps> = ({
if (!accessToken || !member) return;
setSaving(true);
try {
// Preserve unknown permissions not present in the available set
const availableValues = new Set(availablePermissions.map((p) => p.value));
const existingUnknown = (member.extra_permissions || []).filter(
(p) => !availableValues.has(p),
);
const updatedMember: Member = {
...member,
extra_permissions: Array.from(selected),
extra_permissions: [...existingUnknown, ...Array.from(selected)],
};
await teamMemberUpdateCall(accessToken, teamId, updatedMember);
NotificationsManager.success("Permissions updated successfully");
await onUpdate();
onClose();
try {
await onUpdate();
} catch (refreshError) {
console.error("Failed to refresh team data after permission update:", refreshError);
}
} catch (error: any) {
const errMsg = error?.message || "Failed to update permissions";
NotificationsManager.fromBackend(errMsg);