feat: phone input mask with +375 prefix and auto-formatting
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -12,7 +12,30 @@ interface BookingModalProps {
|
||||
export function BookingModal({ open, onClose }: BookingModalProps) {
|
||||
const { contact } = siteContent;
|
||||
const [name, setName] = useState("");
|
||||
const [phone, setPhone] = useState("");
|
||||
const [phone, setPhone] = useState("+375 ");
|
||||
|
||||
// Format phone: +375 (XX) XXX-XX-XX
|
||||
function handlePhoneChange(raw: string) {
|
||||
// Strip everything except digits
|
||||
let digits = raw.replace(/\D/g, "");
|
||||
// Ensure starts with 375
|
||||
if (!digits.startsWith("375")) {
|
||||
digits = "375" + digits.replace(/^375?/, "");
|
||||
}
|
||||
// Limit to 12 digits (375 + 9 digits)
|
||||
digits = digits.slice(0, 12);
|
||||
|
||||
// Format
|
||||
let formatted = "+375";
|
||||
const rest = digits.slice(3);
|
||||
if (rest.length > 0) formatted += " (" + rest.slice(0, 2);
|
||||
if (rest.length >= 2) formatted += ") ";
|
||||
if (rest.length > 2) formatted += rest.slice(2, 5);
|
||||
if (rest.length > 5) formatted += "-" + rest.slice(5, 7);
|
||||
if (rest.length > 7) formatted += "-" + rest.slice(7, 9);
|
||||
|
||||
setPhone(formatted);
|
||||
}
|
||||
const [submitted, setSubmitted] = useState(false);
|
||||
|
||||
// Close on Escape
|
||||
@@ -54,7 +77,7 @@ export function BookingModal({ open, onClose }: BookingModalProps) {
|
||||
// Reset after animation
|
||||
setTimeout(() => {
|
||||
setName("");
|
||||
setPhone("");
|
||||
setPhone("+375 ");
|
||||
setSubmitted(false);
|
||||
}, 300);
|
||||
}, [onClose]);
|
||||
@@ -125,7 +148,7 @@ export function BookingModal({ open, onClose }: BookingModalProps) {
|
||||
<input
|
||||
type="tel"
|
||||
value={phone}
|
||||
onChange={(e) => setPhone(e.target.value)}
|
||||
onChange={(e) => handlePhoneChange(e.target.value)}
|
||||
placeholder="+375 (__) ___-__-__"
|
||||
required
|
||||
className="w-full rounded-xl border border-white/[0.08] bg-white/[0.04] px-4 py-3 text-sm text-white placeholder-neutral-500 outline-none transition-colors focus:border-[#c9a96e]/40 focus:bg-white/[0.06]"
|
||||
|
||||
Reference in New Issue
Block a user