Angular v19

This commit is contained in:
2026-01-20 15:57:18 +01:00
parent e0c89f4358
commit 2eca9b2562
155 changed files with 9708 additions and 3068 deletions

View File

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

View File

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

View File

@@ -21,12 +21,13 @@ import { Geometry } from 'ol/geom';
import BaseLayer from 'ol/layer/Base';
import Feature from 'ol/Feature';
@Component({
selector: 'fm-map-item-layers',
template: `<ng-content></ng-content>`,
providers: [
{ provide: LayerGroupComponent, useExisting: forwardRef(() => ItemLayersComponent) }
]
@Component({
selector: 'fm-map-item-layers',
template: `<ng-content></ng-content>`,
providers: [
{ provide: LayerGroupComponent, useExisting: forwardRef(() => ItemLayersComponent) }
],
standalone: false
})
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 { formatNumber } from '@angular/common';
@Component({
selector: 'fm-map-item-source-vector',
template: `<ng-content></ng-content>`,
providers: [
{ provide: SourceVectorComponent, useExisting: forwardRef(() => ItemVectorSourceComponent) }
]
@Component({
selector: 'fm-map-item-source-vector',
template: `<ng-content></ng-content>`,
providers: [
{ provide: SourceVectorComponent, useExisting: forwardRef(() => ItemVectorSourceComponent) }
],
standalone: false
})
export class ItemVectorSourceComponent extends SourceVectorComponent implements OnInit, OnDestroy, OnChanges {
instance: Vector<Feature<Geometry>>;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -11,10 +11,11 @@ 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']
@Component({
selector: 'fm-map-feature-list-observation',
templateUrl: './feature-list-observation.component.html',
styleUrls: ['./feature-list-observation.component.scss'],
standalone: false
})
export class FeatureListObservationComponent extends AbstractFeatureListComponent implements OnInit {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -8,9 +8,10 @@ import { AbstractItemWidgetComponent } from '../item-list-item/item-list-item.co
@Injectable()
@Component({
selector: 'fm-map-item-widget-list',
templateUrl: './item-widget-list.component.html',
styleUrls: ['./item-widget-list.component.scss']
selector: 'fm-map-item-widget-list',
templateUrl: './item-widget-list.component.html',
styleUrls: ['./item-widget-list.component.scss'],
standalone: false
})
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 { filter, map, Observable } from 'rxjs';
@Component({
selector: 'fm-map-layer-switcher',
templateUrl: './layer-switcher.component.html',
styleUrls: ['./layer-switcher.component.scss']
@Component({
selector: 'fm-map-layer-switcher',
templateUrl: './layer-switcher.component.html',
styleUrls: ['./layer-switcher.component.scss'],
standalone: false
})
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';
@Component({
selector: 'fm-map-histogram-details',
templateUrl: './histogram-details.component.html',
styles: ['.nopadding{\n' +
' padding: 0 !important;\n' +
' margin: 0 !important;\n' +
'}']
selector: 'fm-map-histogram-details',
templateUrl: './histogram-details.component.html',
styles: ['.nopadding{\n' +
' padding: 0 !important;\n' +
' margin: 0 !important;\n' +
'}'],
standalone: false
})
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';
@Component({
selector: 'fm-map-layer-legend',
templateUrl: './legend.component.html',
styleUrls: ['./legend.component.scss']
@Component({
selector: 'fm-map-layer-legend',
templateUrl: './legend.component.html',
styleUrls: ['./legend.component.scss'],
standalone: false
})
export class LegendComponent implements OnInit,AfterViewInit {

View File

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

View File

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

View File

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

View File

@@ -9,9 +9,10 @@ export interface IMetaData {
attributes: any
}
@Component({
selector: 'fm-map-meta-data-modal',
templateUrl: 'meta-data-modal.component.html'
@Component({
selector: 'fm-map-meta-data-modal',
templateUrl: 'meta-data-modal.component.html',
standalone: false
})
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
? false : one.day > two.day : one.month > two.month : one.year > two.year;
@Component({
selector: 'fm-map-select-period-modal',
templateUrl: 'select-period-modal.component.html',
styleUrls: ['select-period-modal.component.scss']
@Component({
selector: 'fm-map-select-period-modal',
templateUrl: 'select-period-modal.component.html',
styleUrls: ['select-period-modal.component.scss'],
standalone: false
})
export class SelectPeriodModalComponent {

View File

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

View File

@@ -15,10 +15,11 @@ import { withLatestFrom,switchMap,combineLatest } from 'rxjs/operators';
@ForItemType("vnd.farmmaps.itemtype.cropfield")
@Injectable()
@Component({
selector: 'fm-map-selected-item-cropfield',
templateUrl: './selected-item-cropfield.component.html',
styleUrls: ['./selected-item-cropfield.component.scss']
@Component({
selector: 'fm-map-selected-item-cropfield',
templateUrl: './selected-item-cropfield.component.html',
styleUrls: ['./selected-item-cropfield.component.scss'],
standalone: false
})
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")
@Injectable()
@Component({
selector: 'fm-map-selected-item-geotiff',
templateUrl: './selected-item-geotiff.component.html',
styleUrls: ['./selected-item-geotiff.component.scss']
@Component({
selector: 'fm-map-selected-item-geotiff',
templateUrl: './selected-item-geotiff.component.html',
styleUrls: ['./selected-item-geotiff.component.scss'],
standalone: false
})
export class SelectedItemGeotiffComponent extends AbstractSelectedItemComponent implements OnDestroy {
sub: Subscription;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -2,9 +2,10 @@ import { Component, Input } from '@angular/core';
import { Layer } from 'ol/layer';
import { Source } from 'ol/source';
@Component({
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>'
@Component({
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>',
standalone: false
})
export class ZoomToShowAlert {
public layer$: Layer<Source>;