Implement device update event
FarmMaps.Develop/FarmMapsLib/develop This commit looks good Details

pull/1/head
Willem Dantuma 2019-12-11 10:29:47 +01:00
parent 2e0b090fb7
commit 615872992f
5 changed files with 402 additions and 394 deletions

12
package-lock.json generated
View File

@ -1943,9 +1943,9 @@
}
},
"@farmmaps/common": {
"version": "0.0.1-prerelease.83",
"resolved": "https://repository.akkerweb.nl/repository/npm-group/@farmmaps/common/-/common-0.0.1-prerelease.83.tgz",
"integrity": "sha512-JQryEA79ELg9hFYBYBIyEQD0bv5oHTX6Uch2nRaOlLhaiXbo6g/F4UYdRnLGTo7nzIPD1wcLcZQorfSMOhYPyQ==",
"version": "0.0.1-prerelease.90",
"resolved": "https://repository.akkerweb.nl/repository/npm-group/@farmmaps/common/-/common-0.0.1-prerelease.90.tgz",
"integrity": "sha512-uSB9cJ06aJtfftQ/Yw6qR+LeeOAP1ly6JGxW6ubr/9hEqub38w+BPsQQYD5Sxn/oLjknRwhzEMZKYWTINF4zXw==",
"requires": {
"angular-oauth2-oidc": "^8.0.2",
"ngx-uploadx": "^3.3.2",
@ -1953,9 +1953,9 @@
}
},
"@farmmaps/common-map": {
"version": "0.0.1-prerelease.83",
"resolved": "https://repository.akkerweb.nl/repository/npm-group/@farmmaps/common-map/-/common-map-0.0.1-prerelease.83.tgz",
"integrity": "sha512-tILDqqj+ucSipvxJws3tLlZ4ytewqfmZzTmS07O0YhTFqx7+4WzkW8kL8S8vx3t3rB/ZPoAMa9u+w6G2WQ6nCw==",
"version": "0.0.1-prerelease.90",
"resolved": "https://repository.akkerweb.nl/repository/npm-group/@farmmaps/common-map/-/common-map-0.0.1-prerelease.90.tgz",
"integrity": "sha512-z1q8cHFNrrAQx8n8dXW2cn9d3wxG9oruPSoNgUrgz+YYJkxeDr0kd3SqloftPJrVxES0iIiqguweo0SRyBGVYA==",
"requires": {
"ngx-openlayers": "1.0.0-next.13",
"ol": "^6.0.0",

View File

@ -20,8 +20,8 @@
"@angular/platform-browser-dynamic": "~8.2.14",
"@angular/router": "~8.2.14",
"@aspnet/signalr": "^1.1.4",
"@farmmaps/common": ">=0.0.1-prerelease.83 <0.0.1",
"@farmmaps/common-map": ">=0.0.1-prerelease.83 <0.0.1",
"@farmmaps/common": ">=0.0.1-prerelease.90 <0.0.1",
"@farmmaps/common-map": ">=0.0.1-prerelease.90 <0.0.1",
"@ng-bootstrap/ng-bootstrap": "^4.2.1",
"@ngrx/effects": "^8.2.0",
"@ngrx/router-store": "^8.2.0",

View File

@ -15,6 +15,6 @@
"@ngrx/router-store": "^8.2",
"@ngrx/store": "^8.2",
"tassign": "^1.0.0",
"@farmmaps/common": ">=0.0.1-prerelease.82 <0.0.1"
"@farmmaps/common": ">=0.0.1-prerelease.90 <0.0.1"
}
}

View File

@ -7,7 +7,7 @@ import { Effect, Actions,ofType } from '@ngrx/effects';
import { Observable , of } from 'rxjs';
import { withLatestFrom, switchMap, map, catchError, mergeMap, delay} from 'rxjs/operators';
import {GeoJSON} from 'ol/format';
import {GeoJSON,WKT} from 'ol/format';
import {Feature} from 'ol';
import { getCenter, Extent, createEmpty, extend} from 'ol/extent';
import {Point} from 'ol/geom'
@ -25,10 +25,15 @@ import { tassign } from 'tassign';
@Injectable()
export class MapEffects {
private _format: GeoJSON;
private _geojsonFormat: GeoJSON;
private _wktFormat: WKT;
private toPointFeature(feature: any): Feature {
var f = this._format.readFeature(feature);
private toPointFeature(updateEvent:commonActions.DeviceUpdateEvent): Feature {
var f = this._wktFormat.readFeature(updateEvent.attributes["geometry"],{
dataProjection: 'EPSG:4326',
featureProjection: 'EPSG:3857'
});
f.setId(updateEvent.itemCode);
var centroid = getCenter(f.getGeometry().getExtent());
f.setGeometry(new Point(centroid));
return f;
@ -83,7 +88,7 @@ export class MapEffects {
f.id = f.properties["code"];
}
}
return of(new mapActions.StartSearchSuccess(this._format.readFeatures(features), action.queryState));
return of(new mapActions.StartSearchSuccess(this._geojsonFormat.readFeatures(features), action.queryState));
}
),
catchError(error => of(new commonActions.Fail(error))));
@ -135,7 +140,11 @@ export class MapEffects {
ofType(mapActions.SELECTITEMSUCCESS),
switchMap((action:mapActions.SelectItemSuccess) => {
return this.itemService$.getFeature(action.item.code, "EPSG:3857").pipe(
map((feature: IItem) => new mapActions.AddFeatureSuccess(this._format.readFeature(feature) )),
map((feature: any) => {
let f = this._geojsonFormat.readFeature(feature);
f.setId(action.item.code);
return new mapActions.AddFeatureSuccess(f );
}),
catchError(error => of(new commonActions.Fail(error))));
}
));
@ -163,21 +172,19 @@ export class MapEffects {
@Effect()
featureUpdate$: Observable<Action> = this.actions$.pipe(
ofType(commonActions.ITEMCHANGEDEVENT),
ofType(commonActions.DEVICEUPDATEEVENT),
withLatestFrom(this.store$.select(mapReducers.selectGetFeatures)),
mergeMap(([action, features]) => {
let itemChangedAction = action as commonActions.ItemChangedEvent;
let deviceUpdateEventAction = action as commonActions.DeviceUpdateEvent;
var feature: Feature = null;
for (let f of features) {
if (f.get("code") == itemChangedAction.itemCode) {
if (f.getId() == deviceUpdateEventAction.itemCode) {
feature = f;
break;
}
}
if (feature) {
return this.itemService$.getFeature(itemChangedAction.itemCode, "EPSG:3857").pipe(
map((feature: any) => new mapActions.UpdateFeatureSuccess(this.toPointFeature(feature))),
catchError(error => of(new commonActions.Fail(error))));
return of(new mapActions.UpdateFeatureSuccess(this.toPointFeature(deviceUpdateEventAction)));
} else {
return [];
}
@ -225,6 +232,7 @@ export class MapEffects {
}));
constructor(private actions$: Actions, private store$: Store<mapReducers.State>, private folderService$: FolderService, private itemService$: ItemService) {
this._format = new GeoJSON();
this._geojsonFormat = new GeoJSON();
this._wktFormat = new WKT();
}
}

View File

@ -193,7 +193,7 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
let features: any[] = [];
var index = -1;
for (var i = 0; i < state.features.length; i++) {
if (state.features[i].get("code") == a.feature.get("code")) {
if (state.features[i].getId() == a.feature.getId()) {
features.push(a.feature);
} else {
features.push(state.features[i]);