9 Commits

Author SHA1 Message Date
jenkins
df77631299 [ci skip] Updated packages #2577
Some checks reported errors
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-08-14 07:28:29 +00:00
a8d0f05c81 Aw6981 Add observation components
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-08-14 09:26:36 +02:00
jenkins
c79637be77 [ci skip] Updated packages #2576
Some checks reported errors
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-08-11 08:14:46 +00:00
Willem Dantuma
b5e11da9a8 Fix flag check
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-08-11 10:11:45 +02:00
jenkins
9d45c25a95 [ci skip] Updated packages #2575
Some checks reported errors
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-08-11 07:42:16 +00:00
Willem Dantuma
2ffce50c47 Add hideShowLayerValues flag for fm-map-map
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-08-11 09:40:00 +02:00
jenkins
f50ff878e0 [ci skip] Updated packages #2574
Some checks reported errors
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-07-30 09:49:37 +00:00
09c74448a8 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-07-30 11:47:01 +02:00
205b73b30e AW-4935 Tools in croppingscheme weer goed zetten op mobile 2025-07-30 11:46:58 +02:00
10 changed files with 334 additions and 194 deletions

8
package-lock.json generated
View File

@@ -90,7 +90,7 @@
},
"dist/common": {
"name": "@farmmaps/common",
"version": "2.1.0",
"version": "4.18.0-prerelease.2576",
"dependencies": {
"tslib": "^2.3.0"
},
@@ -115,7 +115,7 @@
},
"dist/common-map": {
"name": "@farmmaps/common-map",
"version": "4.17.0-prerelease.2569",
"version": "4.18.0-prerelease.2576",
"dependencies": {
"tslib": "^2.0.0"
},
@@ -130,7 +130,7 @@
},
"dist/common-map3d": {
"name": "@farmmaps/common-map3d",
"version": "4.17.0-prerelease.2570",
"version": "4.18.0-prerelease.2576",
"dependencies": {
"tslib": "^2.0.0"
},
@@ -143,7 +143,7 @@
},
"dist/ng-openlayers": {
"name": "@farmmaps/ng-openlayers",
"version": "18.0.0",
"version": "4.18.0-prerelease.2576",
"license": "MPL-2.0",
"dependencies": {
"tslib": "^2.3.0"

View File

@@ -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<MetaReducer<any, any>> = [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 },

View File

@@ -0,0 +1,10 @@
<div *ngIf="feature;let feature">
<div class="row m-0">
<div class="col-3 m-0 p-2 thumbnail">
<img [src]="getSource(feature)" style="width: 34px">
</div>
<div class="col p-2" style="margin: auto;">
<h1 class="card-title" title="{{feature.get('name')}}">{{feature.get('name')}}</h1>
</div>
</div>
</div>

View File

@@ -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;
}

View File

@@ -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<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService,config:AppConfig) {
super(store, itemTypeService,config);
}
getSource(feature: Feature<Geometry>): string {
let source = "/images/decease.png";
var type = feature.get('type');
source = '/images/' + type + '.png';
return source;
}
}

View File

@@ -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>

View File

@@ -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;
}

View File

@@ -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);
}
}

View File

@@ -54,7 +54,7 @@ aol-map { position:absolute;width:100%;height:calc( 100vh );}
@media screen and (max-width: 768px) {
.control-container {
float:right;
margin-left: 1em;
margin-right: 1em;
pointer-events: all;
}
@@ -62,7 +62,7 @@ aol-map { position:absolute;width:100%;height:calc( 100vh );}
@media screen and (min-width: 768px) {
.control-container {
margin-left:1em;
float: right;
margin-right: 1em;
pointer-events: all;
}

View File

@@ -92,6 +92,8 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
public noContent = false;
public overrideSelectedItemLayer = false;
public overrideOverlayLayers = false;
public hideShowLayerValues = false;
public const
public dataLayerSlideValue = 50;
public dataLayerSlideEnabled = false;
private visibleAreaBottom = 0;
@@ -116,6 +118,7 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
const params = route.snapshot.data["fm-map-map"];
this.overrideSelectedItemLayer = params["overrideSelectedItemlayer"] ? params["overrideSelectedItemlayer"] : 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) {
@@ -297,11 +300,13 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
normalizeMapState(mapState: IMapState): IMapState {
if (!mapState) return null;
return {zoom: this.round(mapState.zoom,0),
return {
zoom: this.round(mapState.zoom, 0),
rotation: this.round(mapState.rotation, 2),
xCenter: this.round(mapState.xCenter, 5),
yCenter: this.round(mapState.yCenter, 5),
baseLayerCode: mapState.baseLayerCode };
baseLayerCode: mapState.baseLayerCode
};
}
serializeMapState(mapState: IMapState): string {
@@ -472,11 +477,13 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
}
handleShowLayerValues(event: MouseEvent) {
if (!this.hideShowLayerValues) {
event.stopPropagation();
this.zone.run(() => {
this.store.dispatch(new mapActions.ToggleLayerValuesEnabled());
});
}
}
handleOnDownload(event) {