Compare commits
	
		
			61 Commits
		
	
	
		
			80ef4ed6fe
			...
			develop
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					9b86927e2c | ||
| 
						 | 
					e224b80995 | ||
| 
						 | 
					88f3d9ef1a | ||
| 6737029a61 | |||
| 
						 | 
					d4786564bd | ||
| 6fd69d7999 | |||
| 
						 | 
					4ec75b3d5a | ||
| 04e3f1e71f | |||
| 
						 | 
					df77631299 | ||
| a8d0f05c81 | |||
| 
						 | 
					c79637be77 | ||
| 
						 | 
					b5e11da9a8 | ||
| 
						 | 
					9d45c25a95 | ||
| 
						 | 
					2ffce50c47 | ||
| 
						 | 
					f50ff878e0 | ||
| 09c74448a8 | |||
| 205b73b30e | |||
| 
						 | 
					313cc59fe7 | ||
| c3fb42c65f | |||
| 
						 | 
					6b73fb0d55 | ||
| ea641caf38 | |||
| ac15b2018d | |||
| 
						 | 
					fe73f615ad | ||
| 
						 | 
					3e1b3ee78e | ||
| 
						 | 
					58391b7828 | ||
| 
						 | 
					b2b2a1e8be | ||
| 
						 | 
					0d96a1be4f | ||
| d599430cb0 | |||
| 
						 | 
					e17911b339 | ||
| 
						 | 
					9d6cbffb3d | ||
| 
						 | 
					a11eb81e73 | ||
| 
						 | 
					4fc3ad933c | ||
| 
						 | 
					e6d90c9e61 | ||
| 250b3841fe | |||
| 51291cd86f | |||
| 
						 | 
					e9e3b719a4 | ||
| 
						 | 
					1c0ad57b0a | ||
| 
						 | 
					8684ba25c8 | ||
| 78ca3044cf | |||
| 2e55b5a70e | |||
| 
						 | 
					af0a3dca2d | ||
| f039898c26 | |||
| 
						 | 
					ab19b1c2ce | ||
| a2641f8ea5 | |||
| 
						 | 
					d6841c8f83 | ||
| 187b24ab97 | |||
| b80ddf7854 | |||
| 
						 | 
					79bc3d9082 | ||
| 1c92ad4c28 | |||
| 
						 | 
					61e6de0052 | ||
| fb25b92349 | |||
| 
						 | 
					e78f2893ae | ||
| 51170b45e9 | |||
| 
						 | 
					7365bea145 | ||
| dc096065b4 | |||
| 
						 | 
					b9850311ea | ||
| ee9c050db3 | |||
| 
						 | 
					95200d9920 | ||
| 
						 | 
					ee1ce21cca | ||
| 
						 | 
					467f7447bf | ||
