import React, { useState, useEffect } from 'react'; import { useDistricts } from '@/hooks/useAddressData'; import type { Province, District } from '@/types/address.types'; interface AddressPanelProps { prefix: 'billing' | 'shipping'; label: string; provinces: Province[]; initialProvince?: string; initialDistrict?: string; onProvinceChange: (v: string) => void; onDistrictChange: (v: string) => void; } const AddressPanel: React.FC = ({ prefix, label, provinces, initialProvince = '', initialDistrict = '', onProvinceChange, onDistrictChange, }) => { const [province, setProvince] = useState(initialProvince); const [district, setDistrict] = useState(initialDistrict); const { data: districts = [], isLoading } = useDistricts(province || null); const handleProvinceChange = (e: React.ChangeEvent) => { setProvince(e.target.value); setDistrict(''); onProvinceChange(e.target.value); onDistrictChange(''); }; const handleDistrictChange = (e: React.ChangeEvent) => { setDistrict(e.target.value); onDistrictChange(e.target.value); }; // Reset district when province changes and districts reload useEffect(() => { if (!districts.find((d: District) => d.maqh === district)) { setDistrict(''); } }, [districts]); // eslint-disable-line react-hooks/exhaustive-deps return (

{label}

); }; interface OrderAddressEditorProps { provinces: Province[]; initialBillingState?: string; initialBillingCity?: string; initialShippingState?: string; initialShippingCity?: string; } export const OrderAddressEditor: React.FC = ({ provinces, initialBillingState = '', initialBillingCity = '', initialShippingState = '', initialShippingCity = '', }) => { const [billingState, setBillingState] = useState(initialBillingState); const [billingCity, setBillingCity] = useState(initialBillingCity); const [shippingState, setShippingState] = useState(initialShippingState); const [shippingCity, setShippingCity] = useState(initialShippingCity); // Sync with hidden input fields for WordPress to save useEffect(() => { const el = document.getElementById('_billing_state') as HTMLInputElement | null; if (el) el.value = billingState; }, [billingState]); useEffect(() => { const el = document.getElementById('_billing_city') as HTMLInputElement | null; if (el) el.value = billingCity; }, [billingCity]); useEffect(() => { const el = document.getElementById('_shipping_state') as HTMLInputElement | null; if (el) el.value = shippingState; }, [shippingState]); useEffect(() => { const el = document.getElementById('_shipping_city') as HTMLInputElement | null; if (el) el.value = shippingCity; }, [shippingCity]); return (
); };