Perhaps (probably?) I'm doing something wrong but here is my scenario.
Using the EsriLeafletGeoSearch plugin, we configure providers by passing an object who's keys are parsed into the provider type that esri-leaflet-geocoder supports.
so example object looks something like this:
mapServiceProvider: {
token: token,
url: "https://server/server/rest/services/folder/service/MapServer",
layers: [21],
searchFields: ["id"],
label: "Feature X",
searchMode: "strict",
bufferRadius: 10,
maxResults: 20,
formatSuggestion: function (feature) {
return `${feature.properties.id}` || null;
},
},
// mapServiceProvider: {
// token: token,
// url: "https://server/server/rest/services/folder/service/MapServer",
// layers: [3],
// searchFields: ["name", "id"],
// label: "Feature Y",
// searchMode: "startsWith",
// bufferRadius: 10,
// maxResults: 20,
// formatSuggestion: function (feature) {
// return `${feature.properties.id} ${feature.properties.name}` || null;
// },
// },
Since the object is then parsed using Object.keys(object) to tell ELG which provider type we want being one of
- arcgisOnlineProvider
- featureLayerProvider
- mapServiceProvider
- geocodeServiceProvider
It appears to me that one cannot configure 2 or more of the same type of provider this way because you'd have to create an object with duplicate keys and I think the last one in wins.
In the ELG documentation here - it looks like it can support multiple providers of the same type maybe?
https://developers.arcgis.com/esri-leaflet/api-reference/controls/geosearch/#providers
But it looks like it would require us passing in an array of objects so we're not relying on the keys of an object for provider type and instead we use a key/value pair that defines the provider type.
So would that be changing things around here?
|
const providers = Object.keys(providersProp).map((provider) => { |
Perhaps it would accept something like this example below to configure multiple of the same type of providers?
[
{
"type": "mapServiceProvider",
"options": {
"token": token,
"url": "https://server/server/rest/services/folder/service/MapServer",
"layers": [21],
"searchFields": ["id"],
"label": "Feature X",
"searchMode": "strict",
"bufferRadius": 10,
"maxResults": 20,
"formatSuggestion": function (feature) {
return `${feature.properties.id}` || null;
},
}
},
{
"type": "mapServiceProvider",
"options": {
"token": token,
"url": "https://server/server/rest/services/folder/service/MapServer",
"layers": [3],
"searchFields": ["name", "id"],
"label": "Feature X",
"searchMode": "strict",
"bufferRadius": 10,
"maxResults": 20,
"formatSuggestion": function (feature) {
return `${feature.properties.id} ${feature.properties.name}` || null;
},
}
},
]
Thanks for listening.
Perhaps (probably?) I'm doing something wrong but here is my scenario.
Using the
EsriLeafletGeoSearchplugin, we configureprovidersby passing an object who's keys are parsed into the provider type that esri-leaflet-geocoder supports.so example object looks something like this:
Since the object is then parsed using Object.keys(object) to tell ELG which provider type we want being one of
It appears to me that one cannot configure 2 or more of the same type of provider this way because you'd have to create an object with duplicate keys and I think the last one in wins.
In the ELG documentation here - it looks like it can support multiple providers of the same type maybe?
https://developers.arcgis.com/esri-leaflet/api-reference/controls/geosearch/#providers
But it looks like it would require us passing in an array of objects so we're not relying on the keys of an object for provider type and instead we use a key/value pair that defines the provider type.
So would that be changing things around here?
react-esri-leaflet/src-plugins/EsriLeafletGeoSearch.tsx
Line 32 in fc99d11
Perhaps it would accept something like this example below to configure multiple of the same type of providers?
[ { "type": "mapServiceProvider", "options": { "token": token, "url": "https://server/server/rest/services/folder/service/MapServer", "layers": [21], "searchFields": ["id"], "label": "Feature X", "searchMode": "strict", "bufferRadius": 10, "maxResults": 20, "formatSuggestion": function (feature) { return `${feature.properties.id}` || null; }, } }, { "type": "mapServiceProvider", "options": { "token": token, "url": "https://server/server/rest/services/folder/service/MapServer", "layers": [3], "searchFields": ["name", "id"], "label": "Feature X", "searchMode": "strict", "bufferRadius": 10, "maxResults": 20, "formatSuggestion": function (feature) { return `${feature.properties.id} ${feature.properties.name}` || null; }, } }, ]Thanks for listening.