feat: zod

This commit is contained in:
redglow
2026-06-20 16:56:58 +02:00
parent fb44a1cf95
commit 4e5e537f27
2 changed files with 24 additions and 2 deletions
+2 -1
View File
@@ -25,7 +25,8 @@
"react-dom": "^19.1.0",
"tsx": "^4.19.3",
"typescript": "^5.8.3",
"vite-express": "*"
"vite-express": "*",
"zod": "^4.4.3"
},
"devDependencies": {
"@biomejs/biome": "2.5.0",
+22 -1
View File
@@ -2,23 +2,44 @@ import { Alert, CircularProgress } from "@mui/material";
import { useQuery } from "@tanstack/react-query";
import { createFileRoute } from "@tanstack/react-router";
import { useEffect } from "react";
import z from "zod";
const Announcements = z.array(
z.object({
id: z.number(),
title: z.string(),
text: z.string(),
publication_date: z.iso.datetime().transform((arg) => new Date(arg)),
image: z.string(),
}),
);
export const Route = createFileRoute("/")({
component: RouteComponent,
});
function RouteComponent() {
// the query to retrieve the announcements
const announcementsQuery = useQuery({
queryKey: ["announcements"],
queryFn: () => fetch("/api/announcements").then((x) => x.json()),
queryFn: async () => {
const response = await fetch("/api/announcements");
const data = await response.json();
const announcements = Announcements.parse(data);
console.log(announcements);
return announcements;
},
retry: false,
});
// log error only if we get one
useEffect(() => {
if (announcementsQuery.error) {
console.log(announcementsQuery.error);
}
}, [announcementsQuery.error]);
// handle loading / error / show values
return announcementsQuery.status === "pending" ? (
<CircularProgress aria-label="Loading…" />
) : announcementsQuery.status === "error" ? (