Skip to content

Vehicle save: false-success over stale table + invisible list-refresh error #119

Description

@dynnamitt

Refetch-hardening + dedup across the three sidebar surfaces — all now ?selected= editors sharing the same doFetch / handleSave / handleDeactivate block:

Bugs (same shape, repeated per surface)

  • False-success over stale tablehandleSave/handleDeactivate set the green "saved" flag before await onSaved, so a committed save whose post-save refetch fails still shows success over a stale table. useVehicles.doFetch swallows fetch errors; VehicleDetails.handleSave has no try/catch. src/data/vehicles/hooks/useVehicles.ts, src/data/vehicles/components/VehicleDetails.tsx:72
  • Invisible list error — list error is hidden when data is non-empty, so non-save refetch failures (e.g. filterParam change after an Autosys import) silently leave a stale table. src/pages/GenericDataViewPage.tsx
  • Test gap — VT refetch-fail e2e asserts warning + no success, but not the catch-path re-baseline (form not dirty / mode→view) → a GenericDataViewPage — sort or switch page must collapse details (with dirty-guard) #91-class discard-dialog regression could slip. e2e-tests/no-auth/vehicle-type-sidebar.spec.ts

Lift (dedup destination)

  • src/utils/translateFetchError.ts — generic of the error switch (from fetchVehiclesAndApply.ts).
  • src/hooks/useEntityListFetch.ts — generic gate / loading / error / refetch hook; migrate useVehicleTypes, useDeckPlans, useVehicles (latter deletes fetchVehiclesAndApply.ts + test).
  • useMutationOutcome({ mutate, onSaved }) — owns the success flag (set after await onSaved), tags { outcome: 'mutation-error' | 'refetch-error' | 'ok' } for severity routing, and owns the snackbar render slot (omitting it = compile error). Dissolves the ~19-line handleSave/handleDeactivate copy in all three Details files down to ~5 lines each, plus commitSave (now unused — delete).

Status

Refs: #114, #91, #130 (closed as dup), #131.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions