From 5161bd39c2ef46dcd60c531f7452e8d017f6d454 Mon Sep 17 00:00:00 2001 From: Lucas Berger Date: Thu, 18 Jun 2026 18:22:29 -0400 Subject: [PATCH] fix(20): IN-04 skip profile-saved toast + refetch on no-op save Co-Authored-By: Claude Opus 4.8 (1M context) --- apps/pwa/src/components/MemberEditorSheet.tsx | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/apps/pwa/src/components/MemberEditorSheet.tsx b/apps/pwa/src/components/MemberEditorSheet.tsx index 8bcbdb9..7d64fc2 100644 --- a/apps/pwa/src/components/MemberEditorSheet.tsx +++ b/apps/pwa/src/components/MemberEditorSheet.tsx @@ -270,11 +270,15 @@ export function MemberEditorSheet({ payload.displayName = trimmed; } if (isAdmin !== member.isAdmin) payload.isAdmin = isAdmin; - // No-op guard — nothing changed, skip the network call - if (Object.keys(payload).length === 0) return; + // No-op guard — nothing changed, skip the network call and signal no write + // (IN-04: avoids firing the "Profile saved." toast + refetch on a no-op save). + if (Object.keys(payload).length === 0) return false; await updateMemberProfile(member.id, payload); + return true; }, - onSuccess: () => { + onSuccess: (changed) => { + // IN-04: only surface success feedback when an actual write occurred. + if (!changed) return; void queryClient.invalidateQueries({ queryKey: ['admin', 'members'] }); onToast('Profile saved.'); // Sheet stays open — per-section save (D-05)