import { Component, Input, Injectable, OnInit } from '@angular/core'; 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'; import { Observable,of } from 'rxjs'; import {GeoJSON} from 'ol/format'; import {getArea} from 'ol/sphere'; import { withLatestFrom,switchMap,combineLatest } from 'rxjs/operators'; @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; constructor(store: Store, itemTypeService: ItemTypeService, location: Location, router: Router, private itemService$: ItemService,private folderService$: FolderService) { super(store, itemTypeService,location,router); } areaInHa(item:IItem):number { if(!item) return 0; // get area from faeture if 0 calculate from polygon const a = item.data.area; if(a) return a; const format = new GeoJSON(); const polygon = format.readGeometry(item.geometry); return getArea(polygon,{projection:"EPSG:4326"}) / 10000; } ngOnInit() { const childItems = this.folderService$.getItems(this.item.code, 0, 1000); const atLocationItems = this.itemService$.getItemList(null,null,null,this.item.code,true); this.items = childItems.pipe( combineLatest(atLocationItems), switchMap(([ci,ali]) => { const retVal:IListItem[] = []; const codes = {}; ci.forEach((listItem) => { retVal.push(listItem); codes[listItem.code]=listItem; }); ali.forEach((atlocationitem) => { const listItem = atlocationitem as IListItem; const 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); })); } }