fixed: image url, and updated form phone input validation
This commit is contained in:
@@ -12,6 +12,7 @@ export function ContactForm() {
|
||||
const { t } = useLanguage();
|
||||
|
||||
const productName = useProductStore((state) => state.productName);
|
||||
const reset = useProductStore((state) => state.resetProductName);
|
||||
|
||||
const [formData, setFormData] = useState({
|
||||
name: "",
|
||||
@@ -26,15 +27,29 @@ export function ContactForm() {
|
||||
text: string;
|
||||
} | null>(null);
|
||||
|
||||
const phoneRegex = /^\+?\d*$/; // + majburiy
|
||||
|
||||
const handleChange = (
|
||||
e: React.ChangeEvent<
|
||||
HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement
|
||||
>
|
||||
) => {
|
||||
setFormData((prev) => ({
|
||||
...prev,
|
||||
[e.target.name]: e.target.value,
|
||||
}));
|
||||
const { name, value } = e.target;
|
||||
|
||||
if (name === "phone") {
|
||||
// regexga mos kelmasa — state o‘zgarmaydi
|
||||
if (!phoneRegex.test(value)) return;
|
||||
|
||||
setFormData((prev) => ({
|
||||
...prev,
|
||||
phone: value,
|
||||
}));
|
||||
} else {
|
||||
setFormData((prev) => ({
|
||||
...prev,
|
||||
[name]: value,
|
||||
}));
|
||||
}
|
||||
};
|
||||
|
||||
const handleSubmit = async (e: React.FormEvent) => {
|
||||
@@ -62,6 +77,8 @@ ${formData.message || "—"}
|
||||
text: text,
|
||||
});
|
||||
setMessage({ type: "success", text: t.contact.success });
|
||||
reset();
|
||||
setFormData({ name: "", phone: "", message: "", productName: "" });
|
||||
} catch {
|
||||
setMessage({ type: "error", text: t.contact.error });
|
||||
} finally {
|
||||
@@ -168,7 +185,7 @@ ${formData.message || "—"}
|
||||
value={formData.name}
|
||||
onChange={handleChange}
|
||||
placeholder={t.contact.namePlaceholder}
|
||||
className="w-full px-4 py-2 border border-gray-600 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
|
||||
className="w-full text-black px-4 py-2 border border-gray-600 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -184,7 +201,7 @@ ${formData.message || "—"}
|
||||
onChange={handleChange}
|
||||
placeholder={t.contact.phonePlaceholder}
|
||||
required
|
||||
className="w-full px-4 py-2 border border-gray-600 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
|
||||
className="w-full text-black px-4 py-2 border border-gray-600 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -199,7 +216,7 @@ ${formData.message || "—"}
|
||||
onChange={handleChange}
|
||||
placeholder={t.contact.messagePlaceholder}
|
||||
rows={4}
|
||||
className="w-full px-4 py-2 border border-gray-600 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 resize-none"
|
||||
className="w-full text-black px-4 py-2 border border-gray-600 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 resize-none"
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -214,7 +231,7 @@ ${formData.message || "—"}
|
||||
value={productName ? productName : formData.productName}
|
||||
onChange={handleChange}
|
||||
placeholder={t.contact.product}
|
||||
className="w-full px-4 py-2 border border-gray-600 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
|
||||
className="w-full text-black px-4 py-2 border border-gray-600 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
|
||||
/>
|
||||
</div>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user