updates on the address autocomplete

This commit is contained in:
2026-09-21 12:36:22 +05:30
parent d1e2763022
commit dbc03e233b
2 changed files with 551 additions and 86 deletions

View File

@@ -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 } = {}) {

View File

@@ -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 : <MdCheckCircle size={16} />}
onClick={() => {
onClick={async () => {
setLoading(true);
setBtnLoading(true);
createsubmitobj2();
setTimeout(() => {
try {
await createsubmitobj2();
} finally {
setLoading(false);
setBtnLoading(false);
}, 1000);
}
}}
sx={{
borderRadius: 999,