20 Commits

Author SHA1 Message Date
jenkins
eed70c449b [ci skip] Updated packages #2601
Some checks reported errors
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2026-01-20 15:24:54 +00:00
4bef16aa2b Merge branch 'feature/AW6526Angular19' into develop
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2026-01-20 16:22:54 +01:00
05bc18c291 Angular v19 2026-01-20 16:22:33 +01:00
35ab2f7c90 Angular v19 2026-01-20 16:03:07 +01:00
2eca9b2562 Angular v19 2026-01-20 15:57:18 +01:00
jenkins
e0c89f4358 [ci skip] Updated packages #2600
Some checks reported errors
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2026-01-20 14:36:58 +00:00
604c1176c3 Merge branch 'develop'
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-12-10 14:20:39 +01:00
jenkins
0ff8992874 [ci skip] Updated packages #2585
Some checks reported errors
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-11-13 12:46:51 +00:00
b5b84c2547 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
Some checks failed
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2025-11-13 13:43:49 +01:00
c2b016b2b9 AW-7096 Fix 2025-11-13 13:43:44 +01:00
jenkins
d44531274b [ci skip] Updated packages #2584
Some checks reported errors
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-11-11 13:10:21 +00:00
c52ee36d1b AW-6498
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-11-11 14:08:15 +01:00
jenkins
9b86927e2c [ci skip] Updated packages #2583
Some checks reported errors
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-10-16 09:33:10 +00:00
jenkins
e224b80995 Updated packages #2582
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-10-16 09:25:48 +00:00
jenkins
88f3d9ef1a [ci skip] Updated packages #2581
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-10-09 13:09:39 +00:00
6737029a61 AW-7050 Remove FeatureListFeatureObservationComponent
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-10-09 15:00:06 +02:00
jenkins
d4786564bd [ci skip] Updated packages #2579
Some checks reported errors
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-09-02 07:33:57 +00:00
6fd69d7999 AW-6981 Support for backup and restore (current) features
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-09-02 09:32:00 +02:00
jenkins
4ec75b3d5a [ci skip] Updated packages #2578
Some checks reported errors
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-08-31 08:49:24 +00:00
04e3f1e71f AW-6981 Retrieve childs with ail
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-08-31 10:47:25 +02:00
169 changed files with 7169 additions and 3474 deletions

View File

@@ -129,7 +129,7 @@
"extract-i18n": { "extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n", "builder": "@angular-devkit/build-angular:extract-i18n",
"options": { "options": {
"browserTarget": "farmmaps-lib-app:build" "buildTarget": "farmmaps-lib-app:build"
} }
}, },
"test": { "test": {

9371
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
{ {
"name": "farmmaps-lib-app", "name": "farmmaps-lib-app",
"version": "4.18.0", "version": "4.20.0",
"scripts": { "scripts": {
"ng": "ng", "ng": "ng",
"start": "ng serve", "start": "ng serve",
"build": "ng build", "build": "ng build",
@@ -10,25 +10,25 @@
"e2e": "ng e2e" "e2e": "ng e2e"
}, },
"private": true, "private": true,
"dependencies": { "dependencies": {
"@angular-eslint/eslint-plugin": "^18.2.0", "@angular-eslint/eslint-plugin": "^18.2.0",
"@angular/animations": "18.2.3", "@angular/animations": "19.2.18",
"@angular/common": "18.2.3", "@angular/common": "19.2.18",
"@angular/compiler": "18.2.3", "@angular/compiler": "19.2.18",
"@angular/core": "18.2.3", "@angular/core": "19.2.18",
"@angular/forms": "18.2.3", "@angular/forms": "19.2.18",
"@angular/platform-browser": "18.2.3", "@angular/platform-browser": "19.2.18",
"@angular/platform-browser-dynamic": "18.2.3", "@angular/platform-browser-dynamic": "19.2.18",
"@angular/router": "18.2.3", "@angular/router": "19.2.18",
"@farmmaps/common": "file:dist/common", "@farmmaps/common": "file:dist/common",
"@farmmaps/common-map": "file:dist/common-map", "@farmmaps/common-map": "file:dist/common-map",
"@farmmaps/common-map3d": "file:dist/common-map3d", "@farmmaps/common-map3d": "file:dist/common-map3d",
"@farmmaps/ng-openlayers": "file:dist/ng-openlayers", "@farmmaps/ng-openlayers": "file:dist/ng-openlayers",
"@microsoft/signalr": "^3.1.16", "@microsoft/signalr": "^3.1.16",
"@ng-bootstrap/ng-bootstrap": "^17.0.1", "@ng-bootstrap/ng-bootstrap": "^18.0.0",
"@ngrx/effects": "^18.0.2", "@ngrx/effects": "19.2.1",
"@ngrx/router-store": "^18.0.2", "@ngrx/router-store": "19.2.1",
"@ngrx/store": "^18.0.2", "@ngrx/store": "19.2.1",
"@popperjs/core": "^2.11.8", "@popperjs/core": "^2.11.8",
"angular-oauth2-oidc": "^17.0.2", "angular-oauth2-oidc": "^17.0.2",
"assert": "^2.0.0", "assert": "^2.0.0",
@@ -39,11 +39,11 @@
"core-js": "^2.6.12", "core-js": "^2.6.12",
"https-browserify": "^1.0.0", "https-browserify": "^1.0.0",
"moment": "^2.29.4", "moment": "^2.29.4",
"ngrx-store-localstorage": "^18.0.0", "ngrx-store-localstorage": "19.0.2",
"ngx-avatars": "^1.8.0", "ngx-avatars": "1.9.3",
"ngx-clipboard": "^16.0.0", "ngx-clipboard": "^16.0.0",
"ngx-image-cropper": "^7.0.0", "ngx-image-cropper": "^7.0.0",
"ngx-uploadx": "^6.2.0", "ngx-uploadx": "7.0.1",
"ol": "^8.2.0", "ol": "^8.2.0",
"olcs": "^2.13.1", "olcs": "^2.13.1",
"resumablejs": "^1.1.0", "resumablejs": "^1.1.0",
@@ -54,19 +54,19 @@
"tslib": "^2.4.0", "tslib": "^2.4.0",
"url": "^0.11.0", "url": "^0.11.0",
"util": "^0.12.4", "util": "^0.12.4",
"zone.js": "~0.14.10" "zone.js": "~0.15.1"
}, },
"optionalDependencies": { "optionalDependencies": {
"@lmdb/lmdb-linux-x64": "^3.1.0", "@lmdb/lmdb-linux-x64": "^3.1.0",
"@rollup/rollup-linux-x64-gnu": "^4.21.2" "@rollup/rollup-linux-x64-gnu": "^4.21.2"
}, },
"devDependencies": { "devDependencies": {
"@angular-builders/custom-webpack": "^18.0.0", "@angular-builders/custom-webpack": "19.0.1",
"@angular-devkit/build-angular": "18.2.3", "@angular-devkit/build-angular": "19.2.19",
"@angular/cli": "18.2.3", "@angular/cli": "19.2.19",
"@angular/compiler-cli": "18.2.3", "@angular/compiler-cli": "19.2.18",
"@angular/language-service": "18.2.3", "@angular/language-service": "19.2.18",
"@angular/localize": "18.2.3", "@angular/localize": "19.2.18",
"@types/arcgis-rest-api": "^10.4.5", "@types/arcgis-rest-api": "^10.4.5",
"@types/jasmine": "~2.8.8", "@types/jasmine": "~2.8.8",
"@types/jasminewd2": "^2.0.9", "@types/jasminewd2": "^2.0.9",
@@ -85,9 +85,15 @@
"karma-coverage-istanbul-reporter": "^3.0.3", "karma-coverage-istanbul-reporter": "^3.0.3",
"karma-jasmine": "^5.1.0", "karma-jasmine": "^5.1.0",
"karma-jasmine-html-reporter": "^2.0.0", "karma-jasmine-html-reporter": "^2.0.0",
"ng-packagr": "^18.2.1", "ng-packagr": "^19.2.2",
"protractor": "~7.0.0", "protractor": "~7.0.0",
"ts-node": "^8.8.1", "ts-node": "^8.8.1",
"typescript": "~5.4.4" "typescript": "~5.8.3"
},
"overrides": {
"some-library": {
"@angular/common": "$@angular/common",
"@angular/core": "$@angular/core"
}
} }
} }

View File

@@ -8,11 +8,11 @@
"tslib": "^2.0.0" "tslib": "^2.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"@angular/core": "18.2.3", "@angular/core": "19.2.18",
"ngrx-store-localstorage": "^18.0.0", "ngrx-store-localstorage": "19.0.2",
"@ngrx/effects": "^18.0.2", "@ngrx/effects": "19.2.1",
"@ngrx/router-store": "^18.0.2", "@ngrx/router-store": "19.2.1",
"@ngrx/store": "^18.0.2", "@ngrx/store": "19.2.1",
"tassign": "^1.0.0" "tassign": "^1.0.0"
} }
} }

View File

