qwc2 2026.8.24 → 2026.8.31

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 (53) hide show
  1. package/components/AttributeForm.js +68 -59
  2. package/components/AttributeTableWidget.js +36 -38
  3. package/components/IdentifyViewer.js +97 -348
  4. package/components/ImportLayer.js +56 -9
  5. package/components/LinkFeatureForm.js +3 -8
  6. package/components/QtDesignerForm.js +103 -75
  7. package/components/ResizeableWindow.js +2 -1
  8. package/components/SearchBox.js +2 -1
  9. package/components/style/ImportLayer.css +22 -0
  10. package/components/style/QtDesignerForm.css +3 -2
  11. package/components/style/ResizeableWindow.css +10 -16
  12. package/components/widgets/ComboBox.js +10 -5
  13. package/components/widgets/NavBar.js +5 -4
  14. package/components/widgets/PopupMenu.js +17 -4
  15. package/components/widgets/style/ComboBox.css +6 -1
  16. package/package.json +2 -1
  17. package/plugins/Identify.js +250 -83
  18. package/plugins/MapDropImport.js +3 -1
  19. package/plugins/MapExport.js +10 -6
  20. package/plugins/MapFilter.js +5 -14
  21. package/plugins/Redlining.js +45 -14
  22. package/plugins/map/LocateSupport.js +1 -1
  23. package/static/translations/bg-BG.json +6 -3
  24. package/static/translations/ca-ES.json +6 -3
  25. package/static/translations/cs-CZ.json +5 -2
  26. package/static/translations/de-CH.json +7 -4
  27. package/static/translations/de-DE.json +7 -4
  28. package/static/translations/en-US.json +7 -4
  29. package/static/translations/es-ES.json +6 -3
  30. package/static/translations/fi-FI.json +5 -2
  31. package/static/translations/fr-FR.json +7 -4
  32. package/static/translations/hu-HU.json +5 -2
  33. package/static/translations/it-IT.json +7 -4
  34. package/static/translations/ja-JP.json +6 -3
  35. package/static/translations/nl-NL.json +5 -2
  36. package/static/translations/no-NO.json +5 -2
  37. package/static/translations/pl-PL.json +5 -2
  38. package/static/translations/pt-BR.json +5 -2
  39. package/static/translations/pt-PT.json +5 -2
  40. package/static/translations/ro-RO.json +6 -3
  41. package/static/translations/ru-RU.json +5 -2
  42. package/static/translations/sv-SE.json +5 -2
  43. package/static/translations/tr-TR.json +6 -3
  44. package/static/translations/tsconfig.json +5 -2
  45. package/static/translations/uk-UA.json +5 -2
  46. package/utils/DataServiceExprUtils.js +38 -10
  47. package/utils/DxfUtils.js +192 -36
  48. package/utils/FeatureStyles.js +27 -12
  49. package/utils/FileImportUtils.js +137 -43
  50. package/utils/IdentifyExporters.js +305 -0
  51. package/utils/IdentifyUtils.js +98 -7
  52. package/utils/LayerUtils.js +27 -7
  53. package/utils/PermaLinkUtils.js +33 -50
@@ -257,50 +257,67 @@ var AttributeForm = /*#__PURE__*/function (_React$Component) {
257
257
  }
258
258
  }
259
259
  });
