Refactor jail detail hooks: split into useJailData and useJailCommands
- Split monolithic useJailDetail hook into separate concerns - Created useJailData for fetching and managing jail data - Created useJailCommands for jail operations (power, console, etc.) - Updated JailDetailPage to use new hooks - Updated tests to reflect new hook structure - Removed old useJailDetail hook Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -1,27 +1,3 @@
|
||||
### T-12 · Apply `useListData` consistently across all data-fetching hooks
|
||||
|
||||
**Where found:** `frontend/src/hooks/useJailList.ts`, `useJailDetail.ts`, `useServerStatus.ts`, `useBanTrend.ts`, `useDashboardCountryData.ts` — all re-implement abort-controller / loading / error state manually. `useListData.ts` exists and is used by `useBlocklists`, `useJailConfigs`, `useActionList`, `useFilterList`.
|
||||
|
||||
**Why this is needed:** At least 5 hooks implement the same 40-line pattern. Any fix to the pattern (e.g. abort-guard in `.finally()`) must be applied to every copy independently. `useHistory` has a real bug because of this (see T-18).
|
||||
|
||||
**Goal:** All hooks that load a list and need refresh semantics use `useListData` or a shared base.
|
||||
|
||||
**What to do:**
|
||||
1. Audit all hooks for the manual abort-controller pattern.
|
||||
2. Refactor `useJailList` first (cleanest candidate — no mutations).
|
||||
3. For hooks with side-effects beyond listing (e.g. `useJailDetail`), split into data hook + command hook (see T-13) and use `useListData` for the data half.
|
||||
4. Extend `useListData` if needed to support `onSuccess` callbacks returning non-array data (e.g. `total`).
|
||||
|
||||
**Possible traps and issues:**
|
||||
- `useListData` currently requires `selector: (response) → TItem[]`. Hooks that expose `total` alongside items need `onSuccess` to capture it — the `onSuccess` callback already exists in `UseListDataOptions`.
|
||||
- `useServerStatus` has a polling interval and window-focus refetch that `useListData` does not support — may need a `usePolledData` variant or extension.
|
||||
|
||||
**Docs changes needed:** None.
|
||||
|
||||
**Doc references:** `frontend/src/hooks/useListData.ts`
|
||||
|
||||
---
|
||||
|
||||
### T-13 · Split `useJailDetail` — SRP violation (read state + write commands in one hook)
|
||||
|
||||
**Where found:** `frontend/src/hooks/useJailDetail.ts`
|
||||
|
||||
Reference in New Issue
Block a user