@flowselections/floriday-afhandeling-module 1.0.6 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist-lib/components/afhandeling/LeveringenPage.d.ts.map +1 -1
  2. package/dist-lib/components/afhandeling/LeveringenPage.js +23 -2
  3. package/dist-lib/components/afhandeling/NieuweLeveringPage.d.ts +2 -0
  4. package/dist-lib/components/afhandeling/NieuweLeveringPage.d.ts.map +1 -0
  5. package/dist-lib/components/afhandeling/NieuweLeveringPage.js +7 -0
  6. package/dist-lib/components/afhandeling/VervoerderForm.d.ts +6 -0
  7. package/dist-lib/components/afhandeling/VervoerderForm.d.ts.map +1 -0
  8. package/dist-lib/components/afhandeling/VervoerderForm.js +136 -0
  9. package/dist-lib/components/afhandeling/VervoerdersPage.d.ts +2 -0
  10. package/dist-lib/components/afhandeling/VervoerdersPage.d.ts.map +1 -0
  11. package/dist-lib/components/afhandeling/VervoerdersPage.js +41 -0
  12. package/dist-lib/index.d.ts +2 -0
  13. package/dist-lib/index.d.ts.map +1 -1
  14. package/dist-lib/index.js +6 -3
  15. package/dist-lib/integrations/supabase/auth-middleware.d.ts +3038 -234
  16. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  17. package/dist-lib/integrations/supabase/client.d.ts +3038 -234
  18. package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
  19. package/dist-lib/integrations/supabase/client.server.d.ts +3038 -234
  20. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  21. package/dist-lib/integrations/supabase/types.d.ts +3170 -296
  22. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  23. package/dist-lib/integrations/supabase/types.js +18 -1
  24. package/dist-lib/lib/carriers.functions.d.ts +26576 -0
  25. package/dist-lib/lib/carriers.functions.d.ts.map +1 -0
  26. package/dist-lib/lib/carriers.functions.js +131 -0
  27. package/dist-lib/lib/countries.d.ts +7 -0
  28. package/dist-lib/lib/countries.d.ts.map +1 -0
  29. package/dist-lib/lib/countries.js +47 -0
  30. package/dist-lib/lib/floriday.functions.d.ts +3040 -235
  31. package/dist-lib/lib/floriday.functions.d.ts.map +1 -1
  32. package/dist-lib/lib/floriday.functions.js +4 -5
  33. package/package.json +8 -3
@@ -1 +1 @@
1
- {"version":3,"file":"LeveringenPage.d.ts","sourceRoot":"","sources":["../../../src/components/afhandeling/LeveringenPage.tsx"],"names":[],"mappings":"AA2DA,wBAAgB,cAAc,gCAoL7B"}
1
+ {"version":3,"file":"LeveringenPage.d.ts","sourceRoot":"","sources":["../../../src/components/afhandeling/LeveringenPage.tsx"],"names":[],"mappings":"AA2DA,wBAAgB,cAAc,gCAuM7B"}
@@ -40,11 +40,32 @@ function statusVariant(status) {
40
40
  }
