Validation_Suite/validation-suite/frontend/atlas/app/(app)/customers/page.tsx

54 lines
2.2 KiB
TypeScript

"use client";
import { z } from "zod";
import { CrudPage } from "@/components/crud-page";
import { Customer } from "@/lib/api";
const schema = z.object({
customer_type: z.enum(["practice", "clinic"]),
source_system: z.string().optional().nullable(),
external_id: z.string().optional().nullable(),
name: z.string().min(2),
street: z.string().optional().nullable(),
postal_code: z.string().optional().nullable(),
city: z.string().optional().nullable(),
phone: z.string().optional().nullable(),
email: z.union([z.string().email(), z.literal(""), z.null()]).optional(),
hygiene_officer: z.string().optional().nullable(),
quality_manager: z.string().optional().nullable(),
notes: z.string().optional().nullable()
});
export default function CustomersPage() {
return (
<CrudPage<Customer>
title="Kunden"
subtitle="Praxen und Kliniken mit Kontakt- und Qualitaetsdaten."
endpoint="/customers"
columns={[
{ key: "name", label: "Name" },
{ key: "external_id", label: "Kundennr." },
{ key: "customer_type", label: "Typ" },
{ key: "city", label: "Ort" },
{ key: "phone", label: "Telefon" },
{ key: "email", label: "Mail" }
]}
fields={[
{ name: "customer_type", label: "Typ", type: "select", options: [{ label: "Praxis", value: "practice" }, { label: "Klinik", value: "clinic" }] },
{ name: "source_system", label: "Quellsystem" },
{ name: "external_id", label: "Kundennummer" },
{ name: "name", label: "Name", required: true },
{ name: "street", label: "Adresse" },
{ name: "postal_code", label: "PLZ" },
{ name: "city", label: "Ort" },
{ name: "phone", label: "Telefon" },
{ name: "email", label: "Mail", type: "email" },
{ name: "hygiene_officer", label: "Hygienebeauftragter" },
{ name: "quality_manager", label: "QM" },
{ name: "notes", label: "Bemerkungen", type: "textarea" }
]}
schema={schema}
emptyValues={{ customer_type: "practice", source_system: "", external_id: "", name: "", street: "", postal_code: "", city: "", phone: "", email: "", hygiene_officer: "", quality_manager: "", notes: "" }}
/>
);
}