qwc2 2026.4.21 → 2026.4.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/components/AttributeForm.js +26 -11
  2. package/components/EditComboField.js +58 -15
  3. package/components/LinkFeatureForm.js +9 -10
  4. package/components/QtDesignerForm.js +12 -15
  5. package/components/SearchBox.js +77 -52
  6. package/components/map3d/Map3D.js +19 -4
  7. package/components/map3d/layers/WFSLayer3D.js +4 -0
  8. package/components/map3d/utils/MiscUtils3D.js +3 -1
  9. package/components/style/EditComboField.css +5 -0
  10. package/components/widgets/ComboBox.js +11 -2
  11. package/package.json +3 -3
  12. package/plugins/Redlining.js +14 -5
  13. package/plugins/SensorThingsTool.js +41 -22
  14. package/plugins/TaskButton.js +16 -2
  15. package/plugins/map3d/Identify3D.js +18 -10
  16. package/plugins/map3d/MapCopyright3D.js +36 -17
  17. package/plugins/map3d/MapExport3D.js +1 -1
  18. package/plugins/map3d/Measure3D.js +3 -3
  19. package/plugins/style/SensorThingsTool.css +13 -5
  20. package/static/translations/bg-BG.json +1 -0
  21. package/static/translations/ca-ES.json +1 -0
  22. package/static/translations/cs-CZ.json +1 -0
  23. package/static/translations/de-CH.json +1 -0
  24. package/static/translations/de-DE.json +1 -0
  25. package/static/translations/en-US.json +1 -0
  26. package/static/translations/es-ES.json +1 -0
  27. package/static/translations/fi-FI.json +1 -0
  28. package/static/translations/fr-FR.json +1 -0
  29. package/static/translations/hu-HU.json +1 -0
  30. package/static/translations/it-IT.json +1 -0
  31. package/static/translations/ja-JP.json +1 -0
  32. package/static/translations/nl-NL.json +1 -0
  33. package/static/translations/no-NO.json +1 -0
  34. package/static/translations/pl-PL.json +1 -0
  35. package/static/translations/pt-BR.json +1 -0
  36. package/static/translations/pt-PT.json +1 -0
  37. package/static/translations/ro-RO.json +1 -0
  38. package/static/translations/ru-RU.json +1 -0
  39. package/static/translations/sv-SE.json +1 -0
  40. package/static/translations/tr-TR.json +1 -0
  41. package/static/translations/tsconfig.json +1 -0
  42. package/static/translations/uk-UA.json +1 -0
  43. package/utils/EditingUtils.js +2 -1
  44. package/utils/SearchProviders.js +38 -84
@@ -43,6 +43,7 @@
43
43
  "FeatureSearch": "Procurar feição",
44
44
  "GeometryDigitizer": "",
45
45
  "IdentifyPoint": "Identificar ponto",
46
+ "IdentifyRadius": "",
46
47
  "IdentifyRegion": "Identificar região",
47
48
  "LayerCatalog": "Catálogo de camadas",
48
49
  "Login": "Inicio da sessão",
@@ -43,6 +43,7 @@
43
43
  "FeatureSearch": "Pesquisa de Recurso",
44
44
  "GeometryDigitizer": "",
45
45
  "IdentifyPoint": "Identificar Ponto",
46
+ "IdentifyRadius": "",
46
47
  "IdentifyRegion": "Identificar Região",
47
48
  "LayerCatalog": "Catálogo de Camadas",
48
49
  "Login": "Iniciar Sessão",
@@ -43,6 +43,7 @@
43
43
  "FeatureSearch": "",
44
44
  "GeometryDigitizer": "",
45
45
  "IdentifyPoint": "Interogare punct",
46
+ "IdentifyRadius": "",
46
47
  "IdentifyRegion": "Interogare regiune",
47
48
  "LayerCatalog": "Catalog de straturi",
48
49
  "Login": "Conectează-te",
@@ -43,6 +43,7 @@
43
43
  "FeatureSearch": "",
44
44
  "GeometryDigitizer": "",
45
45
  "IdentifyPoint": "",
46
+ "IdentifyRadius": "",
46
47
  "IdentifyRegion": "Определить регион",
47
48
  "LayerCatalog": "",
48
49
  "Login": "",
@@ -43,6 +43,7 @@
43
43
  "FeatureSearch": "",
44
44
  "GeometryDigitizer": "",
45
45
  "IdentifyPoint": "",
46
+ "IdentifyRadius": "",
46
47
  "IdentifyRegion": "Identifiera med område",
47
48
  "LayerCatalog": "",
48
49
  "Login": "Logga in",
@@ -43,6 +43,7 @@
43
43
  "FeatureSearch": "Obje Arama",
