FarmMapsLib/projects/common-map/src/fm-map/components/selected-item-cropfield/selected-item-cropfield.com...

71 lines
3.4 KiB
TypeScript
Raw Normal View History

2020-08-11 17:13:57 +00:00
import { Component, Input, Injectable, OnInit, ComponentFactoryResolver, Inject, ComponentFactory } from '@angular/core';
2020-02-25 14:14:29 +00:00
import { Location } from '@angular/common';
import { Feature } from 'ol';
import { Store } from '@ngrx/store';
import * as mapReducers from '../../reducers/map.reducer';
import { commonReducers, ItemTypeService, IItem, Item, ItemService, FolderService, IListItem} from '@farmmaps/common';
import { Router, ActivatedRoute, ParamMap, Event } from '@angular/router';
import { ForItemType } from '../for-item/for-itemtype.decorator';
import { AbstractSelectedItemComponent } from '../selected-item/selected-item.component';
2020-06-23 13:39:30 +00:00
import { Observable,of } from 'rxjs';
2020-02-25 14:14:29 +00:00
import {GeoJSON} from 'ol/format';
import {getArea} from 'ol/sphere';
2020-06-23 13:39:30 +00:00
import { withLatestFrom,switchMap,combineLatest } from 'rxjs/operators';
2020-08-11 17:13:57 +00:00
import { AbstractItemListItemComponent, ItemListItemComponent } from '../item-list-item/item-list-item.component';
2020-02-25 14:14:29 +00:00
@ForItemType("vnd.farmmaps.itemtype.cropfield")
@Injectable()
@Component({
selector: 'fm-map-selected-item-cropfield',
templateUrl: './selected-item-cropfield.component.html',
styleUrls: ['./selected-item-cropfield.component.scss']
})
export class SelectedItemCropfieldComponent extends AbstractSelectedItemComponent implements OnInit{
public items: Observable<IListItem[]>;
2020-08-11 17:13:57 +00:00
constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService, location: Location, router: Router, private itemService$: ItemService,private folderService$: FolderService,
private componentFactoryResolver: ComponentFactoryResolver, @Inject(AbstractItemListItemComponent) public itemComponentList: AbstractItemListItemComponent[] ) {
2020-02-25 14:14:29 +00:00
super(store, itemTypeService,location,router);
}
areaInHa(item:IItem):number {
if(!item) return 0;
// get area from faeture if 0 calculate from polygon
let a = item.data.area;
if(a) return a;
let format = new GeoJSON();
let polygon = format.readGeometry(item.geometry);
return getArea(polygon,{projection:"EPSG:4326"}) / 10000;
}
ngOnInit() {
2020-08-11 17:13:57 +00:00
var componentFactory: ComponentFactory<AbstractItemListItemComponent> = this.componentFactoryResolver.resolveComponentFactory(ItemListItemComponent); // default
2020-06-23 13:39:30 +00:00
var childItems = this.folderService$.getItems(this.item.code, 0, 1000);
var atLocationItems = this.itemService$.getItemList(null,null,null,this.item.code,true);
this.items = childItems.pipe(
combineLatest(atLocationItems),
switchMap(([ci,ali]) => {
let retVal:IListItem[] = [];
let codes = {};
ci.forEach((listItem) => {
2020-08-11 17:13:57 +00:00
if (this.itemComponentList.findIndex(i =>
i.item['forItemType'].indexOf(this.item.itemType) >= 0 &&
i.item['forSourceTask'].indexOf(this.item.sourceTask) >= 0) >= 0) {
retVal.push(listItem);
codes[listItem.code]=listItem;
}
2020-06-23 13:39:30 +00:00
});
ali.forEach((atlocationitem) => {
let listItem = atlocationitem as IListItem;
let allowedItemTypes = "vnd.farmmaps.itemtype.device.senml"; // this is a hack
if(!codes[listItem.code] && allowedItemTypes.indexOf(listItem.itemType) >= 0) {
retVal.push(listItem);
}
});
return of(retVal);
}));
2020-02-25 14:14:29 +00:00
}
}