ca27ea5522
component.js now creates an AbortController for each page mount, passing it to load(). On unmount, the controller is aborted to cancel in-flight requests that would otherwise mutate unmounted state. Page load functions consistently pass the signal to apiFetch and guard state mutations with abort checks. This eliminates the need for per-page abortController boilerplate and prevents stale errors from appearing on rapid navigation. Users page now guards catch block and loading state cleanup against aborted requests, matching passkeys.js pattern.
57 lines
4.4 KiB
JavaScript
57 lines
4.4 KiB
JavaScript
/**
|
|
* Hoover — index.js
|
|
*
|
|
* Barrel export of all public Hoover APIs.
|
|
*/
|
|
|
|
/* ── Reactivity ──────────────────────────────────────────────── */
|
|
export { reactive, requestUpdate } from './reactivity.js?v=9';
|
|
|
|
/* ── VDOM ────────────────────────────────────────────────────── */
|
|
export { h } from './vdom.js?v=9';
|
|
|
|
/* ── HTM ──────────────────────────────────────────────────────── */
|
|
export { html } from './html.js?v=9';
|
|
|
|
/* ── Render ──────────────────────────────────────────────────── */
|
|
export { render } from './render.js?v=9';
|
|
|
|
/* ── Component ───────────────────────────────────────────────── */
|
|
export { definePage, hComp } from './component.js?v=10';
|
|
|
|
/* ── Router ──────────────────────────────────────────────────── */
|
|
export { createRouter, Link } from './router.js?v=9';
|
|
|
|
/* ── WebSocket ───────────────────────────────────────────────── */
|
|
export { connect, onMessage } from './websocket.js?v=10';
|
|
|
|
/* ── API & Toast ─────────────────────────────────────────────── */
|
|
export { apiFetch, toast, dismissToast, apiSubmit, checkAbort, poll, refactorLoad, formAction, setAuthToken, clearAuthTokens, getAuthToken } from './api.js?v=12';
|
|
|
|
/* ── UI Components: Auth ──────────────────────────────────────── */
|
|
export { scheduleTokenRefresh, cancelTokenRefresh, checkSession, logout, initAuth, handleLoginSuccess, webauthnSupported, startRegistration, startAuthentication } from './components/auth.js?v=2';
|
|
|
|
/* ── Model ───────────────────────────────────────────────────── */
|
|
export { modelRegister, getModel, modelFetch, collectLoadingModels } from './model.js?v=9';
|
|
|
|
/* ── Helpers ─────────────────────────────────────────────────── */
|
|
export { esc, att_esc, enc, $val, parseZones, downloadBlob } from './helpers.js?v=9';
|
|
|
|
/* ── UI Components: Layout ───────────────────────────────────── */
|
|
export { PageHeader, renderGuard, renderGuardMulti, Tabs, SectionTitle, ActionGroup, DataTableSection } from './components/layout.js?v=9';
|
|
|
|
/* ── UI Components: Data ─────────────────────────────────────── */
|
|
export { Badge, StatusDot, Empty, Card, ConfirmDelete, Table, ActionButton, certStatusBadge, serviceStatusBadge, StatCard, StatusText, ServiceStatus, ActionCell, MonoText, ZoneSelect } from './components/data.js?v=9';
|
|
|
|
/* ── UI Components: Modal ────────────────────────────────────── */
|
|
export { openModal, closeModal, closeAllModals, modalVNodes, refreshModals, formModal, MultiSelectModal, QuickModal, isModalProcessing, setModalProcessing } from './components/modal.js?v=10';
|
|
|
|
/* ── UI Components: Apply ────────────────────────────────────── */
|
|
export { ApplyConfirm } from './components/applyconfirm.js?v=9';
|
|
|
|
/* ── UI Components: Toast ────────────────────────────────────── */
|
|
export { ToastContainer } from './components/toast.js?v=9';
|
|
|
|
/* ── UI Components: QR Code ──────────────────────────────────── */
|
|
export { qrSVG, QRCodeVNode, LogoUpload } from './components/qr.js?v=9';
|