44
44
  "GeometryDigitizer": "Geometri Sayısallaştırıcı",
45
45
  "IdentifyPoint": "Nokta bilgisi al",
46
+ "IdentifyRadius": "",
46
47
  "IdentifyRegion": "Bölgeden Bilgi Al",
47
48
  "LayerCatalog": "Katman Kataloğu",
48
49
  "Login": "Giriş",
@@ -34,6 +34,7 @@
34
34
  "appmenu.items.GeometryDigitizer",
35
35
  "appmenu.items.Help",
36
36
  "appmenu.items.IdentifyPoint",
37
+ "appmenu.items.IdentifyRadius",
37
38
  "appmenu.items.IdentifyRegion",
38
39
  "appmenu.items.LayerCatalog",
39
40
  "appmenu.items.LayerTree",
@@ -43,6 +43,7 @@
43
43
  "FeatureSearch": "",
44
44
  "GeometryDigitizer": "",
45
45
  "IdentifyPoint": "",
46
+ "IdentifyRadius": "",
46
47
  "IdentifyRegion": "Визначити регіон",
47
48
  "LayerCatalog": "",
48
49
  "Login": "",
@@ -93,8 +93,9 @@ _KeyValCache = KeyValCache;
93
93
  _defineProperty(KeyValCache, "store", {});
94
94
  _defineProperty(KeyValCache, "requestPromises", {});