@@ -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;
@@ -300,7 +302,7 @@ export class SetReplaceUrl implements Action {
export class SetFeatures implements Action { export class SetFeatures implements Action {
readonly type = SETFEATURES; readonly type = SETFEATURES;
constructor(public features: Array<Feature<Geometry>>) { } constructor(public features: Array<Feature<Geometry>>, public zoomToExtent: boolean = true) { }
} }
export class SetLayerValuesLocation implements Action { export class SetLayerValuesLocation implements Action {
@@ -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;

View File

@@ -41,7 +41,6 @@ import { FeatureListCroppingschemeComponent } from './components/feature-list-cr
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';
import { FeatureListFeatureCroppingschemeComponent } from './components/feature-list-feature-croppingscheme/feature-list-feature-croppingscheme.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 { AbstractFeatureListFeatureComponent, FeatureListFeatureComponent } from './components/feature-list-feature/feature-list-feature.component';
import { AbstractFeatureListComponent, FeatureListComponent } from './components/feature-list/feature-list.component'; import { AbstractFeatureListComponent, FeatureListComponent } from './components/feature-list/feature-list.component';
import { GeometryThumbnailComponent } from './components/feature-thumbnail/feature-thumbnail.component'; import { GeometryThumbnailComponent } from './components/feature-thumbnail/feature-thumbnail.component';
@@ -107,7 +106,7 @@ const metaReducers: Array<MetaReducer<any, any>> = [LocalStorageSync];
export { export {
AbstractFeatureListComponent, AbstractFeatureListComponent,
AbstractFeatureListFeatureComponent, AbstractItemListComponent, AbstractItemListItemComponent, AbstractItemWidgetComponent, AbstractSelectedItemComponent, DeviceOrientationService, FeatureIconService, FeatureListComponent, FeatureListContainerComponent, FeatureListCropfieldComponent, FeatureListObservationComponent, FeatureListCroppingschemeComponent, FeatureListFeatureComponent, FeatureListFeatureContainerComponent, FeatureListFeatureCropfieldComponent, FeatureListFeatureObservationComponent, 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,
@@ -149,7 +148,6 @@ export {
FeatureListFeatureComponent, FeatureListFeatureComponent,
FeatureListFeatureCroppingschemeComponent, FeatureListFeatureCroppingschemeComponent,
FeatureListFeatureCropfieldComponent, FeatureListFeatureCropfieldComponent,
FeatureListFeatureObservationComponent,
SelectedItemContainerComponent, SelectedItemContainerComponent,
SelectedItemComponent, SelectedItemComponent,
SelectedItemCropfieldComponent, SelectedItemCropfieldComponent,
@@ -182,7 +180,6 @@ export {
LayerSwitcher, LayerSwitcher,
FeatureListFeatureComponent, FeatureListFeatureComponent,
FeatureListFeatureCropfieldComponent, FeatureListFeatureCropfieldComponent,
FeatureListFeatureObservationComponent,
FeatureListFeatureCroppingschemeComponent, FeatureListFeatureCroppingschemeComponent,
SelectedItemContainerComponent, SelectedItemContainerComponent,
SelectedItemComponent, SelectedItemComponent,
@@ -223,8 +220,7 @@ export {
{ provide: AbstractFeatureListComponent, useClass: FeatureListObservationComponent, 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: AbstractFeatureListFeatureComponent, useClass: FeatureListFeatureObservationComponent, 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 },

View File

@@ -14,8 +14,9 @@ export interface IDroppedFile {
} }
@Component({ @Component({
selector: 'fm-map-file-drop-target', selector: 'fm-map-file-drop-target',
template: '' template: '',
standalone: false
}) })
export class FileDropTargetComponent implements OnInit, OnDestroy { export class FileDropTargetComponent implements OnInit, OnDestroy {
element: Element; element: Element;

View File

@@ -4,10 +4,11 @@ import Overlay from 'ol/Overlay';
import { fromLonLat, toLonLat } from 'ol/proj'; import { fromLonLat, toLonLat } from 'ol/proj';
@Component({ @Component({
selector: 'fm-map-gps-location', selector: 'fm-map-gps-location',
templateUrl: './gps-location.component.html', templateUrl: './gps-location.component.html',
styleUrls: ['./gps-location.component.scss'] styleUrls: ['./gps-location.component.scss'],
standalone: false
}) })
export class GpsLocation implements OnInit,OnChanges{ export class GpsLocation implements OnInit,OnChanges{

View File

@@ -21,12 +21,13 @@ import { Geometry } from 'ol/geom';
import BaseLayer from 'ol/layer/Base'; import BaseLayer from 'ol/layer/Base';
import Feature from 'ol/Feature'; import Feature from 'ol/Feature';
@Component({ @Component({
selector: 'fm-map-item-layers', selector: 'fm-map-item-layers',
template: `<ng-content></ng-content>`, template: `<ng-content></ng-content>`,
providers: [ providers: [
{ provide: LayerGroupComponent, useExisting: forwardRef(() => ItemLayersComponent) } { provide: LayerGroupComponent, useExisting: forwardRef(() => ItemLayersComponent) }
] ],
standalone: false
}) })
export class ItemLayersComponent extends LayerGroupComponent implements OnChanges, OnInit,OnDestroy { export class ItemLayersComponent extends LayerGroupComponent implements OnChanges, OnInit,OnDestroy {

View File

@@ -21,12 +21,13 @@ import { Subscription } from 'rxjs';
import { getCenter } from 'ol/extent'; import { getCenter } from 'ol/extent';
import { formatNumber } from '@angular/common'; import { formatNumber } from '@angular/common';
@Component({ @Component({
selector: 'fm-map-item-source-vector', selector: 'fm-map-item-source-vector',
template: `<ng-content></ng-content>`, template: `<ng-content></ng-content>`,
providers: [ providers: [
{ provide: SourceVectorComponent, useExisting: forwardRef(() => ItemVectorSourceComponent) } { provide: SourceVectorComponent, useExisting: forwardRef(() => ItemVectorSourceComponent) }
] ],
standalone: false
}) })
export class ItemVectorSourceComponent extends SourceVectorComponent implements OnInit, OnDestroy, OnChanges { export class ItemVectorSourceComponent extends SourceVectorComponent implements OnInit, OnDestroy, OnChanges {
instance: Vector<Feature<Geometry>>; instance: Vector<Feature<Geometry>>;

View File

@@ -1,10 +1,11 @@
import { Component,Input,Output,EventEmitter } from '@angular/core'; import { Component,Input,Output,EventEmitter } from '@angular/core';
import { IItemLayer } from '../../../models/item.layer'; import { IItemLayer } from '../../../models/item.layer';
@Component({ @Component({
selector: 'fm-map-layer-list', selector: 'fm-map-layer-list',
templateUrl: './layer-list.component.html', templateUrl: './layer-list.component.html',
styleUrls: ['./layer-list.component.scss'] styleUrls: ['./layer-list.component.scss'],
standalone: false
}) })
export class LayerListComponent { export class LayerListComponent {

View File

@@ -14,9 +14,10 @@ import { GeoJSON, WKT } from 'ol/format';
import { Point } from 'ol/geom'; import { Point } from 'ol/geom';
@Component({ @Component({
selector: 'fm-map-layer-values', selector: 'fm-map-layer-values',
templateUrl: './layer-values.component.html', templateUrl: './layer-values.component.html',
styleUrls: ['./layer-values.component.scss'] styleUrls: ['./layer-values.component.scss'],
standalone: false
}) })
export class LayerValuesComponent implements OnInit, AfterViewInit { export class LayerValuesComponent implements OnInit, AfterViewInit {

View File

@@ -6,10 +6,11 @@ import { Geometry } from 'ol/geom';
import Feature from 'ol/Feature'; import Feature from 'ol/Feature';
@Component({ @Component({
selector: 'fm-map-aol-layer-vector-image', selector: 'fm-map-aol-layer-vector-image',
template: ` template: `
<ng-content></ng-content> <ng-content></ng-content>
`, `,
standalone: false
}) })
export class LayerVectorImageComponent extends LayerVectorComponent implements OnInit, OnDestroy, OnChanges { export class LayerVectorImageComponent extends LayerVectorComponent implements OnInit, OnDestroy, OnChanges {
//public source: Vector; //public source: Vector;

View File

@@ -5,10 +5,11 @@ import {View} from 'ol';
import { fromLonLat } from 'ol/proj'; import { fromLonLat } from 'ol/proj';
@Component({ @Component({
selector: 'fm-map-pan-to-location', selector: 'fm-map-pan-to-location',
templateUrl: './pan-to-location.component.html', templateUrl: './pan-to-location.component.html',
styleUrls: ['./pan-to-location.component.scss'] styleUrls: ['./pan-to-location.component.scss'],
standalone: false
}) })
export class PanToLocation implements OnInit,OnChanges{ export class PanToLocation implements OnInit,OnChanges{

View File

@@ -5,10 +5,11 @@ import {View} from 'ol';
@Component({ @Component({
selector: 'fm-map-rotation-reset', selector: 'fm-map-rotation-reset',
templateUrl: './rotation-reset.component.html', templateUrl: './rotation-reset.component.html',
styleUrls: ['./rotation-reset.component.scss'] styleUrls: ['./rotation-reset.component.scss'],
standalone: false
}) })
export class RotationResetComponent implements OnInit { export class RotationResetComponent implements OnInit {
view: View; view: View;

View File

@@ -3,9 +3,10 @@ import { ActivatedRoute } from '@angular/router';
import { ViewComponent, MapComponent } from '@farmmaps/ng-openlayers'; import { ViewComponent, MapComponent } from '@farmmaps/ng-openlayers';
@Component({ @Component({
selector: 'fm-map-zoom-to-extent', selector: 'fm-map-zoom-to-extent',
template: `<ng-content></ng-content>` template: `<ng-content></ng-content>`,
standalone: false
}) })
export class ZoomToExtentComponent implements OnChanges { export class ZoomToExtentComponent implements OnChanges {
view: ViewComponent; view: ViewComponent;

View File

@@ -10,10 +10,11 @@ import { Store } from '@ngrx/store';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
@Component({ @Component({
selector: 'fm-map-feature-list-container', selector: 'fm-map-feature-list-container',
templateUrl: './feature-list-container.component.html', templateUrl: './feature-list-container.component.html',
styleUrls: ['./feature-list-container.component.scss'] styleUrls: ['./feature-list-container.component.scss'],
standalone: false
}) })
export class FeatureListContainerComponent { export class FeatureListContainerComponent {

View File

@@ -11,10 +11,11 @@ import { Observable } from 'rxjs';
@ForChild() @ForChild()
@ForItemType("vnd.farmmaps.itemtype.cropfield") @ForItemType("vnd.farmmaps.itemtype.cropfield")
@Injectable() @Injectable()
@Component({ @Component({
selector: 'fm-map-feature-list-cropfield', selector: 'fm-map-feature-list-cropfield',
templateUrl: './feature-list-cropfield.component.html', templateUrl: './feature-list-cropfield.component.html',
styleUrls: ['./feature-list-cropfield.component.scss'] styleUrls: ['./feature-list-cropfield.component.scss'],
standalone: false
}) })
export class FeatureListCropfieldComponent extends AbstractFeatureListComponent implements OnInit { export class FeatureListCropfieldComponent extends AbstractFeatureListComponent implements OnInit {

View File

@@ -13,10 +13,11 @@ import { Geometry} from 'ol/geom';
@ForItemType("vnd.farmmaps.itemtype.croppingscheme") @ForItemType("vnd.farmmaps.itemtype.croppingscheme")
@Injectable() @Injectable()
@Component({ @Component({
selector: 'fm-map-feature-list-croppingscheme', selector: 'fm-map-feature-list-croppingscheme',
templateUrl: './feature-list-croppingscheme.component.html', templateUrl: './feature-list-croppingscheme.component.html',
styleUrls: ['./feature-list-croppingscheme.component.scss'] styleUrls: ['./feature-list-croppingscheme.component.scss'],
standalone: false
}) })
export class FeatureListCroppingschemeComponent extends AbstractFeatureListComponent { export class FeatureListCroppingschemeComponent extends AbstractFeatureListComponent {

View File

@@ -5,13 +5,14 @@ import { AbstractFeatureListFeatureComponent,FeatureListFeatureComponent } from
import { WidgetHostDirective } from '../widget-host/widget-host.directive'; import { WidgetHostDirective } from '../widget-host/widget-host.directive';
@Component({ @Component({
selector: 'fm-map-feature-list-feature-container', selector: 'fm-map-feature-list-feature-container',
template: ` template: `
<div> <div>
<ng-template fm-map-widget-host></ng-template> <ng-template fm-map-widget-host></ng-template>
</div> </div>
` `,
standalone: false
}) })
export class FeatureListFeatureContainerComponent { export class FeatureListFeatureContainerComponent {

View File

@@ -12,10 +12,11 @@ import {getArea} from 'ol/sphere';
@ForItemType("vnd.farmmaps.itemtype.cropfield") @ForItemType("vnd.farmmaps.itemtype.cropfield")
@Injectable() @Injectable()
@Component({ @Component({
selector: 'fm-map-feature-list-feature-cropfield', selector: 'fm-map-feature-list-feature-cropfield',
templateUrl: './feature-list-feature-cropfield.component.html', templateUrl: './feature-list-feature-cropfield.component.html',
styleUrls: ['./feature-list-feature-cropfield.component.scss'] styleUrls: ['./feature-list-feature-cropfield.component.scss'],
standalone: false
}) })
export class FeatureListFeatureCropfieldComponent extends AbstractFeatureListFeatureComponent { export class FeatureListFeatureCropfieldComponent extends AbstractFeatureListFeatureComponent {

View File

@@ -10,9 +10,10 @@ import { ForItemType } from '../for-item/for-itemtype.decorator';
@ForItemType("vnd.farmmaps.itemtype.croppingscheme") @ForItemType("vnd.farmmaps.itemtype.croppingscheme")
@Injectable() @Injectable()
@Component({ @Component({
selector: 'fm-map-feature-list-feature-croppingscheme', selector: 'fm-map-feature-list-feature-croppingscheme',
templateUrl: './feature-list-feature-croppingscheme.component.html', templateUrl: './feature-list-feature-croppingscheme.component.html',
styleUrls: ['./feature-list-feature-croppingscheme.component.scss'] styleUrls: ['./feature-list-feature-croppingscheme.component.scss'],
standalone: false
}) })
export class FeatureListFeatureCroppingschemeComponent extends AbstractFeatureListFeatureComponent { export class FeatureListFeatureCroppingschemeComponent extends AbstractFeatureListFeatureComponent {

View File

@@ -1,10 +0,0 @@
<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

@@ -1,22 +0,0 @@
.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

@@ -1,29 +0,0 @@
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

@@ -17,10 +17,11 @@ export abstract class AbstractFeatureListFeatureComponent {
} }
@Injectable() @Injectable()
@Component({ @Component({
selector: 'fm-map-feature-list-feature', selector: 'fm-map-feature-list-feature',
templateUrl: './feature-list-feature.component.html', templateUrl: './feature-list-feature.component.html',
styleUrls: ['./feature-list-feature.component.scss'] styleUrls: ['./feature-list-feature.component.scss'],
standalone: false
}) })
export class FeatureListFeatureComponent extends AbstractFeatureListFeatureComponent { export class FeatureListFeatureComponent extends AbstractFeatureListFeatureComponent {

View File

@@ -11,10 +11,11 @@ import { Observable } from 'rxjs';
@ForChild() @ForChild()
@ForItemType("vnd.farmmaps.itemtype.observation") @ForItemType("vnd.farmmaps.itemtype.observation")
@Injectable() @Injectable()
@Component({ @Component({
selector: 'fm-map-feature-list-observation', selector: 'fm-map-feature-list-observation',
templateUrl: './feature-list-observation.component.html', templateUrl: './feature-list-observation.component.html',
styleUrls: ['./feature-list-observation.component.scss'] styleUrls: ['./feature-list-observation.component.scss'],
standalone: false
}) })
export class FeatureListObservationComponent extends AbstractFeatureListComponent implements OnInit { export class FeatureListObservationComponent extends AbstractFeatureListComponent implements OnInit {

View File

@@ -57,10 +57,11 @@ export abstract class AbstractFeatureListComponent {
} }
@Injectable() @Injectable()
@Component({ @Component({
selector: 'fm-map-feature-list', selector: 'fm-map-feature-list',
templateUrl: './feature-list.component.html', templateUrl: './feature-list.component.html',
styleUrls: ['./feature-list.component.scss'] styleUrls: ['./feature-list.component.scss'],
standalone: false
}) })
export class FeatureListComponent extends AbstractFeatureListComponent { export class FeatureListComponent extends AbstractFeatureListComponent {

View File

@@ -6,9 +6,10 @@ import * as render from 'ol/render';
import * as style from 'ol/style'; import * as style from 'ol/style';
@Component({ @Component({
selector: 'fm-map-feature-thumbnail', selector: 'fm-map-feature-thumbnail',
templateUrl: './feature-thumbnail.component.html', templateUrl: './feature-thumbnail.component.html',
styleUrls: ['./feature-thumbnail.component.scss'] styleUrls: ['./feature-thumbnail.component.scss'],
standalone: false
}) })
export class GeometryThumbnailComponent implements AfterViewInit { export class GeometryThumbnailComponent implements AfterViewInit {

View File

@@ -3,8 +3,9 @@ import { Layer } from 'ol/layer';
import { Source } from 'ol/source'; import { Source } from 'ol/source';
import { MapComponent } from '@farmmaps/ng-openlayers'; import { MapComponent } from '@farmmaps/ng-openlayers';
@Directive({ @Directive({
selector: '[fmMapIfZoomToShow]', selector: '[fmMapIfZoomToShow]',
standalone: false
}) })
export class ifZoomToShowDirective implements OnInit { export class ifZoomToShowDirective implements OnInit {
@Input() @Input()

View File

@@ -4,13 +4,14 @@ import { WidgetHostDirective } from '../widget-host/widget-host.directive';
import { IItem, IListItem } from '@farmmaps/common'; import { IItem, IListItem } from '@farmmaps/common';
@Component({ @Component({
selector: 'fm-map-item-list-item-container', selector: 'fm-map-item-list-item-container',
template: ` template: `
<div style="height:100%"> <div style="height:100%">
<ng-template fm-map-widget-host></ng-template> <ng-template fm-map-widget-host></ng-template>
</div> </div>
` `,
standalone: false
}) })
export class ItemListItemContainerComponent { export class ItemListItemContainerComponent {

View File

@@ -40,10 +40,11 @@ export abstract class AbstractItemWidgetComponent {
} }
@Injectable() @Injectable()
@Component({ @Component({
selector: 'fm-map-item-list-item', selector: 'fm-map-item-list-item',
templateUrl: './item-list-item.component.html', templateUrl: './item-list-item.component.html',
styleUrls: ['./item-list-item.component.scss'] styleUrls: ['./item-list-item.component.scss'],
standalone: false
}) })
export class ItemListItemComponent extends AbstractItemListItemComponent { export class ItemListItemComponent extends AbstractItemListItemComponent {

View File

@@ -28,9 +28,10 @@ export abstract class AbstractItemListComponent {
@Injectable() @Injectable()
@Component({ @Component({
selector: 'fm-map-item-list', selector: 'fm-map-item-list',
templateUrl: './item-list.component.html', templateUrl: './item-list.component.html',
styleUrls: ['./item-list.component.scss'] styleUrls: ['./item-list.component.scss'],
standalone: false
}) })
export class ItemListComponent extends AbstractItemListComponent { export class ItemListComponent extends AbstractItemListComponent {

View File

@@ -8,9 +8,10 @@ import { AbstractItemWidgetComponent } from '../item-list-item/item-list-item.co
@Injectable() @Injectable()
@Component({ @Component({
selector: 'fm-map-item-widget-list', selector: 'fm-map-item-widget-list',
templateUrl: './item-widget-list.component.html', templateUrl: './item-widget-list.component.html',
styleUrls: ['./item-widget-list.component.scss'] styleUrls: ['./item-widget-list.component.scss'],
standalone: false
}) })
export class ItemWidgetListComponent implements AfterViewInit { export class ItemWidgetListComponent implements AfterViewInit {

View File

@@ -6,10 +6,11 @@ import * as mapActions from '../../actions/map.actions';
import {createEmpty,extend } from 'ol/extent'; import {createEmpty,extend } from 'ol/extent';
import { filter, map, Observable } from 'rxjs'; import { filter, map, Observable } from 'rxjs';
@Component({ @Component({
selector: 'fm-map-layer-switcher', selector: 'fm-map-layer-switcher',
templateUrl: './layer-switcher.component.html', templateUrl: './layer-switcher.component.html',
styleUrls: ['./layer-switcher.component.scss'] styleUrls: ['./layer-switcher.component.scss'],
standalone: false
}) })
export class LayerSwitcher implements OnInit,OnChanges{ export class LayerSwitcher implements OnInit,OnChanges{

View File

@@ -2,12 +2,13 @@ import {Component, Input} from '@angular/core';
import {IHistogram, ILayer} from '../../../models/color.map'; import {IHistogram, ILayer} from '../../../models/color.map';
@Component({ @Component({
selector: 'fm-map-histogram-details', selector: 'fm-map-histogram-details',
templateUrl: './histogram-details.component.html', templateUrl: './histogram-details.component.html',
styles: ['.nopadding{\n' + styles: ['.nopadding{\n' +
' padding: 0 !important;\n' + ' padding: 0 !important;\n' +
' margin: 0 !important;\n' + ' margin: 0 !important;\n' +
'}'] '}'],
standalone: false
}) })
export class HistogramDetailsComponent { export class HistogramDetailsComponent {

View File

@@ -2,10 +2,11 @@ import { Component, OnInit, Input,AfterViewInit } from '@angular/core';
import { IColorMap, IColor, IColorEntry,ILayer, IRenderer } from '../../models/color.map'; import { IColorMap, IColor, IColorEntry,ILayer, IRenderer } from '../../models/color.map';
@Component({ @Component({
selector: 'fm-map-layer-legend', selector: 'fm-map-layer-legend',
templateUrl: './legend.component.html', templateUrl: './legend.component.html',
styleUrls: ['./legend.component.scss'] styleUrls: ['./legend.component.scss'],
standalone: false
}) })
export class LegendComponent implements OnInit,AfterViewInit { export class LegendComponent implements OnInit,AfterViewInit {

View File

@@ -2,12 +2,13 @@ import { Component, Input } from '@angular/core';
import { IStatistics } from '../../../models/color.map'; import { IStatistics } from '../../../models/color.map';
@Component({ @Component({
selector: 'fm-map-statistics-details', selector: 'fm-map-statistics-details',
templateUrl: './statistics-details.component.html', templateUrl: './statistics-details.component.html',
styles: ['.nopadding{\n' + styles: ['.nopadding{\n' +
' padding: 0 !important;\n' + ' padding: 0 !important;\n' +
' margin: 0 !important;\n' + ' margin: 0 !important;\n' +
'}'] '}'],
standalone: false
}) })
export class StatisticsDetailsComponent { export class StatisticsDetailsComponent {

View File

@@ -14,7 +14,7 @@ div.map-search {
} }
.disabled { .disabled {
color:lighten(#000000,80%); color:adjust(#000000,80%);
} }
:host ::ng-deep ngb-typeahead-window.dropdown-menu { :host ::ng-deep ngb-typeahead-window.dropdown-menu {

View File

@@ -6,10 +6,11 @@ import { IQueryState } from '@farmmaps/common';
import { IPeriodState } from '../../models/period.state'; import { IPeriodState } from '../../models/period.state';
import { tassign } from 'tassign'; import { tassign } from 'tassign';
@Component({ @Component({
selector: 'fm-map-map-search', selector: 'fm-map-map-search',
templateUrl: './map-search.component.html', templateUrl: './map-search.component.html',
styleUrls: ['./map-search.component.scss'] styleUrls: ['./map-search.component.scss'],
standalone: false
}) })
export class MapSearchComponent { export class MapSearchComponent {

View File

@@ -38,10 +38,11 @@ import { tassign } from 'tassign';
import * as style from 'ol/style'; import * as style from 'ol/style';
@Component({ @Component({
selector: 'fm-map-map', selector: 'fm-map-map',
templateUrl: './map.component.html', templateUrl: './map.component.html',
styleUrls: ['./map.component.scss'] styleUrls: ['./map.component.scss'],
standalone: false
}) })
export class MapComponent implements OnInit, OnDestroy, AfterViewInit { export class MapComponent implements OnInit, OnDestroy, AfterViewInit {

View File

@@ -9,9 +9,10 @@ export interface IMetaData {
attributes: any attributes: any
} }
@Component({ @Component({
selector: 'fm-map-meta-data-modal', selector: 'fm-map-meta-data-modal',
templateUrl: 'meta-data-modal.component.html' templateUrl: 'meta-data-modal.component.html',
standalone: false
}) })
export class MetaDataModalComponent { export class MetaDataModalComponent {

View File

@@ -15,10 +15,11 @@ const after = (one: NgbDateStruct, two: NgbDateStruct) =>
!one || !two ? false : one.year === two.year ? one.month === two.month ? one.day === two.day !one || !two ? false : one.year === two.year ? one.month === two.month ? one.day === two.day
? false : one.day > two.day : one.month > two.month : one.year > two.year; ? false : one.day > two.day : one.month > two.month : one.year > two.year;
@Component({ @Component({
selector: 'fm-map-select-period-modal', selector: 'fm-map-select-period-modal',
templateUrl: 'select-period-modal.component.html', templateUrl: 'select-period-modal.component.html',
styleUrls: ['select-period-modal.component.scss'] styleUrls: ['select-period-modal.component.scss'],
standalone: false
}) })
export class SelectPeriodModalComponent { export class SelectPeriodModalComponent {

View File

@@ -5,10 +5,11 @@ import { WidgetHostDirective } from '../widget-host/widget-host.directive';
import { IItemLayer } from '../../models/item.layer'; import { IItemLayer } from '../../models/item.layer';
@Component({ @Component({
selector: 'fm-map-selected-item-container', selector: 'fm-map-selected-item-container',
templateUrl: './selected-item-container.component.html', templateUrl: './selected-item-container.component.html',
styleUrls: ['./selected-item-container.component.scss'] styleUrls: ['./selected-item-container.component.scss'],
standalone: false
}) })
export class SelectedItemContainerComponent { export class SelectedItemContainerComponent {

View File

@@ -15,10 +15,11 @@ import { withLatestFrom,switchMap,combineLatest } from 'rxjs/operators';
@ForItemType("vnd.farmmaps.itemtype.cropfield") @ForItemType("vnd.farmmaps.itemtype.cropfield")
@Injectable() @Injectable()
@Component({ @Component({
selector: 'fm-map-selected-item-cropfield', selector: 'fm-map-selected-item-cropfield',
templateUrl: './selected-item-cropfield.component.html', templateUrl: './selected-item-cropfield.component.html',
styleUrls: ['./selected-item-cropfield.component.scss'] styleUrls: ['./selected-item-cropfield.component.scss'],
standalone: false
}) })
export class SelectedItemCropfieldComponent extends AbstractSelectedItemComponent implements OnInit{ export class SelectedItemCropfieldComponent extends AbstractSelectedItemComponent implements OnInit{

View File

@@ -12,10 +12,11 @@ import { AbstractSelectedItemComponent } from '../selected-item/selected-item.co
@ForItemType("vnd.farmmaps.itemtype.geotiff.processed") @ForItemType("vnd.farmmaps.itemtype.geotiff.processed")
@Injectable() @Injectable()
@Component({ @Component({
selector: 'fm-map-selected-item-geotiff', selector: 'fm-map-selected-item-geotiff',
templateUrl: './selected-item-geotiff.component.html', templateUrl: './selected-item-geotiff.component.html',
styleUrls: ['./selected-item-geotiff.component.scss'] styleUrls: ['./selected-item-geotiff.component.scss'],
standalone: false
}) })
export class SelectedItemGeotiffComponent extends AbstractSelectedItemComponent implements OnDestroy { export class SelectedItemGeotiffComponent extends AbstractSelectedItemComponent implements OnDestroy {
sub: Subscription; sub: Subscription;

View File

@@ -12,10 +12,11 @@ import { Subscription } from 'rxjs';
@ForItemType("vnd.farmmaps.itemtype.shape.processed") @ForItemType("vnd.farmmaps.itemtype.shape.processed")
@Injectable() @Injectable()
@Component({ @Component({
selector: 'fm-map-selected-item-shape', selector: 'fm-map-selected-item-shape',
templateUrl: './selected-item-shape.component.html', templateUrl: './selected-item-shape.component.html',
styleUrls: ['./selected-item-shape.component.scss'] styleUrls: ['./selected-item-shape.component.scss'],
standalone: false
}) })
export class SelectedItemShapeComponent extends AbstractSelectedItemComponent implements OnDestroy { export class SelectedItemShapeComponent extends AbstractSelectedItemComponent implements OnDestroy {
public selectedLayer = 0; public selectedLayer = 0;

View File

@@ -13,10 +13,11 @@ import { AbstractSelectedItemComponent } from '../selected-item/selected-item.co
@ForItemType("vnd.farmmaps.itemtype.temporal") @ForItemType("vnd.farmmaps.itemtype.temporal")
@Injectable() @Injectable()
@Component({ @Component({
selector: 'fm-map-selected-item-temporal', selector: 'fm-map-selected-item-temporal',
templateUrl: './selected-item-temporal.component.html', templateUrl: './selected-item-temporal.component.html',
styleUrls: ['./selected-item-temporal.component.scss'] styleUrls: ['./selected-item-temporal.component.scss'],
standalone: false
}) })
export class SelectedItemTemporalComponent extends AbstractSelectedItemComponent implements OnDestroy { export class SelectedItemTemporalComponent extends AbstractSelectedItemComponent implements OnDestroy {
sub: Subscription; sub: Subscription;

View File

@@ -74,10 +74,11 @@ export abstract class AbstractSelectedItemComponent {
} }
@Injectable() @Injectable()
@Component({ @Component({
selector: 'fm-map-selected-item', selector: 'fm-map-selected-item',
templateUrl: './selected-item.component.html', templateUrl: './selected-item.component.html',
styleUrls: ['./selected-item.component.scss'] styleUrls: ['./selected-item.component.scss'],
standalone: false
}) })
export class SelectedItemComponent extends AbstractSelectedItemComponent { export class SelectedItemComponent extends AbstractSelectedItemComponent {

View File

@@ -1,7 +1,8 @@
import { Directive, ViewContainerRef } from '@angular/core'; import { Directive, ViewContainerRef } from '@angular/core';
@Directive({ @Directive({
selector: '[fm-map-widget-host]', selector: '[fm-map-widget-host]',
standalone: false
}) })
export class WidgetHostDirective { export class WidgetHostDirective {
constructor(public viewContainerRef: ViewContainerRef) { } constructor(public viewContainerRef: ViewContainerRef) { }

View File

@@ -1,9 +1,10 @@
import { Component, OnInit, Input } from '@angular/core'; import { Component, OnInit, Input } from '@angular/core';
@Component({ @Component({
selector: 'fm-map-widget-status', selector: 'fm-map-widget-status',
templateUrl: './widget-status.component.html', templateUrl: './widget-status.component.html',
styleUrls: ['./widget-status.component.css'] styleUrls: ['./widget-status.component.css'],
standalone: false
}) })
export class WidgetStatusComponent implements OnInit { export class WidgetStatusComponent implements OnInit {
@Input() stage: Stage; @Input() stage: Stage;

View File

@@ -2,9 +2,10 @@ import { Component, Input } from '@angular/core';
import { Layer } from 'ol/layer'; import { Layer } from 'ol/layer';
import { Source } from 'ol/source'; import { Source } from 'ol/source';
@Component({ @Component({
selector: 'fm-map-zoom-to-show-alert', selector: 'fm-map-zoom-to-show-alert',
template: '<div *fmMapIfZoomToShow="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>' template: '<div *fmMapIfZoomToShow="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>',
standalone: false
}) })
export class ZoomToShowAlert { export class ZoomToShowAlert {
public layer$: Layer<Source>; public layer$: Layer<Source>;

View File

@@ -166,12 +166,14 @@ export class MapEffects {
zoomToExtent2$ = createEffect(() => this.actions$.pipe( zoomToExtent2$ = createEffect(() => this.actions$.pipe(
ofType(mapActions.SETFEATURES), ofType(mapActions.SETFEATURES),
switchMap((action: mapActions.SetFeatures) => { switchMap((action: mapActions.SetFeatures) => {
const extent = createEmpty(); if (action.zoomToExtent) {
if (extent) { const extent = createEmpty();
for (const f of action.features) { if (extent) {
extend(extent, (f as Feature<Geometry>).getGeometry().getExtent()); for (const f of action.features) {
extend(extent, (f as Feature<Geometry>).getGeometry().getExtent());
}
if (action.features.length > 0) return of(new mapActions.SetExtent(extent));
} }
if (action.features.length > 0) return of(new mapActions.SetExtent(extent));
} }
return EMPTY; return EMPTY;
}))); })));

View File

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

View File

@@ -8,8 +8,8 @@
"tslib": "^2.0.0" "tslib": "^2.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"@angular/common": "18.2.3", "@angular/common": "19.2.18",
"@angular/core": "18.2.3", "@angular/core": "19.2.18",
"cesium": "^1.97.0", "cesium": "^1.97.0",
"ol-cesium": ">=2.13.0" "ol-cesium": ">=2.13.0"
} }

View File

@@ -7,10 +7,11 @@ import VectorSynchronizer from 'olcs/VectorSynchronizer';
import { mapReducers,mapActions } from '@farmmaps/common-map'; import { mapReducers,mapActions } from '@farmmaps/common-map';
import { Store } from '@ngrx/store'; import { Store } from '@ngrx/store';
@Component({ @Component({
selector: 'fm-map3d-switch2d3d', selector: 'fm-map3d-switch2d3d',
templateUrl: './switch2d3d.component.html', templateUrl: './switch2d3d.component.html',
styleUrls: ['./switch2d3d.component.scss'] styleUrls: ['./switch2d3d.component.scss'],
standalone: false
}) })
export class Switch2D3DComponent { export class Switch2D3DComponent {

View File

@@ -5,20 +5,20 @@
"registry": "https://repository.akkerweb.nl/repository/npm-hosted/" "registry": "https://repository.akkerweb.nl/repository/npm-hosted/"
}, },
"peerDependencies": { "peerDependencies": {
"@ng-bootstrap/ng-bootstrap": "^17.0.1", "@ng-bootstrap/ng-bootstrap": "^18.0.0",
"@angular/common": "18.2.3", "@angular/common": "19.2.18",
"@angular/core": "18.2.3", "@angular/core": "19.2.18",
"@angular/forms": "18.2.3", "@angular/forms": "19.2.18",
"@ngrx/effects": "^18.0.2", "@ngrx/effects": "19.2.1",
"@ngrx/router-store": "^18.0.2", "@ngrx/router-store": "19.2.1",
"@ngrx/store": "^18.0.2", "@ngrx/store": "19.2.1",
"tassign": "^1.0.0", "tassign": "^1.0.0",
"bootstrap": "^5.3.3", "bootstrap": "^5.3.3",
"@microsoft/signalr": "^3.1.16", "@microsoft/signalr": "^3.1.16",
"ngx-uploadx": "^6.2.0", "ngx-uploadx": "7.0.1",
"angular-oauth2-oidc": "^17.0.2", "angular-oauth2-oidc": "^17.0.2",
"moment": "^2.29.4", "moment": "^2.29.4",
"ngx-avatars": "^1.8.0", "ngx-avatars": "1.9.3",
"ngx-image-cropper": "^7.0.0", "ngx-image-cropper": "^7.0.0",
"ngx-clipboard": "^16.0.0" "ngx-clipboard": "^16.0.0"
} }

View File

@@ -1,5 +1,5 @@
// angular modules // angular modules
import { NgModule, APP_INITIALIZER, ModuleWithProviders, Injector, Optional, SkipSelf } from '@angular/core'; import { NgModule, ModuleWithProviders, Injector, Optional, SkipSelf, inject, provideAppInitializer } from '@angular/core';
import { DatePipe } from '@angular/common'; import { DatePipe } from '@angular/common';
import { HTTP_INTERCEPTORS } from '@angular/common/http'; import { HTTP_INTERCEPTORS } from '@angular/common/http';
@@ -90,12 +90,10 @@ export class AppCommonServiceModule {
providers: [ providers: [
AppConfig, AppConfig,
ItemTypeService, ItemTypeService,
{ provideAppInitializer(() => {
provide: APP_INITIALIZER, const initializerFn = (appConfigFactory)(inject(Injector), inject(AppConfig), inject(OAuthService), inject(AuthConfigFactory), inject(OAuthStorage), inject(ItemTypeService));
useFactory: appConfigFactory, return initializerFn();
deps: [Injector, AppConfig, OAuthService, AuthConfigFactory, OAuthStorage, ItemTypeService], }),
multi: true
},
{ {
provide: HTTP_INTERCEPTORS, provide: HTTP_INTERCEPTORS,
useClass: AccessTokenInterceptor, useClass: AccessTokenInterceptor,

View File

@@ -6,9 +6,10 @@ import * as appReducers from '../../reducers/app-common.reducer';
import * as appActions from '../../actions/app-common.actions'; import * as appActions from '../../actions/app-common.actions';
@Component({ @Component({
selector: 'fm-app-menu', selector: 'fm-app-menu',
templateUrl: './app-menu.component.html', templateUrl: './app-menu.component.html',
styleUrls: ['./app-menu.component.scss'] styleUrls: ['./app-menu.component.scss'],
standalone: false
}) })
export class AppMenuComponent implements OnInit { export class AppMenuComponent implements OnInit {

View File

@@ -19,12 +19,13 @@ import { AppConfig } from '../../shared/app.config';
import * as appReducers from '../../reducers/app-common.reducer'; import * as appReducers from '../../reducers/app-common.reducer';
@Component({ @Component({
selector: 'fm-app', selector: 'fm-app',
templateUrl: './app.component.html', templateUrl: './app.component.html',
styleUrls: ['./app.component.scss'], styleUrls: ['./app.component.scss'],
encapsulation: ViewEncapsulation.None, encapsulation: ViewEncapsulation.None,
changeDetection: ChangeDetectionStrategy.OnPush changeDetection: ChangeDetectionStrategy.OnPush,
standalone: false
}) })
export class AppComponent implements OnInit, OnDestroy { export class AppComponent implements OnInit, OnDestroy {

View File

@@ -3,9 +3,10 @@ import { Router } from '@angular/router';
import { OAuthService } from 'angular-oauth2-oidc'; import { OAuthService } from 'angular-oauth2-oidc';
import { Location} from '@angular/common'; import { Location} from '@angular/common';
@Component({ @Component({
selector: 'fm-auth-callback', selector: 'fm-auth-callback',
template:'<div></div>' template: '<div></div>',
standalone: false
}) })
export class AuthCallbackComponent { export class AuthCallbackComponent {

View File

@@ -3,9 +3,10 @@ import { IUser } from '../../models/user';
import { AppConfig } from '../../shared/app.config'; import { AppConfig } from '../../shared/app.config';
@Component({ @Component({
selector: 'fm-avatar', selector: 'fm-avatar',
templateUrl: './avatar.component.html', templateUrl: './avatar.component.html',
styleUrls: ['./avatar.component.css'] styleUrls: ['./avatar.component.css'],
standalone: false
}) })
export class AvatarComponent implements OnInit { export class AvatarComponent implements OnInit {

View File

@@ -3,9 +3,10 @@ import { Component, EventEmitter, HostListener, Output } from '@angular/core';
import { DeviceService } from '../../services/device.service'; import { DeviceService } from '../../services/device.service';
@Component({ @Component({
selector: 'fm-back-button', selector: 'fm-back-button',
templateUrl: './back-button.component.html', templateUrl: './back-button.component.html',
styleUrls: ['./back-button.component.scss'] styleUrls: ['./back-button.component.scss'],
standalone: false
}) })
export class BackButtonComponent { export class BackButtonComponent {
@Output() beforeLocationBack = new EventEmitter(); @Output() beforeLocationBack = new EventEmitter();

View File

@@ -5,9 +5,10 @@ import { ImageCroppedEvent,LoadedImage } from 'ngx-image-cropper';
import {ImageService } from '../../services/image.service'; import {ImageService } from '../../services/image.service';
@Component({ @Component({
selector: 'fm-edit-image-modal', selector: 'fm-edit-image-modal',
templateUrl: './edit-image-modal.component.html', templateUrl: './edit-image-modal.component.html',
styleUrls: ['./edit-image-modal.component.scss'] styleUrls: ['./edit-image-modal.component.scss'],
standalone: false
}) })
export class EditImageModalComponent implements OnInit { export class EditImageModalComponent implements OnInit {

View File

@@ -2,9 +2,10 @@ import { Component, ChangeDetectorRef, Input,SimpleChanges,OnChanges, Output,Eve
import { IItem } from '../../models/item'; import { IItem } from '../../models/item';
@Component({ @Component({
selector: 'fm-gradient-select', selector: 'fm-gradient-select',
templateUrl: './gradient-select.component.html', templateUrl: './gradient-select.component.html',
styleUrls: ['./gradient-select.component.scss'] styleUrls: ['./gradient-select.component.scss'],
standalone: false
}) })
export class GradientSelectComponent implements OnChanges { export class GradientSelectComponent implements OnChanges {

View File

@@ -6,9 +6,10 @@ import { GradientService } from '../../common-service.module';
@Component({ @Component({
selector: 'fm-gradient', selector: 'fm-gradient',
templateUrl: './gradient.component.html', templateUrl: './gradient.component.html',
styleUrls: ['./gradient.component.scss'] styleUrls: ['./gradient.component.scss'],
standalone: false
}) })
export class GradientComponent implements OnInit,OnChanges { export class GradientComponent implements OnInit,OnChanges {

View File

@@ -7,8 +7,9 @@ import { skip } from 'rxjs/operators';
import {OAuthService } from 'angular-oauth2-oidc'; import {OAuthService } from 'angular-oauth2-oidc';
import { IUser } from '../../models/user'; import { IUser } from '../../models/user';
@Directive({ @Directive({
selector: '[fm-hasclaim]', selector: '[fm-hasclaim]',
standalone: false
}) })
export class HasClaimDirective implements OnInit{ export class HasClaimDirective implements OnInit{
@Input('fm-hasclaim') claim:string; @Input('fm-hasclaim') claim:string;

View File

@@ -4,8 +4,9 @@ import {PackageService} from '../../services/package.service';
import * as appCommonReducer from '../../reducers/app-common.reducer'; import * as appCommonReducer from '../../reducers/app-common.reducer';
import {Store} from '@ngrx/store'; import {Store} from '@ngrx/store';
@Directive({ @Directive({
selector: '[fmHasPackage]', selector: '[fmHasPackage]',
standalone: false
}) })
export class HasPackageDirective implements OnDestroy, AfterViewInit { export class HasPackageDirective implements OnDestroy, AfterViewInit {

View File

@@ -5,7 +5,8 @@ import { Observable, Subscription } from 'rxjs';
import { IUser } from '../../models/user'; import { IUser } from '../../models/user';
@Directive({ @Directive({
selector: '[fmHasRole]', selector: '[fmHasRole]',
standalone: false
}) })
export class HasRoleDirective implements OnInit, OnDestroy{ export class HasRoleDirective implements OnInit, OnDestroy{
@Input('fmHasRole') role:string; @Input('fmHasRole') role:string;

View File

@@ -7,9 +7,10 @@ import * as appReducers from '../../reducers/app-common.reducer';
import * as appActions from '../../actions/app-common.actions'; import * as appActions from '../../actions/app-common.actions';
@Component({ @Component({
selector: 'fm-help-menu', selector: 'fm-help-menu',
templateUrl: './help-menu.component.html', templateUrl: './help-menu.component.html',
styleUrls: ['./help-menu.component.scss'] styleUrls: ['./help-menu.component.scss'],
standalone: false
}) })
export class HelpMenuComponent implements OnInit { export class HelpMenuComponent implements OnInit {

View File

@@ -7,8 +7,9 @@ import { ClipboardService } from 'ngx-clipboard'
@Component({ @Component({
selector: 'fm-item-link', selector: 'fm-item-link',
templateUrl: './item-link.component.html' templateUrl: './item-link.component.html',
standalone: false
}) })
export class ItemLinkComponent implements OnDestroy { export class ItemLinkComponent implements OnDestroy {

View File

@@ -3,10 +3,11 @@ import { Store, Action } from '@ngrx/store';
import * as appReducers from '../../reducers/app-common.reducer'; import * as appReducers from '../../reducers/app-common.reducer';
import * as commonActions from '../../actions/app-common.actions'; import * as commonActions from '../../actions/app-common.actions';
@Component({ @Component({
selector: 'fm-menu-background', selector: 'fm-menu-background',
templateUrl: './menu-background.component.html', templateUrl: './menu-background.component.html',
styleUrls: ['./menu-background.component.scss'], styleUrls: ['./menu-background.component.scss'],
standalone: false
}) })
export class MenuBackgroundComponent implements OnInit { export class MenuBackgroundComponent implements OnInit {
@Input() visible = false; @Input() visible = false;

View File

@@ -4,6 +4,8 @@ import { Component, OnInit } from '@angular/core';
selector: 'fm-not-found', selector: 'fm-not-found',
templateUrl: './not-found.component.html' templateUrl: './not-found.component.html'
// styleUrls: ['./not-found.component.css'] // styleUrls: ['./not-found.component.css']
,
standalone: false
}) })
export class NotFoundComponent implements OnInit { export class NotFoundComponent implements OnInit {
constructor() { } constructor() { }

View File

@@ -2,7 +2,8 @@ import { Component, OnInit } from '@angular/core';
@Component({ @Component({
selector: 'fm-not-implemented', selector: 'fm-not-implemented',
templateUrl: './not-implemented.component.html' templateUrl: './not-implemented.component.html',
standalone: false
}) })
export class NotImplementedComponent implements OnInit { export class NotImplementedComponent implements OnInit {
constructor() { } constructor() { }

View File

@@ -6,9 +6,10 @@ import * as appReducers from '../../reducers/app-common.reducer';
import * as appActions from '../../actions/app-common.actions'; import * as appActions from '../../actions/app-common.actions';
@Component({ @Component({
selector: 'fm-notification-menu', selector: 'fm-notification-menu',
templateUrl: './notification-menu.component.html', templateUrl: './notification-menu.component.html',
styleUrls: ['./notification-menu.component.scss'] styleUrls: ['./notification-menu.component.scss'],
standalone: false
}) })
export class NotificationMenuComponent implements OnInit { export class NotificationMenuComponent implements OnInit {

View File

@@ -4,8 +4,9 @@ import {PackageService} from '../../services/package.service';
import * as appCommonReducer from '../../reducers/app-common.reducer'; import * as appCommonReducer from '../../reducers/app-common.reducer';
import {Store} from '@ngrx/store'; import {Store} from '@ngrx/store';
@Directive({ @Directive({
selector: '[fmPackageExists]', selector: '[fmPackageExists]',
standalone: false
}) })
export class PackageExistsDirective implements OnDestroy, AfterViewInit { export class PackageExistsDirective implements OnDestroy, AfterViewInit {

View File

@@ -45,7 +45,7 @@ div.card-header span.fa {
.upload-file .progress-container .progress-bar { .upload-file .progress-container .progress-bar {
display: block; display: block;
background-color: color("green"); background-color: green;
width: 0%; width: 0%;
height: 100%; height: 100%;
} }
@@ -84,7 +84,7 @@ div.card-header span.fa {
} }
.upload-file.done > div > span.fa-check { .upload-file.done > div > span.fa-check {
color: color("green"); color: green;
width: 20px; width: 20px;
display: inline-block; display: inline-block;
vertical-align: middle; vertical-align: middle;

View File

@@ -9,7 +9,8 @@ import * as commonActions from '../../actions/app-common.actions';
@Component({ @Component({
selector: 'fm-resumable-file-upload', selector: 'fm-resumable-file-upload',
templateUrl: './resumable-file-upload.component.html', templateUrl: './resumable-file-upload.component.html',
styleUrls: ['./resumable-file-upload.component.scss'] styleUrls: ['./resumable-file-upload.component.scss'],
standalone: false
}) })
export class ResumableFileUploadComponent implements OnInit, OnDestroy { export class ResumableFileUploadComponent implements OnInit, OnDestroy {

View File

@@ -7,9 +7,10 @@ import * as appCommonActions from '../../actions/app-common.actions';
@Component({ @Component({
selector: 'fm-session-cleared', selector: 'fm-session-cleared',
templateUrl: 'session-cleared.component.html', templateUrl: 'session-cleared.component.html',
styleUrls: ['session-cleared.component.scss'] styleUrls: ['session-cleared.component.scss'],
standalone: false
}) })

View File

@@ -7,9 +7,10 @@ import * as appReducers from '../../reducers/app-common.reducer';
import * as appActions from '../../actions/app-common.actions'; import * as appActions from '../../actions/app-common.actions';
@Component({ @Component({
selector: 'fm-setting-menu', selector: 'fm-setting-menu',
templateUrl: './setting-menu.component.html', templateUrl: './setting-menu.component.html',
styleUrls: ['./setting-menu.component.scss'] styleUrls: ['./setting-menu.component.scss'],
standalone: false
}) })
export class SettingMenuComponent implements OnInit { export class SettingMenuComponent implements OnInit {

View File

@@ -1,9 +1,10 @@
import { Component, Input,Output,ViewChild,EventEmitter, ElementRef,OnChanges,SimpleChanges,HostListener,ChangeDetectorRef, ViewEncapsulation } from '@angular/core'; import { Component, Input,Output,ViewChild,EventEmitter, ElementRef,OnChanges,SimpleChanges,HostListener,ChangeDetectorRef, ViewEncapsulation } from '@angular/core';
@Component({ @Component({
selector: 'fm-side-panel', selector: 'fm-side-panel',
templateUrl: 'side-panel.component.html', templateUrl: 'side-panel.component.html',
styleUrls: ['side-panel.component.scss'] styleUrls: ['side-panel.component.scss'],
standalone: false
}) })

View File

@@ -6,16 +6,17 @@ import {TypeaheadService} from '../../services/typeahead.service';
import {NgbTypeahead} from '@ng-bootstrap/ng-bootstrap'; import {NgbTypeahead} from '@ng-bootstrap/ng-bootstrap';
@Component({ @Component({
selector: 'fm-tag-input', selector: 'fm-tag-input',
templateUrl: 'tag-input.component.html', templateUrl: 'tag-input.component.html',
styleUrls: ['tag-input.component.scss'], styleUrls: ['tag-input.component.scss'],
providers: [ providers: [
{ {
provide: NG_VALUE_ACCESSOR, provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => TagInputComponent), useExisting: forwardRef(() => TagInputComponent),
multi: true multi: true
} }
] ],
standalone: false
}) })
export class TagInputComponent implements ControlValueAccessor { export class TagInputComponent implements ControlValueAccessor {

View File

@@ -7,11 +7,12 @@ import { commonReducers,ItemTypeService } from '../../../public-api'
import { EditImageModalComponent} from '../edit-image-modal/edit-image-modal.component'; import { EditImageModalComponent} from '../edit-image-modal/edit-image-modal.component';
import { AppConfig } from "../../shared/app.config"; import { AppConfig } from "../../shared/app.config";
@Component({ @Component({
selector: 'fm-thumbnail', selector: 'fm-thumbnail',
templateUrl: 'thumbnail.component.html', templateUrl: 'thumbnail.component.html',
styleUrls: ['thumbnail.component.scss'] styleUrls: ['thumbnail.component.scss'],
}) standalone: false
})
export class ThumbnailComponent { export class ThumbnailComponent {

View File

@@ -7,10 +7,11 @@ export interface TimeSpan {
endDate:Date; endDate:Date;
} }
@Component({ @Component({
selector: 'fm-timespan', selector: 'fm-timespan',
templateUrl: './timespan.component.html', templateUrl: './timespan.component.html',
styleUrls: ['./timespan.component.css'] styleUrls: ['./timespan.component.css'],
standalone: false
}) })
export class TimespanComponent implements OnInit, OnChanges { export class TimespanComponent implements OnInit, OnChanges {

View File

@@ -6,9 +6,10 @@ import * as appReducers from '../../reducers/app-common.reducer';
import * as appActions from '../../actions/app-common.actions'; import * as appActions from '../../actions/app-common.actions';
@Component({ @Component({
selector: 'fm-user-menu', selector: 'fm-user-menu',
templateUrl: './user-menu.component.html', templateUrl: './user-menu.component.html',
styleUrls: ['./user-menu.component.scss'] styleUrls: ['./user-menu.component.scss'],
standalone: false
}) })
export class UserMenuComponent implements OnInit { export class UserMenuComponent implements OnInit {

View File

@@ -25,7 +25,8 @@ export class ItemService {
return this.httpClient.get<{ [id: string]: IItemType }>(`${this.ApiEndpoint()}/api/v1/itemtypes/`); return this.httpClient.get<{ [id: string]: IItemType }>(`${this.ApiEndpoint()}/api/v1/itemtypes/`);
} }
getFeatures(extent: number[], crs: string, searchText?: string, searchTags?:string,startDate?:Date,endDate?:Date,itemType?:string,parentCode?:string,dataFilter?:string,level?:number,indexed?:boolean): Observable<any> { getFeatures(extent: number[], crs: string, searchText?: string, searchTags?:string,startDate?:Date,endDate?:Date,
itemType?:string,parentCode?:string,dataFilter?:string,level?:number,indexed?:boolean,atItemLocationItemCode?: string): Observable<any> {
let params = new HttpParams(); let params = new HttpParams();
params = params.append("crs", crs); params = params.append("crs", crs);
if (extent) params =params.append("bbox", extent.join(",")); if (extent) params =params.append("bbox", extent.join(","));
@@ -43,6 +44,7 @@ export class ItemService {
if (parentCode) params = params.append("pc", parentCode); if (parentCode) params = params.append("pc", parentCode);
if (dataFilter) params = params.append("df", dataFilter); if (dataFilter) params = params.append("df", dataFilter);
if (level) params = params.append("lvl", level.toString()); if (level) params = params.append("lvl", level.toString());
if (atItemLocationItemCode) params = params.append("ail", atItemLocationItemCode);
params = params.append("ind", indexed ?? true); params = params.append("ind", indexed ?? true);
return this.httpClient.get<any>(`${this.ApiEndpoint()}/api/v1/items/features/`, {params:params}); return this.httpClient.get<any>(`${this.ApiEndpoint()}/api/v1/items/features/`, {params:params});
} }
@@ -116,7 +118,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);
@@ -134,6 +137,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 });
} }

View File

@@ -2,7 +2,8 @@ import { Pipe, PipeTransform } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser'; import { DomSanitizer } from '@angular/platform-browser';
@Pipe({ @Pipe({
name: 'safe' name: 'safe',
standalone: false
}) })
export class SafePipe implements PipeTransform { export class SafePipe implements PipeTransform {

View File

@@ -31,8 +31,8 @@
"tslib": "^2.3.0" "tslib": "^2.3.0"
}, },
"peerDependencies": { "peerDependencies": {
"@angular/common": "18.2.3", "@angular/common": "19.2.18",
"@angular/core": "18.2.3", "@angular/core": "19.2.18",
"ol": "^8.2.0" "ol": "^8.2.0"
} }
} }

View File

@@ -1,8 +1,9 @@
import { Component, ElementRef, OnInit } from '@angular/core'; import { Component, ElementRef, OnInit } from '@angular/core';
@Component({ @Component({
selector: 'aol-attribution', selector: 'aol-attribution',
template: '<ng-content></ng-content>', template: '<ng-content></ng-content>',
standalone: false
}) })
export class AttributionComponent implements OnInit { export class AttributionComponent implements OnInit {
label: string; label: string;

View File

@@ -3,8 +3,9 @@ import { SourceComponent } from './sources/source.component';
import { AttributionComponent } from './attribution.component'; import { AttributionComponent } from './attribution.component';
@Component({ @Component({
selector: 'aol-attributions', selector: 'aol-attributions',
template: '<ng-content></ng-content>', template: '<ng-content></ng-content>',
standalone: false
}) })
export class AttributionsComponent implements AfterViewInit { export class AttributionsComponent implements AfterViewInit {
@ContentChildren(AttributionComponent) @ContentChildren(AttributionComponent)

View File

@@ -9,8 +9,9 @@ import { Coordinate } from 'ol/coordinate';
import { transform } from 'ol/proj'; import { transform } from 'ol/proj';
@Component({ @Component({
selector: 'aol-collection-coordinates', selector: 'aol-collection-coordinates',
template: ` <div class="aol-collection-coordinates"></div> `, template: ` <div class="aol-collection-coordinates"></div> `,
standalone: false
}) })
export class CollectionCoordinatesComponent implements OnChanges, OnInit { export class CollectionCoordinatesComponent implements OnChanges, OnInit {
@Input() @Input()

View File

@@ -1,8 +1,9 @@
import { Component, ElementRef } from '@angular/core'; import { Component, ElementRef } from '@angular/core';
@Component({ @Component({
selector: 'aol-content', selector: 'aol-content',
template: '<ng-content></ng-content>', template: '<ng-content></ng-content>',
standalone: false
}) })
export class ContentComponent { export class ContentComponent {
constructor(public elementRef: ElementRef) {} constructor(public elementRef: ElementRef) {}

View File

@@ -3,8 +3,9 @@ import { Attribution } from 'ol/control';
import { MapComponent } from '../map.component'; import { MapComponent } from '../map.component';
@Component({ @Component({
selector: 'aol-control-attribution', selector: 'aol-control-attribution',
template: ``, template: ``,
standalone: false
}) })
export class ControlAttributionComponent implements OnInit, OnDestroy { export class ControlAttributionComponent implements OnInit, OnDestroy {
@Input() @Input()

View File

@@ -4,8 +4,9 @@ import { MapComponent } from '../map.component';
import { ContentComponent } from '../content.component'; import { ContentComponent } from '../content.component';
@Component({ @Component({
selector: 'aol-control', selector: 'aol-control',
template: ` <ng-content></ng-content> `, template: ` <ng-content></ng-content> `,
standalone: false
}) })
export class ControlComponent implements OnInit, OnDestroy { export class ControlComponent implements OnInit, OnDestroy {
@ContentChild(ContentComponent, { static: true }) @ContentChild(ContentComponent, { static: true })

View File

@@ -8,8 +8,9 @@ import { Options as ZoomOptions } from 'ol/control/Zoom';
import { MapComponent } from '../map.component'; import { MapComponent } from '../map.component';
@Component({ @Component({
selector: 'aol-control-defaults', selector: 'aol-control-defaults',
template: '', template: '',
standalone: false
}) })
export class DefaultControlComponent implements OnInit, OnDestroy { export class DefaultControlComponent implements OnInit, OnDestroy {
@Input() @Input()

View File

@@ -3,8 +3,9 @@ import { FullScreen } from 'ol/control';
import { MapComponent } from '../map.component'; import { MapComponent } from '../map.component';
@Component({ @Component({
selector: 'aol-control-fullscreen', selector: 'aol-control-fullscreen',
template: ` <ng-content></ng-content> `, template: ` <ng-content></ng-content> `,
standalone: false
}) })
export class ControlFullScreenComponent implements OnInit, OnDestroy { export class ControlFullScreenComponent implements OnInit, OnDestroy {
@Input() @Input()

View File

@@ -5,8 +5,9 @@ import { CoordinateFormat } from 'ol/coordinate';
import { ProjectionLike } from 'ol/proj'; import { ProjectionLike } from 'ol/proj';
@Component({ @Component({
selector: 'aol-control-mouseposition', selector: 'aol-control-mouseposition',
template: ``, template: ``,
standalone: false
}) })
export class ControlMousePositionComponent implements OnInit, OnDestroy { export class ControlMousePositionComponent implements OnInit, OnDestroy {
@Input() @Input()

View File

@@ -5,8 +5,9 @@ import { OverviewMap } from 'ol/control';
import { MapComponent } from '../map.component'; import { MapComponent } from '../map.component';
@Component({ @Component({
selector: 'aol-control-overviewmap', selector: 'aol-control-overviewmap',
template: ` <ng-content></ng-content> `, template: ` <ng-content></ng-content> `,
standalone: false
}) })
export class ControlOverviewMapComponent implements OnInit, OnChanges, OnDestroy { export class ControlOverviewMapComponent implements OnInit, OnChanges, OnDestroy {
@Input() @Input()

View File

@@ -3,8 +3,9 @@ import { Rotate } from 'ol/control';
import { MapComponent } from '../map.component'; import { MapComponent } from '../map.component';
@Component({ @Component({
selector: 'aol-control-rotate', selector: 'aol-control-rotate',
template: ` <ng-content></ng-content> `, template: ` <ng-content></ng-content> `,
standalone: false
}) })
export class ControlRotateComponent implements OnInit, OnDestroy { export class ControlRotateComponent implements OnInit, OnDestroy {
@Input() @Input()

View File

@@ -4,8 +4,9 @@ import { MapComponent } from '../map.component';
import { Units } from 'ol/control/ScaleLine'; import { Units } from 'ol/control/ScaleLine';
@Component({ @Component({
selector: 'aol-control-scaleline', selector: 'aol-control-scaleline',
template: ` <ng-content></ng-content> `, template: ` <ng-content></ng-content> `,
standalone: false
}) })
export class ControlScaleLineComponent implements OnInit, OnDestroy { export class ControlScaleLineComponent implements OnInit, OnDestroy {
@Input() @Input()

Some files were not shown because too many files have changed in this diff Show More