"use client"; import React from "react"; import { RefreshCw } from "lucide-react"; import ExplorerPageShell from "@/components/explorer/ExplorerPageShell"; import ExplorerSectionCard from "@/components/explorer/ExplorerSectionCard"; import ExplorerLoading from "@/components/explorer/states/ExplorerLoading"; import ExplorerEmpty from "@/components/explorer/states/ExplorerEmpty"; import ForbiddenView from "@/components/system/ForbiddenView"; import AdminUsersFilters from "@/components/admin/users/AdminUsersFilters"; import UsersTable from "@/components/admin/users/UsersTable"; import CreateUserDialog from "@/components/admin/users/CreateUserDialog"; import { normalizeBranchIdDraft } from "@/components/admin/users/usersUi"; import { ApiClientError } from "@/lib/frontend/apiClient"; import { buildLoginUrl, LOGIN_REASONS } from "@/lib/frontend/authRedirect"; import { useAdminUsersQuery } from "@/lib/frontend/admin/users/useAdminUsersQuery"; import { Button } from "@/components/ui/button"; import { Alert, AlertTitle, AlertDescription } from "@/components/ui/alert"; const LIMIT = 50; export default function AdminUsersClient() { const [draft, setDraft] = React.useState({ q: "", role: "", branchId: "", }); const [query, setQuery] = React.useState({ q: null, role: null, branchId: null, }); const { status, items, nextCursor, error, refresh, loadMore, isLoadingMore, loadMoreError, } = useAdminUsersQuery({ query, limit: LIMIT }); React.useEffect(() => { if (!(error instanceof ApiClientError)) return; if (error.code === "AUTH_UNAUTHENTICATED") { const next = typeof window !== "undefined" ? `${window.location.pathname}${window.location.search}` : "/admin/users"; window.location.replace( buildLoginUrl({ reason: LOGIN_REASONS.EXPIRED, next }), ); } }, [error]); if ( error instanceof ApiClientError && error.code === "AUTH_FORBIDDEN_USER_MANAGEMENT" ) { return ; } const disabled = status === "loading" || isLoadingMore; function onDraftChange(patch) { setDraft((prev) => ({ ...prev, ...(patch || {}) })); } function applyFilters() { setQuery({ q: draft.q.trim() ? draft.q.trim() : null, role: draft.role.trim() ? draft.role.trim() : null, branchId: normalizeBranchIdDraft(draft.branchId) || null, }); } function resetFilters() { setDraft({ q: "", role: "", branchId: "" }); setQuery({ q: null, role: null, branchId: null }); } const actions = ( ); return ( } >
{status === "error" ? ( Fehler {error instanceof ApiClientError ? `Anfrage fehlgeschlagen (${error.code}). Bitte erneut versuchen.` : "Anfrage fehlgeschlagen. Bitte erneut versuchen."} ) : null} {status === "loading" ? ( ) : items.length === 0 ? ( ) : ( )} {loadMoreError ? ( Weitere Benutzer konnten nicht geladen werden Bitte erneut versuchen. ) : null} {nextCursor ? (
) : null}
); }