WebHooker/admin/composables/useToasts.ts
RhenCloud 407514f3c9
feat(admin): GitHub OAuth login, admin whitelist and Nuxt WebUI
Add an admin WebUI (Nuxt static SPA in admin/, served via the ASSETS
binding) for managing routes and viewing send logs. Access is gated by
GitHub OAuth plus an ADMIN_USER_IDS whitelist with cookie sessions
(admin-session.ts). Expose routes/logs CRUD API (admin-routes.ts), add a
discord-link mapping in token-store.ts, and mount admin routes with an
SPA assets fallback in the server.
2026-08-02 06:50:41 +08:00

23 lines
584 B
TypeScript

export interface Toast {
id: number;
msg: string;
kind: "ok" | "bad";
}
export function useToasts() {
const toasts = useState<Toast[]>("app-toasts", () => []);
function push(msg: string, kind: "ok" | "bad" = "ok"): void {
const id = Date.now() + Math.floor(Math.random() * 1000);
toasts.value.push({ id, msg, kind });
setTimeout(() => {
toasts.value = toasts.value.filter((t) => t.id !== id);
}, 2600);
}
function dismiss(id: number): void {
toasts.value = toasts.value.filter((t) => t.id !== id);
}
return { toasts, push, dismiss };
}