This commit is contained in:
gpt-engineer-app[bot]
2026-01-28 13:50:47 +00:00
parent 3a1abf803b
commit 2488cddb63
+22 -2
View File
@@ -3,12 +3,28 @@ import { z } from "zod";
import { useAuth } from "@/hooks/useAuth"; import { useAuth } from "@/hooks/useAuth";
import { supabase } from "@/integrations/supabase/client"; import { supabase } from "@/integrations/supabase/client";
// Validate Stockholm postal codes (100 00 - 199 99)
const isStockholmPostalCode = (postalCode: string) => {
const cleaned = postalCode.replace(/\s/g, "");
if (!/^\d{5}$/.test(cleaned)) return false;
const num = parseInt(cleaned, 10);
return num >= 10000 && num <= 19999;
};
const formSchema = z.object({ const formSchema = z.object({
företag: z.string().trim().min(1, "Fyll i företagsnamn").max(100), företag: z.string().trim().min(1, "Fyll i företagsnamn").max(100),
epost: z.string().trim().email("Ange en giltig e-postadress").max(255), epost: z.string().trim().email("Ange en giltig e-postadress").max(255),
telefon: z.string().trim().max(20).optional(), telefon: z.string().trim().max(20).optional(),
adress: z.string().trim().max(200).optional(), adress: z.string().trim().max(200).optional(),
postnummer: z.string().trim().max(10).optional(), postnummer: z
.string()
.trim()
.min(1, "Fyll i postnummer för leverans")
.max(10)
.refine(
(val) => isStockholmPostalCode(val),
{ message: "Vi levererar endast inom Storstockholm (100 00 199 99)" }
),
stad: z.string().trim().max(100).optional(), stad: z.string().trim().max(100).optional(),
abonnemang: z.string().min(1, "Välj ett abonnemang"), abonnemang: z.string().min(1, "Välj ett abonnemang"),
kommentarer: z.string().trim().max(1000).optional(), kommentarer: z.string().trim().max(1000).optional(),
@@ -219,15 +235,19 @@ const AbonnemangForm = ({ selectedPlan, onClose }: AbonnemangFormProps) => {
<div className="grid grid-cols-1 md:grid-cols-2 gap-4"> <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<div> <div>
<label className="block mb-2 font-semibold text-foreground"> <label className="block mb-2 font-semibold text-foreground">
Postnummer Postnummer <span className="text-primary">*</span>
</label> </label>
<input <input
type="text" type="text"
name="postnummer" name="postnummer"
placeholder="t.ex. 114 32"
value={formData.postnummer} value={formData.postnummer}
onChange={handleChange} onChange={handleChange}
className="w-full px-4 py-3 rounded-sm bg-background border border-border text-foreground focus:outline-none focus:ring-2 focus:ring-primary/30" className="w-full px-4 py-3 rounded-sm bg-background border border-border text-foreground focus:outline-none focus:ring-2 focus:ring-primary/30"
/> />
{errors.postnummer && (
<p className="text-destructive text-sm mt-1">{errors.postnummer}</p>
)}
</div> </div>
<div> <div>
<label className="block mb-2 font-semibold text-foreground"> <label className="block mb-2 font-semibold text-foreground">