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,