Add zoom to show alert
Some checks failed
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit

This commit is contained in:
Willem Dantuma 2021-01-29 11:25:37 +01:00
parent dbc330ab46
commit 321d34870e
8 changed files with 56 additions and 19 deletions

View File

@ -68,6 +68,7 @@ import {LayerSwitcher} from './components/layer-switcher/layer-switcher.componen
import {HistogramDetailsComponent} from './components/legend/histogram-details/histogram-details.component'; import {HistogramDetailsComponent} from './components/legend/histogram-details/histogram-details.component';
import {StatisticsDetailsComponent} from './components/legend/statistics-details/statistics-details.component'; import {StatisticsDetailsComponent} from './components/legend/statistics-details/statistics-details.component';
import { ifZoomToShowDirective} from './components/if-zoom-to-show/if-zoom-to-show.directive'; import { ifZoomToShowDirective} from './components/if-zoom-to-show/if-zoom-to-show.directive';
import { ZoomToShowAlert} from './components/zoom-to-show-alert/zoom-to-show-alert.component';
export function LocalStorageSync(reducer: ActionReducer<any>): ActionReducer<any> { export function LocalStorageSync(reducer: ActionReducer<any>): ActionReducer<any> {
const r = function(state, action) { const r = function(state, action) {
@ -149,7 +150,8 @@ export {
ForPackage , ForPackage ,
ITemporalItemLayer, ITemporalItemLayer,
TemporalItemLayer, TemporalItemLayer,
ifZoomToShowDirective ifZoomToShowDirective,
ZoomToShowAlert
} }
@NgModule({ @NgModule({
@ -202,7 +204,8 @@ export {
LayerSwitcher, LayerSwitcher,
HistogramDetailsComponent, HistogramDetailsComponent,
StatisticsDetailsComponent, StatisticsDetailsComponent,
ifZoomToShowDirective ifZoomToShowDirective,
ZoomToShowAlert
], ],
entryComponents: [ entryComponents: [
FeatureListComponent, FeatureListComponent,
@ -255,7 +258,8 @@ export {
FeatureListCropfieldComponent, FeatureListCropfieldComponent,
FeatureListFeatureContainerComponent, FeatureListFeatureContainerComponent,
ZoomToExtentComponent, ZoomToExtentComponent,
ifZoomToShowDirective ifZoomToShowDirective,
ZoomToShowAlert
], ],
providers: [ providers: [
FeatureIconService, FeatureIconService,

View File

@ -1,5 +1,5 @@
<div *ngIf="features;let features"> <div *ngIf="features;let features">
<fm-back-button></fm-back-button>> <fm-back-button></fm-back-button>
<div class="row m-0 pl-3 pr-3" *ngFor="let feature of features" [ngClass]="{'selected':isFeatureSelected(feature)}" (click)="handleFeatureClick(feature)" (mouseenter)="handleFeatureMouseEnter(feature)" (mouseleave)="handleFeatureMouseLeave(feature)"> <div class="row m-0 pl-3 pr-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> <fm-map-feature-list-feature-container [feature]="feature"></fm-map-feature-list-feature-container>
</div> </div>

View File

@ -1,25 +1,39 @@
import { Directive, ViewContainerRef,TemplateRef,OnInit,Input } from '@angular/core'; import { Directive, ViewContainerRef,TemplateRef,OnInit,Input, OnChanges } from '@angular/core';
import { IItemLayer } from '../../models/item.layer'; import { layer } from 'ol';
import { MapComponent } from 'ngx-openlayers'; import { MapComponent } from 'ngx-openlayers';
@Directive({ @Directive({
selector: '[fm-map-ifZoomToShow]', selector: '[fm-map-ifZoomToShow]',
}) })
export class ifZoomToShowDirective implements OnInit { export class ifZoomToShowDirective implements OnInit,OnChanges {
@Input('fm-map-ifZoomToShow') itemLayer$:IItemLayer; @Input('fm-map-ifZoomToShow') layer$:layer;
constructor(private templateRef$: TemplateRef<any>,private viewContainerRef$: ViewContainerRef,private map$: MapComponent) { } constructor(private templateRef$: TemplateRef<any>,private viewContainerRef$: ViewContainerRef,private map$: MapComponent) { }
private hasView = false; private showView = false;
ngOnInit() {
let minZoom = this.itemLayer$.layer.getMinZoom();
let currentZoom = this.map$.instance.getView().getZoom();
if ( currentZoom < minZoom ) { ngOnInit() {
this.viewContainerRef$.createEmbeddedView(this.templateRef$); this.map$.instance.on('moveend', (e) => {
this.hasView=true; this.checkZoom();
} else if (this.hasView) { });
this.viewContainerRef$.clear(); }
this.hasView = false;
} ngOnChanges() {
this.checkZoom();
}
checkZoom() {
if(this.layer$ && this.map$.instance) {
let minZoom = this.layer$.getMinZoom();
let currentZoom = this.map$.instance.getView().getZoom();
let view = currentZoom < minZoom;
if(view!= this.showView) {
this.showView=view;
if ( !this.showView) {
this.viewContainerRef$.clear();
} else {
this.viewContainerRef$.createEmbeddedView(this.templateRef$);
}
}
}
} }
} }

View File

@ -27,6 +27,7 @@
</ng-container> </ng-container>
</ul> </ul>
</div> </div>
<fm-map-zoom-to-show-alert [layer]="itemLayer?.layer"></fm-map-zoom-to-show-alert>
</div> </div>
</div> </div>
</div> </div>

View File

@ -26,6 +26,7 @@
</ng-container> </ng-container>
</ul> </ul>
</div> </div>
<fm-map-zoom-to-show-alert [layer]="itemLayer?.layer"></fm-map-zoom-to-show-alert>
</div> </div>
</div> </div>
</div> </div>

View File

@ -22,6 +22,7 @@
</button> </button>
</div> </div>
</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"> <div class="card menu-card pt-2">
<div *ngIf="layers.length>1"> <div *ngIf="layers.length>1">

View File

@ -8,6 +8,7 @@ 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 { ITemporalItemLayer} from '../../models/item.layer';
import * as mapActions from '../../actions/map.actions'; import * as mapActions from '../../actions/map.actions';
import { IItemLayer } from 'common-map/public-api';
@ForItemType("vnd.farmmaps.itemtype.temporal") @ForItemType("vnd.farmmaps.itemtype.temporal")
@ -27,6 +28,10 @@ export class SelectedItemTemporalComponent extends AbstractSelectedItemComponent
this.store.dispatch(new mapActions.SetLayerIndex(layerIndex)); this.store.dispatch(new mapActions.SetLayerIndex(layerIndex));
} }
currentItemLayer():IItemLayer {
return (this.itemLayer as ITemporalItemLayer)?.selectedItemLayer
}
hasNext():boolean { hasNext():boolean {
let temporalItemLayer = this.itemLayer as ITemporalItemLayer; let temporalItemLayer = this.itemLayer as ITemporalItemLayer;
return temporalItemLayer && temporalItemLayer.nextItemLayer != null; return temporalItemLayer && temporalItemLayer.nextItemLayer != null;

View File

@ -0,0 +1,11 @@
import { Component, Input } from '@angular/core';
import { layer } from 'ol';
@Component({
selector: 'fm-map-zoom-to-show-alert',
template: '<div *fm-map-ifZoomToShow="layer" class="alert alert-info"><i class="fas fa-search-plus" aria-hidden="true" i18n-title title="Add as layer"></i>&nbsp;<span i18n>Zoom in to show layer</span></div>'
})
export class ZoomToShowAlert {
@Input() layer: layer;
}