T-16: Centralize PAGE_SIZE frontend constants
- Add BAN_PAGE_SIZE (100) and HISTORY_PAGE_SIZE (50) to frontend/src/utils/constants.ts - Replace local PAGE_SIZE definitions in useBans.ts and HistoryPage.tsx with imports - Eliminates risk of pagination constants silently diverging from backend defaults - Single source of truth for all pagination sizes Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -1,28 +1,3 @@
|
||||
### T-15 · Replace `window` event bus for session expiry with React context callback
|
||||
|
||||
**Where found:** `frontend/src/api/client.ts` — `window.dispatchEvent(new Event(SESSION_EXPIRED_EVENT))`; `frontend/src/providers/AuthProvider.tsx` — `window.addEventListener(SESSION_EXPIRED_EVENT, ...)`
|
||||
|
||||
**Why this is needed:** Using `window` as a side-channel bypasses React's component tree, breaks in non-browser environments (SSR, test environments without full JSDOM), and creates an invisible coupling between the API client and the auth provider. It also fires globally — any code anywhere that dispatches `bangui:session-expired` on window will trigger a logout, with no tracing possible.
|
||||
|
||||
**Goal:** The API client receives an `onUnauthorized` callback injected at the provider level, called directly instead of via a DOM event.
|
||||
|
||||
**What to do:**
|
||||
1. Add an `onUnauthorized` callback to the API client (e.g. a module-level setter `setUnauthorizedHandler(fn)`).
|
||||
2. In `AuthProvider`, call `setUnauthorizedHandler(handleSessionExpired)` on mount and reset it on unmount.
|
||||
3. In `client.ts`, call the handler directly instead of `window.dispatchEvent`.
|
||||
4. Remove `SESSION_EXPIRED_EVENT` string constant and the `window.addEventListener` in `AuthProvider`.
|
||||
|
||||
**Possible traps and issues:**
|
||||
- The module-level handler setter is still global state — an alternative is to pass the handler as a parameter to `request()` via a context object, but that changes the API signature more significantly.
|
||||
- Tests that mock `window.dispatchEvent` need updating.
|
||||
- SSR / Vitest environments that already mock `window` may need adjustment.
|
||||
|
||||
**Docs changes needed:** None.
|
||||
|
||||
**Doc references:** `frontend/src/api/client.ts`, `frontend/src/providers/AuthProvider.tsx`
|
||||
|
||||
---
|
||||
|
||||
### T-16 · Centralise `PAGE_SIZE` frontend constants
|
||||
|
||||
**Where found:** `frontend/src/hooks/useBans.ts:14` (`PAGE_SIZE = 100`); `frontend/src/pages/HistoryPage.tsx:45` (`PAGE_SIZE = 50`)
|
||||
|
||||
Reference in New Issue
Block a user