Common runtime issues and fixes
Troubleshooting
invalidateQueries does not refresh the table
Symptoms
- Mutation succeeds.
- You call
invalidateQueries. - The table still shows stale data.
Root cause
Different QueryClient instances are being used (isolated caches).
Fix
- Ensure one shared app-level
QueryClientProvider. - Invalidate the key
["tableData", tableId]. - Do not pass a different
queryClientprop than the provider instance.
await queryClient.invalidateQueries({
queryKey: ["tableData", "products"],
});Bulk confirm does nothing (copy/delete)
Symptoms
- User clicks
CopyorDelete. - Confirmation dialog opens.
- Clicking
Confirmappears to do nothing.
Root cause
A pending action was reset by outside-click behavior while the dialog portal was open.
Fix in current version
- Outside clicks are ignored while confirmation is open.
- The confirm action is lock-protected and runs exactly once.
- Bulk callbacks should return explicit
BulkActionResultfor deterministic close/selection behavior.
type BulkActionResult = {
success: boolean;
closeMenu: boolean;
clearSelection: boolean;
message?: string;
};