updates on the address autocomplete
This commit is contained in:
@@ -34,6 +34,171 @@ export const isWithinKanyakumariDistrict = (lat, lon) => {
|
|||||||
|
|
||||||
// Curated Nagercoil & Kanyakumari local areas dictionary for instant 0ms sublocality match
|
// Curated Nagercoil & Kanyakumari local areas dictionary for instant 0ms sublocality match
|
||||||
const NAGERCOIL_LOCALITIES = [
|
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',
|
name: 'Kurusady',
|
||||||
display_name: 'Kurusady, Ramanputhoor Road, Nagercoil, Tamil Nadu 629004, India',
|
display_name: 'Kurusady, Ramanputhoor Road, Nagercoil, Tamil Nadu 629004, India',
|
||||||
@@ -194,6 +359,226 @@ const NAGERCOIL_LOCALITIES = [
|
|||||||
state: 'Tamil Nadu',
|
state: 'Tamil Nadu',
|
||||||
postcode: '629002'
|
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',
|
name: 'Tower Junction',
|
||||||
display_name: 'Tower Junction, Clock Tower Area, Nagercoil, Tamil Nadu 629001, India',
|
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 lat = parseFloat(result.lat || result.latitude || 0);
|
||||||
const lng = parseFloat(result.lon || result.lng || result.longitude || 0);
|
const lng = parseFloat(result.lon || result.lng || result.longitude || 0);
|
||||||
const name = result.name || result.display_name?.split(',')[0] || '';
|
const name = result.name || result.display_name?.split(',')[0] || '';
|
||||||
const addr = result.address || {
|
const addr = {
|
||||||
suburb: result.suburb || '',
|
house_number: result.address?.house_number || '',
|
||||||
city: result.city || 'Nagercoil',
|
road: result.address?.road || result.address?.street || name,
|
||||||
state: result.state || 'Tamil Nadu',
|
suburb: result.address?.suburb || result.suburb || '',
|
||||||
postcode: result.postcode || ''
|
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;
|
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' } });
|
const res = await fetchWithTimeout(`${NOMINATIM_SEARCH_URL}?${params.toString()}`, { headers: { Accept: 'application/json' } });
|
||||||
if (!res.ok) return [];
|
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 [];
|
if (!Array.isArray(results)) return [];
|
||||||
|
|
||||||
return results
|
return results
|
||||||
@@ -603,36 +1007,79 @@ 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
|
// Filter local Nagercoil / Kanyakumari knowledge base with door number and tokenized matching
|
||||||
const matchLocalNagercoil = (query) => {
|
const matchLocalNagercoil = (query) => {
|
||||||
if (!query || query.trim().length < 2) return [];
|
if (!query || query.trim().length < 2) return [];
|
||||||
const raw = query.trim();
|
const raw = query.trim();
|
||||||
const rawLower = raw.toLowerCase();
|
|
||||||
const { doorNo, cleanQuery } = extractDoorPrefix(raw);
|
const { doorNo, cleanQuery } = extractDoorPrefix(raw);
|
||||||
const cleanLower = cleanQuery.toLowerCase();
|
const targetQuery = cleanQuery || raw;
|
||||||
const tokens = cleanLower.split(/[\s,]+/).filter((t) => t.length >= 2);
|
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 scored = [];
|
||||||
const nameLower = loc.name.toLowerCase();
|
|
||||||
const displayLower = loc.display_name.toLowerCase();
|
|
||||||
const suburbLower = loc.suburb.toLowerCase();
|
|
||||||
|
|
||||||
// 1. Direct query inside locality name or display name (e.g. query='kuru')
|
for (let idx = 0; idx < NAGERCOIL_LOCALITIES.length; idx++) {
|
||||||
if (nameLower.includes(rawLower) || displayLower.includes(rawLower) || suburbLower.includes(rawLower)) {
|
const loc = NAGERCOIL_LOCALITIES[idx];
|
||||||
return true;
|
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)) {
|
if (score > 0) {
|
||||||
return true;
|
|
||||||
}
|
|
||||||
// 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;
|
const formatted = doorNo ? `${doorNo}, ${loc.display_name}` : loc.display_name;
|
||||||
return {
|
scored.push({
|
||||||
|
score,
|
||||||
|
item: {
|
||||||
place_id: `nagercoil-local-${idx}-${doorNo ? `${doorNo}-` : ''}${loc.name}`,
|
place_id: `nagercoil-local-${idx}-${doorNo ? `${doorNo}-` : ''}${loc.name}`,
|
||||||
name: doorNo ? `${doorNo}, ${loc.name}` : loc.name,
|
name: doorNo ? `${doorNo}, ${loc.name}` : loc.name,
|
||||||
display_name: formatted,
|
display_name: formatted,
|
||||||
@@ -640,14 +1087,20 @@ const matchLocalNagercoil = (query) => {
|
|||||||
lon: loc.lon,
|
lon: loc.lon,
|
||||||
address: {
|
address: {
|
||||||
house_number: doorNo || '',
|
house_number: doorNo || '',
|
||||||
|
road: loc.name,
|
||||||
suburb: loc.suburb,
|
suburb: loc.suburb,
|
||||||
city: loc.city,
|
city: loc.city,
|
||||||
state: loc.state,
|
state: loc.state,
|
||||||
postcode: loc.postcode,
|
postcode: loc.postcode,
|
||||||
country: 'India'
|
country: 'India'
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
scored.sort((a, b) => b.score - a.score);
|
||||||
|
return scored.map((s) => s.item);
|
||||||
};
|
};
|
||||||
|
|
||||||
export async function geocodeAddress(address, { bias } = {}) {
|
export async function geocodeAddress(address, { bias } = {}) {
|
||||||
|
|||||||
@@ -571,6 +571,11 @@ const Createorder1 = () => {
|
|||||||
// =============================================== || createsubmitobj1 (create orders) || ===============================================
|
// =============================================== || createsubmitobj1 (create orders) || ===============================================
|
||||||
|
|
||||||
const createsubmitobj2 = async () => {
|
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 = {};
|
let arr = {};
|
||||||
arr = {
|
arr = {
|
||||||
orders: {
|
orders: {
|
||||||
@@ -586,11 +591,11 @@ const Createorder1 = () => {
|
|||||||
deliverycustomer: dropCust.firstname || '',
|
deliverycustomer: dropCust.firstname || '',
|
||||||
deliveryid: isNumChange2 == 0 ? +dropCust.customerid || 0 : 0,
|
deliveryid: isNumChange2 == 0 ? +dropCust.customerid || 0 : 0,
|
||||||
deliverylandmark: dropCust.landmark || '',
|
deliverylandmark: dropCust.landmark || '',
|
||||||
deliverylat: (dropCust.latitude || 0).toString(),
|
deliverylat: (dropLat || 0).toString(),
|
||||||
deliverylocation: dropCust.suburb || '',
|
deliverylocation: dropCust.suburb || '',
|
||||||
deliverylocationid: dropCust.deliverylocationid || 0,
|
deliverylocationid: dropCust.deliverylocationid || 0,
|
||||||
deliverylong: (dropCust.longitude || 0).toString(),
|
deliverylong: (dropLng || 0).toString(),
|
||||||
deliverytime: `${dayjs(startdate).format('YYYY-MM-DD')} ${dayjs(selectedtime.$d).format('HH:mm:ss')}`,
|
deliverytime: `${dayjs(startdate).format('YYYY-MM-DD')} ${dayjs(selectedtime?.$d || selectedtime).format('HH:mm:ss')}`,
|
||||||
deliverytype: pickCust.customerid !== 0 || dropCust.customerid !== 0 ? 'B' : 'C',
|
deliverytype: pickCust.customerid !== 0 || dropCust.customerid !== 0 ? 'B' : 'C',
|
||||||
delivered: '',
|
delivered: '',
|
||||||
itemcount: 1,
|
itemcount: 1,
|
||||||
@@ -614,10 +619,10 @@ const Createorder1 = () => {
|
|||||||
pickupcontactno: pickCust.contactno || '',
|
pickupcontactno: pickCust.contactno || '',
|
||||||
pickupcustomer: pickCust.firstname || '',
|
pickupcustomer: pickCust.firstname || '',
|
||||||
pickuplandmark: pickCust.landmark || '',
|
pickuplandmark: pickCust.landmark || '',
|
||||||
pickuplat: (pickCust.latitude || 0).toString(),
|
pickuplat: (pickLat || 0).toString(),
|
||||||
pickuplocation: pickCust.suburb || '',
|
pickuplocation: pickCust.suburb || '',
|
||||||
pickuplocationid: pickCust.deliverylocationid || 0,
|
pickuplocationid: pickCust.deliverylocationid || 0,
|
||||||
pickuplong: (pickCust.longitude || 0).toString(),
|
pickuplong: (pickLng || 0).toString(),
|
||||||
processing: '',
|
processing: '',
|
||||||
ready: '',
|
ready: '',
|
||||||
remarks: '',
|
remarks: '',
|
||||||
@@ -645,8 +650,8 @@ const Createorder1 = () => {
|
|||||||
email: pickCust.email || '',
|
email: pickCust.email || '',
|
||||||
firstname: pickCust.firstname || '',
|
firstname: pickCust.firstname || '',
|
||||||
landmark: pickCust.landmark || '',
|
landmark: pickCust.landmark || '',
|
||||||
latitude: (pickCust.latitude || 0).toString(),
|
latitude: (pickLat || 0).toString(),
|
||||||
longitude: (pickCust.longitude || 0).toString(),
|
longitude: (pickLng || 0).toString(),
|
||||||
locationid: pickCust.deliverylocationid || 0,
|
locationid: pickCust.deliverylocationid || 0,
|
||||||
postcode: pickCust.postcode || '',
|
postcode: pickCust.postcode || '',
|
||||||
primaryaddress: 1,
|
primaryaddress: 1,
|
||||||
@@ -671,8 +676,8 @@ const Createorder1 = () => {
|
|||||||
email: dropCust.email || '',
|
email: dropCust.email || '',
|
||||||
firstname: dropCust.firstname || '',
|
firstname: dropCust.firstname || '',
|
||||||
landmark: dropCust.landmark || '',
|
landmark: dropCust.landmark || '',
|
||||||
latitude: (dropCust.latitude || 0).toString(),
|
latitude: (dropLat || 0).toString(),
|
||||||
longitude: (dropCust.longitude || 0).toString(),
|
longitude: (dropLng || 0).toString(),
|
||||||
locationid: dropCust.deliverylocationid || 0,
|
locationid: dropCust.deliverylocationid || 0,
|
||||||
postcode: dropCust.postcode || '',
|
postcode: dropCust.postcode || '',
|
||||||
primaryaddress: 1,
|
primaryaddress: 1,
|
||||||
@@ -697,7 +702,7 @@ const Createorder1 = () => {
|
|||||||
opentoast('Enter Pickup Postcode ', 'warning', 2000);
|
opentoast('Enter Pickup Postcode ', 'warning', 2000);
|
||||||
} else if (!pickCust.landmark) {
|
} else if (!pickCust.landmark) {
|
||||||
opentoast('Enter Pickup Landmark ', 'warning', 2000);
|
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);
|
opentoast('Could not locate Pickup address on map, please recheck the address', 'error', 3000);
|
||||||
} else if (!dropCust.firstname) {
|
} else if (!dropCust.firstname) {
|
||||||
opentoast('Enter Drop Contact Name ', 'warning', 2000);
|
opentoast('Enter Drop Contact Name ', 'warning', 2000);
|
||||||
@@ -713,17 +718,18 @@ const Createorder1 = () => {
|
|||||||
opentoast('Enter Drop postcode ', 'warning', 2000);
|
opentoast('Enter Drop postcode ', 'warning', 2000);
|
||||||
} else if (!dropCust.landmark) {
|
} else if (!dropCust.landmark) {
|
||||||
opentoast('Enter Drop Landmark ', 'warning', 2000);
|
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);
|
opentoast('Could not locate Drop address on map, please recheck the address', 'error', 3000);
|
||||||
} else if (!selectedtime) {
|
} else if (!selectedtime) {
|
||||||
opentoast('Choose deliverytime ', 'warning', 2000);
|
opentoast('Choose deliverytime ', 'warning', 2000);
|
||||||
} else if (!setSubCatId) {
|
} else if (!subCatId) {
|
||||||
opentoast('Choose SubCategory ', 'warning', 2000);
|
opentoast('Choose SubCategory ', 'warning', 2000);
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
const createRes = await axios.post(`${process.env.REACT_APP_URL2}/orders/createorder`, arr);
|
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);
|
// 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);
|
console.log('createRes', createRes);
|
||||||
enqueueSnackbar('Order Created Successfully', {
|
enqueueSnackbar('Order Created Successfully', {
|
||||||
variant: 'success',
|
variant: 'success',
|
||||||
@@ -731,18 +737,30 @@ const Createorder1 = () => {
|
|||||||
autoHideDuration: 1000
|
autoHideDuration: 1000
|
||||||
});
|
});
|
||||||
if (admintoken) {
|
if (admintoken) {
|
||||||
notifyadmin(admintoken);
|
try {
|
||||||
// sendnotifications();
|
sendnotifications(admintoken);
|
||||||
|
} catch (notifyErr) {
|
||||||
|
console.warn('Notification send error (non-blocking):', notifyErr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setLoading(false);
|
||||||
navigate('/nearle/orders');
|
navigate('/nearle/orders');
|
||||||
|
return;
|
||||||
} else {
|
} else {
|
||||||
opentoast('Something went wrong, Cannot create order', 'warning');
|
opentoast(createRes?.data?.message || 'Something went wrong, Cannot create order', 'warning');
|
||||||
}
|
}
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
console.log(createRes);
|
console.log(createRes);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log('createResErr', error);
|
console.log('createResErr', error);
|
||||||
|
opentoast(
|
||||||
|
error?.response?.data?.message ||
|
||||||
|
error?.message ||
|
||||||
|
'Something went wrong, Cannot create order',
|
||||||
|
'error'
|
||||||
|
);
|
||||||
|
setLoading(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -846,12 +864,13 @@ const Createorder1 = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// ================================================== || sendnotifications || ==================================================
|
// ================================================== || sendnotifications || ==================================================
|
||||||
const sendnotifications = async () => {
|
const sendnotifications = async (tokens) => {
|
||||||
setLoading(true);
|
const targetTokens = tokens || admintoken;
|
||||||
await axios
|
if (!targetTokens || (Array.isArray(targetTokens) && targetTokens.length === 0)) return;
|
||||||
.post(`${process.env.REACT_APP_URL}/utils/sendnotifications`, {
|
try {
|
||||||
|
const res = await axios.post(`${process.env.REACT_APP_URL}/utils/sendnotifications`, {
|
||||||
priority: 'high',
|
priority: 'high',
|
||||||
registration_ids: admintoken,
|
registration_ids: targetTokens,
|
||||||
data: {
|
data: {
|
||||||
accessid: process.env.REACT_APP_RIDER_ACCESS_ID
|
accessid: process.env.REACT_APP_RIDER_ACCESS_ID
|
||||||
},
|
},
|
||||||
@@ -860,28 +879,20 @@ const Createorder1 = () => {
|
|||||||
body: 'An Order has been placed successfully, kindly process the same',
|
body: 'An Order has been placed successfully, kindly process the same',
|
||||||
sound: 'ring'
|
sound: 'ring'
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
.then((res) => {
|
console.log('sendnotifications res:', res);
|
||||||
console.log(res);
|
if (res?.data?.message === 'Success') {
|
||||||
if (res.data.message == 'Success') {
|
|
||||||
enqueueSnackbar('Notification sent Successfully', {
|
enqueueSnackbar('Notification sent Successfully', {
|
||||||
variant: 'success',
|
variant: 'success',
|
||||||
anchorOrigin: { vertical: 'top', horizontal: 'right' },
|
anchorOrigin: { vertical: 'top', horizontal: 'right' },
|
||||||
autoHideDuration: 1000
|
autoHideDuration: 1000
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
setLoading(false);
|
} catch (err) {
|
||||||
})
|
console.warn('sendnotifications error (non-fatal):', err);
|
||||||
.catch((err) => {
|
}
|
||||||
console.log(err);
|
|
||||||
enqueueSnackbar(err.message, {
|
|
||||||
variant: 'error',
|
|
||||||
anchorOrigin: { vertical: 'top', horizontal: 'right' },
|
|
||||||
autoHideDuration: 1000
|
|
||||||
});
|
|
||||||
setLoading(false);
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
const notifyadmin = sendnotifications;
|
||||||
// ============================================= || Address Autocomplete (pick) || =============================================
|
// ============================================= || Address Autocomplete (pick) || =============================================
|
||||||
// `overwriteFields: false` is used by the manual-typing fallback below — it only
|
// `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 /
|
// sets the map pin (lat/lng) and leaves the Address box / Door No / Area / City /
|
||||||
@@ -2257,14 +2268,15 @@ const Createorder1 = () => {
|
|||||||
disabled={!showDistance}
|
disabled={!showDistance}
|
||||||
variant="contained"
|
variant="contained"
|
||||||
startIcon={btnLoading ? null : <MdCheckCircle size={16} />}
|
startIcon={btnLoading ? null : <MdCheckCircle size={16} />}
|
||||||
onClick={() => {
|
onClick={async () => {
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
setBtnLoading(true);
|
setBtnLoading(true);
|
||||||
createsubmitobj2();
|
try {
|
||||||
setTimeout(() => {
|
await createsubmitobj2();
|
||||||
|
} finally {
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
setBtnLoading(false);
|
setBtnLoading(false);
|
||||||
}, 1000);
|
}
|
||||||
}}
|
}}
|
||||||
sx={{
|
sx={{
|
||||||
borderRadius: 999,
|
borderRadius: 999,
|
||||||
|
|||||||
Reference in New Issue
Block a user