'use client' /** * Staff Search Admin Page * * Search and browse university staff members and their publications. * Potential customers for BreakPilot services. */ import AdminLayout from '@/components/admin/AdminLayout' import { useStaffSearch } from './_components/useStaffSearch' import { StaffListItem } from './_components/StaffListItem' import { StaffDetailPanel } from './_components/StaffDetailPanel' export default function StaffSearchPage() { const { searchQuery, setSearchQuery, staff, selectedStaff, publications, stats, loading, error, filterState, setFilterState, filterUniType, setFilterUniType, filterPositionType, setFilterPositionType, filterProfessorsOnly, setFilterProfessorsOnly, total, offset, limit, searchStaff, handleSelectStaff, } = useStaffSearch() return ( {/* Stats Overview */} {stats && (
{stats.total_staff.toLocaleString()}
Mitarbeiter gesamt
{stats.total_professors.toLocaleString()}
Professoren
{stats.total_publications.toLocaleString()}
Publikationen
{stats.total_universities}
Universitaten
)}
{/* Left Panel: Search & Results */}
{/* Search Bar */}
setSearchQuery(e.target.value)} className="w-full px-4 py-2 border rounded-lg focus:ring-2 focus:ring-primary-500 focus:border-primary-500" />
{/* Filters */}
{/* Error */} {error && (
{error}
)} {/* Results */}
{total > 0 ? `${total.toLocaleString()} Ergebnisse` : 'Keine Ergebnisse'} {total > limit && (
{Math.floor(offset / limit) + 1} / {Math.ceil(total / limit)}
)}
{staff.map((member) => ( handleSelectStaff(member)} /> ))} {staff.length === 0 && !loading && (
{searchQuery || filterState || filterUniType || filterPositionType ? 'Keine Ergebnisse fur diese Suche' : 'Geben Sie einen Suchbegriff ein oder wahlen Sie Filter'}
)} {loading && (
Suche lauft...
)}
{/* Right Panel: Detail View */}
) }