qwc2 2026.6.4 → 2026.6.9
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.
- package/components/AttributeForm.js +44 -45
- package/components/QtDesignerForm.js +10 -5
- package/package.json +1 -1
- package/plugins/SensorThingsTool.js +11 -3
- package/plugins/map/LocateSupport.js +16 -2
- package/plugins/map3d/Identify3D.js +2 -2
- package/plugins/style/SensorThingsTool.css +1 -0
- package/utils/EditingInterface.js +4 -6
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
3
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
4
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
5
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
2
6
|
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
3
7
|
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
8
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
4
9
|
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
|
|
5
10
|
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
|
|
6
|
-
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
7
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
8
|
-
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
9
11
|
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
10
|
-
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
11
|
-
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
12
12
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
13
13
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
14
14
|
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
@@ -226,30 +226,25 @@ var AttributeForm = /*#__PURE__*/function (_React$Component) {
|
|
|
226
226
|
_defineProperty(_this, "loadRelationValues", function (feature, callback) {
|
|
227
227
|
if (!isEmpty(_this.state.relationTables)) {
|
|
228
228
|
if (feature.id) {
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
entry
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
} else {
|
|
236
|
-
return name + ":" + entry.fk;
|
|
237
|
-
}
|
|
238
|
-
}).join(",");
|
|
229
|
+
// Existing feature, load relations from data service
|
|
230
|
+
var relTables = Object.values(_this.state.relationTables).map(function (entry) {
|
|
231
|
+
return _objectSpread(_objectSpread({}, entry), {}, {
|
|
232
|
+
fkVal: entry.pkField ? feature.properties[entry.pkField] : feature.id
|
|
233
|
+
});
|
|
234
|
+
});
|
|
239
235
|
var mapEditConfigs = _this.props.editConfigs[_this.props.editContext.mapPrefix];
|
|
240
|
-
_this.props.iface.getRelations(
|
|
236
|
+
_this.props.iface.getRelations(relTables, _this.props.map.projection, mapEditConfigs, function (relationValues) {
|
|
241
237
|
var newFeature = _objectSpread(_objectSpread({}, feature), {}, {
|
|
242
238
|
relationValues: relationValues
|
|
243
239
|
});
|
|
244
240
|
callback(newFeature);
|
|
245
241
|
});
|
|
246
242
|
} else {
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
entry
|
|
251
|
-
|
|
252
|
-
fk: entry.fk,
|
|
243
|
+
// New feature, create relationValues skeleton
|
|
244
|
+
var relationValues = _objectSpread(_objectSpread({}, Object.values(_this.state.relationTables).reduce(function (res, entry) {
|
|
245
|
+
return _objectSpread(_objectSpread({}, res), {}, _defineProperty({}, entry.table, {
|
|
246
|
+
fk: entry.fkField,
|
|
247
|
+
pk: entry.pkField,
|
|
253
248
|
features: []
|
|
254
249
|
}));
|
|
255
250
|
}, {})), feature.relationValues);
|
|
@@ -273,7 +268,9 @@ var AttributeForm = /*#__PURE__*/function (_React$Component) {
|
|
|
273
268
|
}
|
|
274
269
|
// If feature id is known, i.e. not when drawing new feature, set foreign key
|
|
275
270
|
if (_this.props.editContext.action !== "Draw") {
|
|
276
|
-
|
|
271
|
+
var relTable = _this.state.relationTables[table];
|
|
272
|
+
var fkVal = relTable.pkField ? _this.props.editContext.feature.properties[relTable.pkField] : _this.props.editContext.feature.id;
|
|
273
|
+
newRelFeature.properties[relTable.fkField] = fkVal;
|
|
277
274
|
}
|
|
278
275
|
newRelationValues[table] = _objectSpread({}, newRelationValues[table]);
|
|
279
276
|
newRelationValues[table].features = newRelationValues[table].features.concat([newRelFeature]);
|
|
@@ -378,9 +375,11 @@ var AttributeForm = /*#__PURE__*/function (_React$Component) {
|
|
|
378
375
|
});
|
|
379
376
|
// If feature id is known, i.e. not when drawing new feature, set foreign key
|
|
380
377
|
var changed = _this.props.editContext.changed;
|
|
378
|
+
var relTable = _this.state.relationTables[table];
|
|
379
|
+
var fkVal = relTable.pkField ? _this.props.editContext.feature.properties[relTable.pkField] : _this.props.editContext.feature.id;
|
|
381
380
|
var fk = _this.state.relationTables[table].fk;
|
|
382
|
-
if (_this.props.editContext.action !== "Draw" && feature.properties[fk] !==
|
|
383
|
-
newRelationValues[table].features[idx].properties[fk] =
|
|
381
|
+
if (_this.props.editContext.action !== "Draw" && feature.properties[fk] !== fkVal) {
|
|
382
|
+
newRelationValues[table].features[idx].properties[fk] = fkVal;
|
|
384
383
|
newRelationValues[table].features[idx].__status__ = "changed";
|
|
385
384
|
changed = true;
|
|
386
385
|
}
|
|
@@ -455,10 +454,10 @@ var AttributeForm = /*#__PURE__*/function (_React$Component) {
|
|
|
455
454
|
parseExpressionsAsync(constraintExpressions, feature, _this.props.editContext.editConfig, _this.props.iface, _this.props.editContext.mapPrefix, _this.props.map.projection, false).then(function (result) {
|
|
456
455
|
var valid = _this.form.checkValidity();
|
|
457
456
|
var reasons = [];
|
|
458
|
-
Object.entries(result).forEach(function (
|
|
459
|
-
var
|
|
460
|
-
key =
|
|
461
|
-
value =
|
|
457
|
+
Object.entries(result).forEach(function (_ref) {
|
|
458
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
459
|
+
key = _ref2[0],
|
|
460
|
+
value = _ref2[1];
|
|
462
461
|
var element = _this.form.elements.namedItem(key);
|
|
463
462
|
if (element) {
|
|
464
463
|
if (value === false) {
|
|
@@ -648,10 +647,10 @@ var AttributeForm = /*#__PURE__*/function (_React$Component) {
|
|
|
648
647
|
delete feature.properties[key];
|
|
649
648
|
}
|
|
650
649
|
});
|
|
651
|
-
Object.entries(relationValues).forEach(function (
|
|
652
|
-
var
|
|
653
|
-
dataset =
|
|
654
|
-
entry =
|
|
650
|
+
Object.entries(relationValues).forEach(function (_ref3) {
|
|
651
|
+
var _ref4 = _slicedToArray(_ref3, 2),
|
|
652
|
+
dataset = _ref4[0],
|
|
653
|
+
entry = _ref4[1];
|
|
655
654
|
var _dataset$split = dataset.split(".", 2),
|
|
656
655
|
_dataset$split2 = _slicedToArray(_dataset$split, 2),
|
|
657
656
|
mapName = _dataset$split2[0],
|
|
@@ -682,11 +681,11 @@ var AttributeForm = /*#__PURE__*/function (_React$Component) {
|
|
|
682
681
|
}
|
|
683
682
|
}
|
|
684
683
|
});
|
|
685
|
-
var
|
|
684
|
+
var sortField = _this.state.relationTables[relTable].sortField;
|
|
686
685
|
var noreorder = _this.state.relationTables[relTable].noreorder;
|
|
687
|
-
if (
|
|
688
|
-
newRelFeature.__status__ = feature.__status__ || (newRelFeature.properties[
|
|
689
|
-
newRelFeature.properties[
|
|
686
|
+
if (sortField && !noreorder) {
|
|
687
|
+
newRelFeature.__status__ = feature.__status__ || (newRelFeature.properties[sortField] !== idx ? "changed" : "");
|
|
688
|
+
newRelFeature.properties[sortField] = idx;
|
|
690
689
|
}
|
|
691
690
|
return newRelFeature;
|
|
692
691
|
});
|
|
@@ -694,16 +693,16 @@ var AttributeForm = /*#__PURE__*/function (_React$Component) {
|
|
|
694
693
|
feature.relationValues = relationValues;
|
|
695
694
|
var featureData = new FormData();
|
|
696
695
|
featureData.set('feature', JSON.stringify(feature));
|
|
697
|
-
Object.entries(featureUploads).forEach(function (
|
|
698
|
-
var
|
|
699
|
-
key =
|
|
700
|
-
value =
|
|
696
|
+
Object.entries(featureUploads).forEach(function (_ref5) {
|
|
697
|
+
var _ref6 = _slicedToArray(_ref5, 2),
|
|
698
|
+
key = _ref6[0],
|
|
699
|
+
value = _ref6[1];
|
|
701
700
|
return featureData.set('file:' + key, value);
|
|
702
701
|
});
|
|
703
|
-
Object.entries(relationUploads).forEach(function (
|
|
704
|
-
var
|
|
705
|
-
key =
|
|
706
|
-
value =
|
|
702
|
+
Object.entries(relationUploads).forEach(function (_ref7) {
|
|
703
|
+
var _ref8 = _slicedToArray(_ref7, 2),
|
|
704
|
+
key = _ref8[0],
|
|
705
|
+
value = _ref8[1];
|
|
707
706
|
return featureData.set('relfile:' + _this.props.editContext.mapPrefix + "." + key, value);
|
|
708
707
|
});
|
|
709
708
|
if (_this.state.captchaResponse) {
|
|
@@ -401,7 +401,7 @@ var QtDesignerForm = /*#__PURE__*/function (_React$Component) {
|
|
|
401
401
|
})));
|
|
402
402
|
} else if (widget["class"] === "QTextEdit" || widget["class"] === "QTextBrowser" || widget["class"] === "QPlainTextEdit") {
|
|
403
403
|
var _feature$properties$w3, _feature$properties3;
|
|
404
|
-
if (((_feature$properties$w3 = (_feature$properties3 = feature.properties) === null || _feature$properties3 === void 0 ? void 0 : _feature$properties3[widget.name]) !== null && _feature$properties$w3 !== void 0 ? _feature$properties$w3 : null) === null) {
|
|
404
|
+
if (value === "" && ((_feature$properties$w3 = (_feature$properties3 = feature.properties) === null || _feature$properties3 === void 0 ? void 0 : _feature$properties3[widget.name]) !== null && _feature$properties$w3 !== void 0 ? _feature$properties$w3 : null) === null) {
|
|
405
405
|
var _ConfigUtils$getConfi;
|
|
406
406
|
value = (_ConfigUtils$getConfi = ConfigUtils.getConfigProp("editTextNullValue")) !== null && _ConfigUtils$getConfi !== void 0 ? _ConfigUtils$getConfi : "";
|
|
407
407
|
}
|
|
@@ -448,7 +448,7 @@ var QtDesignerForm = /*#__PURE__*/function (_React$Component) {
|
|
|
448
448
|
var _feature$properties$w4, _feature$properties5;
|
|
449
449
|
if (fieldConstraints.prec !== undefined && typeof value === 'number') {
|
|
450
450
|
value = value.toFixed(fieldConstraints.prec);
|
|
451
|
-
} else if (((_feature$properties$w4 = (_feature$properties5 = feature.properties) === null || _feature$properties5 === void 0 ? void 0 : _feature$properties5[widget.name]) !== null && _feature$properties$w4 !== void 0 ? _feature$properties$w4 : null) === null) {
|
|
451
|
+
} else if (value === "" && ((_feature$properties$w4 = (_feature$properties5 = feature.properties) === null || _feature$properties5 === void 0 ? void 0 : _feature$properties5[widget.name]) !== null && _feature$properties$w4 !== void 0 ? _feature$properties$w4 : null) === null) {
|
|
452
452
|
var _ConfigUtils$getConfi2;
|
|
453
453
|
value = (_ConfigUtils$getConfi2 = ConfigUtils.getConfigProp("editTextNullValue")) !== null && _ConfigUtils$getConfi2 !== void 0 ? _ConfigUtils$getConfi2 : "";
|
|
454
454
|
}
|
|
@@ -1034,10 +1034,15 @@ var QtDesignerForm = /*#__PURE__*/function (_React$Component) {
|
|
|
1034
1034
|
}
|
|
1035
1035
|
var parts = widget.name.split("__");
|
|
1036
1036
|
if (parts.length >= 3 && parts[0] === "nrel") {
|
|
1037
|
+
var _this$props$editConfi2, _this$props$editConfi3;
|
|
1037
1038
|
relationTables[_this.props.mapPrefix + "." + parts[1]] = {
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1039
|
+
table: _this.props.mapPrefix + "." + parts[1],
|
|
1040
|
+
fkField: parts[2],
|
|
1041
|
+
sortField: parts[3] || null,
|
|
1042
|
+
noreorder: parts[4] || false,
|
|
1043
|
+
pkField: (_this$props$editConfi2 = (_this$props$editConfi3 = _this.props.editConfig.reltables.find(function (entry) {
|
|
1044
|
+
return entry.id === widget.name;
|
|
1045
|
+
})) === null || _this$props$editConfi3 === void 0 ? void 0 : _this$props$editConfi3.referencedField) !== null && _this$props$editConfi2 !== void 0 ? _this$props$editConfi2 : null
|
|
1041
1046
|
};
|
|
1042
1047
|
}
|
|
1043
1048
|
return verticalFill;
|
package/package.json
CHANGED
|
@@ -1713,7 +1713,8 @@ var SensorThingsTool = /*#__PURE__*/function (_React$Component) {
|
|
|
1713
1713
|
showDatastreamsFilterWindow: false
|
|
1714
1714
|
});
|
|
1715
1715
|
},
|
|
1716
|
-
title: LocaleUtils.tr("sensorthingstool.datastreamsFilter.title")
|
|
1716
|
+
title: LocaleUtils.tr("sensorthingstool.datastreamsFilter.title"),
|
|
1717
|
+
usePortal: false
|
|
1717
1718
|
}, /*#__PURE__*/React.createElement("div", {
|
|
1718
1719
|
className: "sensor-things-dialog-body",
|
|
1719
1720
|
role: "body"
|
|
@@ -2070,6 +2071,7 @@ var SensorThingsTool = /*#__PURE__*/function (_React$Component) {
|
|
|
2070
2071
|
showWindow: false,
|
|
2071
2072
|
pickGeom: null
|
|
2072
2073
|
});
|
|
2074
|
+
_this.props.removeLayer("sensorThingsSelection");
|
|
2073
2075
|
});
|
|
2074
2076
|
_defineProperty(_this, "initPeriod", function () {
|
|
2075
2077
|
if (_this.state.graph.x.min === null) {
|
|
@@ -2225,6 +2227,11 @@ var SensorThingsTool = /*#__PURE__*/function (_React$Component) {
|
|
|
2225
2227
|
}
|
|
2226
2228
|
var sensor = datastream.Sensor;
|
|
2227
2229
|
var observedProperty = datastream.ObservedProperty;
|
|
2230
|
+
var unitOfMeasurement = datastream.unitOfMeasurement || {};
|
|
2231
|
+
if (unitOfMeasurement.symbol === undefined || unitOfMeasurement.symbol === null) {
|
|
2232
|
+
// set empty string as dummy symbol if missing
|
|
2233
|
+
unitOfMeasurement.symbol = "";
|
|
2234
|
+
}
|
|
2228
2235
|
datastreamsLookup[datastreamId] = {
|
|
2229
2236
|
locationId: location['@iot.id'],
|
|
2230
2237
|
thing: {
|
|
@@ -2245,7 +2252,7 @@ var SensorThingsTool = /*#__PURE__*/function (_React$Component) {
|
|
|
2245
2252
|
id: datastreamId,
|
|
2246
2253
|
name: datastream.name,
|
|
2247
2254
|
description: datastream.description,
|
|
2248
|
-
unitOfMeasurement:
|
|
2255
|
+
unitOfMeasurement: unitOfMeasurement,
|
|
2249
2256
|
phenomenonTime: datastream.phenomenonTime,
|
|
2250
2257
|
period: {
|
|
2251
2258
|
begin: periodBegin,
|
|
@@ -3081,7 +3088,8 @@ var SensorThingsTool = /*#__PURE__*/function (_React$Component) {
|
|
|
3081
3088
|
onClose: function onClose() {
|
|
3082
3089
|
return _this3.props.setCurrentTask(null);
|
|
3083
3090
|
},
|
|
3084
|
-
title: LocaleUtils.tr("sensorthingstool.title")
|
|
3091
|
+
title: LocaleUtils.tr("sensorthingstool.title"),
|
|
3092
|
+
usePortal: false
|
|
3085
3093
|
}, this.renderBody()), this.renderLocationSelectPopup(), this.renderLocationInfoWindow(), this.renderDatastreamsFilterWindow(), this.renderDatastreamInfoWindow(), this.renderDatastreamTableWindow(), /*#__PURE__*/React.createElement(MapSelection, {
|
|
3086
3094
|
active: this.state.locationPickingActive,
|
|
3087
3095
|
cursor: "crosshair",
|
|
@@ -29,8 +29,10 @@ import { connect } from 'react-redux';
|
|
|
29
29
|
import ol from 'openlayers';
|
|
30
30
|
import PropTypes from 'prop-types';
|
|
31
31
|
import { changeLocateState, changeLocatePosition, onLocateError } from '../../actions/locate';
|
|
32
|
+
import { zoomToPoint } from '../../actions/map';
|
|
32
33
|
import CoordinatesUtils from '../../utils/CoordinatesUtils';
|
|
33
34
|
import LocaleUtils from '../../utils/LocaleUtils';
|
|
35
|
+
import MapUtils from '../../utils/MapUtils';
|
|
34
36
|
import './style/LocateSupport.css';
|
|
35
37
|
|
|
36
38
|
/**
|
|
@@ -218,6 +220,12 @@ var LocateSupport = /*#__PURE__*/function (_React$Component) {
|
|
|
218
220
|
this.requestedMode = "DISABLED";
|
|
219
221
|
this.stop();
|
|
220
222
|
}
|
|
223
|
+
if (newState === "FOLLOWING" && oldState !== "FOLLOWING" && this.props.followScale && this.props.scales) {
|
|
224
|
+
var mapPos = this.geolocate.getPosition();
|
|
225
|
+
if (mapPos) {
|
|
226
|
+
this.props.zoomToPoint(mapPos, MapUtils.computeZoom(this.props.scales, this.props.followScale), this.props.projection);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
221
229
|
}
|
|
222
230
|
if (this.props.projection !== prevProps.projection) {
|
|
223
231
|
this.geolocate.setProjection(this.props.projection);
|
|
@@ -235,12 +243,15 @@ _defineProperty(LocateSupport, "propTypes", {
|
|
|
235
243
|
changeLocateState: PropTypes.func,
|
|
236
244
|
/** Whether to draw an accuracy circle around the location point. */
|
|
237
245
|
drawCircle: PropTypes.bool,
|
|
246
|
+
/** Scale denominator to zoom to when entering follow mode. If not set, the map zoom level is not changed. */
|
|
247
|
+
followScale: PropTypes.number,
|
|
238
248
|
locateState: PropTypes.object,
|
|
239
249
|
map: PropTypes.object,
|
|
240
250
|
/** Whether to display the accuracy in meters (`true`) or in feet (`false`). */
|
|
241
251
|
metric: PropTypes.bool,
|
|
242
252
|
onLocateError: PropTypes.func,
|
|
243
253
|
projection: PropTypes.string,
|
|
254
|
+
scales: PropTypes.arrayOf(PropTypes.number),
|
|
244
255
|
/** Whether to show a popup displaying accuracy information when clicking on the location point. */
|
|
245
256
|
showPopup: PropTypes.bool,
|
|
246
257
|
/** The geolocation startup mode. Either `DISABLED`, `ENABLED` or `FOLLOWING`. */
|
|
@@ -249,7 +260,8 @@ _defineProperty(LocateSupport, "propTypes", {
|
|
|
249
260
|
/** Whether to stop following when the map is dragged. */
|
|
250
261
|
stopFollowingOnDrag: PropTypes.bool,
|
|
251
262
|
/** Tracking options, as documented in the [HTML5 Geolocation spec](https://www.w3.org/TR/geolocation-API/#position_options_interface) */
|
|
252
|
-
trackingOptions: PropTypes.object
|
|
263
|
+
trackingOptions: PropTypes.object,
|
|
264
|
+
zoomToPoint: PropTypes.func
|
|
253
265
|
});
|
|
254
266
|
_defineProperty(LocateSupport, "defaultProps", {
|
|
255
267
|
drawCircle: true,
|
|
@@ -266,10 +278,12 @@ _defineProperty(LocateSupport, "defaultProps", {
|
|
|
266
278
|
export default connect(function (state) {
|
|
267
279
|
return {
|
|
268
280
|
locateState: state.locate,
|
|
281
|
+
scales: state.map.scales,
|
|
269
282
|
startupParams: state.localConfig.startupParams
|
|
270
283
|
};
|
|
271
284
|
}, {
|
|
272
285
|
changeLocateState: changeLocateState,
|
|
273
286
|
changeLocatePosition: changeLocatePosition,
|
|
274
|
-
onLocateError: onLocateError
|
|
287
|
+
onLocateError: onLocateError,
|
|
288
|
+
zoomToPoint: zoomToPoint
|
|
275
289
|
})(LocateSupport);
|
|
@@ -93,10 +93,10 @@ var Identify3D = /*#__PURE__*/function (_React$Component) {
|
|
|
93
93
|
var picks = [];
|
|
94
94
|
Object.values(_this.props.sceneContext.objectTree).forEach(function (entry) {
|
|
95
95
|
var _object$tiles;
|
|
96
|
-
|
|
96
|
+
var object = _this.props.sceneContext.getSceneObject(entry.objectId);
|
|
97
|
+
if (!entry.objectId || !_this.props.sceneContext.objectIsVisible(entry.objectId) || !object) {
|
|
97
98
|
return;
|
|
98
99
|
}
|
|
99
|
-
var object = _this.props.sceneContext.getSceneObject(entry.objectId);
|
|
100
100
|
if ((_object$tiles = object.tiles) !== null && _object$tiles !== void 0 && _object$tiles.raycast) {
|
|
101
101
|
var intersections = [];
|
|
102
102
|
object.tiles.raycast(raycaster, intersections);
|
|
@@ -371,18 +371,16 @@ var EditingInterface = {
|
|
|
371
371
|
},
|
|
372
372
|
/**
|
|
373
373
|
* Queries relation values of a feature
|
|
374
|
-
* @param
|
|
375
|
-
* @param featureId The feature ID
|
|
374
|
+
* @param tables List of the form `[{"table": "<table>", "fkField": "<fk_field_name>", "fkVal": "<fk_val>", "sortCol": "<sort_col>", "pkField": "<pk_field>"}]`
|
|
376
375
|
* @param mapCrs The CRS of the map, as an EPSG code
|
|
377
|
-
* @param tables Comma separated string of relation table references in the form `<table_name>:<fk_name>:<sort_col>`
|
|
378
376
|
* @param editConfigs The theme editConfig block, containing all theme dataset edit configs
|
|
379
377
|
* @param callback Callback invoked with the relation values, taking `{<tablename>: {<relation_values>}}` on success and `{}` on failure
|
|
380
378
|
*/
|
|
381
|
-
getRelations: function getRelations(
|
|
379
|
+
getRelations: function getRelations(tables, mapCrs, editConfigs, callback) {
|
|
382
380
|
var editServiceUrl = ConfigUtils.getConfigProp("editServiceUrl").replace(/\/$/, '');
|
|
383
|
-
var req = editServiceUrl + '/'
|
|
381
|
+
var req = editServiceUrl + '/relations';
|
|
384
382
|
var params = {
|
|
385
|
-
tables: tables,
|
|
383
|
+
tables: JSON.stringify(tables),
|
|
386
384
|
crs: mapCrs
|
|
387
385
|
};
|
|
388
386
|
var headers = {
|