M-029 Pass 1 batch 5: migrate 2 four-mutation pages to useTrackedMutation

Drains 8 more useMutation sites (18 -> 10). NetworkScanPage hoists the

shared invalidation array into scanTargetInvalidates const.

Pages migrated:

  - IssuersPage.tsx        test/delete/create/update all invalidate [['issuers']]

                            (testIssuerConnection updates last_tested_at

                             server-side, so the list refreshes; local

                             setTestResult banner still surfaces immediate result)

                            (queryClient + useQueryClient dropped)

  - NetworkScanPage.tsx    create/delete/toggle/scan all invalidate

                            [['network-scan-targets']] (hoisted to shared const)

                            (queryClient + useQueryClient dropped)

Verification:

  legacy useMutation count   18 -> 10 (-8)

  useTrackedMutation count   38 -> 46 (+8)

Closes 46 of 56 sites toward M-029 Pass 1 completion (82%).
This commit is contained in:
Shankar
2026-04-27 02:50:42 +00:00
parent 26da116f1a
commit 1c960fff50
2 changed files with 27 additions and 19 deletions
+13 -10
View File
@@ -1,5 +1,6 @@
import { useState } from 'react';
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import { useQuery } from '@tanstack/react-query';
import { useTrackedMutation } from '../hooks/useTrackedMutation';
import {
getNetworkScanTargets,
createNetworkScanTarget,
@@ -119,7 +120,6 @@ function CreateScanTargetModal({ onClose, onCreate }: {
export default function NetworkScanPage() {
const [showCreate, setShowCreate] = useState(false);
const queryClient = useQueryClient();
const { data, isLoading, error, refetch } = useQuery({
queryKey: ['network-scan-targets'],
@@ -127,28 +127,31 @@ export default function NetworkScanPage() {
refetchInterval: 30000,
});
const createMutation = useMutation({
// Every network-scan-target mutation invalidates the same list query.
const scanTargetInvalidates = [['network-scan-targets']];
const createMutation = useTrackedMutation({
mutationFn: createNetworkScanTarget,
invalidates: scanTargetInvalidates,
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['network-scan-targets'] });
setShowCreate(false);
},
});
const deleteMutation = useMutation({
const deleteMutation = useTrackedMutation({
mutationFn: deleteNetworkScanTarget,
onSuccess: () => queryClient.invalidateQueries({ queryKey: ['network-scan-targets'] }),
invalidates: scanTargetInvalidates,
});
const toggleMutation = useMutation({
const toggleMutation = useTrackedMutation({
mutationFn: ({ id, enabled }: { id: string; enabled: boolean }) =>
updateNetworkScanTarget(id, { enabled }),
onSuccess: () => queryClient.invalidateQueries({ queryKey: ['network-scan-targets'] }),
invalidates: scanTargetInvalidates,
});
const scanMutation = useMutation({
const scanMutation = useTrackedMutation({
mutationFn: triggerNetworkScan,
onSuccess: () => queryClient.invalidateQueries({ queryKey: ['network-scan-targets'] }),
invalidates: scanTargetInvalidates,
});
const columns: Column<NetworkScanTarget>[] = [