diff --git a/frontend/src/components/delivery/DeliveryForm.tsx b/frontend/src/components/delivery/DeliveryForm.tsx index 32c6b07..50db571 100644 --- a/frontend/src/components/delivery/DeliveryForm.tsx +++ b/frontend/src/components/delivery/DeliveryForm.tsx @@ -2,7 +2,6 @@ import { useState, useEffect, useCallback } from 'react'; import { Button, Input, Select, Modal } from '../ui'; import { pickupOptions } from '../../constants/pickup'; import { formatDateForInput, parseDateFromInput, getTodayFrontend } from '../../utils/date'; -import { parseAddress } from '../../utils/addressParser'; import type { Delivery, PickupLocation, DeliveryStatus } from '../../types'; interface DeliveryFormProps { @@ -17,6 +16,23 @@ interface DeliveryFormProps { // Phone validation regex for Kazakhstan numbers const PHONE_REGEX = /^\+7\s?\(?\d{3}\)?\s?\d{3}[\s-]?\d{2}[\s-]?\d{2}$/; +// City is not shown in UI but is included in the saved address (used for 2GIS search). +const CITY_LABEL = 'Кокшетау'; + +const buildAddressString = ( + street: string, + house: string, + apartment: string, + entrance: string, +): string => { + const parts: string[] = [CITY_LABEL]; + if (street) parts.push(`ул. ${street}`); + if (house) parts.push(`д. ${house}`); + if (apartment) parts.push(`кв. ${apartment}`); + if (entrance) parts.push(`подъезд ${entrance}`); + return parts.join(', '); +}; + export const DeliveryForm = ({ isOpen, onClose, onSubmit, initialData, defaultDate, isSubmitting }: DeliveryFormProps) => { const [formData, setFormData] = useState({ date: defaultDate || getTodayFrontend(), @@ -39,7 +55,6 @@ export const DeliveryForm = ({ isOpen, onClose, onSubmit, initialData, defaultDa status: 'new' as DeliveryStatus, }); const [showSecondPickup, setShowSecondPickup] = useState(false); - const [showAddressDetails, setShowAddressDetails] = useState(false); useEffect(() => { if (initialData) { @@ -76,13 +91,17 @@ export const DeliveryForm = ({ isOpen, onClose, onSubmit, initialData, defaultDa const isPhoneValid = !formData.phone || validatePhone(formData.phone); const isAdditionalPhoneValid = !formData.additionalPhone || validatePhone(formData.additionalPhone); - const isFormValid = formData.productName && formData.address && formData.phone && isPhoneValid && formData.customerName && formData.street && formData.house; + const isFormValid = formData.productName && formData.phone && isPhoneValid && formData.customerName && formData.street && formData.house; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!isFormValid) return; try { - await onSubmit(formData); + const payload = { + ...formData, + address: buildAddressString(formData.street, formData.house, formData.apartment, formData.entrance), + }; + await onSubmit(payload); if (!initialData) { setFormData({ date: defaultDate || getTodayFrontend(), @@ -105,7 +124,6 @@ export const DeliveryForm = ({ isOpen, onClose, onSubmit, initialData, defaultDa status: 'new', }); setShowSecondPickup(false); - setShowAddressDetails(false); } onClose(); } catch { @@ -159,44 +177,9 @@ export const DeliveryForm = ({ isOpen, onClose, onSubmit, initialData, defaultDa required /> - {/* Address with auto-parse */} -
- - { - const newAddress = e.target.value; - const parsed = parseAddress(newAddress); - setFormData({ - ...formData, - address: newAddress, - street: parsed.street || formData.street, - house: parsed.house || formData.house, - apartment: parsed.apartment || formData.apartment, - entrance: parsed.entrance || formData.entrance, - floor: parsed.floor || formData.floor, - }); - if (parsed.street || parsed.house) { - setShowAddressDetails(true); - } - }} - onBlur={() => setShowAddressDetails(true)} - placeholder="ул. Абая, д. 15, кв. 45, подъезд 3, этаж 5" - className="w-full px-3 py-2 bg-[#f5f3f5] border border-[#c5c6cd] rounded-md text-[#1b1b1d] focus:outline-none focus:ring-2 focus:ring-[#1B263B] focus:border-transparent transition-colors" - required - /> -

- Улица, дом, квартира, подъезд, этаж -

-
- - {/* Parsed address details */} - {showAddressDetails && ( -
-

Проверьте распознанные данные:

+ {/* Address fields */} +
+

Адрес доставки

@@ -246,8 +229,7 @@ export const DeliveryForm = ({ isOpen, onClose, onSubmit, initialData, defaultDa />
-
- )} +
setFormData({ ...formData, productName2: e.target.value })} placeholder="Название товара со второй точки"