From dbc03e233b9a6bc458a3b8c858c911a361882715 Mon Sep 17 00:00:00 2001 From: dharaneesh-r Date: Mon, 21 Sep 2026 12:36:22 +0530 Subject: [PATCH] updates on the address autocomplete --- .../nearle_components/AddressAutocomplete.js | 537 ++++++++++++++++-- src/pages/nearle/orders/createorder1.js | 100 ++-- 2 files changed, 551 insertions(+), 86 deletions(-) diff --git a/src/components/nearle_components/AddressAutocomplete.js b/src/components/nearle_components/AddressAutocomplete.js index f27b8b6..d9bbedb 100644 --- a/src/components/nearle_components/AddressAutocomplete.js +++ b/src/components/nearle_components/AddressAutocomplete.js @@ -34,6 +34,171 @@ export const isWithinKanyakumariDistrict = (lat, lon) => { // Curated Nagercoil & Kanyakumari local areas dictionary for instant 0ms sublocality match const NAGERCOIL_LOCALITIES = [ + { + name: 'Joshua Street', + aliases: ['Joshua St', 'Joshua Street Nagercoil', 'Joshua St Nagercoil', 'Puthukudierupu Joshua Street', 'Gopala Krishna Complex Joshua Street'], + display_name: 'Joshua Street, Puthukudierupu, off WCC Road, Nagercoil, Tamil Nadu 629001, India', + lat: '8.1877', + lon: '77.4242', + suburb: 'Puthukudierupu', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629001' + }, + { + name: 'Mount View', + aliases: ['Mount View Nagercoil', 'Mount View Street', 'Mount View Street Nagercoil', 'Mount View Putheri', 'Mountview', 'Mount View Colony'], + display_name: 'Mount View, near CBH Road, Putheri, Nagercoil, Tamil Nadu 629001, India', + lat: '8.2040', + lon: '77.4300', + suburb: 'Putheri', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629001' + }, + { + name: 'Mela Theru Karai', + aliases: ['Melatherukarai', 'Mela Therukarai', 'Mela Theru Karai Nagercoil', 'Melatherukarai Nagercoil', 'Krishnankovil Mela Theru Karai', 'Mela Theru'], + display_name: 'Mela Theru Karai, Krishnankovil, Nagercoil, Tamil Nadu 629001, India', + lat: '8.1955', + lon: '77.4254', + suburb: 'Krishnankovil', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629001' + }, + { + name: 'Rahmanth Garden', + aliases: ['Rahmath Garden', 'Rahmanth Garden Nagercoil', 'Rahmath Garden Nagercoil', 'Sarakkalvilai Rahmath Garden', 'Rahmath Garden Jumaa Masjid', 'Rahmanth Garden Sarakkalvilai'], + display_name: 'Rahmanth Garden (Rahmath Garden), Sarakkalvilai, Nagercoil, Tamil Nadu 629002, India', + lat: '8.1750', + lon: '77.4380', + suburb: 'Sarakkalvilai', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629002' + }, + { + name: 'CBH Road', + aliases: ['CBH Hospital Area', 'CBH Hospital', 'CBH Road Nagercoil'], + display_name: 'CBH Road, near CBH Hospital, Putheri, Nagercoil, Tamil Nadu 629001, India', + lat: '8.1994', + lon: '77.4315', + suburb: 'Putheri', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629001' + }, + { + name: 'Arunachalam Colony', + aliases: ['Arunachalam Colony Nagercoil'], + display_name: 'Arunachalam Colony, near CBH Road, Nagercoil, Tamil Nadu 629001, India', + lat: '8.1994', + lon: '77.4315', + suburb: 'King Nagar', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629001' + }, + { + name: 'Simon Nagar', + aliases: ['Simon Nagar Nagercoil'], + display_name: 'Simon Nagar, Weavers Colony Area, Nagercoil, Tamil Nadu 629004, India', + lat: '8.1630', + lon: '77.4190', + suburb: 'Weavers Colony', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629004' + }, + { + name: 'Water Tank Road', + aliases: ['Water Tank Road Nagercoil', 'Prayera Colony'], + display_name: 'Water Tank Road, Prayera Colony, Ramavarmapuram, Nagercoil, Tamil Nadu 629001, India', + lat: '8.1845', + lon: '77.4275', + suburb: 'Ramavarmapuram', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629001' + }, + { + name: 'Ramavarmapuram', + aliases: ['ராமவர்மபுரம்', 'Ramavarmapuram Nagercoil'], + display_name: 'Ramavarmapuram, Nagercoil, Kanyakumari District, Tamil Nadu 629001, India', + lat: '8.1840', + lon: '77.4280', + suburb: 'Ramavarmapuram', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629001' + }, + { + name: 'Puthukudierupu', + aliases: ['Puthukudierupu Nagercoil', 'Puthukudiyiruppu'], + display_name: 'Puthukudierupu, off WCC Road, Nagercoil, Tamil Nadu 629001, India', + lat: '8.1877', + lon: '77.4242', + suburb: 'Puthukudierupu', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629001' + }, + { + name: 'Krishnankovil', + aliases: ['Krishnancoil', 'Krishnankoil', 'Krishnankovil Nagercoil'], + display_name: 'Krishnankovil, Vadasery Area, Nagercoil, Tamil Nadu 629001, India', + lat: '8.1955', + lon: '77.4254', + suburb: 'Krishnankovil', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629001' + }, + { + name: 'Sarakkalvilai', + aliases: ['Sarakkalvilai Nagercoil'], + display_name: 'Sarakkalvilai, Nagercoil, Kanyakumari District, Tamil Nadu 629002, India', + lat: '8.1750', + lon: '77.4380', + suburb: 'Sarakkalvilai', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629002' + }, + { + name: 'WCC Road', + aliases: ['WCC Road Nagercoil', 'Womens Christian College Road'], + display_name: 'WCC Road, Meenakshipuram / Vetturnimadam, Nagercoil, Tamil Nadu 629001, India', + lat: '8.1874', + lon: '77.4233', + suburb: 'Vetturnimadam', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629001' + }, + { + name: 'Beach Road', + aliases: ['Beach Road Nagercoil', 'Erulapappuram Beach Road'], + display_name: 'Beach Road, Erulapappuram, Nagercoil, Tamil Nadu 629002, India', + lat: '8.1580', + lon: '77.4380', + suburb: 'Erulapappuram', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629002' + }, + { + name: 'Perumal Nagar', + aliases: ['Mela Putheri', 'Perumal Nagar Nagercoil'], + display_name: 'Perumal Nagar, Mela Putheri, Nagercoil, Tamil Nadu 629001, India', + lat: '8.2060', + lon: '77.4300', + suburb: 'Putheri', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629001' + }, { name: 'Kurusady', display_name: 'Kurusady, Ramanputhoor Road, Nagercoil, Tamil Nadu 629004, India', @@ -194,6 +359,226 @@ const NAGERCOIL_LOCALITIES = [ state: 'Tamil Nadu', postcode: '629002' }, + { + name: 'Nagercoil Town', + aliases: ['Nagercoil', 'Nagercoil City', 'Nagercoil Central', 'Nagercoil Town Area'], + display_name: 'Nagercoil, Kanyakumari District, Tamil Nadu 629001, India', + lat: '8.1833', + lon: '77.4119', + suburb: 'Nagercoil Town', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629001' + }, + { + name: 'KP Road', + aliases: ['Kottar Parvathipuram Road', 'KP Road Nagercoil'], + display_name: 'KP Road (Kottar-Parvathipuram Road), Nagercoil, Tamil Nadu 629003, India', + lat: '8.1880', + lon: '77.4150', + suburb: 'Vetturnimadam', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629003' + }, + { + name: 'South Car Street', + aliases: ['South Car St', 'South Car Street Nagercoil', 'Thekku Ratha Veethi'], + display_name: 'South Car Street, Kottar / Nagaraja Temple Area, Nagercoil, Tamil Nadu 629002, India', + lat: '8.1710', + lon: '77.4350', + suburb: 'Kottar', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629002' + }, + { + name: 'North Car Street', + aliases: ['North Car St', 'North Car Street Nagercoil', 'Vadakku Ratha Veethi'], + display_name: 'North Car Street, Nagaraja Temple Area, Nagercoil, Tamil Nadu 629001, India', + lat: '8.1750', + lon: '77.4340', + suburb: 'Nagercoil Town', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629001' + }, + { + name: 'East Car Street', + aliases: ['East Car St', 'East Car Street Nagercoil', 'Kizhakku Ratha Veethi'], + display_name: 'East Car Street, Kottar, Nagercoil, Tamil Nadu 629002, India', + lat: '8.1725', + lon: '77.4370', + suburb: 'Kottar', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629002' + }, + { + name: 'West Car Street', + aliases: ['West Car St', 'West Car Street Nagercoil', 'Merkku Ratha Veethi'], + display_name: 'West Car Street, Nagaraja Temple Area, Nagercoil, Tamil Nadu 629001, India', + lat: '8.1735', + lon: '77.4330', + suburb: 'Nagercoil Town', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629001' + }, + { + name: 'Cape Road', + aliases: ['Cape Road Nagercoil', 'Kanyakumari Cape Road'], + display_name: 'Cape Road, Kottar, Nagercoil, Tamil Nadu 629002, India', + lat: '8.1740', + lon: '77.4340', + suburb: 'Kottar', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629002' + }, + { + name: 'Court Road', + aliases: ['Court Road Nagercoil', 'District Court Area'], + display_name: 'Court Road, District Court Area, Nagercoil, Tamil Nadu 629001, India', + lat: '8.1820', + lon: '77.4280', + suburb: 'Collectorate', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629001' + }, + { + name: 'College Road', + aliases: ['College Road Nagercoil'], + display_name: 'College Road, near Scott Christian College, Nagercoil, Tamil Nadu 629001, India', + lat: '8.1860', + lon: '77.4260', + suburb: 'Meenakshipuram', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629001' + }, + { + name: 'Dasan Street', + aliases: ['Dhasan Street', 'Dasan St', 'Dasan Street Nagercoil'], + display_name: 'Dasan Street, Clock Tower Area, Nagercoil, Tamil Nadu 629001, India', + lat: '8.1830', + lon: '77.4300', + suburb: 'Nagercoil Town', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629001' + }, + { + name: 'Kattayanvilai', + aliases: ['Kattayanvilai Nagercoil'], + display_name: 'Kattayanvilai, Vadasery, Nagercoil, Tamil Nadu 629001, India', + lat: '8.1930', + lon: '77.4280', + suburb: 'Vadasery', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629001' + }, + { + name: 'Konam', + aliases: ['Konam Nagercoil', 'Polytechnic Area Konam'], + display_name: 'Konam, Government Polytechnic Area, Nagercoil, Tamil Nadu 629004, India', + lat: '8.1620', + lon: '77.4200', + suburb: 'Konam', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629004' + }, + { + name: 'NGO Colony', + aliases: ['NGO Colony Nagercoil'], + display_name: 'NGO Colony, Kottar Area, Nagercoil, Tamil Nadu 629002, India', + lat: '8.1700', + lon: '77.4400', + suburb: 'Kottar', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629002' + }, + { + name: 'Anna Nagar', + aliases: ['Anna Nagar Nagercoil'], + display_name: 'Anna Nagar, Nagercoil, Tamil Nadu 629001, India', + lat: '8.1860', + lon: '77.4200', + suburb: 'Vetturnimadam', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629001' + }, + { + name: 'Gandhi Nagar', + aliases: ['Gandhi Nagar Nagercoil'], + display_name: 'Gandhi Nagar, Nagercoil, Tamil Nadu 629001, India', + lat: '8.1890', + lon: '77.4180', + suburb: 'Vetturnimadam', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629001' + }, + { + name: 'Christopher Bus Stand', + aliases: ['Vadasery Bus Stand', 'Christopher Bus Stand Nagercoil'], + display_name: 'Christopher Bus Stand (Vadasery), Nagercoil, Tamil Nadu 629001, India', + lat: '8.1910', + lon: '77.4320', + suburb: 'Vadasery', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629001' + }, + { + name: 'Anna Bus Stand', + aliases: ['Meenakshipuram Bus Stand', 'Anna Bus Stand Nagercoil'], + display_name: 'Anna Bus Stand, Meenakshipuram, Nagercoil, Tamil Nadu 629001, India', + lat: '8.1830', + lon: '77.4310', + suburb: 'Meenakshipuram', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629001' + }, + { + name: 'Nagaraja Temple', + aliases: ['Nagaraja Kovil', 'Nagaraja Temple Nagercoil'], + display_name: 'Nagaraja Temple, Temple Road, Nagercoil, Tamil Nadu 629001, India', + lat: '8.1735', + lon: '77.4345', + suburb: 'Nagercoil Town', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629001' + }, + { + name: 'Scott Christian College', + aliases: ['Scott College', 'Scott Christian College Nagercoil'], + display_name: 'Scott Christian College, WCC Road, Nagercoil, Tamil Nadu 629003, India', + lat: '8.1880', + lon: '77.4220', + suburb: 'Vetturnimadam', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629003' + }, + { + name: 'Holy Cross College', + aliases: ['Holy Cross College Nagercoil', 'Roch Nagar'], + display_name: 'Holy Cross College, Roch Nagar, Nagercoil, Tamil Nadu 629004, India', + lat: '8.1570', + lon: '77.4120', + suburb: 'Roch Nagar', + city: 'Nagercoil', + state: 'Tamil Nadu', + postcode: '629004' + }, { name: 'Tower Junction', display_name: 'Tower Junction, Clock Tower Area, Nagercoil, Tamil Nadu 629001, India', @@ -403,11 +788,13 @@ export const toPlace = (result) => { const lat = parseFloat(result.lat || result.latitude || 0); const lng = parseFloat(result.lon || result.lng || result.longitude || 0); const name = result.name || result.display_name?.split(',')[0] || ''; - const addr = result.address || { - suburb: result.suburb || '', - city: result.city || 'Nagercoil', - state: result.state || 'Tamil Nadu', - postcode: result.postcode || '' + const addr = { + house_number: result.address?.house_number || '', + road: result.address?.road || result.address?.street || name, + suburb: result.address?.suburb || result.suburb || '', + city: result.address?.city || result.city || 'Nagercoil', + state: result.address?.state || result.state || 'Tamil Nadu', + postcode: result.address?.postcode || result.postcode || '' }; let formatted = result.display_name || name; @@ -582,7 +969,24 @@ const searchNominatim = async (query, bias) => { const res = await fetchWithTimeout(`${NOMINATIM_SEARCH_URL}?${params.toString()}`, { headers: { Accept: 'application/json' } }); if (!res.ok) return []; - const results = await res.json(); + let results = await res.json(); + if (!Array.isArray(results) || results.length === 0) { + const fallbackParams = new URLSearchParams({ + q: enrichedQuery, + format: 'json', + addressdetails: '1', + limit: '8', + countrycodes: 'in', + viewbox: KANYAKUMARI_VIEWBOX_NOMINATIM + }); + const fallbackRes = await fetchWithTimeout(`${NOMINATIM_SEARCH_URL}?${fallbackParams.toString()}`, { headers: { Accept: 'application/json' } }); + if (fallbackRes.ok) { + const fallbackData = await fallbackRes.json(); + if (Array.isArray(fallbackData)) { + results = fallbackData; + } + } + } if (!Array.isArray(results)) return []; return results @@ -603,51 +1007,100 @@ const searchNominatim = async (query, bias) => { } }; +const GENERIC_TOKENS = new Set([ + 'nagercoil', 'kanyakumari', 'kanniyakumari', 'tamil', 'nadu', 'india', 'tamilnadu', + 'district', 'street', 'st', 'road', 'rd', 'lane', 'colony', 'nagar', 'garden', + 'cross', 'main', 'junction', 'junc', 'area', 'town' +]); + +const normalizeStr = (s) => (s || '').toLowerCase().replace(/[^a-z0-9\s]/g, ' ').replace(/\s+/g, ' ').trim(); +const compactStr = (s) => (s || '').toLowerCase().replace(/[^a-z0-9]/g, ''); + // Filter local Nagercoil / Kanyakumari knowledge base with door number and tokenized matching const matchLocalNagercoil = (query) => { if (!query || query.trim().length < 2) return []; const raw = query.trim(); - const rawLower = raw.toLowerCase(); const { doorNo, cleanQuery } = extractDoorPrefix(raw); - const cleanLower = cleanQuery.toLowerCase(); - const tokens = cleanLower.split(/[\s,]+/).filter((t) => t.length >= 2); + const targetQuery = cleanQuery || raw; + const clean = normalizeStr(targetQuery); + const cleanComp = compactStr(targetQuery); + const tokens = clean.split(' ').filter((t) => t.length >= 2); + const distinctiveTokens = tokens.filter((t) => !GENERIC_TOKENS.has(t)); + const tokensToCheck = distinctiveTokens.length > 0 ? distinctiveTokens : tokens; - return NAGERCOIL_LOCALITIES.filter((loc) => { - const nameLower = loc.name.toLowerCase(); - const displayLower = loc.display_name.toLowerCase(); - const suburbLower = loc.suburb.toLowerCase(); + const scored = []; - // 1. Direct query inside locality name or display name (e.g. query='kuru') - if (nameLower.includes(rawLower) || displayLower.includes(rawLower) || suburbLower.includes(rawLower)) { - return true; + for (let idx = 0; idx < NAGERCOIL_LOCALITIES.length; idx++) { + const loc = NAGERCOIL_LOCALITIES[idx]; + const nameNorm = normalizeStr(loc.name); + const nameComp = compactStr(loc.name); + const dispNorm = normalizeStr(loc.display_name); + const dispComp = compactStr(loc.display_name); + const subNorm = normalizeStr(loc.suburb); + const aliasNorms = (loc.aliases || []).map(normalizeStr); + const aliasComps = (loc.aliases || []).map(compactStr); + + let score = 0; + + // 1. Exact or phrase match on name or aliases + if (nameNorm === clean || aliasNorms.includes(clean)) { + score = 100; + } else if (nameNorm.startsWith(clean) || aliasNorms.some((a) => a.startsWith(clean))) { + score = 90; + } else if (clean.includes(nameNorm) || aliasNorms.some((a) => clean.includes(a))) { + score = 85; + } else if (nameNorm.includes(clean) || aliasNorms.some((a) => a.includes(clean))) { + score = 80; + } else if (nameComp === cleanComp || aliasComps.includes(cleanComp)) { + score = 75; + } else if ( + nameComp.includes(cleanComp) || + cleanComp.includes(nameComp) || + aliasComps.some((a) => a.includes(cleanComp) || cleanComp.includes(a)) + ) { + score = 70; + } else if (dispNorm.includes(clean)) { + score = 65; + } else if (dispComp.includes(cleanComp)) { + score = 60; + } else if ( + tokensToCheck.length > 0 && + tokensToCheck.every((t) => nameNorm.includes(t) || subNorm.includes(t) || dispNorm.includes(t) || aliasNorms.some((a) => a.includes(t))) + ) { + score = 50; + } else if ( + tokensToCheck.length > 0 && + tokensToCheck.some((t) => nameNorm.includes(t) || aliasNorms.some((a) => a.includes(t))) + ) { + score = 30; } - // 2. Query contains locality name (e.g. query='262, kurusady, nagercoil') - if (rawLower.includes(nameLower) || cleanLower.includes(nameLower)) { - return true; + + if (score > 0) { + const formatted = doorNo ? `${doorNo}, ${loc.display_name}` : loc.display_name; + scored.push({ + score, + item: { + place_id: `nagercoil-local-${idx}-${doorNo ? `${doorNo}-` : ''}${loc.name}`, + name: doorNo ? `${doorNo}, ${loc.name}` : loc.name, + display_name: formatted, + lat: loc.lat, + lon: loc.lon, + address: { + house_number: doorNo || '', + road: loc.name, + suburb: loc.suburb, + city: loc.city, + state: loc.state, + postcode: loc.postcode, + country: 'India' + } + } + }); } - // 3. Any token in query matches locality name - if (tokens.some((t) => nameLower.includes(t) || suburbLower.includes(t))) { - return true; - } - return false; - }).map((loc, idx) => { - const formatted = doorNo ? `${doorNo}, ${loc.display_name}` : loc.display_name; - return { - place_id: `nagercoil-local-${idx}-${doorNo ? `${doorNo}-` : ''}${loc.name}`, - name: doorNo ? `${doorNo}, ${loc.name}` : loc.name, - display_name: formatted, - lat: loc.lat, - lon: loc.lon, - address: { - house_number: doorNo || '', - suburb: loc.suburb, - city: loc.city, - state: loc.state, - postcode: loc.postcode, - country: 'India' - } - }; - }); + } + + scored.sort((a, b) => b.score - a.score); + return scored.map((s) => s.item); }; export async function geocodeAddress(address, { bias } = {}) { diff --git a/src/pages/nearle/orders/createorder1.js b/src/pages/nearle/orders/createorder1.js index 2ccdcc1..6e5d570 100644 --- a/src/pages/nearle/orders/createorder1.js +++ b/src/pages/nearle/orders/createorder1.js @@ -571,6 +571,11 @@ const Createorder1 = () => { // =============================================== || createsubmitobj1 (create orders) || =============================================== const createsubmitobj2 = async () => { + const pickLat = pickCust.latitude || startPoint.latitude || 0; + const pickLng = pickCust.longitude || startPoint.longitude || 0; + const dropLat = dropCust.latitude || endPoint.latitude || 0; + const dropLng = dropCust.longitude || endPoint.longitude || 0; + let arr = {}; arr = { orders: { @@ -586,11 +591,11 @@ const Createorder1 = () => { deliverycustomer: dropCust.firstname || '', deliveryid: isNumChange2 == 0 ? +dropCust.customerid || 0 : 0, deliverylandmark: dropCust.landmark || '', - deliverylat: (dropCust.latitude || 0).toString(), + deliverylat: (dropLat || 0).toString(), deliverylocation: dropCust.suburb || '', deliverylocationid: dropCust.deliverylocationid || 0, - deliverylong: (dropCust.longitude || 0).toString(), - deliverytime: `${dayjs(startdate).format('YYYY-MM-DD')} ${dayjs(selectedtime.$d).format('HH:mm:ss')}`, + deliverylong: (dropLng || 0).toString(), + deliverytime: `${dayjs(startdate).format('YYYY-MM-DD')} ${dayjs(selectedtime?.$d || selectedtime).format('HH:mm:ss')}`, deliverytype: pickCust.customerid !== 0 || dropCust.customerid !== 0 ? 'B' : 'C', delivered: '', itemcount: 1, @@ -614,10 +619,10 @@ const Createorder1 = () => { pickupcontactno: pickCust.contactno || '', pickupcustomer: pickCust.firstname || '', pickuplandmark: pickCust.landmark || '', - pickuplat: (pickCust.latitude || 0).toString(), + pickuplat: (pickLat || 0).toString(), pickuplocation: pickCust.suburb || '', pickuplocationid: pickCust.deliverylocationid || 0, - pickuplong: (pickCust.longitude || 0).toString(), + pickuplong: (pickLng || 0).toString(), processing: '', ready: '', remarks: '', @@ -645,8 +650,8 @@ const Createorder1 = () => { email: pickCust.email || '', firstname: pickCust.firstname || '', landmark: pickCust.landmark || '', - latitude: (pickCust.latitude || 0).toString(), - longitude: (pickCust.longitude || 0).toString(), + latitude: (pickLat || 0).toString(), + longitude: (pickLng || 0).toString(), locationid: pickCust.deliverylocationid || 0, postcode: pickCust.postcode || '', primaryaddress: 1, @@ -671,8 +676,8 @@ const Createorder1 = () => { email: dropCust.email || '', firstname: dropCust.firstname || '', landmark: dropCust.landmark || '', - latitude: (dropCust.latitude || 0).toString(), - longitude: (dropCust.longitude || 0).toString(), + latitude: (dropLat || 0).toString(), + longitude: (dropLng || 0).toString(), locationid: dropCust.deliverylocationid || 0, postcode: dropCust.postcode || '', primaryaddress: 1, @@ -697,7 +702,7 @@ const Createorder1 = () => { opentoast('Enter Pickup Postcode ', 'warning', 2000); } else if (!pickCust.landmark) { opentoast('Enter Pickup Landmark ', 'warning', 2000); - } else if (!pickCust.latitude || !pickCust.longitude) { + } else if (!Number(pickLat) || !Number(pickLng)) { opentoast('Could not locate Pickup address on map, please recheck the address', 'error', 3000); } else if (!dropCust.firstname) { opentoast('Enter Drop Contact Name ', 'warning', 2000); @@ -713,17 +718,18 @@ const Createorder1 = () => { opentoast('Enter Drop postcode ', 'warning', 2000); } else if (!dropCust.landmark) { opentoast('Enter Drop Landmark ', 'warning', 2000); - } else if (!dropCust.latitude || !dropCust.longitude) { + } else if (!Number(dropLat) || !Number(dropLng)) { opentoast('Could not locate Drop address on map, please recheck the address', 'error', 3000); } else if (!selectedtime) { opentoast('Choose deliverytime ', 'warning', 2000); - } else if (!setSubCatId) { + } else if (!subCatId) { opentoast('Choose SubCategory ', 'warning', 2000); } else { try { const createRes = await axios.post(`${process.env.REACT_APP_URL2}/orders/createorder`, arr); // const createRes = await axios.post(`${process.env.REACT_APP_URL}/orders/createorder`, arr); - if (createRes.data.status) { + const isSuccess = Boolean(createRes?.data?.status || createRes?.data?.code === 200 || createRes?.status === 200); + if (isSuccess) { console.log('createRes', createRes); enqueueSnackbar('Order Created Successfully', { variant: 'success', @@ -731,18 +737,30 @@ const Createorder1 = () => { autoHideDuration: 1000 }); if (admintoken) { - notifyadmin(admintoken); - // sendnotifications(); + try { + sendnotifications(admintoken); + } catch (notifyErr) { + console.warn('Notification send error (non-blocking):', notifyErr); + } } + setLoading(false); navigate('/nearle/orders'); + return; } else { - opentoast('Something went wrong, Cannot create order', 'warning'); + opentoast(createRes?.data?.message || 'Something went wrong, Cannot create order', 'warning'); } setLoading(false); console.log(createRes); } catch (error) { console.log('createResErr', error); + opentoast( + error?.response?.data?.message || + error?.message || + 'Something went wrong, Cannot create order', + 'error' + ); + setLoading(false); } } }; @@ -846,42 +864,35 @@ const Createorder1 = () => { }; // ================================================== || sendnotifications || ================================================== - const sendnotifications = async () => { - setLoading(true); - await axios - .post(`${process.env.REACT_APP_URL}/utils/sendnotifications`, { + const sendnotifications = async (tokens) => { + const targetTokens = tokens || admintoken; + if (!targetTokens || (Array.isArray(targetTokens) && targetTokens.length === 0)) return; + try { + const res = await axios.post(`${process.env.REACT_APP_URL}/utils/sendnotifications`, { priority: 'high', - registration_ids: admintoken, + registration_ids: targetTokens, data: { accessid: process.env.REACT_APP_RIDER_ACCESS_ID }, notification: { title: 'Nearle Merchant', - body: 'An Order has been placed successfully,kindly process the same', + body: 'An Order has been placed successfully, kindly process the same', sound: 'ring' } - }) - .then((res) => { - console.log(res); - if (res.data.message == 'Success') { - enqueueSnackbar('Notification sent Successfully', { - variant: 'success', - anchorOrigin: { vertical: 'top', horizontal: 'right' }, - autoHideDuration: 1000 - }); - } - setLoading(false); - }) - .catch((err) => { - console.log(err); - enqueueSnackbar(err.message, { - variant: 'error', + }); + console.log('sendnotifications res:', res); + if (res?.data?.message === 'Success') { + enqueueSnackbar('Notification sent Successfully', { + variant: 'success', anchorOrigin: { vertical: 'top', horizontal: 'right' }, autoHideDuration: 1000 }); - setLoading(false); - }); + } + } catch (err) { + console.warn('sendnotifications error (non-fatal):', err); + } }; + const notifyadmin = sendnotifications; // ============================================= || Address Autocomplete (pick) || ============================================= // `overwriteFields: false` is used by the manual-typing fallback below — it only // sets the map pin (lat/lng) and leaves the Address box / Door No / Area / City / @@ -2257,14 +2268,15 @@ const Createorder1 = () => { disabled={!showDistance} variant="contained" startIcon={btnLoading ? null : } - onClick={() => { + onClick={async () => { setLoading(true); setBtnLoading(true); - createsubmitobj2(); - setTimeout(() => { + try { + await createsubmitobj2(); + } finally { setLoading(false); setBtnLoading(false); - }, 1000); + } }} sx={{ borderRadius: 999,