Some refactoring
All checks were successful
FarmMaps.Develop/FarmMapsLib/develop This commit looks good
All checks were successful
FarmMaps.Develop/FarmMapsLib/develop This commit looks good
This commit is contained in:
@@ -3,6 +3,8 @@ import { RouterModule } from '@angular/router';
|
||||
|
||||
import { AuthGuard,FullScreenGuard } from '@farmmaps/common';
|
||||
import { MapComponent } from '@farmmaps/common-map';
|
||||
import { LogoComponent } from './logo/logo.component';
|
||||
import { MenuComponent } from './menu/menu.component';
|
||||
|
||||
const routes = [
|
||||
{
|
||||
@@ -17,7 +19,19 @@ const routes = [
|
||||
},
|
||||
{
|
||||
path: ':xCenter/:yCenter/:zoom/:rotation/:baseLayer/:queryState',
|
||||
component: MapComponent
|
||||
component: MapComponent,
|
||||
children:[
|
||||
{
|
||||
path: '',
|
||||
component: LogoComponent,
|
||||
outlet: 'side-panel-logo'
|
||||
},
|
||||
{
|
||||
path: '',
|
||||
component: MenuComponent,
|
||||
outlet: 'side-panel-menu'
|
||||
}
|
||||
]
|
||||
}
|
||||
]},
|
||||
];
|
||||
|
@@ -1,3 +0,0 @@
|
||||
<fm-app></fm-app>
|
||||
|
||||
|
@@ -2,9 +2,8 @@ import { Component } from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'app-root',
|
||||
templateUrl: './app.component.html',
|
||||
styleUrls: ['./app.component.scss']
|
||||
template:'<fm-app></fm-app>'
|
||||
})
|
||||
export class AppRootComponent {
|
||||
title = 'farmmaps-lib-app';
|
||||
title = 'FarmMaps';
|
||||
}
|
||||
|
@@ -16,6 +16,8 @@ import {EffectsModule, EffectSources} from '@ngrx/effects';
|
||||
import { StoreRouterConnectingModule} from '@ngrx/router-store';
|
||||
|
||||
import {AppRoutingModule} from './app-routing.module';
|
||||
import { LogoComponent } from './logo/logo.component';
|
||||
import { MenuComponent } from './menu/menu.component';
|
||||
|
||||
export const BOOTSTRAP_EFFECTS = new InjectionToken('Bootstrap Effects');
|
||||
|
||||
@@ -44,7 +46,9 @@ export function provideBootstrapEffects(effects: Type<any>[]) {
|
||||
|
||||
@NgModule({
|
||||
declarations: [
|
||||
AppRootComponent
|
||||
AppRootComponent,
|
||||
LogoComponent,
|
||||
MenuComponent
|
||||
],
|
||||
imports: [
|
||||
AppRoutingModule,
|
||||
|
25
src/app/logo/logo.component.spec.ts
Normal file
25
src/app/logo/logo.component.spec.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { LogoComponent } from './logo.component';
|
||||
|
||||
describe('LogoComponent', () => {
|
||||
let component: LogoComponent;
|
||||
let fixture: ComponentFixture<LogoComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ LogoComponent ]
|
||||
})
|
||||
.compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(LogoComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
15
src/app/logo/logo.component.ts
Normal file
15
src/app/logo/logo.component.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'app-logo',
|
||||
template: '<span><img src="/images/farmmapslogo.png" /></span>',
|
||||
styles:['img {width:100%;align-self:center;}']
|
||||
})
|
||||
export class LogoComponent implements OnInit {
|
||||
|
||||
constructor() { }
|
||||
|
||||
ngOnInit() {
|
||||
}
|
||||
|
||||
}
|
32
src/app/menu/menu.component.html
Normal file
32
src/app/menu/menu.component.html
Normal file
@@ -0,0 +1,32 @@
|
||||
<div>
|
||||
<div class="card menu-card">
|
||||
<div class="d-flex flex-row flex-wrap">
|
||||
<div class="shortcut-icon" (click)="handlePredefinedQuery($event,{itemType:'vnd.farmmaps.itemtype.croppingscheme'})">
|
||||
<div class="icon rounded-circle farm-icon"><i class="fm fm-farm" aria-hidden="true"></i></div>
|
||||
<div class="caption" i18n>Farms</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card menu-card">
|
||||
<ul class="navbar-nav">
|
||||
<li class="nav-item py-0">
|
||||
<a class="nav-link" href="#" (click)="handleToggleBaseLayers($event)" i18n><i class="fa fa-map" aria-hidden="true"></i> Base maps <i class="fa" [ngClass]="{'fa-caret-down':baseLayersCollapsed,'fa-caret-up':!baseLayersCollapsed}" aria-hidden="true"></i></a>
|
||||
<div [ngbCollapse]="baseLayersCollapsed" class="mb-4">
|
||||
<fm-map-layer-list [baseLayers]="true" [itemLayers]="baseLayers|async" [selectedLayer]="selectedBaseLayer|async" (onSelectLayer)="handleSelectBaseLayer($event)"></fm-map-layer-list>
|
||||
</div>
|
||||
</li>
|
||||
<li class="nav-item py-0">
|
||||
<a class="nav-link" href="#" (click)="handleToggleOverlayLayers($event)" i18n><i class="fa fa-map" aria-hidden="true"></i> Overlays <i class="fa" [ngClass]="{'fa-caret-down':overlayLayersCollapsed,'fa-caret-up':!overlayLayersCollapsed}" aria-hidden="true"></i></a>
|
||||
<div [ngbCollapse]="overlayLayersCollapsed" class="mb-4">
|
||||
<fm-map-layer-list [itemLayers]="overlayLayers|async" [selectedLayer]="selectedOverlayLayer|async" (onDelete)="handleOnDelete($event)" (onToggleVisibility)="handleOnToggleVisibility($event)" (onSetOpacity)="handleOnSetOpacity($event)" (onZoomToExtent)="handleZoomToExtent($event)" (onSelectLayer)="handleSelectOverlayLayer($event)"></fm-map-layer-list>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!--<div class="card menu-card">
|
||||
<ul class="navbar-nav">
|
||||
<li class="nav-item py-0"><a class="nav-link" href="#" (click)="handlePredefinedQuery($event,{itemType:'vnd.farmmaps.itemtype.croppingscheme'})"><span i18n>Farms</span></a></li>
|
||||
<li class="nav-item py-0"><a class="nav-link" href="#" (click)="handlePredefinedQuery($event,{itemType:'vnd.farmmaps.itemtype.layer'})"><span i18n>Layers</span></a></li>
|
||||
</ul>
|
||||
</div>-->
|
||||
</div>
|
41
src/app/menu/menu.component.scss
Normal file
41
src/app/menu/menu.component.scss
Normal file
@@ -0,0 +1,41 @@
|
||||
.menu-card {
|
||||
margin-left:-7px;
|
||||
padding-left:7px;
|
||||
margin-right:-7px;
|
||||
padding-right:7px;
|
||||
margin-bottom:7px;
|
||||
}
|
||||
|
||||
.shortcut-icon {
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
margin: 0.5rem;
|
||||
cursor:pointer;
|
||||
}
|
||||
|
||||
.shortcut-icon > .icon {
|
||||
width: 3rem;
|
||||
height: 3rem;
|
||||
background-color: #731e64;
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
line-height: 3rem;
|
||||
color: #ffffff;
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.shortcut-icon > .caption {
|
||||
text-align: center;
|
||||
width: 4rem;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
color: theme-color();
|
||||
}
|
||||
|
||||
.shortcut-icon > .farm-icon {
|
||||
background-color: #731E64;
|
||||
}
|
||||
|
||||
.shortcut-icon > .trijntje-icon {
|
||||
background-color: #FAA33F;
|
||||
}
|
25
src/app/menu/menu.component.spec.ts
Normal file
25
src/app/menu/menu.component.spec.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { MenuComponent } from './menu.component';
|
||||
|
||||
describe('MenuComponent', () => {
|
||||
let component: MenuComponent;
|
||||
let fixture: ComponentFixture<MenuComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ MenuComponent ]
|
||||
})
|
||||
.compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(MenuComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
77
src/app/menu/menu.component.ts
Normal file
77
src/app/menu/menu.component.ts
Normal file
@@ -0,0 +1,77 @@
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import { commonReducers, } from '@farmmaps/common';
|
||||
import { } from '@farmmaps/common-map';
|
||||
import {mapReducers,mapActions,IItemLayer} from '@farmmaps/common-map';
|
||||
import { Store } from '@ngrx/store';
|
||||
import { tassign } from 'tassign';
|
||||
import { Observable } from 'rxjs';
|
||||
import {createEmpty,extend } from 'ol/extent';
|
||||
|
||||
@Component({
|
||||
selector: 'app-menu',
|
||||
templateUrl: './menu.component.html',
|
||||
styleUrls: ['./menu.component.scss']
|
||||
})
|
||||
export class MenuComponent implements OnInit {
|
||||
public baseLayersCollapsed:boolean = true;
|
||||
public overlayLayersCollapsed: boolean = true;
|
||||
public overlayLayers: Observable<Array<IItemLayer>>;
|
||||
public selectedOverlayLayer: Observable<IItemLayer>;
|
||||
public baseLayers: Observable<Array<IItemLayer>>;
|
||||
public selectedBaseLayer: Observable<IItemLayer>;
|
||||
|
||||
|
||||
constructor( private store: Store<mapReducers.State | commonReducers.State> ) { }
|
||||
|
||||
ngOnInit() {
|
||||
this.overlayLayers = this.store.select(mapReducers.selectGetOverlayLayers);
|
||||
this.selectedOverlayLayer = this.store.select(mapReducers.selectGetSelectedOverlayLayer);
|
||||
this.baseLayers = this.store.select(mapReducers.selectGetBaseLayers);
|
||||
this.selectedBaseLayer = this.store.select(mapReducers.selectGetSelectedBaseLayer);
|
||||
}
|
||||
|
||||
handleToggleBaseLayers(event:MouseEvent) {
|
||||
this.baseLayersCollapsed = !this.baseLayersCollapsed;
|
||||
event.preventDefault();
|
||||
}
|
||||
|
||||
handleToggleOverlayLayers(event: MouseEvent) {
|
||||
this.overlayLayersCollapsed = !this.overlayLayersCollapsed;
|
||||
event.preventDefault();
|
||||
}
|
||||
|
||||
handlePredefinedQuery(event: MouseEvent, query: any) {
|
||||
event.preventDefault();
|
||||
var queryState = tassign(mapReducers.initialQueryState, query);
|
||||
this.store.dispatch(new mapActions.DoQuery(queryState));
|
||||
}
|
||||
|
||||
handleOnToggleVisibility(itemLayer: IItemLayer) {
|
||||
this.store.dispatch(new mapActions.SetVisibility(itemLayer,!itemLayer.visible));
|
||||
}
|
||||
|
||||
handleOnSetOpacity(event:{ layer: IItemLayer,opacity:number }) {
|
||||
this.store.dispatch(new mapActions.SetOpacity(event.layer, event.opacity));
|
||||
}
|
||||
|
||||
handleOnDelete(itemLayer: IItemLayer) {
|
||||
this.store.dispatch(new mapActions.RemoveLayer(itemLayer));
|
||||
}
|
||||
|
||||
handleZoomToExtent(itemLayer: IItemLayer) {
|
||||
var extent = createEmpty();
|
||||
extend(extent, itemLayer.layer.getExtent());
|
||||
if (extent) {
|
||||
this.store.dispatch(new mapActions.SetExtent(extent));
|
||||
}
|
||||
}
|
||||
|
||||
handleSelectOverlayLayer(itemLayer: IItemLayer) {
|
||||
this.store.dispatch(new mapActions.SelectOverlayLayer(itemLayer));
|
||||
}
|
||||
|
||||
handleSelectBaseLayer(itemLayer: IItemLayer) {
|
||||
this.store.dispatch(new mapActions.SelectBaseLayer(itemLayer));
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user