41
41
  export function LeveringenPage() {
42
42
  const fetchOrders = useServerFn(getFloridayOrders);
43
- const { data, isLoading, error, refetch, isFetching } = useQuery({
43
+ const { data, isLoading, refetch, isFetching } = useQuery({
44
44
  queryKey: ["floriday", "orders"],
45
- queryFn: () => fetchOrders(),
45
+ queryFn: async () => {
46
+ try {
47
+ return await fetchOrders();
48
+ }
49
+ catch (e) {
50
+ let message = "Onbekende fout";
51
+ if (e instanceof Response) {
52
+ const text = await e.clone().text().catch(() => "");
53
+ message = `Floriday-aanvraag mislukt (${e.status}): ${text.slice(0, 200) || e.statusText}`;
54
+ }
55
+ else if (e instanceof Error) {
56
+ message = e.message;
57
+ }
58
+ else {
59
+ message = String(e);
60
+ }
61
+ console.error("[getFloridayOrders]", message);
62
+ return { orders: [], error: message };
63
+ }
64
+ },
65
+ retry: false,
46
66
  });
47
67
  const orders = data?.orders ?? [];
68
+ const error = data?.error ? new Error(data.error) : null;
48
69
  const [customer, setCustomer] = useState(ALL);
49
70
  const [deliveryType, setDeliveryType] = useState(ALL);
50
71
  const [dateFrom, setDateFrom] = useState("");
@@ -0,0 +1,2 @@
1
+ export declare function NieuweLeveringPage(): import("react").JSX.Element;
2
+ //# sourceMappingURL=NieuweLeveringPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NieuweLeveringPage.d.ts","sourceRoot":"","sources":["../../../src/components/afhandeling/NieuweLeveringPage.tsx"],"names":[],"mappings":"AAIA,wBAAgB,kBAAkB,gCAmBjC"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Link } from "@tanstack/react-router";
3
+ import { Button, Card, CardContent, CardHeader, CardTitle } from "@flowselections/core";
4
+ import { ArrowLeft } from "lucide-react";
5
+ export function NieuweLeveringPage() {
6
+ return (_jsxs("main", { className: "p-6 space-y-6", children: [_jsx(Button, { asChild: true, variant: "ghost", size: "sm", children: _jsxs(Link, { to: "/afhandeling/leveringen", children: [_jsx(ArrowLeft, { className: "mr-2 h-4 w-4" }), "Terug naar leveringen"] }) }), _jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: "Nieuwe levering" }) }), _jsx(CardContent, { className: "text-sm text-muted-foreground", children: "Deze pagina wordt in een volgende stap ingericht." })] })] }));
7
+ }
@@ -0,0 +1,6 @@
1
+ interface Props {
2
+ carrierId: string | null;
3
+ }
4
+ export declare function VervoerderForm({ carrierId }: Props): import("react").JSX.Element;
5
+ export {};
6
+ //# sourceMappingURL=VervoerderForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VervoerderForm.d.ts","sourceRoot":"","sources":["../../../src/components/afhandeling/VervoerderForm.tsx"],"names":[],"mappings":"AA4CA,UAAU,KAAK;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAmHD,wBAAgB,cAAc,CAAC,EAAE,SAAS,EAAE,EAAE,KAAK,+BA+TlD"}
@@ -0,0 +1,136 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useMemo, useState } from "react";
3
+ import { Button, Label, Textarea, Popover, PopoverContent, PopoverTrigger, Card, CardContent, CardHeader, CardTitle, toast, cn, } from "@flowselections/core";
4
+ import { Truck, User, Mail, Phone, MapPin, Calendar, Clock, FileText, Globe, Plus, Trash2, ChevronDown, Search, X, ArrowLeft, } from "lucide-react";
5
+ import { Link, useNavigate } from "@tanstack/react-router";
6
+ import { useServerFn } from "@tanstack/react-start";
7
+ import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
8
+ import { getCarrier, upsertCarrier, } from "../../lib/carriers.functions";
9
+ import { COUNTRIES, countryName } from "../../lib/countries";
10
+ const EMPTY = {
11
+ name: "",
12
+ contact_person: "",
13
+ email: "",
14
+ phone: "",
15
+ address: "",
16
+ delivery_days: null,
17
+ signup_time_1: "",
18
+ signup_time_2: "",
19
+ notes: "",
20
+ };
21
+ function FieldIcon({ icon: Icon }) {
22
+ return (_jsx("div", { className: "flex items-center justify-center w-10 h-10 rounded-md bg-primary/10 text-primary shrink-0", children: _jsx(Icon, { className: "w-4 h-4" }) }));
23
+ }
24
+ function IconInput({ icon, ...props }) {
25
+ return (_jsxs("div", { className: "flex items-stretch gap-2 rounded-md border bg-background focus-within:ring-2 focus-within:ring-ring/40", children: [_jsx("div", { className: "flex items-center justify-center w-10 rounded-l-md bg-primary/10 text-primary shrink-0", children: (() => { const Icon = icon; return _jsx(Icon, { className: "w-4 h-4" }); })() }), _jsx("input", { ...props, className: cn("flex-1 bg-transparent py-2 pr-3 text-sm outline-none placeholder:text-muted-foreground", props.className) })] }));
26
+ }
27
+ function CountryPicker({ value, onChange, excluded, }) {
28
+ const [open, setOpen] = useState(false);
29
+ const [query, setQuery] = useState("");
30
+ const filtered = useMemo(() => {
31
+ const q = query.trim().toLowerCase();
32
+ return COUNTRIES.filter((c) => !excluded.includes(c.code) &&
33
+ (!q || c.name.toLowerCase().includes(q) || c.code.toLowerCase().includes(q))).slice(0, 200);
34
+ }, [query, excluded]);
35
+ return (_jsxs(Popover, { open: open, onOpenChange: setOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs("button", { type: "button", className: "flex items-center justify-between w-full h-10 px-3 rounded-md border bg-background text-sm", children: [_jsx("span", { className: value ? "" : "text-muted-foreground", children: value ? countryName(value) : "Selecteer land" }), _jsx(ChevronDown, { className: "w-4 h-4 text-muted-foreground" })] }) }), _jsxs(PopoverContent, { className: "p-0 w-[280px]", align: "start", children: [_jsxs("div", { className: "flex items-center gap-2 px-3 py-2 border-b", children: [_jsx(Search, { className: "w-4 h-4 text-muted-foreground" }), _jsx("input", { autoFocus: true, value: query, onChange: (e) => setQuery(e.target.value), placeholder: "Zoek land...", className: "flex-1 bg-transparent text-sm outline-none" })] }), _jsx("div", { className: "max-h-[260px] overflow-y-auto py-1", children: filtered.length === 0 ? (_jsx("div", { className: "px-3 py-6 text-center text-sm text-muted-foreground", children: "Geen landen gevonden" })) : (filtered.map((c) => (_jsxs("button", { type: "button", onClick: () => {
36
+ onChange(c.code);
37
+ setOpen(false);
38
+ setQuery("");
39
+ }, className: "flex items-center justify-between w-full px-3 py-2 text-sm text-left hover:bg-muted", children: [_jsx("span", { children: c.name }), _jsx("span", { className: "text-xs text-muted-foreground", children: c.code })] }, c.code)))) })] })] }));
40
+ }
41
+ export function VervoerderForm({ carrierId }) {
42
+ const isEdit = !!carrierId;
43
+ const navigate = useNavigate();
44
+ const queryClient = useQueryClient();
45
+ const fetchCarrier = useServerFn(getCarrier);
46
+ const saveCarrier = useServerFn(upsertCarrier);
47
+ const [form, setForm] = useState(EMPTY);
48
+ const [rates, setRates] = useState([]);
49
+ const [pendingCountry, setPendingCountry] = useState("");
50
+ const [pendingPrice, setPendingPrice] = useState("");
51
+ const { data, isLoading } = useQuery({
52
+ queryKey: ["carrier", carrierId],
53
+ queryFn: () => fetchCarrier({ data: { id: carrierId } }),
54
+ enabled: !!carrierId,
55
+ });
56
+ useEffect(() => {
57
+ if (carrierId && data?.carrier) {
58
+ const c = data.carrier;
59
+ setForm({
60
+ id: c.id,
61
+ name: c.name,
62
+ contact_person: c.contact_person ?? "",
63
+ email: c.email ?? "",
64
+ phone: c.phone ?? "",
65
+ address: c.address ?? "",
66
+ delivery_days: c.delivery_days,
67
+ signup_time_1: c.signup_time_1 ?? "",
68
+ signup_time_2: c.signup_time_2 ?? "",
69
+ notes: c.notes ?? "",
70
+ });
71
+ setRates(c.rates);
72
+ }
73
+ }, [carrierId, data]);
74
+ const goBack = () => navigate({ to: "/afhandeling/vervoerders" });
75
+ const mutation = useMutation({
76
+ mutationFn: async () => {
77
+ try {
78
+ return await saveCarrier({ data: { carrier: form, rates } });
79
+ }
80
+ catch (e) {
81
+ if (e instanceof Response) {
82
+ const text = await e.text().catch(() => e.statusText);
83
+ throw new Error(`${e.status}: ${text}`);
84
+ }
85
+ throw e;
86
+ }
87
+ },
88
+ onSuccess: () => {
89
+ toast.success(isEdit ? "Vervoerder bijgewerkt" : "Vervoerder aangemaakt");
90
+ queryClient.invalidateQueries({ queryKey: ["carriers"] });
91
+ if (carrierId)
92
+ queryClient.invalidateQueries({ queryKey: ["carrier", carrierId] });
93
+ goBack();
94
+ },
95
+ onError: (err) => toast.error(err.message || "Opslaan mislukt"),
96
+ });
97
+ const addRate = () => {
98
+ if (!pendingCountry) {
99
+ toast.error("Selecteer een land");
100
+ return;
101
+ }
102
+ const price = Number(pendingPrice.replace(",", "."));
103
+ if (!Number.isFinite(price) || price < 0) {
104
+ toast.error("Voer een geldige prijs in");
105
+ return;
106
+ }
107
+ if (rates.some((r) => r.country_code === pendingCountry)) {
108
+ toast.error("Dit land is al toegevoegd");
109
+ return;
110
+ }
111
+ setRates([...rates, { country_code: pendingCountry, price_per_trolley: price }]);
112
+ setPendingCountry("");
113
+ setPendingPrice("");
114
+ };
115
+ const removeRate = (code) => setRates(rates.filter((r) => r.country_code !== code));
116
+ const handleSubmit = (e) => {
117
+ e.preventDefault();
118
+ if (!form.name?.trim()) {
119
+ toast.error("Bedrijfsnaam is verplicht");
120
+ return;
121
+ }
122
+ mutation.mutate();
123
+ };
124
+ if (isEdit && isLoading) {
125
+ return (_jsx("main", { className: "p-6", children: _jsx("div", { className: "py-12 text-center text-muted-foreground", children: "Laden..." }) }));
126
+ }
127
+ return (_jsxs("main", { className: "p-6 space-y-6 max-w-4xl", children: [_jsx(Button, { asChild: true, variant: "ghost", size: "sm", children: _jsxs(Link, { to: "/afhandeling/vervoerders", children: [_jsx(ArrowLeft, { className: "mr-2 h-4 w-4" }), "Terug naar vervoerders"] }) }), _jsxs("div", { className: "flex items-start gap-3", children: [_jsx(FieldIcon, { icon: Truck }), _jsxs("div", { children: [_jsx("h1", { className: "text-2xl font-semibold", children: isEdit ? "Vervoerder bewerken" : "Vervoerder aanmaken" }), _jsx("p", { className: "text-sm text-muted-foreground", children: isEdit
128
+ ? "Wijzig de gegevens van de vervoerder."
129
+ : "Voeg een nieuwe vervoerder toe en stel verzendtarieven in." })] })] }), _jsxs("form", { onSubmit: handleSubmit, className: "space-y-6", children: [_jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx(CardTitle, { className: "text-base", children: "Algemene gegevens" }) }), _jsxs(CardContent, { className: "space-y-4", children: [_jsxs("div", { className: "space-y-2", children: [_jsxs(Label, { children: ["Bedrijfsnaam ", _jsx("span", { className: "text-destructive", children: "*" })] }), _jsx(IconInput, { icon: Truck, value: form.name, onChange: (e) => setForm({ ...form, name: e.target.value }), placeholder: "Bijv. DHL Freight", required: true })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Contactpersoon" }), _jsx(IconInput, { icon: User, value: form.contact_person ?? "", onChange: (e) => setForm({ ...form, contact_person: e.target.value }) })] }), _jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4", children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "E-mail" }), _jsx(IconInput, { icon: Mail, type: "email", value: form.email ?? "", onChange: (e) => setForm({ ...form, email: e.target.value }) })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Telefoonnummer" }), _jsx(IconInput, { icon: Phone, value: form.phone ?? "", onChange: (e) => setForm({ ...form, phone: e.target.value }) })] })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Adres" }), _jsx(IconInput, { icon: MapPin, value: form.address ?? "", onChange: (e) => setForm({ ...form, address: e.target.value }), placeholder: "Straat, postcode, plaats" })] }), _jsxs("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-4", children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Levertijd (dagen)" }), _jsx(IconInput, { icon: Calendar, type: "number", min: 0, value: form.delivery_days ?? "", onChange: (e) => setForm({
130
+ ...form,
131
+ delivery_days: e.target.value === "" ? null : Number(e.target.value),
132
+ }) })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Aanmeldtijd 1" }), _jsx(IconInput, { icon: Clock, type: "time", value: form.signup_time_1 ?? "", onChange: (e) => setForm({ ...form, signup_time_1: e.target.value }) })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Aanmeldtijd 2" }), _jsx(IconInput, { icon: Clock, type: "time", value: form.signup_time_2 ?? "", onChange: (e) => setForm({ ...form, signup_time_2: e.target.value }) })] })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: "Opmerkingen" }), _jsxs("div", { className: "flex gap-2", children: [_jsx(FieldIcon, { icon: FileText }), _jsx(Textarea, { value: form.notes ?? "", onChange: (e) => setForm({ ...form, notes: e.target.value }), placeholder: "Extra informatie over deze vervoerder...", rows: 3, className: "flex-1" })] })] })] })] }), _jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { className: "text-base", children: "Verzendtarieven" }), _jsxs("p", { className: "text-sm text-muted-foreground", children: ["Stel de verzendkosten ", _jsx("strong", { children: "per kwekerskar" }), " in voor elk land waar deze vervoerder naartoe verzendt."] })] }), _jsxs(CardContent, { className: "space-y-4", children: [_jsxs("div", { className: "grid grid-cols-1 md:grid-cols-[1fr,160px,auto] gap-3", children: [_jsx(CountryPicker, { value: pendingCountry, onChange: setPendingCountry, excluded: rates.map((r) => r.country_code) }), _jsxs("div", { className: "flex items-stretch gap-2 rounded-md border bg-background h-10", children: [_jsx("div", { className: "flex items-center justify-center w-10 bg-primary/10 text-primary rounded-l-md text-sm font-medium", children: "\u20AC" }), _jsx("input", { type: "number", step: "0.01", min: 0, value: pendingPrice, onChange: (e) => setPendingPrice(e.target.value), placeholder: "Prijs", className: "flex-1 bg-transparent text-sm outline-none pr-3" })] }), _jsxs(Button, { type: "button", onClick: addRate, children: [_jsx(Plus, { className: "w-4 h-4 mr-1" }), "Toevoegen"] })] }), rates.length === 0 ? (_jsxs("div", { className: "border rounded-md py-10 text-center space-y-2", children: [_jsx(Globe, { className: "w-8 h-8 mx-auto text-muted-foreground" }), _jsx("div", { className: "font-medium", children: "Nog geen landen toegevoegd" }), _jsx("div", { className: "text-sm text-muted-foreground", children: "Voeg een land toe om verzendtarieven in te stellen." })] })) : (_jsx("div", { className: "border rounded-md divide-y", children: rates
133
+ .slice()
134
+ .sort((a, b) => countryName(a.country_code).localeCompare(countryName(b.country_code), "nl"))
135
+ .map((r) => (_jsxs("div", { className: "flex items-center gap-3 px-3 py-2", children: [_jsx(Globe, { className: "w-4 h-4 text-muted-foreground" }), _jsxs("div", { className: "flex-1", children: [_jsx("div", { className: "text-sm font-medium", children: countryName(r.country_code) }), _jsx("div", { className: "text-xs text-muted-foreground", children: r.country_code })] }), _jsxs("div", { className: "text-sm font-medium", children: ["\u20AC ", r.price_per_trolley.toFixed(2), " ", _jsx("span", { className: "text-muted-foreground font-normal", children: "/ kar" })] }), _jsx("button", { type: "button", onClick: () => removeRate(r.country_code), className: "text-muted-foreground hover:text-destructive", "aria-label": "Verwijderen", children: _jsx(Trash2, { className: "w-4 h-4" }) })] }, r.country_code))) })), _jsxs("p", { className: "text-sm text-muted-foreground", children: ["De prijs per kwekerskar wordt automatisch berekend", " ", _jsx("strong", { children: "bij het aanmaken van een bestelling" }), "."] })] })] }), _jsxs("div", { className: "flex justify-end gap-2", children: [_jsxs(Button, { type: "button", variant: "outline", onClick: goBack, children: [_jsx(X, { className: "w-4 h-4 mr-1" }), "Annuleren"] }), _jsx(Button, { type: "submit", disabled: mutation.isPending, children: mutation.isPending ? "Opslaan..." : "Opslaan" })] })] })] }));
136
+ }
@@ -0,0 +1,2 @@
1
+ export declare function VervoerdersPage(): import("react").JSX.Element;
2
+ //# sourceMappingURL=VervoerdersPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VervoerdersPage.d.ts","sourceRoot":"","sources":["../../../src/components/afhandeling/VervoerdersPage.tsx"],"names":[],"mappings":"AAyBA,wBAAgB,eAAe,gCAgJ9B"}
@@ -0,0 +1,41 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { Button, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, toast, } from "@flowselections/core";
4
+ import { Plus, Pencil, Trash2, Truck } from "lucide-react";
5
+ import { Link } from "@tanstack/react-router";
6
+ import { useServerFn } from "@tanstack/react-start";
7
+ import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
8
+ import { listCarriers, deleteCarrier } from "../../lib/carriers.functions";
9
+ export function VervoerdersPage() {
10
+ const queryClient = useQueryClient();
11
+ const fetchList = useServerFn(listCarriers);
12
+ const removeCarrier = useServerFn(deleteCarrier);
13
+ const [deletingId, setDeletingId] = useState(null);
14
+ const { data, isLoading, error, refetch } = useQuery({
15
+ queryKey: ["carriers"],
16
+ queryFn: async () => {
17
+ try {
18
+ return await fetchList();
19
+ }
20
+ catch (e) {
21
+ if (e instanceof Response) {
22
+ const text = await e.text().catch(() => e.statusText);
23
+ throw new Error(`${e.status}: ${text}`);
24
+ }
25
+ throw e;
26
+ }
27
+ },
28
+ retry: false,
29
+ });
30
+ const deleteMutation = useMutation({
31
+ mutationFn: (id) => removeCarrier({ data: { id } }),
32
+ onSuccess: () => {
33
+ toast.success("Vervoerder verwijderd");
34
+ queryClient.invalidateQueries({ queryKey: ["carriers"] });
35
+ setDeletingId(null);
36
+ },
37
+ onError: (err) => toast.error(err.message),
38
+ });
39
+ const carriers = data?.carriers ?? [];
40
+ return (_jsxs("div", { className: "p-6 space-y-6", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-2xl font-semibold", children: "Vervoerders" }), _jsx("p", { className: "text-sm text-muted-foreground", children: "Beheer vervoerders en hun verzendtarieven per land." })] }), _jsx(Button, { asChild: true, children: _jsxs(Link, { to: "/afhandeling/vervoerders/nieuw", children: [_jsx(Plus, { className: "w-4 h-4 mr-1" }), "Vervoerder toevoegen"] }) })] }), _jsx("div", { className: "border rounded-md bg-card", children: isLoading ? (_jsx("div", { className: "p-12 text-center text-muted-foreground", children: "Laden..." })) : error ? (_jsxs("div", { className: "p-12 text-center space-y-3", children: [_jsxs("div", { className: "text-destructive", children: ["Fout bij laden: ", error.message] }), _jsx(Button, { variant: "outline", onClick: () => refetch(), children: "Opnieuw proberen" })] })) : carriers.length === 0 ? (_jsxs("div", { className: "p-12 text-center space-y-3", children: [_jsx(Truck, { className: "w-10 h-10 mx-auto text-muted-foreground" }), _jsx("div", { className: "font-medium", children: "Nog geen vervoerders" }), _jsx("div", { className: "text-sm text-muted-foreground", children: "Voeg een vervoerder toe om verzendtarieven in te stellen." }), _jsx(Button, { asChild: true, children: _jsxs(Link, { to: "/afhandeling/vervoerders/nieuw", children: [_jsx(Plus, { className: "w-4 h-4 mr-1" }), "Vervoerder toevoegen"] }) })] })) : (_jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: "Bedrijfsnaam" }), _jsx(TableHead, { children: "Contactpersoon" }), _jsx(TableHead, { children: "E-mail" }), _jsx(TableHead, { children: "Telefoon" }), _jsx(TableHead, { children: "Levertijd" }), _jsx(TableHead, { children: "Landen" }), _jsx(TableHead, { className: "text-right", children: "Acties" })] }) }), _jsx(TableBody, { children: carriers.map((c) => (_jsxs(TableRow, { children: [_jsx(TableCell, { className: "font-medium", children: c.name }), _jsx(TableCell, { children: c.contact_person ?? "—" }), _jsx(TableCell, { children: c.email ?? "—" }), _jsx(TableCell, { children: c.phone ?? "—" }), _jsx(TableCell, { children: c.delivery_days != null ? `${c.delivery_days} dagen` : "—" }), _jsx(TableCell, { children: c.rate_count }), _jsx(TableCell, { className: "text-right", children: _jsxs("div", { className: "flex justify-end gap-1", children: [_jsx(Button, { asChild: true, variant: "ghost", size: "sm", children: _jsx(Link, { to: "/afhandeling/vervoerders/$id/bewerken", params: { id: c.id }, children: _jsx(Pencil, { className: "w-4 h-4" }) }) }), _jsx(Button, { variant: "ghost", size: "sm", onClick: () => setDeletingId(c.id), className: "text-destructive hover:text-destructive", children: _jsx(Trash2, { className: "w-4 h-4" }) })] }) })] }, c.id))) })] })) }), _jsx(AlertDialog, { open: !!deletingId, onOpenChange: (o) => !o && setDeletingId(null), children: _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: "Vervoerder verwijderen?" }), _jsx(AlertDialogDescription, { children: "Deze actie kan niet ongedaan gemaakt worden. Alle verzendtarieven worden ook verwijderd." })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { children: "Annuleren" }), _jsx(AlertDialogAction, { onClick: () => deletingId && deleteMutation.mutate(deletingId), className: "bg-destructive text-destructive-foreground hover:bg-destructive/90", children: "Verwijderen" })] })] }) })] }));
41
+ }
@@ -1,5 +1,7 @@
1
1
  import type { FlowModule } from "@flowselections/core";
2
2
  export * from "./_core-safelist";
3
3
  export { LeveringenPage } from "./components/afhandeling/LeveringenPage";
4
+ export { VervoerdersPage } from "./components/afhandeling/VervoerdersPage";
5
+ export { NieuweLeveringPage } from "./components/afhandeling/NieuweLeveringPage";
4
6
  export declare const floridayAfhandelingModule: FlowModule;
5
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAEzE,eAAO,MAAM,yBAAyB,EAAE,UAavC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AAEjF,eAAO,MAAM,yBAAyB,EAAE,UAcvC,CAAC"}
package/dist-lib/index.js CHANGED
@@ -1,16 +1,19 @@
1
- import { PackageCheck, Truck } from "lucide-react";
1
+ import { PackageCheck, Truck, Building2 } from "lucide-react";
2
2
  export * from "./_core-safelist";
3
3
  export { LeveringenPage } from "./components/afhandeling/LeveringenPage";
4
+ export { VervoerdersPage } from "./components/afhandeling/VervoerdersPage";
5
+ export { NieuweLeveringPage } from "./components/afhandeling/NieuweLeveringPage";
4
6
  export const floridayAfhandelingModule = {
5
7
  id: "afhandeling",
6
8
  name: "Afhandeling",
7
9
  version: "1.0.0",
8
10
  nav: {
9
11
  label: "Afhandeling",
10
- href: "/floriday-afhandeling",
12
+ href: "/afhandeling/leveringen",
11
13
  icon: PackageCheck,
12
14
  children: [
13
- { label: "Leveringen", href: "/floriday-afhandeling/leveringen", icon: Truck },
15
+ { label: "Leveringen", href: "/afhandeling/leveringen", icon: Truck },
16
+ { label: "Vervoerders", href: "/afhandeling/vervoerders", icon: Building2 },
14
17
  ],
15
18
  },
16
19
  settingsCards: [],