diff --git a/frontend/src/app/data-dev/page.tsx b/frontend/src/app/data-dev/page.tsx index df5490c..8b53cad 100644 --- a/frontend/src/app/data-dev/page.tsx +++ b/frontend/src/app/data-dev/page.tsx @@ -20,17 +20,30 @@ const DataFetcher: React.FC = () => { const [data, setData] = useState([]); const [filteredData, setFilteredData] = useState([]); const [filters, setFilters] = useState>({}); + const [loading, setLoading] = useState(true); + const [currentPage, setCurrentPage] = useState(1); + const [itemsPerPage, setItemsPerPage] = useState(25); + const [error, setError] = useState(null); useEffect(() => { - const fetchData = async () => { - const response = await fetch("https://api.htl-braunau.at/data/json"); - const result: DataModel[] = await response.json(); - setData(result); - setFilteredData(result); + const fetchPaginatedData = async () => { + setLoading(true); + try { + const response = await fetch(`https://api.htl-braunau.at/dev/data/paginated?page=${currentPage}&limit=${itemsPerPage === 0 ? '' : itemsPerPage}`); + if (!response.ok) throw new Error(`Failed to fetch data: ${response.statusText}`); + const result: DataModel[] = await response.json(); + setData(result); + } catch (err) { + setError((err as Error).message); + } finally { + setLoading(false); + } }; - fetchData(); - }, []); + fetchPaginatedData(); + }, [currentPage, itemsPerPage]); + + const applyFilters = async (column: string, operator: string, value: any) => { setFilters((prev) => { @@ -96,18 +109,18 @@ const DataFetcher: React.FC = () => { setFilteredData(filtered); }, [filters, data]); - const columns: { key: string; type: "text" | "number" }[] = [ - { key: "status", type: "text" }, - { key: "type", type: "text" }, - { key: "nsapp", type: "text" }, - { key: "os_type", type: "text" }, - { key: "disk_size", type: "number" }, - { key: "core_count", type: "number" }, - { key: "ram_size", type: "number" }, - { key: "method", type: "text" }, - { key: "pve_version", type: "text" }, - { key: "created_at", type: "text" } - ]; +const columns: { key: string; type: "text" | "number"; label: string }[] = [ + { key: "status", type: "text", label: "Status" }, + { key: "type", type: "text", label: "Type" }, + { key: "nsapp", type: "text", label: "NS App" }, + { key: "os_type", type: "text", label: "OS Type" }, + { key: "disk_size", type: "number", label: "Disk Size" }, + { key: "core_count", type: "number", label: "CPU Cores" }, + { key: "ram_size", type: "number", label: "RAM Size" }, + { key: "method", type: "text", label: "Method" }, + { key: "pve_version", type: "text", label: "PVE Version" }, + { key: "created_at", type: "text", label: "Created At" } +]; return (
@@ -116,10 +129,10 @@ const DataFetcher: React.FC = () => { - {columns.map(({ key, type }) => ( + {columns.map(({ key, type, label }) => ( - {columns.map(({ key }) => ( + {columns.map(({ key, label }) => (
- {key} + {label} { {/* Filters Row - Displays below headers */}
{filters[key] && filters[key].length > 0 ? (