diff --git a/DRAFT_CHANGELOG.md b/DRAFT_CHANGELOG.md
index 3e3c58eb2..e34cf103c 100644
--- a/DRAFT_CHANGELOG.md
+++ b/DRAFT_CHANGELOG.md
@@ -32,7 +32,8 @@ __DATE__
- Export : mise en conformité DSFR du bouton Export (#334)
- LocationSelector : fenêtre transparente en mode classique et pas assez large en mode DSFR (#349)
- LayerImport : fenêtre d'affichage des getCapabilities agrandie (#349)
-
+ - Search : ajout wfs fonctionnel et filtre automatique des suggests selon la configuration si liste non spécifiée (#352)
+
* 🔒 [Security]
diff --git a/package.json b/package.json
index f581d6e56..201b5894e 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
{
"name": "geopf-extensions-openlayers",
"description": "French Geoportal Extensions for OpenLayers libraries",
- "version": "1.0.0-beta.2-351",
- "date": "07/02/2025",
+ "version": "1.0.0-beta.2-352",
+ "date": "12/02/2025",
"module": "src/index.js",
"directories": {},
"engines": {
diff --git a/samples-src/pages/tests/SearchEngine/pages-ol-searchengine-modules-dsfr-default.html b/samples-src/pages/tests/SearchEngine/pages-ol-searchengine-modules-dsfr-default.html
index 82b478d7b..38c2ddeaa 100644
--- a/samples-src/pages/tests/SearchEngine/pages-ol-searchengine-modules-dsfr-default.html
+++ b/samples-src/pages/tests/SearchEngine/pages-ol-searchengine-modules-dsfr-default.html
@@ -14,25 +14,12 @@
{{/content}}
{{#content "body"}}
-
Ajout du moteur de recherche avec les options par défaut
-
- Liste des couches prioritaires :
-
- PLAN.IGN,
- GEOGRAPHICALGRIDSYSTEMS.MAPS.BDUNI.J1,
- GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2,
- CADASTRALPARCELS.PARCELLAIRE_EXPRESS,
- ORTHOIMAGERY.ORTHOPHOTOS
-
-
- Ex. si on saisie 'ortho', la couche "photographies aeriennes" devrait sortir en 1ere position.
-
@@ -78,6 +65,7 @@ Ajout du moteur de recherche avec les options par défaut
searchOptions: {
addToMap: true,
filterServices : "WMTS,WMS,TMS,WFS",
+ // filterLayers : ["GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2"],
filterLayersPriority : "PLAN.IGN,GEOGRAPHICALGRIDSYSTEMS.MAPS.BDUNI.J1,GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2,CADASTRALPARCELS.PARCELLAIRE_EXPRESS,ORTHOIMAGERY.ORTHOPHOTOS",
filterWMTSPriority : true,
serviceOptions: {
diff --git a/src/packages/Controls/SearchEngine/SearchEngine.js b/src/packages/Controls/SearchEngine/SearchEngine.js
index fed20cd22..78474dc26 100644
--- a/src/packages/Controls/SearchEngine/SearchEngine.js
+++ b/src/packages/Controls/SearchEngine/SearchEngine.js
@@ -27,6 +27,7 @@ import CRS from "../../CRS/CRS";
// import local des layers
import GeoportalWMS from "../../Layers/LayerWMS";
import GeoportalWMTS from "../../Layers/LayerWMTS";
+import GeoportalWFS from "../../Layers/LayerWFS";
import GeoportalMapBox from "../../Layers/LayerMapBox";
// Service
import Search from "../../Services/Search";
@@ -82,6 +83,7 @@ var logger = Logger.getLogger("searchengine");
* @param {String} [options.searchOptions.filterWMTSPriority] - filter on priority WMTS layer in search, each field is separated by a comma. "PLAN.IGN,ORTHOIMAGERY.ORTHOPHOTOS" by default
* @param {Boolean} [options.searchOptions.filterLayersPriority = false] - filter on priority layers in search, false by default
* @param {String} [options.searchOptions.filterVectortiles] - filter on list of search layers only on service TMS, each field is separated by a comma. "PLAN.IGN, ..." by default
+ * @param {String} [options.searchOptions.filterLayers] - filter on list of search layers list. By Default, the layers available in Config.configuration.layers
* @param {Boolean} [options.searchOptions.updateVectortiles = false] - updating the list of search layers only on service TMS
* @param {Object} [options.searchOptions.serviceOptions] - options of search service
* @param {Sring} [options.searchOptions.serviceOptions.url] - url of service
@@ -387,7 +389,10 @@ var SearchEngine = class SearchEngine extends Control {
// abonnement au service
Search.target.addEventListener("suggest", (e) => {
logger.debug(e);
- this._fillSearchedSuggestListContainer(e.detail);
+ let suggestResults = e.detail;
+ // filtre des suggestions selon la configuration ou l'option filterLayers
+ suggestResults = this._filterResultsFromConfigLayers(suggestResults);
+ this._fillSearchedSuggestListContainer(suggestResults);
});
}
@@ -1115,6 +1120,37 @@ var SearchEngine = class SearchEngine extends Control {
}
}
+ /**
+ * this method is called by this.() (case of success)
+ * and clean the results of the suggest list from a list of layers
+ * by default, the Config.layers list.
+ *
+ * @param {Array} suggests - Array of suggested corresponding to search results list
+ * @returns {Array} suggests - Array of suggested corresponding to search results list filtered by Config
+ * @private
+ */
+ _filterResultsFromConfigLayers (suggests) {
+ var layerList = [];
+ if (this.options.searchOptions.filterLayers) {
+ layerList = this.options.searchOptions.filterLayers;
+ } else {
+ var layersObject = window.Gp.Config.layers;
+ for (let layer in layersObject) {
+ if (layersObject.hasOwnProperty(layer)) {
+ layerList.push(layersObject[layer].name);
+ }
+ }
+ }
+ let i = suggests.length;
+ while (i--) {
+ if (!layerList.includes(suggests[i].name)) {
+ suggests.splice(i, 1);
+ }
+ }
+ Search.setSuggestions(suggests);
+ return suggests;
+ }
+
/**
* this method is called by this.onAutoCompleteSearch()
* and executes a request to the service.
@@ -1971,6 +2007,11 @@ var SearchEngine = class SearchEngine extends Control {
layer : name
});
break;
+ case "WFS":
+ layer = new GeoportalWFS({
+ layer : name
+ });
+ break;
case "TMS":
layer = new GeoportalMapBox({
layer : name
diff --git a/src/packages/Services/Search.js b/src/packages/Services/Search.js
index aa23e7a9a..ffe313f9f 100644
--- a/src/packages/Services/Search.js
+++ b/src/packages/Services/Search.js
@@ -388,6 +388,14 @@ const setIndex = (value) => {
const setFields = (value) => {
m_fields = value;
};
+/**
+ * Renseigne la liste des suggestions
+ * @param {Array} value - liste des suggestions
+ * @see m_suggestions
+ */
+const setSuggestions = (value) => {
+ m_suggestions = value;
+};
/**
* Renseigne le nombre de suggestions du service
* @param {Number} value - le nombre de suggestions du service
@@ -488,6 +496,7 @@ export default {
getTitles,
setIndex,
setFields,
+ setSuggestions,
setSize,
setUrl,
setMaximumResponses,