| 
						 | 
					1df4496058 | 
							
								
								
									
										12
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										12
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							@@ -1,12 +1,12 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "name": "farmmaps-lib-app",
 | 
					  "name": "farmmaps-lib-app",
 | 
				
			||||||
  "version": "4.14.0",
 | 
					  "version": "4.19.0",
 | 
				
			||||||
  "lockfileVersion": 3,
 | 
					  "lockfileVersion": 3,
 | 
				
			||||||
  "requires": true,
 | 
					  "requires": true,
 | 
				
			||||||
  "packages": {
 | 
					  "packages": {
 | 
				
			||||||
    "": {
 | 
					    "": {
 | 
				
			||||||
      "name": "farmmaps-lib-app",
 | 
					      "name": "farmmaps-lib-app",
 | 
				
			||||||
      "version": "4.14.0",
 | 
					      "version": "4.19.0",
 | 
				
			||||||
      "dependencies": {
 | 
					      "dependencies": {
 | 
				
			||||||
        "@angular-eslint/eslint-plugin": "^18.2.0",
 | 
					        "@angular-eslint/eslint-plugin": "^18.2.0",
 | 
				
			||||||
        "@angular/animations": "18.2.3",
 | 
					        "@angular/animations": "18.2.3",
 | 
				
			||||||
@@ -90,7 +90,7 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "dist/common": {
 | 
					    "dist/common": {
 | 
				
			||||||
      "name": "@farmmaps/common",
 | 
					      "name": "@farmmaps/common",
 | 
				
			||||||
      "version": "4.14.0-prerelease.2544",
 | 
					      "version": "4.19.0-prerelease.2582",
 | 
				
			||||||
      "dependencies": {
 | 
					      "dependencies": {
 | 
				
			||||||
        "tslib": "^2.3.0"
 | 
					        "tslib": "^2.3.0"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
@@ -115,7 +115,7 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "dist/common-map": {
 | 
					    "dist/common-map": {
 | 
				
			||||||
      "name": "@farmmaps/common-map",
 | 
					      "name": "@farmmaps/common-map",
 | 
				
			||||||
      "version": "4.14.0-prerelease.2544",
 | 
					      "version": "4.19.0-prerelease.2582",
 | 
				
			||||||
      "dependencies": {
 | 
					      "dependencies": {
 | 
				
			||||||
        "tslib": "^2.0.0"
 | 
					        "tslib": "^2.0.0"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
@@ -130,7 +130,7 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "dist/common-map3d": {
 | 
					    "dist/common-map3d": {
 | 
				
			||||||
      "name": "@farmmaps/common-map3d",
 | 
					      "name": "@farmmaps/common-map3d",
 | 
				
			||||||
      "version": "4.14.0-prerelease.2544",
 | 
					      "version": "4.19.0-prerelease.2582",
 | 
				
			||||||
      "dependencies": {
 | 
					      "dependencies": {
 | 
				
			||||||
        "tslib": "^2.0.0"
 | 
					        "tslib": "^2.0.0"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
@@ -143,7 +143,7 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "dist/ng-openlayers": {
 | 
					    "dist/ng-openlayers": {
 | 
				
			||||||
      "name": "@farmmaps/ng-openlayers",
 | 
					      "name": "@farmmaps/ng-openlayers",
 | 
				
			||||||
      "version": "4.14.0-prerelease.2544",
 | 
					      "version": "4.19.0-prerelease.2582",
 | 
				
			||||||
      "license": "MPL-2.0",
 | 
					      "license": "MPL-2.0",
 | 
				
			||||||
      "dependencies": {
 | 
					      "dependencies": {
 | 
				
			||||||
        "tslib": "^2.3.0"
 | 
					        "tslib": "^2.3.0"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "name": "farmmaps-lib-app",
 | 
					  "name": "farmmaps-lib-app",
 | 
				
			||||||
  "version": "4.14.0",
 | 
					  "version": "4.19.0",
 | 
				
			||||||
  "scripts":   {
 | 
					  "scripts":   {
 | 
				
			||||||
    "ng": "ng",
 | 
					    "ng": "ng",
 | 
				
			||||||
    "start": "ng serve",
 | 
					    "start": "ng serve",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -59,6 +59,8 @@ export const TOGGLESHOWDATALAYERSLIDE = '[Map] ToggleShowDataLayerSlide'
 | 
				
			|||||||
export const SETVIEWSTATE = '[Map] SetViewState'
 | 
					export const SETVIEWSTATE = '[Map] SetViewState'
 | 
				
			||||||
export const CLEARFEATURES = '[Map] ClearFeatures';
 | 
					export const CLEARFEATURES = '[Map] ClearFeatures';
 | 
				
			||||||
export const SETPANELEXTRAWIDE = '[Map] SetPanelExtraWide';
 | 
					export const SETPANELEXTRAWIDE = '[Map] SetPanelExtraWide';
 | 
				
			||||||
 | 
					export const BACKUPFEATURES = '[Map] BackupFeatures';
 | 
				
			||||||
 | 
					export const RESTOREFEATURES = '[Map] RestoreFeatures';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class Clear implements Action {
 | 
					export class Clear implements Action {
 | 
				
			||||||
  readonly type = CLEAR;
 | 
					  readonly type = CLEAR;
 | 
				
			||||||
@@ -347,6 +349,16 @@ export class SetPanelExtraWide implements Action {
 | 
				
			|||||||
  constructor(public panelExtraWide:boolean) {}
 | 
					  constructor(public panelExtraWide:boolean) {}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export class BackupFeatures implements Action {
 | 
				
			||||||
 | 
					  readonly type = BACKUPFEATURES;
 | 
				
			||||||
 | 
					  constructor() {}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export class RestoreFeatures implements Action {
 | 
				
			||||||
 | 
					  readonly type = RESTOREFEATURES;
 | 
				
			||||||
 | 
					  constructor() {}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export type Actions = SetMapState
 | 
					export type Actions = SetMapState
 | 
				
			||||||
  | Init
 | 
					  | Init
 | 
				
			||||||
  | Clear
 | 
					  | Clear
 | 
				
			||||||
@@ -395,5 +407,7 @@ export type Actions = SetMapState
 | 
				
			|||||||
  | ToggleShowDataLayerSlide
 | 
					  | ToggleShowDataLayerSlide
 | 
				
			||||||
  | SetViewState
 | 
					  | SetViewState
 | 
				
			||||||
  | ClearFeatures
 | 
					  | ClearFeatures
 | 
				
			||||||
  | SetPanelExtraWide;
 | 
					  | SetPanelExtraWide
 | 
				
			||||||
 | 
					  | BackupFeatures
 | 
				
			||||||
 | 
					  | RestoreFeatures;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -36,6 +36,7 @@ import { RotationResetComponent } from './components/aol/rotation-reset/rotation
 | 
				
			|||||||
import { ZoomToExtentComponent } from './components/aol/zoom-to-extent/zoom-to-extent.component';
 | 
					import { ZoomToExtentComponent } from './components/aol/zoom-to-extent/zoom-to-extent.component';
 | 
				
			||||||
import { FeatureListContainerComponent } from './components/feature-list-container/feature-list-container.component';
 | 
					import { FeatureListContainerComponent } from './components/feature-list-container/feature-list-container.component';
 | 
				
			||||||
import { FeatureListCropfieldComponent } from './components/feature-list-cropfield/feature-list-cropfield.component';
 | 
					import { FeatureListCropfieldComponent } from './components/feature-list-cropfield/feature-list-cropfield.component';
 | 
				
			||||||
 | 
					import { FeatureListObservationComponent } from './components/feature-list-observation/feature-list-observation.component';
 | 
				
			||||||
import { FeatureListCroppingschemeComponent } from './components/feature-list-croppingscheme/feature-list-croppingscheme.component';
 | 
					import { FeatureListCroppingschemeComponent } from './components/feature-list-croppingscheme/feature-list-croppingscheme.component';
 | 
				
			||||||
import { FeatureListFeatureContainerComponent } from './components/feature-list-feature-container/feature-list-feature-container.component';
 | 
					import { FeatureListFeatureContainerComponent } from './components/feature-list-feature-container/feature-list-feature-container.component';
 | 
				
			||||||
import { FeatureListFeatureCropfieldComponent } from './components/feature-list-feature-cropfield/feature-list-feature-cropfield.component';
 | 
					import { FeatureListFeatureCropfieldComponent } from './components/feature-list-feature-cropfield/feature-list-feature-cropfield.component';
 | 
				
			||||||
@@ -105,7 +106,7 @@ const metaReducers: Array<MetaReducer<any, any>> = [LocalStorageSync];
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
export {
 | 
					export {
 | 
				
			||||||
  AbstractFeatureListComponent,
 | 
					  AbstractFeatureListComponent,
 | 
				
			||||||
  AbstractFeatureListFeatureComponent, AbstractItemListComponent, AbstractItemListItemComponent, AbstractItemWidgetComponent, AbstractSelectedItemComponent, DeviceOrientationService, FeatureIconService, FeatureListComponent, FeatureListContainerComponent, FeatureListCropfieldComponent, FeatureListCroppingschemeComponent, FeatureListFeatureComponent, FeatureListFeatureContainerComponent, FeatureListFeatureCropfieldComponent, FeatureListFeatureCroppingschemeComponent, FileDropTargetComponent, ForChild,
 | 
					  AbstractFeatureListFeatureComponent, AbstractItemListComponent, AbstractItemListItemComponent, AbstractItemWidgetComponent, AbstractSelectedItemComponent, DeviceOrientationService, FeatureIconService, FeatureListComponent, FeatureListContainerComponent, FeatureListCropfieldComponent, FeatureListObservationComponent, FeatureListCroppingschemeComponent, FeatureListFeatureComponent, FeatureListFeatureContainerComponent, FeatureListFeatureCropfieldComponent, FeatureListFeatureCroppingschemeComponent, FileDropTargetComponent, ForChild,
 | 
				
			||||||
  ForItemType, ForPackage, ForSourceTask, GeolocationService, GeometryThumbnailComponent, GpsLocation, IClickedFeature, ifZoomToShowDirective, IItemLayer, IMapState, IPeriodState, ISelectedFeatures, ItemLayer, ItemLayersComponent, ItemListComponent, ItemListItemComponent,
 | 
					  ForItemType, ForPackage, ForSourceTask, GeolocationService, GeometryThumbnailComponent, GpsLocation, IClickedFeature, ifZoomToShowDirective, IItemLayer, IMapState, IPeriodState, ISelectedFeatures, ItemLayer, ItemLayersComponent, ItemListComponent, ItemListItemComponent,
 | 
				
			||||||
  ItemListItemContainerComponent, ITemporalItemLayer, ItemVectorSourceComponent, ItemWidgetListComponent, LayerListComponent, LayerSwitcher, LayerVectorImageComponent, LegendComponent, mapActions, MapComponent, mapEffects,
 | 
					  ItemListItemContainerComponent, ITemporalItemLayer, ItemVectorSourceComponent, ItemWidgetListComponent, LayerListComponent, LayerSwitcher, LayerVectorImageComponent, LegendComponent, mapActions, MapComponent, mapEffects,
 | 
				
			||||||
  mapReducers, MapSearchComponent, MetaDataModalComponent, PanToLocation, RotationResetComponent, SelectedItemComponent, SelectedItemContainerComponent, SelectedItemCropfieldComponent,
 | 
					  mapReducers, MapSearchComponent, MetaDataModalComponent, PanToLocation, RotationResetComponent, SelectedItemComponent, SelectedItemContainerComponent, SelectedItemCropfieldComponent,
 | 
				
			||||||
@@ -142,6 +143,7 @@ export {
 | 
				
			|||||||
        FeatureListContainerComponent,
 | 
					        FeatureListContainerComponent,
 | 
				
			||||||
        FeatureListCroppingschemeComponent,
 | 
					        FeatureListCroppingschemeComponent,
 | 
				
			||||||
        FeatureListCropfieldComponent,
 | 
					        FeatureListCropfieldComponent,
 | 
				
			||||||
 | 
					        FeatureListObservationComponent,
 | 
				
			||||||
        FeatureListFeatureContainerComponent,
 | 
					        FeatureListFeatureContainerComponent,
 | 
				
			||||||
        FeatureListFeatureComponent,
 | 
					        FeatureListFeatureComponent,
 | 
				
			||||||
        FeatureListFeatureCroppingschemeComponent,
 | 
					        FeatureListFeatureCroppingschemeComponent,
 | 
				
			||||||
@@ -201,6 +203,7 @@ export {
 | 
				
			|||||||
        FeatureListContainerComponent,
 | 
					        FeatureListContainerComponent,
 | 
				
			||||||
        FeatureListCroppingschemeComponent,
 | 
					        FeatureListCroppingschemeComponent,
 | 
				
			||||||
        FeatureListCropfieldComponent,
 | 
					        FeatureListCropfieldComponent,
 | 
				
			||||||
 | 
					        FeatureListObservationComponent,
 | 
				
			||||||
        FeatureListFeatureContainerComponent,
 | 
					        FeatureListFeatureContainerComponent,
 | 
				
			||||||
        ZoomToExtentComponent,
 | 
					        ZoomToExtentComponent,
 | 
				
			||||||
        ifZoomToShowDirective,
 | 
					        ifZoomToShowDirective,
 | 
				
			||||||
@@ -214,9 +217,10 @@ export {
 | 
				
			|||||||
        TemporalService,
 | 
					        TemporalService,
 | 
				
			||||||
        { provide: AbstractFeatureListComponent, useClass: FeatureListCroppingschemeComponent, multi: true },
 | 
					        { provide: AbstractFeatureListComponent, useClass: FeatureListCroppingschemeComponent, multi: true },
 | 
				
			||||||
        { provide: AbstractFeatureListComponent, useClass: FeatureListCropfieldComponent, multi: true },
 | 
					        { provide: AbstractFeatureListComponent, useClass: FeatureListCropfieldComponent, multi: true },
 | 
				
			||||||
 | 
					        { provide: AbstractFeatureListComponent, useClass: FeatureListObservationComponent, multi: true },        
 | 
				
			||||||
        { provide: AbstractFeatureListFeatureComponent, useClass: FeatureListFeatureComponent, multi: true },
 | 
					        { provide: AbstractFeatureListFeatureComponent, useClass: FeatureListFeatureComponent, multi: true },
 | 
				
			||||||
        { provide: AbstractFeatureListFeatureComponent, useClass: FeatureListFeatureCroppingschemeComponent, multi: true },
 | 
					        { provide: AbstractFeatureListFeatureComponent, useClass: FeatureListFeatureCroppingschemeComponent, multi: true },
 | 
				
			||||||
        { provide: AbstractFeatureListFeatureComponent, useClass: FeatureListFeatureCropfieldComponent, multi: true },
 | 
					        { provide: AbstractFeatureListFeatureComponent, useClass: FeatureListFeatureCropfieldComponent, multi: true },       
 | 
				
			||||||
        { provide: AbstractSelectedItemComponent, useClass: SelectedItemComponent, multi: true },
 | 
					        { provide: AbstractSelectedItemComponent, useClass: SelectedItemComponent, multi: true },
 | 
				
			||||||
        { provide: AbstractSelectedItemComponent, useClass: SelectedItemCropfieldComponent, multi: true },
 | 
					        { provide: AbstractSelectedItemComponent, useClass: SelectedItemCropfieldComponent, multi: true },
 | 
				
			||||||
        { provide: AbstractSelectedItemComponent, useClass: SelectedItemGeotiffComponent, multi: true },
 | 
					        { provide: AbstractSelectedItemComponent, useClass: SelectedItemGeotiffComponent, multi: true },
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					<div class="card border-0">
 | 
				
			||||||
 | 
					  <div class="card-body" *ngIf="(schemeItem|async);let schemeItem">
 | 
				
			||||||
 | 
					    <fm-back-button></fm-back-button>
 | 
				
			||||||
 | 
					    <h4 i18n>Farm</h4>
 | 
				
			||||||
 | 
					    <h3>{{schemeItem.name}}</h3>
 | 
				
			||||||
 | 
					    <div *ngIf="features;let features">
 | 
				
			||||||
 | 
					        <div class="cropfields">
 | 
				
			||||||
 | 
					          <div class="row m-0 ps-3 pe-3" *ngFor="let feature of features" [ngClass]="{'selected':isFeatureSelected(feature)}" (click)="handleFeatureClick(feature)" (mouseenter)="handleFeatureMouseEnter(feature)" (mouseleave)="handleFeatureMouseLeave(feature)">
 | 
				
			||||||
 | 
					          <fm-map-feature-list-feature-container [feature]="feature"></fm-map-feature-list-feature-container>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					fm-map-feature-list-feature-container {
 | 
				
			||||||
 | 
					  width:100%;
 | 
				
			||||||
 | 
					  pointer-events:none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.row {
 | 
				
			||||||
 | 
					  border-bottom: 1px solid var(--bs-gray-500);
 | 
				
			||||||
 | 
					  user-select: none;
 | 
				
			||||||
 | 
					  padding-left:1.5rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.row.selected {
 | 
				
			||||||
 | 
					  background-color: var(--bs-gray-100);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.cropfields {
 | 
				
			||||||
 | 
					  border-top: 1px solid var(--bs-gray-500);
 | 
				
			||||||
 | 
					  margin-left: -1.25rem;
 | 
				
			||||||
 | 
					  margin-right: -1.25rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					import { Component, Injectable,AfterViewInit, OnInit,SimpleChanges, ChangeDetectorRef} from '@angular/core';
 | 
				
			||||||
 | 
					import { Location } from '@angular/common';
 | 
				
			||||||
 | 
					import { AbstractFeatureListComponent } from '../feature-list/feature-list.component';
 | 
				
			||||||
 | 
					import {ForItemType } from '../for-item/for-itemtype.decorator';
 | 
				
			||||||
 | 
					import {ForChild } from '../for-item/for-child.decorator';
 | 
				
			||||||
 | 
					import { Store } from '@ngrx/store';
 | 
				
			||||||
 | 
					import * as mapReducers from '../../reducers/map.reducer';
 | 
				
			||||||
 | 
					import { commonReducers, ItemTypeService, IItem,ItemService } from '@farmmaps/common';
 | 
				
			||||||
 | 
					import { Observable } from 'rxjs';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@ForChild()
 | 
				
			||||||
 | 
					@ForItemType("vnd.farmmaps.itemtype.observation")
 | 
				
			||||||
 | 
					@Injectable()
 | 
				
			||||||
 | 
					@Component({
 | 
				
			||||||
 | 
					  selector: 'fm-map-feature-list-observation',
 | 
				
			||||||
 | 
					    templateUrl: './feature-list-observation.component.html',
 | 
				
			||||||
 | 
					    styleUrls: ['./feature-list-observation.component.scss']
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					export class FeatureListObservationComponent extends AbstractFeatureListComponent implements OnInit {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService, location: Location, private itemService: ItemService) {
 | 
				
			||||||
 | 
					    super(store, itemTypeService,location);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public schemeItem: Observable<IItem>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ngOnInit() {
 | 
				
			||||||
 | 
					    this.schemeItem = this.itemService.getItem(this.queryState.parentCode);
 | 
				
			||||||
 | 
					  } 
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -10,7 +10,7 @@
 | 
				
			|||||||
        <li class="nav-item py-0">
 | 
					        <li class="nav-item py-0">
 | 
				
			||||||
          <span><i class="fal fa-layer-group" aria-hidden="true"></i> <span i18n>Base maps</span></span>
 | 
					          <span><i class="fal fa-layer-group" aria-hidden="true"></i> <span i18n>Base maps</span></span>
 | 
				
			||||||
          <div  class="mb-4">
 | 
					          <div  class="mb-4">
 | 
				
			||||||
            <fm-map-layer-list [baseLayers]="true" [itemLayers]="baseLayers|async" [selectedLayer]="selectedBaseLayer|async" (onSelectLayer)="handleSelectBaseLayer($event)"></fm-map-layer-list>
 | 
					            <fm-map-layer-list [baseLayers]="true" [itemLayers]="baseMaps|async" [selectedLayer]="selectedBaseLayer|async" (onSelectLayer)="handleSelectBaseLayer($event)"></fm-map-layer-list>
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
        </li>
 | 
					        </li>
 | 
				
			||||||
        <li class="nav-item py-0">
 | 
					        <li class="nav-item py-0">
 | 
				
			||||||
@@ -20,12 +20,17 @@
 | 
				
			|||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
        </li>
 | 
					        </li>
 | 
				
			||||||
        <li class="nav-item py-0" *ngIf="selectedItemLayer$ | async as selectedItemLayer">
 | 
					        <li class="nav-item py-0" *ngIf="selectedItemLayer$ | async as selectedItemLayer">
 | 
				
			||||||
          <span><i class="fal fa-layer-group" aria-hidden="true"></i> <span i18n>Data</span><span class="slideButton"><a href="#" title="Compare" class="btn btn-light btn-sm" (click)="handleToggleShowDatalayerSlide($event)"><i class="fal fa-sliders-h-square"></i></a></span></span>
 | 
					          <span><i class="fal fa-layer-group" aria-hidden="true"></i> <span i18n>Overlay slider</span><span class="slideButton"><a href="#" title="Compare" class="btn btn-light btn-sm" (click)="handleToggleShowDatalayerSlide($event)"><i class="fal fa-sliders-h-square"></i></a></span></span>
 | 
				
			||||||
          <div class="mb-4">
 | 
					          <div class="mb-4">
 | 
				
			||||||
            <fm-map-layer-list [dataLayers]="true" [itemLayers]="[selectedItemLayer]" [selectedLayer]="selectedItemLayer" (onToggleVisibility)="handleOnToggleVisibility($event)" (onSetOpacity)="handleOnSetOpacity($event)" (onZoomToExtent)="handleZoomToExtent($event)" (onSelectLayer)="handleSelectOverlayLayer($event)"></fm-map-layer-list>
 | 
					            <fm-map-layer-list [dataLayers]="true" [itemLayers]="[selectedItemLayer]" [selectedLayer]="selectedItemLayer" (onToggleVisibility)="handleOnToggleVisibility($event)" (onSetOpacity)="handleOnSetOpacity($event)" (onZoomToExtent)="handleZoomToExtent($event)" (onSelectLayer)="handleSelectOverlayLayer($event)"></fm-map-layer-list>
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
        </li>
 | 
					        </li>
 | 
				
			||||||
 | 
					        <li class="nav-item py-0">
 | 
				
			||||||
 | 
					          <span><i class="fal fa-layer-group" aria-hidden="true"></i> <span i18n>Aerial photos</span></span>
 | 
				
			||||||
 | 
					          <div  class="mb-4">
 | 
				
			||||||
 | 
					            <fm-map-layer-list [baseLayers]="true" [itemLayers]="aerialMaps|async" [selectedLayer]="selectedBaseLayer|async" (onSelectLayer)="handleSelectBaseLayer($event)"></fm-map-layer-list>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </li>
 | 
				
			||||||
      </ul>
 | 
					      </ul>
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@ import { Store } from '@ngrx/store';
 | 
				
			|||||||
import * as mapReducers from '../../reducers/map.reducer';
 | 
					import * as mapReducers from '../../reducers/map.reducer';
 | 
				
			||||||
import * as mapActions from '../../actions/map.actions';
 | 
					import * as mapActions from '../../actions/map.actions';
 | 
				
			||||||
import {createEmpty,extend } from 'ol/extent';
 | 
					import {createEmpty,extend } from 'ol/extent';
 | 
				
			||||||
import { Observable } from 'rxjs';
 | 
					import { filter, map, Observable } from 'rxjs';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Component({
 | 
					@Component({
 | 
				
			||||||
  selector: 'fm-map-layer-switcher',
 | 
					  selector: 'fm-map-layer-switcher',
 | 
				
			||||||
@@ -17,7 +17,8 @@ export class LayerSwitcher  implements OnInit,OnChanges{
 | 
				
			|||||||
  public overlayLayers: Observable<Array<IItemLayer>>;
 | 
					  public overlayLayers: Observable<Array<IItemLayer>>;
 | 
				
			||||||
  public selectedOverlayLayer: Observable<IItemLayer>;
 | 
					  public selectedOverlayLayer: Observable<IItemLayer>;
 | 
				
			||||||
  public selectedItemLayer$: Observable<IItemLayer>;
 | 
					  public selectedItemLayer$: Observable<IItemLayer>;
 | 
				
			||||||
  public baseLayers: Observable<Array<IItemLayer>>;
 | 
					  public baseMaps: Observable<Array<IItemLayer>>;
 | 
				
			||||||
 | 
					  public aerialMaps: Observable<Array<IItemLayer>>;
 | 
				
			||||||
  public selectedBaseLayer: Observable<IItemLayer>;
 | 
					  public selectedBaseLayer: Observable<IItemLayer>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  constructor( private store: Store<mapReducers.State>) {
 | 
					  constructor( private store: Store<mapReducers.State>) {
 | 
				
			||||||
@@ -26,7 +27,8 @@ export class LayerSwitcher  implements OnInit,OnChanges{
 | 
				
			|||||||
  ngOnInit() { 
 | 
					  ngOnInit() { 
 | 
				
			||||||
    this.overlayLayers = this.store.select(mapReducers.selectGetOverlayLayers);
 | 
					    this.overlayLayers = this.store.select(mapReducers.selectGetOverlayLayers);
 | 
				
			||||||
    this.selectedOverlayLayer = this.store.select(mapReducers.selectGetSelectedOverlayLayer);
 | 
					    this.selectedOverlayLayer = this.store.select(mapReducers.selectGetSelectedOverlayLayer);
 | 
				
			||||||
    this.baseLayers = this.store.select(mapReducers.selectGetBaseLayers);
 | 
					    this.baseMaps = this.store.select(mapReducers.selectGetBaseMaps);
 | 
				
			||||||
 | 
					    this.aerialMaps = this.store.select(mapReducers.selectGetArealMaps);
 | 
				
			||||||
    this.selectedBaseLayer = this.store.select(mapReducers.selectGetSelectedBaseLayer);
 | 
					    this.selectedBaseLayer = this.store.select(mapReducers.selectGetSelectedBaseLayer);
 | 
				
			||||||
    this.selectedItemLayer$ = this.store.select(mapReducers.selectGetSelectedItemLayer)
 | 
					    this.selectedItemLayer$ = this.store.select(mapReducers.selectGetSelectedItemLayer)
 | 
				
			||||||
    this.showLayerSwitcher = this.store.select(mapReducers.selectGetShowLayerSwitcher);
 | 
					    this.showLayerSwitcher = this.store.select(mapReducers.selectGetShowLayerSwitcher);
 | 
				
			||||||
@@ -83,3 +85,4 @@ export class LayerSwitcher  implements OnInit,OnChanges{
 | 
				
			|||||||
    event.preventDefault();
 | 
					    event.preventDefault();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
@@ -52,11 +52,20 @@ aol-map { position:absolute;width:100%;height:calc( 100vh );}
 | 
				
			|||||||
  pointer-events: none;
 | 
					  pointer-events: none;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@media screen and (max-width: 768px) {
 | 
				
			||||||
 | 
					  .control-container {
 | 
				
			||||||
 | 
					    margin-left: 1em;
 | 
				
			||||||
 | 
					    margin-right: 1em;
 | 
				
			||||||
 | 
					    pointer-events: all;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.control-container {
 | 
					@media screen and (min-width: 768px) {
 | 
				
			||||||
  float:right;
 | 
					  .control-container {    
 | 
				
			||||||
  margin-right: 1em;
 | 
					    float: right;
 | 
				
			||||||
  pointer-events: all;
 | 
					    margin-right: 1em;
 | 
				
			||||||
 | 
					    pointer-events: all;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.fullscreen .viewport-container {
 | 
					.fullscreen .viewport-container {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,39 +1,39 @@
 | 
				
			|||||||
import { Component, OnInit, OnDestroy, HostListener, ViewChild, AfterViewInit,NgZone,ElementRef } from '@angular/core';
 | 
					import { Component, OnInit, OnDestroy, HostListener, ViewChild, AfterViewInit, NgZone, ElementRef } from '@angular/core';
 | 
				
			||||||
import { Location } from '@angular/common';
 | 
					import { Location } from '@angular/common';
 | 
				
			||||||
import { Observable, Subject, Subscription, from,of ,EMPTY } from 'rxjs';
 | 
					import { Observable, Subject, Subscription, from, of, EMPTY } from 'rxjs';
 | 
				
			||||||
import { withLatestFrom, switchMap,skip  } from 'rxjs/operators';
 | 
					import { withLatestFrom, switchMap, skip } from 'rxjs/operators';
 | 
				
			||||||
import { Router, ActivatedRoute, ParamMap } from '@angular/router';
 | 
					import { Router, ActivatedRoute, ParamMap } from '@angular/router';
 | 
				
			||||||
import { Store } from '@ngrx/store';
 | 
					import { Store } from '@ngrx/store';
 | 
				
			||||||
import { DeviceService } from '@farmmaps/common';
 | 
					import { DeviceService } from '@farmmaps/common';
 | 
				
			||||||
import {getRenderPixel} from 'ol/render';
 | 
					import { getRenderPixel } from 'ol/render';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Map
 | 
					// Map
 | 
				
			||||||
import * as mapReducers from '../../reducers/map.reducer';
 | 
					import * as mapReducers from '../../reducers/map.reducer';
 | 
				
			||||||
import * as mapActions from '../../actions/map.actions';
 | 
					import * as mapActions from '../../actions/map.actions';
 | 
				
			||||||
import { IMapState} from '../../models/map.state';
 | 
					import { IMapState } from '../../models/map.state';
 | 
				
			||||||
import { IClickedFeature} from '../../models/clicked.feature';
 | 
					import { IClickedFeature } from '../../models/clicked.feature';
 | 
				
			||||||
import { IQuery } from '../../reducers/map.reducer'
 | 
					import { IQuery } from '../../reducers/map.reducer'
 | 
				
			||||||
import { ISelectedFeatures } from '../../models/selected.features';
 | 
					import { ISelectedFeatures } from '../../models/selected.features';
 | 
				
			||||||
import { IItemLayer } from '../../models/item.layer';
 | 
					import { IItemLayer } from '../../models/item.layer';
 | 
				
			||||||
import { IListItem, IQueryState } from '@farmmaps/common';
 | 
					import { IListItem, IQueryState } from '@farmmaps/common';
 | 
				
			||||||
import { IPeriodState } from '../../models/period.state';
 | 
					import { IPeriodState } from '../../models/period.state';
 | 
				
			||||||
import {IStyles} from '../../models/style.cache';
 | 
					import { IStyles } from '../../models/style.cache';
 | 
				
			||||||
import { IDroppedFile } from '../aol/file-drop-target/file-drop-target.component';
 | 
					import { IDroppedFile } from '../aol/file-drop-target/file-drop-target.component';
 | 
				
			||||||
import { StateSerializerService } from '@farmmaps/common';
 | 
					import { StateSerializerService } from '@farmmaps/common';
 | 
				
			||||||
import { GeolocationService} from '../../services/geolocation.service';
 | 
					import { GeolocationService } from '../../services/geolocation.service';
 | 
				
			||||||
import { GeolocatorService } from '@farmmaps/common';
 | 
					import { GeolocatorService } from '@farmmaps/common';
 | 
				
			||||||
import {DeviceOrientationService} from '../../services/device-orientation.service';
 | 
					import { DeviceOrientationService } from '../../services/device-orientation.service';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// AppCommon
 | 
					// AppCommon
 | 
				
			||||||
import { ResumableFileUploadService, ItemTypeService } from '@farmmaps/common';
 | 
					import { ResumableFileUploadService, ItemTypeService } from '@farmmaps/common';
 | 
				
			||||||
import { IItemType, IItem } from '@farmmaps/common';
 | 
					import { IItemType, IItem } from '@farmmaps/common';
 | 
				
			||||||
import {commonReducers} from '@farmmaps/common';
 | 
					import { commonReducers } from '@farmmaps/common';
 | 
				
			||||||
import {commonActions} from '@farmmaps/common';
 | 
					import { commonActions } from '@farmmaps/common';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import {Feature} from 'ol';
 | 
					import { Feature } from 'ol';
 | 
				
			||||||
import {Geometry,Point,Circle} from 'ol/geom';
 | 
					import { Geometry, Point, Circle } from 'ol/geom';
 | 
				
			||||||
import {Extent,createEmpty,extend } from 'ol/extent';
 | 
					import { Extent, createEmpty, extend } from 'ol/extent';
 | 
				
			||||||
import {transform} from 'ol/proj';
 | 
					import { transform } from 'ol/proj';
 | 
				
			||||||
import { tassign } from 'tassign';
 | 
					import { tassign } from 'tassign';
 | 
				
			||||||
import * as style from 'ol/style';
 | 
					import * as style from 'ol/style';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -44,7 +44,7 @@ import * as style from 'ol/style';
 | 
				
			|||||||
  styleUrls: ['./map.component.scss']
 | 
					  styleUrls: ['./map.component.scss']
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
 | 
					export class MapComponent implements OnInit, OnDestroy, AfterViewInit {
 | 
				
			||||||
  title = 'Map';
 | 
					  title = 'Map';
 | 
				
			||||||
  public openedModalName$: Observable<string> = this.store.select(commonReducers.selectOpenedModalName);
 | 
					  public openedModalName$: Observable<string> = this.store.select(commonReducers.selectOpenedModalName);
 | 
				
			||||||
  public itemTypes$: Observable<{ [id: string]: IItemType }>;
 | 
					  public itemTypes$: Observable<{ [id: string]: IItemType }>;
 | 
				
			||||||
@@ -54,49 +54,51 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
 | 
				
			|||||||
  public selectedOverlayLayer$: Observable<IItemLayer> = this.store.select(mapReducers.selectGetSelectedOverlayLayer);
 | 
					  public selectedOverlayLayer$: Observable<IItemLayer> = this.store.select(mapReducers.selectGetSelectedOverlayLayer);
 | 
				
			||||||
  public selectedItemLayer$: Observable<IItemLayer> = this.store.select(mapReducers.selectGetSelectedItemLayer);
 | 
					  public selectedItemLayer$: Observable<IItemLayer> = this.store.select(mapReducers.selectGetSelectedItemLayer);
 | 
				
			||||||
  public baseLayers$: Observable<Array<IItemLayer>> = this.store.select(mapReducers.selectGetBaseLayers);
 | 
					  public baseLayers$: Observable<Array<IItemLayer>> = this.store.select(mapReducers.selectGetBaseLayers);
 | 
				
			||||||
  public selectedBaseLayer$: Observable<IItemLayer> =  this.store.select(mapReducers.selectGetSelectedBaseLayer);
 | 
					  public selectedBaseLayer$: Observable<IItemLayer> = this.store.select(mapReducers.selectGetSelectedBaseLayer);
 | 
				
			||||||
  public projection$: Observable<string> = this.store.select(mapReducers.selectGetProjection);
 | 
					  public projection$: Observable<string> = this.store.select(mapReducers.selectGetProjection);
 | 
				
			||||||
  public selectedFeatures$: Subject<ISelectedFeatures> = new Subject<ISelectedFeatures>();
 | 
					  public selectedFeatures$: Subject<ISelectedFeatures> = new Subject<ISelectedFeatures>();
 | 
				
			||||||
  public droppedFile$: Subject<IDroppedFile>  = new Subject<IDroppedFile>();
 | 
					  public droppedFile$: Subject<IDroppedFile> = new Subject<IDroppedFile>();
 | 
				
			||||||
  private paramSub: Subscription;
 | 
					  private paramSub: Subscription;
 | 
				
			||||||
  private itemTypeSub: Subscription;
 | 
					  private itemTypeSub: Subscription;
 | 
				
			||||||
  private stateSub: Subscription;
 | 
					  private stateSub: Subscription;
 | 
				
			||||||
  private queryStateSub: Subscription;
 | 
					  private queryStateSub: Subscription;
 | 
				
			||||||
  private querySub: Subscription;
 | 
					  private querySub: Subscription;
 | 
				
			||||||
  public parentCode$: Observable<string> =this.store.select(mapReducers.selectGetParentCode);
 | 
					  public parentCode$: Observable<string> = this.store.select(mapReducers.selectGetParentCode);
 | 
				
			||||||
  public panelVisible$: Observable<boolean> = this.store.select(mapReducers.selectGetPanelVisible);
 | 
					  public panelVisible$: Observable<boolean> = this.store.select(mapReducers.selectGetPanelVisible);
 | 
				
			||||||
  public panelCollapsed$: Observable<boolean> = this.store.select(mapReducers.selectGetPanelCollapsed);
 | 
					  public panelCollapsed$: Observable<boolean> = this.store.select(mapReducers.selectGetPanelCollapsed);
 | 
				
			||||||
  public panelExtraWide$: Observable<boolean> = this.store.select(mapReducers.selectGetPanelExtraWide);
 | 
					  public panelExtraWide$: Observable<boolean> = this.store.select(mapReducers.selectGetPanelExtraWide);
 | 
				
			||||||
  public selectedFeature$: Observable<Feature<Geometry>> = this.store.select(mapReducers.selectGetSelectedFeature);
 | 
					  public selectedFeature$: Observable<Feature<Geometry>> = this.store.select(mapReducers.selectGetSelectedFeature);
 | 
				
			||||||
  public clickedFeature: Subject<Feature<Geometry>> = new Subject<Feature<Geometry>>();
 | 
					  public clickedFeature: Subject<Feature<Geometry>> = new Subject<Feature<Geometry>>();
 | 
				
			||||||
  public selectedItem$: Observable<IItem> = this.store.select(mapReducers.selectGetSelectedItem);
 | 
					  public selectedItem$: Observable<IItem> = this.store.select(mapReducers.selectGetSelectedItem);
 | 
				
			||||||
  public parentItem$: Observable<IItem> =this.store.select(mapReducers.selectGetParentItem);
 | 
					  public parentItem$: Observable<IItem> = this.store.select(mapReducers.selectGetParentItem);
 | 
				
			||||||
  public queryState$: Observable<IQueryState> = this.store.select(mapReducers.selectGetQueryState);
 | 
					  public queryState$: Observable<IQueryState> = this.store.select(mapReducers.selectGetQueryState);
 | 
				
			||||||
  public state$:Observable<{mapState:IMapState,queryState:IQueryState}> = this.store.select(mapReducers.selectGetState);
 | 
					  public state$: Observable<{ mapState: IMapState, queryState: IQueryState }> = this.store.select(mapReducers.selectGetState);
 | 
				
			||||||
  public period$: Observable<IPeriodState> = this.store.select(mapReducers.selectGetPeriod);
 | 
					  public period$: Observable<IPeriodState> = this.store.select(mapReducers.selectGetPeriod);
 | 
				
			||||||
  public clearEnabled$: Observable<boolean> = this.store.select(mapReducers.selectGetClearEnabled);
 | 
					  public clearEnabled$: Observable<boolean> = this.store.select(mapReducers.selectGetClearEnabled);
 | 
				
			||||||
  public searchCollapsed$: Observable<boolean> = this.store.select(mapReducers.selectGetSearchCollapsed);
 | 
					  public searchCollapsed$: Observable<boolean> = this.store.select(mapReducers.selectGetSearchCollapsed);
 | 
				
			||||||
  public searchMinified$: Observable<boolean> = this.store.select(mapReducers.selectGetSearchMinified);
 | 
					  public searchMinified$: Observable<boolean> = this.store.select(mapReducers.selectGetSearchMinified);
 | 
				
			||||||
  public showDataLayerSlide$: Observable<boolean> = this.store.select(mapReducers.selectGetShowdataLayerSlide);
 | 
					  public showDataLayerSlide$: Observable<boolean> = this.store.select(mapReducers.selectGetShowdataLayerSlide);
 | 
				
			||||||
  public menuVisible$: Observable<boolean>;
 | 
					  public menuVisible$: Observable<boolean>;
 | 
				
			||||||
  public query$: Observable<IQuery> =  this.store.select(mapReducers.selectGetQuery);
 | 
					  public query$: Observable<IQuery> = this.store.select(mapReducers.selectGetQuery);
 | 
				
			||||||
  public position$: Observable<GeolocationPosition> = this.geolocationService.getCurrentPosition();
 | 
					  public position$: Observable<GeolocationPosition> = this.geolocationService.getCurrentPosition();
 | 
				
			||||||
  public compassHeading$: Observable<number> = this.deviceorientationService.getCurrentCompassHeading();
 | 
					  public compassHeading$: Observable<number> = this.deviceorientationService.getCurrentCompassHeading();
 | 
				
			||||||
  public baseLayersCollapsed = true;
 | 
					  public baseLayersCollapsed = true;
 | 
				
			||||||
  public overlayLayersCollapsed = true;
 | 
					  public overlayLayersCollapsed = true;
 | 
				
			||||||
  public extent$: Observable<Extent> = this.store.select(mapReducers.selectGetExtent);
 | 
					  public extent$: Observable<Extent> = this.store.select(mapReducers.selectGetExtent);
 | 
				
			||||||
  public styles$:Observable<IStyles> = this.store.select(mapReducers.selectGetStyles);
 | 
					  public styles$: Observable<IStyles> = this.store.select(mapReducers.selectGetStyles);
 | 
				
			||||||
  public fullscreen$: Observable<boolean> = this.store.select(commonReducers.selectGetFullScreen);
 | 
					  public fullscreen$: Observable<boolean> = this.store.select(commonReducers.selectGetFullScreen);
 | 
				
			||||||
  private lastUrl = "";
 | 
					  private lastUrl = "";
 | 
				
			||||||
  private initialized = false;
 | 
					  private initialized = false;
 | 
				
			||||||
  public noContent = false;
 | 
					  public noContent = false;
 | 
				
			||||||
  public overrideSelectedItemLayer = false;
 | 
					  public overrideSelectedItemLayer = false;
 | 
				
			||||||
  public overrideOverlayLayers = false;
 | 
					  public overrideOverlayLayers = false;
 | 
				
			||||||
 | 
					  public hideShowLayerValues = false;
 | 
				
			||||||
 | 
					  public const
 | 
				
			||||||
  public dataLayerSlideValue = 50;
 | 
					  public dataLayerSlideValue = 50;
 | 
				
			||||||
  public dataLayerSlideEnabled = false;
 | 
					  public dataLayerSlideEnabled = false;
 | 
				
			||||||
  private visibleAreaBottom = 0;
 | 
					  private visibleAreaBottom = 0;
 | 
				
			||||||
  private viewEnabled = true;
 | 
					  private viewEnabled = true;
 | 
				
			||||||
  
 | 
					
 | 
				
			||||||
  @ViewChild('map') map;
 | 
					  @ViewChild('map') map;
 | 
				
			||||||
  @ViewChild('contentDiv') contentDiv: ElementRef;
 | 
					  @ViewChild('contentDiv') contentDiv: ElementRef;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -110,47 +112,48 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
 | 
				
			|||||||
    private geolocationService: GeolocationService,
 | 
					    private geolocationService: GeolocationService,
 | 
				
			||||||
    private geolocaterService: GeolocatorService,
 | 
					    private geolocaterService: GeolocatorService,
 | 
				
			||||||
    private zone: NgZone,
 | 
					    private zone: NgZone,
 | 
				
			||||||
    private deviceorientationService:DeviceOrientationService,
 | 
					    private deviceorientationService: DeviceOrientationService,
 | 
				
			||||||
    public devicesService:DeviceService) {
 | 
					    public devicesService: DeviceService) {
 | 
				
			||||||
      if(route && route.snapshot && route.snapshot.data && route.snapshot.data["fm-map-map"]) {
 | 
					    if (route && route.snapshot && route.snapshot.data && route.snapshot.data["fm-map-map"]) {
 | 
				
			||||||
        const params = route.snapshot.data["fm-map-map"];
 | 
					      const params = route.snapshot.data["fm-map-map"];
 | 
				
			||||||
        this.overrideSelectedItemLayer = params["overrideSelectedItemlayer"] ? params["overrideSelectedItemlayer"] : false;
 | 
					      this.overrideSelectedItemLayer = params["overrideSelectedItemlayer"] ? params["overrideSelectedItemlayer"] : false;
 | 
				
			||||||
        this.overrideOverlayLayers = params["overrideOverlayLayers"] ? params["overrideOverlayLayers"] : false;
 | 
					      this.overrideOverlayLayers = params["overrideOverlayLayers"] ? params["overrideOverlayLayers"] : false;
 | 
				
			||||||
      }
 | 
					      this.hideShowLayerValues = params["hideShowLayerValues"] ? params["hideShowLayerValues"] : false;
 | 
				
			||||||
      this.querySub = this.query$.pipe(skip(1), withLatestFrom(this.mapState$)).subscribe(([query,mapState]) =>{
 | 
					    }
 | 
				
			||||||
        if(query && query.querystate) {
 | 
					    this.querySub = this.query$.pipe(skip(1), withLatestFrom(this.mapState$)).subscribe(([query, mapState]) => {
 | 
				
			||||||
          let newQueryState = tassign(mapReducers.initialQueryState);
 | 
					      if (query && query.querystate) {
 | 
				
			||||||
          //console.debug(`Do Query`);
 | 
					        let newQueryState = tassign(mapReducers.initialQueryState);
 | 
				
			||||||
          const urlparts=[];
 | 
					        //console.debug(`Do Query`);
 | 
				
			||||||
          if (query.querystate.itemCode && query.querystate.itemCode != "") {
 | 
					        const urlparts = [];
 | 
				
			||||||
            if(query.querystate.itemType && query.querystate.itemType!= "") {
 | 
					        if (query.querystate.itemCode && query.querystate.itemCode != "") {
 | 
				
			||||||
              const itemType = this.itemTypeService.itemTypes[query.querystate.itemType];
 | 
					          if (query.querystate.itemType && query.querystate.itemType != "") {
 | 
				
			||||||
              if (itemType && itemType.viewer && itemType.viewer == "edit_in_editor" && itemType.editor) {
 | 
					            const itemType = this.itemTypeService.itemTypes[query.querystate.itemType];
 | 
				
			||||||
                urlparts.push('/editor');
 | 
					            if (itemType && itemType.viewer && itemType.viewer == "edit_in_editor" && itemType.editor) {
 | 
				
			||||||
                urlparts.push(itemType.editor);
 | 
					              urlparts.push('/editor');
 | 
				
			||||||
                urlparts.push('item');
 | 
					              urlparts.push(itemType.editor);
 | 
				
			||||||
                urlparts.push(query.querystate.itemCode);
 | 
					              urlparts.push('item');
 | 
				
			||||||
              }
 | 
					              urlparts.push(query.querystate.itemCode);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
          } else {
 | 
					 | 
				
			||||||
            newQueryState= query.querystate;
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
          if(urlparts.length==0 ) {
 | 
					 | 
				
			||||||
            newQueryState.itemCode = query.querystate.itemCode;
 | 
					 | 
				
			||||||
            this.zone.run(() => {
 | 
					 | 
				
			||||||
              this.replaceUrl(mapState,newQueryState,query.replace);             
 | 
					 | 
				
			||||||
            })
 | 
					 | 
				
			||||||
          } else {
 | 
					 | 
				
			||||||
            this.router.navigate(urlparts);
 | 
					 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					          newQueryState = query.querystate;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      });
 | 
					        if (urlparts.length == 0) {
 | 
				
			||||||
      this.store.dispatch(new mapActions.Init());
 | 
					          newQueryState.itemCode = query.querystate.itemCode;
 | 
				
			||||||
      // this.store.select(commonReducers.getRootItems).subscribe((l) => {
 | 
					          this.zone.run(() => {
 | 
				
			||||||
      //    if(l && l.length>0) {
 | 
					            this.replaceUrl(mapState, newQueryState, query.replace);
 | 
				
			||||||
      //      this.store.dispatch(new mapActions.Init());
 | 
					          })
 | 
				
			||||||
      //    }
 | 
					        } else {
 | 
				
			||||||
      // });
 | 
					          this.router.navigate(urlparts);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    this.store.dispatch(new mapActions.Init());
 | 
				
			||||||
 | 
					    // this.store.select(commonReducers.getRootItems).subscribe((l) => {
 | 
				
			||||||
 | 
					    //    if(l && l.length>0) {
 | 
				
			||||||
 | 
					    //      this.store.dispatch(new mapActions.Init());
 | 
				
			||||||
 | 
					    //    }
 | 
				
			||||||
 | 
					    // });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @HostListener('document:keyup', ['$event'])
 | 
					  @HostListener('document:keyup', ['$event'])
 | 
				
			||||||
@@ -161,27 +164,27 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handlePanelResize(resizeTop:number) {
 | 
					  handlePanelResize(resizeTop: number) {
 | 
				
			||||||
    if(resizeTop==100 || !this.devicesService.IsMobile() ) {
 | 
					    if (resizeTop == 100 || !this.devicesService.IsMobile()) {
 | 
				
			||||||
      this.visibleAreaBottom=0;
 | 
					      this.visibleAreaBottom = 0;
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      this.visibleAreaBottom=100-resizeTop;
 | 
					      this.visibleAreaBottom = 100 - resizeTop;
 | 
				
			||||||
      if(this.visibleAreaBottom>60) {
 | 
					      if (this.visibleAreaBottom > 60) {
 | 
				
			||||||
        this.visibleAreaBottom=60;
 | 
					        this.visibleAreaBottom = 60;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }      
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  bottom(panelVisible:boolean) {
 | 
					  bottom(panelVisible: boolean) {
 | 
				
			||||||
    if(panelVisible) {
 | 
					    if (panelVisible) {
 | 
				
			||||||
      return this.visibleAreaBottom + '%';     
 | 
					      return this.visibleAreaBottom + '%';
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      return "0%";
 | 
					      return "0%";
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handleOpenModal(modalName: string) {
 | 
					  handleOpenModal(modalName: string) {
 | 
				
			||||||
    this.store.dispatch(new  commonActions.OpenModal(modalName));
 | 
					    this.store.dispatch(new commonActions.OpenModal(modalName));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handleCloseModal() {
 | 
					  handleCloseModal() {
 | 
				
			||||||
@@ -189,7 +192,7 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handleFileDropped(droppedFile: IDroppedFile) {
 | 
					  handleFileDropped(droppedFile: IDroppedFile) {
 | 
				
			||||||
    this.uploadService.addFiles(droppedFile.files, droppedFile.event, { parentCode:droppedFile.parentCode, geometry:droppedFile.geometry });
 | 
					    this.uploadService.addFiles(droppedFile.files, droppedFile.event, { parentCode: droppedFile.parentCode, geometry: droppedFile.geometry });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handleFeatureClick(feature: Feature<Geometry>) {
 | 
					  handleFeatureClick(feature: Feature<Geometry>) {
 | 
				
			||||||
@@ -205,26 +208,26 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
 | 
				
			|||||||
    this.store.dispatch(new mapActions.DoQuery(queryState));
 | 
					    this.store.dispatch(new mapActions.DoQuery(queryState));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handleSidepaneloutletActivate(component:any) {
 | 
					  handleSidepaneloutletActivate(component: any) {
 | 
				
			||||||
   if(component && component.hasOwnProperty('clickedFeature')) {
 | 
					    if (component && component.hasOwnProperty('clickedFeature')) {
 | 
				
			||||||
     (component as IClickedFeature).clickedFeature = this.clickedFeature;
 | 
					      (component as IClickedFeature).clickedFeature = this.clickedFeature;
 | 
				
			||||||
   }
 | 
					    }
 | 
				
			||||||
   if(component && component.hasOwnProperty('extrawide')) {
 | 
					    if (component && component.hasOwnProperty('extrawide')) {
 | 
				
			||||||
    this.store.dispatch(new mapActions.SetPanelExtraWide(true));
 | 
					      this.store.dispatch(new mapActions.SetPanelExtraWide(true));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handleSidepaneloutletDeactivate(component:any) {
 | 
					  handleSidepaneloutletDeactivate(component: any) {
 | 
				
			||||||
    if(component && component.hasOwnProperty('clickedFeature')) {
 | 
					    if (component && component.hasOwnProperty('clickedFeature')) {
 | 
				
			||||||
      (component as IClickedFeature).clickedFeature = null;
 | 
					      (component as IClickedFeature).clickedFeature = null;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if(component && component.hasOwnProperty('extrawide')) {
 | 
					    if (component && component.hasOwnProperty('extrawide')) {
 | 
				
			||||||
      this.store.dispatch(new mapActions.SetPanelExtraWide(false));
 | 
					      this.store.dispatch(new mapActions.SetPanelExtraWide(false));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handlePrerender(event:any) {
 | 
					  handlePrerender(event: any) {
 | 
				
			||||||
    if(!this.dataLayerSlideEnabled) return;
 | 
					    if (!this.dataLayerSlideEnabled) return;
 | 
				
			||||||
    const ctx = event.context;
 | 
					    const ctx = event.context;
 | 
				
			||||||
    const mapSize = this.map.instance.getSize();
 | 
					    const mapSize = this.map.instance.getSize();
 | 
				
			||||||
    const width = mapSize[0] * (this.dataLayerSlideValue / 100);
 | 
					    const width = mapSize[0] * (this.dataLayerSlideValue / 100);
 | 
				
			||||||
@@ -243,72 +246,74 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
 | 
				
			|||||||
    ctx.clip();
 | 
					    ctx.clip();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handleSlideChange(event:any) {
 | 
					  handleSlideChange(event: any) {
 | 
				
			||||||
     this.dataLayerSlideValue = event.target.value;
 | 
					    this.dataLayerSlideValue = event.target.value;
 | 
				
			||||||
     this.map.instance.render();
 | 
					    this.map.instance.render();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ngOnInit() {    
 | 
					  ngOnInit() {
 | 
				
			||||||
    this.initialized = false;
 | 
					    this.initialized = false;
 | 
				
			||||||
    //console.debug("Init");
 | 
					    //console.debug("Init");
 | 
				
			||||||
    this.store.dispatch(new mapActions.Clear());
 | 
					    this.store.dispatch(new mapActions.Clear());
 | 
				
			||||||
    this.selectedFeatures$.next({x:0,y:0,features:[]});
 | 
					    this.selectedFeatures$.next({ x: 0, y: 0, features: [] });
 | 
				
			||||||
    this.selectedFeatures$.next(null);
 | 
					    this.selectedFeatures$.next(null);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  initCustomStyles() {
 | 
					  initCustomStyles() {
 | 
				
			||||||
    this.store.dispatch(new mapActions.SetStyle('vnd.farmmaps.itemtype.layer',new style.Style({
 | 
					    this.store.dispatch(new mapActions.SetStyle('vnd.farmmaps.itemtype.layer', new style.Style({
 | 
				
			||||||
      stroke: new style.Stroke({
 | 
					      stroke: new style.Stroke({
 | 
				
			||||||
        color: 'red',
 | 
					        color: 'red',
 | 
				
			||||||
        lineDash: [ 5,5],
 | 
					        lineDash: [5, 5],
 | 
				
			||||||
        width: 1
 | 
					        width: 1
 | 
				
			||||||
      }),
 | 
					      }),
 | 
				
			||||||
      geometry:(feature) =>feature.getGeometry()
 | 
					      geometry: (feature) => feature.getGeometry()
 | 
				
			||||||
    })));
 | 
					    })));
 | 
				
			||||||
    this.store.dispatch(new mapActions.SetStyle('vnd.farmmaps.itemtype.layer_selected',new style.Style({
 | 
					    this.store.dispatch(new mapActions.SetStyle('vnd.farmmaps.itemtype.layer_selected', new style.Style({
 | 
				
			||||||
      stroke: new style.Stroke({
 | 
					      stroke: new style.Stroke({
 | 
				
			||||||
        color: 'red',
 | 
					        color: 'red',
 | 
				
			||||||
        lineDash: [ 5,5],
 | 
					        lineDash: [5, 5],
 | 
				
			||||||
        width: 3
 | 
					        width: 3
 | 
				
			||||||
      }),
 | 
					      }),
 | 
				
			||||||
      geometry:(feature) =>feature.getGeometry()
 | 
					      geometry: (feature) => feature.getGeometry()
 | 
				
			||||||
    })));
 | 
					    })));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  round(value:number,decimals:number):number {
 | 
					  round(value: number, decimals: number): number {
 | 
				
			||||||
    const d = Math.pow(10, decimals);
 | 
					    const d = Math.pow(10, decimals);
 | 
				
			||||||
    return Math.round((value + Number.EPSILON)*d)/d;
 | 
					    return Math.round((value + Number.EPSILON) * d) / d;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  getMapStateFromUrl(params:ParamMap):IMapState {
 | 
					  getMapStateFromUrl(params: ParamMap): IMapState {
 | 
				
			||||||
    const hasUrlmapState = params.has("xCenter") && params.has("yCenter");
 | 
					    const hasUrlmapState = params.has("xCenter") && params.has("yCenter");
 | 
				
			||||||
    if (hasUrlmapState) {
 | 
					    if (hasUrlmapState) {
 | 
				
			||||||
      const xCenter = parseFloat(params.get("xCenter"));
 | 
					      const xCenter = parseFloat(params.get("xCenter"));
 | 
				
			||||||
      const yCenter = parseFloat(params.get("yCenter"));
 | 
					      const yCenter = parseFloat(params.get("yCenter"));
 | 
				
			||||||
      const zoom = parseFloat(params.get("zoom"));
 | 
					      const zoom = parseFloat(params.get("zoom"));
 | 
				
			||||||
      const rotation = parseFloat(params.get("rotation"));
 | 
					      const rotation = parseFloat(params.get("rotation"));
 | 
				
			||||||
      const baseLayer = params.get("baseLayer")?params.get("baseLayer"):"";
 | 
					      const baseLayer = params.get("baseLayer") ? params.get("baseLayer") : "";
 | 
				
			||||||
      const newMapState = {zoom: zoom, rotation: rotation, xCenter: xCenter, yCenter: yCenter, baseLayerCode: baseLayer };
 | 
					      const newMapState = { zoom: zoom, rotation: rotation, xCenter: xCenter, yCenter: yCenter, baseLayerCode: baseLayer };
 | 
				
			||||||
      return newMapState;
 | 
					      return newMapState;
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      return null;
 | 
					      return null;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  normalizeMapState(mapState:IMapState):IMapState {
 | 
					  normalizeMapState(mapState: IMapState): IMapState {
 | 
				
			||||||
    if(!mapState) return null;
 | 
					    if (!mapState) return null;
 | 
				
			||||||
    return {zoom: this.round(mapState.zoom,0),
 | 
					    return {
 | 
				
			||||||
      rotation: this.round(mapState.rotation,2),
 | 
					      zoom: this.round(mapState.zoom, 0),
 | 
				
			||||||
      xCenter: this.round(mapState.xCenter,5),
 | 
					      rotation: this.round(mapState.rotation, 2),
 | 
				
			||||||
      yCenter: this.round(mapState.yCenter,5),
 | 
					      xCenter: this.round(mapState.xCenter, 5),
 | 
				
			||||||
      baseLayerCode: mapState.baseLayerCode };
 | 
					      yCenter: this.round(mapState.yCenter, 5),
 | 
				
			||||||
 | 
					      baseLayerCode: mapState.baseLayerCode
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  serializeMapState(mapState:IMapState):string {
 | 
					  serializeMapState(mapState: IMapState): string {
 | 
				
			||||||
    return JSON.stringify(this.normalizeMapState(mapState));
 | 
					    return JSON.stringify(this.normalizeMapState(mapState));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  getQueryStateFromUrl(params:ParamMap):IQueryState {
 | 
					  getQueryStateFromUrl(params: ParamMap): IQueryState {
 | 
				
			||||||
    if (params.has("queryState")) {
 | 
					    if (params.has("queryState")) {
 | 
				
			||||||
      const queryState = params.get("queryState");
 | 
					      const queryState = params.get("queryState");
 | 
				
			||||||
      let newQueryState = tassign(mapReducers.initialQueryState);
 | 
					      let newQueryState = tassign(mapReducers.initialQueryState);
 | 
				
			||||||
@@ -323,65 +328,65 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  ngAfterViewInit() {
 | 
					  ngAfterViewInit() {
 | 
				
			||||||
    //console.debug("View init");
 | 
					    //console.debug("View init");
 | 
				
			||||||
    this.noContent=true;
 | 
					    this.noContent = true;
 | 
				
			||||||
    this.route.children.forEach((entry) => {
 | 
					    this.route.children.forEach((entry) => {
 | 
				
			||||||
      if(entry.outlet=="primary") {
 | 
					      if (entry.outlet == "primary") {
 | 
				
			||||||
        this.noContent=false;
 | 
					        this.noContent = false;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
      
 | 
					
 | 
				
			||||||
    this.initCustomStyles();
 | 
					    this.initCustomStyles();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // url to state
 | 
					    // url to state
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      const urlMapState = this.getMapStateFromUrl(this.route.snapshot.paramMap);
 | 
					    const urlMapState = this.getMapStateFromUrl(this.route.snapshot.paramMap);
 | 
				
			||||||
      const urlQueryState = this.getQueryStateFromUrl(this.route.snapshot.paramMap);
 | 
					    const urlQueryState = this.getQueryStateFromUrl(this.route.snapshot.paramMap);
 | 
				
			||||||
      if(urlQueryState && urlMapState && this.noContent) {
 | 
					    if (urlQueryState && urlMapState && this.noContent) {
 | 
				
			||||||
        this.store.dispatch(new mapActions.SetState(urlMapState,urlQueryState));
 | 
					      this.store.dispatch(new mapActions.SetState(urlMapState, urlQueryState));
 | 
				
			||||||
        window.localStorage.setItem("FarmMapsCommonMap_mapState",this.serializeMapState(urlMapState));
 | 
					      window.localStorage.setItem("FarmMapsCommonMap_mapState", this.serializeMapState(urlMapState));
 | 
				
			||||||
      } else if(urlQueryState && this.noContent) {
 | 
					    } else if (urlQueryState && this.noContent) {
 | 
				
			||||||
        this.store.dispatch(new mapActions.SetQueryState(urlQueryState));
 | 
					      this.store.dispatch(new mapActions.SetQueryState(urlQueryState));
 | 
				
			||||||
      }  else {
 | 
					    } else {
 | 
				
			||||||
        this.store.dispatch(new mapActions.SetReplaceUrl(true));
 | 
					      this.store.dispatch(new mapActions.SetReplaceUrl(true));
 | 
				
			||||||
      }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      this.paramSub = this.route.paramMap.pipe(withLatestFrom(this.state$),switchMap(([params,state]) => {
 | 
					    this.paramSub = this.route.paramMap.pipe(withLatestFrom(this.state$), switchMap(([params, state]) => {
 | 
				
			||||||
         if(this.initialized && this.noContent) {
 | 
					      if (this.initialized && this.noContent) {
 | 
				
			||||||
          const urlQueryState = this.getQueryStateFromUrl(params);
 | 
					        const urlQueryState = this.getQueryStateFromUrl(params);
 | 
				
			||||||
          if( this.serializeService.serialize(state.queryState) != this.serializeService.serialize(urlQueryState)) {
 | 
					        if (this.serializeService.serialize(state.queryState) != this.serializeService.serialize(urlQueryState)) {
 | 
				
			||||||
            return of(new mapActions.SetState(state.mapState,urlQueryState));
 | 
					          return of(new mapActions.SetState(state.mapState, urlQueryState));
 | 
				
			||||||
          }          
 | 
					 | 
				
			||||||
         } 
 | 
					 | 
				
			||||||
         return EMPTY;        
 | 
					 | 
				
			||||||
      })).subscribe((action) => {
 | 
					 | 
				
			||||||
        if(action) {
 | 
					 | 
				
			||||||
          this.zone.run(() => {
 | 
					 | 
				
			||||||
            //console.debug("Url to state");
 | 
					 | 
				
			||||||
            this.store.dispatch(action);
 | 
					 | 
				
			||||||
          });
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      });
 | 
					      }
 | 
				
			||||||
 | 
					      return EMPTY;
 | 
				
			||||||
 | 
					    })).subscribe((action) => {
 | 
				
			||||||
 | 
					      if (action) {
 | 
				
			||||||
 | 
					        this.zone.run(() => {
 | 
				
			||||||
 | 
					          //console.debug("Url to state");
 | 
				
			||||||
 | 
					          this.store.dispatch(action);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // state to url
 | 
					    // state to url
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.stateSub = this.state$.pipe(switchMap((state) => {
 | 
					    this.stateSub = this.state$.pipe(switchMap((state) => {
 | 
				
			||||||
      const newUrl = this.serializeMapState(state.mapState) + "_" + this.serializeService.serialize(state.queryState);
 | 
					      const newUrl = this.serializeMapState(state.mapState) + "_" + this.serializeService.serialize(state.queryState);
 | 
				
			||||||
      if(this.lastUrl!=newUrl) {
 | 
					      if (this.lastUrl != newUrl) {
 | 
				
			||||||
        this.lastUrl=newUrl;
 | 
					        this.lastUrl = newUrl;
 | 
				
			||||||
        return of(state);
 | 
					        return of(state);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      else {
 | 
					      else {
 | 
				
			||||||
        return of(null);
 | 
					        return of(null);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    })).subscribe((newUrlState: any) => {
 | 
					    })).subscribe((newUrlState: any) => {
 | 
				
			||||||
        if(newUrlState) {
 | 
					      if (newUrlState) {
 | 
				
			||||||
          //console.debug(`State to url`);
 | 
					        //console.debug(`State to url`);
 | 
				
			||||||
          this.replaceUrl(newUrlState.mapState,newUrlState.queryState,newUrlState.replaceUrl);
 | 
					        this.replaceUrl(newUrlState.mapState, newUrlState.queryState, newUrlState.replaceUrl);
 | 
				
			||||||
        }
 | 
					      }
 | 
				
			||||||
      });
 | 
					    });
 | 
				
			||||||
    this.initialized = true;   
 | 
					    this.initialized = true;
 | 
				
			||||||
    this.showDataLayerSlide$.subscribe((v) => {
 | 
					    this.showDataLayerSlide$.subscribe((v) => {
 | 
				
			||||||
      this.dataLayerSlideEnabled=v;
 | 
					      this.dataLayerSlideEnabled = v;
 | 
				
			||||||
      this.map.instance.render();
 | 
					      this.map.instance.render();
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    this.store.select(mapReducers.selectGetViewEnabled).subscribe((v) => {
 | 
					    this.store.select(mapReducers.selectGetViewEnabled).subscribe((v) => {
 | 
				
			||||||
@@ -401,7 +406,7 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
 | 
				
			|||||||
    this.store.dispatch(new commonActions.ToggleMenu());
 | 
					    this.store.dispatch(new commonActions.ToggleMenu());
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handleToggleBaseLayers(event:MouseEvent) {
 | 
					  handleToggleBaseLayers(event: MouseEvent) {
 | 
				
			||||||
    this.baseLayersCollapsed = !this.baseLayersCollapsed;
 | 
					    this.baseLayersCollapsed = !this.baseLayersCollapsed;
 | 
				
			||||||
    event.preventDefault();
 | 
					    event.preventDefault();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@@ -418,30 +423,30 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  replaceUrl(mapState: IMapState, queryState: IQueryState, replace = true) {
 | 
					  replaceUrl(mapState: IMapState, queryState: IQueryState, replace = true) {
 | 
				
			||||||
      if(this.noContent) {
 | 
					    if (this.noContent) {
 | 
				
			||||||
        const newMapState = this.serializeMapState(mapState);
 | 
					      const newMapState = this.serializeMapState(mapState);
 | 
				
			||||||
        const newQueryState = this.serializeService.serialize(queryState);
 | 
					      const newQueryState = this.serializeService.serialize(queryState);
 | 
				
			||||||
        const currentMapState = this.serializeMapState(this.getMapStateFromUrl(this.route.snapshot.paramMap));
 | 
					      const currentMapState = this.serializeMapState(this.getMapStateFromUrl(this.route.snapshot.paramMap));
 | 
				
			||||||
        const urlQueryState = this.getQueryStateFromUrl(this.route.snapshot.paramMap);
 | 
					      const urlQueryState = this.getQueryStateFromUrl(this.route.snapshot.paramMap);
 | 
				
			||||||
        const currentQueryState = urlQueryState==null?"":this.serializeService.serialize(urlQueryState);
 | 
					      const currentQueryState = urlQueryState == null ? "" : this.serializeService.serialize(urlQueryState);
 | 
				
			||||||
        if(mapState.baseLayerCode!="" && ((newMapState!= currentMapState)  || (newQueryState!=currentQueryState))) {
 | 
					      if (mapState.baseLayerCode != "" && ((newMapState != currentMapState) || (newQueryState != currentQueryState))) {
 | 
				
			||||||
          const parts =["."];
 | 
					        const parts = ["."];
 | 
				
			||||||
          parts.push(mapState.xCenter.toFixed(5));
 | 
					        parts.push(mapState.xCenter.toFixed(5));
 | 
				
			||||||
          parts.push(mapState.yCenter.toFixed(5));
 | 
					        parts.push(mapState.yCenter.toFixed(5));
 | 
				
			||||||
          parts.push( mapState.zoom.toFixed(0));
 | 
					        parts.push(mapState.zoom.toFixed(0));
 | 
				
			||||||
          parts.push( mapState.rotation.toFixed(2));        
 | 
					        parts.push(mapState.rotation.toFixed(2));
 | 
				
			||||||
          parts.push(mapState.baseLayerCode);
 | 
					        parts.push(mapState.baseLayerCode);
 | 
				
			||||||
          parts.push( this.serializeService.serialize(queryState));
 | 
					        parts.push(this.serializeService.serialize(queryState));
 | 
				
			||||||
          
 | 
					
 | 
				
			||||||
          //console.debug("Replace url",parts);
 | 
					        //console.debug("Replace url",parts);
 | 
				
			||||||
          this.router.navigate(parts, { replaceUrl: replace,relativeTo:this.route.parent });
 | 
					        this.router.navigate(parts, { replaceUrl: replace, relativeTo: this.route.parent });
 | 
				
			||||||
        }  
 | 
					      }
 | 
				
			||||||
      }     
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handleOnMoveEnd(event) {    
 | 
					  handleOnMoveEnd(event) {
 | 
				
			||||||
    if(this.initialized && this.viewEnabled) {
 | 
					    if (this.initialized && this.viewEnabled) {
 | 
				
			||||||
      this.zone.run(() =>{
 | 
					      this.zone.run(() => {
 | 
				
			||||||
        //console.debug("Move end");
 | 
					        //console.debug("Move end");
 | 
				
			||||||
        const map = event.map;
 | 
					        const map = event.map;
 | 
				
			||||||
        const view = map.getView();
 | 
					        const view = map.getView();
 | 
				
			||||||
@@ -461,21 +466,23 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
 | 
				
			|||||||
          }
 | 
					          }
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
    }   
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handleOnMouseDown(event: MouseEvent) {
 | 
					  handleOnMouseDown(event: MouseEvent) {
 | 
				
			||||||
    event.stopPropagation();
 | 
					    event.stopPropagation();
 | 
				
			||||||
    this.zone.run(() =>{
 | 
					    this.zone.run(() => {
 | 
				
			||||||
      this.store.dispatch(new commonActions.CloseAll());
 | 
					      this.store.dispatch(new commonActions.CloseAll());
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handleShowLayerValues(event: MouseEvent) {
 | 
					  handleShowLayerValues(event: MouseEvent) {
 | 
				
			||||||
    event.stopPropagation();
 | 
					    if (!this.hideShowLayerValues) {
 | 
				
			||||||
    this.zone.run(() =>{
 | 
					      event.stopPropagation();
 | 
				
			||||||
      this.store.dispatch(new mapActions.ToggleLayerValuesEnabled());
 | 
					      this.zone.run(() => {
 | 
				
			||||||
    });
 | 
					        this.store.dispatch(new mapActions.ToggleLayerValuesEnabled());
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handleOnDownload(event) {
 | 
					  handleOnDownload(event) {
 | 
				
			||||||
@@ -491,15 +498,15 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handleOnToggleVisibility(itemLayer: IItemLayer) {
 | 
					  handleOnToggleVisibility(itemLayer: IItemLayer) {
 | 
				
			||||||
    this.store.dispatch(new mapActions.SetVisibility(itemLayer,!itemLayer.visible));
 | 
					    this.store.dispatch(new mapActions.SetVisibility(itemLayer, !itemLayer.visible));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handleOnSetOpacity(event:{ layer: IItemLayer,opacity:number }) {
 | 
					  handleOnSetOpacity(event: { layer: IItemLayer, opacity: number }) {
 | 
				
			||||||
    this.store.dispatch(new mapActions.SetOpacity(event.layer, event.opacity));
 | 
					    this.store.dispatch(new mapActions.SetOpacity(event.layer, event.opacity));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handleZoomToExtent(itemLayer: IItemLayer) {
 | 
					  handleZoomToExtent(itemLayer: IItemLayer) {
 | 
				
			||||||
    const extent =  createEmpty();
 | 
					    const extent = createEmpty();
 | 
				
			||||||
    extend(extent, itemLayer.layer.getExtent());
 | 
					    extend(extent, itemLayer.layer.getExtent());
 | 
				
			||||||
    if (extent) {
 | 
					    if (extent) {
 | 
				
			||||||
      this.store.dispatch(new mapActions.SetExtent(extent));
 | 
					      this.store.dispatch(new mapActions.SetExtent(extent));
 | 
				
			||||||
@@ -514,21 +521,21 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
 | 
				
			|||||||
    this.store.dispatch(new mapActions.SelectOverlayLayer(itemLayer));
 | 
					    this.store.dispatch(new mapActions.SelectOverlayLayer(itemLayer));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handlePeriodChange(period:IPeriodState) {
 | 
					  handlePeriodChange(period: IPeriodState) {
 | 
				
			||||||
    this.store.dispatch(new mapActions.SetPeriod(period));
 | 
					    this.store.dispatch(new mapActions.SetPeriod(period));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handleCitySearch(location:string) {
 | 
					  handleCitySearch(location: string) {
 | 
				
			||||||
    this.geolocaterService.geocode(location).subscribe(locations => {
 | 
					    this.geolocaterService.geocode(location).subscribe(locations => {
 | 
				
			||||||
      if( locations.length > 0) {
 | 
					      if (locations.length > 0) {
 | 
				
			||||||
        const point = new  Point([locations[0].coordinates.lon,locations[0].coordinates.lat]);
 | 
					        const point = new Point([locations[0].coordinates.lon, locations[0].coordinates.lat]);
 | 
				
			||||||
        point.transform('EPSG:4326', 'EPSG:3857');
 | 
					        point.transform('EPSG:4326', 'EPSG:3857');
 | 
				
			||||||
        const circle = new Circle(point.getCoordinates(),5000);// 
 | 
					        const circle = new Circle(point.getCoordinates(), 5000);// 
 | 
				
			||||||
        const extent = createEmpty();
 | 
					        const extent = createEmpty();
 | 
				
			||||||
        extend(extent, circle.getExtent());
 | 
					        extend(extent, circle.getExtent());
 | 
				
			||||||
        this.store.dispatch(new mapActions.SetExtent(extent))
 | 
					        this.store.dispatch(new mapActions.SetExtent(extent))
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
     });
 | 
					    });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ngOnDestroy() {
 | 
					  ngOnDestroy() {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,7 +25,7 @@ export class SelectedItemCropfieldComponent extends AbstractSelectedItemComponen
 | 
				
			|||||||
  public items: Observable<IListItem[]>;
 | 
					  public items: Observable<IListItem[]>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService, location: Location, router: Router, private itemService$: ItemService,private folderService$: FolderService) {
 | 
					  constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService, location: Location, router: Router, private itemService$: ItemService,private folderService$: FolderService) {
 | 
				
			||||||
    super(store, itemTypeService,location,router);
 | 
					    super(store, itemTypeService, itemService$, location,router);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  areaInHa(item:IItem):number {
 | 
					  areaInHa(item:IItem):number {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,28 +7,31 @@
 | 
				
			|||||||
        <h2 *ngIf="parentOfItemType('vnd.farmmaps.itemtype.cropfield')">{{parentItem.name}}</h2>
 | 
					        <h2 *ngIf="parentOfItemType('vnd.farmmaps.itemtype.cropfield')">{{parentItem.name}}</h2>
 | 
				
			||||||
        <h1>{{item.name}}</h1>
 | 
					        <h1>{{item.name}}</h1>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
      <div class="legend-container" *ngIf="item?.data.layers;let layers">
 | 
					      <ng-container *ngIf="item?.data.layers;let layers">
 | 
				
			||||||
        <div class="card menu-card">
 | 
					        <div class="legend-container">
 | 
				
			||||||
          <div *ngIf="layers.length>1">
 | 
					          <div class="card menu-card">
 | 
				
			||||||
            <select (change)="onLayerChanged($event.target.value)">
 | 
					            <div *ngIf="layers.length>1">
 | 
				
			||||||
              <option *ngFor="let l of layers;" [value]="l.index"  [selected]="itemLayer.layerIndex == l.index">{{l.name}}</option>
 | 
					              <select (change)="onLayerChanged($event.target.value)">
 | 
				
			||||||
            </select>
 | 
					                <option *ngFor="let l of layers;" [value]="l.index"  [selected]="itemLayer.layerIndex == l.index">{{l.name}}</option>
 | 
				
			||||||
 | 
					              </select>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <fm-map-layer-legend [showTitle]="layers.length == 1"
 | 
				
			||||||
 | 
					              [layer]="layer(layers,itemLayer.layerIndex)" [histogramenabled]="true"></fm-map-layer-legend>
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
          <fm-map-layer-legend [showTitle]="layers.length == 1"
 | 
					 | 
				
			||||||
            [layer]="layer(layers,itemLayer.layerIndex)" [histogramenabled]="true"></fm-map-layer-legend>
 | 
					 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
      </div>
 | 
					        <div class="card menu-card">
 | 
				
			||||||
      <div class="card menu-card">
 | 
					          <ul class="p-0 mt-2">
 | 
				
			||||||
        <ul class="p-0 mt-2">
 | 
					            <li *ngIf="item.isEditable"><a href="#" class="ms-1 me-1" (click)="handleOnEdit(item)"><i class="fal fa-pencil" aria-hidden="true" i18n-title title="Edit"></i> <span i18n>Edit</span></a></li>
 | 
				
			||||||
          <li *ngIf="item.isEditable"><a href="#" class="ms-1 me-1" (click)="handleOnEdit(item)"><i class="fal fa-pencil" aria-hidden="true" i18n-title title="Edit"></i> <span i18n>Edit</span></a></li>
 | 
					            <ng-container *ngIf="itemTypeService.isLayer(item)">
 | 
				
			||||||
          <ng-container *ngIf="itemTypeService.isLayer(item)">
 | 
					              <li *ngIf="!getItemLayer(item,itemLayer.layerIndex)"><a   href="#" (click)="handleAddAsLayer(item,itemLayer.layerIndex)"><i class="fas fa-layer-plus" aria-hidden="true" i18n-title title="Add as layer"></i> <span i18n>Add as overlay</span></a></li>
 | 
				
			||||||
            <li *ngIf="!getItemLayer(item,itemLayer.layerIndex)"><a   href="#" (click)="handleAddAsLayer(item,itemLayer.layerIndex)"><i class="fas fa-layer-plus" aria-hidden="true" i18n-title title="Add as layer"></i> <span i18n>Add as overlay</span></a></li>
 | 
					              <li *ngIf="getItemLayer(item,itemLayer.layerIndex)"><a  href="#" (click)="handleRemoveLayer(item,itemLayer.layerIndex)"><i class="fas fa-layer-minus" aria-hidden="true" i18n-title title="Remove overlay"></i> <span i18n>Remove overlay</span></a></li>
 | 
				
			||||||
            <li *ngIf="getItemLayer(item,itemLayer.layerIndex)"><a  href="#" (click)="handleRemoveLayer(item,itemLayer.layerIndex)"><i class="fas fa-layer-minus" aria-hidden="true" i18n-title title="Remove overlay"></i> <span i18n>Remove overlay</span></a></li>
 | 
					            </ng-container>
 | 
				
			||||||
          </ng-container>
 | 
					            <li><fm-item-link class="text-primary p-0" [itemCode]="item.code" pathSuffix="data" [showText]="true"></fm-item-link></li>
 | 
				
			||||||
          <li><fm-item-link class="text-primary p-0" [itemCode]="item.code" pathSuffix="data" [showText]="true"></fm-item-link></li>
 | 
					            <li><a href="#" (click)="download($event,item,layers,itemLayer.layerIndex)"><i class="fal fa-download" aria-hidden="true" i18n-title title="Download"></i> <span i18n>Download</span></a></li>
 | 
				
			||||||
        </ul>
 | 
					          </ul>
 | 
				
			||||||
      </div>
 | 
					        </div>
 | 
				
			||||||
      <fm-map-zoom-to-show-alert [layer]="itemLayer?.layer"></fm-map-zoom-to-show-alert>
 | 
					        <fm-map-zoom-to-show-alert [layer]="itemLayer?.layer"></fm-map-zoom-to-show-alert>
 | 
				
			||||||
 | 
					      </ng-container>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,12 +1,13 @@
 | 
				
			|||||||
import { Component, Injectable } from '@angular/core';
 | 
					 | 
				
			||||||
import { Location } from '@angular/common';
 | 
					import { Location } from '@angular/common';
 | 
				
			||||||
import { Store } from '@ngrx/store';
 | 
					import { Component, Injectable, OnDestroy } from '@angular/core';
 | 
				
			||||||
import * as mapReducers from '../../reducers/map.reducer';
 | 
					 | 
				
			||||||
import { commonReducers, ItemTypeService, ItemService, FolderService } from '@farmmaps/common';
 | 
					 | 
				
			||||||
import { Router } from '@angular/router';
 | 
					import { Router } from '@angular/router';
 | 
				
			||||||
 | 
					import { commonReducers, FolderService, IItem, IItemLinkType, ItemService, ItemTypeService, IUrlType } from '@farmmaps/common';
 | 
				
			||||||
 | 
					import { Store } from '@ngrx/store';
 | 
				
			||||||
 | 
					import { Subscription } from 'rxjs';
 | 
				
			||||||
 | 
					import * as mapActions from '../../actions/map.actions';
 | 
				
			||||||
 | 
					import * as mapReducers from '../../reducers/map.reducer';
 | 
				
			||||||
import { ForItemType } from '../for-item/for-itemtype.decorator';
 | 
					import { ForItemType } from '../for-item/for-itemtype.decorator';
 | 
				
			||||||
import { AbstractSelectedItemComponent } from '../selected-item/selected-item.component';
 | 
					import { AbstractSelectedItemComponent } from '../selected-item/selected-item.component';
 | 
				
			||||||
import * as mapActions from '../../actions/map.actions';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ForItemType("vnd.farmmaps.itemtype.geotiff.processed")
 | 
					@ForItemType("vnd.farmmaps.itemtype.geotiff.processed")
 | 
				
			||||||
@@ -16,10 +17,15 @@ import * as mapActions from '../../actions/map.actions';
 | 
				
			|||||||
  templateUrl: './selected-item-geotiff.component.html',
 | 
					  templateUrl: './selected-item-geotiff.component.html',
 | 
				
			||||||
  styleUrls: ['./selected-item-geotiff.component.scss']
 | 
					  styleUrls: ['./selected-item-geotiff.component.scss']
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
export class SelectedItemGeotiffComponent extends AbstractSelectedItemComponent {
 | 
					export class SelectedItemGeotiffComponent extends AbstractSelectedItemComponent implements OnDestroy {
 | 
				
			||||||
 | 
					  sub: Subscription;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService, location: Location, router: Router, private itemService$: ItemService,private folderService$: FolderService) {
 | 
					  constructor(store: Store<mapReducers.State | commonReducers.State>, public itemService: ItemService, itemTypeService: ItemTypeService, location: Location, router: Router, private itemService$: ItemService,private folderService$: FolderService) {
 | 
				
			||||||
    super(store, itemTypeService,location,router);
 | 
					    super(store, itemTypeService,itemService,location,router);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ngOnDestroy(): void {
 | 
				
			||||||
 | 
					    if (this.sub) this.sub.unsubscribe();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  onLayerChanged(layerIndex: number) {
 | 
					  onLayerChanged(layerIndex: number) {
 | 
				
			||||||
@@ -29,4 +35,13 @@ export class SelectedItemGeotiffComponent extends AbstractSelectedItemComponent
 | 
				
			|||||||
  layer(layers:any,layerIndex:number) {
 | 
					  layer(layers:any,layerIndex:number) {
 | 
				
			||||||
    return layers.find(l => l.index == layerIndex);
 | 
					    return layers.find(l => l.index == layerIndex);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  download(event:MouseEvent,item:IItem,layers:any,layerIndex:number) {
 | 
				
			||||||
 | 
					    event.stopPropagation();
 | 
				
			||||||
 | 
					    event.preventDefault();
 | 
				
			||||||
 | 
					    const itemLink : IItemLinkType = {itemcode:item.code,query:`layer=${this.layer(layers,layerIndex).name}`,pathsuffix:"download", validminutes:10}
 | 
				
			||||||
 | 
					    this.sub = this.itemService.getItemLink(itemLink).subscribe((itemLinkUrl:IUrlType) => {  
 | 
				
			||||||
 | 
					        window.location.href = itemLinkUrl.url;     
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,25 +7,28 @@
 | 
				
			|||||||
        <h2 *ngIf="parentOfItemType('vnd.farmmaps.itemtype.cropfield')">{{parentItem.name}}</h2>
 | 
					        <h2 *ngIf="parentOfItemType('vnd.farmmaps.itemtype.cropfield')">{{parentItem.name}}</h2>
 | 
				
			||||||
        <h1>{{item.name}}</h1>
 | 
					        <h1>{{item.name}}</h1>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
      <div class="legend-container" *ngIf="item?.data.layers;let layers">
 | 
					      <ng-container *ngIf="item?.data.layers;let layers">
 | 
				
			||||||
        <div class="card menu-card">
 | 
					        <div class="legend-container">
 | 
				
			||||||
          <div *ngIf="layers.length>1">
 | 
					          <div class="card menu-card">
 | 
				
			||||||
            <select (change)="onLayerChanged($event.target.value)">
 | 
					            <div *ngIf="layers.length>1">
 | 
				
			||||||
              <option *ngFor="let l of layers;" [value]="l.index" [selected]="itemLayer.layerIndex == l.index">{{l.name}}</option>
 | 
					              <select (change)="onLayerChanged($event.target.value)">
 | 
				
			||||||
            </select>
 | 
					                <option *ngFor="let l of layers;" [value]="l.index" [selected]="itemLayer.layerIndex == l.index">{{l.name}}</option>
 | 
				
			||||||
 | 
					              </select>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <fm-map-layer-legend [showTitle]="layers.length==1" [layer]="layer(layers,itemLayer.layerIndex)" [histogramenabled]="true"></fm-map-layer-legend>
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
          <fm-map-layer-legend [showTitle]="layers.length==1" [layer]="layer(layers,itemLayer.layerIndex)" [histogramenabled]="true"></fm-map-layer-legend>
 | 
					 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
      </div>
 | 
					        <div class="card menu-card">
 | 
				
			||||||
      <div class="card menu-card">
 | 
					          <ul class="p-0 mt-2">
 | 
				
			||||||
        <ul class="p-0 mt-2">
 | 
					            <li *ngIf="item.isEditable"><a href="#" class="mt-1 me-1" (click)="handleOnEdit(item)" ><i class="fal fa-pencil" aria-hidden="true" i18n-title title="Edit"></i> <span i18n>Edit</span></a></li>
 | 
				
			||||||
          <li *ngIf="item.isEditable"><a href="#" class="mt-1 me-1" (click)="handleOnEdit(item)" ><i class="fal fa-pencil" aria-hidden="true" i18n-title title="Edit"></i> <span i18n>Edit</span></a></li>
 | 
					            <ng-container *ngIf="itemTypeService.isLayer(item)">
 | 
				
			||||||
          <ng-container *ngIf="itemTypeService.isLayer(item)">
 | 
					              <li *ngIf="!getItemLayer(item,itemLayer.layerIndex)"><a   href="#" (click)="handleAddAsLayer(item,itemLayer.layerIndex)" ><i class="fas fa-layer-olus" aria-hidden="true" i18n-title title="Add as layer"></i> <span i18n>Add as overlay</span></a></li>
 | 
				
			||||||
            <li *ngIf="!getItemLayer(item,itemLayer.layerIndex)"><a   href="#" (click)="handleAddAsLayer(item,itemLayer.layerIndex)" ><i class="fas fa-layer-olus" aria-hidden="true" i18n-title title="Add as layer"></i> <span i18n>Add as overlay</span></a></li>
 | 
					              <li *ngIf="getItemLayer(item,itemLayer.layerIndex)"><a  href="#" (click)="handleRemoveLayer(item,itemLayer.layerIndex)" ><i class="fas fa-layer-minus" aria-hidden="true" i18n-title title="Remove overlay"></i> <span i18n>Remove overlay</span></a></li>
 | 
				
			||||||
            <li *ngIf="getItemLayer(item,itemLayer.layerIndex)"><a  href="#" (click)="handleRemoveLayer(item,itemLayer.layerIndex)" ><i class="fas fa-layer-minus" aria-hidden="true" i18n-title title="Remove overlay"></i> <span i18n>Remove overlay</span></a></li>
 | 
					            </ng-container>
 | 
				
			||||||
          </ng-container>
 | 
					            <li><a href="#" (click)="download($event,item,layers,itemLayer.layerIndex)"><i class="fal fa-download" aria-hidden="true" i18n-title title="Download"></i> <span i18n>Download</span></a></li>
 | 
				
			||||||
        </ul>
 | 
					          </ul>
 | 
				
			||||||
      </div>
 | 
					        </div>
 | 
				
			||||||
 | 
					      </ng-container>
 | 
				
			||||||
      <fm-map-zoom-to-show-alert [layer]="itemLayer?.layer"></fm-map-zoom-to-show-alert>
 | 
					      <fm-map-zoom-to-show-alert [layer]="itemLayer?.layer"></fm-map-zoom-to-show-alert>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,14 +1,13 @@
 | 
				
			|||||||
import { Component, Input, Injectable, OnInit } from '@angular/core';
 | 
					 | 
				
			||||||
import { Location } from '@angular/common';
 | 
					import { Location } from '@angular/common';
 | 
				
			||||||
import { Feature } from 'ol';
 | 
					import { Component, Injectable, OnDestroy } from '@angular/core';
 | 
				
			||||||
 | 
					import { Router } from '@angular/router';
 | 
				
			||||||
 | 
					import { commonReducers, FolderService, IItem, IItemLinkType, ItemService, ItemTypeService, IUrlType } from '@farmmaps/common';
 | 
				
			||||||
import { Store } from '@ngrx/store';
 | 
					import { Store } from '@ngrx/store';
 | 
				
			||||||
import * as mapReducers from '../../reducers/map.reducer';
 | 
					 | 
				
			||||||
import { commonReducers, ItemTypeService, IItem, Item, ItemService, FolderService, IListItem} from '@farmmaps/common';
 | 
					 | 
				
			||||||
import * as mapActions from '../../actions/map.actions';
 | 
					import * as mapActions from '../../actions/map.actions';
 | 
				
			||||||
import { Router, ActivatedRoute, ParamMap, Event } from '@angular/router';
 | 
					import * as mapReducers from '../../reducers/map.reducer';
 | 
				
			||||||
import { ForItemType } from '../for-item/for-itemtype.decorator';
 | 
					import { ForItemType } from '../for-item/for-itemtype.decorator';
 | 
				
			||||||
import { AbstractSelectedItemComponent } from '../selected-item/selected-item.component';
 | 
					import { AbstractSelectedItemComponent } from '../selected-item/selected-item.component';
 | 
				
			||||||
import { Observable } from 'rxjs';
 | 
					import { Subscription } from 'rxjs';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ForItemType("vnd.farmmaps.itemtype.shape.processed")
 | 
					@ForItemType("vnd.farmmaps.itemtype.shape.processed")
 | 
				
			||||||
@@ -18,13 +17,18 @@ import { Observable } from 'rxjs';
 | 
				
			|||||||
  templateUrl: './selected-item-shape.component.html',
 | 
					  templateUrl: './selected-item-shape.component.html',
 | 
				
			||||||
  styleUrls: ['./selected-item-shape.component.scss']
 | 
					  styleUrls: ['./selected-item-shape.component.scss']
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
export class SelectedItemShapeComponent extends AbstractSelectedItemComponent {
 | 
					export class SelectedItemShapeComponent extends AbstractSelectedItemComponent implements OnDestroy {
 | 
				
			||||||
 | 
					 | 
				
			||||||
  constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService, location: Location, router: Router, private itemService$: ItemService,private folderService$: FolderService) {
 | 
					 | 
				
			||||||
    super(store, itemTypeService,location,router);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  public selectedLayer = 0;
 | 
					  public selectedLayer = 0;
 | 
				
			||||||
  
 | 
					  sub: Subscription;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  constructor(store: Store<mapReducers.State | commonReducers.State>, public itemService: ItemService, itemTypeService: ItemTypeService, location: Location, router: Router, private itemService$: ItemService,private folderService$: FolderService) {
 | 
				
			||||||
 | 
					    super(store, itemTypeService,itemService,location,router);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ngOnDestroy(): void {
 | 
				
			||||||
 | 
					    if (this.sub) this.sub.unsubscribe();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  onLayerChanged(layerIndex: number) {
 | 
					  onLayerChanged(layerIndex: number) {
 | 
				
			||||||
    this.store.dispatch(new mapActions.SetLayerIndex(layerIndex));
 | 
					    this.store.dispatch(new mapActions.SetLayerIndex(layerIndex));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@@ -32,4 +36,13 @@ export class SelectedItemShapeComponent extends AbstractSelectedItemComponent {
 | 
				
			|||||||
  layer(layers:any,layerIndex:number) {
 | 
					  layer(layers:any,layerIndex:number) {
 | 
				
			||||||
    return layers.find(l => l.index == layerIndex);
 | 
					    return layers.find(l => l.index == layerIndex);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					  download(event:MouseEvent,item:IItem,layers:any,layerIndex:number) {
 | 
				
			||||||
 | 
					    event.stopPropagation();
 | 
				
			||||||
 | 
					    event.preventDefault();
 | 
				
			||||||
 | 
					    const itemLink : IItemLinkType = {itemcode:item.code,query:`layer=${this.layer(layers,layerIndex).name}`,pathsuffix:"download", validminutes:10}
 | 
				
			||||||
 | 
					    this.sub = this.itemService.getItemLink(itemLink).subscribe((itemLinkUrl:IUrlType) => {  
 | 
				
			||||||
 | 
					        window.location.href = itemLinkUrl.url;     
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,44 +7,46 @@
 | 
				
			|||||||
        <h2 *ngIf="parentOfItemType('vnd.farmmaps.itemtype.cropfield')">{{parentItem.name}}</h2>
 | 
					        <h2 *ngIf="parentOfItemType('vnd.farmmaps.itemtype.cropfield')">{{parentItem.name}}</h2>
 | 
				
			||||||
        <h1>{{item.name}}</h1>
 | 
					        <h1>{{item.name}}</h1>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
      <div class="legend-container" *ngIf="item?.data.layers;let layers">
 | 
					      <ng-container *ngIf="item?.data.layers;let layers">
 | 
				
			||||||
 | 
					        <div class="legend-container">
 | 
				
			||||||
 | 
					          <div class="card menu-card">
 | 
				
			||||||
 | 
					            <h5><span i18n>Date</span>: {{temporalService.selectedDate(itemLayer)}}</h5>
 | 
				
			||||||
 | 
					            <div class="d-flex justify-content-between">
 | 
				
			||||||
 | 
					              <div>
 | 
				
			||||||
 | 
					                <button  *ngIf="temporalService.hasPrevious(itemLayer)" type="button" class="btn btn-link p-0" (click)="handlePreviousTemporal($event)">
 | 
				
			||||||
 | 
					                  <i class="fal fa-arrow-circle-left" aria-hidden="true" i18n-title title="Previous"></i> {{ temporalService.previousDate(itemLayer) }}
 | 
				
			||||||
 | 
					                </button>
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					              <div>
 | 
				
			||||||
 | 
					                <button  *ngIf="temporalService.hasNext(itemLayer)" type="button" class="btn btn-link p-0" (click)="handleNextTemporal($event)">
 | 
				
			||||||
 | 
					                  {{ temporalService.nextDate(itemLayer)}} <i class="fal fa-arrow-circle-right" aria-hidden="true" i18n-title title="Next"></i>
 | 
				
			||||||
 | 
					                </button>
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <fm-map-zoom-to-show-alert [layer]="currentItemLayer()?.layer"></fm-map-zoom-to-show-alert>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					          <div class="card menu-card pt-2">
 | 
				
			||||||
 | 
					            <div *ngIf="layers.length>1">
 | 
				
			||||||
 | 
					              <select (change)="onLayerChanged($event.target.value)">
 | 
				
			||||||
 | 
					                <option *ngFor="let l of layers;" [value]="l.index"  [selected]="itemLayer.layerIndex == l.index">{{l.name}}</option>
 | 
				
			||||||
 | 
					              </select>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <fm-map-layer-legend [showTitle]="layers.length == 1"
 | 
				
			||||||
 | 
					              [layer]="layer(layers,itemLayer.layerIndex)" [histogramenabled]="true"></fm-map-layer-legend>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
        <div class="card menu-card">
 | 
					        <div class="card menu-card">
 | 
				
			||||||
          <h5><span i18n>Date</span>: {{temporalService.selectedDate(itemLayer)}}</h5>
 | 
					          <ul class="p-0 mt-2">
 | 
				
			||||||
          <div class="d-flex justify-content-between">
 | 
					            <li *ngIf="item.isEditable"><a href="#" class="mt-1 me-1" (click)="handleOnEdit(item)"><i class="fal fa-pencil" aria-hidden="true" i18n-title title="Edit"></i> <span i18n>Edit</span></a></li>
 | 
				
			||||||
            <div>
 | 
					            <ng-container *ngIf="itemTypeService.isLayer(item)">
 | 
				
			||||||
              <button  *ngIf="temporalService.hasPrevious(itemLayer)" type="button" class="btn btn-link p-0" (click)="handlePreviousTemporal($event)">
 | 
					              <li *ngIf="!getItemLayer(item,itemLayer.layerIndex)"><a   href="#" (click)="handleAddAsLayer(item,itemLayer.layerIndex)"><i class="fas fa-layer-plus" aria-hidden="true" i18n-title title="Add as layer"></i> <span i18n>Add as overlay</span></a></li>
 | 
				
			||||||
                <i class="fal fa-arrow-circle-left" aria-hidden="true" i18n-title title="Previous"></i> {{ temporalService.previousDate(itemLayer) }}
 | 
					              <li *ngIf="getItemLayer(item,itemLayer.layerIndex)"><a  href="#" (click)="handleRemoveLayer(item,itemLayer.layerIndex)"><i class="fas fa-layer-minus" aria-hidden="true" i18n-title title="Remove overlay"></i> <span i18n>Remove overlay</span></a></li>
 | 
				
			||||||
              </button>
 | 
					            </ng-container>
 | 
				
			||||||
            </div>
 | 
					            <li><a href="#" (click)="handleGoToChart(item)"><i class="fal fa-line-chart" aria-hidden="true" i18m-title title="Show chart"></i> <span i18n>Show chart</span></a></li>
 | 
				
			||||||
            <div>
 | 
					            <li><a href="#" (click)="download($event,item,layers,itemLayer.layerIndex)"><i class="fal fa-download" aria-hidden="true" i18n-title title="Download"></i> <span i18n>Download</span></a></li>
 | 
				
			||||||
              <button  *ngIf="temporalService.hasNext(itemLayer)" type="button" class="btn btn-link p-0" (click)="handleNextTemporal($event)">
 | 
					          </ul>
 | 
				
			||||||
                {{ temporalService.nextDate(itemLayer)}} <i class="fal fa-arrow-circle-right" aria-hidden="true" i18n-title title="Next"></i>
 | 
					 | 
				
			||||||
              </button>
 | 
					 | 
				
			||||||
            </div>
 | 
					 | 
				
			||||||
          </div>
 | 
					 | 
				
			||||||
          <fm-map-zoom-to-show-alert [layer]="currentItemLayer()?.layer"></fm-map-zoom-to-show-alert>
 | 
					 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
        <div class="card menu-card pt-2">
 | 
					      </ng-container>
 | 
				
			||||||
          <div *ngIf="layers.length>1">
 | 
					 | 
				
			||||||
            <select (change)="onLayerChanged($event.target.value)">
 | 
					 | 
				
			||||||
              <option *ngFor="let l of layers;" [value]="l.index"  [selected]="itemLayer.layerIndex == l.index">{{l.name}}</option>
 | 
					 | 
				
			||||||
            </select>
 | 
					 | 
				
			||||||
          </div>
 | 
					 | 
				
			||||||
          <fm-map-layer-legend [showTitle]="layers.length == 1"
 | 
					 | 
				
			||||||
            [layer]="layer(layers,itemLayer.layerIndex)" [histogramenabled]="true"></fm-map-layer-legend>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
      <div class="card menu-card">
 | 
					 | 
				
			||||||
        <ul class="p-0 mt-2">
 | 
					 | 
				
			||||||
          <li *ngIf="item.isEditable"><a href="#" class="mt-1 me-1" (click)="handleOnEdit(item)"><i class="fal fa-pencil" aria-hidden="true" i18n-title title="Edit"></i> <span i18n>Edit</span></a></li>
 | 
					 | 
				
			||||||
          <ng-container *ngIf="itemTypeService.isLayer(item)">
 | 
					 | 
				
			||||||
            <li *ngIf="!getItemLayer(item,itemLayer.layerIndex)"><a   href="#" (click)="handleAddAsLayer(item,itemLayer.layerIndex)"><i class="fas fa-layer-plus" aria-hidden="true" i18n-title title="Add as layer"></i> <span i18n>Add as overlay</span></a></li>
 | 
					 | 
				
			||||||
            <li *ngIf="getItemLayer(item,itemLayer.layerIndex)"><a  href="#" (click)="handleRemoveLayer(item,itemLayer.layerIndex)"><i class="fas fa-layer-minus" aria-hidden="true" i18n-title title="Remove overlay"></i> <span i18n>Remove overlay</span></a></li>
 | 
					 | 
				
			||||||
          </ng-container>
 | 
					 | 
				
			||||||
          <li><a href="#" (click)="handleGoToChart(item)"><i class="fal fa-line-chart" aria-hidden="true" i18m-title title="Show chart"></i> <span i18n>Show chart</span></a></li>
 | 
					 | 
				
			||||||
          <li><a href="#" (click)="download(item,$event)"><i class="fal fa-download" aria-hidden="true" i18n-title title="Download"></i> <span i18n>Download</span></a></li>
 | 
					 | 
				
			||||||
        </ul>
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,15 +1,15 @@
 | 
				
			|||||||
import { Component, Injectable } from '@angular/core';
 | 
					 | 
				
			||||||
import { Location } from '@angular/common';
 | 
					import { Location } from '@angular/common';
 | 
				
			||||||
import { Store } from '@ngrx/store';
 | 
					import { Component, Injectable, OnDestroy } from '@angular/core';
 | 
				
			||||||
import * as mapReducers from '../../reducers/map.reducer';
 | 
					 | 
				
			||||||
import { commonReducers, ItemTypeService, IItem, ItemService, IItemLinkType, IUrlType } from '@farmmaps/common';
 | 
					 | 
				
			||||||
import { Router } from '@angular/router';
 | 
					import { Router } from '@angular/router';
 | 
				
			||||||
 | 
					import { commonReducers, IItem, IItemLinkType, ItemService, ItemTypeService, IUrlType } from '@farmmaps/common';
 | 
				
			||||||
 | 
					import { Store } from '@ngrx/store';
 | 
				
			||||||
 | 
					import { Subscription } from 'rxjs';
 | 
				
			||||||
 | 
					import * as mapActions from '../../actions/map.actions';
 | 
				
			||||||
 | 
					import { IItemLayer, ITemporalItemLayer } from '../../models/item.layer';
 | 
				
			||||||
 | 
					import * as mapReducers from '../../reducers/map.reducer';
 | 
				
			||||||
 | 
					import { TemporalService } from '../../services/temporal.service';
 | 
				
			||||||
import { ForItemType } from '../for-item/for-itemtype.decorator';
 | 
					import { ForItemType } from '../for-item/for-itemtype.decorator';
 | 
				
			||||||
import { AbstractSelectedItemComponent } from '../selected-item/selected-item.component';
 | 
					import { AbstractSelectedItemComponent } from '../selected-item/selected-item.component';
 | 
				
			||||||
import { ITemporalItemLayer} from '../../models/item.layer';
 | 
					 | 
				
			||||||
import * as mapActions from '../../actions/map.actions';
 | 
					 | 
				
			||||||
import { IItemLayer } from '../../models/item.layer';
 | 
					 | 
				
			||||||
import {TemporalService} from '../../services/temporal.service';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ForItemType("vnd.farmmaps.itemtype.temporal")
 | 
					@ForItemType("vnd.farmmaps.itemtype.temporal")
 | 
				
			||||||
@Injectable()
 | 
					@Injectable()
 | 
				
			||||||
@@ -18,10 +18,15 @@ import {TemporalService} from '../../services/temporal.service';
 | 
				
			|||||||
  templateUrl: './selected-item-temporal.component.html',
 | 
					  templateUrl: './selected-item-temporal.component.html',
 | 
				
			||||||
  styleUrls: ['./selected-item-temporal.component.scss']
 | 
					  styleUrls: ['./selected-item-temporal.component.scss']
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
export class SelectedItemTemporalComponent extends AbstractSelectedItemComponent {
 | 
					export class SelectedItemTemporalComponent extends AbstractSelectedItemComponent implements OnDestroy {
 | 
				
			||||||
 | 
					  sub: Subscription;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  constructor(store: Store<mapReducers.State | commonReducers.State>, public itemService: ItemService, itemTypeService: ItemTypeService, location: Location, router: Router,public temporalService:TemporalService) {
 | 
					  constructor(store: Store<mapReducers.State | commonReducers.State>, public itemService: ItemService, itemTypeService: ItemTypeService, location: Location, router: Router,public temporalService:TemporalService) {
 | 
				
			||||||
    super(store, itemTypeService,location,router);
 | 
					    super(store, itemTypeService,itemService,location,router);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  ngOnDestroy(): void {
 | 
				
			||||||
 | 
					    if (this.sub) this.sub.unsubscribe();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  onLayerChanged(layerIndex: number) {
 | 
					  onLayerChanged(layerIndex: number) {
 | 
				
			||||||
@@ -32,8 +37,6 @@ export class SelectedItemTemporalComponent extends AbstractSelectedItemComponent
 | 
				
			|||||||
    return  (this.itemLayer as ITemporalItemLayer)?.selectedItemLayer
 | 
					    return  (this.itemLayer as ITemporalItemLayer)?.selectedItemLayer
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  handleNextTemporal(event:MouseEvent) {
 | 
					  handleNextTemporal(event:MouseEvent) {
 | 
				
			||||||
    this.store.dispatch(new mapActions.NextTemporal());
 | 
					    this.store.dispatch(new mapActions.NextTemporal());
 | 
				
			||||||
    event.preventDefault();    
 | 
					    event.preventDefault();    
 | 
				
			||||||
@@ -61,14 +64,12 @@ export class SelectedItemTemporalComponent extends AbstractSelectedItemComponent
 | 
				
			|||||||
    return false;
 | 
					    return false;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  download(item:IItem,event:MouseEvent) {
 | 
					  download(event:MouseEvent,item:IItem,layers:any,layerIndex:number) {
 | 
				
			||||||
    event.stopPropagation();
 | 
					    event.stopPropagation();
 | 
				
			||||||
    event.preventDefault();
 | 
					    event.preventDefault();
 | 
				
			||||||
    const itemLink : IItemLinkType = {itemcode:item.code,pathsuffix:"download", validminutes:10}
 | 
					    const itemLink : IItemLinkType = {itemcode:item.code,query:`layer=${this.layer(layers,layerIndex).name}`,pathsuffix:"download", validminutes:10}
 | 
				
			||||||
    console.log('download1', itemLink)
 | 
					    this.sub = this.itemService.getItemLink(itemLink).subscribe((itemLinkUrl:IUrlType) => {  
 | 
				
			||||||
    const foo = this.itemService.getItemLink(itemLink).subscribe((itemLinkUrl:IUrlType) => {  
 | 
					       window.location.href = itemLinkUrl.url;       
 | 
				
			||||||
      console.log('download2', itemLinkUrl)
 | 
					 | 
				
			||||||
       window.location.href =itemLinkUrl.url        
 | 
					 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@ import {Component, Injectable, Input, Directive} from '@angular/core';
 | 
				
			|||||||
import {Location} from '@angular/common';
 | 
					import {Location} from '@angular/common';
 | 
				
			||||||
import {Store} from '@ngrx/store';
 | 
					import {Store} from '@ngrx/store';
 | 
				
			||||||
import * as mapReducers from '../../reducers/map.reducer';
 | 
					import * as mapReducers from '../../reducers/map.reducer';
 | 
				
			||||||
import {AppConfig, commonReducers, IItem, ItemTypeService} from '@farmmaps/common';
 | 
					import {AppConfig, commonReducers, IItem, ItemService, ItemTypeService} from '@farmmaps/common';
 | 
				
			||||||
import * as mapActions from '../../actions/map.actions';
 | 
					import * as mapActions from '../../actions/map.actions';
 | 
				
			||||||
import {Router} from '@angular/router';
 | 
					import {Router} from '@angular/router';
 | 
				
			||||||
import { IItemLayer } from '../../models/item.layer';
 | 
					import { IItemLayer } from '../../models/item.layer';
 | 
				
			||||||
@@ -15,7 +15,7 @@ export abstract class AbstractSelectedItemComponent {
 | 
				
			|||||||
  @Input() parentItem: IItem;
 | 
					  @Input() parentItem: IItem;
 | 
				
			||||||
  @Input() itemLayer: IItemLayer;
 | 
					  @Input() itemLayer: IItemLayer;
 | 
				
			||||||
  @Input() overlayLayers: Array<IItemLayer>;
 | 
					  @Input() overlayLayers: Array<IItemLayer>;
 | 
				
			||||||
  constructor(public store: Store<mapReducers.State | commonReducers.State>, public itemTypeService: ItemTypeService, private location: Location, public router: Router) {
 | 
					  constructor(public store: Store<mapReducers.State | commonReducers.State>, public itemTypeService: ItemTypeService, public itemService: ItemService, private location: Location, public router: Router) {
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handleOnView(item: IItem) {
 | 
					  handleOnView(item: IItem) {
 | 
				
			||||||
@@ -37,6 +37,11 @@ export abstract class AbstractSelectedItemComponent {
 | 
				
			|||||||
    return false;
 | 
					    return false;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  handleOnDelete(item: IItem) {
 | 
				
			||||||
 | 
					    this.itemService.deleteItem(item.code);
 | 
				
			||||||
 | 
					    return false;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handleAddAsLayer(item: IItem,layerIndex = -1) {
 | 
					  handleAddAsLayer(item: IItem,layerIndex = -1) {
 | 
				
			||||||
    this.store.dispatch(new mapActions.AddLayer(item,layerIndex));
 | 
					    this.store.dispatch(new mapActions.AddLayer(item,layerIndex));
 | 
				
			||||||
    return false;
 | 
					    return false;
 | 
				
			||||||
@@ -76,8 +81,8 @@ export abstract class AbstractSelectedItemComponent {
 | 
				
			|||||||
})
 | 
					})
 | 
				
			||||||
export class SelectedItemComponent extends AbstractSelectedItemComponent {
 | 
					export class SelectedItemComponent extends AbstractSelectedItemComponent {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService, location: Location, router: Router, public config:AppConfig) {
 | 
					  constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService, itemService: ItemService, location: Location, router: Router, public config:AppConfig) {
 | 
				
			||||||
    super(store, itemTypeService,location,router);
 | 
					    super(store, itemTypeService,itemService,location,router);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  getThumbnailUrl(item:IItem):string {
 | 
					  getThumbnailUrl(item:IItem):string {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,6 +9,7 @@ import { ILayervalue } from '../models/layer.value';
 | 
				
			|||||||
import * as mapActions from '../actions/map.actions';
 | 
					import * as mapActions from '../actions/map.actions';
 | 
				
			||||||
import {commonActions} from '@farmmaps/common';
 | 
					import {commonActions} from '@farmmaps/common';
 | 
				
			||||||
import { createSelector, createFeatureSelector } from '@ngrx/store';
 | 
					import { createSelector, createFeatureSelector } from '@ngrx/store';
 | 
				
			||||||
 | 
					import * as _ from 'lodash';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import {Feature} from 'ol';
 | 
					import {Feature} from 'ol';
 | 
				
			||||||
import {Geometry} from 'ol/geom';
 | 
					import {Geometry} from 'ol/geom';
 | 
				
			||||||
@@ -47,6 +48,7 @@ export interface State {
 | 
				
			|||||||
  query:IQuery,
 | 
					  query:IQuery,
 | 
				
			||||||
  parentCode: string,
 | 
					  parentCode: string,
 | 
				
			||||||
  features: Array<Feature<Geometry>>,
 | 
					  features: Array<Feature<Geometry>>,
 | 
				
			||||||
 | 
					  featuresBackup: Array<Feature<Geometry>>,
 | 
				
			||||||
  panelVisible: boolean,
 | 
					  panelVisible: boolean,
 | 
				
			||||||
  panelCollapsed: boolean,
 | 
					  panelCollapsed: boolean,
 | 
				
			||||||
  panelExtraWide: boolean,
 | 
					  panelExtraWide: boolean,
 | 
				
			||||||
@@ -93,6 +95,7 @@ export const initialState: State = {
 | 
				
			|||||||
  query: null,
 | 
					  query: null,
 | 
				
			||||||
  parentCode: null,
 | 
					  parentCode: null,
 | 
				
			||||||
  features: [],
 | 
					  features: [],
 | 
				
			||||||
 | 
					  featuresBackup: [],
 | 
				
			||||||
  panelVisible: false,
 | 
					  panelVisible: false,
 | 
				
			||||||
  panelCollapsed: false,
 | 
					  panelCollapsed: false,
 | 
				
			||||||
  panelExtraWide: false,
 | 
					  panelExtraWide: false,
 | 
				
			||||||
@@ -156,13 +159,15 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
 | 
				
			|||||||
      const a = action as mapActions.StartSearchSuccess;
 | 
					      const a = action as mapActions.StartSearchSuccess;
 | 
				
			||||||
      return tassign(state, {
 | 
					      return tassign(state, {
 | 
				
			||||||
        features: a.features,
 | 
					        features: a.features,
 | 
				
			||||||
 | 
					        featuresBackup: [],
 | 
				
			||||||
        inSearch:false
 | 
					        inSearch:false
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    case mapActions.SETFEATURES: {
 | 
					    case mapActions.SETFEATURES: {
 | 
				
			||||||
      const a = action as mapActions.SetFeatures;
 | 
					      const a = action as mapActions.SetFeatures;
 | 
				
			||||||
      return tassign(state, {
 | 
					      return tassign(state, {
 | 
				
			||||||
        features: a.features
 | 
					        features: a.features,
 | 
				
			||||||
 | 
					        featuresBackup: []
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    case mapActions.SELECTFEATURE: {
 | 
					    case mapActions.SELECTFEATURE: {
 | 
				
			||||||
@@ -180,6 +185,7 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
 | 
				
			|||||||
        selectedItemLayer: null,
 | 
					        selectedItemLayer: null,
 | 
				
			||||||
        showDataLayerSlide: false,
 | 
					        showDataLayerSlide: false,
 | 
				
			||||||
        features:[],
 | 
					        features:[],
 | 
				
			||||||
 | 
					        featuresBackup: [],
 | 
				
			||||||
        inSearch:inSearch
 | 
					        inSearch:inSearch
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -296,6 +302,7 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
 | 
				
			|||||||
      return tassign(state, {
 | 
					      return tassign(state, {
 | 
				
			||||||
        selectedItem: null,
 | 
					        selectedItem: null,
 | 
				
			||||||
        features:[],
 | 
					        features:[],
 | 
				
			||||||
 | 
					        featuresBackup: [],
 | 
				
			||||||
        selectedItemLayer:null,
 | 
					        selectedItemLayer:null,
 | 
				
			||||||
        searchCollapsed: !panelVisible,
 | 
					        searchCollapsed: !panelVisible,
 | 
				
			||||||
        panelVisible: panelVisible,
 | 
					        panelVisible: panelVisible,
 | 
				
			||||||
@@ -332,7 +339,8 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
 | 
				
			|||||||
        extent: a.feature.getGeometry().getExtent(),
 | 
					        extent: a.feature.getGeometry().getExtent(),
 | 
				
			||||||
        searchCollapsed: false,
 | 
					        searchCollapsed: false,
 | 
				
			||||||
        clearEnabled:true,
 | 
					        clearEnabled:true,
 | 
				
			||||||
        features:features
 | 
					        features:features,
 | 
				
			||||||
 | 
					        featuresBackup:[]
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    case mapActions.UPDATEFEATURESUCCESS: {
 | 
					    case mapActions.UPDATEFEATURESUCCESS: {
 | 
				
			||||||
@@ -346,7 +354,7 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
 | 
				
			|||||||
          features.push(state.features[i]);
 | 
					          features.push(state.features[i]);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      return tassign(state, { features: features });
 | 
					      return tassign(state, { features: features, featuresBackup: [] });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    case mapActions.EXPANDSEARCH: {
 | 
					    case mapActions.EXPANDSEARCH: {
 | 
				
			||||||
      return tassign(state, { searchCollapsed: false });
 | 
					      return tassign(state, { searchCollapsed: false });
 | 
				
			||||||
@@ -391,7 +399,7 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
 | 
				
			|||||||
      return tassign(state, {overlayLayers: [], selectedOverlayLayer: null});
 | 
					      return tassign(state, {overlayLayers: [], selectedOverlayLayer: null});
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    case mapActions.CLEARFEATURES: {
 | 
					    case mapActions.CLEARFEATURES: {
 | 
				
			||||||
      return tassign(state, {features: [], selectedFeature: null});
 | 
					      return tassign(state, {features: [], featuresBackup: [], selectedFeature: null});
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    case mapActions.SETVISIBILITY: {
 | 
					    case mapActions.SETVISIBILITY: {
 | 
				
			||||||
      const a = action as mapActions.SetVisibility;
 | 
					      const a = action as mapActions.SetVisibility;
 | 
				
			||||||
@@ -509,6 +517,7 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
 | 
				
			|||||||
        searchCollapsed: true,
 | 
					        searchCollapsed: true,
 | 
				
			||||||
        searchMinified: false,
 | 
					        searchMinified: false,
 | 
				
			||||||
        features: [],
 | 
					        features: [],
 | 
				
			||||||
 | 
					        featuresBackup: [],
 | 
				
			||||||
        query:initialState.query,
 | 
					        query:initialState.query,
 | 
				
			||||||
        showLayerSwitcher: false,
 | 
					        showLayerSwitcher: false,
 | 
				
			||||||
        extent: null,
 | 
					        extent: null,
 | 
				
			||||||
@@ -556,7 +565,8 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
 | 
				
			|||||||
          selectedItem: null,
 | 
					          selectedItem: null,
 | 
				
			||||||
          selectedItemLayer: null,
 | 
					          selectedItemLayer: null,
 | 
				
			||||||
          showDataLayerSlide: false,
 | 
					          showDataLayerSlide: false,
 | 
				
			||||||
          features:[]
 | 
					          features:[],
 | 
				
			||||||
 | 
					          featuresBackup:[]
 | 
				
			||||||
         });
 | 
					         });
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      if(state.features.length>0)  {
 | 
					      if(state.features.length>0)  {
 | 
				
			||||||
@@ -569,7 +579,7 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
 | 
				
			|||||||
        if(index>=0) {
 | 
					        if(index>=0) {
 | 
				
			||||||
          const newFeatures = state.features.slice(0);
 | 
					          const newFeatures = state.features.slice(0);
 | 
				
			||||||
          newFeatures.splice(index,1);
 | 
					          newFeatures.splice(index,1);
 | 
				
			||||||
          return tassign(state,{features:newFeatures});
 | 
					          return tassign(state,{features:newFeatures, featuresBackup:[]});
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      return state;
 | 
					      return state;
 | 
				
			||||||
@@ -578,6 +588,17 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
 | 
				
			|||||||
      const a= action as mapActions.SetPanelExtraWide;
 | 
					      const a= action as mapActions.SetPanelExtraWide;
 | 
				
			||||||
      return tassign(state,{panelExtraWide:a.panelExtraWide});
 | 
					      return tassign(state,{panelExtraWide:a.panelExtraWide});
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    case mapActions.BACKUPFEATURES: {
 | 
				
			||||||
 | 
					      return tassign(state, {
 | 
				
			||||||
 | 
					        featuresBackup: _.cloneDeep(state.features)
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    case mapActions.RESTOREFEATURES: {
 | 
				
			||||||
 | 
					      return tassign(state, {
 | 
				
			||||||
 | 
					        features: _.cloneDeep(state.featuresBackup),
 | 
				
			||||||
 | 
					        featuresBackup: []
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    default: {
 | 
					    default: {
 | 
				
			||||||
      return state;
 | 
					      return state;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -637,6 +658,8 @@ export const selectGetExtent = createSelector(selectMapState, getExtent);
 | 
				
			|||||||
export const selectGetViewExtent = createSelector(selectMapState, getViewExtent);
 | 
					export const selectGetViewExtent = createSelector(selectMapState, getViewExtent);
 | 
				
			||||||
export const selectGetOverlayLayers = createSelector(selectMapState, getOverlayLayers);
 | 
					export const selectGetOverlayLayers = createSelector(selectMapState, getOverlayLayers);
 | 
				
			||||||
export const selectGetBaseLayers = createSelector(selectMapState, getBaseLayers);
 | 
					export const selectGetBaseLayers = createSelector(selectMapState, getBaseLayers);
 | 
				
			||||||
 | 
					export const selectGetBaseMaps = createSelector(selectGetBaseLayers, (layers) => layers.filter(layer => layer.item.data.category === "baseMap"));
 | 
				
			||||||
 | 
					export const selectGetArealMaps = createSelector(selectGetBaseLayers, (layers) => layers.filter(layer => layer.item.data.category === "aerialPhoto").sort((a, b) => a.item.dataDate <= b.item.dataDate ? 1 : -1));
 | 
				
			||||||
export const selectGetProjection = createSelector(selectMapState, getProjection);
 | 
					export const selectGetProjection = createSelector(selectMapState, getProjection);
 | 
				
			||||||
export const selectGetSelectedBaseLayer = createSelector(selectMapState, getSelectedBaseLayer);
 | 
					export const selectGetSelectedBaseLayer = createSelector(selectMapState, getSelectedBaseLayer);
 | 
				
			||||||
export const selectGetSelectedOverlayLayer = createSelector(selectMapState, getSelectedOverlayLayer);
 | 
					export const selectGetSelectedOverlayLayer = createSelector(selectMapState, getSelectedOverlayLayer);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,6 +26,7 @@ export class Item implements IItem {
 | 
				
			|||||||
  public data?:any;
 | 
					  public data?:any;
 | 
				
			||||||
  public isEditable?:boolean;
 | 
					  public isEditable?:boolean;
 | 
				
			||||||
  public owner?: string;
 | 
					  public owner?: string;
 | 
				
			||||||
 | 
					  public fullPath?: string;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  constructor() {  
 | 
					  constructor() {  
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,15 +53,19 @@ export class AdminService {
 | 
				
			|||||||
    return this.httpClient.post<IItemTask>(`${this.ApiEndpoint()}/api/v1/admin/${item.code}/tasks`, task);
 | 
					    return this.httpClient.post<IItemTask>(`${this.ApiEndpoint()}/api/v1/admin/${item.code}/tasks`, task);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  getAnalyseFolderOverview(): Observable<any> {
 | 
					  getFileStorageOverview(): Observable<any> {
 | 
				
			||||||
    return this.httpClient.get<any>(`${this.ApiEndpoint()}/api/v1/admin/analysefolder/folderinfo/overview`);
 | 
					    return this.httpClient.get<any>(`${this.ApiEndpoint()}/api/v1/admin/filestorage/folderinfo/overview`);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  getAnalyseFolderInfo(user: string): Observable<any> {
 | 
					  getFileStorageInfo(user: string): Observable<any> {
 | 
				
			||||||
    return this.httpClient.get<any>(`${this.ApiEndpoint()}/api/v1/admin/analysefolder/folderinfo/${user}`);
 | 
					    return this.httpClient.get<any>(`${this.ApiEndpoint()}/api/v1/admin/filestorage/folderinfo/${user}`);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  getAnalyseFolderLog(): Observable<any> {
 | 
					  getFileStorageLog(): Observable<any> {
 | 
				
			||||||
    return this.httpClient.get<any>(`${this.ApiEndpoint()}/api/v1/admin/analysefolder/folderinfo/log`);
 | 
					    return this.httpClient.get<any>(`${this.ApiEndpoint()}/api/v1/admin/filestorage/folderinfo/log`);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  validateEmail(user: IUser) {
 | 
				
			||||||
 | 
					    return this.httpClient.post(`${this.ApiEndpoint()}/api/v1/admin/user/${user.code}/validateemail`, user);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -79,7 +79,8 @@ export class ItemService {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  getItemList(itemType?: string, dataFilter?: any, level?: number, atItemLocationItemCode?: string,
 | 
					  getItemList(itemType?: string, dataFilter?: any, level?: number, atItemLocationItemCode?: string,
 | 
				
			||||||
    indexed?: boolean, validToday?: boolean,tags?:string,crs?:string, startDate?: Date, endDate?: Date,
 | 
					    indexed?: boolean, validToday?: boolean,tags?:string,crs?:string, startDate?: Date, endDate?: Date,
 | 
				
			||||||
    skip?: number, take?: number, sourceTask?: string, exactMatchStartOrEndDate?: boolean, owner?:string): Observable<IItem[]> {
 | 
					    skip?: number, take?: number, sourceTask?: string, exactMatchStartOrEndDate?: boolean, owner?:string,
 | 
				
			||||||
 | 
					    includeFullpath?: boolean): Observable<IItem[]> {
 | 
				
			||||||
    let params = new HttpParams();
 | 
					    let params = new HttpParams();
 | 
				
			||||||
    if(itemType)  params = params.append("it", itemType);
 | 
					    if(itemType)  params = params.append("it", itemType);
 | 
				
			||||||
    if(dataFilter) params = params.append("df", JSON.stringify(dataFilter));
 | 
					    if(dataFilter) params = params.append("df", JSON.stringify(dataFilter));
 | 
				
			||||||
@@ -96,6 +97,7 @@ export class ItemService {
 | 
				
			|||||||
    if(take) params = params.append("take", take);
 | 
					    if(take) params = params.append("take", take);
 | 
				
			||||||
    if(exactMatchStartOrEndDate !== undefined) params = params.append("exactMatchStartOrEndDate", exactMatchStartOrEndDate);
 | 
					    if(exactMatchStartOrEndDate !== undefined) params = params.append("exactMatchStartOrEndDate", exactMatchStartOrEndDate);
 | 
				
			||||||
    if(owner) params = params.append("owner", owner);
 | 
					    if(owner) params = params.append("owner", owner);
 | 
				
			||||||
 | 
					    if(includeFullpath) params = params.append("includeFullpath",includeFullpath?"true":"false");
 | 
				
			||||||
    return this.httpClient.get<IItem[]>(`${this.ApiEndpoint()}/api/v1/items/`, { params: params });
 | 
					    return this.httpClient.get<IItem[]>(`${this.ApiEndpoint()}/api/v1/items/`, { params: params });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -114,7 +116,8 @@ export class ItemService {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  getChildItemList(parentcode: string, itemType?: string, dataFilter?: any, level = 1, deep = true,
 | 
					  getChildItemList(parentcode: string, itemType?: string, dataFilter?: any, level = 1, deep = true,
 | 
				
			||||||
                   startDate?: Date, endDate?: Date, skip?: number, take?: number,
 | 
					                   startDate?: Date, endDate?: Date, skip?: number, take?: number,
 | 
				
			||||||
                   exactMatchStartOrEndDate?: boolean, owner?:string, indexed?: boolean): Observable<IItem[]> {
 | 
					                   exactMatchStartOrEndDate?: boolean, owner?:string, indexed?: boolean,
 | 
				
			||||||
 | 
					                  atItemLocationItemCode?: string): Observable<IItem[]> {
 | 
				
			||||||
    let params = new HttpParams();
 | 
					    let params = new HttpParams();
 | 
				
			||||||
    if(itemType != null) {
 | 
					    if(itemType != null) {
 | 
				
			||||||
      params = params.append("it", itemType);
 | 
					      params = params.append("it", itemType);
 | 
				
			||||||
@@ -132,6 +135,7 @@ export class ItemService {
 | 
				
			|||||||
    if(skip) params = params.append("skip", skip);
 | 
					    if(skip) params = params.append("skip", skip);
 | 
				
			||||||
    if(take) params = params.append("take", take);
 | 
					    if(take) params = params.append("take", take);
 | 
				
			||||||
    if(indexed) params = params.append("ind",indexed?"true":"false");
 | 
					    if(indexed) params = params.append("ind",indexed?"true":"false");
 | 
				
			||||||
 | 
					    if(atItemLocationItemCode) params = params.append("ail",atItemLocationItemCode);
 | 
				
			||||||
    return this.httpClient.get<IItem[]>(`${this.ApiEndpoint()}/api/v1/items/${parentcode}/children`, { params: params });
 | 
					    return this.httpClient.get<IItem[]>(`${this.ApiEndpoint()}/api/v1/items/${parentcode}/children`, { params: params });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user