@smartbit4all/ng-client 4.2.29 → 4.2.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.
- package/esm2022/lib/smart-map/abstract-map.mjs +43 -5
- package/esm2022/lib/smart-map/api/model/gPSRoute.mjs +2 -0
- package/esm2022/lib/smart-map/api/model/geoMapChange.mjs +1 -1
- package/esm2022/lib/smart-map/api/model/geoMapDataSourceDescriptor.mjs +1 -1
- package/esm2022/lib/smart-map/api/model/geoMapDataSourceType.mjs +2 -1
- package/esm2022/lib/smart-map/api/model/geoMapEditingSession.mjs +2 -0
- package/esm2022/lib/smart-map/api/model/geoMapInteraction.mjs +1 -1
- package/esm2022/lib/smart-map/api/model/geoMapItem.mjs +1 -1
- package/esm2022/lib/smart-map/api/model/geoMapModel.mjs +1 -1
- package/esm2022/lib/smart-map/api/model/geoMapOperationMode.mjs +1 -2
- package/esm2022/lib/smart-map/api/model/geoMapServerModel.mjs +1 -1
- package/esm2022/lib/smart-map/api/model/geoMapViewState.mjs +1 -1
- package/esm2022/lib/smart-map/api/model/models.mjs +3 -1
- package/esm2022/lib/smart-map/impl/google-map.mjs +6 -5
- package/esm2022/lib/smart-map/impl/leaflet-map.mjs +113 -14
- package/esm2022/lib/smart-map/smart-map.component.mjs +72 -47
- package/esm2022/lib/smart-map/smart-map.types.mjs +1 -1
- package/fesm2022/smartbit4all-ng-client.mjs +230 -67
- package/fesm2022/smartbit4all-ng-client.mjs.map +1 -1
- package/lib/smart-map/abstract-map.d.ts +9 -5
- package/lib/smart-map/api/model/gPSRoute.d.ts +21 -0
- package/lib/smart-map/api/model/geoMapChange.d.ts +2 -0
- package/lib/smart-map/api/model/geoMapDataSourceDescriptor.d.ts +2 -0
- package/lib/smart-map/api/model/geoMapDataSourceType.d.ts +2 -1
- package/lib/smart-map/api/model/geoMapEditingSession.d.ts +17 -0
- package/lib/smart-map/api/model/geoMapInteraction.d.ts +2 -0
- package/lib/smart-map/api/model/geoMapItem.d.ts +2 -1
- package/lib/smart-map/api/model/geoMapModel.d.ts +0 -1
- package/lib/smart-map/api/model/geoMapOperationMode.d.ts +1 -2
- package/lib/smart-map/api/model/geoMapServerModel.d.ts +0 -3
- package/lib/smart-map/api/model/geoMapViewState.d.ts +2 -0
- package/lib/smart-map/api/model/models.d.ts +2 -0
- package/lib/smart-map/impl/google-map.d.ts +1 -0
- package/lib/smart-map/impl/leaflet-map.d.ts +2 -0
- package/lib/smart-map/smart-map.component.d.ts +5 -1
- package/lib/smart-map/smart-map.types.d.ts +13 -0
- package/package.json +1 -1
- package/smartbit4all-ng-client-4.2.31.tgz +0 -0
- package/smartbit4all-ng-client-4.2.29.tgz +0 -0
|
@@ -15064,6 +15064,7 @@ var GeoMapDataSourceType;
|
|
|
15064
15064
|
GeoMapDataSourceType["STORED_COLLECTION"] = "STORED_COLLECTION";
|
|
15065
15065
|
GeoMapDataSourceType["SEARCH_INDEX"] = "SEARCH_INDEX";
|
|
15066
15066
|
GeoMapDataSourceType["INVOCATION_REQUEST"] = "INVOCATION_REQUEST";
|
|
15067
|
+
GeoMapDataSourceType["INLINE"] = "INLINE";
|
|
15067
15068
|
})(GeoMapDataSourceType || (GeoMapDataSourceType = {}));
|
|
15068
15069
|
|
|
15069
15070
|
/**
|
|
@@ -15099,7 +15100,6 @@ var GeoMapOperationMode;
|
|
|
15099
15100
|
(function (GeoMapOperationMode) {
|
|
15100
15101
|
GeoMapOperationMode["ACTION"] = "ACTION";
|
|
15101
15102
|
GeoMapOperationMode["SELECTION"] = "SELECTION";
|
|
15102
|
-
GeoMapOperationMode["PLACEMENT"] = "PLACEMENT";
|
|
15103
15103
|
})(GeoMapOperationMode || (GeoMapOperationMode = {}));
|
|
15104
15104
|
|
|
15105
15105
|
/**
|
|
@@ -15181,24 +15181,31 @@ class AbstractMap {
|
|
|
15181
15181
|
this.itemFactory = itemFactory;
|
|
15182
15182
|
this.model = input.required();
|
|
15183
15183
|
this.items = input.required();
|
|
15184
|
+
this.editingSession = input();
|
|
15184
15185
|
this.onMapClick = new EventEmitter();
|
|
15185
15186
|
this.onOverlayClick = new EventEmitter();
|
|
15186
15187
|
this.onMapDragEnd = new EventEmitter();
|
|
15187
15188
|
this.onZoomChanged = new EventEmitter();
|
|
15189
|
+
this.onEditingOverlayClick = new EventEmitter();
|
|
15190
|
+
this.onEditingOverlayDrag = new EventEmitter();
|
|
15188
15191
|
this.selection = computed(() => this.items()
|
|
15189
15192
|
.filter((it) => !!it.selected)
|
|
15190
15193
|
.map((it) => it.id));
|
|
15191
|
-
this.pending = computed(() => this.model().pendingItems);
|
|
15192
15194
|
this.operationMode = computed(() => this.model().viewState?.operationMode ?? GeoMapOperationMode.ACTION);
|
|
15193
15195
|
this.overlays = new Map();
|
|
15196
|
+
this.editingOverlays = new Map();
|
|
15194
15197
|
this.onItemsChanged = this.initChangeEffect();
|
|
15195
15198
|
}
|
|
15196
15199
|
initChangeEffect() {
|
|
15197
15200
|
return effect((onCleanup) => {
|
|
15198
15201
|
const items = this.items();
|
|
15202
|
+
const editingSession = this.editingSession();
|
|
15199
15203
|
const present = new Set(this.overlays.keys());
|
|
15204
|
+
const editingPresent = new Set(this.editingOverlays.keys());
|
|
15200
15205
|
const toAdd = [];
|
|
15201
15206
|
const toRemove = [];
|
|
15207
|
+
const editingToAdd = [];
|
|
15208
|
+
const editingtoRemove = [];
|
|
15202
15209
|
for (const item of items) {
|
|
15203
15210
|
if (!item.id) {
|
|
15204
15211
|
continue;
|
|
@@ -15209,7 +15216,7 @@ class AbstractMap {
|
|
|
15209
15216
|
else {
|
|
15210
15217
|
toAdd.push({
|
|
15211
15218
|
id: item.id,
|
|
15212
|
-
record: this.itemFactory(item),
|
|
15219
|
+
record: this.itemFactory(item, { color: '#3388ff', draggable: false }),
|
|
15213
15220
|
});
|
|
15214
15221
|
}
|
|
15215
15222
|
}
|
|
@@ -15221,16 +15228,43 @@ class AbstractMap {
|
|
|
15221
15228
|
toRemove.push({ id, record });
|
|
15222
15229
|
});
|
|
15223
15230
|
this.handleItemChanges(toRemove, toAdd);
|
|
15231
|
+
if (editingSession) {
|
|
15232
|
+
editingSession.pendingItems;
|
|
15233
|
+
const pendingValues = this.model()?.viewState?.editingSession?.pendingItems;
|
|
15234
|
+
const firstKey = Object.keys(pendingValues)[0];
|
|
15235
|
+
const pendingItems = pendingValues[firstKey];
|
|
15236
|
+
if ((pendingItems[0].route != null &&
|
|
15237
|
+
pendingItems[0].route.points != null &&
|
|
15238
|
+
pendingItems[0].route.points.length > 0) ||
|
|
15239
|
+
(pendingItems[0].position != null && pendingItems[0].position.latitude != null)) {
|
|
15240
|
+
editingToAdd.push({
|
|
15241
|
+
id: pendingItems[0].id,
|
|
15242
|
+
record: this.itemFactory(pendingItems[0], { color: '#ff0000', draggable: true }),
|
|
15243
|
+
});
|
|
15244
|
+
}
|
|
15245
|
+
editingPresent.forEach((id) => {
|
|
15246
|
+
const record = this.editingOverlays.get(id);
|
|
15247
|
+
if (!record) {
|
|
15248
|
+
return;
|
|
15249
|
+
}
|
|
15250
|
+
editingtoRemove.push({ id, record });
|
|
15251
|
+
});
|
|
15252
|
+
this.handleEditingItemChanges(editingtoRemove, editingToAdd);
|
|
15253
|
+
}
|
|
15224
15254
|
onCleanup(() => {
|
|
15225
15255
|
const remove = [...this.overlays.entries()].map(([id, record]) => {
|
|
15226
15256
|
return { id, record };
|
|
15227
15257
|
});
|
|
15228
15258
|
this.handleItemChanges(remove, []);
|
|
15259
|
+
const editingRemove = [...this.editingOverlays.entries()].map(([id, record]) => {
|
|
15260
|
+
return { id, record };
|
|
15261
|
+
});
|
|
15262
|
+
this.handleEditingItemChanges(editingRemove, []);
|
|
15229
15263
|
});
|
|
15230
15264
|
});
|
|
15231
15265
|
}
|
|
15232
15266
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: AbstractMap, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive }); }
|
|
15233
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "17.3.11", type: AbstractMap, inputs: { model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: true, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onMapClick: "onMapClick", onOverlayClick: "onOverlayClick", onMapDragEnd: "onMapDragEnd", onZoomChanged: "onZoomChanged" }, ngImport: i0 }); }
|
|
15267
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "17.3.11", type: AbstractMap, inputs: { model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: true, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, editingSession: { classPropertyName: "editingSession", publicName: "editingSession", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onMapClick: "onMapClick", onOverlayClick: "onOverlayClick", onMapDragEnd: "onMapDragEnd", onZoomChanged: "onZoomChanged", onEditingOverlayClick: "onEditingOverlayClick", onEditingOverlayDrag: "onEditingOverlayDrag" }, ngImport: i0 }); }
|
|
15234
15268
|
}
|
|
15235
15269
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: AbstractMap, decorators: [{
|
|
15236
15270
|
type: Directive
|
|
@@ -15242,9 +15276,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
|
|
|
15242
15276
|
type: Output
|
|
15243
15277
|
}], onZoomChanged: [{
|
|
15244
15278
|
type: Output
|
|
15279
|
+
}], onEditingOverlayClick: [{
|
|
15280
|
+
type: Output
|
|
15281
|
+
}], onEditingOverlayDrag: [{
|
|
15282
|
+
type: Output
|
|
15245
15283
|
}] } });
|
|
15246
15284
|
|
|
15247
|
-
function createGoogleMapsItem(item) {
|
|
15285
|
+
function createGoogleMapsItem(item, config) {
|
|
15248
15286
|
switch (item.kind) {
|
|
15249
15287
|
case GeoMapItemKind.MARKER:
|
|
15250
15288
|
return new google.maps.Marker({
|
|
@@ -15256,7 +15294,7 @@ function createGoogleMapsItem(item) {
|
|
|
15256
15294
|
});
|
|
15257
15295
|
case GeoMapItemKind.LINE:
|
|
15258
15296
|
return new google.maps.Polyline({
|
|
15259
|
-
path: item.
|
|
15297
|
+
path: item.route.points.map((it) => {
|
|
15260
15298
|
return { lat: it.latitude, lng: it.longitude };
|
|
15261
15299
|
}),
|
|
15262
15300
|
geodesic: true,
|
|
@@ -15266,7 +15304,7 @@ function createGoogleMapsItem(item) {
|
|
|
15266
15304
|
});
|
|
15267
15305
|
case GeoMapItemKind.POLYGON:
|
|
15268
15306
|
return new google.maps.Polygon({
|
|
15269
|
-
path: item.
|
|
15307
|
+
path: item.route.points.map((it) => {
|
|
15270
15308
|
return { lat: it.latitude, lng: it.longitude };
|
|
15271
15309
|
}),
|
|
15272
15310
|
strokeOpacity: 0.5,
|
|
@@ -15296,7 +15334,7 @@ class GoogleMap extends AbstractMap {
|
|
|
15296
15334
|
const items = this.items();
|
|
15297
15335
|
const toAdd = items.map((it) => ({
|
|
15298
15336
|
id: it.id,
|
|
15299
|
-
record: createGoogleMapsItem(it),
|
|
15337
|
+
record: createGoogleMapsItem(it, { color: '#3388ff', draggable: false }),
|
|
15300
15338
|
}));
|
|
15301
15339
|
this.handleItemChanges([], toAdd);
|
|
15302
15340
|
this.onMapReady.emit({
|
|
@@ -15397,6 +15435,7 @@ class GoogleMap extends AbstractMap {
|
|
|
15397
15435
|
this.overlays.set(it.id, it.record);
|
|
15398
15436
|
});
|
|
15399
15437
|
}
|
|
15438
|
+
handleEditingItemChanges(toRemove, toAdd) { }
|
|
15400
15439
|
bindDragEvents(overlay) {
|
|
15401
15440
|
overlay.addListener('dragstart', (event) => {
|
|
15402
15441
|
this.zone.run(() => {
|
|
@@ -15459,14 +15498,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
|
|
|
15459
15498
|
type: Output
|
|
15460
15499
|
}] } });
|
|
15461
15500
|
|
|
15462
|
-
function createLeafletMapItem(item) {
|
|
15501
|
+
function createLeafletMapItem(item, config) {
|
|
15463
15502
|
switch (item.kind) {
|
|
15464
15503
|
case GeoMapItemKind.MARKER:
|
|
15465
15504
|
return L.marker(L.latLng(item.position.latitude, item.position.longitude), {
|
|
15466
15505
|
title: item.label,
|
|
15506
|
+
interactive: config.draggable,
|
|
15467
15507
|
});
|
|
15468
15508
|
case GeoMapItemKind.POLYGON:
|
|
15469
|
-
|
|
15509
|
+
const polygonRoutePoints = item.route.points;
|
|
15510
|
+
return L.layerGroup([
|
|
15511
|
+
L.polygon(polygonRoutePoints.map((p) => [p.latitude, p.longitude]), { title: item.label, color: config.color }),
|
|
15512
|
+
...polygonRoutePoints.map((p) => L.marker([p.latitude, p.longitude], {
|
|
15513
|
+
title: item.label,
|
|
15514
|
+
markerColor: config.color,
|
|
15515
|
+
interactive: config.draggable,
|
|
15516
|
+
})),
|
|
15517
|
+
]);
|
|
15518
|
+
case GeoMapItemKind.LINE:
|
|
15519
|
+
const lineRoutePoints = item.route.points;
|
|
15520
|
+
return L.layerGroup([
|
|
15521
|
+
L.polyline(lineRoutePoints.map((p) => [p.latitude, p.longitude]), { title: item.label, color: config.color }),
|
|
15522
|
+
...lineRoutePoints.map((p) => L.marker([p.latitude, p.longitude], {
|
|
15523
|
+
title: item.label,
|
|
15524
|
+
color: config.color,
|
|
15525
|
+
interactive: config.draggable,
|
|
15526
|
+
})),
|
|
15527
|
+
]);
|
|
15470
15528
|
}
|
|
15471
15529
|
throw new Error('Foo!');
|
|
15472
15530
|
}
|
|
@@ -15489,7 +15547,7 @@ class LeafletMap extends AbstractMap {
|
|
|
15489
15547
|
const items = this.items();
|
|
15490
15548
|
const toAdd = items.map((it) => ({
|
|
15491
15549
|
id: it.id,
|
|
15492
|
-
record: createLeafletMapItem(it),
|
|
15550
|
+
record: createLeafletMapItem(it, { color: '#ff0000', draggable: false }),
|
|
15493
15551
|
}));
|
|
15494
15552
|
this.handleItemChanges([], toAdd);
|
|
15495
15553
|
const model = this.model();
|
|
@@ -15573,22 +15631,102 @@ class LeafletMap extends AbstractMap {
|
|
|
15573
15631
|
this.overlays.delete(it.id);
|
|
15574
15632
|
});
|
|
15575
15633
|
toAdd.forEach((it) => {
|
|
15576
|
-
it.record
|
|
15577
|
-
|
|
15578
|
-
|
|
15579
|
-
|
|
15580
|
-
|
|
15581
|
-
|
|
15582
|
-
|
|
15583
|
-
|
|
15584
|
-
|
|
15634
|
+
let record = it.record;
|
|
15635
|
+
if (record instanceof L.LayerGroup) {
|
|
15636
|
+
Object.values(record._layers).forEach((at) => {
|
|
15637
|
+
at.on('click', (event) => {
|
|
15638
|
+
this.zone.run(() => {
|
|
15639
|
+
this.onOverlayClick.emit({
|
|
15640
|
+
itemId: it.id,
|
|
15641
|
+
originalEvent: {
|
|
15642
|
+
originalEvent: event,
|
|
15643
|
+
overlay: it.record,
|
|
15644
|
+
map: this.map,
|
|
15645
|
+
},
|
|
15646
|
+
});
|
|
15647
|
+
});
|
|
15585
15648
|
});
|
|
15586
15649
|
});
|
|
15587
|
-
}
|
|
15650
|
+
}
|
|
15651
|
+
else {
|
|
15652
|
+
it.record.on('click', (event) => {
|
|
15653
|
+
this.zone.run(() => {
|
|
15654
|
+
this.onOverlayClick.emit({
|
|
15655
|
+
itemId: it.id,
|
|
15656
|
+
originalEvent: {
|
|
15657
|
+
originalEvent: event,
|
|
15658
|
+
overlay: it.record,
|
|
15659
|
+
map: this.map,
|
|
15660
|
+
},
|
|
15661
|
+
});
|
|
15662
|
+
});
|
|
15663
|
+
});
|
|
15664
|
+
}
|
|
15588
15665
|
it.record.addTo(this.map);
|
|
15589
15666
|
this.overlays.set(it.id, it.record);
|
|
15590
15667
|
});
|
|
15591
15668
|
}
|
|
15669
|
+
handleEditingItemChanges(toRemove, toAdd) {
|
|
15670
|
+
if (!this.map) {
|
|
15671
|
+
return;
|
|
15672
|
+
}
|
|
15673
|
+
toRemove.forEach((it) => {
|
|
15674
|
+
it.record.remove();
|
|
15675
|
+
this.editingOverlays.delete(it.id);
|
|
15676
|
+
});
|
|
15677
|
+
toAdd.forEach((it) => {
|
|
15678
|
+
let record = it.record;
|
|
15679
|
+
if (record instanceof L.LayerGroup) {
|
|
15680
|
+
Object.values(record._layers).forEach((at) => {
|
|
15681
|
+
at.on('click', (event) => {
|
|
15682
|
+
this.zone.run(() => {
|
|
15683
|
+
this.onEditingOverlayClick.emit({
|
|
15684
|
+
itemId: it.id,
|
|
15685
|
+
coord: {
|
|
15686
|
+
x: event.latlng.lng,
|
|
15687
|
+
y: event.latlng.lat,
|
|
15688
|
+
},
|
|
15689
|
+
});
|
|
15690
|
+
});
|
|
15691
|
+
});
|
|
15692
|
+
at.on('dragstart', (event) => {
|
|
15693
|
+
this.originalLatLng = event.target.getLatLng();
|
|
15694
|
+
});
|
|
15695
|
+
at.on('dragend', (event) => {
|
|
15696
|
+
this.zone.run(() => {
|
|
15697
|
+
this.onEditingOverlayDrag.emit({
|
|
15698
|
+
itemId: it.id,
|
|
15699
|
+
startPosition: {
|
|
15700
|
+
x: this.originalLatLng.lng,
|
|
15701
|
+
y: this.originalLatLng.lat,
|
|
15702
|
+
},
|
|
15703
|
+
dragTo: {
|
|
15704
|
+
x: event.target.getLatLng().lng,
|
|
15705
|
+
y: event.target.getLatLng().lat,
|
|
15706
|
+
},
|
|
15707
|
+
});
|
|
15708
|
+
});
|
|
15709
|
+
this.originalLatLng = null;
|
|
15710
|
+
});
|
|
15711
|
+
});
|
|
15712
|
+
}
|
|
15713
|
+
else {
|
|
15714
|
+
it.record.on('click', (event) => {
|
|
15715
|
+
this.zone.run(() => {
|
|
15716
|
+
this.onEditingOverlayClick.emit({
|
|
15717
|
+
itemId: it.id,
|
|
15718
|
+
coord: {
|
|
15719
|
+
x: event.latlng.lng,
|
|
15720
|
+
y: event.latlng.lat,
|
|
15721
|
+
},
|
|
15722
|
+
});
|
|
15723
|
+
});
|
|
15724
|
+
});
|
|
15725
|
+
}
|
|
15726
|
+
it.record.addTo(this.map);
|
|
15727
|
+
this.editingOverlays.set(it.id, it.record);
|
|
15728
|
+
});
|
|
15729
|
+
}
|
|
15592
15730
|
findDatasetBounds() {
|
|
15593
15731
|
const items = this.items()
|
|
15594
15732
|
.flatMap((it) => (it.position ? [it.position] : []))
|
|
@@ -15641,6 +15779,7 @@ class SmartMapComponent {
|
|
|
15641
15779
|
const model = this.model();
|
|
15642
15780
|
return model?.layers.flatMap((l) => l.items ?? []) ?? [];
|
|
15643
15781
|
});
|
|
15782
|
+
this.editingSession = computed(() => this.model()?.viewState?.editingSession);
|
|
15644
15783
|
this.selection = computed(() => new Set(this.items()
|
|
15645
15784
|
.filter((it) => !!it.selected)
|
|
15646
15785
|
.map((it) => it.id)
|
|
@@ -15698,13 +15837,16 @@ class SmartMapComponent {
|
|
|
15698
15837
|
items: toAdd,
|
|
15699
15838
|
});
|
|
15700
15839
|
}
|
|
15840
|
+
it.viewState.editingSession = change.editingSession;
|
|
15701
15841
|
return {
|
|
15702
15842
|
...it,
|
|
15703
15843
|
layers: [...layersById.values()],
|
|
15844
|
+
viewState: it.viewState,
|
|
15704
15845
|
};
|
|
15705
15846
|
});
|
|
15706
15847
|
}
|
|
15707
15848
|
handleMapClick(position) {
|
|
15849
|
+
let viewState = this.model()?.viewState;
|
|
15708
15850
|
const operationMode = this.model()?.viewState?.operationMode ?? GeoMapOperationMode.ACTION;
|
|
15709
15851
|
switch (operationMode) {
|
|
15710
15852
|
case GeoMapOperationMode.ACTION:
|
|
@@ -15713,34 +15855,27 @@ class SmartMapComponent {
|
|
|
15713
15855
|
case GeoMapOperationMode.SELECTION:
|
|
15714
15856
|
// no-op, can't select empty space.
|
|
15715
15857
|
break;
|
|
15716
|
-
|
|
15717
|
-
|
|
15718
|
-
|
|
15719
|
-
|
|
15720
|
-
|
|
15721
|
-
|
|
15722
|
-
|
|
15723
|
-
|
|
15724
|
-
|
|
15725
|
-
|
|
15726
|
-
|
|
15727
|
-
|
|
15728
|
-
|
|
15729
|
-
|
|
15730
|
-
|
|
15731
|
-
|
|
15732
|
-
}
|
|
15733
|
-
else {
|
|
15734
|
-
return this.viewContextService.handlePerformActionResponse(change);
|
|
15735
|
-
}
|
|
15736
|
-
}, (err) => {
|
|
15737
|
-
console.warn('Could not submit selection change! ', err);
|
|
15738
|
-
});
|
|
15858
|
+
}
|
|
15859
|
+
if (viewState.editingSession &&
|
|
15860
|
+
Object.keys(viewState.editingSession?.pendingItems).length > 0) {
|
|
15861
|
+
const pendingItems = viewState.editingSession.pendingItems;
|
|
15862
|
+
const firstKey = Object.keys(pendingItems)[0];
|
|
15863
|
+
const pendingItem = pendingItems[firstKey];
|
|
15864
|
+
if (pendingItem && pendingItem.length > 0) {
|
|
15865
|
+
const editingItem = pendingItem[0];
|
|
15866
|
+
if (editingItem.kind === GeoMapItemKind.MARKER) {
|
|
15867
|
+
editingItem.position = position;
|
|
15868
|
+
}
|
|
15869
|
+
else {
|
|
15870
|
+
editingItem.route.points.push(position);
|
|
15871
|
+
}
|
|
15872
|
+
}
|
|
15873
|
+
this.update(viewState);
|
|
15739
15874
|
}
|
|
15740
15875
|
}
|
|
15741
15876
|
handleItemClick(id) {
|
|
15742
15877
|
const operationMode = this.model()?.viewState?.operationMode ?? GeoMapOperationMode.ACTION;
|
|
15743
|
-
|
|
15878
|
+
let targetItem = this.items().find((it) => id === it.id);
|
|
15744
15879
|
if (!targetItem) {
|
|
15745
15880
|
console.warn('Selection item is seemingly missing from known items: ', id);
|
|
15746
15881
|
return;
|
|
@@ -15767,34 +15902,62 @@ class SmartMapComponent {
|
|
|
15767
15902
|
console.warn('Could not submit selection change! ', err);
|
|
15768
15903
|
});
|
|
15769
15904
|
break;
|
|
15770
|
-
case GeoMapOperationMode.PLACEMENT:
|
|
15771
|
-
// clicking an item may remove it, if it's only a pending item. To reposition existing
|
|
15772
|
-
// items, we shall react to dragEnd events only.
|
|
15773
|
-
lastValueFrom(this.api.interact(this.uuid, this.identifier, {
|
|
15774
|
-
operationMode,
|
|
15775
|
-
targetItem,
|
|
15776
|
-
targetLayer: '',
|
|
15777
|
-
inverse: true,
|
|
15778
|
-
})).then((change) => {
|
|
15779
|
-
if (!this.viewContextService) {
|
|
15780
|
-
console.warn('Smart Map has no ViewContext Service set up!');
|
|
15781
|
-
return null;
|
|
15782
|
-
}
|
|
15783
|
-
else {
|
|
15784
|
-
return this.viewContextService.handlePerformActionResponse(change);
|
|
15785
|
-
}
|
|
15786
|
-
}, (err) => {
|
|
15787
|
-
console.warn('Could not submit placement change! ', err);
|
|
15788
|
-
});
|
|
15789
|
-
break;
|
|
15790
15905
|
}
|
|
15791
15906
|
}
|
|
15907
|
+
handleEditingItemClick(id, event) {
|
|
15908
|
+
let viewState = this.model()?.viewState;
|
|
15909
|
+
const pendingValues = viewState?.editingSession?.pendingItems;
|
|
15910
|
+
const firstKey = Object.keys(pendingValues)[0];
|
|
15911
|
+
const pendingItems = pendingValues[firstKey];
|
|
15912
|
+
let targetItem = pendingItems[0];
|
|
15913
|
+
if (!targetItem) {
|
|
15914
|
+
console.warn('Selection item is seemingly missing from known items: ', id);
|
|
15915
|
+
return;
|
|
15916
|
+
}
|
|
15917
|
+
if (targetItem.kind === GeoMapItemKind.MARKER) {
|
|
15918
|
+
targetItem.position = undefined;
|
|
15919
|
+
this.update(viewState);
|
|
15920
|
+
}
|
|
15921
|
+
else {
|
|
15922
|
+
const points = targetItem.route.points;
|
|
15923
|
+
const index = points.findIndex((point) => point.latitude === event.coord.y && point.longitude === event.coord.x);
|
|
15924
|
+
if (index !== -1) {
|
|
15925
|
+
points.splice(index, 1);
|
|
15926
|
+
}
|
|
15927
|
+
}
|
|
15928
|
+
this.update(viewState);
|
|
15929
|
+
}
|
|
15930
|
+
handleEditingItemDrag(id, event) {
|
|
15931
|
+
let viewState = this.model()?.viewState;
|
|
15932
|
+
const pendingValues = viewState?.editingSession?.pendingItems;
|
|
15933
|
+
const firstKey = Object.keys(pendingValues)[0];
|
|
15934
|
+
const pendingItems = pendingValues[firstKey];
|
|
15935
|
+
let targetItem = pendingItems[0];
|
|
15936
|
+
if (!targetItem) {
|
|
15937
|
+
console.warn('Selection item is seemingly missing from known items: ', id);
|
|
15938
|
+
return;
|
|
15939
|
+
}
|
|
15940
|
+
if (targetItem.kind === GeoMapItemKind.MARKER) {
|
|
15941
|
+
targetItem.position.latitude = event.dragTo.y;
|
|
15942
|
+
targetItem.position.longitude = event.dragTo.x;
|
|
15943
|
+
}
|
|
15944
|
+
else {
|
|
15945
|
+
const points = targetItem.route.points;
|
|
15946
|
+
const index = points.findIndex((point) => point.latitude === event.startPosition.y && point.longitude === event.startPosition.x);
|
|
15947
|
+
if (index !== -1) {
|
|
15948
|
+
points[index].latitude = event.dragTo.y;
|
|
15949
|
+
points[index].longitude = event.dragTo.x;
|
|
15950
|
+
}
|
|
15951
|
+
targetItem.route.points = points;
|
|
15952
|
+
}
|
|
15953
|
+
this.update(viewState);
|
|
15954
|
+
}
|
|
15792
15955
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartMapComponent, deps: [{ token: MAP_ENGINE }, { token: GeoMapService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
15793
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: SmartMapComponent, selector: "smart-map", inputs: { uuid: "uuid", identifier: "identifier", parent: "parent" }, ngImport: i0, template: "@if (model()) { @if (mapEngine === MapEngine.GOOGLE) {\r\n<google-map\r\n [model]=\"model()!\"\r\n [items]=\"items()\"\r\n [style]=\"{ width: '100%', height: '320px' }\"\r\n (onMapDragEnd)=\"move($event.viewport)\"\r\n (onZoomChanged)=\"move($event.viewport)\"\r\n (onMapClick)=\"handleMapClick($event.coordinates)\"\r\n (onOverlayClick)=\"handleItemClick($event.itemId)\"\r\n>\r\n</google-map>\r\n} @else if (mapEngine === MapEngine.LEAFLET) {\r\n<leaflet-map\r\n [model]=\"model()!\"\r\n [items]=\"items()\"\r\n (onMapDragEnd)=\"move($event.viewport)\"\r\n (onZoomChanged)=\"move($event.viewport)\"\r\n (onMapClick)=\"handleMapClick($event.coordinates)\"\r\n (onOverlayClick)=\"handleItemClick($event.itemId)\"\r\n>\r\n</leaflet-map>\r\n} @else {\r\n<p>\r\n <strong>Not recognised map engine: [ {{ mapEngine }} ]</strong>\r\n</p>\r\n<p>Please provide a valid choice of map engine!</p>\r\n} }\r\n", styles: [""], dependencies: [{ kind: "component", type: GoogleMap, selector: "google-map", inputs: ["style", "styleClass"], outputs: ["onOverlayDblClick", "onOverlayDragStart", "onOverlayDrag", "onOverlayDragEnd", "onMapReady"] }, { kind: "component", type: LeafletMap, selector: "leaflet-map" }] }); }
|
|
15956
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: SmartMapComponent, selector: "smart-map", inputs: { uuid: "uuid", identifier: "identifier", parent: "parent" }, ngImport: i0, template: "@if (model()) { @if (mapEngine === MapEngine.GOOGLE) {\r\n<google-map\r\n [model]=\"model()!\"\r\n [items]=\"items()\"\r\n [style]=\"{ width: '100%', height: '320px' }\"\r\n (onMapDragEnd)=\"move($event.viewport)\"\r\n (onZoomChanged)=\"move($event.viewport)\"\r\n (onMapClick)=\"handleMapClick($event.coordinates)\"\r\n (onOverlayClick)=\"handleItemClick($event.itemId)\"\r\n (onEditingOverlayClick)=\"handleEditingItemClick($event.itemId, $event)\"\r\n>\r\n</google-map>\r\n} @else if (mapEngine === MapEngine.LEAFLET) {\r\n<leaflet-map\r\n [model]=\"model()!\"\r\n [items]=\"items()\"\r\n [editingSession]=\"editingSession()\"\r\n (onMapDragEnd)=\"move($event.viewport)\"\r\n (onZoomChanged)=\"move($event.viewport)\"\r\n (onMapClick)=\"handleMapClick($event.coordinates)\"\r\n (onOverlayClick)=\"handleItemClick($event.itemId)\"\r\n (onEditingOverlayClick)=\"handleEditingItemClick($event.itemId, $event)\"\r\n (onEditingOverlayDrag)=\"handleEditingItemDrag($event.itemId, $event)\"\r\n>\r\n</leaflet-map>\r\n} @else {\r\n<p>\r\n <strong>Not recognised map engine: [ {{ mapEngine }} ]</strong>\r\n</p>\r\n<p>Please provide a valid choice of map engine!</p>\r\n} }\r\n", styles: [""], dependencies: [{ kind: "component", type: GoogleMap, selector: "google-map", inputs: ["style", "styleClass"], outputs: ["onOverlayDblClick", "onOverlayDragStart", "onOverlayDrag", "onOverlayDragEnd", "onMapReady"] }, { kind: "component", type: LeafletMap, selector: "leaflet-map" }] }); }
|
|
15794
15957
|
}
|
|
15795
15958
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartMapComponent, decorators: [{
|
|
15796
15959
|
type: Component,
|
|
15797
|
-
args: [{ selector: 'smart-map', template: "@if (model()) { @if (mapEngine === MapEngine.GOOGLE) {\r\n<google-map\r\n [model]=\"model()!\"\r\n [items]=\"items()\"\r\n [style]=\"{ width: '100%', height: '320px' }\"\r\n (onMapDragEnd)=\"move($event.viewport)\"\r\n (onZoomChanged)=\"move($event.viewport)\"\r\n (onMapClick)=\"handleMapClick($event.coordinates)\"\r\n (onOverlayClick)=\"handleItemClick($event.itemId)\"\r\n>\r\n</google-map>\r\n} @else if (mapEngine === MapEngine.LEAFLET) {\r\n<leaflet-map\r\n [model]=\"model()!\"\r\n [items]=\"items()\"\r\n (onMapDragEnd)=\"move($event.viewport)\"\r\n (onZoomChanged)=\"move($event.viewport)\"\r\n (onMapClick)=\"handleMapClick($event.coordinates)\"\r\n (onOverlayClick)=\"handleItemClick($event.itemId)\"\r\n>\r\n</leaflet-map>\r\n} @else {\r\n<p>\r\n <strong>Not recognised map engine: [ {{ mapEngine }} ]</strong>\r\n</p>\r\n<p>Please provide a valid choice of map engine!</p>\r\n} }\r\n" }]
|
|
15960
|
+
args: [{ selector: 'smart-map', template: "@if (model()) { @if (mapEngine === MapEngine.GOOGLE) {\r\n<google-map\r\n [model]=\"model()!\"\r\n [items]=\"items()\"\r\n [style]=\"{ width: '100%', height: '320px' }\"\r\n (onMapDragEnd)=\"move($event.viewport)\"\r\n (onZoomChanged)=\"move($event.viewport)\"\r\n (onMapClick)=\"handleMapClick($event.coordinates)\"\r\n (onOverlayClick)=\"handleItemClick($event.itemId)\"\r\n (onEditingOverlayClick)=\"handleEditingItemClick($event.itemId, $event)\"\r\n>\r\n</google-map>\r\n} @else if (mapEngine === MapEngine.LEAFLET) {\r\n<leaflet-map\r\n [model]=\"model()!\"\r\n [items]=\"items()\"\r\n [editingSession]=\"editingSession()\"\r\n (onMapDragEnd)=\"move($event.viewport)\"\r\n (onZoomChanged)=\"move($event.viewport)\"\r\n (onMapClick)=\"handleMapClick($event.coordinates)\"\r\n (onOverlayClick)=\"handleItemClick($event.itemId)\"\r\n (onEditingOverlayClick)=\"handleEditingItemClick($event.itemId, $event)\"\r\n (onEditingOverlayDrag)=\"handleEditingItemDrag($event.itemId, $event)\"\r\n>\r\n</leaflet-map>\r\n} @else {\r\n<p>\r\n <strong>Not recognised map engine: [ {{ mapEngine }} ]</strong>\r\n</p>\r\n<p>Please provide a valid choice of map engine!</p>\r\n} }\r\n" }]
|
|
15798
15961
|
}], ctorParameters: () => [{ type: MapEngine, decorators: [{
|
|
15799
15962
|
type: Inject,
|
|
15800
15963
|
args: [MAP_ENGINE]
|