Fix missing query invalidations across member management
Add utils.user.list.invalidate() after mutations that change user status to ensure member lists refresh without manual page reload: - Member detail page: after update and send invitation - User mobile actions: after send invitation - Add member dialog: after send invitation in jury group flow Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
5965f7889d
commit
3fb0d128a1
|
|
@ -58,6 +58,7 @@ import {
|
||||||
export default function MemberDetailPage() {
|
export default function MemberDetailPage() {
|
||||||
const params = useParams()
|
const params = useParams()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
|
const utils = trpc.useUtils()
|
||||||
const userId = params.id as string
|
const userId = params.id as string
|
||||||
|
|
||||||
const { data: user, isLoading, error, refetch } = trpc.user.get.useQuery({ id: userId })
|
const { data: user, isLoading, error, refetch } = trpc.user.get.useQuery({ id: userId })
|
||||||
|
|
@ -103,6 +104,8 @@ export default function MemberDetailPage() {
|
||||||
expertiseTags,
|
expertiseTags,
|
||||||
maxAssignments: maxAssignments ? parseInt(maxAssignments) : null,
|
maxAssignments: maxAssignments ? parseInt(maxAssignments) : null,
|
||||||
})
|
})
|
||||||
|
utils.user.get.invalidate({ id: userId })
|
||||||
|
utils.user.list.invalidate()
|
||||||
toast.success('Member updated successfully')
|
toast.success('Member updated successfully')
|
||||||
router.push('/admin/members')
|
router.push('/admin/members')
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|
@ -115,6 +118,7 @@ export default function MemberDetailPage() {
|
||||||
await sendInvitation.mutateAsync({ userId })
|
await sendInvitation.mutateAsync({ userId })
|
||||||
toast.success('Invitation email sent successfully')
|
toast.success('Invitation email sent successfully')
|
||||||
refetch()
|
refetch()
|
||||||
|
utils.user.list.invalidate()
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
toast.error(error instanceof Error ? error.message : 'Failed to send invitation')
|
toast.error(error instanceof Error ? error.message : 'Failed to send invitation')
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -88,6 +88,7 @@ export function AddMemberDialog({ juryGroupId, open, onOpenChange }: AddMemberDi
|
||||||
const { mutate: sendInvitation } = trpc.user.sendInvitation.useMutation({
|
const { mutate: sendInvitation } = trpc.user.sendInvitation.useMutation({
|
||||||
onSuccess: (result) => {
|
onSuccess: (result) => {
|
||||||
toast.success(`Invitation sent to ${result.email}`)
|
toast.success(`Invitation sent to ${result.email}`)
|
||||||
|
utils.user.list.invalidate()
|
||||||
},
|
},
|
||||||
onError: (err) => {
|
onError: (err) => {
|
||||||
// Don't block — user was created and added, just invitation failed
|
// Don't block — user was created and added, just invitation failed
|
||||||
|
|
|
||||||
|
|
@ -250,6 +250,7 @@ export function UserMobileActions({
|
||||||
try {
|
try {
|
||||||
await sendInvitation.mutateAsync({ userId })
|
await sendInvitation.mutateAsync({ userId })
|
||||||
toast.success(`Invitation sent to ${userEmail}`)
|
toast.success(`Invitation sent to ${userEmail}`)
|
||||||
|
utils.user.list.invalidate()
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
toast.error(error instanceof Error ? error.message : 'Failed to send invitation')
|
toast.error(error instanceof Error ? error.message : 'Failed to send invitation')
|
||||||
} finally {
|
} finally {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue