diff --git a/package-lock.json b/package-lock.json index ebed8cb..b5c8923 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "farmmaps-lib-app", - "version": "4.14.3", + "version": "4.18.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "farmmaps-lib-app", - "version": "4.14.3", + "version": "4.18.0", "dependencies": { "@angular-eslint/eslint-plugin": "^18.2.0", "@angular/animations": "18.2.3", @@ -90,7 +90,7 @@ }, "dist/common": { "name": "@farmmaps/common", - "version": "4.14.2", + "version": "4.18.0-prerelease.2576", "dependencies": { "tslib": "^2.3.0" }, @@ -115,7 +115,7 @@ }, "dist/common-map": { "name": "@farmmaps/common-map", - "version": "4.14.2", + "version": "4.18.0-prerelease.2576", "dependencies": { "tslib": "^2.0.0" }, @@ -130,7 +130,7 @@ }, "dist/common-map3d": { "name": "@farmmaps/common-map3d", - "version": "4.14.2", + "version": "4.18.0-prerelease.2576", "dependencies": { "tslib": "^2.0.0" }, @@ -143,7 +143,7 @@ }, "dist/ng-openlayers": { "name": "@farmmaps/ng-openlayers", - "version": "4.14.2", + "version": "4.18.0-prerelease.2576", "license": "MPL-2.0", "dependencies": { "tslib": "^2.3.0" diff --git a/package.json b/package.json index 896d8a3..a3e277e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "farmmaps-lib-app", - "version": "4.14.3", + "version": "4.18.0", "scripts": { "ng": "ng", "start": "ng serve", diff --git a/projects/common-map/src/fm-map/common-map.module.ts b/projects/common-map/src/fm-map/common-map.module.ts index 32d68c8..1074bf8 100644 --- a/projects/common-map/src/fm-map/common-map.module.ts +++ b/projects/common-map/src/fm-map/common-map.module.ts @@ -36,10 +36,12 @@ import { RotationResetComponent } from './components/aol/rotation-reset/rotation import { ZoomToExtentComponent } from './components/aol/zoom-to-extent/zoom-to-extent.component'; import { FeatureListContainerComponent } from './components/feature-list-container/feature-list-container.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 { 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 { FeatureListFeatureCroppingschemeComponent } from './components/feature-list-feature-croppingscheme/feature-list-feature-croppingscheme.component'; +import { FeatureListFeatureObservationComponent } from './components/feature-list-feature-observation/feature-list-feature-observation.component'; import { AbstractFeatureListFeatureComponent, FeatureListFeatureComponent } from './components/feature-list-feature/feature-list-feature.component'; import { AbstractFeatureListComponent, FeatureListComponent } from './components/feature-list/feature-list.component'; import { GeometryThumbnailComponent } from './components/feature-thumbnail/feature-thumbnail.component'; @@ -105,7 +107,7 @@ const metaReducers: Array> = [LocalStorageSync]; export { 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, FeatureListFeatureObservationComponent, FeatureListFeatureCroppingschemeComponent, FileDropTargetComponent, ForChild, 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, mapReducers, MapSearchComponent, MetaDataModalComponent, PanToLocation, RotationResetComponent, SelectedItemComponent, SelectedItemContainerComponent, SelectedItemCropfieldComponent, @@ -142,10 +144,12 @@ export { FeatureListContainerComponent, FeatureListCroppingschemeComponent, FeatureListCropfieldComponent, + FeatureListObservationComponent, FeatureListFeatureContainerComponent, FeatureListFeatureComponent, FeatureListFeatureCroppingschemeComponent, FeatureListFeatureCropfieldComponent, + FeatureListFeatureObservationComponent, SelectedItemContainerComponent, SelectedItemComponent, SelectedItemCropfieldComponent, @@ -178,6 +182,7 @@ export { LayerSwitcher, FeatureListFeatureComponent, FeatureListFeatureCropfieldComponent, + FeatureListFeatureObservationComponent, FeatureListFeatureCroppingschemeComponent, SelectedItemContainerComponent, SelectedItemComponent, @@ -201,6 +206,7 @@ export { FeatureListContainerComponent, FeatureListCroppingschemeComponent, FeatureListCropfieldComponent, + FeatureListObservationComponent, FeatureListFeatureContainerComponent, ZoomToExtentComponent, ifZoomToShowDirective, @@ -214,9 +220,11 @@ export { TemporalService, { provide: AbstractFeatureListComponent, useClass: FeatureListCroppingschemeComponent, multi: true }, { provide: AbstractFeatureListComponent, useClass: FeatureListCropfieldComponent, multi: true }, + { provide: AbstractFeatureListComponent, useClass: FeatureListObservationComponent, multi: true }, { provide: AbstractFeatureListFeatureComponent, useClass: FeatureListFeatureComponent, multi: true }, { provide: AbstractFeatureListFeatureComponent, useClass: FeatureListFeatureCroppingschemeComponent, multi: true }, { provide: AbstractFeatureListFeatureComponent, useClass: FeatureListFeatureCropfieldComponent, multi: true }, + { provide: AbstractFeatureListFeatureComponent, useClass: FeatureListFeatureObservationComponent, multi: true }, { provide: AbstractSelectedItemComponent, useClass: SelectedItemComponent, multi: true }, { provide: AbstractSelectedItemComponent, useClass: SelectedItemCropfieldComponent, multi: true }, { provide: AbstractSelectedItemComponent, useClass: SelectedItemGeotiffComponent, multi: true }, diff --git a/projects/common-map/src/fm-map/components/feature-list-feature-observation/feature-list-feature-observation.component.html b/projects/common-map/src/fm-map/components/feature-list-feature-observation/feature-list-feature-observation.component.html new file mode 100644 index 0000000..edf13e5 --- /dev/null +++ b/projects/common-map/src/fm-map/components/feature-list-feature-observation/feature-list-feature-observation.component.html @@ -0,0 +1,10 @@ +
+
+
+ +
+
+

{{feature.get('name')}}

+
+
+
\ No newline at end of file diff --git a/projects/common-map/src/fm-map/components/feature-list-feature-observation/feature-list-feature-observation.component.scss b/projects/common-map/src/fm-map/components/feature-list-feature-observation/feature-list-feature-observation.component.scss new file mode 100644 index 0000000..0af39a5 --- /dev/null +++ b/projects/common-map/src/fm-map/components/feature-list-feature-observation/feature-list-feature-observation.component.scss @@ -0,0 +1,22 @@ +.card-title { + font-size: 1rem; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.card-text { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.col { + overflow: hidden; +} + +.thumbnail { + width: 4em; + height: 4em; +} + diff --git a/projects/common-map/src/fm-map/components/feature-list-feature-observation/feature-list-feature-observation.component.ts b/projects/common-map/src/fm-map/components/feature-list-feature-observation/feature-list-feature-observation.component.ts new file mode 100644 index 0000000..2c02cbb --- /dev/null +++ b/projects/common-map/src/fm-map/components/feature-list-feature-observation/feature-list-feature-observation.component.ts @@ -0,0 +1,29 @@ +import { Component, Injectable } from '@angular/core'; +import { AppConfig, commonReducers, ItemTypeService } from '@farmmaps/common'; +import { Store } from '@ngrx/store'; +import { Feature } from 'ol'; +import { Geometry } from 'ol/geom'; +import * as mapReducers from '../../reducers/map.reducer'; +import { AbstractFeatureListFeatureComponent } from '../feature-list-feature/feature-list-feature.component'; +import { ForItemType } from '../for-item/for-itemtype.decorator'; + +@ForItemType("vnd.farmmaps.itemtype.observation") +@Injectable() +@Component({ + selector: 'fm-map-feature-list-feature-observation', + templateUrl: './feature-list-feature-observation.component.html', + styleUrls: ['./feature-list-feature-observation.component.scss'] +}) +export class FeatureListFeatureObservationComponent extends AbstractFeatureListFeatureComponent { + + constructor(store: Store, itemTypeService: ItemTypeService,config:AppConfig) { + super(store, itemTypeService,config); + } + + getSource(feature: Feature): string { + let source = "/images/decease.png"; + var type = feature.get('type'); + source = '/images/' + type + '.png'; + return source; + } +} diff --git a/projects/common-map/src/fm-map/components/feature-list-observation/feature-list-observation.component.html b/projects/common-map/src/fm-map/components/feature-list-observation/feature-list-observation.component.html new file mode 100644 index 0000000..d5f6532 --- /dev/null +++ b/projects/common-map/src/fm-map/components/feature-list-observation/feature-list-observation.component.html @@ -0,0 +1,14 @@ +
+
+ +

Farm

+

{{schemeItem.name}}

+
+
+
+ +
+
+
+
+
diff --git a/projects/common-map/src/fm-map/components/feature-list-observation/feature-list-observation.component.scss b/projects/common-map/src/fm-map/components/feature-list-observation/feature-list-observation.component.scss new file mode 100644 index 0000000..5db84ec --- /dev/null +++ b/projects/common-map/src/fm-map/components/feature-list-observation/feature-list-observation.component.scss @@ -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; +} diff --git a/projects/common-map/src/fm-map/components/feature-list-observation/feature-list-observation.component.ts b/projects/common-map/src/fm-map/components/feature-list-observation/feature-list-observation.component.ts new file mode 100644 index 0000000..1c06bdf --- /dev/null +++ b/projects/common-map/src/fm-map/components/feature-list-observation/feature-list-observation.component.ts @@ -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, itemTypeService: ItemTypeService, location: Location, private itemService: ItemService) { + super(store, itemTypeService,location); + } + + public schemeItem: Observable + + ngOnInit() { + this.schemeItem = this.itemService.getItem(this.queryState.parentCode); + } +} diff --git a/projects/common-map/src/fm-map/components/layer-switcher/layer-switcher.component.html b/projects/common-map/src/fm-map/components/layer-switcher/layer-switcher.component.html index 9eb9fc6..7ec7bd8 100644 --- a/projects/common-map/src/fm-map/components/layer-switcher/layer-switcher.component.html +++ b/projects/common-map/src/fm-map/components/layer-switcher/layer-switcher.component.html @@ -10,7 +10,7 @@ - + diff --git a/projects/common-map/src/fm-map/components/layer-switcher/layer-switcher.component.ts b/projects/common-map/src/fm-map/components/layer-switcher/layer-switcher.component.ts index e85bbe1..f52a913 100644 --- a/projects/common-map/src/fm-map/components/layer-switcher/layer-switcher.component.ts +++ b/projects/common-map/src/fm-map/components/layer-switcher/layer-switcher.component.ts @@ -4,7 +4,7 @@ import { Store } from '@ngrx/store'; import * as mapReducers from '../../reducers/map.reducer'; import * as mapActions from '../../actions/map.actions'; import {createEmpty,extend } from 'ol/extent'; -import { Observable } from 'rxjs'; +import { filter, map, Observable } from 'rxjs'; @Component({ selector: 'fm-map-layer-switcher', @@ -17,7 +17,8 @@ export class LayerSwitcher implements OnInit,OnChanges{ public overlayLayers: Observable>; public selectedOverlayLayer: Observable; public selectedItemLayer$: Observable; - public baseLayers: Observable>; + public baseMaps: Observable>; + public aerialMaps: Observable>; public selectedBaseLayer: Observable; constructor( private store: Store) { @@ -26,7 +27,8 @@ export class LayerSwitcher implements OnInit,OnChanges{ ngOnInit() { this.overlayLayers = this.store.select(mapReducers.selectGetOverlayLayers); 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.selectedItemLayer$ = this.store.select(mapReducers.selectGetSelectedItemLayer) this.showLayerSwitcher = this.store.select(mapReducers.selectGetShowLayerSwitcher); @@ -83,3 +85,4 @@ export class LayerSwitcher implements OnInit,OnChanges{ event.preventDefault(); } } + \ No newline at end of file diff --git a/projects/common-map/src/fm-map/components/map/map.component.scss b/projects/common-map/src/fm-map/components/map/map.component.scss index df5e219..b91c7b0 100644 --- a/projects/common-map/src/fm-map/components/map/map.component.scss +++ b/projects/common-map/src/fm-map/components/map/map.component.scss @@ -52,11 +52,20 @@ aol-map { position:absolute;width:100%;height:calc( 100vh );} pointer-events: none; } +@media screen and (max-width: 768px) { + .control-container { + margin-left: 1em; + margin-right: 1em; + pointer-events: all; + } +} -.control-container { - float:right; - margin-right: 1em; - pointer-events: all; +@media screen and (min-width: 768px) { + .control-container { + float: right; + margin-right: 1em; + pointer-events: all; + } } .fullscreen .viewport-container { diff --git a/projects/common-map/src/fm-map/components/selected-item-cropfield/selected-item-cropfield.component.ts b/projects/common-map/src/fm-map/components/selected-item-cropfield/selected-item-cropfield.component.ts index 9f15b39..0195fa7 100644 --- a/projects/common-map/src/fm-map/components/selected-item-cropfield/selected-item-cropfield.component.ts +++ b/projects/common-map/src/fm-map/components/selected-item-cropfield/selected-item-cropfield.component.ts @@ -25,7 +25,7 @@ export class SelectedItemCropfieldComponent extends AbstractSelectedItemComponen public items: Observable; constructor(store: Store, 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 { diff --git a/projects/common-map/src/fm-map/components/selected-item-geotiff/selected-item-geotiff.component.html b/projects/common-map/src/fm-map/components/selected-item-geotiff/selected-item-geotiff.component.html index 88d2730..58b1b99 100644 --- a/projects/common-map/src/fm-map/components/selected-item-geotiff/selected-item-geotiff.component.html +++ b/projects/common-map/src/fm-map/components/selected-item-geotiff/selected-item-geotiff.component.html @@ -7,28 +7,31 @@

{{parentItem.name}}

{{item.name}}

-
-
diff --git a/projects/common-map/src/fm-map/components/selected-item-geotiff/selected-item-geotiff.component.ts b/projects/common-map/src/fm-map/components/selected-item-geotiff/selected-item-geotiff.component.ts index b633d3d..d6c42d5 100644 --- a/projects/common-map/src/fm-map/components/selected-item-geotiff/selected-item-geotiff.component.ts +++ b/projects/common-map/src/fm-map/components/selected-item-geotiff/selected-item-geotiff.component.ts @@ -1,12 +1,13 @@ -import { Component, Injectable } from '@angular/core'; import { Location } from '@angular/common'; -import { Store } from '@ngrx/store'; -import * as mapReducers from '../../reducers/map.reducer'; -import { commonReducers, ItemTypeService, ItemService, FolderService } from '@farmmaps/common'; +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 { 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 { AbstractSelectedItemComponent } from '../selected-item/selected-item.component'; -import * as mapActions from '../../actions/map.actions'; @ForItemType("vnd.farmmaps.itemtype.geotiff.processed") @@ -16,10 +17,15 @@ import * as mapActions from '../../actions/map.actions'; templateUrl: './selected-item-geotiff.component.html', styleUrls: ['./selected-item-geotiff.component.scss'] }) -export class SelectedItemGeotiffComponent extends AbstractSelectedItemComponent { +export class SelectedItemGeotiffComponent extends AbstractSelectedItemComponent implements OnDestroy { + sub: Subscription; - constructor(store: Store, itemTypeService: ItemTypeService, location: Location, router: Router, private itemService$: ItemService,private folderService$: FolderService) { - super(store, itemTypeService,location,router); + constructor(store: Store, 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) { @@ -29,4 +35,13 @@ export class SelectedItemGeotiffComponent extends AbstractSelectedItemComponent layer(layers:any,layerIndex:number) { 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; + }) + } } diff --git a/projects/common-map/src/fm-map/components/selected-item-shape/selected-item-shape.component.html b/projects/common-map/src/fm-map/components/selected-item-shape/selected-item-shape.component.html index 6475704..da0eec1 100644 --- a/projects/common-map/src/fm-map/components/selected-item-shape/selected-item-shape.component.html +++ b/projects/common-map/src/fm-map/components/selected-item-shape/selected-item-shape.component.html @@ -7,25 +7,28 @@

{{parentItem.name}}

{{item.name}}

-
-
diff --git a/projects/common-map/src/fm-map/components/selected-item-shape/selected-item-shape.component.ts b/projects/common-map/src/fm-map/components/selected-item-shape/selected-item-shape.component.ts index bed1cf7..27c8f11 100644 --- a/projects/common-map/src/fm-map/components/selected-item-shape/selected-item-shape.component.ts +++ b/projects/common-map/src/fm-map/components/selected-item-shape/selected-item-shape.component.ts @@ -1,14 +1,13 @@ -import { Component, Input, Injectable, OnInit } from '@angular/core'; 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 * 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 { Router, ActivatedRoute, ParamMap, Event } from '@angular/router'; +import * as mapReducers from '../../reducers/map.reducer'; import { ForItemType } from '../for-item/for-itemtype.decorator'; import { AbstractSelectedItemComponent } from '../selected-item/selected-item.component'; -import { Observable } from 'rxjs'; +import { Subscription } from 'rxjs'; @ForItemType("vnd.farmmaps.itemtype.shape.processed") @@ -18,13 +17,18 @@ import { Observable } from 'rxjs'; templateUrl: './selected-item-shape.component.html', styleUrls: ['./selected-item-shape.component.scss'] }) -export class SelectedItemShapeComponent extends AbstractSelectedItemComponent { - - constructor(store: Store, itemTypeService: ItemTypeService, location: Location, router: Router, private itemService$: ItemService,private folderService$: FolderService) { - super(store, itemTypeService,location,router); - } +export class SelectedItemShapeComponent extends AbstractSelectedItemComponent implements OnDestroy { public selectedLayer = 0; - + sub: Subscription; + + constructor(store: Store, 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) { this.store.dispatch(new mapActions.SetLayerIndex(layerIndex)); } @@ -32,4 +36,13 @@ export class SelectedItemShapeComponent extends AbstractSelectedItemComponent { layer(layers:any,layerIndex:number) { 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; + }) + } } diff --git a/projects/common-map/src/fm-map/components/selected-item-temporal/selected-item-temporal.component.html b/projects/common-map/src/fm-map/components/selected-item-temporal/selected-item-temporal.component.html index 5076153..b61bae7 100644 --- a/projects/common-map/src/fm-map/components/selected-item-temporal/selected-item-temporal.component.html +++ b/projects/common-map/src/fm-map/components/selected-item-temporal/selected-item-temporal.component.html @@ -7,44 +7,46 @@

{{parentItem.name}}

{{item.name}}

-
+ +
+ + +
- -
- + diff --git a/projects/common-map/src/fm-map/components/selected-item-temporal/selected-item-temporal.component.ts b/projects/common-map/src/fm-map/components/selected-item-temporal/selected-item-temporal.component.ts index bc6af67..e56dfb4 100644 --- a/projects/common-map/src/fm-map/components/selected-item-temporal/selected-item-temporal.component.ts +++ b/projects/common-map/src/fm-map/components/selected-item-temporal/selected-item-temporal.component.ts @@ -1,15 +1,15 @@ -import { Component, Injectable } from '@angular/core'; import { Location } from '@angular/common'; -import { Store } from '@ngrx/store'; -import * as mapReducers from '../../reducers/map.reducer'; -import { commonReducers, ItemTypeService, IItem, ItemService, IItemLinkType, IUrlType } from '@farmmaps/common'; +import { Component, Injectable, OnDestroy } from '@angular/core'; 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 { 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") @Injectable() @@ -18,10 +18,15 @@ import {TemporalService} from '../../services/temporal.service'; templateUrl: './selected-item-temporal.component.html', styleUrls: ['./selected-item-temporal.component.scss'] }) -export class SelectedItemTemporalComponent extends AbstractSelectedItemComponent { +export class SelectedItemTemporalComponent extends AbstractSelectedItemComponent implements OnDestroy { + sub: Subscription; constructor(store: Store, 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) { @@ -32,8 +37,6 @@ export class SelectedItemTemporalComponent extends AbstractSelectedItemComponent return (this.itemLayer as ITemporalItemLayer)?.selectedItemLayer } - - handleNextTemporal(event:MouseEvent) { this.store.dispatch(new mapActions.NextTemporal()); event.preventDefault(); @@ -61,14 +64,12 @@ export class SelectedItemTemporalComponent extends AbstractSelectedItemComponent return false; } - download(item:IItem,event:MouseEvent) { + download(event:MouseEvent,item:IItem,layers:any,layerIndex:number) { event.stopPropagation(); event.preventDefault(); - const itemLink : IItemLinkType = {itemcode:item.code,pathsuffix:"download", validminutes:10} - console.log('download1', itemLink) - const foo = this.itemService.getItemLink(itemLink).subscribe((itemLinkUrl:IUrlType) => { - console.log('download2', itemLinkUrl) - window.location.href =itemLinkUrl.url + 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; }) } } diff --git a/projects/common-map/src/fm-map/components/selected-item/selected-item.component.ts b/projects/common-map/src/fm-map/components/selected-item/selected-item.component.ts index 0fd6b69..1e48b10 100644 --- a/projects/common-map/src/fm-map/components/selected-item/selected-item.component.ts +++ b/projects/common-map/src/fm-map/components/selected-item/selected-item.component.ts @@ -2,7 +2,7 @@ import {Component, Injectable, Input, Directive} from '@angular/core'; import {Location} from '@angular/common'; import {Store} from '@ngrx/store'; 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 {Router} from '@angular/router'; import { IItemLayer } from '../../models/item.layer'; @@ -15,7 +15,7 @@ export abstract class AbstractSelectedItemComponent { @Input() parentItem: IItem; @Input() itemLayer: IItemLayer; @Input() overlayLayers: Array; - constructor(public store: Store, public itemTypeService: ItemTypeService, private location: Location, public router: Router) { + constructor(public store: Store, public itemTypeService: ItemTypeService, public itemService: ItemService, private location: Location, public router: Router) { } handleOnView(item: IItem) { @@ -37,6 +37,11 @@ export abstract class AbstractSelectedItemComponent { return false; } + handleOnDelete(item: IItem) { + this.itemService.deleteItem(item.code); + return false; + } + handleAddAsLayer(item: IItem,layerIndex = -1) { this.store.dispatch(new mapActions.AddLayer(item,layerIndex)); return false; @@ -76,8 +81,8 @@ export abstract class AbstractSelectedItemComponent { }) export class SelectedItemComponent extends AbstractSelectedItemComponent { - constructor(store: Store, itemTypeService: ItemTypeService, location: Location, router: Router, public config:AppConfig) { - super(store, itemTypeService,location,router); + constructor(store: Store, itemTypeService: ItemTypeService, itemService: ItemService, location: Location, router: Router, public config:AppConfig) { + super(store, itemTypeService,itemService,location,router); } getThumbnailUrl(item:IItem):string { diff --git a/projects/common-map/src/fm-map/reducers/map.reducer.ts b/projects/common-map/src/fm-map/reducers/map.reducer.ts index a0b171f..acf1cf0 100644 --- a/projects/common-map/src/fm-map/reducers/map.reducer.ts +++ b/projects/common-map/src/fm-map/reducers/map.reducer.ts @@ -637,6 +637,8 @@ export const selectGetExtent = createSelector(selectMapState, getExtent); export const selectGetViewExtent = createSelector(selectMapState, getViewExtent); export const selectGetOverlayLayers = createSelector(selectMapState, getOverlayLayers); 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 selectGetSelectedBaseLayer = createSelector(selectMapState, getSelectedBaseLayer); export const selectGetSelectedOverlayLayer = createSelector(selectMapState, getSelectedOverlayLayer); diff --git a/projects/common/src/fm/models/item.ts b/projects/common/src/fm/models/item.ts index 34977c7..7a429a3 100644 --- a/projects/common/src/fm/models/item.ts +++ b/projects/common/src/fm/models/item.ts @@ -26,6 +26,7 @@ export class Item implements IItem { public data?:any; public isEditable?:boolean; public owner?: string; + public fullPath?: string; constructor() { } diff --git a/projects/common/src/fm/services/admin.service.ts b/projects/common/src/fm/services/admin.service.ts index 9ba956a..f8eabef 100644 --- a/projects/common/src/fm/services/admin.service.ts +++ b/projects/common/src/fm/services/admin.service.ts @@ -53,15 +53,19 @@ export class AdminService { return this.httpClient.post(`${this.ApiEndpoint()}/api/v1/admin/${item.code}/tasks`, task); } - getAnalyseFolderOverview(): Observable { - return this.httpClient.get(`${this.ApiEndpoint()}/api/v1/admin/analysefolder/folderinfo/overview`); + getFileStorageOverview(): Observable { + return this.httpClient.get(`${this.ApiEndpoint()}/api/v1/admin/filestorage/folderinfo/overview`); } - getAnalyseFolderInfo(user: string): Observable { - return this.httpClient.get(`${this.ApiEndpoint()}/api/v1/admin/analysefolder/folderinfo/${user}`); + getFileStorageInfo(user: string): Observable { + return this.httpClient.get(`${this.ApiEndpoint()}/api/v1/admin/filestorage/folderinfo/${user}`); } - getAnalyseFolderLog(): Observable { - return this.httpClient.get(`${this.ApiEndpoint()}/api/v1/admin/analysefolder/folderinfo/log`); + getFileStorageLog(): Observable { + return this.httpClient.get(`${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); } } diff --git a/projects/common/src/fm/services/item.service.ts b/projects/common/src/fm/services/item.service.ts index e7b18b0..8d08465 100644 --- a/projects/common/src/fm/services/item.service.ts +++ b/projects/common/src/fm/services/item.service.ts @@ -79,7 +79,8 @@ export class ItemService { getItemList(itemType?: string, dataFilter?: any, level?: number, atItemLocationItemCode?: string, indexed?: boolean, validToday?: boolean,tags?:string,crs?:string, startDate?: Date, endDate?: Date, - skip?: number, take?: number, sourceTask?: string, exactMatchStartOrEndDate?: boolean, owner?:string): Observable { + skip?: number, take?: number, sourceTask?: string, exactMatchStartOrEndDate?: boolean, owner?:string, + includeFullpath?: boolean): Observable { let params = new HttpParams(); if(itemType) params = params.append("it", itemType); if(dataFilter) params = params.append("df", JSON.stringify(dataFilter)); @@ -96,6 +97,7 @@ export class ItemService { if(take) params = params.append("take", take); if(exactMatchStartOrEndDate !== undefined) params = params.append("exactMatchStartOrEndDate", exactMatchStartOrEndDate); if(owner) params = params.append("owner", owner); + if(includeFullpath) params = params.append("includeFullpath",includeFullpath?"true":"false"); return this.httpClient.get(`${this.ApiEndpoint()}/api/v1/items/`, { params: params }); }