260
- _defineProperty(_this, "addRelationRecord", function (table) {
260
+ _defineProperty(_this, "addRelationRecord", function (dataset) {
261
261
  var initialProperties = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
262
- var newRelationValues = _objectSpread({}, _this.props.editContext.feature.relationValues);
263
- var editConfig = _this.props.editConfigs[_this.props.editContext.mapPrefix][table.split('.').slice(-1)];
262
+ var action = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
263
+ var layer = dataset.slice(_this.props.editContext.mapPrefix.length + 1);
264
+ var editConfig = _this.props.editConfigs[_this.props.editContext.mapPrefix][layer];
264
265
  getFeatureTemplate(editConfig, {
265
266
  type: "Feature",
266
267
  properties: _objectSpread({}, initialProperties)
267
268
  }, _this.props.iface, _this.props.editContext.mapPrefix, _this.props.map.projection, function (newRelFeature) {
268
- newRelFeature.__status__ = "empty";
269
+ newRelFeature.__status__ = "new";
269
270
  if (editConfig.geomType === null) {
270
271
  newRelFeature.geometry = null;
271
272
  }
272
273
  // If feature id is known, i.e. not when drawing new feature, set foreign key
273
274
  if (_this.props.editContext.action !== "Draw") {
274
- var relTable = _this.state.relationTables[table];
275
+ var relTable = _this.state.relationTables[dataset];
275
276
  var fkVal = relTable.pkField ? _this.props.editContext.feature.properties[relTable.pkField] : _this.props.editContext.feature.id;
276
277
  newRelFeature.properties[relTable.fkField] = fkVal;
277
278
  }
278
- newRelationValues[table] = _objectSpread({}, newRelationValues[table]);
279
- newRelationValues[table].features = newRelationValues[table].features.concat([newRelFeature]);
280
- var newFeature = _objectSpread(_objectSpread({}, _this.props.editContext.feature), {}, {
281
- relationValues: newRelationValues
282
- });
283
- _this.props.setEditContext(_this.props.editContext.id, {
284
- feature: newFeature,
285
- changed: true
286
- });
279
+ if (action) {
280
+ var childEdit = {
281
+ action: action,
282
+ editConfig: editConfig,
283
+ editContextId: ':' + dataset,
284
+ idx: null,
285
+ feature: newRelFeature,
286
+ finishCallback: _this.finishEditRelationRecord,
287
+ hideDelete: true
288
+ };
289
+ _this.setState({
290
+ childEdit: childEdit
291
+ });
292
+ } else {
293
+ var newRelationValues = _objectSpread({}, _this.props.editContext.feature.relationValues);
294
+ newRelationValues[dataset] = _objectSpread({}, newRelationValues[dataset]);
295
+ newRelationValues[dataset].features = newRelationValues[dataset].features.concat([newRelFeature]);
296
+ var newFeature = _objectSpread(_objectSpread({}, _this.props.editContext.feature), {}, {
297
+ relationValues: newRelationValues
298
+ });
299
+ _this.props.setEditContext(_this.props.editContext.id, {
300
+ feature: newFeature,
301
+ changed: true
302
+ });
303
+ }
287
304
  });
288
305
  });
289
- _defineProperty(_this, "reorderRelationRecord", function (table, idx, dir) {
290
- var nFeatures = _this.props.editContext.feature.relationValues[table].features.length;
306
+ _defineProperty(_this, "reorderRelationRecord", function (dataset, idx, dir) {
307
+ var nFeatures = _this.props.editContext.feature.relationValues[dataset].features.length;
291
308
  if (dir < 0 && idx === 0 || dir > 0 && idx >= nFeatures - 1) {
292
309
  return;
293
310
  }
294
311
  var newRelationValues = _objectSpread({}, _this.props.editContext.feature.relationValues);
295
- newRelationValues[table] = _objectSpread({}, newRelationValues[table]);
296
- var newFeatures = newRelationValues[table].features.slice(0);
312
+ newRelationValues[dataset] = _objectSpread({}, newRelationValues[dataset]);
313
+ var newFeatures = newRelationValues[dataset].features.slice(0);
297
314
  var offset = dir < 0 ? 0 : 1;
298
315
  newFeatures.splice(idx - 1 + offset, 2, newFeatures[idx + offset], newFeatures[idx - 1 + offset]);
299
316
  newFeatures[idx - 1 + offset].properties = _objectSpread({}, newFeatures[idx - 1 + offset].properties);
300
317
  newFeatures[idx + offset].properties = _objectSpread({}, newFeatures[idx + offset].properties);
301
- newFeatures[idx - 1 + offset].__status__ = ["new", "empty"].includes(newFeatures[idx - 1 + offset].__status__) ? "new" : "changed";
302
- newFeatures[idx + offset].__status__ = ["new", "empty"].includes(newFeatures[idx + offset].__status__) ? "new" : "changed";
303
- newRelationValues[table].features = newFeatures;
318
+ newFeatures[idx - 1 + offset].__status__ = newFeatures[idx - 1 + offset].__status__ === "new" ? "new" : "changed";
319
+ newFeatures[idx + offset].__status__ = newFeatures[idx + offset].__status__ === "new" ? "new" : "changed";
320
+ newRelationValues[dataset].features = newFeatures;
304
321
  var newFeature = _objectSpread(_objectSpread({}, _this.props.editContext.feature), {}, {
305
322
  relationValues: newRelationValues
306
323
  });
@@ -309,16 +326,16 @@ var AttributeForm = /*#__PURE__*/function (_React$Component) {
309
326
  changed: true
310
327
  });
311
328
  });
312
- _defineProperty(_this, "removeRelationRecord", function (table, idx) {
329
+ _defineProperty(_this, "removeRelationRecord", function (dataset, idx) {
313
330
  var newRelationValues = _objectSpread({}, _this.props.editContext.feature.relationValues);
314
- newRelationValues[table] = _objectSpread({}, newRelationValues[table]);
315
- newRelationValues[table].features = newRelationValues[table].features.slice(0);
316
- var fieldStatus = newRelationValues[table].features[idx].__status__ || "";
331
+ newRelationValues[dataset] = _objectSpread({}, newRelationValues[dataset]);
332
+ newRelationValues[dataset].features = newRelationValues[dataset].features.slice(0);
333
+ var fieldStatus = newRelationValues[dataset].features[idx].__status__ || "";
317
334
  // If field was new, delete it directly, else mark it as deleted
318
- if (["new", "empty"].includes(fieldStatus)) {
319
- newRelationValues[table].features.splice(idx, 1);
335
+ if (fieldStatus === "new") {
336
+ newRelationValues[dataset].features.splice(idx, 1);
320
337
  } else {
321
- newRelationValues[table].features[idx] = _objectSpread(_objectSpread({}, newRelationValues[table].features[idx]), {}, {
338
+ newRelationValues[dataset].features[idx] = _objectSpread(_objectSpread({}, newRelationValues[dataset].features[idx]), {}, {
322
339
  __status__: fieldStatus.startsWith("deleted") ? fieldStatus.substr(8) : "deleted:" + fieldStatus
323
340
  });
324
341
  }
@@ -330,13 +347,13 @@ var AttributeForm = /*#__PURE__*/function (_React$Component) {
330
347
  changed: true
331
348
  });
332
349
  });
333
- _defineProperty(_this, "updateRelationField", function (table, idx, key, value) {
350
+ _defineProperty(_this, "updateRelationField", function (dataset, idx, key, value) {
334
351
  var newRelationValues = _objectSpread({}, _this.props.editContext.feature.relationValues);
335
- newRelationValues[table] = _objectSpread({}, newRelationValues[table]);
336
- newRelationValues[table].features = newRelationValues[table].features.slice(0);
337
- newRelationValues[table].features[idx] = _objectSpread(_objectSpread({}, newRelationValues[table].features[idx]), {}, {
338
- properties: _objectSpread(_objectSpread({}, newRelationValues[table].features[idx].properties), {}, _defineProperty({}, key, value)),
339
- __status__: ["new", "empty"].includes(newRelationValues[table].features[idx].__status__) ? "new" : "changed"
352
+ newRelationValues[dataset] = _objectSpread({}, newRelationValues[dataset]);
353
+ newRelationValues[dataset].features = newRelationValues[dataset].features.slice(0);
354
+ newRelationValues[dataset].features[idx] = _objectSpread(_objectSpread({}, newRelationValues[dataset].features[idx]), {}, {
355
+ properties: _objectSpread(_objectSpread({}, newRelationValues[dataset].features[idx].properties), {}, _defineProperty({}, key, value)),
356
+ __status__: newRelationValues[dataset].features[idx].__status__ === "new" ? "new" : "changed"
340
357
  });
341
358
  var newFeature = _objectSpread(_objectSpread({}, _this.props.editContext.feature), {}, {
342
359
  relationValues: newRelationValues
@@ -346,19 +363,17 @@ var AttributeForm = /*#__PURE__*/function (_React$Component) {
346
363
  changed: true
347
364
  });
348
365
  });
349
- _defineProperty(_this, "editRelationRecord", function (action, layer, idx, displayField) {
350
- var dataset = _this.props.editContext.mapPrefix + "." + layer;
366
+ _defineProperty(_this, "editRelationRecord", function (dataset, idx) {
367
+ var layer = dataset.slice(_this.props.editContext.mapPrefix.length + 1);
351
368
  var editConfig = _this.props.editConfigs[_this.props.editContext.mapPrefix][layer];
352
- var feature = _this.props.editContext.feature.relationValues[dataset].features[idx];
369
+ var feature = _this.props.editContext.feature.relationValues[editConfig.editDataset].features[idx];
353
370
  var childEdit = {
354
- action: action,
371
+ action: feature.__status__ === 'new' ? 'Create' : 'Edit',
355
372
  editConfig: editConfig,
356
- editContextId: ':' + layer,
357
- dataset: dataset,
373
+ editContextId: ':' + dataset,
358
374
  idx: idx,
359
375
  feature: feature,
360
376
  finishCallback: _this.finishEditRelationRecord,
361
- displayField: displayField,
362
377
  hideDelete: true
363
378
  };
364
379
  _this.setState({
@@ -368,22 +383,22 @@ var AttributeForm = /*#__PURE__*/function (_React$Component) {
368
383
  _defineProperty(_this, "finishEditRelationRecord", function (feature) {
369
384
  _this.props.clearEditContext(_this.state.childEdit.editContextId, _this.props.editContext.id);
370
385
  if (feature) {
371
- var table = _this.state.childEdit.dataset;
372
- var idx = _this.state.childEdit.idx;
386
+ var _this$state$childEdit;
387
+ var dataset = _this.state.childEdit.editConfig.editDataset;
373
388
  var newRelationValues = _objectSpread({}, _this.props.editContext.feature.relationValues);
374
- newRelationValues[table] = _objectSpread({}, newRelationValues[table]);
375
- newRelationValues[table].features = newRelationValues[table].features.slice(0);
376
- newRelationValues[table].features[idx] = _objectSpread(_objectSpread({}, feature), {}, {
377
- properties: _objectSpread({}, feature.properties)
389
+ var idx = (_this$state$childEdit = _this.state.childEdit.idx) !== null && _this$state$childEdit !== void 0 ? _this$state$childEdit : newRelationValues[dataset].features.length;
390
+ newRelationValues[dataset] = _objectSpread({}, newRelationValues[dataset]);
391
+ newRelationValues[dataset].features = newRelationValues[dataset].features.slice(0);
392
+ newRelationValues[dataset].features[idx] = _objectSpread(_objectSpread({}, feature), {}, {
393
+ __status__: "changed"
378
394
  });
379
395
  // If feature id is known, i.e. not when drawing new feature, set foreign key
380
396
  var changed = _this.props.editContext.changed;
381
- var relTable = _this.state.relationTables[table];
397
+ var relTable = _this.state.relationTables[dataset];
382
398
  var fkVal = relTable.pkField ? _this.props.editContext.feature.properties[relTable.pkField] : _this.props.editContext.feature.id;
383
- var fkField = _this.state.relationTables[table].fkField;
399
+ var fkField = _this.state.relationTables[dataset].fkField;
384
400
  if (_this.props.editContext.action !== "Draw" && feature.properties[fkField] !== fkVal) {
385
- newRelationValues[table].features[idx].properties[fkField] = fkVal;
386
- newRelationValues[table].features[idx].__status__ = "changed";
401
+ newRelationValues[dataset].features[idx].properties = _objectSpread(_objectSpread({}, newRelationValues[dataset].features[idx].properties), {}, _defineProperty({}, fkField, fkVal));
387
402
  changed = true;
388
403
  }
389
404
  var newFeature = _objectSpread(_objectSpread({}, _this.props.editContext.feature), {}, {
@@ -586,9 +601,6 @@ var AttributeForm = /*#__PURE__*/function (_React$Component) {
586
601
  relationValues[datasetname].features[index].defaultedProperties = [].concat(_toConsumableArray(relationValues[datasetname].features[index].defaultedProperties || []), [field]);
587
602
  }
588
603
  relationValues[datasetname].features[index].properties[field] = value;
589
- if (relationValues[datasetname].features[index].__status__ === "empty") {
590
- relationValues[datasetname].features[index].__status__ = "new";
591
- }
592
604
  if (element.type === "file" && element.files.length > 0) {
593
605
  relationUploads[name] = element.files[0];
594
606
  relationValues[datasetname].features[index].properties[field] = "";
@@ -684,9 +696,7 @@ var AttributeForm = /*#__PURE__*/function (_React$Component) {
684
696
 
685
697
  // Set relation values CRS and sort index if necessary
686
698
  Object.keys(relationValues).forEach(function (relTable) {
687
- relationValues[relTable].features = relationValues[relTable].features.filter(function (relFeature) {
688
- return relFeature.__status__ !== "empty";
689
- }).map(function (relFeature, idx) {
699
+ relationValues[relTable].features = relationValues[relTable].features.map(function (relFeature, idx) {
690
700
  var newRelFeature = _objectSpread(_objectSpread({}, relFeature), {}, {
691
701
  crs: {
692
702
  type: "name",
@@ -857,7 +867,7 @@ var AttributeForm = /*#__PURE__*/function (_React$Component) {
857
867
  type: mimeString
858
868
  });
859
869
  });
860
- _defineProperty(_this, "startChildEdit", function (action, layer, featureId, updateField, displayField) {
870
+ _defineProperty(_this, "startChildEdit", function (action, layer, featureId, updateField) {
861
871
  var editConfig = _this.props.editConfigs[_this.props.editContext.mapPrefix][layer];
862
872
  if (!editConfig) {
863
873
  // eslint-disable-next-line
@@ -867,7 +877,6 @@ var AttributeForm = /*#__PURE__*/function (_React$Component) {
867
877
  action: action,
868
878
  editConfig: editConfig,
869
879
  editContextId: ':' + layer,
870
- displayField: displayField,
871
880
  featureId: featureId,
872
881
  updateField: updateField,
873
882
  finishCallback: _this.finishChildEdit,
@@ -56,6 +56,7 @@ import LayerUtils from '../utils/LayerUtils';
56
56
  import LocaleUtils from '../utils/LocaleUtils';
57
57
  import MapUtils from '../utils/MapUtils';
58
58
  import VectorLayerUtils from '../utils/VectorLayerUtils';
59
+ import ComboBox from './widgets/ComboBox';
59
60
  import FeaturesTable from './widgets/FeaturesTable';
60
61
  import './style/AttributeTableWidget.css';
61
62
  var AttributeTableWidget = /*#__PURE__*/function (_React$Component) {
@@ -215,7 +216,7 @@ var AttributeTableWidget = /*#__PURE__*/function (_React$Component) {
215
216
  var forceReload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
216
217
  var stateChange = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
217
218
  _this.setState(function (state) {
218
- var _this$props$filter$fi, _newState$curEditConf, _fieldMap$newState$fi, _fieldMap$newState$so, _newState$sortField;
219
+ var _this$props$layers$fi, _this$props$layers$fi2, _this$props$filter$fi, _newState$curEditConf, _fieldMap$newState$fi, _fieldMap$newState$so, _newState$sortField;
219
220
  selectedLayer = selectedLayer || state.selectedLayer;
220
221
  var _selectedLayer$split = selectedLayer.split("#"),
221
222
  _selectedLayer$split2 = _slicedToArray(_selectedLayer$split, 2),
@@ -223,27 +224,27 @@ var AttributeTableWidget = /*#__PURE__*/function (_React$Component) {
223
224
  layerName = _selectedLayer$split2[1];
224
225
  var newState = _objectSpread(_objectSpread({}, state), stateChange);
225
226
  var editConfig = _this.props.editConfigs[wmsName][layerName];
227
+ var fieldTranslations = (_this$props$layers$fi = (_this$props$layers$fi2 = _this.props.layers.find(function (layer) {
228
+ return layer.wms_name === wmsName;
229
+ })) === null || _this$props$layers$fi2 === void 0 || (_this$props$layers$fi2 = _this$props$layers$fi2.translations) === null || _this$props$layers$fi2 === void 0 || (_this$props$layers$fi2 = _this$props$layers$fi2.layers) === null || _this$props$layers$fi2 === void 0 || (_this$props$layers$fi2 = _this$props$layers$fi2[layerName]) === null || _this$props$layers$fi2 === void 0 ? void 0 : _this$props$layers$fi2.fields) !== null && _this$props$layers$fi !== void 0 ? _this$props$layers$fi : {};
226
230
  var fields = (_this.props.showDisplayFieldOnly ? editConfig.fields.filter(function (field) {
227
231
  return field.name === editConfig.displayField;
228
232
  }) : editConfig.fields.filter(function (field) {
229
233
  var _field$constraints;
230
234
  return _this.props.showHiddenFields || ((_field$constraints = field.constraints) === null || _field$constraints === void 0 ? void 0 : _field$constraints.hidden) !== true;
231
235
  })).map(function (field) {
236
+ var _fieldTranslations$fi;
232
237
  return _objectSpread(_objectSpread({}, field), {}, {
233
- name: _this.translateFieldName(field.name)
238
+ name: (_fieldTranslations$fi = fieldTranslations === null || fieldTranslations === void 0 ? void 0 : fieldTranslations[field.name]) !== null && _fieldTranslations$fi !== void 0 ? _fieldTranslations$fi : field.name
234
239
  });
235
240
  });
236
241
  if (selectedLayer !== state.loadedLayer) {
237
- var _this$props$layers$fi, _this$props$layers$fi2;
238
242
  KeyValCache.clear();
239
243
  FeatureCache.clear();
240
244
  Object.assign(newState, AttributeTableWidget.defaultState);
241
245
  newState.limitToExtent = state.limitToExtent;
242
246
  newState.curEditConfig = editConfig;
243
247
  newState.curFields = fields;
244
- newState.fieldTranslations = (_this$props$layers$fi = (_this$props$layers$fi2 = _this.props.layers.find(function (layer) {
245
- return layer.wms_name === wmsName;
246
- })) === null || _this$props$layers$fi2 === void 0 || (_this$props$layers$fi2 = _this$props$layers$fi2.translations) === null || _this$props$layers$fi2 === void 0 || (_this$props$layers$fi2 = _this$props$layers$fi2.layers) === null || _this$props$layers$fi2 === void 0 || (_this$props$layers$fi2 = _this$props$layers$fi2[layerName]) === null || _this$props$layers$fi2 === void 0 ? void 0 : _this$props$layers$fi2.fields) !== null && _this$props$layers$fi !== void 0 ? _this$props$layers$fi : {};
247
248
  }
248
249
  newState.selectedLayer = selectedLayer;
249
250
  newState.selectedFeatures = {};
@@ -706,10 +707,6 @@ var AttributeTableWidget = /*#__PURE__*/function (_React$Component) {
706
707
  }, options);
707
708
  }
708
709
  });
709
- _defineProperty(_this, "translateFieldName", function (fieldName) {
710
- var _this$state$fieldTran, _this$state$fieldTran2;
711
- return (_this$state$fieldTran = (_this$state$fieldTran2 = _this.state.fieldTranslations) === null || _this$state$fieldTran2 === void 0 ? void 0 : _this$state$fieldTran2[fieldName]) !== null && _this$state$fieldTran !== void 0 ? _this$state$fieldTran : fieldName;
712
- });
713
710
  _this.changedFiles = {};
714
711
  _this.state = AttributeTableWidget.defaultState;
715
712
  _this.table = null;
@@ -827,17 +824,17 @@ var AttributeTableWidget = /*#__PURE__*/function (_React$Component) {
827
824
  if (fieldConfig.constraints.keyvalrel) {
828
825
  values = KeyValCache.getSync(this.props.iface, fieldConfig.constraints.keyvalrel);
829
826
  }
830
- valueInput = /*#__PURE__*/React.createElement("select", {
827
+ valueInput = /*#__PURE__*/React.createElement(ComboBox, {
831
828
  className: "attribtable-filter-value",
832
829
  disabled: footbarDisabled,
833
- onChange: function onChange(ev) {
834
- return _this2.updateFilter("filterVal", ev.target.value);
830
+ onChange: function onChange(value) {
831
+ return _this2.updateFilter("filterVal", value);
835
832
  },
836
833
  value: this.state.filterVal
837
- }, /*#__PURE__*/React.createElement("option", {
834
+ }, /*#__PURE__*/React.createElement("div", {
838
835
  value: ""
839
836
  }, LocaleUtils.tr("common.select")), values.map(function (entry) {
840
- return /*#__PURE__*/React.createElement("option", {
837
+ return /*#__PURE__*/React.createElement("div", {
841
838
  key: entry.value,
842
839
  value: entry.value
843
840
  }, entry.label);
@@ -874,44 +871,46 @@ var AttributeTableWidget = /*#__PURE__*/function (_React$Component) {
874
871
  className: "attribtable-filter controlgroup"
875
872
  }, /*#__PURE__*/React.createElement(Icon, {
876
873
  icon: "filter"
877
- }), /*#__PURE__*/React.createElement("select", {
874
+ }), /*#__PURE__*/React.createElement(ComboBox, {
878
875
  disabled: footbarDisabled,
879
- onChange: function onChange(ev) {
880
- return _this2.updateFilter("filterField", ev.target.value);
876
+ onChange: function onChange(value) {
877
+ return _this2.updateFilter("filterField", value);
881
878
  },
882
879
  value: this.state.filterField
883
- }, /*#__PURE__*/React.createElement("option", {
880
+ }, /*#__PURE__*/React.createElement("div", {
884
881
  disabled: true,
885
882
  value: ""
886
- }, LocaleUtils.tr("common.select")), showIdColumn ? /*#__PURE__*/React.createElement("option", {
883
+ }, LocaleUtils.tr("common.select")), showIdColumn ? /*#__PURE__*/React.createElement("div", {
887
884
  value: "<id>"
888
- }, this.translateFieldName(primaryKey)) : null, this.state.curFields.map(function (field) {
885
+ }, this.state.curFields.find(function (field) {
886
+ return field.id === primaryKey;
887
+ }).name) : null, this.state.curFields.map(function (field) {
889
888
  if (field.id !== primaryKey) {
890
889
  return /*#__PURE__*/React.createElement("option", {
891
890
  key: field.id,
892
891
  value: field.id
893
- }, _this2.translateFieldName(field.name));
892
+ }, field.name);
894
893
  }
895
894
  return null;
896
- })), /*#__PURE__*/React.createElement("select", {
895
+ })), /*#__PURE__*/React.createElement(ComboBox, {
897
896
  disabled: footbarDisabled,
898
- onChange: function onChange(ev) {
899
- return _this2.updateFilter("filterOp", ev.target.value);
897
+ onChange: function onChange(value) {
898
+ return _this2.updateFilter("filterOp", value);
900
899
  },
901
900
  value: this.state.filterOp
902
- }, /*#__PURE__*/React.createElement("option", {
901
+ }, /*#__PURE__*/React.createElement("div", {
903
902
  value: "~"
904
- }, "~"), /*#__PURE__*/React.createElement("option", {
903
+ }, "~"), /*#__PURE__*/React.createElement("div", {
905
904
  value: "="
906
- }, "="), /*#__PURE__*/React.createElement("option", {
905
+ }, "="), /*#__PURE__*/React.createElement("div", {
907
906
  value: "!="
908
- }, "!="), /*#__PURE__*/React.createElement("option", {
907
+ }, "!="), /*#__PURE__*/React.createElement("div", {
909
908
  value: ">"
910
- }, ">"), /*#__PURE__*/React.createElement("option", {
909
+ }, ">"), /*#__PURE__*/React.createElement("div", {
911
910
  value: ">="
912
- }, ">="), /*#__PURE__*/React.createElement("option", {
911
+ }, ">="), /*#__PURE__*/React.createElement("div", {
913
912
  value: "<="
914
- }, "<="), /*#__PURE__*/React.createElement("option", {
913
+ }, "<="), /*#__PURE__*/React.createElement("div", {
915
914
  value: "<"
916
915
  }, "<")), valueInput), this.props.showLimitToExtent ? /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("label", null, /*#__PURE__*/React.createElement("input", {
917
916
  checked: this.state.limitToExtent,
@@ -988,19 +987,19 @@ var AttributeTableWidget = /*#__PURE__*/function (_React$Component) {
988
987
  className: "AttributeTable"
989
988
  }, /*#__PURE__*/React.createElement("div", {
990
989
  className: "attribtable-toolbar"
991
- }, this.props.showLayerSelection ? /*#__PURE__*/React.createElement("select", {
990
+ }, this.props.showLayerSelection ? /*#__PURE__*/React.createElement(ComboBox, {
992
991
  disabled: loading || editing,
993
- onChange: function onChange(ev) {
992
+ onChange: function onChange(value) {
994
993
  return _this2.setState({
995
- selectedLayer: ev.target.value
994
+ selectedLayer: value
996
995
  });
997
996
  },
998
997
  value: this.state.selectedLayer || ""
999
- }, /*#__PURE__*/React.createElement("option", {
998
+ }, /*#__PURE__*/React.createElement("div", {
1000
999
  disabled: true,
1001
1000
  value: ""
1002
1001
  }, LocaleUtils.tr("common.selectlayer")), editLayers.map(function (entry) {
1003
- return /*#__PURE__*/React.createElement("option", {
1002
+ return /*#__PURE__*/React.createElement("div", {
1004
1003
  key: entry.value,
1005
1004
  value: entry.value
1006
1005
  }, entry.title);
@@ -1128,7 +1127,6 @@ _defineProperty(AttributeTableWidget, "defaultState", {
1128
1127
  loadedLayer: "",
1129
1128
  curEditConfig: null,
1130
1129
  curFields: null,
1131
- fieldTranslations: null,
1132
1130
  features: [],
1133
1131
  allFeatures: null,
1134
1132
  totFeatureCount: 0,