95
95
  _defineProperty(KeyValCache, "get", function (editIface, keyvalrel, filterExpr) {
96
+ var forceReload = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
96
97
  var key = keyvalrel + uuidv5(JSON.stringify(filterExpr !== null && filterExpr !== void 0 ? filterExpr : null), UUID_NS);
97
- if (key in _KeyValCache.store) {
98
+ if (key in _KeyValCache.store && !forceReload) {
98
99
  return new Promise(function (resolve) {
99
100
  return resolve(_KeyValCache.store[key]);
100
101
  });
@@ -36,7 +36,6 @@ import DataServiceExprUtils from './DataServiceExprUtils';
36
36
  import IdentifyUtils from './IdentifyUtils';
37
37
  import LayerUtils from './LayerUtils';
38
38
  import LocaleUtils from './LocaleUtils';
39
- import VectorLayerUtils from './VectorLayerUtils';
40
39
  export var SearchResultType = {
41
40
  PLACE: 0,
42
41
  THEMELAYER: 1,
@@ -521,13 +520,13 @@ export var FulltextSearch = /*#__PURE__*/function () {
521
520
  var quot = typeof resultItem.id === 'string' ? '"' : '';
522
521
  var filter = "[[\"".concat(resultItem.id_field_name, "\",\"=\", ").concat(quot).concat(resultItem.id).concat(quot, "]]");
523
522
  axios.get(dataServiceUrl.replace(/\/?$/, "/") + resultItem.dataproduct_id + "/?filter=" + filter).then(function (response) {
523
+ var feature = response.data;
524
524
  var bbox = response.data.bbox;
525
- var center = bbox ? [0.5 * (bbox[0] + bbox[2]), 0.5 * (bbox[1] + bbox[3])] : null;
526
525
  callback({
527
526
  bbox: bbox,
528
- center: center,
529
- feature: response.data,
530
- crs: response.data.crs.properties.name
527
+ center: null,
528
+ feature: feature,
529
+ crs: feature.crs.properties.name
531
530
  });
532
531
  })["catch"](function () {
533
532
  callback(null);
@@ -640,44 +639,6 @@ export function unregisterSearchProvider(key) {
640
639
  delete SearchProviders[key];
641
640
  addedSearchProviders["delete"](key);
642
641
  }
643
-
644
- // Uniformize the response of getResultGeometry
645
- function getResultGeometry(provider, item, callback) {
646
- provider.getResultGeometry(item, function (response) {
647
- var features = [];
648
- if (response !== null && response !== void 0 && response.geometry) {
649
- var highlightFeature = response.geometry.coordinates ? {
650
- type: "Feature",
651
- geometry: response.geometry
652
- } : VectorLayerUtils.wktToGeoJSON(response.geometry, response.crs, response.crs);
653
- if (highlightFeature) {
654
- features.push(highlightFeature);
655
- }
656
- } else if (response !== null && response !== void 0 && response.feature) {
657
- if (response.feature.features) {
658
- features.push.apply(features, _toConsumableArray(response.feature.features));
659
- } else {
660
- features.push(response.feature);
661
- }
662
- }
663
- if (features.length === 0) {
664
- callback(null);
665
- } else {
666
- callback(_objectSpread(_objectSpread({
667
- feature: {
668
- type: "FeatureCollection",
669
- features: features
670
- },
671
- crs: response.crs,
672
- hidemarker: response.hidemarker
673
- }, response.bbox && {
674
- bbox: response.bbox
675
- }), response.center && {
676
- center: response.center
677
- }));
678
- }
679
- });
680
- }
681
642
  export function collectSearchProviders(theme, layers) {
682
643
  var mapScale = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
683
644
  // Collect active layers/search terms
@@ -710,50 +671,43 @@ export function collectSearchProviders(theme, layers) {
710
671
  var _iterator2 = _createForOfIteratorHelper(enabledProviders),
711
672
  _step2;
712
673
  try {
713
- var _loop = function _loop() {
714
- var _entry;
715
- var entry = _step2.value;
716
- if (typeof entry === 'string') {
717
- entry = {
718
- provider: entry
719
- };
674
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
675
+ var _entry2;
676
+ var _entry = _step2.value;
677
+ if (typeof _entry === 'string') {
678
+ _entry = {
679
+ provider: _entry
680
+ };
681
+ }
682
+ // Omit qgis provider with field configuration, this is only supported through the FeatureSearch plugin
683
+ if (_entry.provider === 'qgis' && (_entry2 = _entry) !== null && _entry2 !== void 0 && (_entry2 = _entry2.params) !== null && _entry2 !== void 0 && _entry2.fields) {
684
+ continue;
685
+ }
686
+ var provider = searchProviders[_entry.provider];
687
+ if (provider) {
688
+ var _entry$key, _entry$label, _entry$labelmsgid;
689
+ if (provider.requiresLayer && !themeLayerNames.includes(provider.requiresLayer)) {
690
+ continue;
720
691
  }
721
- // Omit qgis provider with field configuration, this is only supported through the FeatureSearch plugin
722
- if (entry.provider === 'qgis' && (_entry = entry) !== null && _entry !== void 0 && (_entry = _entry.params) !== null && _entry !== void 0 && _entry.fields) {
723
- return 0; // continue
692
+ var key = (_entry$key = _entry.key) !== null && _entry$key !== void 0 ? _entry$key : _entry.provider;
693
+ if (providerKeys.has(key)) {
694
+ var i = 0;
695
+ for (i = 0; providerKeys.has(key + "_" + i); ++i);
696
+ key = key + "_" + i;
724
697
  }
725
- var provider = searchProviders[entry.provider];
726
- if (provider) {
727
- var _entry$key, _entry$label, _entry$labelmsgid;
728
- if (provider.requiresLayer && !themeLayerNames.includes(provider.requiresLayer)) {
729
- return 0; // continue
698
+ providerKeys.add(key);
699
+ availableProviders[key] = _objectSpread(_objectSpread({}, provider), {}, {
700
+ label: (_entry$label = _entry.label) !== null && _entry$label !== void 0 ? _entry$label : provider.label,
701
+ labelmsgid: (_entry$labelmsgid = _entry.labelmsgid) !== null && _entry$labelmsgid !== void 0 ? _entry$labelmsgid : provider.labelmsgid,
702
+ getResultGeometry: provider.getResultGeometry,
703
+ cfgParams: _entry.params || {},
704
+ params: {
705
+ searchTerms: searchTerms,
706
+ activeLayers: activeLayers,
707
+ theme: theme
730
708
  }
731
- var key = (_entry$key = entry.key) !== null && _entry$key !== void 0 ? _entry$key : entry.provider;
732
- if (providerKeys.has(key)) {
733
- var i = 0;
734
- for (i = 0; providerKeys.has(key + "_" + i); ++i);
735
- key = key + "_" + i;
736
- }
737
- providerKeys.add(key);
738
- availableProviders[key] = _objectSpread(_objectSpread({}, provider), {}, {
739
- label: (_entry$label = entry.label) !== null && _entry$label !== void 0 ? _entry$label : provider.label,
740
- labelmsgid: (_entry$labelmsgid = entry.labelmsgid) !== null && _entry$labelmsgid !== void 0 ? _entry$labelmsgid : provider.labelmsgid,
741
- getResultGeometry: provider.getResultGeometry ? function (item, callback) {
742
- return getResultGeometry(provider, item, callback);
743
- } : null,
744
- cfgParams: entry.params || {},
745
- params: {
746
- searchTerms: searchTerms,
747
- activeLayers: activeLayers,
748
- theme: theme
749
- }
750
- });
751
- }
752
- },
753
- _ret;
754
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
755
- _ret = _loop();
756
- if (_ret === 0) continue;
709
+ });
710
+ }
757
711
  }
758
712
  } catch (err) {
759
713
  _iterator2.e(err);