raain-app 3.2.3 → 3.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/esm2020/raain-configuration/raain-configuration.component.mjs +4 -2
- package/esm2020/raain-map/raain-map.component.mjs +4 -1
- package/fesm2015/raain-app.mjs +13 -8
- package/fesm2015/raain-app.mjs.map +1 -1
- package/fesm2020/raain-app.mjs +6 -1
- package/fesm2020/raain-app.mjs.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raain-app.mjs","sources":["../../src/core/shared/storage.service.ts","../../src/core/shared/raain-map/raain-map.component.ts","../../src/core/shared/raain-map/raain-map.component.html","../../src/core/shared/raain-compare/raain-compare.component.ts","../../src/core/shared/raain-compare/raain-compare.component.html","../../src/core/shared/xytype.ts","../../src/core/shared/raain-configuration/raain-configuration.component.ts","../../src/core/shared/raain-configuration/raain-configuration.component.html","../../src/core/shared/raain-date-focus/raain-date-focus.component.ts","../../src/core/shared/raain-date-focus/raain-date-focus.component.html","../../src/core/shared/raain-date-dynamic/raain-date-dynamic.component.ts","../../src/core/shared/raain-date-dynamic/raain-date-dynamic.component.html","../../src/core/shared/raain-speed/raain-speed.component.ts","../../src/core/shared/raain-speed/raain-speed.component.html","../../src/core/shared/raain-compare-stack/raain-compare-stack.component.ts","../../src/core/shared/raain-compare-stack/raain-compare-stack.component.html","../../src/core/shared/raain-globe/raain-globe.component.ts","../../src/core/shared/raain-globe/raain-globe.component.html","../../src/core/shared/tools/CompareManager.ts","../../src/core/shared/tools/FrameSet.ts","../../src/core/shared/tools/GaugeNodeFilter.ts","../../src/core/shared/tools/RefreshManager.ts","../../src/core/shared/tools/DateRangeTools.ts","../../src/core/shared/fidj-storage.model.ts","../../src/core/shared/profile.service.ts","../../src/core/shared/cumulative-selector/cumulative-selector.component.ts","../../src/core/shared/cumulative-selector/cumulative-selector.component.html","../../src/core/shared/raain-details/raain-details.component.ts","../../src/core/shared/raain-details/raain-details.component.html","../../src/core/shared/cache.service.ts","../../src/core/shared/radar.service.ts","../../src/core/shared/shared.const.ts","../../src/core/shared/shared.pipe.ts","../../src/core/shared/profile-icon.directive.ts","../../src/core/shared/pipes.module.ts","../../src/core/shared/shared.module.ts","../../src/core/shared/raain-app.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\nimport {LocalStorage} from 'fidj-angular';\n\n@Injectable()\nexport class Storage extends LocalStorage {\n constructor() {\n super('raain-app.');\n }\n}\n","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport {CartesianTools} from 'raain-model';\nimport {LatLngBounds} from 'leaflet';\nimport {\n CartesianMapValue,\n ChartScaleColors,\n ElementsFactory,\n FrameContainer,\n MapElement,\n MapLatLng,\n RaainDivIcon,\n ScaleElement,\n ScaleElementInput,\n TimeframeContainers,\n} from 'raain-ui';\nimport {Storage} from '../storage.service';\n\n@Component({\n selector: 'raain-map',\n templateUrl: './raain-map.component.html',\n styleUrls: ['./raain-map.component.scss'],\n})\nexport class RaainMapComponent implements AfterViewChecked, OnDestroy, OnChanges {\n @Input()\n public coordinates?: MapLatLng;\n @Input()\n public markers?: {\n gauges?: MapLatLng[];\n selectedGauges?: MapLatLng[];\n pixels?: MapLatLng[];\n borders?: MapLatLng[];\n speeds?: MapLatLng[];\n gaugesInCompare?: MapLatLng[];\n pixelsSolution?: MapLatLng[];\n };\n @Input()\n public timeframeContainers?: TimeframeContainers;\n @Input()\n public autoplay = false;\n @Input()\n public showMarkers = true;\n @Input()\n public showSpeedMarkers = true;\n @Input()\n public showVisiblePixelMarkers = false;\n @Input()\n public showNavigation = true;\n @Input()\n public showDateRange = true;\n @Input()\n public cumulativeDurationInMinutes = 60;\n @Input()\n public scaleLabel = 'mm';\n @Input()\n public currentHeight: number;\n\n public showMapSettings = false;\n public currentWidth: number;\n\n @Input()\n public timeframeDates: Date[] = [];\n @Input()\n public defaultDate?: Date;\n\n @Input()\n public sumValues?: CartesianMapValue[];\n @Input()\n public sumFn?: (cartesianMapValues: CartesianMapValue[]) => number;\n public sumResult: string;\n\n @Output()\n public selectedMarker = new EventEmitter<MapLatLng>();\n\n @Output()\n public changedDate = new EventEmitter<Date>();\n\n @Output()\n public changedSum = new EventEmitter<string>();\n\n public alpha: number;\n public mcText;\n public nextDate: Date;\n public possibleNames: string[];\n public possibleDates: Date[];\n public dateToShow: Date;\n public dateToShowAsString: string;\n public timeframeNameToShow: string;\n public pixelsCount: number;\n public cumulativeDateFrom: Date;\n protected currentFrameContainer: FrameContainer;\n protected cartesianTools: CartesianTools;\n @ViewChild('primaryMap')\n protected mapDivRef: ElementRef;\n @ViewChild('canvasScale')\n protected scaleCanvasRef: ElementRef;\n private visiblePixelMarkers: MapLatLng[] = [];\n private mapElement: MapElement;\n private scaleElement: ScaleElement;\n\n private onSizeChanged;\n private created;\n private readonly raainDivIcons: {\n gauges: RaainDivIcon;\n selectedGauges: RaainDivIcon;\n pixels: RaainDivIcon;\n borders: RaainDivIcon;\n speeds: RaainDivIcon;\n gaugesInCompare: RaainDivIcon;\n pixelsSolution: RaainDivIcon;\n };\n\n constructor(\n private readonly ngZone: NgZone,\n private readonly storage: Storage,\n private readonly cdr: ChangeDetectorRef\n ) {\n this.delete();\n\n this.cartesianTools = new CartesianTools();\n this.pixelsCount = 1;\n\n const iconSize: [number, number] = [40, 40]; // size of the icon\n const iconAnchor: [number, number] = [20, 20]; // point of the icon which will correspond to marker's location\n const pixelSize: [number, number] = [41, 41];\n const pixelAnchor: [number, number] = [20, 20];\n const popupAnchor: [number, number] = [0, -20]; // point from which the popup should open relative to the iconAnchor\n\n this.raainDivIcons = {\n gauges: new RaainDivIcon({\n html: '<img src=\"./assets/maps/marker-pluvio.png\" style=\"width: 100%; height: 100%;\" />',\n iconSize,\n iconAnchor,\n }),\n gaugesInCompare: new RaainDivIcon({\n html: '<img src=\"./assets/maps/marker-pluvio-diag.png\" style=\"width: 100%; height: 100%;\" />',\n iconSize,\n iconAnchor,\n popupAnchor,\n }),\n selectedGauges: new RaainDivIcon({\n html: '<img src=\"./assets/maps/marker-pluvio-diag-select.png\" style=\"width: 100%; height: 100%;\" />',\n iconSize,\n iconAnchor,\n popupAnchor,\n }),\n pixels: new RaainDivIcon({\n html: '<img src=\"./assets/maps/marker-rain.png\" style=\"width: 100%; height: 100%;\" />',\n iconSize,\n iconAnchor,\n popupAnchor,\n }),\n pixelsSolution: new RaainDivIcon({\n html: '<img src=\"./assets/maps/marker-rain.png\" style=\"width: 100%; height: 100%;\" />',\n iconSize: pixelSize,\n iconAnchor: pixelAnchor,\n popupAnchor,\n }),\n borders: new RaainDivIcon({\n html: '<img src=\"./assets/maps/marker-shadow.png\" style=\"width: 100%; height: 100%;\" />',\n iconSize,\n iconAnchor,\n popupAnchor,\n }),\n speeds: new RaainDivIcon({\n html: '<img src=\"./assets/maps/marker-speed.svg\" style=\"width: 100%; height: 100%;\" />',\n iconSize,\n iconAnchor,\n popupAnchor,\n }),\n };\n }\n\n public ngAfterViewChecked(): void {\n this.create();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.change(changes);\n }\n\n public ngOnDestroy(): void {\n this.delete();\n }\n\n public showTimeframe(force = false) {\n if (\n !this.dateToShowAsString ||\n (!force && this.areDatesEqual(this.dateToShowAsString, this.dateToShow))\n ) {\n return;\n }\n\n this.dateToShow = new Date(this.dateToShowAsString);\n this.changedDate.emit(this.dateToShow);\n }\n\n public next() {\n if (!this.possibleDates || this.possibleDates.length === 0) {\n return;\n }\n\n const index = this.getDateToShowIndex();\n this.dateToShow =\n index + 1 < this.possibleDates.length\n ? this.possibleDates[index + 1]\n : this.possibleDates[0];\n this.dateToShowAsString = this.dateToShow.toISOString();\n\n this.showTimeframe(true);\n if (this.autoplay) {\n window.setTimeout(() => this.next(), 2000);\n }\n }\n\n public previous() {\n this.stop();\n if (!this.possibleDates || this.possibleDates.length === 0) {\n return;\n }\n\n const index = this.getDateToShowIndex();\n this.dateToShow = index > 0 ? this.possibleDates[index - 1] : this.possibleDates[0];\n this.dateToShowAsString = this.dateToShow.toISOString();\n\n this.showTimeframe(true);\n }\n\n public play() {\n this.autoplay = true;\n this.next();\n }\n\n public stop() {\n this.autoplay = false;\n }\n\n public changeShowMarkers() {\n if (!this.mapElement?.markersLayer || !this.mapElement?.mapLeaflet) {\n return;\n }\n\n if (this.showMarkers) {\n this.mapElement.markersLayer.addToMap(this.mapElement.mapLeaflet);\n } else {\n this.mapElement.markersLayer.removeFromMap(this.mapElement.mapLeaflet);\n }\n }\n\n public changeShowSpeedMarkers() {\n if (!this.mapElement?.markersLayer || !this.mapElement?.mapLeaflet) {\n return;\n }\n\n // Rebuild markers with current visibility settings\n const {allMarkers} = this.buildMarkersConfig();\n const markersProduced = this.mapElement.updateMarkers(allMarkers);\n if (markersProduced?.length) {\n this.bindMarkersClickEvents(markersProduced);\n if (this.showMarkers) {\n this.mapElement.markersLayer.removeFromMap(this.mapElement.mapLeaflet);\n this.mapElement.markersLayer.addToMap(this.mapElement.mapLeaflet);\n }\n }\n }\n\n public changeAlpha() {\n this.storage.set('raain-map-alpha', this.alpha);\n if (!this.mapElement?.mapLeaflet) {\n return;\n }\n\n this.mapElement.alpha = 0.3 + this.alpha * 0.7;\n this.mapElement.mapLeaflet.eachLayer((layer: any) => {\n if (layer._container?.style) {\n layer._container.style.filter = `brightness(${(10 - this.alpha * 10) * 10}%)`; // invert(1) ?\n }\n });\n }\n\n public toggleMapSettings() {\n this.showMapSettings = !this.showMapSettings;\n }\n\n private create() {\n const created = this.created;\n if (created) {\n return;\n }\n this.created = true;\n\n const {allMarkers} = this.buildMarkersConfig();\n\n const factory = new ElementsFactory(this.coordinates, true);\n this.createScale(factory, this.scaleLabel);\n\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n const createdOutside = this.created;\n if (!createdOutside) {\n return;\n }\n\n this.mapElement = factory.createMap(this.mapDivRef.nativeElement, {\n timeframeContainers: this.timeframeContainers,\n markers: allMarkers,\n });\n\n this.changeAlpha();\n\n this.mapElement.mapLeaflet?.on('mousemove', (evt) => this.onMapMouseMove(evt));\n this.mapElement.mapLeaflet?.on('zoom', (evt) => this.onZoom(evt));\n this.mapElement.mapLeaflet?.on('moveend', (evt) => this.onMoveEnd(evt));\n const bounds: LatLngBounds = this.mapElement.mapLeaflet.getBounds();\n this.pixelsCount = this.cartesianTools.howManyPixelsInEarthMap(\n bounds._southWest,\n bounds._northEast\n );\n\n this.bindMarkersClickEvents(this.mapElement.markersProduced);\n this.onSizeChanged = () => this.updateLayerDimensions();\n this.updateMapSize();\n this.changeNavigation(this.defaultDate);\n }, 100);\n });\n }\n\n private delete() {\n this.mapElement?.mapLeaflet?.remove();\n this.mapElement = undefined;\n this.mcText = '';\n this.nextDate = undefined;\n this.possibleNames = [];\n this.possibleDates = [];\n this.timeframeNameToShow = undefined;\n this.dateToShow = undefined;\n this.dateToShowAsString = undefined;\n this.cumulativeDateFrom = undefined;\n this.onSizeChanged = () => {};\n this.currentFrameContainer = null;\n\n this.created = false;\n this.alpha = this.storage.get('raain-map-alpha', 0.4);\n }\n\n private change(changes: SimpleChanges) {\n let possibleNewDefaultDate: Date;\n\n if (changes.defaultDate) {\n if (\n this.areDatesEqual(\n changes.defaultDate.currentValue,\n changes.defaultDate.previousValue\n )\n ) {\n return;\n }\n possibleNewDefaultDate = this.defaultDate;\n }\n\n if (changes.markers && this.mapElement?.markersLayer) {\n const {allMarkers} = this.buildMarkersConfig();\n const markersProduced = this.mapElement.updateMarkers(allMarkers);\n if (markersProduced?.length) {\n this.bindMarkersClickEvents(markersProduced);\n if (this.showMarkers) {\n this.mapElement.markersLayer.removeFromMap(this.mapElement.mapLeaflet);\n this.mapElement.markersLayer.addToMap(this.mapElement.mapLeaflet);\n }\n }\n }\n\n if (\n changes.markers &&\n this.markers?.selectedGauges &&\n this.markers?.selectedGauges.length === 1\n ) {\n const selectedGauge = this.markers.selectedGauges[0];\n this.mapElement?.mapLeaflet?.setView(selectedGauge, 10);\n }\n\n if (this.mapElement && changes.timeframeContainers) {\n this.updateTimeframe();\n }\n\n if (this.mapElement?.compositeLayer && changes.sumValues) {\n this.updateSum();\n }\n\n if (this.mapElement?.compositeLayer && changes.showVisiblePixelMarkers) {\n const drawer = this.mapElement.compositeLayer.getFirstDrawer();\n this.updateVisiblePixelMarkers(drawer);\n }\n\n this.changeNavigation(possibleNewDefaultDate);\n }\n\n private updateSum() {\n if (!this.sumValues || !this.sumFn) {\n return;\n }\n\n const drawer = this.mapElement.compositeLayer.getFirstDrawer();\n const sumOfPixels: number = drawer?.getExecOfWindowPoints(this.sumValues, this.sumFn) ?? -1;\n\n if (sumOfPixels >= 0 && this.pixelsCount > 0) {\n const average = Math.round((sumOfPixels / this.pixelsCount) * 100) / 100;\n this.sumResult = `${Math.round(sumOfPixels)}mm (avg of ${average}mm for ${Math.round(this.pixelsCount)} pixels)`;\n } else {\n this.sumResult = 'NA';\n }\n this.changedSum.emit(this.sumResult);\n\n this.updateVisiblePixelMarkers(drawer);\n }\n\n private updateVisiblePixelMarkers(drawer: any) {\n if (!this.showVisiblePixelMarkers || !drawer || !this.sumValues) {\n if (this.visiblePixelMarkers.length > 0) {\n this.visiblePixelMarkers = [];\n this.refreshMarkersLayer();\n }\n return;\n }\n\n // Extract visible pixel positions\n const visiblePixels: MapLatLng[] =\n drawer.getExecOfWindowPoints(this.sumValues, (values: CartesianMapValue[]) =>\n values.map((v) => ({\n lat: (v.lat + v.lat2) / 2,\n lng: (v.lng + v.lng2) / 2,\n value: v.value,\n }))\n ) ?? [];\n\n this.visiblePixelMarkers = visiblePixels;\n this.refreshMarkersLayer();\n }\n\n private refreshMarkersLayer() {\n if (!this.mapElement?.markersLayer || !this.mapElement?.mapLeaflet) {\n return;\n }\n\n const {allMarkers} = this.buildMarkersConfig();\n const markersProduced = this.mapElement.updateMarkers(allMarkers);\n if (markersProduced?.length) {\n this.bindMarkersClickEvents(markersProduced);\n if (this.showMarkers) {\n this.mapElement.markersLayer.removeFromMap(this.mapElement.mapLeaflet);\n this.mapElement.markersLayer.addToMap(this.mapElement.mapLeaflet);\n }\n }\n }\n\n private changeNavigation(defaultDate?: Date) {\n // update possible names\n if (this.timeframeContainers?.containers?.length) {\n this.possibleNames = [];\n this.timeframeContainers.containers.forEach((c) => {\n if (this.possibleNames.indexOf(c.name) < 0) {\n this.possibleNames.push(c.name);\n }\n });\n this.timeframeNameToShow = this.possibleNames.length > 0 ? this.possibleNames[0] : null;\n }\n\n // update possible dates\n this.possibleDates = this.timeframeDates;\n if (!this.possibleDates || this.possibleDates.length === 0) {\n return;\n }\n\n // update dateToShow\n if (\n defaultDate &&\n this.possibleDates.filter((d) => this.areDatesEqual(d, defaultDate)).length === 1\n ) {\n this.dateToShow = defaultDate;\n }\n if (\n !this.dateToShow &&\n this.possibleDates.length > 0 &&\n this.possibleDates.filter((d) => this.areDatesEqual(d, this.dateToShow)).length !== 1\n ) {\n this.dateToShow = this.possibleDates[0];\n }\n\n let firstInit = false;\n if (!this.dateToShowAsString) {\n firstInit = true;\n }\n this.dateToShowAsString = this.dateToShow.toISOString();\n this.cumulativeDateFrom = new Date(this.dateToShow);\n\n const durationInMs = this.cumulativeDurationInMinutes * 60 * 1000;\n this.cumulativeDateFrom.setTime(this.cumulativeDateFrom.getTime() - durationInMs);\n\n if (firstInit) {\n this.showTimeframe(true);\n }\n }\n\n private getDateToShowIndex(): number {\n let index = 0;\n for (const date of this.possibleDates) {\n if (this.areDateISOEqual(this.dateToShowAsString, date)) {\n break;\n }\n index++;\n }\n return index;\n }\n\n private onZoom(evt: any) {\n const map = evt.target;\n const bounds: LatLngBounds = map.getBounds();\n this.pixelsCount = this.cartesianTools.howManyPixelsInEarthMap(\n bounds._southWest,\n bounds._northEast\n );\n this.updateSum();\n }\n\n private onMoveEnd(evt: any) {\n const map = evt.target;\n const bounds: LatLngBounds = map.getBounds();\n this.pixelsCount = this.cartesianTools.howManyPixelsInEarthMap(\n bounds._southWest,\n bounds._northEast\n );\n this.updateSum();\n }\n\n private handleAvailablePixels(\n availablePixels: {width: number; height: number; totalPixels: number},\n bounds: any,\n zoom: number\n ) {\n // Update your component properties or perform calculations\n this.currentWidth = availablePixels.width;\n this.currentHeight = availablePixels.height;\n\n // You can also calculate pixel density or other metrics here\n // const pixelDensity = this.calculatePixelDensity(bounds, availablePixels, zoom);\n // console.log('Pixel density:', pixelDensity);\n }\n\n private calculatePixelDensity(\n bounds: any,\n availablePixels: {width: number; height: number},\n zoom: number\n ) {\n // Calculate how many meters per pixel (approximate)\n const earthCircumference = 40075016.686; // meters\n const metersPerPixel =\n (earthCircumference * Math.cos((bounds.getCenter().lat * Math.PI) / 180)) /\n Math.pow(2, zoom + 8);\n\n return {\n metersPerPixel,\n pixelsPerMeter: 1 / metersPerPixel,\n totalVisibleArea: availablePixels.width * availablePixels.height,\n };\n }\n\n private onMapMouseMove(evt: {latlng: {lat: number; lng: number}}): void {\n const lat: string = evt.latlng.lat.toFixed(3);\n const lng: string = evt.latlng.lng.toFixed(3);\n\n let value = NaN;\n let valueLat = NaN,\n valueLng = NaN,\n valueLat2 = NaN,\n valueLng2 = NaN;\n if (this.currentFrameContainer) {\n const valueSelected = (this.currentFrameContainer.values as CartesianMapValue[]).filter(\n (v: CartesianMapValue) => {\n return (\n v.lat <= evt.latlng.lat &&\n evt.latlng.lat < v.lat2 &&\n v.lng <= evt.latlng.lng &&\n evt.latlng.lng < v.lng2\n );\n }\n );\n\n if (valueSelected.length === 1) {\n value = this.roundTo3Decimals(valueSelected[0].value);\n valueLat = this.roundTo3Decimals(valueSelected[0].lat);\n valueLng = this.roundTo3Decimals(valueSelected[0].lng);\n valueLat2 = this.roundTo3Decimals(valueSelected[0].lat2);\n valueLng2 = this.roundTo3Decimals(valueSelected[0].lng2);\n } else {\n // console.warn('valueSelected issue ?', valueSelected);\n }\n }\n\n this.ngZone.run(() => {\n // this.mcText = `Latitude: ${lat} Longitude: ${lng} \n // Value: [${valueLat} ${valueLng} | ${valueLat2} ${valueLng2}] ${value}`;\n this.mcText = `Latitude: ${lat} Longitude: ${lng} Value: ${value}`;\n this.cdr.markForCheck();\n });\n }\n\n private onMapClick(evt: any): void {\n if (!this.markers?.gauges?.length) {\n return;\n }\n\n let selectedGauge: MapLatLng;\n for (const gauge of this.markers.gauges) {\n if (gauge.id === evt?.target?.options?.alt) {\n selectedGauge = gauge;\n break;\n }\n }\n\n if (selectedGauge) {\n this.markers.selectedGauges = [selectedGauge];\n this.selectedMarker.emit(\n new MapLatLng(\n selectedGauge.lat,\n selectedGauge.lng,\n undefined,\n selectedGauge.id,\n selectedGauge.name,\n selectedGauge.value\n )\n );\n } else {\n this.selectedMarker.emit(\n new MapLatLng(evt.latlng?.lat, evt.latlng?.lng, undefined, evt.id, evt.name)\n );\n }\n\n this.change({markers: ['changed']} as any);\n }\n\n @HostListener('window:resize', ['$event'])\n private onResize(event: any): void {\n this.updateMapSize();\n }\n\n private updateMapSize(): void {\n const mapDivWidth = this.mapDivRef.nativeElement.parentNode?.parentNode['clientWidth'];\n const padding = 21;\n let currentWidth =\n mapDivWidth ||\n window.innerWidth ||\n document.documentElement.clientWidth ||\n document.body.clientWidth;\n const currentHeight =\n this.currentHeight ||\n window.innerHeight ||\n document.documentElement.clientHeight ||\n document.body.clientHeight;\n currentWidth -= padding;\n this.currentWidth = currentWidth;\n this.currentHeight = currentHeight;\n\n this.ngZone.run(() => {\n this.onSizeChanged();\n });\n }\n\n private updateTimeframe() {\n if (\n this.timeframeContainers?.containers?.length &&\n this.timeframeContainers?.containers[0]?.timeframe?.length\n ) {\n this.mapElement.updateMapTimeframe(this.timeframeContainers);\n this.currentFrameContainer = this.timeframeContainers?.containers[0]?.timeframe[0];\n }\n\n this.changeAlpha();\n }\n\n private createScale(factory: ElementsFactory, label: string) {\n this.deleteScale();\n if (!this.scaleCanvasRef?.nativeElement) {\n return;\n }\n\n const entries = Object.entries(ChartScaleColors);\n entries.sort((a, b) => parseFloat(a[0]) - parseFloat(b[0]));\n const sortedMap = new Map(entries);\n const sortedArray = [...sortedMap.entries()];\n const scaleColors = sortedArray.map((entry) => {\n return {color: entry[1]};\n });\n const scaleLabels = sortedArray.map((entry) => entry[0]);\n this.scaleElement = factory.createScale(\n this.scaleCanvasRef.nativeElement,\n new ScaleElementInput(scaleColors, scaleLabels, label)\n );\n }\n\n private deleteScale() {\n if (this.scaleElement) {\n this.scaleElement?.chart?.destroy();\n }\n }\n\n /**\n * Builds the markers configuration array for the map\n * @returns Array of marker configurations with icons and positions\n */\n private buildMarkersConfig() {\n const allMarkers: {iconsLatLng: MapLatLng[]; raainDivIcon: RaainDivIcon}[] = [\n {iconsLatLng: this.markers?.gauges ?? [], raainDivIcon: this.raainDivIcons.gauges},\n {\n iconsLatLng: this.markers?.selectedGauges ?? [],\n raainDivIcon: this.raainDivIcons.selectedGauges,\n },\n {\n iconsLatLng: this.markers?.gaugesInCompare ?? [],\n raainDivIcon: this.raainDivIcons.gaugesInCompare,\n },\n {iconsLatLng: this.markers?.pixels ?? [], raainDivIcon: this.raainDivIcons.pixels},\n {\n iconsLatLng: this.markers?.pixelsSolution ?? [],\n raainDivIcon: this.raainDivIcons.pixelsSolution,\n },\n // {iconsLatLng: this.markers?.borders, raainDivIcon: this.raainDivIcons.borders},\n ];\n\n if (this.showVisiblePixelMarkers && this.visiblePixelMarkers.length > 0) {\n allMarkers.push({\n iconsLatLng: this.visiblePixelMarkers,\n raainDivIcon: this.raainDivIcons.pixelsSolution,\n });\n }\n\n if (this.showSpeedMarkers) {\n for (const marker of this.markers?.speeds ?? []) {\n // Calculate dynamic size based on speed (marker.value is in m/s)\n // Base size: 20px, scale up with speed (typical range: 1-20 m/s)\n const speedInMetersPerSec = marker.value ?? 5;\n const minSize = 20;\n const maxSize = 60;\n const minSpeed = 1;\n const maxSpeed = 20;\n\n // Linear interpolation: size increases with speed\n const normalizedSpeed = Math.max(minSpeed, Math.min(maxSpeed, speedInMetersPerSec));\n const size =\n minSize +\n ((normalizedSpeed - minSpeed) / (maxSpeed - minSpeed)) * (maxSize - minSize);\n const iconSize = Math.round(size);\n\n allMarkers.push({\n iconsLatLng: [marker],\n raainDivIcon: new RaainDivIcon({\n html: this.raainDivIcons.speeds.options.html,\n width: iconSize,\n height: iconSize,\n iconAnchor: [iconSize / 2, iconSize / 2], // Center the icon\n popupAnchor: this.raainDivIcons.speeds.options.popupAnchor,\n rotationAngle: marker.alt, // Use alt property for azimuth/direction\n className: this.raainDivIcons.speeds.options.className,\n }),\n });\n }\n }\n return {allMarkers};\n }\n\n /**\n * Compare two dates for equality using their timestamps\n * @param date1 First date (Date or string)\n * @param date2 Second date (Date or string)\n * @returns true if dates are equal\n */\n private areDatesEqual(date1: Date | string, date2: Date | string): boolean {\n if (!date1 || !date2) {\n return false;\n }\n const timestamp1 = typeof date1 === 'string' ? new Date(date1).getTime() : date1.getTime();\n const timestamp2 = typeof date2 === 'string' ? new Date(date2).getTime() : date2.getTime();\n return timestamp1 === timestamp2;\n }\n\n /**\n * Compare an ISO date string with a Date object (comparing first 19 characters)\n * @param dateISO ISO date string\n * @param date Date object\n * @returns true if dates match (up to seconds precision)\n */\n private areDateISOEqual(dateISO: string, date: Date): boolean {\n if (!dateISO || !date) {\n return false;\n }\n return dateISO.substring(0, 19) === date.toISOString().substring(0, 19);\n }\n\n /**\n * Bind click event handlers to markers\n * @param markers Array of marker objects to bind events to\n */\n private bindMarkersClickEvents(markers: any[]): void {\n if (!markers) {\n return;\n }\n markers.forEach((m) => m.on('click', (evt) => this.onMapClick(evt)));\n }\n\n /**\n * Round a number to 3 decimal places\n * @param value Number to round\n * @returns Rounded number\n */\n private roundTo3Decimals(value: number): number {\n return Math.round(value * 1000) / 1000;\n }\n\n /**\n * Update layer dimensions and invalidate map size\n */\n private updateLayerDimensions(): void {\n if (!this.mapElement) {\n return;\n }\n this.mapElement.markersLayer?.setCurrentWidth(this.currentWidth);\n this.mapElement.markersLayer?.setCurrentHeight(this.currentHeight);\n this.mapElement.compositeLayer?.setCurrentWidth(this.currentWidth);\n this.mapElement.compositeLayer?.setCurrentHeight(this.currentHeight);\n this.mapElement.mapLeaflet?.invalidateSize({animate: true});\n }\n}\n","<ion-grid>\n\n <ion-row class=\"ion-align-items-center ion-justify-content-center\" id=\"map-nav-row\">\n <ion-icon (click)=\"previous()\" *ngIf=\"showNavigation\" class=\"nav-icon\" color=\"medium\"\n name=\"chevron-back-circle\"></ion-icon>\n\n <ion-label *ngIf=\"showDateRange\" class=\"period-bracket\">[</ion-label>\n\n <ion-label *ngIf=\"showDateRange && timeframeContainers?.containers?.length\" class=\"date-label\">\n {{ cumulativeDateFrom | date:'yyyy-MM-dd HH:mm' }}\n </ion-label>\n\n <ion-label *ngIf=\"showDateRange\"> </ion-label>\n\n <ion-select (ionDismiss)=\"showTimeframe()\" *ngIf=\"timeframeContainers?.containers?.length\"\n [(ngModel)]=\"dateToShowAsString\" interface=\"popover\"\n placeholder=\"Period\" value=\"{{dateToShowAsString}}\">\n <ion-select-option *ngFor=\"let dateToSelect of possibleDates\"\n value=\"{{dateToSelect.toISOString()}}\">\n {{ dateToSelect | date:'yyyy-MM-dd HH:mm' }}\n </ion-select-option>\n </ion-select>\n\n <ion-label *ngIf=\"showDateRange\" class=\"period-bracket\">[</ion-label>\n\n <ion-icon (click)=\"next()\" *ngIf=\"showNavigation\" class=\"nav-icon\" color=\"medium\"\n name=\"chevron-forward-circle\"></ion-icon>\n </ion-row>\n\n <ion-row>\n <ion-col size-lg=\"10\" size-xs=\"12\">\n <div [style.height.px]=\"currentHeight\" id=\"map-container\">\n <div #primaryMap id=\"map-div\"></div>\n </div>\n </ion-col>\n <ion-col class=\"ion-hide-xl-down\" size-lg=\"2\">\n <div [style.height.px]=\"currentHeight\" [style.width.px]=\"60\">\n <canvas #canvasScale></canvas>\n </div>\n </ion-col>\n </ion-row>\n\n <ion-row class=\"ion-align-items-center\">\n <ion-col size-xs=\"3\">\n <ion-button (click)=\"toggleMapSettings()\" color=\"medium\" fill=\"clear\" id=\"map-settings-toggle\">\n <ion-icon name=\"map-outline\" slot=\"start\"></ion-icon>\n <ion-icon [name]=\"showMapSettings ? 'chevron-down' : 'chevron-forward'\" slot=\"end\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-hide-sm-down\" size-sm=\"7\">\n <span [innerHTML]=\"mcText\"></span>\n </ion-col>\n\n </ion-row>\n\n <ion-row *ngIf=\"showMapSettings\" id=\"map-settings\">\n <ion-col size=\"12\">\n <ion-list lines=\"none\">\n <ion-item>\n <ion-label>Opacity</ion-label>\n <ion-range (ionChange)=\"changeAlpha()\" [(ngModel)]=\"alpha\" [max]=\"1\" [min]=\"0.2\" [snaps]=\"true\"\n [step]=\"0.2\" [ticks]=\"true\" class=\"settings-range\" color=\"medium\" slot=\"end\"></ion-range>\n </ion-item>\n <ion-item>\n <ion-label>Gauges</ion-label>\n <ion-toggle (ionChange)=\"changeShowMarkers()\" [(ngModel)]=\"showMarkers\" [checked]=\"showMarkers\"\n color=\"medium\" slot=\"end\"></ion-toggle>\n </ion-item>\n <ion-item>\n <ion-label>Speeds</ion-label>\n <ion-toggle (ionChange)=\"changeShowSpeedMarkers()\" [(ngModel)]=\"showSpeedMarkers\"\n [checked]=\"showSpeedMarkers\" color=\"medium\" slot=\"end\"></ion-toggle>\n </ion-item>\n </ion-list>\n </ion-col>\n </ion-row>\n\n</ion-grid>\n","import {\n AfterViewChecked,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport {CompareElement, CompareElementInput, ElementsFactory} from 'raain-ui';\nimport {XYType} from '../xytype';\n\n@Component({\n selector: 'raain-compare',\n templateUrl: './raain-compare.component.html',\n styleUrls: ['./raain-compare.component.scss'],\n})\nexport class RaainCompareComponent implements AfterViewChecked, OnDestroy, OnChanges {\n @Input()\n public points: Array<XYType>;\n\n @Input()\n public pointMax: XYType;\n\n @Input()\n public remarks: string;\n\n @Input()\n public compareIndex: number;\n\n @Input()\n public currentHeight: number;\n\n @Input()\n public currentWidth: number;\n\n @Output()\n public selectedPoint = new EventEmitter<{point: XYType; compareIndex: number}>();\n\n @ViewChild('canvasElement')\n protected canvasElement: ElementRef;\n\n private compareElement: CompareElement;\n private onSizeChanged;\n private created;\n\n constructor(private ngZone: NgZone) {\n this.onSizeChanged = () => {};\n }\n\n public ngAfterViewChecked(): void {\n this.create();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.change(changes);\n }\n\n public ngOnDestroy(): void {\n this.delete();\n }\n\n protected onClick(point: XYType): void {\n this.selectedPoint.emit({point, compareIndex: this.compareIndex});\n }\n\n protected changeData(newData: XYType[], newMaxLine?: XYType[]) {\n let changed = false;\n const dataset = this.compareElement?.chart?.data?.datasets[0];\n if (dataset) {\n dataset.data = newData;\n changed = true;\n }\n\n const line = this.compareElement?.chart?.data?.datasets[1];\n if (line) {\n line.data = newMaxLine;\n changed = true;\n }\n\n if (changed) {\n this.compareElement?.chart?.update();\n }\n }\n\n @HostListener('window:resize', ['$event'])\n private onResize(event: any): void {\n this.updateMapSize();\n }\n\n private create() {\n if (this.created) {\n return;\n }\n this.created = true;\n\n const factory = new ElementsFactory();\n this.compareElement = factory.createCompare(\n this.canvasElement.nativeElement,\n new CompareElementInput(\n this.points.map((p) => {\n return {x: p.x, y: p.y, r: p.r, name: p.name, id: p.id};\n }),\n this.pointMax,\n this.onClick.bind(this)\n )\n );\n }\n\n private delete() {\n if (this.compareElement) {\n this.compareElement?.chart?.destroy();\n }\n this.created = false;\n }\n\n private change(changes: SimpleChanges) {\n if (changes.points) {\n this.changeData(this.points, [{x: 0, y: 0}, this.pointMax]);\n }\n }\n\n private updateMapSize(): void {\n const mapDivWidth = this.canvasElement.nativeElement.parentNode?.parentNode['clientWidth'];\n const padding = 20;\n let currentWidth =\n mapDivWidth ||\n window.innerWidth ||\n document.documentElement.clientWidth ||\n document.body.clientWidth;\n const currentHeight =\n this.currentHeight ||\n window.innerHeight ||\n document.documentElement.clientHeight ||\n document.body.clientHeight;\n currentWidth -= padding;\n this.currentWidth = currentWidth;\n this.currentHeight = currentHeight;\n\n this.ngZone.run(() => {\n this.onSizeChanged();\n });\n }\n}\n","<div id=\"canvas-container\">\n <h1 *ngIf=\"remarks\">{{ remarks }}</h1>\n\n <!-- [style.height.px]=\"currentHeight\" [style.width.px]=\"currentWidth\" [width]=\"currentWidth\" [height]=\"currentHeight\"-->\n <canvas #canvasElement></canvas>\n</div>\n","export class XYType {\n constructor(\n public x: number,\n public y: number,\n public r?: number,\n public name?: string,\n public id?: string\n ) {}\n}\n","import {\n AfterViewChecked,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport {\n ChartScaleColors,\n ConfigurationElement,\n ConfigurationElementInput,\n ElementsFactory,\n Tools,\n} from 'raain-ui';\nimport {XYType} from '../xytype';\n\n@Component({\n selector: 'raain-configuration',\n templateUrl: './raain-configuration.component.html',\n styleUrls: ['./raain-configuration.component.scss'],\n})\nexport class RaainConfigurationComponent implements AfterViewChecked, OnDestroy, OnChanges {\n @Input()\n public points: XYType[];\n\n @Output()\n public changedPoints = new EventEmitter<XYType[]>();\n\n @Input()\n public currentHeight: number;\n\n @Input()\n public currentWidth: number;\n\n @Input()\n public minPoint: XYType = {x: 0, y: 0};\n\n @Input()\n public maxPoint: XYType = {x: 300, y: 100};\n\n @Input()\n public logStyle = false;\n\n @Input()\n public readonly = false;\n\n @ViewChild('canvasElement')\n protected canvasElement: ElementRef;\n\n private configurationElement: ConfigurationElement;\n private onDrag;\n private onSizeChanged;\n private created;\n private createTimer: any = null;\n\n constructor(private ngZone: NgZone) {\n this.onSizeChanged = () => {};\n this.onDrag = (e: any) => {\n if (this.readonly) {\n return false;\n }\n this.changedPoints.emit(this.points);\n };\n }\n\n public ngAfterViewChecked(): void {\n this.create();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.change(changes);\n }\n\n public ngOnDestroy(): void {\n this.delete();\n }\n\n async reset(count = 4) {\n const points = [];\n for (let c = 0; c < count; c++) {\n points.push(new XYType((c + 1) * 10, (c + 1) * 0.1));\n }\n this.points = points;\n await this.delete();\n this.create();\n }\n\n @HostListener('window:resize', ['$event'])\n private onResize(event: any): void {\n // this.updateMapSize();\n }\n\n private create() {\n if (this.created) {\n return;\n }\n this.created = true;\n\n let inputs = new ConfigurationElementInput(\n this.points,\n this.minPoint,\n this.maxPoint,\n false,\n [],\n this.onDrag,\n this.readonly\n );\n if (this.logStyle) {\n const confTransparency = 0.3;\n inputs = new ConfigurationElementInput(\n this.points,\n this.minPoint,\n this.maxPoint,\n true,\n [\n {\n color: Tools.getTransparency(ChartScaleColors['0'], confTransparency),\n yStart: Math.log10(0.1),\n yEnd: Math.log10(0.4),\n },\n {\n color: Tools.getTransparency(ChartScaleColors['0.4'], confTransparency),\n yStart: Math.log10(0.4),\n yEnd: Math.log10(1),\n },\n {\n color: Tools.getTransparency(ChartScaleColors['1'], confTransparency),\n yStart: Math.log10(1),\n yEnd: Math.log10(3),\n },\n {\n color: Tools.getTransparency(ChartScaleColors['3'], confTransparency),\n yStart: Math.log10(3),\n yEnd: Math.log10(10),\n },\n {\n color: Tools.getTransparency(ChartScaleColors['10'], confTransparency),\n yStart: Math.log10(10),\n yEnd: Math.log10(20),\n },\n {\n color: Tools.getTransparency(ChartScaleColors['20'], confTransparency),\n yStart: Math.log10(20),\n yEnd: Math.log10(30),\n },\n {\n color: Tools.getTransparency(ChartScaleColors['30'], confTransparency),\n yStart: Math.log10(30),\n yEnd: Math.log10(50),\n },\n {\n color: Tools.getTransparency(ChartScaleColors['50'], confTransparency),\n yStart: Math.log10(50),\n yEnd: Math.log10(100),\n },\n {\n color: Tools.getTransparency(ChartScaleColors['100'], confTransparency),\n yStart: Math.log10(100),\n yEnd: Math.log10(150),\n },\n {\n color: Tools.getTransparency(ChartScaleColors['150'], confTransparency),\n yStart: Math.log10(150),\n yEnd: Math.log10(200),\n },\n {\n color: Tools.getTransparency(ChartScaleColors['200'], confTransparency),\n yStart: Math.log10(200),\n yEnd: Math.log10(250),\n },\n {\n color: Tools.getTransparency(ChartScaleColors['250'], confTransparency),\n yStart: Math.log10(250),\n yEnd: Math.log10(300),\n },\n {\n color: Tools.getTransparency(ChartScaleColors['300'], confTransparency),\n yStart: Math.log10(300),\n yEnd: Math.log10(500),\n },\n ],\n this.onDrag,\n this.readonly\n );\n }\n\n this.ngZone.runOutsideAngular(() => {\n this.createTimer = setTimeout(() => {\n this.createTimer = null;\n const factory = new ElementsFactory();\n this.configurationElement = factory.createConfiguration(\n this.canvasElement.nativeElement,\n inputs\n );\n }, 10);\n });\n }\n\n private async delete() {\n if (this.createTimer) {\n clearTimeout(this.createTimer);\n this.createTimer = null;\n }\n this.configurationElement?.chart?.destroy();\n this.created = false;\n }\n\n private async change(changes: SimpleChanges) {\n // Fast path: update chart data in-place when only points changed\n if (this.configurationElement?.chart && changes.points && Object.keys(changes).length === 1) {\n const chart = this.configurationElement.chart;\n chart.data.datasets.forEach((ds: any) => {\n ds.data = this.points;\n });\n chart.update('none');\n return;\n }\n await this.delete();\n this.create();\n }\n\n private updateMapSize(): void {\n const mapDivWidth = this.canvasElement.nativeElement.parentNode?.parentNode['clientWidth'];\n const padding = 20;\n let currentWidth =\n mapDivWidth ||\n window.innerWidth ||\n document.documentElement.clientWidth ||\n document.body.clientWidth;\n const currentHeight =\n this.currentHeight ||\n window.innerHeight ||\n document.documentElement.clientHeight ||\n document.body.clientHeight;\n currentWidth -= padding;\n this.currentWidth = currentWidth;\n this.currentHeight = currentHeight;\n\n this.ngZone.run(() => {\n this.onSizeChanged();\n });\n }\n}\n","<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\" size-xs=\"10\">\n <div [style.height.px]=\"currentHeight\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n </ion-col>\n <ion-col size-xs=\"2\">\n <ion-button (click)=\"reset(2)\" color=\"light\" shape=\"round\" size=\"small\">2</ion-button>\n <br>\n <ion-button (click)=\"reset(4)\" color=\"light\" shape=\"round\" size=\"small\">4</ion-button>\n <br>\n <ion-button (click)=\"reset(6)\" color=\"light\" shape=\"round\" size=\"small\">6</ion-button>\n <br>\n </ion-col>\n </ion-row>\n</ion-grid>\n","import {\n AfterViewChecked,\n Component,\n ElementRef,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport {DateRange, DateStatusElement, DateStatusElementInput, ElementsFactory} from 'raain-ui';\n\n@Component({\n selector: 'raain-date-focus',\n templateUrl: './raain-date-focus.component.html',\n styleUrls: ['./raain-date-focus.component.scss'],\n})\nexport class RaainDateFocusComponent implements AfterViewChecked, OnDestroy, OnChanges {\n @Input()\n public points: {\n label: string;\n style: string;\n values: {date: Date; value: number}[];\n }[];\n\n @Input()\n public focusDate: Date;\n @Input()\n public focusRange: DateRange;\n @Input()\n public withoutAll: boolean;\n\n @Input()\n public currentHeight: number;\n public currentWidth: number;\n\n @ViewChild('canvasElement')\n protected canvasElement: ElementRef;\n\n private dateStatusElement: DateStatusElement;\n private onSizeChanged;\n private created: boolean;\n\n constructor(private ngZone: NgZone) {\n this.focusDate = new Date();\n this.focusRange = DateRange.CENTURY;\n this.onSizeChanged = () => {};\n }\n\n public ngAfterViewChecked(): void {\n this.create();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.change(changes);\n }\n\n public ngOnDestroy(): void {\n this.delete();\n }\n\n focusPrevious() {\n this.dateStatusElement.focusPrevious();\n }\n\n focusReset() {\n this.dateStatusElement.focusReset();\n }\n\n focusNext() {\n this.dateStatusElement.focusNext();\n }\n\n @HostListener('window:resize', ['$event'])\n private onResize(event: any): void {\n this.updateMapSize();\n }\n\n private create() {\n if (this.created) {\n return;\n }\n this.created = true;\n\n // this.ngZone.runOutsideAngular(() => {\n // setTimeout(() => {\n const factory = new ElementsFactory();\n try {\n this.dateStatusElement = factory.createDateStatus(\n this.canvasElement.nativeElement,\n new DateStatusElementInput(this.points, this.focusDate, this.focusRange)\n );\n } catch (e) {\n console.warn('Focus creation issue', e);\n }\n // }, 50);\n // });\n }\n\n private async delete() {\n await this.dateStatusElement?.chart?.destroy();\n this.created = false;\n }\n\n private async change(changes: SimpleChanges) {\n await this.delete();\n this.create();\n }\n\n private updateMapSize(): void {\n const mapDivWidth = this.canvasElement.nativeElement.parentNode?.parentNode['clientWidth'];\n const padding = 20;\n let currentWidth =\n mapDivWidth ||\n window.innerWidth ||\n document.documentElement.clientWidth ||\n document.body.clientWidth;\n const currentHeight =\n this.currentHeight ||\n window.innerHeight ||\n document.documentElement.clientHeight ||\n document.body.clientHeight;\n currentWidth -= padding;\n this.currentWidth = currentWidth;\n this.currentHeight = currentHeight;\n\n this.ngZone.run(() => {\n this.onSizeChanged();\n });\n }\n}\n","<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\" size-sm=\"12\">\n <div [style.height.px]=\"currentHeight\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col class=\"ion-text-right\" offset-sm=\"4\" size-sm=\"1\">\n <ion-button (click)=\"focusPrevious()\" color=\"medium\" fill=\"clear\">\n <ion-icon name=\"chevron-back-outline\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" size-sm=\"2\">\n <ion-button (click)=\"focusReset()\" *ngIf=\"!withoutAll\" color=\"medium\" fill=\"clear\">\n all dates\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" size-sm=\"1\">\n <ion-button (click)=\"focusNext()\" color=\"medium\" fill=\"clear\">\n <ion-icon name=\"chevron-forward-outline\"></ion-icon>\n </ion-button>\n </ion-col>\n </ion-row>\n</ion-grid>\n","import {\n AfterViewChecked,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport {\n DateRange,\n DynamicDateStatusElement,\n DynamicDateStatusElementInput,\n ElementsFactory,\n} from 'raain-ui';\n\n@Component({\n selector: 'raain-date-dynamic',\n templateUrl: './raain-date-dynamic.component.html',\n styleUrls: ['./raain-date-dynamic.component.scss'],\n})\nexport class RaainDateDynamicComponent implements AfterViewChecked, OnDestroy, OnChanges {\n @Input()\n public points: {\n label: string;\n style: string;\n values: {date: Date; value: number}[];\n }[];\n\n @Input()\n public focusDate: Date;\n @Input()\n public focusRange: DateRange;\n @Input()\n public withoutAll: boolean;\n @Input()\n public currentHeight: number;\n public currentWidth: number;\n @Input()\n public fetchData: (\n focusDate: Date,\n focusRange: DateRange\n ) => Promise<{label: string; style: string; values: {date: Date; value: number}[]}[]>;\n\n @Output()\n public changedDate = new EventEmitter<Date>();\n\n @ViewChild('canvasElement')\n protected canvasElement: ElementRef;\n private dynamicDateStatusElement: DynamicDateStatusElement;\n private onSizeChanged;\n private created: boolean;\n\n constructor(private ngZone: NgZone) {\n this.focusDate = new Date();\n this.focusRange = DateRange.CENTURY;\n this.onSizeChanged = () => {};\n }\n\n public ngAfterViewChecked(): void {\n this.create();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.change(changes);\n }\n\n public ngOnDestroy(): void {\n this.delete();\n }\n\n focusPrevious() {\n this.dynamicDateStatusElement.focusPrevious();\n }\n\n focusReset() {\n this.dynamicDateStatusElement.focusReset();\n }\n\n focusNext() {\n this.dynamicDateStatusElement.focusNext();\n }\n\n @HostListener('window:resize', ['$event'])\n private onResize(event: any): void {\n this.updateMapSize();\n }\n\n // Map style to a valid Chart.js chart type\n private mapStyleToChartType(style: string): string {\n // List of valid Chart.js chart types\n const validChartTypes = [\n 'line',\n 'bar',\n 'radar',\n 'doughnut',\n 'pie',\n 'polarArea',\n 'bubble',\n 'scatter',\n ];\n\n // If style is a valid chart type, return it, otherwise default to 'line'\n return validChartTypes.includes(style) ? style : 'line';\n }\n\n private async create() {\n if (this.created) {\n return;\n }\n this.created = true;\n\n const monthSampleData = await this.fetchData(new Date(), DateRange.MONTH);\n\n const factory = new ElementsFactory();\n try {\n this.dynamicDateStatusElement = factory.createDynamicDateStatus(\n this.canvasElement.nativeElement,\n new DynamicDateStatusElementInput(\n async (focusDate, focusRange) => {\n const data = await this.fetchData(focusDate, focusRange);\n return data.map((item) => ({\n ...item,\n style: this.mapStyleToChartType(item.style),\n }));\n },\n {\n dataLength: monthSampleData.length,\n chartMinValue: -10,\n chartMaxValue: 100,\n onLastClick: (date: Date) => {\n this.changedDate.emit(date);\n },\n }\n )\n );\n } catch (e) {\n console.warn('Dynamic focus creation issue', e);\n }\n }\n\n private async delete() {\n this.dynamicDateStatusElement?.chart?.destroy();\n this.created = false;\n }\n\n private async change(changes: SimpleChanges) {\n await this.delete();\n await this.create();\n }\n\n private updateMapSize(): void {\n const mapDivWidth = this.canvasElement.nativeElement.parentNode?.parentNode['clientWidth'];\n const padding = 20;\n let currentWidth =\n mapDivWidth ||\n window.innerWidth ||\n document.documentElement.clientWidth ||\n document.body.clientWidth;\n const currentHeight =\n this.currentHeight ||\n window.innerHeight ||\n document.documentElement.clientHeight ||\n document.body.clientHeight;\n currentWidth -= padding;\n this.currentWidth = currentWidth;\n this.currentHeight = currentHeight;\n\n this.ngZone.run(() => {\n this.onSizeChanged();\n });\n }\n}\n","<ion-grid id=\"raain-date-dynamic\">\n <ion-row>\n <ion-col id=\"col-container\" size-sm=\"12\">\n <div [style.height.px]=\"currentHeight\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col class=\"ion-text-right\" offset-sm=\"4\" size-sm=\"1\">\n <ion-button (click)=\"focusPrevious()\" color=\"medium\" fill=\"clear\">\n <ion-icon name=\"chevron-back-outline\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" size-sm=\"2\">\n <ion-button (click)=\"focusReset()\" *ngIf=\"!withoutAll\" color=\"medium\" fill=\"clear\">\n all dates\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" size-sm=\"1\">\n <ion-button (click)=\"focusNext()\" color=\"medium\" fill=\"clear\">\n <ion-icon name=\"chevron-forward-outline\"></ion-icon>\n </ion-button>\n </ion-col>\n </ion-row>\n</ion-grid>\n","import {\n AfterViewChecked,\n Component,\n ElementRef,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport {ElementsFactory, SpeedMatrixElementInput} from 'raain-ui';\nimport {PositionValue} from 'raain-model';\n\n@Component({\n selector: 'raain-speed',\n templateUrl: './raain-speed.component.html',\n styleUrls: ['./raain-speed.component.scss'],\n})\nexport class RaainSpeedComponent implements AfterViewChecked, OnDestroy, OnChanges {\n @Input()\n public compareSpeedMatrix: PositionValue[];\n\n @Input()\n public compareTrustedIndicator: number;\n\n @Input()\n public currentHeight: number;\n public currentWidth: number;\n public hide = false;\n @ViewChild('canvasSpeedElement')\n protected canvasSpeedElement: ElementRef;\n private onSizeChanged;\n private created;\n\n constructor(private ngZone: NgZone) {\n this.delete();\n this.onSizeChanged = () => {};\n }\n\n public ngAfterViewChecked(): void {\n this.create();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.change(changes);\n }\n\n public ngOnDestroy(): void {\n this.delete();\n }\n\n @HostListener('window:resize', ['$event'])\n private onResize(event: any): void {\n this.updateMapSize();\n }\n\n private create() {\n if (this.created || !this.compareSpeedMatrix?.length) {\n return;\n }\n this.created = true;\n\n // this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n const factory = new ElementsFactory();\n factory.createSpeedMatrixIndicator(\n this.canvasSpeedElement.nativeElement,\n new SpeedMatrixElementInput(this.compareSpeedMatrix, this.compareTrustedIndicator)\n );\n }, 10);\n // });\n }\n\n private delete() {\n this.created = false;\n this.hide = false;\n }\n\n private change(changes: SimpleChanges) {\n if (changes.compareSpeedMatrix) {\n if (!this.compareSpeedMatrix?.length) {\n this.hide = true;\n return;\n }\n }\n\n setTimeout(() => {\n this.delete();\n this.create();\n }, 10);\n }\n\n private updateMapSize(): void {\n const mapDivWidth =\n this.canvasSpeedElement.nativeElement.parentNode?.parentNode['clientWidth'];\n\n const currentWidth =\n mapDivWidth ||\n window.innerWidth ||\n document.documentElement.clientWidth ||\n document.body.clientWidth;\n const currentHeight =\n this.currentHeight ||\n window.innerHeight ||\n document.documentElement.clientHeight ||\n document.body.clientHeight;\n this.currentWidth = currentWidth;\n this.currentHeight = currentHeight;\n\n this.ngZone.run(() => {\n this.onSizeChanged();\n });\n }\n}\n","<div id=\"container\">\n <div id=\"canvas-speed-matrix\">\n <div [hidden]=\"hide\">\n <canvas #canvasSpeedElement id=\"indic1\"></canvas>\n </div>\n <div [hidden]=\"!hide\">\n <span id=\"hiddenSquare\"> </span>\n </div>\n <!-- <span>compareTrustedIndicator {{ compareTrustedIndicator }}</span> -->\n </div>\n</div>\n","import {Component, EventEmitter, Input, NgZone, Output} from '@angular/core';\nimport {XYType} from '../xytype';\nimport {CompareManager} from '../tools';\n\n@Component({\n selector: 'raain-compare-stack',\n templateUrl: './raain-compare-stack.component.html',\n styleUrls: ['./raain-compare-stack.component.scss'],\n})\nexport class RaainCompareStackComponent {\n @Input()\n public compareManager: CompareManager;\n\n @Input()\n public currentHeight: number;\n\n @Output()\n public selectedPoint = new EventEmitter<{point: XYType; compareIndex: number}>();\n\n @Input()\n public cumulative: boolean;\n\n constructor(private ngZone: NgZone) {}\n\n protected onClick(e: {point: XYType; compareIndex: number}): void {\n this.selectedPoint.emit({point: e.point, compareIndex: e.compareIndex});\n }\n\n exportCumulativeToCsv(): void {\n const points = this.compareManager.globalComparePoints;\n if (!points?.length) {\n return;\n }\n\n const dates = this.compareManager.compareDates;\n const dateRange =\n dates?.length > 0\n ? `${this.formatDate(dates[0])} - ${this.formatDate(dates[dates.length - 1])}`\n : '';\n\n const csvRows = ['dateRange,gaugeName,gaugeValue,pixelValue'];\n for (const point of points) {\n csvRows.push(`${dateRange},${point.name},${point.x},${point.y}`);\n }\n\n const csvContent = csvRows.join('\\n');\n this.downloadCsv(\n csvContent,\n `compare-cumulative-${this.formatDateForFilename(new Date())}.csv`\n );\n }\n\n exportGranularToCsv(): void {\n const allPoints = this.compareManager.getAllGranularComparePoints();\n if (!allPoints?.length) {\n return;\n }\n\n const csvRows = ['date,gaugeName,gaugeValue,pixelValue'];\n for (const point of allPoints) {\n const dateStr = this.formatDate(point.date);\n csvRows.push(`${dateStr},${point.gaugeName},${point.gaugeValue},${point.pixelValue}`);\n }\n\n const csvContent = csvRows.join('\\n');\n this.downloadCsv(\n csvContent,\n `compare-granular-${this.formatDateForFilename(new Date())}.csv`\n );\n }\n\n private downloadCsv(content: string, filename: string): void {\n const blob = new Blob([content], {type: 'text/csv;charset=utf-8;'});\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.setAttribute('href', url);\n link.setAttribute('download', filename);\n link.click();\n URL.revokeObjectURL(url);\n }\n\n private formatDate(date: Date): string {\n return date ? date.toISOString().slice(0, 16).replace('T', ' ') : '';\n }\n\n private formatDateForFilename(date: Date): string {\n return date.toISOString().slice(0, 10);\n }\n}\n","<div *ngIf=\"cumulative\">\n <ion-col size-md=\"6\" size-xs=\"12\">\n <ion-card class=\"card-compare\">\n <ion-card-header>Cumulative\n [{{ compareManager.compareDates[0] | date:'yyyy-MM-dd HH:mm' }}\n - {{ compareManager.compareDates[compareManager.compareDates.length - 1] | date:'yyyy-MM-dd HH:mm' }}[\n <span *ngIf=\"compareManager.globalQualityIndicator !== null\"\n [ngClass]=\"{\n 'quality-good': compareManager.globalQualityIndicator >= 0.5,\n 'quality-medium': compareManager.globalQualityIndicator < 0.5 && compareManager.globalQualityIndicator >= 0,\n 'quality-bad': compareManager.globalQualityIndicator < 0\n }\"\n class=\"quality-indicator\">\n Quality: {{ compareManager.globalQualityIndicator | number:'1.0-2' }}\n </span>\n </ion-card-header>\n <ion-card-content *ngIf=\"compareManager.globalComparePoints?.length\">\n <raain-compare\n (selectedPoint)=\"onClick($event)\"\n [compareIndex]=\"0\"\n [currentHeight]=\"500\"\n [pointMax]=\"compareManager.globalComparePointsMax\"\n [points]=\"compareManager.globalComparePoints\"></raain-compare>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <div class=\"ion-text-end\">\n <ion-button (click)=\"exportCumulativeToCsv()\" *ngIf=\"compareManager.globalComparePoints?.length\" fill=\"clear\"\n size=\"small\">\n <ion-icon name=\"download-outline\" slot=\"start\"></ion-icon>\n Export CSV\n </ion-button>\n </div>\n</div>\n\n<div *ngIf=\"!cumulative\">\n <ion-col *ngFor=\"let compare of compareManager?.uiCompares; index as compareIndex\" size-md=\"6\" size-xs=\"12\">\n <ion-card class=\"card-compare\">\n <ion-card-header>Gauges filled {{ compare.name }} {{ compare.remarks }}\n <span *ngIf=\"compare.qualityIndicator !== null\"\n [ngClass]=\"{\n 'quality-good': compare.qualityIndicator >= 0.5,\n 'quality-medium': compare.qualityIndicator < 0.5 && compare.qualityIndicator >= 0,\n 'quality-bad': compare.qualityIndicator < 0\n }\"\n class=\"quality-indicator\">\n Quality: {{ compare.qualityIndicator | number:'1.0-2' }}\n </span>\n </ion-card-header>\n <ion-card-content *ngIf=\"compare.comparePoints?.length\">\n <raain-compare\n (selectedPoint)=\"onClick($event)\"\n [compareIndex]=\"compareIndex\"\n [currentHeight]=\"500\"\n [pointMax]=\"compare.comparePointsMax\"\n [points]=\"compare.comparePoints\"></raain-compare>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <div class=\"ion-text-end\">\n <ion-button (click)=\"exportGranularToCsv()\" *ngIf=\"compareManager.uiCompares?.length\" fill=\"clear\" size=\"small\">\n <ion-icon name=\"download-outline\" slot=\"start\"></ion-icon>\n Export CSV\n </ion-button>\n </div>\n\n <!-- Cumulative summary of all granular comparisons -->\n <ion-col *ngIf=\"compareManager.granularCumulativePoints?.length\" size-md=\"6\" size-xs=\"12\">\n <ion-card class=\"card-compare card-compare-cumulative\">\n <ion-card-header>Cumulative Summary\n [{{ compareManager.compareDates[0] | date:'yyyy-MM-dd HH:mm' }}\n - {{ compareManager.compareDates[compareManager.compareDates.length - 1] | date:'yyyy-MM-dd HH:mm' }}[\n <span *ngIf=\"compareManager.granularCumulativeQualityIndicator !== null\"\n [ngClass]=\"{\n 'quality-good': compareManager.granularCumulativeQualityIndicator >= 0.5,\n 'quality-medium': compareManager.granularCumulativeQualityIndicator < 0.5 && compareManager.granularCumulativeQualityIndicator >= 0,\n 'quality-bad': compareManager.granularCumulativeQualityIndicator < 0\n }\"\n class=\"quality-indicator\">\n Quality: {{ compareManager.granularCumulativeQualityIndicator | number:'1.0-2' }}\n </span>\n </ion-card-header>\n <ion-card-content>\n <raain-compare\n (selectedPoint)=\"onClick($event)\"\n [compareIndex]=\"-1\"\n [currentHeight]=\"500\"\n [pointMax]=\"compareManager.granularCumulativePointsMax\"\n [points]=\"compareManager.granularCumulativePoints\"></raain-compare>\n </ion-card-content>\n </ion-card>\n </ion-col>\n</div>\n","import {\n AfterViewChecked,\n Component,\n ElementRef,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport {EarthMapElement, EarthMapElementInput, ElementsFactory} from 'raain-ui';\n\n@Component({\n selector: 'raain-globe',\n templateUrl: './raain-globe.component.html',\n styleUrls: ['./raain-globe.component.scss'],\n})\nexport class RaainGlobeComponent implements AfterViewChecked, OnDestroy, OnChanges {\n @Input()\n public points: {\n label: string;\n style: string;\n values: {date: Date; value: number}[];\n }[];\n\n @Input()\n public currentHeight: number;\n public currentWidth: number;\n\n @ViewChild('canvasElement')\n protected canvasElement: ElementRef;\n\n private earthMapElement: EarthMapElement;\n private onSizeChanged;\n private created: boolean;\n\n constructor(private ngZone: NgZone) {\n this.onSizeChanged = () => {};\n }\n\n public ngAfterViewChecked(): void {\n this.create();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.change(changes);\n }\n\n public ngOnDestroy(): void {\n this.delete();\n }\n\n @HostListener('window:resize', ['$event'])\n private onResize(event: any): void {\n this.updateMapSize();\n }\n\n private create() {\n if (this.created) {\n return;\n }\n this.created = true;\n\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n const factory = new ElementsFactory();\n try {\n this.earthMapElement = factory.createEarthMap(\n this.canvasElement.nativeElement,\n new EarthMapElementInput()\n );\n } catch (e) {\n console.warn('Dynamic focus creation issue', e);\n }\n }, 100);\n });\n }\n\n private async delete() {\n // await this.earthMapElement?.destroy();\n this.created = false;\n }\n\n private async change(changes: SimpleChanges) {\n await this.delete();\n this.create();\n }\n\n private updateMapSize(): void {\n const mapDivWidth = this.canvasElement.nativeElement.parentNode?.parentNode['clientWidth'];\n const padding = 20;\n let currentWidth =\n mapDivWidth ||\n window.innerWidth ||\n document.documentElement.clientWidth ||\n document.body.clientWidth;\n const currentHeight =\n this.currentHeight ||\n window.innerHeight ||\n document.documentElement.clientHeight ||\n document.body.clientHeight;\n currentWidth -= padding;\n this.currentWidth = currentWidth;\n this.currentHeight = currentHeight;\n\n this.ngZone.run(() => {\n this.onSizeChanged();\n });\n }\n}\n","<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\" size-sm=\"12\">\n <div #canvasElement [style.height.px]=\"currentHeight\" id=\"canvas-container\">\n </div>\n </ion-col>\n </ion-row>\n</ion-grid>\n","import {MapLatLng} from 'raain-ui';\nimport {\n GaugeNode,\n IComparePerDate,\n ICompares,\n PositionValue,\n QualityPoint,\n RainComputationQuality,\n RainNode,\n SpeedMatrix,\n SpeedMatrixContainer,\n} from 'raain-model';\nimport {XYType} from '../xytype';\nimport {ProfileService} from '../profile.service';\nimport {FrameSet} from './FrameSet';\n\nexport interface ICompareTarget {\n date: Date;\n rainComputationId?: string;\n rainComputationCumulativeId?: string;\n}\n\nexport interface IUICompare {\n date: Date;\n name: string;\n comparePoints: XYType[];\n comparePointsMax: XYType;\n comparePointsHistory: QualityPoint[];\n remarks: string;\n qualityIndicator: number;\n}\n\nexport class CompareManager {\n public gaugesInMap: MapLatLng[];\n public gaugesInCompare: MapLatLng[];\n public selectedGauges: MapLatLng[];\n public selectedPixels: MapLatLng[];\n public pixelsSolutions: MapLatLng[][];\n public speeds: MapLatLng[];\n\n // from comparesTimeline\n public compareNames: string[];\n public uiCompares: IUICompare[];\n public compareSpeedMatrix: PositionValue[];\n public compareVersion: string;\n public compareTrustedIndicator: number;\n public compareDates: Date[];\n\n public currentQualityDoneDate: Date;\n public currentQualityLaunchedBy: string;\n public currentQualityTimeSpentInMs: number;\n public globalComparePoints: XYType[];\n public globalComparePointsMax: XYType;\n public globalQualityIndicator: number;\n public compareSpeed: {angleInDegrees: number; pixelsPerPeriod: number};\n protected buildCompares: ICompares;\n protected selectedGauge: QualityPoint;\n protected selectedGaugeInPoints: QualityPoint;\n protected selectedGaugeInPointsDetail: string;\n protected rainComputationQualitiesPerDate: any;\n\n constructor(\n protected profileService: ProfileService,\n public onChanges: () => void = () => {}\n ) {\n this.cleanAll();\n }\n\n // Merged cumulative from granular comparisons (computed from buildCompares)\n public get granularCumulativePoints(): XYType[] {\n if (!this.buildCompares?.compareCumulative?.qualityPoints?.length) {\n return [];\n }\n return this.buildCompares.compareCumulative.qualityPoints.map(\n (qp) => new XYType(qp.getGaugeValue(), qp.getRainValue(), 2, qp.gaugeLabel, qp.gaugeId)\n );\n }\n\n public get granularCumulativePointsMax(): XYType {\n if (!this.buildCompares?.compareCumulative) {\n return new XYType(0, 0);\n }\n const maxValue = Math.max(this.buildCompares.compareCumulative.maxValue * 1.2, 1);\n return new XYType(maxValue, maxValue);\n }\n\n // Default: KGE normalized 0-1 (from raain-model defaults)\n public get granularCumulativeQualityIndicator(): number {\n if (!this.buildCompares?.compareCumulative?.qualityPoints?.length) {\n return null;\n }\n return SpeedMatrix.ComputeQualityIndicator(\n this.buildCompares.compareCumulative.qualityPoints\n );\n }\n\n protected _rainNode: RainNode;\n\n public get rainNode(): RainNode {\n return this._rainNode;\n }\n\n public set rainNode(rainNode: RainNode) {\n this._rainNode = rainNode;\n this.cleanAll();\n }\n\n public cleanAll() {\n this.gaugesInMap = [];\n this.gaugesInCompare = [];\n this.selectedGauges = [];\n this.selectedPixels = [];\n this.pixelsSolutions = [];\n this.compareDates = [];\n this.speeds = [];\n\n this.buildCompares = {\n comparesPerDate: [],\n compareCumulative: null,\n };\n this.globalComparePoints = [];\n this.globalComparePointsMax = new XYType(0, 0);\n this.globalQualityIndicator = null;\n // granularCumulative* are now getters computed from buildCompares\n this.rainComputationQualitiesPerDate = {};\n\n this.selectedGauge = null;\n this.selectedGaugeInPoints = null;\n this.cleanCompareQuality('no compare yet');\n }\n\n async refreshCompareQuality(frameSet: FrameSet, onlyOne: boolean) {\n const comparePerDate = this.getComparePerDate(frameSet.date);\n\n if (\n !comparePerDate ||\n !comparePerDate.rainComputationQuality?.qualitySpeedMatrixContainer\n ) {\n // this.cleanCompareQuality(\n // 'no current quality ' + Object.keys(this.rainComputationQualitiesPerDate)\n // );\n // this.onChanges();\n return;\n }\n\n if (onlyOne) {\n comparePerDate.compareTimeline = comparePerDate.compareTimeline.filter(\n (c) => c.date.getTime() === frameSet.date.getTime()\n );\n }\n\n const uiCompares: IUICompare[] = comparePerDate.compareTimeline\n .map((c) => {\n // Default: KGE normalized 0-1\n const qualityIndicator = SpeedMatrix.ComputeQualityIndicator(c.qualityPoints);\n return {\n date: c.date,\n name: c.name,\n comparePoints: c.qualityPoints.map(\n (p) =>\n new XYType(\n p.getGaugeValue(),\n p.getRainValue(),\n 2,\n p.gaugeLabel,\n p.gaugeId\n )\n ),\n comparePointsMax: new XYType(\n Math.max(c.maxValue * 1.2, 1),\n Math.max(c.maxValue * 1.2, 1)\n ),\n comparePointsHistory: c.qualityPointsLegacy,\n remarks: c.remarks,\n qualityIndicator,\n };\n })\n .sort((a, b) => a.date?.getTime() - b.date?.getTime());\n\n this.currentQualityDoneDate = comparePerDate.rainComputationQuality.isDoneDate;\n this.currentQualityTimeSpentInMs = comparePerDate.rainComputationQuality.timeSpentInMs;\n this.currentQualityLaunchedBy = comparePerDate.rainComputationQuality.launchedBy;\n this.compareVersion = comparePerDate.rainComputationQuality.getVersion();\n\n this.compareSpeed =\n comparePerDate.rainComputationQuality.qualitySpeedMatrixContainer.getSpeed();\n this.compareNames = uiCompares.map((c) => c.name);\n this.uiCompares = uiCompares;\n\n this.onChanges();\n }\n\n async refreshGlobalCompareQuality(\n targetsOrdered: ICompareTarget[],\n period: {begin: Date; end: Date},\n withCompareDuplicate: boolean,\n provider: string = 'Raain',\n timeStepInMinutes: number = 5,\n timeStepMode: 'eq' | 'lte' = 'eq'\n ) {\n try {\n await this.fetchRainComputationQualities(\n targetsOrdered,\n provider,\n timeStepInMinutes,\n timeStepMode\n );\n\n await this.buildComparesTimeline(targetsOrdered, period, withCompareDuplicate);\n\n if (!this.buildCompares.compareCumulative) {\n // throw Error('needs cumulative compare');\n return;\n }\n\n const countForAverage = targetsOrdered.length;\n const maxValue = Math.max(this.buildCompares.compareCumulative.maxValue * 1.2, 1);\n const cumulativePoints = this.buildCompares.compareCumulative.qualityPoints.map(\n (qp) =>\n new XYType(qp.getGaugeValue(), qp.getRainValue(), 2, qp.gaugeLabel, qp.gaugeId)\n );\n const cumulativePointsMax = new XYType(maxValue, maxValue);\n // Default: KGE normalized 0-1\n const cumulativeQualityIndicator = SpeedMatrix.ComputeQualityIndicator(\n this.buildCompares.compareCumulative.qualityPoints\n );\n\n // Set for cumulative mode\n this.globalComparePoints = cumulativePoints;\n this.globalComparePointsMax = cumulativePointsMax;\n this.globalQualityIndicator = cumulativeQualityIndicator;\n // granularCumulative* are now getters computed from buildCompares.compareCumulative\n } catch (e) {\n console.warn(e);\n }\n }\n\n async setGaugesInMap() {\n // Get all gauge IDs linked to this rainNode\n const rainNodeGaugeIds = this.rainNode.getLinks(GaugeNode.TYPE).map((l) => l.getId());\n\n // Fetch gauges from API (may be filtered/limited)\n let gaugesToFilter = await this.profileService.getGauges(\n this.rainNode?.id,\n this.rainNode.getCenter()\n );\n gaugesToFilter = gaugesToFilter\n .sort((a, b) => {\n return (\n a.approxDistanceFrom(this.rainNode.getCenter()) -\n b.approxDistanceFrom(this.rainNode.getCenter())\n );\n })\n .filter((v, index) => index < 200);\n\n // Build a map of gauges from API response\n const gaugesFromApi = new Map<\n string,\n {id: string; latitude: number; longitude: number; name: string}\n >();\n for (const gauge of gaugesToFilter) {\n gaugesFromApi.set(gauge.id, gauge);\n }\n\n // Fetch missing gauges individually (those linked but not in API response)\n const missingGaugeIds = rainNodeGaugeIds.filter((id) => !gaugesFromApi.has(id));\n for (const gaugeId of missingGaugeIds) {\n try {\n const gauge = await this.profileService.getGauge(gaugeId);\n if (gauge) {\n gaugesFromApi.set(gauge.id, gauge);\n }\n } catch (e) {\n console.warn(`Failed to fetch gauge ${gaugeId}:`, e);\n }\n }\n\n // Filter to only gauges linked to this rainNode\n const visibleGauges = rainNodeGaugeIds\n .map((id) => gaugesFromApi.get(id))\n .filter((g) => !!g);\n console.log('visibleGauges:', visibleGauges.length, '/', rainNodeGaugeIds.length);\n\n const gaugesLatLng: MapLatLng[] = [];\n for (const gauge of visibleGauges) {\n gaugesLatLng.push(\n new MapLatLng(gauge.latitude, gauge.longitude, undefined, gauge.id, gauge.name)\n );\n }\n this.gaugesInMap = gaugesLatLng;\n }\n\n async setGaugesInCompare() {\n const qualityPoints: QualityPoint[] = [];\n for (const compare of this.uiCompares) {\n for (const qualityPoint of compare.comparePointsHistory) {\n const alreadyAdded = qualityPoints.filter(\n (p) => p?.gaugeId === qualityPoint.gaugeId\n );\n if (alreadyAdded.length === 0) {\n qualityPoints.push(qualityPoint);\n }\n }\n }\n\n this.gaugesInCompare = qualityPoints.map((p) => {\n return new MapLatLng(\n p.gaugeCartesianValue.lat,\n p.gaugeCartesianValue.lng,\n 0,\n p.gaugeId,\n p.gaugeLabel + '>' + p.getGaugeValue(),\n p.getGaugeValue()\n );\n });\n\n this.resetSelectedGauges();\n }\n\n async selectGauge(gaugeId: string, compareIndex: number) {\n if (gaugeId) {\n const xys = this.getCurrentQualityPoints(compareIndex).filter(\n (p) => p.gaugeId === gaugeId\n );\n this.selectedGauge = xys.length === 1 ? xys[0] : null;\n } else {\n this.selectedGauge = null;\n }\n\n if (!this.selectedGauge) {\n this.resetSelectedGauges();\n const gaugesFiltered = this.gaugesInMap.filter((g) => g.id === gaugeId);\n if (gaugesFiltered.length === 1) {\n this.selectedGauges = [gaugesFiltered[0]];\n }\n return;\n }\n\n const selectedGaugeInPoints = this.getCurrentQualityPoints(compareIndex).filter(\n (p) => p.gaugeId === this.selectedGauge.gaugeId\n );\n let pixelsSolutions: MapLatLng[][] = [];\n\n if (selectedGaugeInPoints.length === 1) {\n const remarks = JSON.parse(selectedGaugeInPoints[0].remark).sort(\n (a, b) => a.criteriaAttemptedToBeMinimum - b.criteriaAttemptedToBeMinimum\n );\n console.log(remarks);\n pixelsSolutions = remarks.map((remark) =>\n remark.solutionForGauge.pixels.map(\n (p) =>\n new MapLatLng(\n p.y + 0.005,\n p.x + 0.01,\n 0,\n '' + !remark.notPossible,\n '' + !remark.notPossible,\n 1\n )\n )\n );\n\n const timeDeltaInMinutes = selectedGaugeInPoints[0].getTimeDeltaInMinutes();\n this.selectedGaugeInPointsDetail =\n '' +\n selectedGaugeInPoints[0].gaugeLabel +\n ' > ' +\n Math.round(selectedGaugeInPoints[0].getGaugeValue() * 100) / 100 +\n ' / ' +\n Math.round(selectedGaugeInPoints[0].getRainValue() * 100) / 100 +\n ' dT=' +\n timeDeltaInMinutes;\n\n this.selectedGaugeInPoints = selectedGaugeInPoints[0];\n } else {\n this.selectedGaugeInPoints = null;\n this.selectedGauges = [];\n this.selectedPixels = [];\n this.pixelsSolutions = [];\n return;\n }\n\n this.selectedGauges = [\n new MapLatLng(\n this.selectedGaugeInPoints.gaugeCartesianValue.lat,\n this.selectedGaugeInPoints.gaugeCartesianValue.lng,\n undefined,\n this.selectedGaugeInPoints.gaugeId,\n this.selectedGaugeInPoints.gaugeLabel +\n '>' +\n this.selectedGaugeInPoints.gaugeCartesianValue.value,\n this.selectedGaugeInPoints.gaugeCartesianValue.value\n ),\n ];\n\n this.selectGaugeInCompare();\n\n const pixels: MapLatLng[] = [];\n for (const rainCartesianValue of this.selectedGaugeInPoints.rainCartesianValues) {\n pixels.push(\n new MapLatLng(rainCartesianValue.lat + 0.005, rainCartesianValue.lng + 0.01)\n );\n }\n this.selectedPixels = pixels;\n\n this.pixelsSolutions = pixelsSolutions;\n }\n\n // Returns all granular quality points across all dates in the period (excludes cumulative end date)\n getAllGranularComparePoints(): {\n date: Date;\n gaugeName: string;\n gaugeValue: number;\n pixelValue: number;\n }[] {\n const result: {date: Date; gaugeName: string; gaugeValue: number; pixelValue: number}[] =\n [];\n\n if (!this.buildCompares?.comparesPerDate?.length || !this.compareDates?.length) {\n return result;\n }\n\n // Find the last date (cumulative end date) to exclude it\n const lastDateTime = Math.max(...this.compareDates.map((d) => d.getTime()));\n\n for (const comparePerDate of this.buildCompares.comparesPerDate) {\n // Skip the last date which contains cumulative values\n if (comparePerDate.date.getTime() >= lastDateTime) {\n continue;\n }\n if (!comparePerDate.compareTimeline?.length) {\n continue;\n }\n // Get first timeline entry (current step) for each date\n const currentCompare = comparePerDate.compareTimeline[0];\n if (!currentCompare?.qualityPoints?.length) {\n continue;\n }\n for (const qp of currentCompare.qualityPoints) {\n result.push({\n date: comparePerDate.date,\n gaugeName: qp.gaugeLabel,\n gaugeValue: qp.getGaugeValue(),\n pixelValue: qp.getRainValue(),\n });\n }\n }\n\n return result.sort((a, b) => a.date.getTime() - b.date.getTime());\n }\n\n protected async buildComparesTimeline(\n targetsOrdered: ICompareTarget[],\n period: {begin: Date; end: Date},\n withCompareDuplicate: boolean\n ): Promise<ICompares> {\n const compareDates = targetsOrdered.map((t) => t.date);\n\n const qualities: RainComputationQuality[] = compareDates\n .filter((d) => !!d)\n .map((d) => this.getRainComputationQuality(d))\n .filter((rcq) => !!rcq);\n\n this.compareDates = compareDates?.length > 1 ? compareDates : [period.begin, period.end];\n if (this.compareDates[0].getTime() > period.begin.getTime()) {\n this.compareDates.unshift(period.begin);\n }\n\n this.buildCompares = SpeedMatrixContainer.BuildCompares(qualities, !withCompareDuplicate);\n return this.buildCompares;\n }\n\n protected getComparePerDate(date: Date): IComparePerDate {\n const existing = this.buildCompares.comparesPerDate.filter(\n (c) => c.date.getTime() === date.getTime()\n );\n if (existing.length === 1) {\n return existing[0];\n }\n return null;\n }\n\n protected getCurrentQualityPoints(compareIndex: number) {\n if (\n this.uiCompares.length === 0 ||\n compareIndex < 0 ||\n this.compareNames.length < compareIndex\n ) {\n return [];\n }\n\n return this.uiCompares[compareIndex].comparePointsHistory;\n }\n\n protected cleanCompareQuality(details?: string) {\n this.compareVersion = details;\n this.compareNames = [];\n this.uiCompares = [];\n this.compareSpeedMatrix = [];\n this.compareTrustedIndicator = undefined;\n\n this.currentQualityDoneDate = new Date(-1);\n this.currentQualityLaunchedBy = '';\n this.currentQualityTimeSpentInMs = -1;\n }\n\n protected async fetchRainComputationQualities(\n targetsOrdered: ICompareTarget[],\n provider: string = 'Raain',\n timeStepInMinutes: number = 5,\n timeStepMode: 'eq' | 'lte' = 'eq'\n ) {\n for (const target of targetsOrdered) {\n if (!this.rainComputationQualitiesPerDate[target.date.toISOString()]) {\n try {\n let rainComputationQuality: RainComputationQuality;\n\n if (target.rainComputationCumulativeId) {\n rainComputationQuality =\n await this.profileService.getRainCumulativeCumulativesCompare(\n this.rainNode,\n target.rainComputationCumulativeId,\n provider,\n timeStepInMinutes,\n timeStepMode\n );\n }\n\n if (rainComputationQuality) {\n let isConsistent = true;\n const matrices =\n rainComputationQuality.qualitySpeedMatrixContainer.getMatrices();\n for (const matrix of matrices) {\n if (!matrix.isConsistent()) {\n isConsistent = false;\n }\n }\n\n if (!isConsistent) {\n console.warn(\n `One of rainComputationQuality matrices is not consistent for ${target.date.toISOString()}`\n );\n }\n\n this.rainComputationQualitiesPerDate[target.date.toISOString()] =\n rainComputationQuality;\n }\n } catch (e) {\n console.warn(e);\n }\n }\n }\n }\n\n protected getRainComputationQuality(date: Date): RainComputationQuality {\n return this.rainComputationQualitiesPerDate[date.toISOString()];\n }\n\n protected selectGaugeInCompare() {\n const globalComparePoints = JSON.parse(JSON.stringify(this.globalComparePoints));\n for (const p of globalComparePoints) {\n if (p.id === this.selectedGaugeInPoints?.gaugeId) {\n p.r = 10;\n } else {\n p.r = 2;\n }\n }\n this.globalComparePoints = globalComparePoints;\n\n for (const compare of this.uiCompares) {\n const comparePoints = JSON.parse(JSON.stringify(compare.comparePoints));\n comparePoints.forEach((p) => {\n if (p.id === this.selectedGaugeInPoints?.gaugeId) {\n p.r = 10;\n } else {\n p.r = 3;\n }\n });\n compare.comparePoints = comparePoints;\n }\n }\n\n protected resetSelectedGauges() {\n // console.log('resetSelectedGauges reset');\n this.selectedGauge = null;\n this.selectedGaugeInPoints = null;\n this.selectedGauges = [];\n this.selectedPixels = [];\n this.pixelsSolutions = [];\n this.selectGaugeInCompare();\n }\n}\n","export class FrameSet {\n constructor(\n public date: Date,\n public radarMeasureIds: string[] = [],\n public rainComputationId: string = null,\n public rainComputationVersion: string = null,\n public rainComputationQualities: {\n version: string;\n id: string;\n }[] = [],\n public rainComputationCumulativeId: string = null\n ) {}\n}\n","import {GaugeNode, LatLng} from 'raain-model';\n\nexport class GaugeNodeFilter extends GaugeNode {\n public isIn = true;\n public distance = 0;\n\n constructor(json: any) {\n super(json);\n }\n\n approxDistanceFrom(center: LatLng): number {\n this.distance =\n Math.round(\n (Math.pow(this.latitude - center.lat, 2) +\n Math.pow(this.longitude - center.lng, 2)) *\n 100 *\n 100\n ) / 100;\n return this.distance;\n }\n\n add() {\n this.isIn = true;\n }\n\n remove() {\n this.isIn = false;\n }\n}\n","import {FrameSet} from './FrameSet';\nimport {from, mergeMap, Subject, takeUntil, timer} from 'rxjs';\nimport {\n CartesianMeasureValue,\n CartesianTools,\n ICartesianMeasureValue,\n RadarNode,\n RainComputationMap,\n RainNode,\n} from 'raain-model';\nimport {CartesianMapValue, TimeframeContainer, TimeframeContainers} from 'raain-ui';\nimport {RadarService} from '../radar.service';\nimport {ProfileService} from '../profile.service';\nimport {CompareManager, ICompareTarget} from './CompareManager';\nimport {XYType} from '../xytype';\n\nconst sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\nexport class RefreshManager {\n public rainComputationMapVersion: string;\n public rainComputationMapDate: Date;\n public rainComputationMapDoneDate: Date;\n public rainComputationMapLaunchedBy: string;\n public rainComputationMapTimeSpentInMs: number;\n\n public rainComputationMapOriginalMin: number;\n public rainComputationMapOriginalMax: number;\n\n public sumFn: (cartesianMapValues: CartesianMapValue[]) => number;\n public sumValues: CartesianMapValue[];\n\n public provider: string = 'Raain';\n public timeStepInMinutes: number = 10;\n public timeStepMode: 'eq' | 'lte' = 'eq';\n public lastError: string = '';\n public cumulative: boolean = false;\n\n protected closeRefreshTimer: Subject<unknown>;\n protected countsPeriod: {\n percentImages?: XYType[];\n queueRunning?: number;\n progress?: number;\n };\n protected timeframesFromRadars: FrameSet[];\n protected timeframesFromRadarsExtended: FrameSet[];\n protected timelineSelectedFrameSet: FrameSet;\n protected timeframeDates: Date[];\n protected expectedTimelineCount: number = 0;\n protected presentTimelineCount: number = 0;\n protected cartesianTools: CartesianTools;\n protected removeDuplicate: boolean;\n protected dataInternal: boolean;\n protected onRefreshInProgress: (\n countPeriods: {\n percentImages?: XYType[];\n queueRunning?: number;\n progress?: number;\n },\n timeframeDates: Date[]\n ) => Promise<void>;\n protected onRefreshDone: (timeframeDates: Date[]) => Promise<void>;\n protected onFetchDone: (timeframeContainers?: TimeframeContainers) => Promise<void>;\n\n constructor(\n protected radarService: RadarService,\n protected profileService: ProfileService,\n protected compareManager: CompareManager\n ) {\n this._period = {begin: new Date(), end: new Date()};\n this.closeRefreshTimer = new Subject<unknown>();\n this.cartesianTools = new CartesianTools();\n this.cleanAll();\n }\n\n protected _rainNode: RainNode;\n\n public get rainNode(): RainNode {\n return this._rainNode;\n }\n\n public set rainNode(rainNode: RainNode) {\n this._rainNode = rainNode;\n this.cleanAll();\n }\n\n protected _period: {begin: Date; end: Date};\n\n get period(): {begin: Date; end: Date} {\n return this._period;\n }\n\n set period(period: {begin: Date; end: Date}) {\n this._period.begin = new Date(period.begin);\n this._period.end = new Date(period.end);\n this.refreshCounts().then((ignored) => {});\n }\n\n public setMethods(\n onRefreshInProgress: (\n countPeriods: {\n percentImages?: XYType[];\n queueRunning?: number;\n },\n timeframeDates: Date[]\n ) => Promise<void>,\n onRefreshDone: (timeframeDates: Date[]) => Promise<void>,\n onFetchDone: (timeframeContainers?: TimeframeContainers) => Promise<void>\n ) {\n this.onRefreshInProgress = onRefreshInProgress;\n this.onRefreshDone = onRefreshDone;\n this.onFetchDone = onFetchDone;\n }\n\n cleanAll() {\n this.lastError = '';\n this.countsPeriod = {percentImages: [], queueRunning: 0, progress: 0};\n this.timeframesFromRadars = [];\n this.timeframesFromRadarsExtended = [];\n this.timeframeDates = [];\n this.removeDuplicate = true;\n this.closeRefreshTimer?.next(null);\n }\n\n async fetch(\n dateShown: Date,\n withGaugesMeasures: boolean,\n cumulativeHours = 0\n ): Promise<FrameSet> {\n // set the target\n const currents = this.timeframesFromRadarsExtended.filter(\n (t) => t.date.getTime() === dateShown.getTime()\n );\n if (currents.length !== 1) {\n return;\n }\n\n // build current Frameset\n const current: FrameSet = currents[0];\n const target = {\n ...current,\n withGauge: withGaugesMeasures,\n cumulativeHours: cumulativeHours,\n };\n\n const timeframeContainers = await this.refreshMapTimeframeContainers(target);\n\n await this.onFetchDone(timeframeContainers);\n await this.refreshCompareQuality(current);\n\n this.timelineSelectedFrameSet = current;\n }\n\n getTimelineFrameSet(): FrameSet[] {\n return this.timeframesFromRadars;\n }\n\n getExpectedTimelineCount(): number {\n return this.expectedTimelineCount;\n }\n\n getPresentTimelineCount(): number {\n return this.presentTimelineCount;\n }\n\n getTimelineSelectedFrameSet(): FrameSet {\n return this.timelineSelectedFrameSet;\n }\n\n async refresh(launchQualityAfter: boolean, dataInternal: boolean) {\n this.lastError = '';\n\n this.checkPeriod();\n\n this.dataInternal = dataInternal;\n\n const asyncDone = (error?: string) => {\n if (error) {\n console.error('Error in refresh', error);\n }\n this.closeRefreshTimer.next(null);\n this.onRefreshDone(this.timeframeDates).then((_ignored) => {});\n };\n\n const asyncRefresh = async () => {\n this.onRefreshInProgress(await this.refreshCounts(), this.timeframeDates).then(\n (_ignored) => {}\n );\n const done = await this.refreshPeriodInsidePolling();\n if (done) {\n asyncDone();\n }\n };\n\n timer(1000, 10000) // Wait 1s, then every 10s\n .pipe(\n mergeMap(() => from(asyncRefresh())),\n takeUntil(this.closeRefreshTimer)\n )\n .subscribe({\n error: (error) => asyncDone(JSON.stringify(error)),\n });\n }\n\n setRemoveDuplicate(b: boolean) {\n this.removeDuplicate = b;\n }\n\n public async setReportPeriod(date: Date) {\n let values: CartesianMapValue[] = [];\n for (const frameSet of this.timeframesFromRadars) {\n if (frameSet.date.getTime() !== date.getTime()) {\n continue;\n }\n values = values.concat(await this.getValues(frameSet));\n }\n\n this.sumFn = (cartesianMapValues: CartesianMapValue[]) => {\n return cartesianMapValues.reduce((p, v) => p + v.value, 0);\n };\n this.sumValues = values;\n }\n\n protected checkPeriod() {\n if (this.period.begin.getTime() === this.period.end.getTime()) {\n const message = 'need a period';\n this.lastError += message;\n throw new Error(message);\n }\n }\n\n protected async refreshCounts() {\n if (!this.rainNode) {\n return this.countsPeriod;\n }\n\n const counts = await this.profileService.getCounts(this.rainNode.id, {\n range: 'day',\n periodBegin: this._period.begin,\n });\n\n let progress = 0;\n\n // Verify progress only for SimpleZone\n if (this.rainNode.getLinks(RadarNode.TYPE).length <= 1) {\n progress = await this.profileService.getRainProgress(this.rainNode.id);\n }\n\n this.countsPeriod = {\n ...counts,\n progress,\n };\n\n return this.countsPeriod;\n }\n\n protected getRainComputationQualityTarget(frameset: FrameSet): string {\n if (frameset.rainComputationQualities.length <= 0) {\n return undefined;\n }\n return frameset.rainComputationQualities[0].id;\n }\n\n protected async refreshPeriodInsidePolling(): Promise<boolean> {\n try {\n const done = await this.refreshCheckIfDone();\n\n // behind refresh\n await this.refreshTimeframesFromRadars(done);\n await this.refreshGlobalCompareReport(done);\n\n return done;\n } catch (e) {\n console.warn(e);\n this.lastError += e.message;\n }\n return false;\n }\n\n protected async refreshCheckIfDone(): Promise<boolean> {\n await sleep(2000);\n return this.countsPeriod.progress === 0;\n }\n\n protected async refreshTimeframesFromRadars(done: boolean) {\n if (!done || !this.rainNode) {\n return [];\n }\n\n try {\n const beginExtended = new Date(this.period.begin);\n const endExtended = new Date(this.period.end);\n if (!this.cumulative) {\n // Only extend period for granular mode (to get neighboring frames)\n // For cumulative mode, use exact period\n beginExtended.setMinutes(beginExtended.getMinutes() - 7);\n endExtended.setMinutes(endExtended.getMinutes() + 7);\n }\n\n const windowInMinutes = this.cumulative\n ? Math.round((this.period.end.getTime() - this.period.begin.getTime()) / 60000)\n : this.timeStepInMinutes;\n\n this.rainNode = await this.profileService.getRainTimeframe(\n this.rainNode.id,\n beginExtended,\n endExtended,\n this.dataInternal,\n this.provider,\n this.timeStepInMinutes,\n windowInMinutes\n );\n\n this.timeframesFromRadarsExtended = await this.radarService.getTimeline(this.rainNode);\n this.timeframesFromRadars = this.timeframesFromRadarsExtended\n .filter(\n (frameSet) =>\n this.period.begin.getTime() < frameSet.date.getTime() &&\n frameSet.date.getTime() <= this.period.end.getTime()\n )\n .sort((a, b) => a.date.getTime() - b.date.getTime());\n\n this.timeframeDates = this.timeframesFromRadars.map((frameSet) => frameSet.date);\n\n // Compute all expected dates\n // For cumulative mode: only 1 expected date (the period end)\n // For granular mode: all dates from period.begin to period.end with timeStepInMinutes\n const allExpectedDates: Date[] = [];\n if (this.cumulative) {\n // In cumulative mode, we expect only ONE timeframe (the cumulative)\n allExpectedDates.push(new Date(this.period.end));\n } else {\n // Start from begin + step: cumulative dates represent window ends,\n // so the first expected date is begin + timeStep, not begin itself\n const beginTime = new Date(this.period.begin).getTime();\n const currentDate = new Date(beginTime + this.timeStepInMinutes * 60000);\n while (currentDate.getTime() <= this.period.end.getTime()) {\n allExpectedDates.push(new Date(currentDate));\n currentDate.setMinutes(currentDate.getMinutes() + this.timeStepInMinutes);\n }\n }\n\n this.expectedTimelineCount = allExpectedDates.length;\n\n // Check if all expected dates are present in timeframeDates\n const timeframeDateTimes = new Set(this.timeframeDates.map((d) => d.getTime()));\n const missingDates = allExpectedDates.filter(\n (expectedDate) => !timeframeDateTimes.has(expectedDate.getTime())\n );\n this.presentTimelineCount = allExpectedDates.length - missingDates.length;\n\n if (missingDates.length > 0) {\n const message =\n `Missing ${missingDates.length} timeframe(s) out of ${allExpectedDates.length} expected: ` +\n missingDates.map((d) => d.toISOString()).join(', ');\n console.warn(message);\n this.lastError += message;\n }\n\n return this.timeframesFromRadars;\n } catch (e) {\n console.error('refreshTimeframesFromRadars', e);\n }\n\n return [];\n }\n\n protected async refreshGlobalCompareReport(done: boolean) {\n if (!done) {\n return;\n }\n\n try {\n const targets: ICompareTarget[] = [];\n for (const frameSet of this.timeframesFromRadars) {\n const target = JSON.parse(JSON.stringify(frameSet));\n target.date = new Date(target.date);\n targets.push(target);\n }\n\n await this.compareManager.refreshGlobalCompareQuality(\n targets,\n this.period,\n !this.removeDuplicate,\n this.provider,\n this.timeStepInMinutes,\n this.timeStepMode\n );\n } catch (e) {\n console.error('refreshGlobalCompareReport', e);\n }\n }\n\n protected async refreshMapTimeframeContainers(target: {\n date: Date;\n rainComputationCumulativeId: string;\n withGauge: boolean;\n cumulativeHours: number;\n }) {\n if (!target?.rainComputationCumulativeId) {\n const message = `Pb with refreshMapTimeframeContainers insights ${target?.date.toISOString()}`;\n console.warn(message);\n this.lastError += message;\n return null;\n }\n\n const rainNode = this.rainNode;\n const containers: TimeframeContainer[] = [];\n const newCreatedTimeframeContainers = new TimeframeContainers(containers);\n try {\n let rainNodeCartesianMap: RainComputationMap;\n\n if (target.cumulativeHours && target.rainComputationCumulativeId) {\n // For N-hour cumulative, use the last frame's cumulative (end of period)\n // The cumulative is pre-computed by raain-ground with windowInMinutes=60\n const lastFrame =\n this.timeframesFromRadarsExtended[this.timeframesFromRadarsExtended.length - 1];\n const cumulativeId =\n lastFrame?.rainComputationCumulativeId || target.rainComputationCumulativeId;\n\n // Use direct cartesian-map endpoint - cumulative data fetched from S3\n rainNodeCartesianMap =\n await this.profileService.getRainComputationCumulativeCartesianMapById(\n rainNode.id,\n cumulativeId\n );\n } else {\n rainNodeCartesianMap =\n await this.profileService.getRainComputationCumulativeCartesianMapById(\n rainNode.id,\n target.rainComputationCumulativeId\n );\n }\n\n if (rainNodeCartesianMap) {\n newCreatedTimeframeContainers.addFromRainComputationMap(\n rainNodeCartesianMap,\n false\n );\n\n this.rainComputationMapVersion = rainNodeCartesianMap.version;\n this.rainComputationMapDate = new Date(rainNodeCartesianMap.date);\n this.rainComputationMapDoneDate = rainNodeCartesianMap.isDoneDate;\n this.rainComputationMapLaunchedBy = rainNodeCartesianMap.launchedBy;\n this.rainComputationMapTimeSpentInMs = rainNodeCartesianMap.timeSpentInMs;\n\n this.rainComputationMapOriginalMin = rainNodeCartesianMap.originalDBZMin;\n this.rainComputationMapOriginalMax = rainNodeCartesianMap.originalDBZMax;\n }\n } catch (e) {\n const message = `Pb with cumulatives for id: ${target.rainComputationCumulativeId} ${e.message}`;\n console.warn(message);\n this.lastError += message;\n }\n\n return newCreatedTimeframeContainers;\n }\n\n protected async refreshCompareQuality(frameSet: FrameSet) {\n await this.compareManager.refreshCompareQuality(frameSet, true);\n await this.compareManager.setGaugesInCompare();\n }\n\n protected async getValues(target: FrameSet): Promise<CartesianMapValue[]> {\n if (!target?.rainComputationCumulativeId) {\n const message = `Pb with target insights ${target?.date.toISOString()}`;\n console.warn(message);\n this.lastError += message;\n return [];\n }\n\n let values: CartesianMapValue[] = [];\n const rainComputationMap =\n await this.profileService.getRainComputationCumulativeCartesianMapById(\n this.rainNode.id,\n target.rainComputationCumulativeId\n );\n\n try {\n if (rainComputationMap) {\n rainComputationMap.getMapData().forEach((m) => {\n if (m.values) {\n (m.values as ICartesianMeasureValue[]).forEach((v) => {\n const cartesianMeasureValue = CartesianMeasureValue.From(v);\n values = values.concat(\n CartesianMapValue.From(\n cartesianMeasureValue.getCartesianValues(),\n this.cartesianTools\n )\n );\n });\n }\n });\n }\n } catch (e) {\n const message = `Pb with cumulatives for id: ${target.rainComputationCumulativeId} ${e.message}`;\n console.warn(message);\n this.lastError += message;\n }\n\n return values;\n }\n}\n","import {DateRange} from 'raain-ui';\n\nexport function mapDateRangeToString(range: DateRange): 'hour' | 'day' | 'month' | 'year' {\n switch (range) {\n case DateRange.HOUR:\n return 'hour';\n case DateRange.DAY:\n return 'day';\n case DateRange.MONTH:\n return 'month';\n case DateRange.YEAR:\n return 'year';\n default:\n return 'year';\n }\n}\n","import {FidjService} from 'fidj-angular';\nimport {EventNode, GaugeNode, Link, PeopleNode, RadarNode, RainNode} from 'raain-model';\nimport {Storage} from './storage.service';\n\nexport class FidjStorageNode {\n public radars: RadarNode[] = [];\n public rains: RainNode[] = [];\n public gauges: GaugeNode[] = [];\n public team: PeopleNode;\n public events: EventNode[] = [];\n\n public infos: any = {};\n\n static getEmptyNode() {\n return new FidjStorageNode();\n }\n\n static getDemoNode() {\n const demoNode = new FidjStorageNode();\n const link = new Link('rain', 'https://demo/api/rains/2');\n /*\n demoNode.radars = [\n new RadarNode({\n id: '5efd04569cb1f4161bd69dc7',\n name: 'demo radar A',\n links: [link],\n latitude: 48.774569,\n longitude: 2.008407\n }),\n new RadarNode({\n id: 'dr2',\n name: 'demo radar B',\n links: [link],\n latitude: 0.11,\n longitude: -0.753\n }),\n new RadarNode({\n id: 'dr3',\n name: 'demo radar C',\n latitude: 0.13,\n longitude: -0.753,\n links: []\n }),\n new RadarNode({\n id: 'dr4',\n name: 'demo radar D',\n latitude: 0.14,\n longitude: -0.74,\n links: []\n })];\n demoNode.rains = [\n new RainNode({\n id: '5efd04569cb1f4161bd69dc8',\n name: 'Demo rain zone A',\n links: [new Link('radar', 'https://demo/api/radars/5efcfe619cb1f4161bd69dc3')],\n status: 0,\n quality: 75,\n latitude: 48.774569,\n longitude: 2.008407\n }),\n new RainNode({\n id: 'dz2',\n name: 'Demo rain zone B',\n radars: [demoNode.radars[0], demoNode.radars[1]],\n status: 1,\n quality: 50,\n latitude: 48.774569,\n longitude: 2.008407\n }),\n new RainNode({\n id: 'dz3',\n name: 'Demo rain zone C',\n radars: [demoNode.radars[0], demoNode.radars[1]],\n status: 2,\n quality: 75,\n latitude: 48.774569,\n longitude: 2.008407\n }),\n new RainNode({\n id: 'dz4',\n name: 'Demo rain zone D',\n radars: [demoNode.radars[0], demoNode.radars[1]],\n status: 3,\n quality: 95,\n latitude: 48.774569,\n longitude: 2.008407\n })];\n\n demoNode.gauges = [\n new GaugeNode({\n id: 'g1',\n name: 'Gauge A',\n latitude: 48.7748,\n longitude: 2.28407,\n }),\n new GaugeNode({\n id: 'g2',\n name: 'Gauge B',\n latitude: 48.874569,\n longitude: 2.108407,\n })];\n demoNode.events = [{\n id: 'e2',\n title: 'Need support ?',\n status: 0,\n red: false,\n description: 'This area is dedicated to support you and your team. Support is made on Radar or Rain quality, ' +\n 'or any feedback we can have about your production system. Our goal : improving your data.',\n created: new Date(),\n modified: new Date()\n }];\n demoNode.team = {\n id: 'p1',\n email: 'demo@demo.com',\n name: 'demo guy',\n description: 'the demo guy'\n };\n\n */\n return demoNode;\n }\n}\n\nclass FidjStorageResult {\n data: FidjStorageNode;\n}\n\nexport class FidjStorage {\n private isDemoMode: boolean;\n private node: FidjStorageNode = FidjStorageNode.getEmptyNode();\n private fidjMetaResult: FidjStorageResult = {data: new FidjStorageNode()};\n\n constructor(private storage: Storage) {}\n\n public async storeData(fidjService: FidjService, data) {\n this.node = JSON.parse(JSON.stringify(data));\n this.fidjMetaResult.data = this.node;\n\n if (this.isDemoMode) {\n this.storage.set('fidjMetaResult', JSON.stringify(this.fidjMetaResult));\n return;\n }\n\n await fidjService.put(this.fidjMetaResult);\n }\n\n public async getRefreshedNodeCopy(fidjService: FidjService): Promise<FidjStorageNode> {\n if (this.isDemoMode) {\n const fidjMetaResult = this.storage.get('fidjMetaResult');\n if (fidjMetaResult) {\n this.fidjMetaResult = JSON.parse(fidjMetaResult);\n this.node = this.fidjMetaResult.data;\n }\n return JSON.parse(JSON.stringify(this.node));\n }\n\n const firstDemoData = async () => {\n this.node = FidjStorageNode.getDemoNode();\n await this.storeData(fidjService, this.node);\n };\n\n await fidjService.sync(firstDemoData);\n const fidjFindAllResults: any = await fidjService.findAll();\n\n if (fidjFindAllResults && fidjFindAllResults.length > 0) {\n if (fidjFindAllResults[0].data) {\n this.fidjMetaResult = fidjFindAllResults[0];\n this.node = this.fidjMetaResult.data;\n }\n }\n\n return JSON.parse(JSON.stringify(this.node));\n }\n\n setDemoMode(isDemo: boolean) {\n this.isDemoMode = isDemo;\n }\n}\n","import {Injectable} from '@angular/core';\nimport {HttpClient} from '@angular/common/http';\nimport {BehaviorSubject} from 'rxjs';\nimport {\n BuildQueryString,\n EventNode,\n GaugeMeasure,\n GaugeNode,\n LatLng,\n RaainApiGaugesFindAllMineRequest,\n RaainApiGaugesFindAllMineResponse,\n RaainApiGaugesFindMeasuresRequest,\n RaainApiGaugesFindMeasuresResponse,\n RaainApiGaugesFindOneResponse,\n RaainApiNotificationsAddRequestBody,\n RaainApiNotificationsAddResponse,\n RaainApiNotificationsFindAllMineRequest,\n RaainApiNotificationsFindAllMineResponse,\n RaainApiRadarsFindAllMineRequest,\n RaainApiRadarsFindAllMineResponse,\n RaainApiRadarsFindOneResponse,\n RaainApiRadarsUpdateRequestBody,\n RaainApiRainsCumulativeCartesianMapRequest,\n RaainApiRainsCumulativeCartesianMapResponse,\n RaainApiRainsCumulativeComparesResponse,\n RaainApiRainsCumulativeCumulativeResponse,\n RaainApiRainsCumulativeCumulativesComparesRequest,\n RaainApiRainsCumulativeCumulativesComparesResponse,\n RaainApiRainsCumulativesCreateRequest,\n RaainApiRainsCumulativesCreateResponse,\n RaainApiRainsCumulativesDetailedResponse,\n RaainApiRainsCumulativesListRequest,\n RaainApiRainsCumulativesListResponse,\n RaainApiRainsFindAllMineRequest,\n RaainApiRainsFindAllMineResponse,\n RaainApiRainsFindOneResponse,\n RaainApiRainsFindOneTimeframeCumulativeRequest,\n RaainApiRainsFindOneTimeframeCumulativeResponse,\n RaainApiRainsGetCountsRequest,\n RaainApiRainsGetCountsResponse,\n RaainApiRainsIndicatorsRequest,\n RaainApiRainsIndicatorsResponse,\n RaainApiRainsProgressResponse,\n RaainApiRainsProvidersResponse,\n RaainApiTeamsFindAllMineRequest,\n RaainApiTeamsFindOneResponse,\n RadarNode,\n RainComputationMap,\n RainComputationQuality,\n RainNode,\n SpeedMatrixContainer,\n TeamNode,\n} from 'raain-model';\n\nimport {Storage} from './storage.service';\n\nimport {FidjStorage, FidjStorageNode} from './fidj-storage.model';\nimport {ErrorInterface, FidjService, LoggerLevelEnum} from 'fidj-angular';\nimport {XYType} from './xytype';\nimport {GaugeNodeFilter} from './tools';\nimport {Router} from '@angular/router';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ProfileService {\n public readyForSync: BehaviorSubject<boolean>;\n public asTeamId: string;\n\n protected email: string;\n protected isDemo: boolean;\n protected roles: Array<string>;\n protected nodeData: FidjStorageNode;\n protected fidjStorage: FidjStorage;\n protected haveTryToReconnect: boolean;\n\n constructor(\n protected storage: Storage,\n protected fidjService: FidjService,\n protected httpClient: HttpClient,\n private router: Router\n ) {\n this.email = this.storage.get('raain-email');\n this.asTeamId = this.storage.get('raain-asTeamId');\n this.readyForSync = new BehaviorSubject<boolean>(false);\n this.roles = [];\n this.fidjStorage = new FidjStorage(storage);\n this.isDemoMode = false;\n }\n\n get isDemoMode() {\n return this.isDemo;\n }\n\n set isDemoMode(mode) {\n this.isDemo = mode ? mode : true;\n this.fidjStorage.setDemoMode(this.isDemo);\n }\n\n get defaultUrlForAPI() {\n return this.storage.get('raain-urlForAPI');\n }\n\n set defaultUrlForAPI(url: string) {\n this.storage.set('raain-urlForAPI', url);\n }\n\n async refreshProfile(): Promise<FidjStorageNode> {\n try {\n this.nodeData = await this.fidjStorage.getRefreshedNodeCopy(this.fidjService);\n this.setRoles(await this.fidjService.getRoles());\n return this.nodeData;\n } catch (e) {\n await this.checkError(e);\n }\n }\n\n async isConnected() {\n return this.fidjService.isConnected();\n }\n\n getEmail() {\n return this.email ?? this.storage.get('raain-email', this.email);\n }\n\n setEmail(email: string) {\n this.email = email;\n this.storage.set('raain-email', this.email);\n }\n\n async logout(fidjKey: string, fidjProd: boolean) {\n // this.storage.remove('raain-email');\n\n if (!fidjKey) {\n try {\n await this.fidjService.loginInDemoMode();\n this.readyForSync.next(true);\n } catch (err) {\n console.error('initFidj catch pb: ', err);\n }\n\n return;\n }\n\n await this.fidjService.logout(true);\n\n try {\n await this.fidjService.init(fidjKey, {\n logLevel: LoggerLevelEnum.WARN, // fidjProd ? LoggerLevelEnum.WARN : LoggerLevelEnum.INFO,\n crypto: false,\n prod: fidjProd,\n useDB: false,\n });\n this.readyForSync.next(true);\n } catch (err) {\n console.error('initFidj catch pb: ', err);\n }\n }\n\n async checkError(error: ErrorInterface) {\n if (error.code === 401) {\n console.warn('Pb on auth');\n if (this.router.url.indexOf('login') < 0) {\n try {\n await this.fidjService.logout();\n } catch (ignored) {\n // Ignore logout errors as we're redirecting to logout page anyway\n }\n return this.gotoLout();\n }\n }\n }\n\n async gotoLout() {\n try {\n if (this.router.url.indexOf('login') > -1) {\n return;\n }\n await this.router.navigateByUrl('/logout', {\n skipLocationChange: true,\n replaceUrl: true,\n });\n } catch (e) {\n console.error('gotoLout error: ', e);\n }\n }\n\n async gotoLogin() {\n if (this.router.url.indexOf('login') > -1) {\n return;\n }\n // await this.router.navigateByUrl('/', {skipLocationChange: true});\n await this.router.navigate(['/login']);\n }\n\n isLoggedIn() {\n const loggedIn = this.fidjService.isLoggedIn();\n console.log('isLoggedIn: ', loggedIn);\n return loggedIn;\n }\n\n needsConnectionRefresh() {\n return this.fidjService.needsRefresh();\n }\n\n async connectionRefresh() {\n await this.fidjService.refresh();\n }\n\n async storeAll() {\n return this.fidjStorage.storeData(this.fidjService, this.nodeData);\n }\n\n isAdmin(): boolean {\n return this.roles.indexOf('admin') > -1;\n }\n\n // === Notifications ===\n\n async createNotification(rainId: string, message: string) {\n const data: RaainApiNotificationsAddRequestBody = {\n rain: rainId,\n message,\n };\n\n try {\n const resp = await this.fidjService.sendOnEndpoint<\n RaainApiNotificationsAddRequestBody,\n RaainApiNotificationsAddResponse\n >({\n key: 'notifications',\n verb: 'POST',\n defaultKeyUrl: this.defaultUrlForAPI + '/notifications',\n data,\n });\n return new EventNode(resp.data);\n } catch (e) {\n await this.checkError(e);\n }\n\n return null;\n }\n\n async getNotifications(rainId: string) {\n try {\n type NotificationsFindParams = Partial<RaainApiNotificationsFindAllMineRequest>;\n const params: NotificationsFindParams = {rain: rainId};\n const queryString = BuildQueryString<NotificationsFindParams>(params);\n const resp = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiNotificationsFindAllMineResponse\n >({\n key: 'notifications',\n verb: 'GET',\n relativePath: queryString ? '?' + queryString : '',\n defaultKeyUrl: this.defaultUrlForAPI + '/notifications',\n });\n\n return resp.data.notifications.map((n) => new EventNode(n));\n } catch (e) {\n await this.checkError(e);\n }\n\n return null;\n }\n\n async getAllNotifications(): Promise<EventNode[]> {\n try {\n const resp = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiNotificationsFindAllMineResponse\n >({\n key: 'notifications',\n verb: 'GET',\n defaultKeyUrl: this.defaultUrlForAPI + '/notifications',\n });\n\n return resp.data.notifications.map((n) => new EventNode(n));\n } catch (e) {\n await this.checkError(e);\n }\n\n return [];\n }\n\n // === Teams ===\n\n async getTeams(): Promise<Array<TeamNode>> {\n const teams = [];\n const params = {};\n const queryString = BuildQueryString<RaainApiTeamsFindAllMineRequest>(params);\n try {\n const resp = await this.fidjService.sendOnEndpoint<\n void,\n {teams: ReturnType<TeamNode['toJSON']>[]}\n >({\n key: 'teams',\n verb: 'GET',\n relativePath: queryString ? '?' + queryString : '',\n defaultKeyUrl: this.defaultUrlForAPI + '/teams',\n });\n for (const team of resp.data.teams) {\n teams.push(new TeamNode(team));\n }\n } catch (e) {\n await this.checkError(e);\n }\n return teams;\n }\n\n async getTeam(teamId: string): Promise<TeamNode> {\n try {\n const resp = await this.fidjService.sendOnEndpoint<void, RaainApiTeamsFindOneResponse>({\n key: 'teams',\n verb: 'GET',\n relativePath: teamId,\n defaultKeyUrl: this.defaultUrlForAPI + '/teams',\n });\n return new TeamNode(resp.data);\n } catch (e) {\n await this.checkError(e);\n }\n\n return null;\n }\n\n // === Radars ===\n\n async getRadars(name?: string): Promise<Array<RadarNode>> {\n const radars = [];\n const params: RaainApiRadarsFindAllMineRequest = {};\n if (name) {\n params.name = name;\n }\n try {\n let page = 1;\n let hasNext = true;\n while (hasNext) {\n params.page = page;\n const queryString = BuildQueryString<RaainApiRadarsFindAllMineRequest>(params);\n const resp = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiRadarsFindAllMineResponse\n >({\n key: 'radars',\n verb: 'GET',\n relativePath: queryString ? '?' + queryString : '',\n defaultKeyUrl: this.defaultUrlForAPI + '/radars',\n });\n for (const r of resp.data.radars) {\n radars.push(new RadarNode(r));\n }\n hasNext = resp.data.pagination?.hasNext ?? false;\n page++;\n }\n } catch (e) {\n await this.checkError(e);\n }\n return radars;\n }\n\n async getRadar(id: string): Promise<RadarNode> {\n try {\n const resp = await this.fidjService.sendOnEndpoint<void, RaainApiRadarsFindOneResponse>(\n {\n key: 'radars',\n verb: 'GET',\n relativePath: id,\n defaultKeyUrl: this.defaultUrlForAPI + '/radars',\n }\n );\n return new RadarNode(resp.data);\n } catch (e) {\n await this.checkError(e);\n }\n\n return null;\n }\n\n async putRadar(radarNode: RadarNode): Promise<RadarNode> {\n const data: RaainApiRadarsUpdateRequestBody = {\n name: radarNode.name,\n };\n\n try {\n const resp = await this.fidjService.sendOnEndpoint<\n RaainApiRadarsUpdateRequestBody,\n ReturnType<RadarNode['toJSON']>\n >({\n key: 'radars',\n relativePath: radarNode.id,\n verb: 'PUT',\n data,\n defaultKeyUrl: this.defaultUrlForAPI + '/radars/',\n });\n\n return new RadarNode(resp.data);\n } catch (e) {\n await this.checkError(e);\n }\n }\n\n async getLonelyRadars(rains: RainNode[]): Promise<RadarNode[]> {\n try {\n const allRadars = await this.getRadars();\n const lonelyRadars: RadarNode[] = [];\n allRadars.forEach((radar) => {\n let found = false;\n rains.forEach((rain) => {\n const rdId = rain.getLink(RadarNode.TYPE).getId();\n if (rdId === radar.id) {\n found = true;\n }\n });\n if (!found) {\n lonelyRadars.push(radar);\n }\n });\n return lonelyRadars;\n } catch (e) {\n await this.checkError(e);\n }\n return [];\n }\n\n async getRainTimeframe(\n rainId: string,\n begin: Date,\n end: Date,\n forced = false,\n provider = 'Raain',\n timeStepInMinutes = 10,\n windowInMinutes = 0\n ): Promise<RainNode> {\n try {\n const params: RaainApiRainsFindOneTimeframeCumulativeRequest = {\n format: 'timeframeCumulative',\n provider,\n timeStepInMinutes: String(timeStepInMinutes),\n begin: begin?.toISOString(),\n end: end?.toISOString(),\n };\n if (forced) {\n params.forced = 'true';\n }\n params.windowInMinutes = String(windowInMinutes);\n const queryString =\n BuildQueryString<RaainApiRainsFindOneTimeframeCumulativeRequest>(params);\n const resp = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiRainsFindOneTimeframeCumulativeResponse\n >({\n key: 'rains',\n verb: 'GET',\n relativePath: rainId + (queryString ? '?' + queryString : ''),\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n });\n const rainNode = new RainNode(resp.data.timeframeCumulative);\n rainNode.name += '.radar.timeframeCumulative';\n return rainNode;\n } catch (e) {\n await this.checkError(e);\n }\n return null;\n }\n\n // === Rains ===\n\n async getRains(name?: string): Promise<Array<RainNode>> {\n const rains = [];\n const params: RaainApiRainsFindAllMineRequest = {};\n if (name) {\n params.name = name;\n }\n try {\n let page = 1;\n let hasNext = true;\n while (hasNext) {\n params.page = page;\n const queryString = BuildQueryString<RaainApiRainsFindAllMineRequest>(params);\n const resp = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiRainsFindAllMineResponse\n >({\n key: 'rains',\n verb: 'GET',\n relativePath: queryString ? '?' + queryString : '',\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n });\n for (const rain of resp.data.rains) {\n rains.push(new RainNode(rain));\n }\n hasNext = resp.data.pagination?.hasNext ?? false;\n page++;\n }\n } catch (e) {\n await this.checkError(e);\n }\n return rains;\n }\n\n async getRain(id: string): Promise<RainNode> {\n try {\n const resp = await this.fidjService.sendOnEndpoint<void, RaainApiRainsFindOneResponse>({\n key: 'rains',\n relativePath: id,\n verb: 'GET',\n defaultKeyUrl: this.defaultUrlForAPI + '/rains/',\n });\n return new RainNode(resp.data);\n } catch (e) {\n await this.checkError(e);\n }\n return null;\n }\n\n // === Count\n\n async getCounts(\n rainId: string,\n options: {\n range: 'hour' | 'day' | 'month' | 'year';\n periodBegin: Date;\n }\n ): Promise<{\n percentImages: XYType[];\n percentRainy: XYType[];\n percentQ: XYType[];\n percentComputations: XYType[];\n queueRunning: number;\n }> {\n try {\n const params: RaainApiRainsGetCountsRequest = {\n range: options.range,\n begin: options.periodBegin.toISOString(),\n };\n const queryString = BuildQueryString<RaainApiRainsGetCountsRequest>(params);\n\n const resp = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiRainsGetCountsResponse\n >({\n key: 'rains',\n relativePath: rainId + '/counts' + (queryString ? '?' + queryString : ''),\n verb: 'GET',\n defaultKeyUrl: this.defaultUrlForAPI + '/rains/',\n });\n\n const counts = resp.data.counts.result;\n const percentImages: XYType[] = [],\n percentRainy: XYType[] = [],\n percentQ: XYType[] = [],\n percentComputations: XYType[] = [];\n\n counts.forEach((c) => {\n const label = this.setDateComponents(options.periodBegin, c);\n percentImages.push(new XYType(c.percentImages ?? 0, NaN, NaN, label));\n percentRainy.push(new XYType(c.percentRainy ?? 0, NaN, NaN, label));\n percentQ.push(new XYType(c.percentQ ?? 0, NaN, NaN, label));\n percentComputations.push(new XYType(c.percentComputations ?? 0, NaN, NaN, label));\n });\n\n return {\n percentImages,\n percentRainy,\n percentQ,\n percentComputations,\n queueRunning: resp.data.queueRunning,\n };\n } catch (e) {\n await this.checkError(e);\n }\n return null;\n }\n\n async getCountsHour(\n rainId: string,\n options: {periodBegin: Date}\n ): Promise<{\n percentImages: XYType[];\n percentComputations: XYType[];\n rainyCount: XYType[];\n rainySum: XYType[];\n queueRunning: number;\n }> {\n try {\n const params: RaainApiRainsGetCountsRequest = {\n range: 'hour',\n begin: options.periodBegin.toISOString(),\n };\n const queryString = BuildQueryString<RaainApiRainsGetCountsRequest>(params);\n\n const resp = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiRainsGetCountsResponse\n >({\n key: 'rains',\n relativePath: rainId + '/counts' + (queryString ? '?' + queryString : ''),\n verb: 'GET',\n defaultKeyUrl: this.defaultUrlForAPI + '/rains/',\n });\n\n const counts = resp.data.counts.result;\n const percentImages: XYType[] = [],\n percentComputations: XYType[] = [],\n rainySum: XYType[] = [],\n rainyCount: XYType[] = [];\n\n counts.forEach((c) => {\n const label = this.setDateComponents(options.periodBegin, c);\n percentImages.push(new XYType(c.percentImages ?? 0, NaN, NaN, label));\n percentComputations.push(new XYType(c.percentComputations ?? 0, NaN, NaN, label));\n rainyCount.push(new XYType(c.rainyCount ?? 0, NaN, NaN, label));\n rainySum.push(new XYType(c.rainySum ?? 0, NaN, NaN, label));\n });\n\n return {\n percentImages,\n percentComputations,\n rainyCount,\n rainySum,\n queueRunning: resp.data.queueRunning,\n };\n } catch (e) {\n await this.checkError(e);\n }\n return null;\n }\n\n // === Computing ===\n\n async getRainComputationCumulativeCartesianMapById(\n rainId: string,\n rainComputationCumulativeId: string\n ): Promise<RainComputationMap> {\n const params: RaainApiRainsCumulativeCartesianMapRequest = {format: 'cartesian-map'};\n const queryString = BuildQueryString<RaainApiRainsCumulativeCartesianMapRequest>(params);\n\n try {\n const response = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiRainsCumulativeCartesianMapResponse\n >({\n key: 'rains',\n verb: 'GET',\n relativePath: `${rainId}/cumulatives/${rainComputationCumulativeId}?${queryString}`,\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n });\n if (!response.data['cartesian-map']) {\n return null;\n }\n\n const rainComputationMap = new RainComputationMap(response.data['cartesian-map']);\n rainComputationMap.name = rainId + '.rain.cartesian-map';\n return rainComputationMap;\n } catch (e) {\n await this.checkError(e);\n }\n return null;\n }\n\n async getRainComputationCumulativeCumulativesMapById(\n rainId: string,\n rainComputationCumulativeId: string,\n cumulativeHours: number\n ): Promise<RainComputationMap> {\n const queryPath = `${rainId}/cumulatives/${rainComputationCumulativeId}/cumulative/${cumulativeHours}`;\n\n try {\n const response = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiRainsCumulativeCumulativeResponse\n >({\n key: 'rains',\n verb: 'GET',\n relativePath: queryPath,\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n });\n if (!response.data['cumulative']) {\n return null;\n }\n\n const rainComputationMap = new RainComputationMap(response.data['cumulative']);\n rainComputationMap.name = rainId + '.rain.cumulative-cumulative';\n return rainComputationMap;\n } catch (e) {\n await this.checkError(e);\n }\n return null;\n }\n\n async getRainCumulativeCompare(\n rainNode: RainNode,\n rainComputationCumulativeId: string\n ): Promise<RainComputationQuality> {\n try {\n const response = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiRainsCumulativeComparesResponse\n >({\n key: 'rains',\n verb: 'GET',\n relativePath: `${rainNode.id}/cumulatives/${rainComputationCumulativeId}/compares`,\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n });\n\n const qualityJson = response.data.qualities[0];\n const rainComputationQuality = new RainComputationQuality(qualityJson);\n rainComputationQuality.qualitySpeedMatrixContainer =\n SpeedMatrixContainer.CreateFromJson(\n rainComputationQuality.qualitySpeedMatrixContainer\n );\n return rainComputationQuality;\n } catch (e) {\n await this.checkError(e);\n }\n return null;\n }\n\n // Fetch per-frequency quality for an on-demand cumulative\n // timeStepInMinutes = gauge frequency filter (e.g. 6 for 6min gauges, 30 for 30min gauges)\n // timeStepMode = 'eq' (exact match) or 'lte' (all frequencies <= timeStepInMinutes)\n // provider = gauge provider filter (e.g. 'Raain')\n async getRainCumulativeCumulativesCompare(\n rainNode: RainNode,\n rainComputationCumulativeId: string,\n provider: string = 'Raain',\n timeStepInMinutes: number = 5,\n timeStepMode: 'eq' | 'lte' = 'eq'\n ): Promise<RainComputationQuality> {\n const params: RaainApiRainsCumulativeCumulativesComparesRequest = {\n provider,\n timeStepInMinutes,\n timeStepMode,\n };\n\n const queryString =\n BuildQueryString<RaainApiRainsCumulativeCumulativesComparesRequest>(params);\n\n try {\n const response = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiRainsCumulativeCumulativesComparesResponse\n >({\n key: 'rains',\n verb: 'GET',\n relativePath: `${rainNode.id}/cumulatives/${rainComputationCumulativeId}/compares?${queryString}`,\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n });\n\n const allQualities = response.data.qualities;\n if (!allQualities?.length) {\n return null;\n }\n\n const rainComputationQuality = new RainComputationQuality(allQualities[0]);\n rainComputationQuality.qualitySpeedMatrixContainer =\n SpeedMatrixContainer.CreateFromJson(\n rainComputationQuality.qualitySpeedMatrixContainer\n );\n\n // Merge additional qualities (lte mode returns multiple freq groups)\n for (let i = 1; i < allQualities.length; i++) {\n const extra = new RainComputationQuality(allQualities[i]);\n extra.qualitySpeedMatrixContainer = SpeedMatrixContainer.CreateFromJson(\n extra.qualitySpeedMatrixContainer\n );\n rainComputationQuality.merge(extra);\n }\n\n return rainComputationQuality;\n } catch (e) {\n await this.checkError(e);\n }\n return null;\n }\n\n async getRainProgress(rainId: string): Promise<number> {\n try {\n const queryPath = '' + rainId + '/progress';\n const response = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiRainsProgressResponse\n >({\n key: 'rains',\n verb: 'GET',\n relativePath: queryPath,\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n });\n\n // return response.data.inProgress;\n return response.data.inQueue;\n } catch (e) {\n await this.checkError(e);\n }\n return 0;\n }\n\n async getIndicators(rainId: string): Promise<RaainApiRainsIndicatorsResponse> {\n try {\n const params: RaainApiRainsIndicatorsRequest = {\n cumulative: 'true',\n };\n const queryString = BuildQueryString<RaainApiRainsIndicatorsRequest>(params);\n const response = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiRainsIndicatorsResponse\n >({\n key: 'rains',\n verb: 'GET',\n relativePath: rainId + '/indicators' + (queryString ? '?' + queryString : ''),\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n });\n\n return response.data;\n } catch (e) {\n await this.checkError(e);\n }\n return {indicators: []};\n }\n\n // GET /rains/:rainId/cumulatives - List available cumulative periods\n // With detailed=true, returns individual cumulatives instead of aggregated periods\n async getCumulativePeriods(\n rainId: string,\n filters?: {\n windowInMinutes?: number;\n provider?: string;\n isReady?: boolean;\n forced?: boolean;\n detailed?: boolean;\n page?: number;\n limit?: number;\n periodBegin?: string;\n periodEnd?: string;\n }\n ): Promise<RaainApiRainsCumulativesListResponse | RaainApiRainsCumulativesDetailedResponse> {\n try {\n const params: RaainApiRainsCumulativesListRequest = {};\n if (filters?.windowInMinutes !== undefined) {\n params.windowInMinutes = filters.windowInMinutes;\n }\n if (filters?.provider) {\n params.provider = filters.provider;\n }\n if (filters?.isReady !== undefined) {\n params.isReady = filters.isReady;\n }\n if (filters?.forced !== undefined) {\n params.forced = filters.forced;\n }\n if (filters?.detailed) {\n params.detailed = true;\n }\n if (filters?.page !== undefined) {\n params.page = filters.page;\n }\n if (filters?.limit !== undefined) {\n params.limit = filters.limit;\n }\n if (filters?.periodBegin) {\n params.periodBegin = filters.periodBegin;\n }\n if (filters?.periodEnd) {\n params.periodEnd = filters.periodEnd;\n }\n const queryString = BuildQueryString<RaainApiRainsCumulativesListRequest>(params);\n\n if (filters?.detailed) {\n const response = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiRainsCumulativesDetailedResponse\n >({\n key: 'rains',\n verb: 'GET',\n relativePath: rainId + '/cumulatives' + (queryString ? '?' + queryString : ''),\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n });\n return response.data;\n }\n\n const response = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiRainsCumulativesListResponse\n >({\n key: 'rains',\n verb: 'GET',\n relativePath: rainId + '/cumulatives' + (queryString ? '?' + queryString : ''),\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n });\n\n return response.data;\n } catch (e) {\n await this.checkError(e);\n }\n return {periods: [], total: 0};\n }\n\n // POST /rains/:rainId/cumulatives - Trigger cumulative computation\n async createCumulativePeriod(\n rainId: string,\n params: {\n periodBegin: Date;\n periodEnd: Date;\n provider: string;\n confName?: string;\n timeStepInMinutes?: number;\n }\n ): Promise<RaainApiRainsCumulativesCreateResponse> {\n try {\n const body: RaainApiRainsCumulativesCreateRequest = {\n periodBegin: params.periodBegin.toISOString(),\n periodEnd: params.periodEnd.toISOString(),\n provider: params.provider,\n confName: params.confName || 'admin',\n timeStepInMinutes: params.timeStepInMinutes || 5,\n };\n\n const response = await this.fidjService.sendOnEndpoint<\n RaainApiRainsCumulativesCreateRequest,\n RaainApiRainsCumulativesCreateResponse\n >({\n key: 'rains',\n verb: 'POST',\n relativePath: rainId + '/cumulatives',\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n data: body,\n });\n\n return response.data;\n } catch (e) {\n await this.checkError(e);\n }\n return null;\n }\n\n // === Gauges ===\n\n async getGauge(gaugeId: string): Promise<GaugeNode> {\n try {\n const resp = await this.fidjService.sendOnEndpoint<void, RaainApiGaugesFindOneResponse>(\n {\n key: 'gauges',\n verb: 'GET',\n relativePath: gaugeId,\n defaultKeyUrl: this.defaultUrlForAPI + '/gauges',\n }\n );\n return new GaugeNode(resp.data);\n } catch (e) {\n await this.checkError(e);\n }\n }\n\n async getGauges(\n rainId: string,\n aroundLatLng: LatLng,\n pageCount = 1\n ): Promise<Array<GaugeNodeFilter>> {\n const baseParams: RaainApiGaugesFindAllMineRequest = {\n aroundLatLng: `${aroundLatLng.lat},${aroundLatLng.lng}`,\n rainId,\n };\n if (this.asTeamId) {\n baseParams.teamId = this.asTeamId;\n }\n\n const gauges = [];\n try {\n for (let count = 1; count <= pageCount; count++) {\n const params: RaainApiGaugesFindAllMineRequest = {...baseParams, page: count};\n const queryString = BuildQueryString<RaainApiGaugesFindAllMineRequest>(params);\n const resp = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiGaugesFindAllMineResponse\n >({\n key: 'gauges',\n verb: 'GET',\n relativePath: queryString ? '?' + queryString : '',\n defaultKeyUrl: this.defaultUrlForAPI + '/gauges',\n });\n\n for (const gauge of resp.data.gauges) {\n gauges.push(new GaugeNodeFilter(gauge));\n }\n }\n } catch (e) {\n await this.checkError(e);\n }\n return gauges;\n }\n\n async getGaugeMeasures(gaugeId: string, begin: Date, end: Date): Promise<GaugeMeasure[]> {\n const params: RaainApiGaugesFindMeasuresRequest = {\n begin: begin.toISOString(),\n end: end.toISOString(),\n };\n const queryString = BuildQueryString<RaainApiGaugesFindMeasuresRequest>(params);\n const resp = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiGaugesFindMeasuresResponse\n >({\n key: 'gauges',\n verb: 'GET',\n relativePath: gaugeId + '/measures' + (queryString ? '?' + queryString : ''),\n defaultKeyUrl: this.defaultUrlForAPI + '/gauges',\n });\n\n const gaugeMeasures: GaugeMeasure[] = [];\n for (const gaugeMeasure of resp.data.gaugeMeasures) {\n gaugeMeasures.push(new GaugeMeasure(gaugeMeasure));\n }\n return gaugeMeasures;\n }\n\n async getProviders(\n rainId: string\n ): Promise<{providers: string[]; timeStepInMinutes: number[]}> {\n try {\n const response = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiRainsProvidersResponse\n >({\n verb: 'GET',\n key: 'rains',\n relativePath: rainId + '/providers',\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n });\n\n return {\n providers: response.data.providers || [],\n timeStepInMinutes: response.data.timeStepInMinutes?.length\n ? response.data.timeStepInMinutes\n : [5, 10, 15, 30, 60],\n };\n } catch (e) {\n console.error('getProviders error:', e);\n return {\n providers: [],\n timeStepInMinutes: [5, 10, 15, 30, 60],\n };\n }\n }\n\n protected setRoles(roles: Array<string>): void {\n this.roles = roles;\n }\n\n private setDateComponents(\n date: Date,\n c: {\n year?: number;\n month?: number;\n day?: number;\n hour?: number;\n minute?: number;\n }\n ): string {\n const dateToShow = new Date(date);\n\n if (c.year !== undefined) {\n dateToShow.setUTCFullYear(c.year);\n }\n if (c.month !== undefined) {\n dateToShow.setUTCMonth(c.month - 1);\n }\n if (c.day !== undefined) {\n dateToShow.setUTCDate(c.day);\n }\n if (c.hour !== undefined) {\n dateToShow.setUTCHours(c.hour);\n }\n if (c.minute !== undefined) {\n dateToShow.setUTCMinutes(c.minute);\n }\n\n return dateToShow.toISOString();\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport {ProfileService} from '../profile.service';\nimport {\n CumulativePeriod,\n IndividualCumulative,\n RaainApiRainsCumulativesDetailedResponse,\n RaainApiRainsCumulativesListResponse,\n} from 'raain-model';\n\nexport interface CumulativeSelection {\n periodBegin: Date;\n periodEnd: Date;\n windowInMinutes: number;\n cumulativeId?: string;\n cumulativeDate?: Date;\n}\n\n@Component({\n selector: 'cumulative-selector',\n templateUrl: './cumulative-selector.component.html',\n styleUrls: ['./cumulative-selector.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CumulativeSelectorComponent implements OnInit {\n @Input() rainId: string;\n @Input() currentPeriodBegin: Date;\n @Input() currentPeriodEnd: Date;\n @Input() provider: string;\n @Input() timeStepInMinutes: number = 5;\n @Input() isAdmin: boolean = false;\n\n @Output() periodSelected = new EventEmitter<CumulativeSelection>();\n @Output() cancelled = new EventEmitter<void>();\n\n availablePeriods: CumulativePeriod[] = [];\n baseCumulatives: CumulativePeriod = null;\n loading = true;\n creating = false;\n creationProgress = '';\n errorMessage = '';\n\n coveragePercent = 0;\n canCreateNew = false;\n currentWindowMinutes = 0;\n\n expandedPeriods: Map<string, IndividualCumulative[]> = new Map();\n loadingExpanded: Set<string> = new Set();\n\n private readonly POLL_TIMEOUT_MS = 900000; // 900 seconds\n private readonly POLL_INTERVAL_MS = 3000;\n\n constructor(\n private profileService: ProfileService,\n private cdr: ChangeDetectorRef\n ) {}\n\n async ngOnInit() {\n this.currentWindowMinutes = Math.round(\n (this.currentPeriodEnd.getTime() - this.currentPeriodBegin.getTime()) / 60000\n );\n await this.loadAvailablePeriods();\n }\n\n async loadAvailablePeriods() {\n this.loading = true;\n this.errorMessage = '';\n this.cdr.markForCheck();\n\n try {\n // Fetch all cumulative periods (admin sees all, non-admin sees only customer-launched)\n const response = (await this.profileService.getCumulativePeriods(this.rainId, {\n provider: this.provider,\n forced: this.isAdmin,\n periodBegin: this.currentPeriodBegin.toISOString(),\n periodEnd: this.currentPeriodEnd.toISOString(),\n })) as RaainApiRainsCumulativesListResponse;\n\n // Filter for existing custom cumulatives (window > 0)\n this.availablePeriods = response.periods.filter((p) => p.windowInMinutes > 0);\n\n // Get base cumulatives (window = 0) to check coverage\n this.baseCumulatives = response.periods.find((p) => p.windowInMinutes === 0);\n\n this.calculateCoverage();\n } catch (e) {\n this.errorMessage = 'Failed to load cumulative periods';\n console.error('Error loading cumulative periods:', e);\n }\n\n this.loading = false;\n this.cdr.markForCheck();\n }\n\n calculateCoverage() {\n if (!this.baseCumulatives || !this.baseCumulatives.count) {\n this.coveragePercent = 0;\n this.canCreateNew = false;\n return;\n }\n\n // Calculate expected number of base cumulatives (always 5-min granularity)\n const baseTimeStep = 5;\n const expectedCount = Math.ceil(this.currentWindowMinutes / baseTimeStep);\n\n if (this.baseCumulatives.count >= expectedCount) {\n this.coveragePercent = 100;\n } else {\n this.coveragePercent = Math.round((this.baseCumulatives.count / expectedCount) * 100);\n }\n\n // Allow creation as long as some base data exists\n this.canCreateNew = this.coveragePercent > 0;\n }\n\n selectPeriod(period: CumulativePeriod) {\n this.periodSelected.emit({\n periodBegin: new Date(period.periodBegin),\n periodEnd: new Date(period.periodEnd),\n windowInMinutes: period.windowInMinutes,\n });\n }\n\n async toggleExpand(period: CumulativePeriod) {\n const key = `${period.windowInMinutes}`;\n if (this.expandedPeriods.has(key)) {\n this.expandedPeriods.delete(key);\n this.cdr.markForCheck();\n return;\n }\n\n this.loadingExpanded.add(key);\n this.cdr.markForCheck();\n\n try {\n const response = (await this.profileService.getCumulativePeriods(this.rainId, {\n provider: this.provider,\n windowInMinutes: period.windowInMinutes,\n forced: this.isAdmin,\n detailed: true,\n })) as RaainApiRainsCumulativesDetailedResponse;\n\n this.expandedPeriods.set(key, response.cumulatives || []);\n } catch (e) {\n console.error('Error loading individual cumulatives:', e);\n this.expandedPeriods.set(key, []);\n }\n\n this.loadingExpanded.delete(key);\n this.cdr.markForCheck();\n }\n\n selectIndividualCumulative(item: IndividualCumulative) {\n const endDate = new Date(item.date);\n const beginDate = new Date(endDate.getTime() - item.windowInMinutes * 60000);\n\n this.periodSelected.emit({\n periodBegin: beginDate,\n periodEnd: endDate,\n windowInMinutes: item.windowInMinutes,\n cumulativeId: item.id,\n cumulativeDate: endDate,\n });\n }\n\n isExpanded(period: CumulativePeriod): boolean {\n return this.expandedPeriods.has(`${period.windowInMinutes}`);\n }\n\n isLoadingExpanded(period: CumulativePeriod): boolean {\n return this.loadingExpanded.has(`${period.windowInMinutes}`);\n }\n\n getExpandedItems(period: CumulativePeriod): IndividualCumulative[] {\n return this.expandedPeriods.get(`${period.windowInMinutes}`) || [];\n }\n\n getItemPeriodBegin(item: IndividualCumulative): Date {\n const endDate = new Date(item.date);\n return new Date(endDate.getTime() - item.windowInMinutes * 60000);\n }\n\n async createNewPeriod() {\n if (!this.canCreateNew || this.creating) {\n return;\n }\n\n this.creating = true;\n this.creationProgress = 'Starting cumulative computation...';\n this.errorMessage = '';\n this.cdr.markForCheck();\n\n try {\n // Trigger cumulative creation\n const result = await this.profileService.createCumulativePeriod(this.rainId, {\n periodBegin: this.currentPeriodBegin,\n periodEnd: this.currentPeriodEnd,\n provider: this.provider,\n timeStepInMinutes: this.timeStepInMinutes,\n });\n\n if (!result) {\n throw new Error('Failed to trigger cumulative computation');\n }\n\n this.creationProgress = `Jobs queued. Polling for completion...`;\n this.cdr.markForCheck();\n\n // Poll for completion\n const success = await this.pollForCompletion();\n\n if (success) {\n this.periodSelected.emit({\n periodBegin: this.currentPeriodBegin,\n periodEnd: this.currentPeriodEnd,\n windowInMinutes: this.currentWindowMinutes,\n });\n } else {\n this.errorMessage = 'Timeout waiting for cumulative computation';\n }\n } catch (e) {\n this.errorMessage = `Error: ${e.message || 'Unknown error'}`;\n console.error('Error creating cumulative:', e);\n }\n\n this.creating = false;\n this.cdr.markForCheck();\n }\n\n private async pollForCompletion(): Promise<boolean> {\n const startTime = Date.now();\n\n while (Date.now() - startTime < this.POLL_TIMEOUT_MS) {\n try {\n const progress = await this.profileService.getRainProgress(this.rainId);\n\n if (progress === 0) {\n // Trigger background fetch from raain-ground via timeframeCumulative\n await this.profileService.getRainTimeframe(\n this.rainId,\n this.currentPeriodBegin,\n this.currentPeriodEnd,\n this.isAdmin,\n this.provider,\n this.timeStepInMinutes,\n this.currentWindowMinutes\n );\n\n // Check if cumulative now exists (admin sees all cumulatives)\n const response = (await this.profileService.getCumulativePeriods(this.rainId, {\n provider: this.provider,\n windowInMinutes: this.currentWindowMinutes,\n forced: this.isAdmin,\n })) as RaainApiRainsCumulativesListResponse;\n\n const found = response.periods.find(\n (p) => p.windowInMinutes === this.currentWindowMinutes\n );\n\n if (found) {\n return true;\n }\n }\n\n const elapsed = Math.round((Date.now() - startTime) / 1000);\n this.creationProgress = `Computing... (${elapsed}s, queue: ${progress})`;\n this.cdr.markForCheck();\n\n await this.sleep(this.POLL_INTERVAL_MS);\n } catch (e) {\n console.warn('Poll error:', e);\n await this.sleep(this.POLL_INTERVAL_MS);\n }\n }\n\n return false;\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n cancel() {\n this.cancelled.emit();\n }\n\n formatPeriod(period: CumulativePeriod): string {\n const begin = new Date(period.periodBegin);\n const end = new Date(period.periodEnd);\n return `${begin.toLocaleString()} → ${end.toLocaleString()}`;\n }\n\n formatWindow(minutes: number): string {\n if (minutes < 60) {\n return `${minutes} min`;\n }\n const hours = minutes / 60;\n return hours === 1 ? '1 hour' : `${hours} hours`;\n }\n}\n","<div class=\"cumulative-selector-overlay\">\n <div class=\"cumulative-selector-modal\">\n <div class=\"modal-header\">\n <h2>Select Cumulative Period</h2>\n <ion-button (click)=\"cancel()\" fill=\"clear\">\n <ion-icon name=\"close\"></ion-icon>\n </ion-button>\n </div>\n\n <div class=\"modal-content\">\n <!-- Loading state -->\n <div *ngIf=\"loading\" class=\"loading-state\">\n <ion-spinner name=\"crescent\"></ion-spinner>\n <p>Loading available periods...</p>\n </div>\n\n <!-- Error message -->\n <div *ngIf=\"errorMessage\" class=\"error-message\">\n <ion-icon name=\"warning-outline\"></ion-icon>\n <span>{{ errorMessage }}</span>\n </div>\n\n <!-- Available periods list -->\n <div *ngIf=\"!loading && availablePeriods.length > 0\" class=\"periods-section\">\n <h3>Available Cumulative Periods</h3>\n <ion-list>\n <ng-container *ngFor=\"let period of availablePeriods\">\n <!-- Period header (click to expand) -->\n <ion-item (click)=\"toggleExpand(period)\" [disabled]=\"creating\" button>\n <ion-icon [name]=\"isExpanded(period) ? 'chevron-down' : 'chevron-forward'\"\n slot=\"start\"></ion-icon>\n <ion-label>\n <h2>{{ formatWindow(period.windowInMinutes) }}</h2>\n <p>{{ formatPeriod(period) }}</p>\n <p class=\"count-info\">{{ period.count }} cumulative(s) - click to expand</p>\n </ion-label>\n </ion-item>\n\n <!-- Expanded: individual cumulatives -->\n <div *ngIf=\"isExpanded(period)\" class=\"expanded-items\">\n <ion-spinner *ngIf=\"isLoadingExpanded(period)\" name=\"crescent\"></ion-spinner>\n <ion-list *ngIf=\"!isLoadingExpanded(period)\" class=\"nested-list\">\n <ion-item (click)=\"selectIndividualCumulative(item)\"\n *ngFor=\"let item of getExpandedItems(period)\"\n [disabled]=\"creating\"\n button\n class=\"nested-item\">\n <ion-icon name=\"time-outline\" slot=\"start\"></ion-icon>\n <ion-label>\n <h3>{{ getItemPeriodBegin(item) | date:'HH:mm' }}\n - {{ item.date | date:'HH:mm' }}</h3>\n </ion-label>\n <ion-icon name=\"chevron-forward\" slot=\"end\"></ion-icon>\n </ion-item>\n <ion-item *ngIf=\"getExpandedItems(period).length === 0\" class=\"nested-item\">\n <ion-label>\n <p>No individual cumulatives found</p>\n </ion-label>\n </ion-item>\n </ion-list>\n </div>\n </ng-container>\n </ion-list>\n </div>\n\n <!-- No periods available -->\n <div *ngIf=\"!loading && availablePeriods.length === 0\" class=\"no-periods\">\n <ion-icon name=\"information-circle-outline\"></ion-icon>\n <p>No cumulative periods available yet.</p>\n </div>\n\n <!-- Create new section (admin only) -->\n <div *ngIf=\"!loading && isAdmin\" class=\"create-section\">\n <h3>Create New Cumulative</h3>\n <div class=\"create-info\">\n <p>\n <strong>Period:</strong>\n {{ currentPeriodBegin?.toLocaleString() }} → {{ currentPeriodEnd?.toLocaleString() }}\n </p>\n <p>\n <strong>Window:</strong> {{ formatWindow(currentWindowMinutes) }}\n </p>\n <p *ngIf=\"baseCumulatives\" [class.coverage-error]=\"coveragePercent === 0\"\n [class.coverage-ok]=\"coveragePercent >= 100\"\n [class.coverage-warn]=\"coveragePercent > 0 && coveragePercent < 100\"\n class=\"coverage-info\">\n <ion-icon [name]=\"coveragePercent >= 100 ? 'checkmark-circle' : 'alert-circle'\"></ion-icon>\n Base data coverage: {{ coveragePercent }}%\n </p>\n <p *ngIf=\"!baseCumulatives\" class=\"coverage-error\">\n <ion-icon name=\"alert-circle\"></ion-icon>\n No base cumulatives available\n </p>\n </div>\n\n <!-- Creation progress -->\n <div *ngIf=\"creating\" class=\"creation-progress\">\n <ion-spinner name=\"crescent\"></ion-spinner>\n <span>{{ creationProgress }}</span>\n </div>\n\n <ion-button (click)=\"createNewPeriod()\" [disabled]=\"!canCreateNew || creating\"\n expand=\"block\"\n id=\"createNewCumulative\">\n <ion-icon name=\"add-circle-outline\" slot=\"start\"></ion-icon>\n Create {{ formatWindow(currentWindowMinutes) }} Cumulative\n </ion-button>\n\n <p *ngIf=\"!canCreateNew && !creating\" class=\"create-hint\">\n Create is disabled because no base 5-min cumulatives exist for the selected period.\n </p>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <ion-button (click)=\"cancel()\" [disabled]=\"creating\" fill=\"outline\">\n Cancel\n </ion-button>\n </div>\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport {IonToggle} from '@ionic/angular';\nimport {ProfileService} from '../profile.service';\nimport {\n CartesianMeasureValue,\n QualityIndicator,\n RaainApiRainsCumulativesListResponse,\n RainNode,\n TeamNode,\n} from 'raain-model';\nimport {\n DateRange,\n ElementsFactory,\n MapLatLng,\n ModelPerformanceElement,\n ModelPerformanceElementInput,\n TimeframeContainers,\n} from 'raain-ui';\nimport {CompareManager, FrameSet, mapDateRangeToString, RefreshManager} from '../tools';\nimport {XYType} from '../xytype';\nimport {RadarService} from '../radar.service';\nimport {Storage} from '../storage.service';\nimport {CumulativeSelection} from '../cumulative-selector/cumulative-selector.component';\n\nlet TEST_DETECTION = 0;\n\n@Component({\n selector: 'raain-details',\n templateUrl: 'raain-details.component.html',\n styleUrls: ['raain-details.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RaainDetailsComponent implements OnDestroy, OnChanges {\n private static readonly HOUR_MS = 60 * 60000;\n private static readonly DAY_MS = 24 * 60 * 60 * 1000;\n\n @Input()\n public toggleAdmin: boolean;\n @Input()\n public rainNode: RainNode;\n @Input()\n public compareManager: CompareManager;\n @Input()\n public refreshManager: RefreshManager;\n @Input()\n public profileService: ProfileService;\n @Input()\n public radarService: RadarService;\n @Input()\n public scaleLabel = 'mm';\n @Input()\n public showCreateMissingImages = true;\n @Input()\n public showCumulativeCompare = true;\n @Input()\n public showDateRange = true;\n @Input()\n public showCumulativeToggle = true;\n @Input()\n public forceTimeStep: number;\n\n public availableProviders: string[] = [];\n public availableTimeSteps: number[] = [];\n public availableTimeStepOptions: {label: string; value: string}[] = [];\n public selectedProvider: string;\n public selectedTimeStep: number;\n public timeStepMode: 'eq' | 'lte' = 'eq';\n\n public periodBegin: Date;\n public periodEnd: Date;\n\n // public UI variables\n public teamNode: TeamNode;\n public periodBeginAsString: string;\n public periodEndAsString: string;\n public periodDurationAsString: string;\n public dateShown: Date;\n public coordinates: MapLatLng;\n public borders: MapLatLng[];\n public timeframeContainers: TimeframeContainers;\n public currentTimeframeTarget: FrameSet;\n public timeframeDates: Date[];\n public countPoints: {\n label: string;\n style: string;\n values: {date: Date; value: number}[];\n }[];\n public countsPeriod: {\n percentImages?: XYType[];\n queueRunning?: number;\n progress?: number;\n };\n\n public gaugeSelectedPoints: {\n label: string;\n style: string;\n values: {date: Date; value: number}[];\n }[];\n public toggleHistory: boolean;\n public toggleMap: boolean;\n public toggleCompare: boolean;\n public toggleGaugeMeasures: boolean;\n public toggleRemoveCompareDuplicate: boolean;\n public toggleCumulative: boolean;\n public refreshInProgress: boolean;\n public sumDetails: string;\n public showPixelMarkers: boolean = false;\n public isAdmin: boolean;\n public showFullError: boolean;\n public showQualityModal: boolean;\n public qualityIndicators: QualityIndicator[] = [];\n public qualityIndicatorsLoading: boolean = false;\n public showCumulativeSelector: boolean = false;\n public creatingCumulative: boolean = false;\n public showQualityDetails: boolean = false;\n public modelPerformanceData: Array<{\n name: string;\n date: Date;\n KPEi: number | null;\n KPE1: number | null;\n }> = [];\n private performanceChart: ModelPerformanceElement;\n\n @ViewChild('cumulativeToggle') cumulativeToggleRef: IonToggle;\n @ViewChild('performanceCanvas') performanceCanvasRef: any;\n\n // Cached computed values (to avoid method calls in templates)\n public percentOfComputations: number = 0;\n public presentComputationCount: number = 0;\n public expectedComputationCount: number = 0;\n public percentOfImages: number = 0;\n public truncatedError: string = '';\n public cumulativeDurationInMinutes: number = 10;\n protected readonly DateRange = DateRange;\n\n constructor(\n protected storage: Storage,\n private readonly cdr: ChangeDetectorRef\n ) {}\n\n private static PeriodDisplay(date: Date | string) {\n let d = new Date();\n if (date) {\n d = new Date(date);\n const userTimezoneOffset = d.getTimezoneOffset() * 60000;\n d = new Date(d.getTime() - userTimezoneOffset);\n }\n const exampleFormattedDate = '2017-06-01T08:30';\n return d.toISOString().substring(0, exampleFormattedDate.length);\n }\n\n private static DateUTC(date: string) {\n const hasISOFormat = date.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$/);\n let d = new Date(date);\n if (!hasISOFormat) {\n const userTimezoneOffset = d.getTimezoneOffset() * 60000;\n d = new Date(d.getTime() - userTimezoneOffset);\n }\n return d;\n }\n\n private static MapCountToDateValue(c: XYType): {date: Date; value: number} {\n return {\n date: RaainDetailsComponent.DateUTC(c.name),\n value: Math.min(100, c.x),\n };\n }\n\n async openQualityModal() {\n this.showQualityModal = true;\n this.qualityIndicatorsLoading = true;\n this.qualityIndicators = [];\n this.modelPerformanceData = [];\n this.cdr.markForCheck();\n\n if (this.rainNode?.id) {\n const result = await this.profileService.getIndicators(this.rainNode.id);\n this.qualityIndicators = result.indicators;\n this.modelPerformanceData = this.buildModelPerformanceData(result.indicators);\n }\n\n this.qualityIndicatorsLoading = false;\n this.cdr.markForCheck();\n\n if (this.modelPerformanceData.length > 0) {\n setTimeout(() => this.renderPerformanceChart(), 100);\n }\n }\n\n closeQualityModal() {\n this.showQualityModal = false;\n if (this.performanceChart?.chart) {\n this.performanceChart.chart.destroy();\n this.performanceChart = null;\n }\n }\n\n buildModelPerformanceData(\n indicators: QualityIndicator[]\n ): Array<{name: string; date: Date; KPEi: number | null; KPE1: number | null}> {\n // Group by version combo (computingVersion + qualityVersion)\n const grouped = new Map<string, {date: Date; KPEi: number | null; KPE1: number | null}>();\n\n for (const ind of indicators) {\n const key = `C${ind.computingVersion}-Q${ind.qualityVersion}`;\n if (!grouped.has(key)) {\n grouped.set(key, {date: new Date(ind.lastUpdatedAt), KPEi: null, KPE1: null});\n }\n const entry = grouped.get(key);\n\n // Update date to latest\n const indDate = new Date(ind.lastUpdatedAt);\n if (indDate.getTime() > entry.date.getTime()) {\n entry.date = indDate;\n }\n\n if (ind.timeStepInMinutes === 5) {\n entry.KPEi = ind.averageQuality;\n } else if (ind.timeStepInMinutes === 60) {\n entry.KPE1 = ind.averageQuality;\n }\n }\n\n return Array.from(grouped.entries()).map(([name, data]) => ({\n name,\n date: data.date,\n KPEi: data.KPEi,\n KPE1: data.KPE1,\n }));\n }\n\n private renderPerformanceChart() {\n const canvas = this.performanceCanvasRef?.nativeElement;\n if (!canvas) {\n return;\n }\n const factory = new ElementsFactory();\n this.performanceChart = factory.createModelPerformance(\n canvas,\n new ModelPerformanceElementInput(this.modelPerformanceData)\n );\n }\n\n formatDate(dateStr: string): string {\n const date = new Date(dateStr);\n return (\n date.toLocaleDateString() +\n ' ' +\n date.toLocaleTimeString([], {hour: '2-digit', minute: '2-digit'})\n );\n }\n\n public async fetchData(focusDate: Date, focusRange: DateRange) {\n const values = [];\n for (let i = 0; i < 10; i++) {\n values.push({date: new Date(2020 + i, 0), value: 10});\n }\n const fakeData = [\n {\n label: '% Rainy',\n style: 'bar',\n values,\n },\n {\n label: '% Images',\n style: 'bar',\n values,\n },\n {\n label: '% Computations',\n style: 'bar',\n values,\n },\n ];\n\n const range = mapDateRangeToString(focusRange);\n let data = fakeData;\n if (!this.rainNode) {\n return data;\n }\n\n if (focusRange === DateRange.CENTURY) {\n // fake\n } else if (focusRange === DateRange.HOUR) {\n const hourCounts = await this.profileService.getCountsHour(this.rainNode.id, {\n periodBegin: focusDate,\n });\n\n data = [\n {\n label: 'Rainy Count',\n style: 'line',\n values: hourCounts.rainyCount.map(RaainDetailsComponent.MapCountToDateValue),\n },\n {\n label: '% Images',\n style: 'bar',\n values: hourCounts.percentImages.map(RaainDetailsComponent.MapCountToDateValue),\n },\n {\n label: '% Computations',\n style: 'bar',\n values: hourCounts.percentComputations.map(\n RaainDetailsComponent.MapCountToDateValue\n ),\n },\n {\n label: 'Rainy Sum',\n style: 'line',\n values: hourCounts.rainySum.map(RaainDetailsComponent.MapCountToDateValue),\n },\n ];\n } else {\n const counts = await this.profileService.getCounts(this.rainNode.id, {\n range,\n periodBegin: focusDate,\n });\n\n data = [\n {\n label: '% Rainy',\n style: 'bar',\n values: counts.percentRainy.map(RaainDetailsComponent.MapCountToDateValue),\n },\n {\n label: '% Images',\n style: 'bar',\n values: counts.percentImages.map(RaainDetailsComponent.MapCountToDateValue),\n },\n {\n label: '% Computations',\n style: 'bar',\n values: counts.percentComputations.map(\n RaainDetailsComponent.MapCountToDateValue\n ),\n },\n ];\n }\n\n // console.log(`fetchData DONE ${range}`, data);\n return data;\n }\n\n // Wrapper function that preserves the async nature of fetchData\n public fetchDataWrapper = async (focusDate: Date, focusRange: DateRange) => {\n return await this.fetchData(focusDate, focusRange);\n };\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.change(changes).then((ignored) => {});\n }\n\n ngOnDestroy() {\n this.cleanAll();\n }\n\n async onEnableCountHistoryTab(rain: RainNode) {\n if (!this.toggleHistory) {\n this.countPoints = [];\n }\n }\n\n async onPeriodBeginChange(event: any) {\n const newValue = event?.target?.value ?? this.periodBeginAsString;\n this.periodBegin = new Date(newValue);\n this.periodBeginAsString = RaainDetailsComponent.PeriodDisplay(this.periodBegin);\n this.storage.set('raain-periodBegin', this.periodBegin);\n\n await this.onPeriodDurationChange(event);\n }\n\n async onPeriodEndChange(event: any) {\n const newValue = event?.target?.value ?? this.periodEndAsString;\n this.periodEnd = new Date(newValue);\n this.periodEndAsString = RaainDetailsComponent.PeriodDisplay(this.periodEnd);\n this.storage.set('raain-periodEnd', this.periodEnd);\n\n this.periodBegin = new Date(\n this.periodEnd.getTime() - this.getDurationInHours() * RaainDetailsComponent.HOUR_MS\n );\n this.periodBeginAsString = RaainDetailsComponent.PeriodDisplay(this.periodBegin);\n this.storage.set('raain-periodBegin', this.periodBegin);\n this.updateRefreshManagerPeriod();\n }\n\n async onPeriodDurationChange(_event: object) {\n const durationInHours = this.getDurationInHours();\n this.periodEnd = new Date(\n this.periodBegin.getTime() + durationInHours * RaainDetailsComponent.HOUR_MS\n );\n this.periodEndAsString = RaainDetailsComponent.PeriodDisplay(this.periodEnd);\n this.storage.set('raain-periodEnd', this.periodEnd);\n this.storage.set('raain-periodDurationInHours', durationInHours);\n this.updateRefreshManagerPeriod();\n this.updateCumulativeDurationInMinutes();\n }\n\n async onDateChangeInCount(dateChanged: Date) {\n const dateString =\n dateChanged.toISOString().substring(0, 11) +\n dateChanged.toLocaleTimeString().substring(0, 5);\n this.periodDurationAsString = '1';\n\n if (this.toggleCumulative) {\n // Cumulative: select periodEnd\n this.periodEndAsString = dateString;\n await this.onPeriodEndChange(null);\n } else {\n // Granular: select periodBegin\n this.periodBeginAsString = dateString;\n await this.onPeriodBeginChange(null);\n }\n await this.refreshManager.refresh(false, this.toggleAdmin);\n }\n\n async onDateChangeInMap(dateShown: Date) {\n this.dateShown = dateShown;\n await this.fetchAndUpdateMap();\n await this.refreshManager.setReportPeriod(this.dateShown);\n }\n\n async onSumChangeInMap(sum: string) {\n this.sumDetails = sum;\n }\n\n async onGaugeSelectInMap(mapLatLng: MapLatLng) {\n const gaugesFiltered = this.compareManager.gaugesInMap.filter(\n (g) => g.lat === mapLatLng.lat && g.lng === mapLatLng.lng\n );\n if (gaugesFiltered.length !== 1) {\n return;\n }\n const gaugeSelected = gaugesFiltered[0];\n\n await this.refreshGaugeValues({id: gaugeSelected.id, name: gaugeSelected.name});\n\n await this.compareManager.selectGauge(gaugeSelected.id, 0);\n }\n\n async refreshGaugeValues(gaugeSelected: {id: string; name: string}) {\n const gaugeValueShowBegin = new Date(\n this.periodBegin.getTime() - RaainDetailsComponent.DAY_MS\n );\n const gaugeValueShowEnd = new Date(this.periodEnd.getTime() + RaainDetailsComponent.DAY_MS);\n gaugeValueShowBegin.setHours(0, 0);\n gaugeValueShowEnd.setHours(23, 59);\n\n const gaugeMeasures = await this.profileService.getGaugeMeasures(\n gaugeSelected.id,\n gaugeValueShowBegin,\n gaugeValueShowEnd\n );\n const gaugeValues: {date: Date; value: number}[] = gaugeMeasures.map((gm) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const cartesianMeasureValue = new CartesianMeasureValue(gm.values[0] as any);\n return {\n date: gm.date,\n value: cartesianMeasureValue.getCartesianValues()[0].value,\n };\n });\n this.gaugeSelectedPoints = [\n {\n label: gaugeSelected.name,\n style: 'bar',\n values: gaugeValues,\n },\n ];\n this.cdr.markForCheck();\n }\n\n async onGaugeSelectInCompare(e: {point: XYType; compareIndex: number}) {\n await this.refreshGaugeValues({id: e.point.id, name: e.point.name});\n\n await this.compareManager.selectGauge(e.point.id, e.compareIndex);\n }\n\n async onToggleMap($event: Event) {\n // if (this.toggleMap) {\n // await this.refreshMap();\n // }\n }\n\n onTogglePixelMarkers() {\n // Toggle is bound to showPixelMarkers, raain-map handles marker display\n }\n\n async onCumulativeToggleClick($event: Event) {\n console.log('[CumulativeToggle] click event', {\n currentValue: this.toggleCumulative,\n eventType: $event.type,\n target: ($event.target as HTMLElement)?.tagName,\n });\n\n $event.preventDefault();\n $event.stopPropagation();\n\n if (!this.toggleCumulative) {\n console.log('[CumulativeToggle] showing popup, toggle stays OFF');\n // Currently OFF, user wants to enable - show selector popup\n this.showCumulativeSelector = true;\n\n // Force reset the toggle visual state after ion-toggle's internal handler\n setTimeout(() => {\n if (this.cumulativeToggleRef) {\n this.cumulativeToggleRef.checked = false;\n console.log('[CumulativeToggle] force reset toggle to OFF');\n }\n }, 0);\n\n this.cdr.markForCheck();\n } else {\n console.log('[CumulativeToggle] turning OFF');\n // Currently ON, user wants to disable - direct toggle off\n this.toggleCumulative = false;\n this.storage.set('raain-toggleCumulative', false);\n this.dateShown = this.getDateBasedOnCumulativeMode(this.timeframeDates);\n this.updateCumulativeDurationInMinutes();\n if (this.toggleMap) {\n this.updateRefreshManagerPeriod();\n await this.refreshManager.refresh(false, this.toggleAdmin);\n }\n this.cdr.markForCheck();\n }\n console.log('[CumulativeToggle] after handler, toggleCumulative =', this.toggleCumulative);\n }\n\n async onCumulativePeriodSelected(selection: CumulativeSelection) {\n this.showCumulativeSelector = false;\n\n // Update period to match selection\n this.periodBegin = selection.periodBegin;\n this.periodEnd = selection.periodEnd;\n this.periodBeginAsString = RaainDetailsComponent.PeriodDisplay(this.periodBegin);\n this.periodEndAsString = RaainDetailsComponent.PeriodDisplay(this.periodEnd);\n\n // Calculate duration in hours\n const durationMs = this.periodEnd.getTime() - this.periodBegin.getTime();\n const durationHours = durationMs / RaainDetailsComponent.HOUR_MS;\n this.periodDurationAsString = String(durationHours);\n\n // Store cumulative period\n this.storage.set('raain-periodBegin', this.periodBegin);\n this.storage.set('raain-periodEnd', this.periodEnd);\n this.storage.set('raain-periodDurationInHours', durationHours);\n\n // Enable cumulative mode\n this.toggleCumulative = true;\n this.storage.set('raain-toggleCumulative', true);\n\n this.dateShown = this.getDateBasedOnCumulativeMode(this.timeframeDates);\n this.updateCumulativeDurationInMinutes();\n\n // Refresh map\n if (this.toggleMap) {\n this.updateRefreshManagerPeriod();\n await this.refreshManager.refresh(false, this.toggleAdmin);\n }\n\n this.cdr.markForCheck();\n }\n\n onCumulativeSelectorCancelled() {\n console.log('[CumulativeToggle] cancelled, toggleCumulative =', this.toggleCumulative);\n this.showCumulativeSelector = false;\n this.cdr.markForCheck();\n }\n\n updateCumulativeDurationInMinutes() {\n if (this.toggleCumulative) {\n // Cumulative mode: use period duration\n this.cumulativeDurationInMinutes = parseFloat(this.periodDurationAsString) * 60;\n } else {\n // Granular mode: use selectedTimeStep\n this.cumulativeDurationInMinutes = this.selectedTimeStep || 10;\n }\n }\n\n async onProviderChanged($event: Event) {\n this.selectedProvider = ($event as CustomEvent)?.detail?.value;\n this.storage.set('raain-selectedProvider', this.selectedProvider);\n await this.applyRefreshManagerSettings();\n }\n\n async onTimeStepChanged($event: Event) {\n const raw: string = ($event as CustomEvent)?.detail?.value;\n const [mode, stepStr] = raw.split(':');\n this.timeStepMode = mode as 'eq' | 'lte';\n this.selectedTimeStep = parseInt(stepStr, 10);\n this.storage.set('raain-selectedTimeStep', this.selectedTimeStep);\n this.storage.set('raain-timeStepMode', this.timeStepMode);\n this.updateCumulativeDurationInMinutes();\n await this.applyRefreshManagerSettings();\n }\n\n async loadProviders() {\n if (!this.rainNode?.id) {\n return;\n }\n\n try {\n const result = await this.profileService.getProviders(this.rainNode.id);\n this.availableProviders = result.providers.sort();\n this.availableTimeSteps = result.timeStepInMinutes.sort((a, b) => a - b);\n\n // Load saved selections or use defaults\n this.selectedProvider =\n this.storage.get('raain-selectedProvider') ||\n (this.availableProviders.length > 0 ? this.availableProviders[0] : 'Raain');\n this.selectedTimeStep =\n this.storage.get('raain-selectedTimeStep') ||\n (this.availableTimeSteps.length > 0 ? this.availableTimeSteps[0] : 10);\n this.timeStepMode = this.storage.get('raain-timeStepMode') || 'eq';\n } catch (e) {\n // Set fallback values\n this.availableProviders = ['Raain'];\n this.availableTimeSteps = [5, 10, 15, 30, 60];\n this.selectedProvider = 'Raain';\n this.selectedTimeStep = 10;\n this.timeStepMode = 'eq';\n }\n // Override timeStep if forced\n if (this.forceTimeStep) {\n this.selectedTimeStep = this.forceTimeStep;\n }\n\n this.buildTimeStepOptions();\n\n // Set provider and timeStep on refreshManager\n if (this.refreshManager) {\n this.refreshManager.provider = this.selectedProvider;\n this.refreshManager.timeStepInMinutes = this.selectedTimeStep;\n this.refreshManager.timeStepMode = this.timeStepMode;\n }\n this.cdr.markForCheck();\n }\n\n private buildTimeStepOptions() {\n this.availableTimeStepOptions = [];\n for (const step of this.availableTimeSteps) {\n this.availableTimeStepOptions.push({label: `= ${step} min`, value: `eq:${step}`});\n this.availableTimeStepOptions.push({label: `≤ ${step} min`, value: `lte:${step}`});\n }\n }\n\n onChangeDetectionTest(rainNode: RainNode) {\n console.log(TEST_DETECTION++, 'onChangeDetectionTest');\n return '';\n }\n\n updateTruncatedError() {\n const error = this.refreshManager?.lastError || '';\n if (error.length <= 80) {\n this.truncatedError = error;\n return;\n }\n this.truncatedError = error.substring(0, 80) + '...';\n }\n\n updateCachedValues() {\n this.updatePercentOfImages();\n this.updatePercentOfComputations();\n this.updateTruncatedError();\n this.updateCumulativeDurationInMinutes();\n }\n\n async refreshMap() {\n this.gaugeSelectedPoints = [];\n this.dateShown = this.getDateBasedOnCumulativeMode();\n this.borders = [];\n\n this.compareManager.cleanAll();\n await this.compareManager.setGaugesInMap();\n await this.refreshManager.refresh(false, this.toggleAdmin);\n this.cdr.markForCheck();\n }\n\n async triggerCumulativeCreation() {\n if (this.creatingCumulative) {\n return;\n }\n this.creatingCumulative = true;\n this.cdr.markForCheck();\n\n try {\n await this.profileService.createCumulativePeriod(this.rainNode.id, {\n periodBegin: this.periodBegin,\n periodEnd: this.periodEnd,\n provider: this.selectedProvider,\n timeStepInMinutes: this.selectedTimeStep,\n });\n\n const success = await this.pollForCumulativeCompletion();\n\n if (success) {\n await this.refreshMap();\n } else {\n console.error('triggerCumulativeCreation: timeout waiting for computation');\n }\n } catch (e) {\n console.error('triggerCumulativeCreation error:', e);\n }\n\n this.creatingCumulative = false;\n this.cdr.markForCheck();\n }\n\n async setPeriodOfNow() {\n const last30mn = new Date();\n last30mn.setMinutes(last30mn.getMinutes() - 30);\n this.periodBeginAsString =\n last30mn.toISOString().substring(0, 11) + last30mn.toLocaleTimeString().substring(0, 5);\n this.periodDurationAsString = '1';\n await this.onPeriodBeginChange(null);\n await this.refreshManager.refresh(false, this.toggleAdmin);\n }\n\n updatePercentOfImages() {\n if (!this.countsPeriod?.percentImages?.length) {\n this.percentOfImages = 0;\n return;\n }\n\n const duringPeriod = this.countsPeriod.percentImages.filter(\n (a) =>\n this.periodBegin.getTime() <= new Date(a.name).getTime() &&\n new Date(a.name).getTime() <= this.periodEnd.getTime()\n );\n const summed = duringPeriod.reduce((a, b) => a + (b.x ?? 0), 0);\n this.percentOfImages = Math.round(summed / duringPeriod.length);\n }\n\n updatePercentOfComputations() {\n const expectedCount = this.refreshManager?.getExpectedTimelineCount();\n if (!expectedCount) {\n this.percentOfComputations = 0;\n this.presentComputationCount = 0;\n this.expectedComputationCount = 0;\n return;\n }\n\n const presentCount = this.refreshManager?.getPresentTimelineCount() || 0;\n this.presentComputationCount = presentCount;\n this.expectedComputationCount = expectedCount;\n this.percentOfComputations = Math.round((presentCount / expectedCount) * 100);\n }\n\n private async pollForCumulativeCompletion(): Promise<boolean> {\n const POLL_TIMEOUT_MS = 900000;\n const POLL_INTERVAL_MS = 3000;\n const startTime = Date.now();\n const windowInMinutes = Math.round(\n (this.periodEnd.getTime() - this.periodBegin.getTime()) / 60000\n );\n\n while (Date.now() - startTime < POLL_TIMEOUT_MS) {\n try {\n const progress = await this.profileService.getRainProgress(this.rainNode.id);\n\n if (progress === 0) {\n // Trigger background fetch from raain-ground via timeframeCumulative\n await this.profileService.getRainTimeframe(\n this.rainNode.id,\n this.periodBegin,\n this.periodEnd,\n this.toggleAdmin,\n this.selectedProvider,\n this.selectedTimeStep,\n windowInMinutes\n );\n\n // Verify cumulative actually exists\n const response = (await this.profileService.getCumulativePeriods(\n this.rainNode.id,\n {\n provider: this.selectedProvider,\n windowInMinutes,\n forced: this.toggleAdmin,\n }\n )) as RaainApiRainsCumulativesListResponse;\n\n const found = response.periods.find(\n (p) => p.windowInMinutes === windowInMinutes\n );\n\n if (found) {\n return true;\n }\n }\n\n await new Promise((r) => setTimeout(r, POLL_INTERVAL_MS));\n } catch (e) {\n console.warn('Poll error:', e);\n await new Promise((r) => setTimeout(r, POLL_INTERVAL_MS));\n }\n }\n\n return false;\n }\n\n private getDateBasedOnCumulativeMode(fallbackDates?: Date[]): Date {\n if (fallbackDates?.length > 0) {\n const dateExists = fallbackDates.some((d) => d.getTime() === this.dateShown?.getTime());\n if (!dateExists) {\n return this.toggleCumulative\n ? fallbackDates[fallbackDates.length - 1]\n : fallbackDates[0];\n }\n }\n return this.toggleCumulative ? this.periodEnd : this.periodBegin;\n }\n\n private getCumulativeHours(): number {\n return this.toggleCumulative ? parseFloat(this.periodDurationAsString) : 0;\n }\n\n private getDurationInHours(): number {\n return parseFloat(this.periodDurationAsString);\n }\n\n private updateRefreshManagerPeriod() {\n this.refreshManager.cumulative = this.toggleCumulative;\n\n // Align dates to 5-minute boundaries (floor) for consistency with raain-ground\n const alignTo5minFloor = (date: Date): Date => {\n const minutes = date.getMinutes();\n const alignedMinutes = Math.floor(minutes / 5) * 5;\n return new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n alignedMinutes,\n 0,\n 0\n );\n };\n\n this.refreshManager.period = {\n begin: alignTo5minFloor(this.periodBegin),\n end: alignTo5minFloor(this.periodEnd),\n };\n }\n\n private async fetchAndUpdateMap() {\n await this.refreshManager.fetch(\n this.dateShown,\n this.toggleGaugeMeasures,\n this.getCumulativeHours()\n );\n this.currentTimeframeTarget = this.refreshManager.getTimelineSelectedFrameSet();\n this.cdr.markForCheck();\n }\n\n private async applyRefreshManagerSettings() {\n if (!this.refreshManager) {\n return;\n }\n this.refreshManager.provider = this.selectedProvider;\n this.refreshManager.timeStepInMinutes = this.selectedTimeStep;\n this.refreshManager.timeStepMode = this.timeStepMode;\n await this.refreshManager.refresh(false, this.toggleAdmin);\n }\n\n private cleanAll() {\n this.borders = [];\n this.isAdmin = false;\n this.timeframeContainers = new TimeframeContainers([]);\n this.currentTimeframeTarget = null;\n this.timeframeDates = [];\n this.countPoints = [];\n this.countsPeriod = {progress: 0, queueRunning: 0, percentImages: []};\n this.gaugeSelectedPoints = [];\n\n this.toggleHistory = false;\n this.toggleMap = true;\n this.toggleCompare = false;\n this.toggleGaugeMeasures = false;\n this.toggleRemoveCompareDuplicate = true;\n this.toggleCumulative = this.showCumulativeToggle\n ? this.storage.get('raain-toggleCumulative')\n : false;\n\n this.periodBegin = new Date(this.storage.get('raain-periodBegin'));\n this.periodEnd = new Date(this.storage.get('raain-periodEnd'));\n this.periodBeginAsString = RaainDetailsComponent.PeriodDisplay(this.periodBegin);\n this.periodEndAsString = RaainDetailsComponent.PeriodDisplay(this.periodEnd);\n const durationMs = this.periodEnd.getTime() - this.periodBegin.getTime();\n this.periodDurationAsString = '' + durationMs / RaainDetailsComponent.HOUR_MS;\n\n this.dateShown = this.getDateBasedOnCumulativeMode();\n this.refreshInProgress = false;\n this.showFullError = false;\n this.showQualityModal = false;\n this.qualityIndicators = [];\n this.qualityIndicatorsLoading = false;\n\n this.compareManager?.cleanAll();\n this.refreshManager?.cleanAll();\n }\n\n private async init() {\n this.cleanAll();\n this.updateCachedValues();\n await this.initRain();\n this.cdr.markForCheck();\n }\n\n private async initRain() {\n if (!this.rainNode) {\n return;\n }\n\n this.isAdmin = this.profileService.isAdmin();\n\n this.refreshManager.rainNode = this.rainNode;\n this.compareManager.rainNode = this.rainNode;\n\n // Load providers and set on refreshManager\n await this.loadProviders();\n\n this.refreshManager.setMethods(\n this.onRefreshInProgress.bind(this),\n this.onRefreshDone.bind(this),\n this.onFetchDone.bind(this)\n );\n\n const center = this.rainNode.getCenter();\n this.coordinates = new MapLatLng(center.lat, center.lng);\n this.teamNode = await this.profileService.getTeam(\n this.rainNode.getLink(TeamNode.TYPE).getId()\n );\n\n // Load all gauges linked to the rainNode on map\n await this.compareManager.setGaugesInMap();\n\n if (this.periodBegin && this.periodEnd) {\n this.updateRefreshManagerPeriod();\n await this.refreshManager.refresh(false, this.toggleAdmin);\n }\n }\n\n private async onRefreshInProgress(\n countPeriods: {\n percentImages?: XYType[];\n queueRunning?: number;\n progress?: number;\n },\n timeframeDates: Date[]\n ) {\n this.refreshInProgress = true;\n this.countsPeriod = countPeriods;\n this.timeframeDates = timeframeDates;\n this.updateCachedValues();\n this.cdr.markForCheck();\n }\n\n private async onRefreshDone(timeframeDates: Date[]) {\n this.timeframeDates = timeframeDates;\n this.refreshInProgress = false;\n this.updateCachedValues();\n this.cdr.markForCheck();\n\n if (this.toggleMap && timeframeDates.length > 0) {\n this.dateShown = this.getDateBasedOnCumulativeMode(timeframeDates);\n if (this.dateShown) {\n await this.fetchAndUpdateMap();\n }\n }\n }\n\n private async onFetchDone(timeframeContainers?: TimeframeContainers) {\n if (timeframeContainers) {\n this.timeframeContainers = timeframeContainers;\n }\n this.cdr.markForCheck();\n }\n\n private async change(_changes: SimpleChanges) {\n await this.init();\n }\n}\n","<!-- Main content container -->\n<div *ngIf=\"rainNode\" class=\"raain-details-container\">\n\n <!-- Period selection section -->\n <ion-card class=\"period-card\">\n <ion-card-content>\n <div class=\"period-controls\">\n <div class=\"period-row\">\n\n <ion-button (click)=\"toggleHistory = !toggleHistory; onEnableCountHistoryTab(rainNode)\"\n fill=\"outline\">\n <ion-icon name=\"calendar-clear-outline\" slot=\"start\"></ion-icon>\n <ion-icon [name]=\"toggleHistory ? 'chevron-down' : 'chevron-forward'\" slot=\"end\"></ion-icon>\n </ion-button>\n\n <div class=\"period-start ion-hide-md-down\">\n <input (change)=\"onPeriodBeginChange($event)\"\n [disabled]=\"toggleCumulative\"\n [value]=\"periodBeginAsString\"\n class=\"datetime-input\"\n type=\"datetime-local\">\n </div>\n\n <div class=\"period-duration ion-hide-md-down\">\n <ion-select (ionDismiss)=\"onPeriodDurationChange($event)\"\n [(ngModel)]=\"periodDurationAsString\"\n [disabled]=\"toggleCumulative\"\n class=\"duration-select\"\n id=\"periodDuration\"\n interface=\"popover\">\n <ion-select-option value=\"0.25\">15 minutes</ion-select-option>\n <ion-select-option value=\"0.5\">30 minutes</ion-select-option>\n <ion-select-option value=\"1\">1 hour</ion-select-option>\n <ion-select-option value=\"2\">2 hours</ion-select-option>\n <ion-select-option value=\"3\">3 hours</ion-select-option>\n <ion-select-option value=\"4\">4 hours</ion-select-option>\n <ion-select-option value=\"5\">5 hours</ion-select-option>\n <ion-select-option value=\"6\">6 hours</ion-select-option>\n <ion-select-option value=\"8\">8 hours</ion-select-option>\n <ion-select-option value=\"10\">10 hours</ion-select-option>\n <ion-select-option value=\"12\">12 hours</ion-select-option>\n <ion-select-option *ngIf=\"isAdmin\" value=\"24\">24 hours</ion-select-option>\n </ion-select>\n </div>\n\n <div class=\"period-start ion-hide-md-down\">\n <input (change)=\"onPeriodEndChange($event)\"\n [disabled]=\"toggleCumulative\"\n [value]=\"periodEndAsString\"\n class=\"datetime-input\"\n type=\"datetime-local\">\n </div>\n\n <div *ngIf=\"showCumulativeToggle\" (click)=\"onCumulativeToggleClick($event)\" class=\"toggle-cumulative\">\n <ion-label [class.text-primary]=\"toggleCumulative\">\n {{ toggleCumulative ? 'Cumulative' : 'Granular' }}\n </ion-label>\n <ion-toggle #cumulativeToggle [checked]=\"toggleCumulative\">\n </ion-toggle>\n </div>\n </div>\n\n <!-- Hidden label for change detection (uncomment to debug)\n <div class=\"hidden-label\">{{ onChangeDetectionTest(rainNode) }}</div>\n -->\n </div>\n\n <!-- Historical map section -->\n <div *ngIf=\"toggleHistory\" class=\"period-controls\">\n <raain-date-dynamic (changedDate)=\"onDateChangeInCount($event)\"\n [currentHeight]=\"300\"\n [fetchData]=\"fetchDataWrapper\"\n [points]=\"countPoints\">\n </raain-date-dynamic>\n </div>\n </ion-card-content>\n </ion-card>\n\n <!-- Map performance -->\n <ion-grid class=\"map-performance\">\n <ion-row id=\"progressAndRefresh\">\n <ion-col class=\"provider-selection\" size=\"12\" size-md=\"6\">\n <ion-button (click)=\"openQualityModal()\" class=\"quality-info-button\" fill=\"clear\">\n {{ refreshManager.rainComputationMapVersion }}\n <ion-icon name=\"help-circle-outline\" slot=\"end\"></ion-icon>\n </ion-button>\n <div *ngIf=\"availableProviders.length > 0 || availableTimeSteps.length > 0\" class=\"selection-row\">\n <ion-select (ionChange)=\"onProviderChanged($event)\"\n [value]=\"selectedProvider\"\n interface=\"popover\"\n label=\"Provider\"\n placeholder=\"Select Provider\">\n <ion-select-option *ngFor=\"let provider of availableProviders\" [value]=\"provider\">\n {{ provider }}\n </ion-select-option>\n </ion-select>\n\n <ion-select (ionChange)=\"onTimeStepChanged($event)\"\n [disabled]=\"forceTimeStep\"\n [value]=\"timeStepMode + ':' + selectedTimeStep\"\n interface=\"popover\"\n label=\"Time Step\"\n placeholder=\"Select Time Step\">\n <ion-select-option *ngFor=\"let opt of availableTimeStepOptions\" [value]=\"opt.value\">\n {{ opt.label }}\n </ion-select-option>\n </ion-select>\n\n <span class=\"computation-count\">\n {{ presentComputationCount }}/{{ expectedComputationCount }}\n <ion-button (click)=\"triggerCumulativeCreation()\"\n *ngIf=\"showCreateMissingImages\"\n [disabled]=\"creatingCumulative\" fill=\"clear\" color=\"medium\"\n id=\"createMissingImages\"\n size=\"small\">\n <ion-icon *ngIf=\"!creatingCumulative\" name=\"refresh-outline\"\n slot=\"icon-only\"></ion-icon>\n <ion-spinner *ngIf=\"creatingCumulative\" name=\"crescent\"\n slot=\"icon-only\"></ion-spinner>\n </ion-button>\n <i *ngIf=\"countsPeriod?.progress\" class=\"progress-indicator\">\n In Progress: {{ countsPeriod.progress }}...\n </i>\n </span>\n </div>\n </ion-col>\n <ion-col class=\"ion-text-right\" size=\"12\" size-md=\"6\">\n <ion-button (click)=\"refreshMap()\" [disabled]=\"refreshInProgress\" class=\"refresh-button\">\n Refresh Map\n </ion-button>\n </ion-col>\n </ion-row>\n\n <!-- status update row -->\n <ion-row>\n <!-- Progress col -->\n <ion-progress-bar\n [buffer]=\"(countsPeriod.progress / ((timeframeDates?.length || 10) +3))+0.01\"\n [style.visibility]=\"refreshInProgress ? 'visible' : 'hidden'\"\n [value]=\"countsPeriod.progress / ((timeframeDates?.length || 10) +3)\"\n color=\"primary\">\n </ion-progress-bar>\n\n <!-- Error col -->\n <ion-col (click)=\"showFullError = !showFullError\" *ngIf=\"refreshManager.lastError\" class=\"error-row\"\n size=\"12\">\n <div class=\"error-content\">\n <ion-icon class=\"error-icon\" name=\"warning-outline\"></ion-icon>\n <span [class.expanded]=\"showFullError\" class=\"error-text\">\n {{ showFullError ? refreshManager.lastError : truncatedError }}\n </span>\n <ion-icon [name]=\"showFullError ? 'chevron-up' : 'chevron-down'\" class=\"error-caret\"></ion-icon>\n </div>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <!-- Map section -->\n <ion-card class=\"map-card\">\n <ion-card-content class=\"map-content\">\n <ion-grid>\n <ion-row *ngIf=\"toggleMap && (percentOfImages || percentOfComputations)\">\n <!-- Map component -->\n <ion-col class=\"map-column\" size-lg=\"7\" size-md=\"12\">\n <div class=\"map-container\">\n <raain-map #raainMapRef\n (changedDate)=\"onDateChangeInMap($event)\"\n (changedSum)=\"onSumChangeInMap($event)\"\n (selectedMarker)=\"onGaugeSelectInMap($event)\"\n [coordinates]=\"coordinates\"\n [cumulativeDurationInMinutes]=\"cumulativeDurationInMinutes\"\n [currentHeight]=\"500\"\n [defaultDate]=\"dateShown\"\n [markers]=\"{\n borders,\n gauges: compareManager.gaugesInMap,\n gaugesInCompare: compareManager.gaugesInCompare,\n selectedGauges: compareManager.selectedGauges,\n pixels: compareManager.selectedPixels,\n pixelsSolution: compareManager.pixelsSolutions?.length ? compareManager.pixelsSolutions[0] : [],\n speeds: compareManager.speeds\n }\"\n [scaleLabel]=\"toggleCumulative ? 'mm' : scaleLabel\"\n [showNavigation]=\"!toggleCumulative\"\n [showDateRange]=\"showDateRange\"\n [showVisiblePixelMarkers]=\"showPixelMarkers\"\n [sumFn]=\"refreshManager.sumFn\"\n [sumValues]=\"refreshManager.sumValues\"\n [timeframeContainers]=\"timeframeContainers\"\n [timeframeDates]=\"timeframeDates\">\n </raain-map>\n </div>\n\n <div class=\"data-column\">\n <!-- Technical details (collapsible for cleaner UI) -->\n <details class=\"technical-details\">\n <summary>Image Details</summary>\n <div class=\"details-content\">\n <div class=\"detail-row\">\n <span class=\"detail-label\">Computed:</span>\n <span class=\"detail-value\">{{ refreshManager.rainComputationMapDoneDate | date:'yyyy-MM-dd HH:mm' }}</span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Version:</span>\n <span class=\"detail-value\">{{ refreshManager.rainComputationMapVersion }}</span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Launched by:</span>\n <span class=\"detail-value\">{{ refreshManager.rainComputationMapLaunchedBy }}</span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Time spent:</span>\n <span class=\"detail-value\">{{ refreshManager.rainComputationMapTimeSpentInMs }}\n ms</span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Date:</span>\n <span class=\"detail-value\">{{ refreshManager.rainComputationMapDate?.toISOString() }}\n | {{ refreshManager.rainComputationMapDate | date:'yyyy-MM-dd HH:mm' }}</span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Water in the map:</span>\n <span class=\"detail-value\">{{ sumDetails }}</span>\n <ion-toggle\n (ionChange)=\"onTogglePixelMarkers()\"\n [(ngModel)]=\"showPixelMarkers\"\n style=\"margin-left: 8px; transform: scale(0.7);\">\n </ion-toggle>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Source DBZ min:</span>\n <span class=\"detail-value\">{{ refreshManager.rainComputationMapOriginalMin }}</span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Source DBZ max:</span>\n <span class=\"detail-value\">{{ refreshManager.rainComputationMapOriginalMax }}</span>\n </div>\n </div>\n </details>\n </div>\n </ion-col>\n\n <!-- Data panel -->\n <ion-col *ngIf=\"!!compareManager.compareVersion && (!toggleCumulative || showCumulativeCompare)\"\n class=\"data-column\" size-lg=\"5\" size-md=\"12\">\n <div class=\"data-panel\">\n <!-- Compare stack component -->\n <div class=\"compare-stack\">\n <raain-compare-stack\n (selectedPoint)=\"onGaugeSelectInCompare($event)\"\n [compareManager]=\"compareManager\"\n [cumulative]=\"toggleCumulative\">\n </raain-compare-stack>\n </div>\n\n <!-- Technical details (collapsible for cleaner UI) -->\n <details class=\"technical-details\">\n <summary>Compare Details</summary>\n <div class=\"details-content\">\n <div [ngClass]=\"{'warning': refreshManager.rainComputationMapDoneDate?.getTime() > compareManager.currentQualityDoneDate?.getTime() + 60000}\"\n class=\"detail-row\">\n <span class=\"detail-label\">Computed:</span>\n <span class=\"detail-value\">{{ compareManager.currentQualityDoneDate | date:'yyyy-MM-dd HH:mm' }}</span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Version:</span>\n <span class=\"detail-value\">{{ compareManager.compareVersion }}</span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Launched by:</span>\n <span class=\"detail-value\">{{ compareManager.currentQualityLaunchedBy }}</span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Time spent:</span>\n <span class=\"detail-value\">{{ compareManager.currentQualityTimeSpentInMs }}\n ms</span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Gauges:</span>\n <span class=\"detail-value\">{{ compareManager.gaugesInCompare.length }}</span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Points:</span>\n <span class=\"detail-value\">{{ compareManager.globalComparePoints.length }}</span>\n </div>\n </div>\n </details>\n </div>\n </ion-col>\n </ion-row>\n <ion-row>\n <!-- Bottom progress bar -->\n <ion-progress-bar *ngIf=\"refreshInProgress\"\n [buffer]=\"(countsPeriod.progress / ((timeframeDates?.length || 10) +3))+0.01\"\n [value]=\"countsPeriod.progress / ((timeframeDates?.length || 10) +3)\"\n color=\"primary\">\n </ion-progress-bar>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n\n <!-- Gauge values section -->\n <ion-card *ngIf=\"gaugeSelectedPoints.length && gaugeSelectedPoints[0].values.length\" class=\"gauge-card\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon name=\"analytics-outline\"></ion-icon>\n Selected Gauge Data\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <raain-date-focus\n [currentHeight]=\"300\"\n [focusDate]=\"periodBegin\"\n [focusRange]=\"DateRange.DAY\"\n [points]=\"gaugeSelectedPoints\"\n [withoutAll]=\"true\">\n </raain-date-focus>\n </ion-card-content>\n </ion-card>\n\n <!-- Quality Performance Modal -->\n <div (click)=\"closeQualityModal()\" *ngIf=\"showQualityModal\" class=\"quality-modal-overlay\">\n <div (click)=\"$event.stopPropagation()\" class=\"quality-modal-content\">\n <div class=\"quality-modal-header\">\n <h2>Model Quality Performance</h2>\n <ion-button (click)=\"closeQualityModal()\" fill=\"clear\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </div>\n <div class=\"quality-modal-body\">\n <div *ngIf=\"qualityIndicatorsLoading\" class=\"quality-loading\">\n <ion-spinner name=\"crescent\"></ion-spinner>\n <span>Loading indicators...</span>\n </div>\n <div *ngIf=\"!qualityIndicatorsLoading && qualityIndicators.length === 0\" class=\"quality-empty\">\n No quality indicators available for this year.\n </div>\n\n <!-- Performance Chart -->\n <div *ngIf=\"!qualityIndicatorsLoading && modelPerformanceData.length > 0\" class=\"performance-chart-container\">\n <canvas #performanceCanvas></canvas>\n </div>\n\n <!-- Details Accordion -->\n <div *ngIf=\"!qualityIndicatorsLoading && qualityIndicators.length > 0\" class=\"quality-details-section\">\n <div (click)=\"showQualityDetails = !showQualityDetails\" class=\"quality-details-toggle\">\n <span>Details</span>\n <ion-icon [name]=\"showQualityDetails ? 'chevron-up' : 'chevron-down'\"></ion-icon>\n </div>\n <table *ngIf=\"showQualityDetails\" class=\"quality-table\">\n <thead>\n <tr>\n <th>Model</th>\n <th>Compare</th>\n <th>Gauges</th>\n <th>Period</th>\n <th>Avg Quality</th>\n <th>Updated</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let indicator of qualityIndicators\">\n <td>{{ indicator.computingVersion }}</td>\n <td>{{ indicator.qualityVersion }}</td>\n <td>{{ indicator.provider }}<br>{{ indicator.timeStepInMinutes }} min</td>\n <td>{{ formatDate(indicator.startDate) }}<br>{{ formatDate(indicator.endDate) }}</td>\n <td>{{ indicator.averageQuality | number:'1.2-2' }}</td>\n <td>{{ formatDate(indicator.lastUpdatedAt) }}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Cumulative Selector Modal -->\n <cumulative-selector (cancelled)=\"onCumulativeSelectorCancelled()\"\n (periodSelected)=\"onCumulativePeriodSelected($event)\"\n *ngIf=\"showCumulativeSelector\"\n [currentPeriodBegin]=\"periodBegin\"\n [currentPeriodEnd]=\"periodEnd\"\n [isAdmin]=\"toggleAdmin\"\n [provider]=\"selectedProvider\"\n [rainId]=\"rainNode?.id\"\n [timeStepInMinutes]=\"selectedTimeStep\">\n </cumulative-selector>\n\n</div>\n","import {Injectable} from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class Cache {\n private readonly _cache: Record<string, unknown>;\n\n constructor() {\n this._cache = {};\n }\n\n public async getValue<T>(key: string, asyncGetter: () => Promise<T>): Promise<T> {\n if (!Object.prototype.hasOwnProperty.call(this._cache, key)) {\n console.log('cache not done: ', key);\n this.putValue(key, await asyncGetter());\n } else {\n console.log('cache done: ', key);\n }\n return this._cache[key] as T;\n }\n\n public putValue<T>(key: string, value: T): void {\n this._cache[key] = value;\n\n const length = Object.getOwnPropertyNames(this._cache).length;\n if (length > 30) {\n console.warn('Pb on cache size exceed ? do a restart ?', length);\n }\n }\n}\n","import {Injectable} from '@angular/core';\nimport {\n MeasureValuePolarContainer,\n RadarPolarMeasureValue,\n RainNode,\n RainPolarMeasureValue,\n} from 'raain-model';\nimport {PolarMapValue} from 'raain-ui';\nimport {ProfileService} from './profile.service';\nimport {FrameSet} from './tools';\n\n@Injectable()\nexport class RadarService {\n constructor(private profileService: ProfileService) {}\n\n static getGeoValuesFromRainMeasures(\n measureValue: RainPolarMeasureValue,\n rain: RainNode\n ): PolarMapValue[] {\n return this.computeValues(measureValue.getPolars(), rain);\n }\n\n static getGeoValuesFromRadarMeasures(\n measureValue: RadarPolarMeasureValue,\n rain: RainNode\n ): PolarMapValue[] {\n return this.computeValues(measureValue.getPolars(), rain);\n }\n\n private static computeValues(polarMeasureValues: MeasureValuePolarContainer[], rain: RainNode) {\n const values: PolarMapValue[] = [];\n polarMeasureValues.forEach((p) => {\n const azimuth = p.azimuth;\n let distance = 0;\n const polarEdges = p.polarEdges;\n polarEdges.forEach((e) => {\n const pmv = new PolarMapValue(e, azimuth, distance);\n values.push(pmv);\n distance += p.distance;\n });\n });\n\n return values;\n }\n\n async getTimeline(rainNode: RainNode): Promise<FrameSet[]> {\n const timeline: FrameSet[] = [];\n const links = rainNode?.getLinks() ?? [];\n\n for (const link of links) {\n const cumulativeIndex = link.href.indexOf('cumulatives/');\n if (cumulativeIndex >= 0) {\n const start = cumulativeIndex + 'cumulatives/'.length;\n const str1 = link.href.substring(start);\n if (str1) {\n const splitted = str1.split('/');\n const frameDate = new Date(splitted[0]);\n const version = splitted[1];\n const rainComputationCumulativeId = splitted[2];\n const existingTargets = timeline.filter(\n (t) => t.date.getTime() === frameDate.getTime()\n );\n if (existingTargets.length) {\n existingTargets[0].rainComputationCumulativeId =\n rainComputationCumulativeId;\n } else {\n timeline.push(\n new FrameSet(frameDate, [], null, null, [], rainComputationCumulativeId)\n );\n }\n }\n }\n }\n\n return timeline;\n }\n}\n","export const CONSTANTS = {\n _RAIN_STATUS_0_NOT_STARTED: 0,\n _RAIN_STATUS_0_WAIT_FOR_INTERNAL_VALIDATION: 0.3,\n _RAIN_STATUS_1_READY_TO_COMPUTE: 0.6,\n _RAIN_STATUS_1_READY: 1,\n\n _INPUT_VALIDITY_NOT_CHECKED_YET: -1,\n _INPUT_VALIDITY_CHECK_IN_PROGRESS: -0.5,\n _INPUT_VALIDITY_NOT_VALID: 0,\n _INPUT_VALIDITY_NOT_CONFIDENT: 0.5,\n _INPUT_VALIDITY_VALID: 1,\n};\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {EventNode, RainNode} from 'raain-model';\nimport {CONSTANTS} from './shared.const';\n\n@Pipe({name: 'areStopped'})\nexport class AreStopped implements PipeTransform {\n transform(rains: RainNode[]): RainNode[] {\n return rains.filter((rain) => rain.status <= CONSTANTS._RAIN_STATUS_0_NOT_STARTED);\n }\n}\n\n@Pipe({name: 'areInProgress'})\nexport class AreInProgressPipe implements PipeTransform {\n transform(rains: RainNode[]): RainNode[] {\n return rains.filter(\n (rain) =>\n CONSTANTS._RAIN_STATUS_0_NOT_STARTED < rain.status &&\n rain.status < CONSTANTS._RAIN_STATUS_1_READY_TO_COMPUTE\n );\n }\n}\n\n@Pipe({name: 'areReady'})\nexport class AreReady implements PipeTransform {\n transform(rains: RainNode[]): RainNode[] {\n return rains.filter(\n (rain) =>\n rain.status >= CONSTANTS._RAIN_STATUS_1_READY_TO_COMPUTE &&\n rain.quality > CONSTANTS._INPUT_VALIDITY_NOT_CONFIDENT\n );\n }\n}\n\n@Pipe({name: 'isReady'})\nexport class IsReady implements PipeTransform {\n transform(rain: RainNode): RainNode {\n if (rain.status >= CONSTANTS._RAIN_STATUS_1_READY_TO_COMPUTE) {\n return rain;\n }\n return null;\n }\n}\n\n@Pipe({name: 'isNotReady'})\nexport class IsNotReady implements PipeTransform {\n transform(rain: RainNode): RainNode {\n if (rain.status < CONSTANTS._RAIN_STATUS_1_READY_TO_COMPUTE) {\n return rain;\n }\n return null;\n }\n}\n\n@Pipe({name: 'waitForValidation'})\nexport class WaitForValidation implements PipeTransform {\n transform(rain: RainNode): RainNode {\n if (rain.status === CONSTANTS._RAIN_STATUS_1_READY_TO_COMPUTE) {\n return rain;\n }\n return null;\n }\n}\n\n@Pipe({name: 'hasGoodQuality'})\nexport class HasGoodQuality implements PipeTransform {\n transform(rain: RainNode): RainNode {\n if (rain.quality > CONSTANTS._INPUT_VALIDITY_NOT_CONFIDENT) {\n return rain;\n }\n return null;\n }\n}\n\n@Pipe({name: 'hasNotGoodQuality'})\nexport class HasNotGoodQuality implements PipeTransform {\n transform(rain: RainNode): RainNode {\n if (rain.quality < CONSTANTS._INPUT_VALIDITY_VALID) {\n return rain;\n }\n return null;\n }\n}\n\n@Pipe({name: 'progressValue'})\nexport class ProgressValue implements PipeTransform {\n transform(rain: RainNode): number {\n if (rain.status < 0) {\n return 0;\n } else if (rain.status > 1) {\n return 1;\n }\n return rain.status;\n }\n}\n\n@Pipe({name: 'progressBuffer'})\nexport class ProgressBuffer implements PipeTransform {\n transform(rain: RainNode): number {\n if (rain.quality < 0) {\n return 0;\n } else if (rain.quality > 1) {\n return 1;\n }\n return rain.quality;\n }\n}\n\n@Pipe({\n name: 'haveNotBeenRed',\n pure: false,\n})\nexport class HaveNotBeenRed implements PipeTransform {\n transform(events: EventNode[]): EventNode[] {\n return events.filter((event) => !event.red);\n }\n}\n","import {Directive, ElementRef, OnDestroy, OnInit} from '@angular/core';\nimport {ProfileService} from './profile.service';\nimport {Router} from '@angular/router';\n\n// Helper function to pause execution for a specified time in milliseconds\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n@Directive({\n selector: 'ion-toolbar',\n})\nexport class ProfileIconDirective implements OnInit, OnDestroy {\n private refreshTimer: any;\n private profileButton: HTMLElement;\n private isConnected: boolean = true;\n\n constructor(\n private el: ElementRef,\n private profileService: ProfileService,\n private router: Router\n ) {}\n\n ngOnInit() {\n // Check if the user is logged in and if the toolbar is not inside a modal\n if (this.profileService.isLoggedIn() && !this.isInsideModal()) {\n // Get the email from the profile service\n const email = this.profileService.getEmail();\n\n // Create the profile button element\n const profileButtons = document.createElement('ion-buttons');\n profileButtons.setAttribute('slot', 'primary');\n\n // Create the button\n const button = document.createElement('ion-button');\n\n // Store references for later use\n this.profileButton = button;\n\n // Create the icon\n const icon = document.createElement('ion-icon');\n icon.setAttribute('name', 'person-circle-outline');\n icon.setAttribute('slot', 'start');\n\n // Create the label\n const label = document.createElement('ion-label');\n label.textContent = email;\n\n // Assemble the button\n button.appendChild(icon);\n button.appendChild(label);\n\n // Add click event listener to the button\n button.addEventListener('click', () => {\n this.navigateToProfile();\n });\n\n // Assemble the buttons container\n profileButtons.appendChild(button);\n\n // Append the buttons to the toolbar\n this.el.nativeElement.appendChild(profileButtons);\n\n // Start the background refresh timer (check every minute)\n this.startBackgroundRefresh();\n }\n }\n\n ngOnDestroy() {\n // Clear the timer when the directive is destroyed\n if (this.refreshTimer) {\n clearInterval(this.refreshTimer);\n this.refreshTimer = null;\n }\n }\n\n navigateToProfile() {\n this.router.navigateByUrl('/profile');\n }\n\n private startBackgroundRefresh() {\n this.refreshTimer = setInterval(() => {\n this.checkAndRefreshConnection();\n }, 20000);\n }\n\n private checkAndRefreshConnection() {\n this.performConnectionRefresh();\n }\n\n private showSkeletonText() {\n if (this.profileButton) {\n this.profileButton.style.opacity = '0.7';\n this.profileButton.style.transition = 'opacity 0.3s ease';\n }\n }\n\n private hideSkeletonText() {\n if (this.profileButton) {\n this.profileButton.style.opacity = '1';\n }\n }\n\n private async performConnectionRefresh() {\n // Show skeleton text and hide button during loading\n this.showSkeletonText();\n\n // Connection successful\n this.isConnected = await this.profileService.isConnected();\n\n if (this.isConnected) {\n // Call the refresh function\n const needsConnectionRefresh = this.profileService.needsConnectionRefresh();\n const isLoggedIn = this.profileService.isLoggedIn();\n if (needsConnectionRefresh || !isLoggedIn) {\n await this.profileService.connectionRefresh();\n }\n await sleep(1000);\n }\n this.updateButtonState();\n\n // Hide skeleton text and show button when loading is complete\n this.hideSkeletonText();\n }\n\n private updateButtonState() {\n if (this.profileButton) {\n if (this.isConnected) {\n // Enable button\n this.profileButton.removeAttribute('disabled');\n this.profileButton.removeAttribute('title');\n } else {\n // Disable button and add tooltip\n this.profileButton.setAttribute('disabled', 'true');\n this.profileButton.setAttribute('title', 'Profile unavailable - No connection');\n }\n }\n }\n\n // Helper method to check if the toolbar is inside a modal\n private isInsideModal(): boolean {\n let parent = this.el.nativeElement.parentElement;\n\n // Traverse up the DOM tree to find if any parent is an ion-modal\n while (parent) {\n if (parent.tagName && parent.tagName.toLowerCase() === 'ion-modal') {\n return true;\n }\n parent = parent.parentElement;\n }\n\n return false;\n }\n}\n","import {NgModule} from '@angular/core';\nimport {\n AreInProgressPipe,\n AreReady,\n AreStopped,\n HasGoodQuality,\n HasNotGoodQuality,\n HaveNotBeenRed,\n IsNotReady,\n IsReady,\n ProgressBuffer,\n ProgressValue,\n WaitForValidation,\n} from './shared.pipe';\n\n@NgModule({\n declarations: [\n AreStopped,\n AreInProgressPipe,\n AreReady,\n IsReady,\n IsNotReady,\n WaitForValidation,\n HasGoodQuality,\n HasNotGoodQuality,\n ProgressValue,\n ProgressBuffer,\n HaveNotBeenRed,\n ],\n exports: [\n AreStopped,\n AreInProgressPipe,\n AreReady,\n IsReady,\n IsNotReady,\n WaitForValidation,\n HasGoodQuality,\n HasNotGoodQuality,\n ProgressValue,\n ProgressBuffer,\n HaveNotBeenRed,\n ],\n})\nexport class PipesModule {}\n","import {CommonModule, NgOptimizedImage, NgStyle} from '@angular/common';\nimport {NgModule, Optional, SkipSelf} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\n\nimport {ProfileService} from './profile.service';\nimport {Storage} from './storage.service';\nimport {RadarService} from './radar.service';\nimport {Cache} from './cache.service';\nimport {ProfileIconDirective} from './profile-icon.directive';\nimport {IonicModule, IonRange} from '@ionic/angular';\nimport {PipesModule} from './pipes.module';\nimport {RaainMapComponent} from './raain-map/raain-map.component';\nimport {RaainCompareComponent} from './raain-compare/raain-compare.component';\nimport {RaainConfigurationComponent} from './raain-configuration/raain-configuration.component';\nimport {RaainDateFocusComponent} from './raain-date-focus/raain-date-focus.component';\nimport {RaainDateDynamicComponent} from './raain-date-dynamic/raain-date-dynamic.component';\nimport {RaainSpeedComponent} from './raain-speed/raain-speed.component';\nimport {RaainCompareStackComponent} from './raain-compare-stack/raain-compare-stack.component';\nimport {RaainGlobeComponent} from './raain-globe/raain-globe.component';\nimport {RaainDetailsComponent} from './raain-details/raain-details.component';\nimport {CumulativeSelectorComponent} from './cumulative-selector/cumulative-selector.component';\n\n@NgModule({\n declarations: [\n RaainMapComponent,\n RaainCompareComponent,\n RaainCompareStackComponent,\n RaainDateFocusComponent,\n RaainDateDynamicComponent,\n RaainConfigurationComponent,\n RaainSpeedComponent,\n RaainGlobeComponent,\n ProfileIconDirective,\n RaainDetailsComponent,\n CumulativeSelectorComponent,\n ],\n imports: [CommonModule, FormsModule, IonicModule, NgOptimizedImage, PipesModule],\n providers: [Storage, RadarService, ProfileService, Cache, IonRange],\n exports: [\n CommonModule,\n NgStyle,\n PipesModule,\n\n RaainMapComponent,\n RaainCompareComponent,\n RaainCompareStackComponent,\n RaainDateFocusComponent,\n RaainDateDynamicComponent,\n RaainConfigurationComponent,\n RaainSpeedComponent,\n RaainGlobeComponent,\n ProfileIconDirective,\n RaainDetailsComponent,\n CumulativeSelectorComponent,\n ],\n})\nexport class SharedModule {\n constructor(@Optional() @SkipSelf() parentModule?: SharedModule) {\n if (parentModule) {\n // throw new Error(\n console.warn('SharedModule is already loaded. Import it in the AppModule only');\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.Storage","i1","i2","i3.RaainCompareComponent","sleep","i3","i4","i1.ProfileService","i5.RaainMapComponent","i6.RaainCompareStackComponent","i7.RaainDateFocusComponent","i8.RaainDateDynamicComponent","i9.CumulativeSelectorComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"raain-app.mjs","sources":["../../src/core/shared/storage.service.ts","../../src/core/shared/raain-map/raain-map.component.ts","../../src/core/shared/raain-map/raain-map.component.html","../../src/core/shared/raain-compare/raain-compare.component.ts","../../src/core/shared/raain-compare/raain-compare.component.html","../../src/core/shared/xytype.ts","../../src/core/shared/raain-configuration/raain-configuration.component.ts","../../src/core/shared/raain-configuration/raain-configuration.component.html","../../src/core/shared/raain-date-focus/raain-date-focus.component.ts","../../src/core/shared/raain-date-focus/raain-date-focus.component.html","../../src/core/shared/raain-date-dynamic/raain-date-dynamic.component.ts","../../src/core/shared/raain-date-dynamic/raain-date-dynamic.component.html","../../src/core/shared/raain-speed/raain-speed.component.ts","../../src/core/shared/raain-speed/raain-speed.component.html","../../src/core/shared/raain-compare-stack/raain-compare-stack.component.ts","../../src/core/shared/raain-compare-stack/raain-compare-stack.component.html","../../src/core/shared/raain-globe/raain-globe.component.ts","../../src/core/shared/raain-globe/raain-globe.component.html","../../src/core/shared/tools/CompareManager.ts","../../src/core/shared/tools/FrameSet.ts","../../src/core/shared/tools/GaugeNodeFilter.ts","../../src/core/shared/tools/RefreshManager.ts","../../src/core/shared/tools/DateRangeTools.ts","../../src/core/shared/fidj-storage.model.ts","../../src/core/shared/profile.service.ts","../../src/core/shared/cumulative-selector/cumulative-selector.component.ts","../../src/core/shared/cumulative-selector/cumulative-selector.component.html","../../src/core/shared/raain-details/raain-details.component.ts","../../src/core/shared/raain-details/raain-details.component.html","../../src/core/shared/cache.service.ts","../../src/core/shared/radar.service.ts","../../src/core/shared/shared.const.ts","../../src/core/shared/shared.pipe.ts","../../src/core/shared/profile-icon.directive.ts","../../src/core/shared/pipes.module.ts","../../src/core/shared/shared.module.ts","../../src/core/shared/raain-app.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\nimport {LocalStorage} from 'fidj-angular';\n\n@Injectable()\nexport class Storage extends LocalStorage {\n constructor() {\n super('raain-app.');\n }\n}\n","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport {CartesianTools} from 'raain-model';\nimport {LatLngBounds} from 'leaflet';\nimport {\n CartesianMapValue,\n ChartScaleColors,\n ElementsFactory,\n FrameContainer,\n MapElement,\n MapLatLng,\n RaainDivIcon,\n ScaleElement,\n ScaleElementInput,\n TimeframeContainers,\n} from 'raain-ui';\nimport {Storage} from '../storage.service';\n\n@Component({\n selector: 'raain-map',\n templateUrl: './raain-map.component.html',\n styleUrls: ['./raain-map.component.scss'],\n})\nexport class RaainMapComponent implements AfterViewChecked, OnDestroy, OnChanges {\n @Input()\n public coordinates?: MapLatLng;\n @Input()\n public markers?: {\n gauges?: MapLatLng[];\n selectedGauges?: MapLatLng[];\n pixels?: MapLatLng[];\n borders?: MapLatLng[];\n speeds?: MapLatLng[];\n gaugesInCompare?: MapLatLng[];\n pixelsSolution?: MapLatLng[];\n };\n @Input()\n public timeframeContainers?: TimeframeContainers;\n @Input()\n public autoplay = false;\n @Input()\n public showMarkers = true;\n @Input()\n public showSpeedMarkers = true;\n @Input()\n public showVisiblePixelMarkers = false;\n @Input()\n public showNavigation = true;\n @Input()\n public showDateRange = true;\n @Input()\n public cumulativeDurationInMinutes = 60;\n @Input()\n public scaleLabel = 'mm';\n @Input()\n public currentHeight: number;\n\n public showMapSettings = false;\n public currentWidth: number;\n\n @Input()\n public timeframeDates: Date[] = [];\n @Input()\n public defaultDate?: Date;\n\n @Input()\n public sumValues?: CartesianMapValue[];\n @Input()\n public sumFn?: (cartesianMapValues: CartesianMapValue[]) => number;\n public sumResult: string;\n\n @Output()\n public selectedMarker = new EventEmitter<MapLatLng>();\n\n @Output()\n public changedDate = new EventEmitter<Date>();\n\n @Output()\n public changedSum = new EventEmitter<string>();\n\n public alpha: number;\n public mcText;\n public nextDate: Date;\n public possibleNames: string[];\n public possibleDates: Date[];\n public dateToShow: Date;\n public dateToShowAsString: string;\n public timeframeNameToShow: string;\n public pixelsCount: number;\n public cumulativeDateFrom: Date;\n protected currentFrameContainer: FrameContainer;\n protected cartesianTools: CartesianTools;\n @ViewChild('primaryMap')\n protected mapDivRef: ElementRef;\n @ViewChild('canvasScale')\n protected scaleCanvasRef: ElementRef;\n private visiblePixelMarkers: MapLatLng[] = [];\n private mapElement: MapElement;\n private scaleElement: ScaleElement;\n\n private onSizeChanged;\n private created;\n private readonly raainDivIcons: {\n gauges: RaainDivIcon;\n selectedGauges: RaainDivIcon;\n pixels: RaainDivIcon;\n borders: RaainDivIcon;\n speeds: RaainDivIcon;\n gaugesInCompare: RaainDivIcon;\n pixelsSolution: RaainDivIcon;\n };\n\n constructor(\n private readonly ngZone: NgZone,\n private readonly storage: Storage,\n private readonly cdr: ChangeDetectorRef\n ) {\n this.delete();\n\n this.cartesianTools = new CartesianTools();\n this.pixelsCount = 1;\n\n const iconSize: [number, number] = [40, 40]; // size of the icon\n const iconAnchor: [number, number] = [20, 20]; // point of the icon which will correspond to marker's location\n const pixelSize: [number, number] = [41, 41];\n const pixelAnchor: [number, number] = [20, 20];\n const popupAnchor: [number, number] = [0, -20]; // point from which the popup should open relative to the iconAnchor\n\n this.raainDivIcons = {\n gauges: new RaainDivIcon({\n html: '<img src=\"./assets/maps/marker-pluvio.png\" style=\"width: 100%; height: 100%;\" />',\n iconSize,\n iconAnchor,\n }),\n gaugesInCompare: new RaainDivIcon({\n html: '<img src=\"./assets/maps/marker-pluvio-diag.png\" style=\"width: 100%; height: 100%;\" />',\n iconSize,\n iconAnchor,\n popupAnchor,\n }),\n selectedGauges: new RaainDivIcon({\n html: '<img src=\"./assets/maps/marker-pluvio-diag-select.png\" style=\"width: 100%; height: 100%;\" />',\n iconSize,\n iconAnchor,\n popupAnchor,\n }),\n pixels: new RaainDivIcon({\n html: '<img src=\"./assets/maps/marker-rain.png\" style=\"width: 100%; height: 100%;\" />',\n iconSize,\n iconAnchor,\n popupAnchor,\n }),\n pixelsSolution: new RaainDivIcon({\n html: '<img src=\"./assets/maps/marker-rain.png\" style=\"width: 100%; height: 100%;\" />',\n iconSize: pixelSize,\n iconAnchor: pixelAnchor,\n popupAnchor,\n }),\n borders: new RaainDivIcon({\n html: '<img src=\"./assets/maps/marker-shadow.png\" style=\"width: 100%; height: 100%;\" />',\n iconSize,\n iconAnchor,\n popupAnchor,\n }),\n speeds: new RaainDivIcon({\n html: '<img src=\"./assets/maps/marker-speed.svg\" style=\"width: 100%; height: 100%;\" />',\n iconSize,\n iconAnchor,\n popupAnchor,\n }),\n };\n }\n\n public ngAfterViewChecked(): void {\n this.create();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.change(changes);\n }\n\n public ngOnDestroy(): void {\n this.delete();\n }\n\n public showTimeframe(force = false) {\n if (\n !this.dateToShowAsString ||\n (!force && this.areDatesEqual(this.dateToShowAsString, this.dateToShow))\n ) {\n return;\n }\n\n this.dateToShow = new Date(this.dateToShowAsString);\n this.changedDate.emit(this.dateToShow);\n }\n\n public next() {\n if (!this.possibleDates || this.possibleDates.length === 0) {\n return;\n }\n\n const index = this.getDateToShowIndex();\n this.dateToShow =\n index + 1 < this.possibleDates.length\n ? this.possibleDates[index + 1]\n : this.possibleDates[0];\n this.dateToShowAsString = this.dateToShow.toISOString();\n\n this.showTimeframe(true);\n if (this.autoplay) {\n window.setTimeout(() => this.next(), 2000);\n }\n }\n\n public previous() {\n this.stop();\n if (!this.possibleDates || this.possibleDates.length === 0) {\n return;\n }\n\n const index = this.getDateToShowIndex();\n this.dateToShow = index > 0 ? this.possibleDates[index - 1] : this.possibleDates[0];\n this.dateToShowAsString = this.dateToShow.toISOString();\n\n this.showTimeframe(true);\n }\n\n public play() {\n this.autoplay = true;\n this.next();\n }\n\n public stop() {\n this.autoplay = false;\n }\n\n public changeShowMarkers() {\n if (!this.mapElement?.markersLayer || !this.mapElement?.mapLeaflet) {\n return;\n }\n\n if (this.showMarkers) {\n this.mapElement.markersLayer.addToMap(this.mapElement.mapLeaflet);\n } else {\n this.mapElement.markersLayer.removeFromMap(this.mapElement.mapLeaflet);\n }\n }\n\n public changeShowSpeedMarkers() {\n if (!this.mapElement?.markersLayer || !this.mapElement?.mapLeaflet) {\n return;\n }\n\n // Rebuild markers with current visibility settings\n const {allMarkers} = this.buildMarkersConfig();\n const markersProduced = this.mapElement.updateMarkers(allMarkers);\n if (markersProduced?.length) {\n this.bindMarkersClickEvents(markersProduced);\n if (this.showMarkers) {\n this.mapElement.markersLayer.removeFromMap(this.mapElement.mapLeaflet);\n this.mapElement.markersLayer.addToMap(this.mapElement.mapLeaflet);\n }\n }\n }\n\n public changeAlpha() {\n this.storage.set('raain-map-alpha', this.alpha);\n if (!this.mapElement?.mapLeaflet) {\n return;\n }\n\n this.mapElement.alpha = 0.3 + this.alpha * 0.7;\n this.mapElement.mapLeaflet.eachLayer((layer: any) => {\n if (layer._container?.style) {\n layer._container.style.filter = `brightness(${(10 - this.alpha * 10) * 10}%)`; // invert(1) ?\n }\n });\n }\n\n public toggleMapSettings() {\n this.showMapSettings = !this.showMapSettings;\n }\n\n private create() {\n const created = this.created;\n if (created) {\n return;\n }\n this.created = true;\n\n const {allMarkers} = this.buildMarkersConfig();\n\n const factory = new ElementsFactory(this.coordinates, true);\n this.createScale(factory, this.scaleLabel);\n\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n const createdOutside = this.created;\n if (!createdOutside) {\n return;\n }\n\n this.mapElement = factory.createMap(this.mapDivRef.nativeElement, {\n timeframeContainers: this.timeframeContainers,\n markers: allMarkers,\n });\n\n this.changeAlpha();\n\n this.mapElement.mapLeaflet?.on('mousemove', (evt) => this.onMapMouseMove(evt));\n this.mapElement.mapLeaflet?.on('zoom', (evt) => this.onZoom(evt));\n this.mapElement.mapLeaflet?.on('moveend', (evt) => this.onMoveEnd(evt));\n const bounds: LatLngBounds = this.mapElement.mapLeaflet.getBounds();\n this.pixelsCount = this.cartesianTools.howManyPixelsInEarthMap(\n bounds._southWest,\n bounds._northEast\n );\n\n this.bindMarkersClickEvents(this.mapElement.markersProduced);\n this.onSizeChanged = () => this.updateLayerDimensions();\n this.updateMapSize();\n this.changeNavigation(this.defaultDate);\n }, 100);\n });\n }\n\n private delete() {\n this.mapElement?.mapLeaflet?.remove();\n this.mapElement = undefined;\n this.mcText = '';\n this.nextDate = undefined;\n this.possibleNames = [];\n this.possibleDates = [];\n this.timeframeNameToShow = undefined;\n this.dateToShow = undefined;\n this.dateToShowAsString = undefined;\n this.cumulativeDateFrom = undefined;\n this.onSizeChanged = () => {};\n this.currentFrameContainer = null;\n\n this.created = false;\n this.alpha = this.storage.get('raain-map-alpha', 0.4);\n }\n\n private change(changes: SimpleChanges) {\n let possibleNewDefaultDate: Date;\n\n if (changes.defaultDate) {\n if (\n this.areDatesEqual(\n changes.defaultDate.currentValue,\n changes.defaultDate.previousValue\n )\n ) {\n return;\n }\n possibleNewDefaultDate = this.defaultDate;\n }\n\n if (changes.coordinates && this.mapElement?.mapLeaflet && this.coordinates) {\n this.mapElement.mapLeaflet.setView([this.coordinates.lat, this.coordinates.lng], 10);\n }\n\n if (changes.markers && this.mapElement?.markersLayer) {\n const {allMarkers} = this.buildMarkersConfig();\n const markersProduced = this.mapElement.updateMarkers(allMarkers);\n if (markersProduced?.length) {\n this.bindMarkersClickEvents(markersProduced);\n if (this.showMarkers) {\n this.mapElement.markersLayer.removeFromMap(this.mapElement.mapLeaflet);\n this.mapElement.markersLayer.addToMap(this.mapElement.mapLeaflet);\n }\n }\n }\n\n if (\n changes.markers &&\n this.markers?.selectedGauges &&\n this.markers?.selectedGauges.length === 1\n ) {\n const selectedGauge = this.markers.selectedGauges[0];\n this.mapElement?.mapLeaflet?.setView(selectedGauge, 10);\n }\n\n if (this.mapElement && changes.timeframeContainers) {\n this.updateTimeframe();\n }\n\n if (this.mapElement?.compositeLayer && changes.sumValues) {\n this.updateSum();\n }\n\n if (this.mapElement?.compositeLayer && changes.showVisiblePixelMarkers) {\n const drawer = this.mapElement.compositeLayer.getFirstDrawer();\n this.updateVisiblePixelMarkers(drawer);\n }\n\n this.changeNavigation(possibleNewDefaultDate);\n }\n\n private updateSum() {\n if (!this.sumValues || !this.sumFn) {\n return;\n }\n\n const drawer = this.mapElement.compositeLayer.getFirstDrawer();\n const sumOfPixels: number = drawer?.getExecOfWindowPoints(this.sumValues, this.sumFn) ?? -1;\n\n if (sumOfPixels >= 0 && this.pixelsCount > 0) {\n const average = Math.round((sumOfPixels / this.pixelsCount) * 100) / 100;\n this.sumResult = `${Math.round(sumOfPixels)}mm (avg of ${average}mm for ${Math.round(this.pixelsCount)} pixels)`;\n } else {\n this.sumResult = 'NA';\n }\n this.changedSum.emit(this.sumResult);\n\n this.updateVisiblePixelMarkers(drawer);\n }\n\n private updateVisiblePixelMarkers(drawer: any) {\n if (!this.showVisiblePixelMarkers || !drawer || !this.sumValues) {\n if (this.visiblePixelMarkers.length > 0) {\n this.visiblePixelMarkers = [];\n this.refreshMarkersLayer();\n }\n return;\n }\n\n // Extract visible pixel positions\n const visiblePixels: MapLatLng[] =\n drawer.getExecOfWindowPoints(this.sumValues, (values: CartesianMapValue[]) =>\n values.map((v) => ({\n lat: (v.lat + v.lat2) / 2,\n lng: (v.lng + v.lng2) / 2,\n value: v.value,\n }))\n ) ?? [];\n\n this.visiblePixelMarkers = visiblePixels;\n this.refreshMarkersLayer();\n }\n\n private refreshMarkersLayer() {\n if (!this.mapElement?.markersLayer || !this.mapElement?.mapLeaflet) {\n return;\n }\n\n const {allMarkers} = this.buildMarkersConfig();\n const markersProduced = this.mapElement.updateMarkers(allMarkers);\n if (markersProduced?.length) {\n this.bindMarkersClickEvents(markersProduced);\n if (this.showMarkers) {\n this.mapElement.markersLayer.removeFromMap(this.mapElement.mapLeaflet);\n this.mapElement.markersLayer.addToMap(this.mapElement.mapLeaflet);\n }\n }\n }\n\n private changeNavigation(defaultDate?: Date) {\n // update possible names\n if (this.timeframeContainers?.containers?.length) {\n this.possibleNames = [];\n this.timeframeContainers.containers.forEach((c) => {\n if (this.possibleNames.indexOf(c.name) < 0) {\n this.possibleNames.push(c.name);\n }\n });\n this.timeframeNameToShow = this.possibleNames.length > 0 ? this.possibleNames[0] : null;\n }\n\n // update possible dates\n this.possibleDates = this.timeframeDates;\n if (!this.possibleDates || this.possibleDates.length === 0) {\n return;\n }\n\n // update dateToShow\n if (\n defaultDate &&\n this.possibleDates.filter((d) => this.areDatesEqual(d, defaultDate)).length === 1\n ) {\n this.dateToShow = defaultDate;\n }\n if (\n !this.dateToShow &&\n this.possibleDates.length > 0 &&\n this.possibleDates.filter((d) => this.areDatesEqual(d, this.dateToShow)).length !== 1\n ) {\n this.dateToShow = this.possibleDates[0];\n }\n\n let firstInit = false;\n if (!this.dateToShowAsString) {\n firstInit = true;\n }\n this.dateToShowAsString = this.dateToShow.toISOString();\n this.cumulativeDateFrom = new Date(this.dateToShow);\n\n const durationInMs = this.cumulativeDurationInMinutes * 60 * 1000;\n this.cumulativeDateFrom.setTime(this.cumulativeDateFrom.getTime() - durationInMs);\n\n if (firstInit) {\n this.showTimeframe(true);\n }\n }\n\n private getDateToShowIndex(): number {\n let index = 0;\n for (const date of this.possibleDates) {\n if (this.areDateISOEqual(this.dateToShowAsString, date)) {\n break;\n }\n index++;\n }\n return index;\n }\n\n private onZoom(evt: any) {\n const map = evt.target;\n const bounds: LatLngBounds = map.getBounds();\n this.pixelsCount = this.cartesianTools.howManyPixelsInEarthMap(\n bounds._southWest,\n bounds._northEast\n );\n this.updateSum();\n }\n\n private onMoveEnd(evt: any) {\n const map = evt.target;\n const bounds: LatLngBounds = map.getBounds();\n this.pixelsCount = this.cartesianTools.howManyPixelsInEarthMap(\n bounds._southWest,\n bounds._northEast\n );\n this.updateSum();\n }\n\n private handleAvailablePixels(\n availablePixels: {width: number; height: number; totalPixels: number},\n bounds: any,\n zoom: number\n ) {\n // Update your component properties or perform calculations\n this.currentWidth = availablePixels.width;\n this.currentHeight = availablePixels.height;\n\n // You can also calculate pixel density or other metrics here\n // const pixelDensity = this.calculatePixelDensity(bounds, availablePixels, zoom);\n // console.log('Pixel density:', pixelDensity);\n }\n\n private calculatePixelDensity(\n bounds: any,\n availablePixels: {width: number; height: number},\n zoom: number\n ) {\n // Calculate how many meters per pixel (approximate)\n const earthCircumference = 40075016.686; // meters\n const metersPerPixel =\n (earthCircumference * Math.cos((bounds.getCenter().lat * Math.PI) / 180)) /\n Math.pow(2, zoom + 8);\n\n return {\n metersPerPixel,\n pixelsPerMeter: 1 / metersPerPixel,\n totalVisibleArea: availablePixels.width * availablePixels.height,\n };\n }\n\n private onMapMouseMove(evt: {latlng: {lat: number; lng: number}}): void {\n const lat: string = evt.latlng.lat.toFixed(3);\n const lng: string = evt.latlng.lng.toFixed(3);\n\n let value = NaN;\n let valueLat = NaN,\n valueLng = NaN,\n valueLat2 = NaN,\n valueLng2 = NaN;\n if (this.currentFrameContainer) {\n const valueSelected = (this.currentFrameContainer.values as CartesianMapValue[]).filter(\n (v: CartesianMapValue) => {\n return (\n v.lat <= evt.latlng.lat &&\n evt.latlng.lat < v.lat2 &&\n v.lng <= evt.latlng.lng &&\n evt.latlng.lng < v.lng2\n );\n }\n );\n\n if (valueSelected.length === 1) {\n value = this.roundTo3Decimals(valueSelected[0].value);\n valueLat = this.roundTo3Decimals(valueSelected[0].lat);\n valueLng = this.roundTo3Decimals(valueSelected[0].lng);\n valueLat2 = this.roundTo3Decimals(valueSelected[0].lat2);\n valueLng2 = this.roundTo3Decimals(valueSelected[0].lng2);\n } else {\n // console.warn('valueSelected issue ?', valueSelected);\n }\n }\n\n this.ngZone.run(() => {\n // this.mcText = `Latitude: ${lat} Longitude: ${lng} \n // Value: [${valueLat} ${valueLng} | ${valueLat2} ${valueLng2}] ${value}`;\n this.mcText = `Latitude: ${lat} Longitude: ${lng} Value: ${value}`;\n this.cdr.markForCheck();\n });\n }\n\n private onMapClick(evt: any): void {\n if (!this.markers?.gauges?.length) {\n return;\n }\n\n let selectedGauge: MapLatLng;\n for (const gauge of this.markers.gauges) {\n if (gauge.id === evt?.target?.options?.alt) {\n selectedGauge = gauge;\n break;\n }\n }\n\n if (selectedGauge) {\n this.markers.selectedGauges = [selectedGauge];\n this.selectedMarker.emit(\n new MapLatLng(\n selectedGauge.lat,\n selectedGauge.lng,\n undefined,\n selectedGauge.id,\n selectedGauge.name,\n selectedGauge.value\n )\n );\n } else {\n this.selectedMarker.emit(\n new MapLatLng(evt.latlng?.lat, evt.latlng?.lng, undefined, evt.id, evt.name)\n );\n }\n\n this.change({markers: ['changed']} as any);\n }\n\n @HostListener('window:resize', ['$event'])\n private onResize(event: any): void {\n this.updateMapSize();\n }\n\n private updateMapSize(): void {\n const mapDivWidth = this.mapDivRef.nativeElement.parentNode?.parentNode['clientWidth'];\n const padding = 21;\n let currentWidth =\n mapDivWidth ||\n window.innerWidth ||\n document.documentElement.clientWidth ||\n document.body.clientWidth;\n const currentHeight =\n this.currentHeight ||\n window.innerHeight ||\n document.documentElement.clientHeight ||\n document.body.clientHeight;\n currentWidth -= padding;\n this.currentWidth = currentWidth;\n this.currentHeight = currentHeight;\n\n this.ngZone.run(() => {\n this.onSizeChanged();\n });\n }\n\n private updateTimeframe() {\n if (\n this.timeframeContainers?.containers?.length &&\n this.timeframeContainers?.containers[0]?.timeframe?.length\n ) {\n this.mapElement.updateMapTimeframe(this.timeframeContainers);\n this.currentFrameContainer = this.timeframeContainers?.containers[0]?.timeframe[0];\n }\n\n this.changeAlpha();\n }\n\n private createScale(factory: ElementsFactory, label: string) {\n this.deleteScale();\n if (!this.scaleCanvasRef?.nativeElement) {\n return;\n }\n\n const entries = Object.entries(ChartScaleColors);\n entries.sort((a, b) => parseFloat(a[0]) - parseFloat(b[0]));\n const sortedMap = new Map(entries);\n const sortedArray = [...sortedMap.entries()];\n const scaleColors = sortedArray.map((entry) => {\n return {color: entry[1]};\n });\n const scaleLabels = sortedArray.map((entry) => entry[0]);\n this.scaleElement = factory.createScale(\n this.scaleCanvasRef.nativeElement,\n new ScaleElementInput(scaleColors, scaleLabels, label)\n );\n }\n\n private deleteScale() {\n if (this.scaleElement) {\n this.scaleElement?.chart?.destroy();\n }\n }\n\n /**\n * Builds the markers configuration array for the map\n * @returns Array of marker configurations with icons and positions\n */\n private buildMarkersConfig() {\n const allMarkers: {iconsLatLng: MapLatLng[]; raainDivIcon: RaainDivIcon}[] = [\n {iconsLatLng: this.markers?.gauges ?? [], raainDivIcon: this.raainDivIcons.gauges},\n {\n iconsLatLng: this.markers?.selectedGauges ?? [],\n raainDivIcon: this.raainDivIcons.selectedGauges,\n },\n {\n iconsLatLng: this.markers?.gaugesInCompare ?? [],\n raainDivIcon: this.raainDivIcons.gaugesInCompare,\n },\n {iconsLatLng: this.markers?.pixels ?? [], raainDivIcon: this.raainDivIcons.pixels},\n {\n iconsLatLng: this.markers?.pixelsSolution ?? [],\n raainDivIcon: this.raainDivIcons.pixelsSolution,\n },\n // {iconsLatLng: this.markers?.borders, raainDivIcon: this.raainDivIcons.borders},\n ];\n\n if (this.showVisiblePixelMarkers && this.visiblePixelMarkers.length > 0) {\n allMarkers.push({\n iconsLatLng: this.visiblePixelMarkers,\n raainDivIcon: this.raainDivIcons.pixelsSolution,\n });\n }\n\n if (this.showSpeedMarkers) {\n for (const marker of this.markers?.speeds ?? []) {\n // Calculate dynamic size based on speed (marker.value is in m/s)\n // Base size: 20px, scale up with speed (typical range: 1-20 m/s)\n const speedInMetersPerSec = marker.value ?? 5;\n const minSize = 20;\n const maxSize = 60;\n const minSpeed = 1;\n const maxSpeed = 20;\n\n // Linear interpolation: size increases with speed\n const normalizedSpeed = Math.max(minSpeed, Math.min(maxSpeed, speedInMetersPerSec));\n const size =\n minSize +\n ((normalizedSpeed - minSpeed) / (maxSpeed - minSpeed)) * (maxSize - minSize);\n const iconSize = Math.round(size);\n\n allMarkers.push({\n iconsLatLng: [marker],\n raainDivIcon: new RaainDivIcon({\n html: this.raainDivIcons.speeds.options.html,\n width: iconSize,\n height: iconSize,\n iconAnchor: [iconSize / 2, iconSize / 2], // Center the icon\n popupAnchor: this.raainDivIcons.speeds.options.popupAnchor,\n rotationAngle: marker.alt, // Use alt property for azimuth/direction\n className: this.raainDivIcons.speeds.options.className,\n }),\n });\n }\n }\n return {allMarkers};\n }\n\n /**\n * Compare two dates for equality using their timestamps\n * @param date1 First date (Date or string)\n * @param date2 Second date (Date or string)\n * @returns true if dates are equal\n */\n private areDatesEqual(date1: Date | string, date2: Date | string): boolean {\n if (!date1 || !date2) {\n return false;\n }\n const timestamp1 = typeof date1 === 'string' ? new Date(date1).getTime() : date1.getTime();\n const timestamp2 = typeof date2 === 'string' ? new Date(date2).getTime() : date2.getTime();\n return timestamp1 === timestamp2;\n }\n\n /**\n * Compare an ISO date string with a Date object (comparing first 19 characters)\n * @param dateISO ISO date string\n * @param date Date object\n * @returns true if dates match (up to seconds precision)\n */\n private areDateISOEqual(dateISO: string, date: Date): boolean {\n if (!dateISO || !date) {\n return false;\n }\n return dateISO.substring(0, 19) === date.toISOString().substring(0, 19);\n }\n\n /**\n * Bind click event handlers to markers\n * @param markers Array of marker objects to bind events to\n */\n private bindMarkersClickEvents(markers: any[]): void {\n if (!markers) {\n return;\n }\n markers.forEach((m) => m.on('click', (evt) => this.onMapClick(evt)));\n }\n\n /**\n * Round a number to 3 decimal places\n * @param value Number to round\n * @returns Rounded number\n */\n private roundTo3Decimals(value: number): number {\n return Math.round(value * 1000) / 1000;\n }\n\n /**\n * Update layer dimensions and invalidate map size\n */\n private updateLayerDimensions(): void {\n if (!this.mapElement) {\n return;\n }\n this.mapElement.markersLayer?.setCurrentWidth(this.currentWidth);\n this.mapElement.markersLayer?.setCurrentHeight(this.currentHeight);\n this.mapElement.compositeLayer?.setCurrentWidth(this.currentWidth);\n this.mapElement.compositeLayer?.setCurrentHeight(this.currentHeight);\n this.mapElement.mapLeaflet?.invalidateSize({animate: true});\n }\n}\n","<ion-grid>\n\n <ion-row class=\"ion-align-items-center ion-justify-content-center\" id=\"map-nav-row\">\n <ion-icon (click)=\"previous()\" *ngIf=\"showNavigation\" class=\"nav-icon\" color=\"medium\"\n name=\"chevron-back-circle\"></ion-icon>\n\n <ion-label *ngIf=\"showDateRange\" class=\"period-bracket\">[</ion-label>\n\n <ion-label *ngIf=\"showDateRange && timeframeContainers?.containers?.length\" class=\"date-label\">\n {{ cumulativeDateFrom | date:'yyyy-MM-dd HH:mm' }}\n </ion-label>\n\n <ion-label *ngIf=\"showDateRange\"> </ion-label>\n\n <ion-select (ionDismiss)=\"showTimeframe()\" *ngIf=\"timeframeContainers?.containers?.length\"\n [(ngModel)]=\"dateToShowAsString\" interface=\"popover\"\n placeholder=\"Period\" value=\"{{dateToShowAsString}}\">\n <ion-select-option *ngFor=\"let dateToSelect of possibleDates\"\n value=\"{{dateToSelect.toISOString()}}\">\n {{ dateToSelect | date:'yyyy-MM-dd HH:mm' }}\n </ion-select-option>\n </ion-select>\n\n <ion-label *ngIf=\"showDateRange\" class=\"period-bracket\">[</ion-label>\n\n <ion-icon (click)=\"next()\" *ngIf=\"showNavigation\" class=\"nav-icon\" color=\"medium\"\n name=\"chevron-forward-circle\"></ion-icon>\n </ion-row>\n\n <ion-row>\n <ion-col size-lg=\"10\" size-xs=\"12\">\n <div [style.height.px]=\"currentHeight\" id=\"map-container\">\n <div #primaryMap id=\"map-div\"></div>\n </div>\n </ion-col>\n <ion-col class=\"ion-hide-xl-down\" size-lg=\"2\">\n <div [style.height.px]=\"currentHeight\" [style.width.px]=\"60\">\n <canvas #canvasScale></canvas>\n </div>\n </ion-col>\n </ion-row>\n\n <ion-row class=\"ion-align-items-center\">\n <ion-col size-xs=\"3\">\n <ion-button (click)=\"toggleMapSettings()\" color=\"medium\" fill=\"clear\" id=\"map-settings-toggle\">\n <ion-icon name=\"map-outline\" slot=\"start\"></ion-icon>\n <ion-icon [name]=\"showMapSettings ? 'chevron-down' : 'chevron-forward'\" slot=\"end\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-hide-sm-down\" size-sm=\"7\">\n <span [innerHTML]=\"mcText\"></span>\n </ion-col>\n\n </ion-row>\n\n <ion-row *ngIf=\"showMapSettings\" id=\"map-settings\">\n <ion-col size=\"12\">\n <ion-list lines=\"none\">\n <ion-item>\n <ion-label>Opacity</ion-label>\n <ion-range (ionChange)=\"changeAlpha()\" [(ngModel)]=\"alpha\" [max]=\"1\" [min]=\"0.2\" [snaps]=\"true\"\n [step]=\"0.2\" [ticks]=\"true\" class=\"settings-range\" color=\"medium\" slot=\"end\"></ion-range>\n </ion-item>\n <ion-item>\n <ion-label>Gauges</ion-label>\n <ion-toggle (ionChange)=\"changeShowMarkers()\" [(ngModel)]=\"showMarkers\" [checked]=\"showMarkers\"\n color=\"medium\" slot=\"end\"></ion-toggle>\n </ion-item>\n <ion-item>\n <ion-label>Speeds</ion-label>\n <ion-toggle (ionChange)=\"changeShowSpeedMarkers()\" [(ngModel)]=\"showSpeedMarkers\"\n [checked]=\"showSpeedMarkers\" color=\"medium\" slot=\"end\"></ion-toggle>\n </ion-item>\n </ion-list>\n </ion-col>\n </ion-row>\n\n</ion-grid>\n","import {\n AfterViewChecked,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport {CompareElement, CompareElementInput, ElementsFactory} from 'raain-ui';\nimport {XYType} from '../xytype';\n\n@Component({\n selector: 'raain-compare',\n templateUrl: './raain-compare.component.html',\n styleUrls: ['./raain-compare.component.scss'],\n})\nexport class RaainCompareComponent implements AfterViewChecked, OnDestroy, OnChanges {\n @Input()\n public points: Array<XYType>;\n\n @Input()\n public pointMax: XYType;\n\n @Input()\n public remarks: string;\n\n @Input()\n public compareIndex: number;\n\n @Input()\n public currentHeight: number;\n\n @Input()\n public currentWidth: number;\n\n @Output()\n public selectedPoint = new EventEmitter<{point: XYType; compareIndex: number}>();\n\n @ViewChild('canvasElement')\n protected canvasElement: ElementRef;\n\n private compareElement: CompareElement;\n private onSizeChanged;\n private created;\n\n constructor(private ngZone: NgZone) {\n this.onSizeChanged = () => {};\n }\n\n public ngAfterViewChecked(): void {\n this.create();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.change(changes);\n }\n\n public ngOnDestroy(): void {\n this.delete();\n }\n\n protected onClick(point: XYType): void {\n this.selectedPoint.emit({point, compareIndex: this.compareIndex});\n }\n\n protected changeData(newData: XYType[], newMaxLine?: XYType[]) {\n let changed = false;\n const dataset = this.compareElement?.chart?.data?.datasets[0];\n if (dataset) {\n dataset.data = newData;\n changed = true;\n }\n\n const line = this.compareElement?.chart?.data?.datasets[1];\n if (line) {\n line.data = newMaxLine;\n changed = true;\n }\n\n if (changed) {\n this.compareElement?.chart?.update();\n }\n }\n\n @HostListener('window:resize', ['$event'])\n private onResize(event: any): void {\n this.updateMapSize();\n }\n\n private create() {\n if (this.created) {\n return;\n }\n this.created = true;\n\n const factory = new ElementsFactory();\n this.compareElement = factory.createCompare(\n this.canvasElement.nativeElement,\n new CompareElementInput(\n this.points.map((p) => {\n return {x: p.x, y: p.y, r: p.r, name: p.name, id: p.id};\n }),\n this.pointMax,\n this.onClick.bind(this)\n )\n );\n }\n\n private delete() {\n if (this.compareElement) {\n this.compareElement?.chart?.destroy();\n }\n this.created = false;\n }\n\n private change(changes: SimpleChanges) {\n if (changes.points) {\n this.changeData(this.points, [{x: 0, y: 0}, this.pointMax]);\n }\n }\n\n private updateMapSize(): void {\n const mapDivWidth = this.canvasElement.nativeElement.parentNode?.parentNode['clientWidth'];\n const padding = 20;\n let currentWidth =\n mapDivWidth ||\n window.innerWidth ||\n document.documentElement.clientWidth ||\n document.body.clientWidth;\n const currentHeight =\n this.currentHeight ||\n window.innerHeight ||\n document.documentElement.clientHeight ||\n document.body.clientHeight;\n currentWidth -= padding;\n this.currentWidth = currentWidth;\n this.currentHeight = currentHeight;\n\n this.ngZone.run(() => {\n this.onSizeChanged();\n });\n }\n}\n","<div id=\"canvas-container\">\n <h1 *ngIf=\"remarks\">{{ remarks }}</h1>\n\n <!-- [style.height.px]=\"currentHeight\" [style.width.px]=\"currentWidth\" [width]=\"currentWidth\" [height]=\"currentHeight\"-->\n <canvas #canvasElement></canvas>\n</div>\n","export class XYType {\n constructor(\n public x: number,\n public y: number,\n public r?: number,\n public name?: string,\n public id?: string\n ) {}\n}\n","import {\n AfterViewChecked,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport {\n ChartScaleColors,\n ConfigurationElement,\n ConfigurationElementInput,\n ElementsFactory,\n Tools,\n} from 'raain-ui';\nimport {XYType} from '../xytype';\n\n@Component({\n selector: 'raain-configuration',\n templateUrl: './raain-configuration.component.html',\n styleUrls: ['./raain-configuration.component.scss'],\n})\nexport class RaainConfigurationComponent implements AfterViewChecked, OnDestroy, OnChanges {\n @Input()\n public points: XYType[];\n\n @Output()\n public changedPoints = new EventEmitter<XYType[]>();\n\n @Input()\n public currentHeight: number;\n\n @Input()\n public currentWidth: number;\n\n @Input()\n public minPoint: XYType = {x: 0, y: 0};\n\n @Input()\n public maxPoint: XYType = {x: 300, y: 100};\n\n @Input()\n public logStyle = false;\n\n @Input()\n public readonly = false;\n\n @ViewChild('canvasElement')\n protected canvasElement: ElementRef;\n\n private configurationElement: ConfigurationElement;\n private onDrag;\n private onSizeChanged;\n private created;\n private createTimer: any = null;\n\n constructor(private ngZone: NgZone) {\n this.onSizeChanged = () => {};\n this.onDrag = (e: any) => {\n if (this.readonly) {\n return false;\n }\n this.changedPoints.emit(this.points);\n };\n }\n\n public ngAfterViewChecked(): void {\n this.create();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.change(changes);\n }\n\n public ngOnDestroy(): void {\n this.delete();\n }\n\n async reset(count = 4) {\n const points = [];\n for (let c = 0; c < count; c++) {\n points.push(new XYType((c + 1) * 10, (c + 1) * 0.1));\n }\n this.points = points;\n await this.delete();\n this.create();\n }\n\n @HostListener('window:resize', ['$event'])\n private onResize(event: any): void {\n // this.updateMapSize();\n }\n\n private create() {\n if (this.created) {\n return;\n }\n this.created = true;\n\n let inputs = new ConfigurationElementInput(\n this.points,\n this.minPoint,\n this.maxPoint,\n false,\n [],\n this.onDrag,\n this.readonly\n );\n if (this.logStyle) {\n const confTransparency = 0.3;\n inputs = new ConfigurationElementInput(\n this.points,\n this.minPoint,\n this.maxPoint,\n true,\n [\n {\n color: Tools.getTransparency(ChartScaleColors['0'], confTransparency),\n yStart: Math.log10(0.1),\n yEnd: Math.log10(0.4),\n },\n {\n color: Tools.getTransparency(ChartScaleColors['0.4'], confTransparency),\n yStart: Math.log10(0.4),\n yEnd: Math.log10(1),\n },\n {\n color: Tools.getTransparency(ChartScaleColors['1'], confTransparency),\n yStart: Math.log10(1),\n yEnd: Math.log10(3),\n },\n {\n color: Tools.getTransparency(ChartScaleColors['3'], confTransparency),\n yStart: Math.log10(3),\n yEnd: Math.log10(10),\n },\n {\n color: Tools.getTransparency(ChartScaleColors['10'], confTransparency),\n yStart: Math.log10(10),\n yEnd: Math.log10(20),\n },\n {\n color: Tools.getTransparency(ChartScaleColors['20'], confTransparency),\n yStart: Math.log10(20),\n yEnd: Math.log10(30),\n },\n {\n color: Tools.getTransparency(ChartScaleColors['30'], confTransparency),\n yStart: Math.log10(30),\n yEnd: Math.log10(50),\n },\n {\n color: Tools.getTransparency(ChartScaleColors['50'], confTransparency),\n yStart: Math.log10(50),\n yEnd: Math.log10(100),\n },\n {\n color: Tools.getTransparency(ChartScaleColors['100'], confTransparency),\n yStart: Math.log10(100),\n yEnd: Math.log10(150),\n },\n {\n color: Tools.getTransparency(ChartScaleColors['150'], confTransparency),\n yStart: Math.log10(150),\n yEnd: Math.log10(200),\n },\n {\n color: Tools.getTransparency(ChartScaleColors['200'], confTransparency),\n yStart: Math.log10(200),\n yEnd: Math.log10(250),\n },\n {\n color: Tools.getTransparency(ChartScaleColors['250'], confTransparency),\n yStart: Math.log10(250),\n yEnd: Math.log10(300),\n },\n {\n color: Tools.getTransparency(ChartScaleColors['300'], confTransparency),\n yStart: Math.log10(300),\n yEnd: Math.log10(500),\n },\n ],\n this.onDrag,\n this.readonly\n );\n }\n\n this.ngZone.runOutsideAngular(() => {\n this.createTimer = setTimeout(() => {\n this.createTimer = null;\n const factory = new ElementsFactory();\n this.configurationElement = factory.createConfiguration(\n this.canvasElement.nativeElement,\n inputs\n );\n }, 10);\n });\n }\n\n private async delete() {\n if (this.createTimer) {\n clearTimeout(this.createTimer);\n this.createTimer = null;\n }\n this.configurationElement?.chart?.destroy();\n this.created = false;\n }\n\n private async change(changes: SimpleChanges) {\n // Fast path: update chart data in-place when only points changed\n if (\n this.configurationElement?.chart &&\n changes.points &&\n Object.keys(changes).length === 1\n ) {\n const chart = this.configurationElement.chart;\n chart.data.datasets.forEach((ds: any) => {\n ds.data = this.points;\n });\n chart.update('none');\n return;\n }\n await this.delete();\n this.create();\n }\n\n private updateMapSize(): void {\n const mapDivWidth = this.canvasElement.nativeElement.parentNode?.parentNode['clientWidth'];\n const padding = 20;\n let currentWidth =\n mapDivWidth ||\n window.innerWidth ||\n document.documentElement.clientWidth ||\n document.body.clientWidth;\n const currentHeight =\n this.currentHeight ||\n window.innerHeight ||\n document.documentElement.clientHeight ||\n document.body.clientHeight;\n currentWidth -= padding;\n this.currentWidth = currentWidth;\n this.currentHeight = currentHeight;\n\n this.ngZone.run(() => {\n this.onSizeChanged();\n });\n }\n}\n","<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\" size-xs=\"10\">\n <div [style.height.px]=\"currentHeight\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n </ion-col>\n <ion-col size-xs=\"2\">\n <ion-button (click)=\"reset(2)\" color=\"light\" shape=\"round\" size=\"small\">2</ion-button>\n <br>\n <ion-button (click)=\"reset(4)\" color=\"light\" shape=\"round\" size=\"small\">4</ion-button>\n <br>\n <ion-button (click)=\"reset(6)\" color=\"light\" shape=\"round\" size=\"small\">6</ion-button>\n <br>\n </ion-col>\n </ion-row>\n</ion-grid>\n","import {\n AfterViewChecked,\n Component,\n ElementRef,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport {DateRange, DateStatusElement, DateStatusElementInput, ElementsFactory} from 'raain-ui';\n\n@Component({\n selector: 'raain-date-focus',\n templateUrl: './raain-date-focus.component.html',\n styleUrls: ['./raain-date-focus.component.scss'],\n})\nexport class RaainDateFocusComponent implements AfterViewChecked, OnDestroy, OnChanges {\n @Input()\n public points: {\n label: string;\n style: string;\n values: {date: Date; value: number}[];\n }[];\n\n @Input()\n public focusDate: Date;\n @Input()\n public focusRange: DateRange;\n @Input()\n public withoutAll: boolean;\n\n @Input()\n public currentHeight: number;\n public currentWidth: number;\n\n @ViewChild('canvasElement')\n protected canvasElement: ElementRef;\n\n private dateStatusElement: DateStatusElement;\n private onSizeChanged;\n private created: boolean;\n\n constructor(private ngZone: NgZone) {\n this.focusDate = new Date();\n this.focusRange = DateRange.CENTURY;\n this.onSizeChanged = () => {};\n }\n\n public ngAfterViewChecked(): void {\n this.create();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.change(changes);\n }\n\n public ngOnDestroy(): void {\n this.delete();\n }\n\n focusPrevious() {\n this.dateStatusElement.focusPrevious();\n }\n\n focusReset() {\n this.dateStatusElement.focusReset();\n }\n\n focusNext() {\n this.dateStatusElement.focusNext();\n }\n\n @HostListener('window:resize', ['$event'])\n private onResize(event: any): void {\n this.updateMapSize();\n }\n\n private create() {\n if (this.created) {\n return;\n }\n this.created = true;\n\n // this.ngZone.runOutsideAngular(() => {\n // setTimeout(() => {\n const factory = new ElementsFactory();\n try {\n this.dateStatusElement = factory.createDateStatus(\n this.canvasElement.nativeElement,\n new DateStatusElementInput(this.points, this.focusDate, this.focusRange)\n );\n } catch (e) {\n console.warn('Focus creation issue', e);\n }\n // }, 50);\n // });\n }\n\n private async delete() {\n await this.dateStatusElement?.chart?.destroy();\n this.created = false;\n }\n\n private async change(changes: SimpleChanges) {\n await this.delete();\n this.create();\n }\n\n private updateMapSize(): void {\n const mapDivWidth = this.canvasElement.nativeElement.parentNode?.parentNode['clientWidth'];\n const padding = 20;\n let currentWidth =\n mapDivWidth ||\n window.innerWidth ||\n document.documentElement.clientWidth ||\n document.body.clientWidth;\n const currentHeight =\n this.currentHeight ||\n window.innerHeight ||\n document.documentElement.clientHeight ||\n document.body.clientHeight;\n currentWidth -= padding;\n this.currentWidth = currentWidth;\n this.currentHeight = currentHeight;\n\n this.ngZone.run(() => {\n this.onSizeChanged();\n });\n }\n}\n","<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\" size-sm=\"12\">\n <div [style.height.px]=\"currentHeight\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col class=\"ion-text-right\" offset-sm=\"4\" size-sm=\"1\">\n <ion-button (click)=\"focusPrevious()\" color=\"medium\" fill=\"clear\">\n <ion-icon name=\"chevron-back-outline\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" size-sm=\"2\">\n <ion-button (click)=\"focusReset()\" *ngIf=\"!withoutAll\" color=\"medium\" fill=\"clear\">\n all dates\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" size-sm=\"1\">\n <ion-button (click)=\"focusNext()\" color=\"medium\" fill=\"clear\">\n <ion-icon name=\"chevron-forward-outline\"></ion-icon>\n </ion-button>\n </ion-col>\n </ion-row>\n</ion-grid>\n","import {\n AfterViewChecked,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport {\n DateRange,\n DynamicDateStatusElement,\n DynamicDateStatusElementInput,\n ElementsFactory,\n} from 'raain-ui';\n\n@Component({\n selector: 'raain-date-dynamic',\n templateUrl: './raain-date-dynamic.component.html',\n styleUrls: ['./raain-date-dynamic.component.scss'],\n})\nexport class RaainDateDynamicComponent implements AfterViewChecked, OnDestroy, OnChanges {\n @Input()\n public points: {\n label: string;\n style: string;\n values: {date: Date; value: number}[];\n }[];\n\n @Input()\n public focusDate: Date;\n @Input()\n public focusRange: DateRange;\n @Input()\n public withoutAll: boolean;\n @Input()\n public currentHeight: number;\n public currentWidth: number;\n @Input()\n public fetchData: (\n focusDate: Date,\n focusRange: DateRange\n ) => Promise<{label: string; style: string; values: {date: Date; value: number}[]}[]>;\n\n @Output()\n public changedDate = new EventEmitter<Date>();\n\n @ViewChild('canvasElement')\n protected canvasElement: ElementRef;\n private dynamicDateStatusElement: DynamicDateStatusElement;\n private onSizeChanged;\n private created: boolean;\n\n constructor(private ngZone: NgZone) {\n this.focusDate = new Date();\n this.focusRange = DateRange.CENTURY;\n this.onSizeChanged = () => {};\n }\n\n public ngAfterViewChecked(): void {\n this.create();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.change(changes);\n }\n\n public ngOnDestroy(): void {\n this.delete();\n }\n\n focusPrevious() {\n this.dynamicDateStatusElement.focusPrevious();\n }\n\n focusReset() {\n this.dynamicDateStatusElement.focusReset();\n }\n\n focusNext() {\n this.dynamicDateStatusElement.focusNext();\n }\n\n @HostListener('window:resize', ['$event'])\n private onResize(event: any): void {\n this.updateMapSize();\n }\n\n // Map style to a valid Chart.js chart type\n private mapStyleToChartType(style: string): string {\n // List of valid Chart.js chart types\n const validChartTypes = [\n 'line',\n 'bar',\n 'radar',\n 'doughnut',\n 'pie',\n 'polarArea',\n 'bubble',\n 'scatter',\n ];\n\n // If style is a valid chart type, return it, otherwise default to 'line'\n return validChartTypes.includes(style) ? style : 'line';\n }\n\n private async create() {\n if (this.created) {\n return;\n }\n this.created = true;\n\n const monthSampleData = await this.fetchData(new Date(), DateRange.MONTH);\n\n const factory = new ElementsFactory();\n try {\n this.dynamicDateStatusElement = factory.createDynamicDateStatus(\n this.canvasElement.nativeElement,\n new DynamicDateStatusElementInput(\n async (focusDate, focusRange) => {\n const data = await this.fetchData(focusDate, focusRange);\n return data.map((item) => ({\n ...item,\n style: this.mapStyleToChartType(item.style),\n }));\n },\n {\n dataLength: monthSampleData.length,\n chartMinValue: -10,\n chartMaxValue: 100,\n onLastClick: (date: Date) => {\n this.changedDate.emit(date);\n },\n }\n )\n );\n } catch (e) {\n console.warn('Dynamic focus creation issue', e);\n }\n }\n\n private async delete() {\n this.dynamicDateStatusElement?.chart?.destroy();\n this.created = false;\n }\n\n private async change(changes: SimpleChanges) {\n await this.delete();\n await this.create();\n }\n\n private updateMapSize(): void {\n const mapDivWidth = this.canvasElement.nativeElement.parentNode?.parentNode['clientWidth'];\n const padding = 20;\n let currentWidth =\n mapDivWidth ||\n window.innerWidth ||\n document.documentElement.clientWidth ||\n document.body.clientWidth;\n const currentHeight =\n this.currentHeight ||\n window.innerHeight ||\n document.documentElement.clientHeight ||\n document.body.clientHeight;\n currentWidth -= padding;\n this.currentWidth = currentWidth;\n this.currentHeight = currentHeight;\n\n this.ngZone.run(() => {\n this.onSizeChanged();\n });\n }\n}\n","<ion-grid id=\"raain-date-dynamic\">\n <ion-row>\n <ion-col id=\"col-container\" size-sm=\"12\">\n <div [style.height.px]=\"currentHeight\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col class=\"ion-text-right\" offset-sm=\"4\" size-sm=\"1\">\n <ion-button (click)=\"focusPrevious()\" color=\"medium\" fill=\"clear\">\n <ion-icon name=\"chevron-back-outline\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" size-sm=\"2\">\n <ion-button (click)=\"focusReset()\" *ngIf=\"!withoutAll\" color=\"medium\" fill=\"clear\">\n all dates\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" size-sm=\"1\">\n <ion-button (click)=\"focusNext()\" color=\"medium\" fill=\"clear\">\n <ion-icon name=\"chevron-forward-outline\"></ion-icon>\n </ion-button>\n </ion-col>\n </ion-row>\n</ion-grid>\n","import {\n AfterViewChecked,\n Component,\n ElementRef,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport {ElementsFactory, SpeedMatrixElementInput} from 'raain-ui';\nimport {PositionValue} from 'raain-model';\n\n@Component({\n selector: 'raain-speed',\n templateUrl: './raain-speed.component.html',\n styleUrls: ['./raain-speed.component.scss'],\n})\nexport class RaainSpeedComponent implements AfterViewChecked, OnDestroy, OnChanges {\n @Input()\n public compareSpeedMatrix: PositionValue[];\n\n @Input()\n public compareTrustedIndicator: number;\n\n @Input()\n public currentHeight: number;\n public currentWidth: number;\n public hide = false;\n @ViewChild('canvasSpeedElement')\n protected canvasSpeedElement: ElementRef;\n private onSizeChanged;\n private created;\n\n constructor(private ngZone: NgZone) {\n this.delete();\n this.onSizeChanged = () => {};\n }\n\n public ngAfterViewChecked(): void {\n this.create();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.change(changes);\n }\n\n public ngOnDestroy(): void {\n this.delete();\n }\n\n @HostListener('window:resize', ['$event'])\n private onResize(event: any): void {\n this.updateMapSize();\n }\n\n private create() {\n if (this.created || !this.compareSpeedMatrix?.length) {\n return;\n }\n this.created = true;\n\n // this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n const factory = new ElementsFactory();\n factory.createSpeedMatrixIndicator(\n this.canvasSpeedElement.nativeElement,\n new SpeedMatrixElementInput(this.compareSpeedMatrix, this.compareTrustedIndicator)\n );\n }, 10);\n // });\n }\n\n private delete() {\n this.created = false;\n this.hide = false;\n }\n\n private change(changes: SimpleChanges) {\n if (changes.compareSpeedMatrix) {\n if (!this.compareSpeedMatrix?.length) {\n this.hide = true;\n return;\n }\n }\n\n setTimeout(() => {\n this.delete();\n this.create();\n }, 10);\n }\n\n private updateMapSize(): void {\n const mapDivWidth =\n this.canvasSpeedElement.nativeElement.parentNode?.parentNode['clientWidth'];\n\n const currentWidth =\n mapDivWidth ||\n window.innerWidth ||\n document.documentElement.clientWidth ||\n document.body.clientWidth;\n const currentHeight =\n this.currentHeight ||\n window.innerHeight ||\n document.documentElement.clientHeight ||\n document.body.clientHeight;\n this.currentWidth = currentWidth;\n this.currentHeight = currentHeight;\n\n this.ngZone.run(() => {\n this.onSizeChanged();\n });\n }\n}\n","<div id=\"container\">\n <div id=\"canvas-speed-matrix\">\n <div [hidden]=\"hide\">\n <canvas #canvasSpeedElement id=\"indic1\"></canvas>\n </div>\n <div [hidden]=\"!hide\">\n <span id=\"hiddenSquare\"> </span>\n </div>\n <!-- <span>compareTrustedIndicator {{ compareTrustedIndicator }}</span> -->\n </div>\n</div>\n","import {Component, EventEmitter, Input, NgZone, Output} from '@angular/core';\nimport {XYType} from '../xytype';\nimport {CompareManager} from '../tools';\n\n@Component({\n selector: 'raain-compare-stack',\n templateUrl: './raain-compare-stack.component.html',\n styleUrls: ['./raain-compare-stack.component.scss'],\n})\nexport class RaainCompareStackComponent {\n @Input()\n public compareManager: CompareManager;\n\n @Input()\n public currentHeight: number;\n\n @Output()\n public selectedPoint = new EventEmitter<{point: XYType; compareIndex: number}>();\n\n @Input()\n public cumulative: boolean;\n\n constructor(private ngZone: NgZone) {}\n\n protected onClick(e: {point: XYType; compareIndex: number}): void {\n this.selectedPoint.emit({point: e.point, compareIndex: e.compareIndex});\n }\n\n exportCumulativeToCsv(): void {\n const points = this.compareManager.globalComparePoints;\n if (!points?.length) {\n return;\n }\n\n const dates = this.compareManager.compareDates;\n const dateRange =\n dates?.length > 0\n ? `${this.formatDate(dates[0])} - ${this.formatDate(dates[dates.length - 1])}`\n : '';\n\n const csvRows = ['dateRange,gaugeName,gaugeValue,pixelValue'];\n for (const point of points) {\n csvRows.push(`${dateRange},${point.name},${point.x},${point.y}`);\n }\n\n const csvContent = csvRows.join('\\n');\n this.downloadCsv(\n csvContent,\n `compare-cumulative-${this.formatDateForFilename(new Date())}.csv`\n );\n }\n\n exportGranularToCsv(): void {\n const allPoints = this.compareManager.getAllGranularComparePoints();\n if (!allPoints?.length) {\n return;\n }\n\n const csvRows = ['date,gaugeName,gaugeValue,pixelValue'];\n for (const point of allPoints) {\n const dateStr = this.formatDate(point.date);\n csvRows.push(`${dateStr},${point.gaugeName},${point.gaugeValue},${point.pixelValue}`);\n }\n\n const csvContent = csvRows.join('\\n');\n this.downloadCsv(\n csvContent,\n `compare-granular-${this.formatDateForFilename(new Date())}.csv`\n );\n }\n\n private downloadCsv(content: string, filename: string): void {\n const blob = new Blob([content], {type: 'text/csv;charset=utf-8;'});\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.setAttribute('href', url);\n link.setAttribute('download', filename);\n link.click();\n URL.revokeObjectURL(url);\n }\n\n private formatDate(date: Date): string {\n return date ? date.toISOString().slice(0, 16).replace('T', ' ') : '';\n }\n\n private formatDateForFilename(date: Date): string {\n return date.toISOString().slice(0, 10);\n }\n}\n","<div *ngIf=\"cumulative\">\n <ion-col size-md=\"6\" size-xs=\"12\">\n <ion-card class=\"card-compare\">\n <ion-card-header>Cumulative\n [{{ compareManager.compareDates[0] | date:'yyyy-MM-dd HH:mm' }}\n - {{ compareManager.compareDates[compareManager.compareDates.length - 1] | date:'yyyy-MM-dd HH:mm' }}[\n <span *ngIf=\"compareManager.globalQualityIndicator !== null\"\n [ngClass]=\"{\n 'quality-good': compareManager.globalQualityIndicator >= 0.5,\n 'quality-medium': compareManager.globalQualityIndicator < 0.5 && compareManager.globalQualityIndicator >= 0,\n 'quality-bad': compareManager.globalQualityIndicator < 0\n }\"\n class=\"quality-indicator\">\n Quality: {{ compareManager.globalQualityIndicator | number:'1.0-2' }}\n </span>\n </ion-card-header>\n <ion-card-content *ngIf=\"compareManager.globalComparePoints?.length\">\n <raain-compare\n (selectedPoint)=\"onClick($event)\"\n [compareIndex]=\"0\"\n [currentHeight]=\"500\"\n [pointMax]=\"compareManager.globalComparePointsMax\"\n [points]=\"compareManager.globalComparePoints\"></raain-compare>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <div class=\"ion-text-end\">\n <ion-button (click)=\"exportCumulativeToCsv()\" *ngIf=\"compareManager.globalComparePoints?.length\" fill=\"clear\"\n size=\"small\">\n <ion-icon name=\"download-outline\" slot=\"start\"></ion-icon>\n Export CSV\n </ion-button>\n </div>\n</div>\n\n<div *ngIf=\"!cumulative\">\n <ion-col *ngFor=\"let compare of compareManager?.uiCompares; index as compareIndex\" size-md=\"6\" size-xs=\"12\">\n <ion-card class=\"card-compare\">\n <ion-card-header>Gauges filled {{ compare.name }} {{ compare.remarks }}\n <span *ngIf=\"compare.qualityIndicator !== null\"\n [ngClass]=\"{\n 'quality-good': compare.qualityIndicator >= 0.5,\n 'quality-medium': compare.qualityIndicator < 0.5 && compare.qualityIndicator >= 0,\n 'quality-bad': compare.qualityIndicator < 0\n }\"\n class=\"quality-indicator\">\n Quality: {{ compare.qualityIndicator | number:'1.0-2' }}\n </span>\n </ion-card-header>\n <ion-card-content *ngIf=\"compare.comparePoints?.length\">\n <raain-compare\n (selectedPoint)=\"onClick($event)\"\n [compareIndex]=\"compareIndex\"\n [currentHeight]=\"500\"\n [pointMax]=\"compare.comparePointsMax\"\n [points]=\"compare.comparePoints\"></raain-compare>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <div class=\"ion-text-end\">\n <ion-button (click)=\"exportGranularToCsv()\" *ngIf=\"compareManager.uiCompares?.length\" fill=\"clear\" size=\"small\">\n <ion-icon name=\"download-outline\" slot=\"start\"></ion-icon>\n Export CSV\n </ion-button>\n </div>\n\n <!-- Cumulative summary of all granular comparisons -->\n <ion-col *ngIf=\"compareManager.granularCumulativePoints?.length\" size-md=\"6\" size-xs=\"12\">\n <ion-card class=\"card-compare card-compare-cumulative\">\n <ion-card-header>Cumulative Summary\n [{{ compareManager.compareDates[0] | date:'yyyy-MM-dd HH:mm' }}\n - {{ compareManager.compareDates[compareManager.compareDates.length - 1] | date:'yyyy-MM-dd HH:mm' }}[\n <span *ngIf=\"compareManager.granularCumulativeQualityIndicator !== null\"\n [ngClass]=\"{\n 'quality-good': compareManager.granularCumulativeQualityIndicator >= 0.5,\n 'quality-medium': compareManager.granularCumulativeQualityIndicator < 0.5 && compareManager.granularCumulativeQualityIndicator >= 0,\n 'quality-bad': compareManager.granularCumulativeQualityIndicator < 0\n }\"\n class=\"quality-indicator\">\n Quality: {{ compareManager.granularCumulativeQualityIndicator | number:'1.0-2' }}\n </span>\n </ion-card-header>\n <ion-card-content>\n <raain-compare\n (selectedPoint)=\"onClick($event)\"\n [compareIndex]=\"-1\"\n [currentHeight]=\"500\"\n [pointMax]=\"compareManager.granularCumulativePointsMax\"\n [points]=\"compareManager.granularCumulativePoints\"></raain-compare>\n </ion-card-content>\n </ion-card>\n </ion-col>\n</div>\n","import {\n AfterViewChecked,\n Component,\n ElementRef,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport {EarthMapElement, EarthMapElementInput, ElementsFactory} from 'raain-ui';\n\n@Component({\n selector: 'raain-globe',\n templateUrl: './raain-globe.component.html',\n styleUrls: ['./raain-globe.component.scss'],\n})\nexport class RaainGlobeComponent implements AfterViewChecked, OnDestroy, OnChanges {\n @Input()\n public points: {\n label: string;\n style: string;\n values: {date: Date; value: number}[];\n }[];\n\n @Input()\n public currentHeight: number;\n public currentWidth: number;\n\n @ViewChild('canvasElement')\n protected canvasElement: ElementRef;\n\n private earthMapElement: EarthMapElement;\n private onSizeChanged;\n private created: boolean;\n\n constructor(private ngZone: NgZone) {\n this.onSizeChanged = () => {};\n }\n\n public ngAfterViewChecked(): void {\n this.create();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.change(changes);\n }\n\n public ngOnDestroy(): void {\n this.delete();\n }\n\n @HostListener('window:resize', ['$event'])\n private onResize(event: any): void {\n this.updateMapSize();\n }\n\n private create() {\n if (this.created) {\n return;\n }\n this.created = true;\n\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n const factory = new ElementsFactory();\n try {\n this.earthMapElement = factory.createEarthMap(\n this.canvasElement.nativeElement,\n new EarthMapElementInput()\n );\n } catch (e) {\n console.warn('Dynamic focus creation issue', e);\n }\n }, 100);\n });\n }\n\n private async delete() {\n // await this.earthMapElement?.destroy();\n this.created = false;\n }\n\n private async change(changes: SimpleChanges) {\n await this.delete();\n this.create();\n }\n\n private updateMapSize(): void {\n const mapDivWidth = this.canvasElement.nativeElement.parentNode?.parentNode['clientWidth'];\n const padding = 20;\n let currentWidth =\n mapDivWidth ||\n window.innerWidth ||\n document.documentElement.clientWidth ||\n document.body.clientWidth;\n const currentHeight =\n this.currentHeight ||\n window.innerHeight ||\n document.documentElement.clientHeight ||\n document.body.clientHeight;\n currentWidth -= padding;\n this.currentWidth = currentWidth;\n this.currentHeight = currentHeight;\n\n this.ngZone.run(() => {\n this.onSizeChanged();\n });\n }\n}\n","<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\" size-sm=\"12\">\n <div #canvasElement [style.height.px]=\"currentHeight\" id=\"canvas-container\">\n </div>\n </ion-col>\n </ion-row>\n</ion-grid>\n","import {MapLatLng} from 'raain-ui';\nimport {\n GaugeNode,\n IComparePerDate,\n ICompares,\n PositionValue,\n QualityPoint,\n RainComputationQuality,\n RainNode,\n SpeedMatrix,\n SpeedMatrixContainer,\n} from 'raain-model';\nimport {XYType} from '../xytype';\nimport {ProfileService} from '../profile.service';\nimport {FrameSet} from './FrameSet';\n\nexport interface ICompareTarget {\n date: Date;\n rainComputationId?: string;\n rainComputationCumulativeId?: string;\n}\n\nexport interface IUICompare {\n date: Date;\n name: string;\n comparePoints: XYType[];\n comparePointsMax: XYType;\n comparePointsHistory: QualityPoint[];\n remarks: string;\n qualityIndicator: number;\n}\n\nexport class CompareManager {\n public gaugesInMap: MapLatLng[];\n public gaugesInCompare: MapLatLng[];\n public selectedGauges: MapLatLng[];\n public selectedPixels: MapLatLng[];\n public pixelsSolutions: MapLatLng[][];\n public speeds: MapLatLng[];\n\n // from comparesTimeline\n public compareNames: string[];\n public uiCompares: IUICompare[];\n public compareSpeedMatrix: PositionValue[];\n public compareVersion: string;\n public compareTrustedIndicator: number;\n public compareDates: Date[];\n\n public currentQualityDoneDate: Date;\n public currentQualityLaunchedBy: string;\n public currentQualityTimeSpentInMs: number;\n public globalComparePoints: XYType[];\n public globalComparePointsMax: XYType;\n public globalQualityIndicator: number;\n public compareSpeed: {angleInDegrees: number; pixelsPerPeriod: number};\n protected buildCompares: ICompares;\n protected selectedGauge: QualityPoint;\n protected selectedGaugeInPoints: QualityPoint;\n protected selectedGaugeInPointsDetail: string;\n protected rainComputationQualitiesPerDate: any;\n\n constructor(\n protected profileService: ProfileService,\n public onChanges: () => void = () => {}\n ) {\n this.cleanAll();\n }\n\n // Merged cumulative from granular comparisons (computed from buildCompares)\n public get granularCumulativePoints(): XYType[] {\n if (!this.buildCompares?.compareCumulative?.qualityPoints?.length) {\n return [];\n }\n return this.buildCompares.compareCumulative.qualityPoints.map(\n (qp) => new XYType(qp.getGaugeValue(), qp.getRainValue(), 2, qp.gaugeLabel, qp.gaugeId)\n );\n }\n\n public get granularCumulativePointsMax(): XYType {\n if (!this.buildCompares?.compareCumulative) {\n return new XYType(0, 0);\n }\n const maxValue = Math.max(this.buildCompares.compareCumulative.maxValue * 1.2, 1);\n return new XYType(maxValue, maxValue);\n }\n\n // Default: KGE normalized 0-1 (from raain-model defaults)\n public get granularCumulativeQualityIndicator(): number {\n if (!this.buildCompares?.compareCumulative?.qualityPoints?.length) {\n return null;\n }\n return SpeedMatrix.ComputeQualityIndicator(\n this.buildCompares.compareCumulative.qualityPoints\n );\n }\n\n protected _rainNode: RainNode;\n\n public get rainNode(): RainNode {\n return this._rainNode;\n }\n\n public set rainNode(rainNode: RainNode) {\n this._rainNode = rainNode;\n this.cleanAll();\n }\n\n public cleanAll() {\n this.gaugesInMap = [];\n this.gaugesInCompare = [];\n this.selectedGauges = [];\n this.selectedPixels = [];\n this.pixelsSolutions = [];\n this.compareDates = [];\n this.speeds = [];\n\n this.buildCompares = {\n comparesPerDate: [],\n compareCumulative: null,\n };\n this.globalComparePoints = [];\n this.globalComparePointsMax = new XYType(0, 0);\n this.globalQualityIndicator = null;\n // granularCumulative* are now getters computed from buildCompares\n this.rainComputationQualitiesPerDate = {};\n\n this.selectedGauge = null;\n this.selectedGaugeInPoints = null;\n this.cleanCompareQuality('no compare yet');\n }\n\n async refreshCompareQuality(frameSet: FrameSet, onlyOne: boolean) {\n const comparePerDate = this.getComparePerDate(frameSet.date);\n\n if (\n !comparePerDate ||\n !comparePerDate.rainComputationQuality?.qualitySpeedMatrixContainer\n ) {\n // this.cleanCompareQuality(\n // 'no current quality ' + Object.keys(this.rainComputationQualitiesPerDate)\n // );\n // this.onChanges();\n return;\n }\n\n if (onlyOne) {\n comparePerDate.compareTimeline = comparePerDate.compareTimeline.filter(\n (c) => c.date.getTime() === frameSet.date.getTime()\n );\n }\n\n const uiCompares: IUICompare[] = comparePerDate.compareTimeline\n .map((c) => {\n // Default: KGE normalized 0-1\n const qualityIndicator = SpeedMatrix.ComputeQualityIndicator(c.qualityPoints);\n return {\n date: c.date,\n name: c.name,\n comparePoints: c.qualityPoints.map(\n (p) =>\n new XYType(\n p.getGaugeValue(),\n p.getRainValue(),\n 2,\n p.gaugeLabel,\n p.gaugeId\n )\n ),\n comparePointsMax: new XYType(\n Math.max(c.maxValue * 1.2, 1),\n Math.max(c.maxValue * 1.2, 1)\n ),\n comparePointsHistory: c.qualityPointsLegacy,\n remarks: c.remarks,\n qualityIndicator,\n };\n })\n .sort((a, b) => a.date?.getTime() - b.date?.getTime());\n\n this.currentQualityDoneDate = comparePerDate.rainComputationQuality.isDoneDate;\n this.currentQualityTimeSpentInMs = comparePerDate.rainComputationQuality.timeSpentInMs;\n this.currentQualityLaunchedBy = comparePerDate.rainComputationQuality.launchedBy;\n this.compareVersion = comparePerDate.rainComputationQuality.getVersion();\n\n this.compareSpeed =\n comparePerDate.rainComputationQuality.qualitySpeedMatrixContainer.getSpeed();\n this.compareNames = uiCompares.map((c) => c.name);\n this.uiCompares = uiCompares;\n\n this.onChanges();\n }\n\n async refreshGlobalCompareQuality(\n targetsOrdered: ICompareTarget[],\n period: {begin: Date; end: Date},\n withCompareDuplicate: boolean,\n provider: string = 'Raain',\n timeStepInMinutes: number = 5,\n timeStepMode: 'eq' | 'lte' = 'eq'\n ) {\n try {\n await this.fetchRainComputationQualities(\n targetsOrdered,\n provider,\n timeStepInMinutes,\n timeStepMode\n );\n\n await this.buildComparesTimeline(targetsOrdered, period, withCompareDuplicate);\n\n if (!this.buildCompares.compareCumulative) {\n // throw Error('needs cumulative compare');\n return;\n }\n\n const countForAverage = targetsOrdered.length;\n const maxValue = Math.max(this.buildCompares.compareCumulative.maxValue * 1.2, 1);\n const cumulativePoints = this.buildCompares.compareCumulative.qualityPoints.map(\n (qp) =>\n new XYType(qp.getGaugeValue(), qp.getRainValue(), 2, qp.gaugeLabel, qp.gaugeId)\n );\n const cumulativePointsMax = new XYType(maxValue, maxValue);\n // Default: KGE normalized 0-1\n const cumulativeQualityIndicator = SpeedMatrix.ComputeQualityIndicator(\n this.buildCompares.compareCumulative.qualityPoints\n );\n\n // Set for cumulative mode\n this.globalComparePoints = cumulativePoints;\n this.globalComparePointsMax = cumulativePointsMax;\n this.globalQualityIndicator = cumulativeQualityIndicator;\n // granularCumulative* are now getters computed from buildCompares.compareCumulative\n } catch (e) {\n console.warn(e);\n }\n }\n\n async setGaugesInMap() {\n // Get all gauge IDs linked to this rainNode\n const rainNodeGaugeIds = this.rainNode.getLinks(GaugeNode.TYPE).map((l) => l.getId());\n\n // Fetch gauges from API (may be filtered/limited)\n let gaugesToFilter = await this.profileService.getGauges(\n this.rainNode?.id,\n this.rainNode.getCenter()\n );\n gaugesToFilter = gaugesToFilter\n .sort((a, b) => {\n return (\n a.approxDistanceFrom(this.rainNode.getCenter()) -\n b.approxDistanceFrom(this.rainNode.getCenter())\n );\n })\n .filter((v, index) => index < 200);\n\n // Build a map of gauges from API response\n const gaugesFromApi = new Map<\n string,\n {id: string; latitude: number; longitude: number; name: string}\n >();\n for (const gauge of gaugesToFilter) {\n gaugesFromApi.set(gauge.id, gauge);\n }\n\n // Fetch missing gauges individually (those linked but not in API response)\n const missingGaugeIds = rainNodeGaugeIds.filter((id) => !gaugesFromApi.has(id));\n for (const gaugeId of missingGaugeIds) {\n try {\n const gauge = await this.profileService.getGauge(gaugeId);\n if (gauge) {\n gaugesFromApi.set(gauge.id, gauge);\n }\n } catch (e) {\n console.warn(`Failed to fetch gauge ${gaugeId}:`, e);\n }\n }\n\n // Filter to only gauges linked to this rainNode\n const visibleGauges = rainNodeGaugeIds\n .map((id) => gaugesFromApi.get(id))\n .filter((g) => !!g);\n console.log('visibleGauges:', visibleGauges.length, '/', rainNodeGaugeIds.length);\n\n const gaugesLatLng: MapLatLng[] = [];\n for (const gauge of visibleGauges) {\n gaugesLatLng.push(\n new MapLatLng(gauge.latitude, gauge.longitude, undefined, gauge.id, gauge.name)\n );\n }\n this.gaugesInMap = gaugesLatLng;\n }\n\n async setGaugesInCompare() {\n const qualityPoints: QualityPoint[] = [];\n for (const compare of this.uiCompares) {\n for (const qualityPoint of compare.comparePointsHistory) {\n const alreadyAdded = qualityPoints.filter(\n (p) => p?.gaugeId === qualityPoint.gaugeId\n );\n if (alreadyAdded.length === 0) {\n qualityPoints.push(qualityPoint);\n }\n }\n }\n\n this.gaugesInCompare = qualityPoints.map((p) => {\n return new MapLatLng(\n p.gaugeCartesianValue.lat,\n p.gaugeCartesianValue.lng,\n 0,\n p.gaugeId,\n p.gaugeLabel + '>' + p.getGaugeValue(),\n p.getGaugeValue()\n );\n });\n\n this.resetSelectedGauges();\n }\n\n async selectGauge(gaugeId: string, compareIndex: number) {\n if (gaugeId) {\n const xys = this.getCurrentQualityPoints(compareIndex).filter(\n (p) => p.gaugeId === gaugeId\n );\n this.selectedGauge = xys.length === 1 ? xys[0] : null;\n } else {\n this.selectedGauge = null;\n }\n\n if (!this.selectedGauge) {\n this.resetSelectedGauges();\n const gaugesFiltered = this.gaugesInMap.filter((g) => g.id === gaugeId);\n if (gaugesFiltered.length === 1) {\n this.selectedGauges = [gaugesFiltered[0]];\n }\n return;\n }\n\n const selectedGaugeInPoints = this.getCurrentQualityPoints(compareIndex).filter(\n (p) => p.gaugeId === this.selectedGauge.gaugeId\n );\n let pixelsSolutions: MapLatLng[][] = [];\n\n if (selectedGaugeInPoints.length === 1) {\n const remarks = JSON.parse(selectedGaugeInPoints[0].remark).sort(\n (a, b) => a.criteriaAttemptedToBeMinimum - b.criteriaAttemptedToBeMinimum\n );\n console.log(remarks);\n pixelsSolutions = remarks.map((remark) =>\n remark.solutionForGauge.pixels.map(\n (p) =>\n new MapLatLng(\n p.y + 0.005,\n p.x + 0.01,\n 0,\n '' + !remark.notPossible,\n '' + !remark.notPossible,\n 1\n )\n )\n );\n\n const timeDeltaInMinutes = selectedGaugeInPoints[0].getTimeDeltaInMinutes();\n this.selectedGaugeInPointsDetail =\n '' +\n selectedGaugeInPoints[0].gaugeLabel +\n ' > ' +\n Math.round(selectedGaugeInPoints[0].getGaugeValue() * 100) / 100 +\n ' / ' +\n Math.round(selectedGaugeInPoints[0].getRainValue() * 100) / 100 +\n ' dT=' +\n timeDeltaInMinutes;\n\n this.selectedGaugeInPoints = selectedGaugeInPoints[0];\n } else {\n this.selectedGaugeInPoints = null;\n this.selectedGauges = [];\n this.selectedPixels = [];\n this.pixelsSolutions = [];\n return;\n }\n\n this.selectedGauges = [\n new MapLatLng(\n this.selectedGaugeInPoints.gaugeCartesianValue.lat,\n this.selectedGaugeInPoints.gaugeCartesianValue.lng,\n undefined,\n this.selectedGaugeInPoints.gaugeId,\n this.selectedGaugeInPoints.gaugeLabel +\n '>' +\n this.selectedGaugeInPoints.gaugeCartesianValue.value,\n this.selectedGaugeInPoints.gaugeCartesianValue.value\n ),\n ];\n\n this.selectGaugeInCompare();\n\n const pixels: MapLatLng[] = [];\n for (const rainCartesianValue of this.selectedGaugeInPoints.rainCartesianValues) {\n pixels.push(\n new MapLatLng(rainCartesianValue.lat + 0.005, rainCartesianValue.lng + 0.01)\n );\n }\n this.selectedPixels = pixels;\n\n this.pixelsSolutions = pixelsSolutions;\n }\n\n // Returns all granular quality points across all dates in the period (excludes cumulative end date)\n getAllGranularComparePoints(): {\n date: Date;\n gaugeName: string;\n gaugeValue: number;\n pixelValue: number;\n }[] {\n const result: {date: Date; gaugeName: string; gaugeValue: number; pixelValue: number}[] =\n [];\n\n if (!this.buildCompares?.comparesPerDate?.length || !this.compareDates?.length) {\n return result;\n }\n\n // Find the last date (cumulative end date) to exclude it\n const lastDateTime = Math.max(...this.compareDates.map((d) => d.getTime()));\n\n for (const comparePerDate of this.buildCompares.comparesPerDate) {\n // Skip the last date which contains cumulative values\n if (comparePerDate.date.getTime() >= lastDateTime) {\n continue;\n }\n if (!comparePerDate.compareTimeline?.length) {\n continue;\n }\n // Get first timeline entry (current step) for each date\n const currentCompare = comparePerDate.compareTimeline[0];\n if (!currentCompare?.qualityPoints?.length) {\n continue;\n }\n for (const qp of currentCompare.qualityPoints) {\n result.push({\n date: comparePerDate.date,\n gaugeName: qp.gaugeLabel,\n gaugeValue: qp.getGaugeValue(),\n pixelValue: qp.getRainValue(),\n });\n }\n }\n\n return result.sort((a, b) => a.date.getTime() - b.date.getTime());\n }\n\n protected async buildComparesTimeline(\n targetsOrdered: ICompareTarget[],\n period: {begin: Date; end: Date},\n withCompareDuplicate: boolean\n ): Promise<ICompares> {\n const compareDates = targetsOrdered.map((t) => t.date);\n\n const qualities: RainComputationQuality[] = compareDates\n .filter((d) => !!d)\n .map((d) => this.getRainComputationQuality(d))\n .filter((rcq) => !!rcq);\n\n this.compareDates = compareDates?.length > 1 ? compareDates : [period.begin, period.end];\n if (this.compareDates[0].getTime() > period.begin.getTime()) {\n this.compareDates.unshift(period.begin);\n }\n\n this.buildCompares = SpeedMatrixContainer.BuildCompares(qualities, !withCompareDuplicate);\n return this.buildCompares;\n }\n\n protected getComparePerDate(date: Date): IComparePerDate {\n const existing = this.buildCompares.comparesPerDate.filter(\n (c) => c.date.getTime() === date.getTime()\n );\n if (existing.length === 1) {\n return existing[0];\n }\n return null;\n }\n\n protected getCurrentQualityPoints(compareIndex: number) {\n if (\n this.uiCompares.length === 0 ||\n compareIndex < 0 ||\n this.compareNames.length < compareIndex\n ) {\n return [];\n }\n\n return this.uiCompares[compareIndex].comparePointsHistory;\n }\n\n protected cleanCompareQuality(details?: string) {\n this.compareVersion = details;\n this.compareNames = [];\n this.uiCompares = [];\n this.compareSpeedMatrix = [];\n this.compareTrustedIndicator = undefined;\n\n this.currentQualityDoneDate = new Date(-1);\n this.currentQualityLaunchedBy = '';\n this.currentQualityTimeSpentInMs = -1;\n }\n\n protected async fetchRainComputationQualities(\n targetsOrdered: ICompareTarget[],\n provider: string = 'Raain',\n timeStepInMinutes: number = 5,\n timeStepMode: 'eq' | 'lte' = 'eq'\n ) {\n for (const target of targetsOrdered) {\n if (!this.rainComputationQualitiesPerDate[target.date.toISOString()]) {\n try {\n let rainComputationQuality: RainComputationQuality;\n\n if (target.rainComputationCumulativeId) {\n rainComputationQuality =\n await this.profileService.getRainCumulativeCumulativesCompare(\n this.rainNode,\n target.rainComputationCumulativeId,\n provider,\n timeStepInMinutes,\n timeStepMode\n );\n }\n\n if (rainComputationQuality) {\n let isConsistent = true;\n const matrices =\n rainComputationQuality.qualitySpeedMatrixContainer.getMatrices();\n for (const matrix of matrices) {\n if (!matrix.isConsistent()) {\n isConsistent = false;\n }\n }\n\n if (!isConsistent) {\n console.warn(\n `One of rainComputationQuality matrices is not consistent for ${target.date.toISOString()}`\n );\n }\n\n this.rainComputationQualitiesPerDate[target.date.toISOString()] =\n rainComputationQuality;\n }\n } catch (e) {\n console.warn(e);\n }\n }\n }\n }\n\n protected getRainComputationQuality(date: Date): RainComputationQuality {\n return this.rainComputationQualitiesPerDate[date.toISOString()];\n }\n\n protected selectGaugeInCompare() {\n const globalComparePoints = JSON.parse(JSON.stringify(this.globalComparePoints));\n for (const p of globalComparePoints) {\n if (p.id === this.selectedGaugeInPoints?.gaugeId) {\n p.r = 10;\n } else {\n p.r = 2;\n }\n }\n this.globalComparePoints = globalComparePoints;\n\n for (const compare of this.uiCompares) {\n const comparePoints = JSON.parse(JSON.stringify(compare.comparePoints));\n comparePoints.forEach((p) => {\n if (p.id === this.selectedGaugeInPoints?.gaugeId) {\n p.r = 10;\n } else {\n p.r = 3;\n }\n });\n compare.comparePoints = comparePoints;\n }\n }\n\n protected resetSelectedGauges() {\n // console.log('resetSelectedGauges reset');\n this.selectedGauge = null;\n this.selectedGaugeInPoints = null;\n this.selectedGauges = [];\n this.selectedPixels = [];\n this.pixelsSolutions = [];\n this.selectGaugeInCompare();\n }\n}\n","export class FrameSet {\n constructor(\n public date: Date,\n public radarMeasureIds: string[] = [],\n public rainComputationId: string = null,\n public rainComputationVersion: string = null,\n public rainComputationQualities: {\n version: string;\n id: string;\n }[] = [],\n public rainComputationCumulativeId: string = null\n ) {}\n}\n","import {GaugeNode, LatLng} from 'raain-model';\n\nexport class GaugeNodeFilter extends GaugeNode {\n public isIn = true;\n public distance = 0;\n\n constructor(json: any) {\n super(json);\n }\n\n approxDistanceFrom(center: LatLng): number {\n this.distance =\n Math.round(\n (Math.pow(this.latitude - center.lat, 2) +\n Math.pow(this.longitude - center.lng, 2)) *\n 100 *\n 100\n ) / 100;\n return this.distance;\n }\n\n add() {\n this.isIn = true;\n }\n\n remove() {\n this.isIn = false;\n }\n}\n","import {FrameSet} from './FrameSet';\nimport {from, mergeMap, Subject, takeUntil, timer} from 'rxjs';\nimport {\n CartesianMeasureValue,\n CartesianTools,\n ICartesianMeasureValue,\n RadarNode,\n RainComputationMap,\n RainNode,\n} from 'raain-model';\nimport {CartesianMapValue, TimeframeContainer, TimeframeContainers} from 'raain-ui';\nimport {RadarService} from '../radar.service';\nimport {ProfileService} from '../profile.service';\nimport {CompareManager, ICompareTarget} from './CompareManager';\nimport {XYType} from '../xytype';\n\nconst sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\nexport class RefreshManager {\n public rainComputationMapVersion: string;\n public rainComputationMapDate: Date;\n public rainComputationMapDoneDate: Date;\n public rainComputationMapLaunchedBy: string;\n public rainComputationMapTimeSpentInMs: number;\n\n public rainComputationMapOriginalMin: number;\n public rainComputationMapOriginalMax: number;\n\n public sumFn: (cartesianMapValues: CartesianMapValue[]) => number;\n public sumValues: CartesianMapValue[];\n\n public provider: string = 'Raain';\n public timeStepInMinutes: number = 10;\n public timeStepMode: 'eq' | 'lte' = 'eq';\n public lastError: string = '';\n public cumulative: boolean = false;\n\n protected closeRefreshTimer: Subject<unknown>;\n protected countsPeriod: {\n percentImages?: XYType[];\n queueRunning?: number;\n progress?: number;\n };\n protected timeframesFromRadars: FrameSet[];\n protected timeframesFromRadarsExtended: FrameSet[];\n protected timelineSelectedFrameSet: FrameSet;\n protected timeframeDates: Date[];\n protected expectedTimelineCount: number = 0;\n protected presentTimelineCount: number = 0;\n protected cartesianTools: CartesianTools;\n protected removeDuplicate: boolean;\n protected dataInternal: boolean;\n protected onRefreshInProgress: (\n countPeriods: {\n percentImages?: XYType[];\n queueRunning?: number;\n progress?: number;\n },\n timeframeDates: Date[]\n ) => Promise<void>;\n protected onRefreshDone: (timeframeDates: Date[]) => Promise<void>;\n protected onFetchDone: (timeframeContainers?: TimeframeContainers) => Promise<void>;\n\n constructor(\n protected radarService: RadarService,\n protected profileService: ProfileService,\n protected compareManager: CompareManager\n ) {\n this._period = {begin: new Date(), end: new Date()};\n this.closeRefreshTimer = new Subject<unknown>();\n this.cartesianTools = new CartesianTools();\n this.cleanAll();\n }\n\n protected _rainNode: RainNode;\n\n public get rainNode(): RainNode {\n return this._rainNode;\n }\n\n public set rainNode(rainNode: RainNode) {\n this._rainNode = rainNode;\n this.cleanAll();\n }\n\n protected _period: {begin: Date; end: Date};\n\n get period(): {begin: Date; end: Date} {\n return this._period;\n }\n\n set period(period: {begin: Date; end: Date}) {\n this._period.begin = new Date(period.begin);\n this._period.end = new Date(period.end);\n this.refreshCounts().then((ignored) => {});\n }\n\n public setMethods(\n onRefreshInProgress: (\n countPeriods: {\n percentImages?: XYType[];\n queueRunning?: number;\n },\n timeframeDates: Date[]\n ) => Promise<void>,\n onRefreshDone: (timeframeDates: Date[]) => Promise<void>,\n onFetchDone: (timeframeContainers?: TimeframeContainers) => Promise<void>\n ) {\n this.onRefreshInProgress = onRefreshInProgress;\n this.onRefreshDone = onRefreshDone;\n this.onFetchDone = onFetchDone;\n }\n\n cleanAll() {\n this.lastError = '';\n this.countsPeriod = {percentImages: [], queueRunning: 0, progress: 0};\n this.timeframesFromRadars = [];\n this.timeframesFromRadarsExtended = [];\n this.timeframeDates = [];\n this.removeDuplicate = true;\n this.closeRefreshTimer?.next(null);\n }\n\n async fetch(\n dateShown: Date,\n withGaugesMeasures: boolean,\n cumulativeHours = 0\n ): Promise<FrameSet> {\n // set the target\n const currents = this.timeframesFromRadarsExtended.filter(\n (t) => t.date.getTime() === dateShown.getTime()\n );\n if (currents.length !== 1) {\n return;\n }\n\n // build current Frameset\n const current: FrameSet = currents[0];\n const target = {\n ...current,\n withGauge: withGaugesMeasures,\n cumulativeHours: cumulativeHours,\n };\n\n const timeframeContainers = await this.refreshMapTimeframeContainers(target);\n\n await this.onFetchDone(timeframeContainers);\n await this.refreshCompareQuality(current);\n\n this.timelineSelectedFrameSet = current;\n }\n\n getTimelineFrameSet(): FrameSet[] {\n return this.timeframesFromRadars;\n }\n\n getExpectedTimelineCount(): number {\n return this.expectedTimelineCount;\n }\n\n getPresentTimelineCount(): number {\n return this.presentTimelineCount;\n }\n\n getTimelineSelectedFrameSet(): FrameSet {\n return this.timelineSelectedFrameSet;\n }\n\n async refresh(launchQualityAfter: boolean, dataInternal: boolean) {\n this.lastError = '';\n\n this.checkPeriod();\n\n this.dataInternal = dataInternal;\n\n const asyncDone = (error?: string) => {\n if (error) {\n console.error('Error in refresh', error);\n }\n this.closeRefreshTimer.next(null);\n this.onRefreshDone(this.timeframeDates).then((_ignored) => {});\n };\n\n const asyncRefresh = async () => {\n this.onRefreshInProgress(await this.refreshCounts(), this.timeframeDates).then(\n (_ignored) => {}\n );\n const done = await this.refreshPeriodInsidePolling();\n if (done) {\n asyncDone();\n }\n };\n\n timer(1000, 10000) // Wait 1s, then every 10s\n .pipe(\n mergeMap(() => from(asyncRefresh())),\n takeUntil(this.closeRefreshTimer)\n )\n .subscribe({\n error: (error) => asyncDone(JSON.stringify(error)),\n });\n }\n\n setRemoveDuplicate(b: boolean) {\n this.removeDuplicate = b;\n }\n\n public async setReportPeriod(date: Date) {\n let values: CartesianMapValue[] = [];\n for (const frameSet of this.timeframesFromRadars) {\n if (frameSet.date.getTime() !== date.getTime()) {\n continue;\n }\n values = values.concat(await this.getValues(frameSet));\n }\n\n this.sumFn = (cartesianMapValues: CartesianMapValue[]) => {\n return cartesianMapValues.reduce((p, v) => p + v.value, 0);\n };\n this.sumValues = values;\n }\n\n protected checkPeriod() {\n if (this.period.begin.getTime() === this.period.end.getTime()) {\n const message = 'need a period';\n this.lastError += message;\n throw new Error(message);\n }\n }\n\n protected async refreshCounts() {\n if (!this.rainNode) {\n return this.countsPeriod;\n }\n\n const counts = await this.profileService.getCounts(this.rainNode.id, {\n range: 'day',\n periodBegin: this._period.begin,\n });\n\n let progress = 0;\n\n // Verify progress only for SimpleZone\n if (this.rainNode.getLinks(RadarNode.TYPE).length <= 1) {\n progress = await this.profileService.getRainProgress(this.rainNode.id);\n }\n\n this.countsPeriod = {\n ...counts,\n progress,\n };\n\n return this.countsPeriod;\n }\n\n protected getRainComputationQualityTarget(frameset: FrameSet): string {\n if (frameset.rainComputationQualities.length <= 0) {\n return undefined;\n }\n return frameset.rainComputationQualities[0].id;\n }\n\n protected async refreshPeriodInsidePolling(): Promise<boolean> {\n try {\n const done = await this.refreshCheckIfDone();\n\n // behind refresh\n await this.refreshTimeframesFromRadars(done);\n await this.refreshGlobalCompareReport(done);\n\n return done;\n } catch (e) {\n console.warn(e);\n this.lastError += e.message;\n }\n return false;\n }\n\n protected async refreshCheckIfDone(): Promise<boolean> {\n await sleep(2000);\n return this.countsPeriod.progress === 0;\n }\n\n protected async refreshTimeframesFromRadars(done: boolean) {\n if (!done || !this.rainNode) {\n return [];\n }\n\n try {\n const beginExtended = new Date(this.period.begin);\n const endExtended = new Date(this.period.end);\n if (!this.cumulative) {\n // Only extend period for granular mode (to get neighboring frames)\n // For cumulative mode, use exact period\n beginExtended.setMinutes(beginExtended.getMinutes() - 7);\n endExtended.setMinutes(endExtended.getMinutes() + 7);\n }\n\n const windowInMinutes = this.cumulative\n ? Math.round((this.period.end.getTime() - this.period.begin.getTime()) / 60000)\n : this.timeStepInMinutes;\n\n this.rainNode = await this.profileService.getRainTimeframe(\n this.rainNode.id,\n beginExtended,\n endExtended,\n this.dataInternal,\n this.provider,\n this.timeStepInMinutes,\n windowInMinutes\n );\n\n this.timeframesFromRadarsExtended = await this.radarService.getTimeline(this.rainNode);\n this.timeframesFromRadars = this.timeframesFromRadarsExtended\n .filter(\n (frameSet) =>\n this.period.begin.getTime() < frameSet.date.getTime() &&\n frameSet.date.getTime() <= this.period.end.getTime()\n )\n .sort((a, b) => a.date.getTime() - b.date.getTime());\n\n this.timeframeDates = this.timeframesFromRadars.map((frameSet) => frameSet.date);\n\n // Compute all expected dates\n // For cumulative mode: only 1 expected date (the period end)\n // For granular mode: all dates from period.begin to period.end with timeStepInMinutes\n const allExpectedDates: Date[] = [];\n if (this.cumulative) {\n // In cumulative mode, we expect only ONE timeframe (the cumulative)\n allExpectedDates.push(new Date(this.period.end));\n } else {\n // Start from begin + step: cumulative dates represent window ends,\n // so the first expected date is begin + timeStep, not begin itself\n const beginTime = new Date(this.period.begin).getTime();\n const currentDate = new Date(beginTime + this.timeStepInMinutes * 60000);\n while (currentDate.getTime() <= this.period.end.getTime()) {\n allExpectedDates.push(new Date(currentDate));\n currentDate.setMinutes(currentDate.getMinutes() + this.timeStepInMinutes);\n }\n }\n\n this.expectedTimelineCount = allExpectedDates.length;\n\n // Check if all expected dates are present in timeframeDates\n const timeframeDateTimes = new Set(this.timeframeDates.map((d) => d.getTime()));\n const missingDates = allExpectedDates.filter(\n (expectedDate) => !timeframeDateTimes.has(expectedDate.getTime())\n );\n this.presentTimelineCount = allExpectedDates.length - missingDates.length;\n\n if (missingDates.length > 0) {\n const message =\n `Missing ${missingDates.length} timeframe(s) out of ${allExpectedDates.length} expected: ` +\n missingDates.map((d) => d.toISOString()).join(', ');\n console.warn(message);\n this.lastError += message;\n }\n\n return this.timeframesFromRadars;\n } catch (e) {\n console.error('refreshTimeframesFromRadars', e);\n }\n\n return [];\n }\n\n protected async refreshGlobalCompareReport(done: boolean) {\n if (!done) {\n return;\n }\n\n try {\n const targets: ICompareTarget[] = [];\n for (const frameSet of this.timeframesFromRadars) {\n const target = JSON.parse(JSON.stringify(frameSet));\n target.date = new Date(target.date);\n targets.push(target);\n }\n\n await this.compareManager.refreshGlobalCompareQuality(\n targets,\n this.period,\n !this.removeDuplicate,\n this.provider,\n this.timeStepInMinutes,\n this.timeStepMode\n );\n } catch (e) {\n console.error('refreshGlobalCompareReport', e);\n }\n }\n\n protected async refreshMapTimeframeContainers(target: {\n date: Date;\n rainComputationCumulativeId: string;\n withGauge: boolean;\n cumulativeHours: number;\n }) {\n if (!target?.rainComputationCumulativeId) {\n const message = `Pb with refreshMapTimeframeContainers insights ${target?.date.toISOString()}`;\n console.warn(message);\n this.lastError += message;\n return null;\n }\n\n const rainNode = this.rainNode;\n const containers: TimeframeContainer[] = [];\n const newCreatedTimeframeContainers = new TimeframeContainers(containers);\n try {\n let rainNodeCartesianMap: RainComputationMap;\n\n if (target.cumulativeHours && target.rainComputationCumulativeId) {\n // For N-hour cumulative, use the last frame's cumulative (end of period)\n // The cumulative is pre-computed by raain-ground with windowInMinutes=60\n const lastFrame =\n this.timeframesFromRadarsExtended[this.timeframesFromRadarsExtended.length - 1];\n const cumulativeId =\n lastFrame?.rainComputationCumulativeId || target.rainComputationCumulativeId;\n\n // Use direct cartesian-map endpoint - cumulative data fetched from S3\n rainNodeCartesianMap =\n await this.profileService.getRainComputationCumulativeCartesianMapById(\n rainNode.id,\n cumulativeId\n );\n } else {\n rainNodeCartesianMap =\n await this.profileService.getRainComputationCumulativeCartesianMapById(\n rainNode.id,\n target.rainComputationCumulativeId\n );\n }\n\n if (rainNodeCartesianMap) {\n newCreatedTimeframeContainers.addFromRainComputationMap(\n rainNodeCartesianMap,\n false\n );\n\n this.rainComputationMapVersion = rainNodeCartesianMap.version;\n this.rainComputationMapDate = new Date(rainNodeCartesianMap.date);\n this.rainComputationMapDoneDate = rainNodeCartesianMap.isDoneDate;\n this.rainComputationMapLaunchedBy = rainNodeCartesianMap.launchedBy;\n this.rainComputationMapTimeSpentInMs = rainNodeCartesianMap.timeSpentInMs;\n\n this.rainComputationMapOriginalMin = rainNodeCartesianMap.originalDBZMin;\n this.rainComputationMapOriginalMax = rainNodeCartesianMap.originalDBZMax;\n }\n } catch (e) {\n const message = `Pb with cumulatives for id: ${target.rainComputationCumulativeId} ${e.message}`;\n console.warn(message);\n this.lastError += message;\n }\n\n return newCreatedTimeframeContainers;\n }\n\n protected async refreshCompareQuality(frameSet: FrameSet) {\n await this.compareManager.refreshCompareQuality(frameSet, true);\n await this.compareManager.setGaugesInCompare();\n }\n\n protected async getValues(target: FrameSet): Promise<CartesianMapValue[]> {\n if (!target?.rainComputationCumulativeId) {\n const message = `Pb with target insights ${target?.date.toISOString()}`;\n console.warn(message);\n this.lastError += message;\n return [];\n }\n\n let values: CartesianMapValue[] = [];\n const rainComputationMap =\n await this.profileService.getRainComputationCumulativeCartesianMapById(\n this.rainNode.id,\n target.rainComputationCumulativeId\n );\n\n try {\n if (rainComputationMap) {\n rainComputationMap.getMapData().forEach((m) => {\n if (m.values) {\n (m.values as ICartesianMeasureValue[]).forEach((v) => {\n const cartesianMeasureValue = CartesianMeasureValue.From(v);\n values = values.concat(\n CartesianMapValue.From(\n cartesianMeasureValue.getCartesianValues(),\n this.cartesianTools\n )\n );\n });\n }\n });\n }\n } catch (e) {\n const message = `Pb with cumulatives for id: ${target.rainComputationCumulativeId} ${e.message}`;\n console.warn(message);\n this.lastError += message;\n }\n\n return values;\n }\n}\n","import {DateRange} from 'raain-ui';\n\nexport function mapDateRangeToString(range: DateRange): 'hour' | 'day' | 'month' | 'year' {\n switch (range) {\n case DateRange.HOUR:\n return 'hour';\n case DateRange.DAY:\n return 'day';\n case DateRange.MONTH:\n return 'month';\n case DateRange.YEAR:\n return 'year';\n default:\n return 'year';\n }\n}\n","import {FidjService} from 'fidj-angular';\nimport {EventNode, GaugeNode, Link, PeopleNode, RadarNode, RainNode} from 'raain-model';\nimport {Storage} from './storage.service';\n\nexport class FidjStorageNode {\n public radars: RadarNode[] = [];\n public rains: RainNode[] = [];\n public gauges: GaugeNode[] = [];\n public team: PeopleNode;\n public events: EventNode[] = [];\n\n public infos: any = {};\n\n static getEmptyNode() {\n return new FidjStorageNode();\n }\n\n static getDemoNode() {\n const demoNode = new FidjStorageNode();\n const link = new Link('rain', 'https://demo/api/rains/2');\n /*\n demoNode.radars = [\n new RadarNode({\n id: '5efd04569cb1f4161bd69dc7',\n name: 'demo radar A',\n links: [link],\n latitude: 48.774569,\n longitude: 2.008407\n }),\n new RadarNode({\n id: 'dr2',\n name: 'demo radar B',\n links: [link],\n latitude: 0.11,\n longitude: -0.753\n }),\n new RadarNode({\n id: 'dr3',\n name: 'demo radar C',\n latitude: 0.13,\n longitude: -0.753,\n links: []\n }),\n new RadarNode({\n id: 'dr4',\n name: 'demo radar D',\n latitude: 0.14,\n longitude: -0.74,\n links: []\n })];\n demoNode.rains = [\n new RainNode({\n id: '5efd04569cb1f4161bd69dc8',\n name: 'Demo rain zone A',\n links: [new Link('radar', 'https://demo/api/radars/5efcfe619cb1f4161bd69dc3')],\n status: 0,\n quality: 75,\n latitude: 48.774569,\n longitude: 2.008407\n }),\n new RainNode({\n id: 'dz2',\n name: 'Demo rain zone B',\n radars: [demoNode.radars[0], demoNode.radars[1]],\n status: 1,\n quality: 50,\n latitude: 48.774569,\n longitude: 2.008407\n }),\n new RainNode({\n id: 'dz3',\n name: 'Demo rain zone C',\n radars: [demoNode.radars[0], demoNode.radars[1]],\n status: 2,\n quality: 75,\n latitude: 48.774569,\n longitude: 2.008407\n }),\n new RainNode({\n id: 'dz4',\n name: 'Demo rain zone D',\n radars: [demoNode.radars[0], demoNode.radars[1]],\n status: 3,\n quality: 95,\n latitude: 48.774569,\n longitude: 2.008407\n })];\n\n demoNode.gauges = [\n new GaugeNode({\n id: 'g1',\n name: 'Gauge A',\n latitude: 48.7748,\n longitude: 2.28407,\n }),\n new GaugeNode({\n id: 'g2',\n name: 'Gauge B',\n latitude: 48.874569,\n longitude: 2.108407,\n })];\n demoNode.events = [{\n id: 'e2',\n title: 'Need support ?',\n status: 0,\n red: false,\n description: 'This area is dedicated to support you and your team. Support is made on Radar or Rain quality, ' +\n 'or any feedback we can have about your production system. Our goal : improving your data.',\n created: new Date(),\n modified: new Date()\n }];\n demoNode.team = {\n id: 'p1',\n email: 'demo@demo.com',\n name: 'demo guy',\n description: 'the demo guy'\n };\n\n */\n return demoNode;\n }\n}\n\nclass FidjStorageResult {\n data: FidjStorageNode;\n}\n\nexport class FidjStorage {\n private isDemoMode: boolean;\n private node: FidjStorageNode = FidjStorageNode.getEmptyNode();\n private fidjMetaResult: FidjStorageResult = {data: new FidjStorageNode()};\n\n constructor(private storage: Storage) {}\n\n public async storeData(fidjService: FidjService, data) {\n this.node = JSON.parse(JSON.stringify(data));\n this.fidjMetaResult.data = this.node;\n\n if (this.isDemoMode) {\n this.storage.set('fidjMetaResult', JSON.stringify(this.fidjMetaResult));\n return;\n }\n\n await fidjService.put(this.fidjMetaResult);\n }\n\n public async getRefreshedNodeCopy(fidjService: FidjService): Promise<FidjStorageNode> {\n if (this.isDemoMode) {\n const fidjMetaResult = this.storage.get('fidjMetaResult');\n if (fidjMetaResult) {\n this.fidjMetaResult = JSON.parse(fidjMetaResult);\n this.node = this.fidjMetaResult.data;\n }\n return JSON.parse(JSON.stringify(this.node));\n }\n\n const firstDemoData = async () => {\n this.node = FidjStorageNode.getDemoNode();\n await this.storeData(fidjService, this.node);\n };\n\n await fidjService.sync(firstDemoData);\n const fidjFindAllResults: any = await fidjService.findAll();\n\n if (fidjFindAllResults && fidjFindAllResults.length > 0) {\n if (fidjFindAllResults[0].data) {\n this.fidjMetaResult = fidjFindAllResults[0];\n this.node = this.fidjMetaResult.data;\n }\n }\n\n return JSON.parse(JSON.stringify(this.node));\n }\n\n setDemoMode(isDemo: boolean) {\n this.isDemoMode = isDemo;\n }\n}\n","import {Injectable} from '@angular/core';\nimport {HttpClient} from '@angular/common/http';\nimport {BehaviorSubject} from 'rxjs';\nimport {\n BuildQueryString,\n EventNode,\n GaugeMeasure,\n GaugeNode,\n LatLng,\n RaainApiGaugesFindAllMineRequest,\n RaainApiGaugesFindAllMineResponse,\n RaainApiGaugesFindMeasuresRequest,\n RaainApiGaugesFindMeasuresResponse,\n RaainApiGaugesFindOneResponse,\n RaainApiNotificationsAddRequestBody,\n RaainApiNotificationsAddResponse,\n RaainApiNotificationsFindAllMineRequest,\n RaainApiNotificationsFindAllMineResponse,\n RaainApiRadarsFindAllMineRequest,\n RaainApiRadarsFindAllMineResponse,\n RaainApiRadarsFindOneResponse,\n RaainApiRadarsUpdateRequestBody,\n RaainApiRainsCumulativeCartesianMapRequest,\n RaainApiRainsCumulativeCartesianMapResponse,\n RaainApiRainsCumulativeComparesResponse,\n RaainApiRainsCumulativeCumulativeResponse,\n RaainApiRainsCumulativeCumulativesComparesRequest,\n RaainApiRainsCumulativeCumulativesComparesResponse,\n RaainApiRainsCumulativesCreateRequest,\n RaainApiRainsCumulativesCreateResponse,\n RaainApiRainsCumulativesDetailedResponse,\n RaainApiRainsCumulativesListRequest,\n RaainApiRainsCumulativesListResponse,\n RaainApiRainsFindAllMineRequest,\n RaainApiRainsFindAllMineResponse,\n RaainApiRainsFindOneResponse,\n RaainApiRainsFindOneTimeframeCumulativeRequest,\n RaainApiRainsFindOneTimeframeCumulativeResponse,\n RaainApiRainsGetCountsRequest,\n RaainApiRainsGetCountsResponse,\n RaainApiRainsIndicatorsRequest,\n RaainApiRainsIndicatorsResponse,\n RaainApiRainsProgressResponse,\n RaainApiRainsProvidersResponse,\n RaainApiTeamsFindAllMineRequest,\n RaainApiTeamsFindOneResponse,\n RadarNode,\n RainComputationMap,\n RainComputationQuality,\n RainNode,\n SpeedMatrixContainer,\n TeamNode,\n} from 'raain-model';\n\nimport {Storage} from './storage.service';\n\nimport {FidjStorage, FidjStorageNode} from './fidj-storage.model';\nimport {ErrorInterface, FidjService, LoggerLevelEnum} from 'fidj-angular';\nimport {XYType} from './xytype';\nimport {GaugeNodeFilter} from './tools';\nimport {Router} from '@angular/router';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ProfileService {\n public readyForSync: BehaviorSubject<boolean>;\n public asTeamId: string;\n\n protected email: string;\n protected isDemo: boolean;\n protected roles: Array<string>;\n protected nodeData: FidjStorageNode;\n protected fidjStorage: FidjStorage;\n protected haveTryToReconnect: boolean;\n\n constructor(\n protected storage: Storage,\n protected fidjService: FidjService,\n protected httpClient: HttpClient,\n private router: Router\n ) {\n this.email = this.storage.get('raain-email');\n this.asTeamId = this.storage.get('raain-asTeamId');\n this.readyForSync = new BehaviorSubject<boolean>(false);\n this.roles = [];\n this.fidjStorage = new FidjStorage(storage);\n this.isDemoMode = false;\n }\n\n get isDemoMode() {\n return this.isDemo;\n }\n\n set isDemoMode(mode) {\n this.isDemo = mode ? mode : true;\n this.fidjStorage.setDemoMode(this.isDemo);\n }\n\n get defaultUrlForAPI() {\n return this.storage.get('raain-urlForAPI');\n }\n\n set defaultUrlForAPI(url: string) {\n this.storage.set('raain-urlForAPI', url);\n }\n\n async refreshProfile(): Promise<FidjStorageNode> {\n try {\n this.nodeData = await this.fidjStorage.getRefreshedNodeCopy(this.fidjService);\n this.setRoles(await this.fidjService.getRoles());\n return this.nodeData;\n } catch (e) {\n await this.checkError(e);\n }\n }\n\n async isConnected() {\n return this.fidjService.isConnected();\n }\n\n getEmail() {\n return this.email ?? this.storage.get('raain-email', this.email);\n }\n\n setEmail(email: string) {\n this.email = email;\n this.storage.set('raain-email', this.email);\n }\n\n async logout(fidjKey: string, fidjProd: boolean) {\n // this.storage.remove('raain-email');\n\n if (!fidjKey) {\n try {\n await this.fidjService.loginInDemoMode();\n this.readyForSync.next(true);\n } catch (err) {\n console.error('initFidj catch pb: ', err);\n }\n\n return;\n }\n\n await this.fidjService.logout(true);\n\n try {\n await this.fidjService.init(fidjKey, {\n logLevel: LoggerLevelEnum.WARN, // fidjProd ? LoggerLevelEnum.WARN : LoggerLevelEnum.INFO,\n crypto: false,\n prod: fidjProd,\n useDB: false,\n });\n this.readyForSync.next(true);\n } catch (err) {\n console.error('initFidj catch pb: ', err);\n }\n }\n\n async checkError(error: ErrorInterface) {\n if (error.code === 401) {\n console.warn('Pb on auth');\n if (this.router.url.indexOf('login') < 0) {\n try {\n await this.fidjService.logout();\n } catch (ignored) {\n // Ignore logout errors as we're redirecting to logout page anyway\n }\n return this.gotoLout();\n }\n }\n }\n\n async gotoLout() {\n try {\n if (this.router.url.indexOf('login') > -1) {\n return;\n }\n await this.router.navigateByUrl('/logout', {\n skipLocationChange: true,\n replaceUrl: true,\n });\n } catch (e) {\n console.error('gotoLout error: ', e);\n }\n }\n\n async gotoLogin() {\n if (this.router.url.indexOf('login') > -1) {\n return;\n }\n // await this.router.navigateByUrl('/', {skipLocationChange: true});\n await this.router.navigate(['/login']);\n }\n\n isLoggedIn() {\n const loggedIn = this.fidjService.isLoggedIn();\n console.log('isLoggedIn: ', loggedIn);\n return loggedIn;\n }\n\n needsConnectionRefresh() {\n return this.fidjService.needsRefresh();\n }\n\n async connectionRefresh() {\n await this.fidjService.refresh();\n }\n\n async storeAll() {\n return this.fidjStorage.storeData(this.fidjService, this.nodeData);\n }\n\n isAdmin(): boolean {\n return this.roles.indexOf('admin') > -1;\n }\n\n // === Notifications ===\n\n async createNotification(rainId: string, message: string) {\n const data: RaainApiNotificationsAddRequestBody = {\n rain: rainId,\n message,\n };\n\n try {\n const resp = await this.fidjService.sendOnEndpoint<\n RaainApiNotificationsAddRequestBody,\n RaainApiNotificationsAddResponse\n >({\n key: 'notifications',\n verb: 'POST',\n defaultKeyUrl: this.defaultUrlForAPI + '/notifications',\n data,\n });\n return new EventNode(resp.data);\n } catch (e) {\n await this.checkError(e);\n }\n\n return null;\n }\n\n async getNotifications(rainId: string) {\n try {\n type NotificationsFindParams = Partial<RaainApiNotificationsFindAllMineRequest>;\n const params: NotificationsFindParams = {rain: rainId};\n const queryString = BuildQueryString<NotificationsFindParams>(params);\n const resp = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiNotificationsFindAllMineResponse\n >({\n key: 'notifications',\n verb: 'GET',\n relativePath: queryString ? '?' + queryString : '',\n defaultKeyUrl: this.defaultUrlForAPI + '/notifications',\n });\n\n return resp.data.notifications.map((n) => new EventNode(n));\n } catch (e) {\n await this.checkError(e);\n }\n\n return null;\n }\n\n async getAllNotifications(): Promise<EventNode[]> {\n try {\n const resp = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiNotificationsFindAllMineResponse\n >({\n key: 'notifications',\n verb: 'GET',\n defaultKeyUrl: this.defaultUrlForAPI + '/notifications',\n });\n\n return resp.data.notifications.map((n) => new EventNode(n));\n } catch (e) {\n await this.checkError(e);\n }\n\n return [];\n }\n\n // === Teams ===\n\n async getTeams(): Promise<Array<TeamNode>> {\n const teams = [];\n const params = {};\n const queryString = BuildQueryString<RaainApiTeamsFindAllMineRequest>(params);\n try {\n const resp = await this.fidjService.sendOnEndpoint<\n void,\n {teams: ReturnType<TeamNode['toJSON']>[]}\n >({\n key: 'teams',\n verb: 'GET',\n relativePath: queryString ? '?' + queryString : '',\n defaultKeyUrl: this.defaultUrlForAPI + '/teams',\n });\n for (const team of resp.data.teams) {\n teams.push(new TeamNode(team));\n }\n } catch (e) {\n await this.checkError(e);\n }\n return teams;\n }\n\n async getTeam(teamId: string): Promise<TeamNode> {\n try {\n const resp = await this.fidjService.sendOnEndpoint<void, RaainApiTeamsFindOneResponse>({\n key: 'teams',\n verb: 'GET',\n relativePath: teamId,\n defaultKeyUrl: this.defaultUrlForAPI + '/teams',\n });\n return new TeamNode(resp.data);\n } catch (e) {\n await this.checkError(e);\n }\n\n return null;\n }\n\n // === Radars ===\n\n async getRadars(name?: string): Promise<Array<RadarNode>> {\n const radars = [];\n const params: RaainApiRadarsFindAllMineRequest = {};\n if (name) {\n params.name = name;\n }\n try {\n let page = 1;\n let hasNext = true;\n while (hasNext) {\n params.page = page;\n const queryString = BuildQueryString<RaainApiRadarsFindAllMineRequest>(params);\n const resp = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiRadarsFindAllMineResponse\n >({\n key: 'radars',\n verb: 'GET',\n relativePath: queryString ? '?' + queryString : '',\n defaultKeyUrl: this.defaultUrlForAPI + '/radars',\n });\n for (const r of resp.data.radars) {\n radars.push(new RadarNode(r));\n }\n hasNext = resp.data.pagination?.hasNext ?? false;\n page++;\n }\n } catch (e) {\n await this.checkError(e);\n }\n return radars;\n }\n\n async getRadar(id: string): Promise<RadarNode> {\n try {\n const resp = await this.fidjService.sendOnEndpoint<void, RaainApiRadarsFindOneResponse>(\n {\n key: 'radars',\n verb: 'GET',\n relativePath: id,\n defaultKeyUrl: this.defaultUrlForAPI + '/radars',\n }\n );\n return new RadarNode(resp.data);\n } catch (e) {\n await this.checkError(e);\n }\n\n return null;\n }\n\n async putRadar(radarNode: RadarNode): Promise<RadarNode> {\n const data: RaainApiRadarsUpdateRequestBody = {\n name: radarNode.name,\n };\n\n try {\n const resp = await this.fidjService.sendOnEndpoint<\n RaainApiRadarsUpdateRequestBody,\n ReturnType<RadarNode['toJSON']>\n >({\n key: 'radars',\n relativePath: radarNode.id,\n verb: 'PUT',\n data,\n defaultKeyUrl: this.defaultUrlForAPI + '/radars/',\n });\n\n return new RadarNode(resp.data);\n } catch (e) {\n await this.checkError(e);\n }\n }\n\n async getLonelyRadars(rains: RainNode[]): Promise<RadarNode[]> {\n try {\n const allRadars = await this.getRadars();\n const lonelyRadars: RadarNode[] = [];\n allRadars.forEach((radar) => {\n let found = false;\n rains.forEach((rain) => {\n const rdId = rain.getLink(RadarNode.TYPE).getId();\n if (rdId === radar.id) {\n found = true;\n }\n });\n if (!found) {\n lonelyRadars.push(radar);\n }\n });\n return lonelyRadars;\n } catch (e) {\n await this.checkError(e);\n }\n return [];\n }\n\n async getRainTimeframe(\n rainId: string,\n begin: Date,\n end: Date,\n forced = false,\n provider = 'Raain',\n timeStepInMinutes = 10,\n windowInMinutes = 0\n ): Promise<RainNode> {\n try {\n const params: RaainApiRainsFindOneTimeframeCumulativeRequest = {\n format: 'timeframeCumulative',\n provider,\n timeStepInMinutes: String(timeStepInMinutes),\n begin: begin?.toISOString(),\n end: end?.toISOString(),\n };\n if (forced) {\n params.forced = 'true';\n }\n params.windowInMinutes = String(windowInMinutes);\n const queryString =\n BuildQueryString<RaainApiRainsFindOneTimeframeCumulativeRequest>(params);\n const resp = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiRainsFindOneTimeframeCumulativeResponse\n >({\n key: 'rains',\n verb: 'GET',\n relativePath: rainId + (queryString ? '?' + queryString : ''),\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n });\n const rainNode = new RainNode(resp.data.timeframeCumulative);\n rainNode.name += '.radar.timeframeCumulative';\n return rainNode;\n } catch (e) {\n await this.checkError(e);\n }\n return null;\n }\n\n // === Rains ===\n\n async getRains(name?: string): Promise<Array<RainNode>> {\n const rains = [];\n const params: RaainApiRainsFindAllMineRequest = {};\n if (name) {\n params.name = name;\n }\n try {\n let page = 1;\n let hasNext = true;\n while (hasNext) {\n params.page = page;\n const queryString = BuildQueryString<RaainApiRainsFindAllMineRequest>(params);\n const resp = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiRainsFindAllMineResponse\n >({\n key: 'rains',\n verb: 'GET',\n relativePath: queryString ? '?' + queryString : '',\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n });\n for (const rain of resp.data.rains) {\n rains.push(new RainNode(rain));\n }\n hasNext = resp.data.pagination?.hasNext ?? false;\n page++;\n }\n } catch (e) {\n await this.checkError(e);\n }\n return rains;\n }\n\n async getRain(id: string): Promise<RainNode> {\n try {\n const resp = await this.fidjService.sendOnEndpoint<void, RaainApiRainsFindOneResponse>({\n key: 'rains',\n relativePath: id,\n verb: 'GET',\n defaultKeyUrl: this.defaultUrlForAPI + '/rains/',\n });\n return new RainNode(resp.data);\n } catch (e) {\n await this.checkError(e);\n }\n return null;\n }\n\n // === Count\n\n async getCounts(\n rainId: string,\n options: {\n range: 'hour' | 'day' | 'month' | 'year';\n periodBegin: Date;\n }\n ): Promise<{\n percentImages: XYType[];\n percentRainy: XYType[];\n percentQ: XYType[];\n percentComputations: XYType[];\n queueRunning: number;\n }> {\n try {\n const params: RaainApiRainsGetCountsRequest = {\n range: options.range,\n begin: options.periodBegin.toISOString(),\n };\n const queryString = BuildQueryString<RaainApiRainsGetCountsRequest>(params);\n\n const resp = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiRainsGetCountsResponse\n >({\n key: 'rains',\n relativePath: rainId + '/counts' + (queryString ? '?' + queryString : ''),\n verb: 'GET',\n defaultKeyUrl: this.defaultUrlForAPI + '/rains/',\n });\n\n const counts = resp.data.counts.result;\n const percentImages: XYType[] = [],\n percentRainy: XYType[] = [],\n percentQ: XYType[] = [],\n percentComputations: XYType[] = [];\n\n counts.forEach((c) => {\n const label = this.setDateComponents(options.periodBegin, c);\n percentImages.push(new XYType(c.percentImages ?? 0, NaN, NaN, label));\n percentRainy.push(new XYType(c.percentRainy ?? 0, NaN, NaN, label));\n percentQ.push(new XYType(c.percentQ ?? 0, NaN, NaN, label));\n percentComputations.push(new XYType(c.percentComputations ?? 0, NaN, NaN, label));\n });\n\n return {\n percentImages,\n percentRainy,\n percentQ,\n percentComputations,\n queueRunning: resp.data.queueRunning,\n };\n } catch (e) {\n await this.checkError(e);\n }\n return null;\n }\n\n async getCountsHour(\n rainId: string,\n options: {periodBegin: Date}\n ): Promise<{\n percentImages: XYType[];\n percentComputations: XYType[];\n rainyCount: XYType[];\n rainySum: XYType[];\n queueRunning: number;\n }> {\n try {\n const params: RaainApiRainsGetCountsRequest = {\n range: 'hour',\n begin: options.periodBegin.toISOString(),\n };\n const queryString = BuildQueryString<RaainApiRainsGetCountsRequest>(params);\n\n const resp = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiRainsGetCountsResponse\n >({\n key: 'rains',\n relativePath: rainId + '/counts' + (queryString ? '?' + queryString : ''),\n verb: 'GET',\n defaultKeyUrl: this.defaultUrlForAPI + '/rains/',\n });\n\n const counts = resp.data.counts.result;\n const percentImages: XYType[] = [],\n percentComputations: XYType[] = [],\n rainySum: XYType[] = [],\n rainyCount: XYType[] = [];\n\n counts.forEach((c) => {\n const label = this.setDateComponents(options.periodBegin, c);\n percentImages.push(new XYType(c.percentImages ?? 0, NaN, NaN, label));\n percentComputations.push(new XYType(c.percentComputations ?? 0, NaN, NaN, label));\n rainyCount.push(new XYType(c.rainyCount ?? 0, NaN, NaN, label));\n rainySum.push(new XYType(c.rainySum ?? 0, NaN, NaN, label));\n });\n\n return {\n percentImages,\n percentComputations,\n rainyCount,\n rainySum,\n queueRunning: resp.data.queueRunning,\n };\n } catch (e) {\n await this.checkError(e);\n }\n return null;\n }\n\n // === Computing ===\n\n async getRainComputationCumulativeCartesianMapById(\n rainId: string,\n rainComputationCumulativeId: string\n ): Promise<RainComputationMap> {\n const params: RaainApiRainsCumulativeCartesianMapRequest = {format: 'cartesian-map'};\n const queryString = BuildQueryString<RaainApiRainsCumulativeCartesianMapRequest>(params);\n\n try {\n const response = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiRainsCumulativeCartesianMapResponse\n >({\n key: 'rains',\n verb: 'GET',\n relativePath: `${rainId}/cumulatives/${rainComputationCumulativeId}?${queryString}`,\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n });\n if (!response.data['cartesian-map']) {\n return null;\n }\n\n const rainComputationMap = new RainComputationMap(response.data['cartesian-map']);\n rainComputationMap.name = rainId + '.rain.cartesian-map';\n return rainComputationMap;\n } catch (e) {\n await this.checkError(e);\n }\n return null;\n }\n\n async getRainComputationCumulativeCumulativesMapById(\n rainId: string,\n rainComputationCumulativeId: string,\n cumulativeHours: number\n ): Promise<RainComputationMap> {\n const queryPath = `${rainId}/cumulatives/${rainComputationCumulativeId}/cumulative/${cumulativeHours}`;\n\n try {\n const response = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiRainsCumulativeCumulativeResponse\n >({\n key: 'rains',\n verb: 'GET',\n relativePath: queryPath,\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n });\n if (!response.data['cumulative']) {\n return null;\n }\n\n const rainComputationMap = new RainComputationMap(response.data['cumulative']);\n rainComputationMap.name = rainId + '.rain.cumulative-cumulative';\n return rainComputationMap;\n } catch (e) {\n await this.checkError(e);\n }\n return null;\n }\n\n async getRainCumulativeCompare(\n rainNode: RainNode,\n rainComputationCumulativeId: string\n ): Promise<RainComputationQuality> {\n try {\n const response = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiRainsCumulativeComparesResponse\n >({\n key: 'rains',\n verb: 'GET',\n relativePath: `${rainNode.id}/cumulatives/${rainComputationCumulativeId}/compares`,\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n });\n\n const qualityJson = response.data.qualities[0];\n const rainComputationQuality = new RainComputationQuality(qualityJson);\n rainComputationQuality.qualitySpeedMatrixContainer =\n SpeedMatrixContainer.CreateFromJson(\n rainComputationQuality.qualitySpeedMatrixContainer\n );\n return rainComputationQuality;\n } catch (e) {\n await this.checkError(e);\n }\n return null;\n }\n\n // Fetch per-frequency quality for an on-demand cumulative\n // timeStepInMinutes = gauge frequency filter (e.g. 6 for 6min gauges, 30 for 30min gauges)\n // timeStepMode = 'eq' (exact match) or 'lte' (all frequencies <= timeStepInMinutes)\n // provider = gauge provider filter (e.g. 'Raain')\n async getRainCumulativeCumulativesCompare(\n rainNode: RainNode,\n rainComputationCumulativeId: string,\n provider: string = 'Raain',\n timeStepInMinutes: number = 5,\n timeStepMode: 'eq' | 'lte' = 'eq'\n ): Promise<RainComputationQuality> {\n const params: RaainApiRainsCumulativeCumulativesComparesRequest = {\n provider,\n timeStepInMinutes,\n timeStepMode,\n };\n\n const queryString =\n BuildQueryString<RaainApiRainsCumulativeCumulativesComparesRequest>(params);\n\n try {\n const response = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiRainsCumulativeCumulativesComparesResponse\n >({\n key: 'rains',\n verb: 'GET',\n relativePath: `${rainNode.id}/cumulatives/${rainComputationCumulativeId}/compares?${queryString}`,\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n });\n\n const allQualities = response.data.qualities;\n if (!allQualities?.length) {\n return null;\n }\n\n const rainComputationQuality = new RainComputationQuality(allQualities[0]);\n rainComputationQuality.qualitySpeedMatrixContainer =\n SpeedMatrixContainer.CreateFromJson(\n rainComputationQuality.qualitySpeedMatrixContainer\n );\n\n // Merge additional qualities (lte mode returns multiple freq groups)\n for (let i = 1; i < allQualities.length; i++) {\n const extra = new RainComputationQuality(allQualities[i]);\n extra.qualitySpeedMatrixContainer = SpeedMatrixContainer.CreateFromJson(\n extra.qualitySpeedMatrixContainer\n );\n rainComputationQuality.merge(extra);\n }\n\n return rainComputationQuality;\n } catch (e) {\n await this.checkError(e);\n }\n return null;\n }\n\n async getRainProgress(rainId: string): Promise<number> {\n try {\n const queryPath = '' + rainId + '/progress';\n const response = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiRainsProgressResponse\n >({\n key: 'rains',\n verb: 'GET',\n relativePath: queryPath,\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n });\n\n // return response.data.inProgress;\n return response.data.inQueue;\n } catch (e) {\n await this.checkError(e);\n }\n return 0;\n }\n\n async getIndicators(rainId: string): Promise<RaainApiRainsIndicatorsResponse> {\n try {\n const params: RaainApiRainsIndicatorsRequest = {\n cumulative: 'true',\n };\n const queryString = BuildQueryString<RaainApiRainsIndicatorsRequest>(params);\n const response = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiRainsIndicatorsResponse\n >({\n key: 'rains',\n verb: 'GET',\n relativePath: rainId + '/indicators' + (queryString ? '?' + queryString : ''),\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n });\n\n return response.data;\n } catch (e) {\n await this.checkError(e);\n }\n return {indicators: []};\n }\n\n // GET /rains/:rainId/cumulatives - List available cumulative periods\n // With detailed=true, returns individual cumulatives instead of aggregated periods\n async getCumulativePeriods(\n rainId: string,\n filters?: {\n windowInMinutes?: number;\n provider?: string;\n isReady?: boolean;\n forced?: boolean;\n detailed?: boolean;\n page?: number;\n limit?: number;\n periodBegin?: string;\n periodEnd?: string;\n }\n ): Promise<RaainApiRainsCumulativesListResponse | RaainApiRainsCumulativesDetailedResponse> {\n try {\n const params: RaainApiRainsCumulativesListRequest = {};\n if (filters?.windowInMinutes !== undefined) {\n params.windowInMinutes = filters.windowInMinutes;\n }\n if (filters?.provider) {\n params.provider = filters.provider;\n }\n if (filters?.isReady !== undefined) {\n params.isReady = filters.isReady;\n }\n if (filters?.forced !== undefined) {\n params.forced = filters.forced;\n }\n if (filters?.detailed) {\n params.detailed = true;\n }\n if (filters?.page !== undefined) {\n params.page = filters.page;\n }\n if (filters?.limit !== undefined) {\n params.limit = filters.limit;\n }\n if (filters?.periodBegin) {\n params.periodBegin = filters.periodBegin;\n }\n if (filters?.periodEnd) {\n params.periodEnd = filters.periodEnd;\n }\n const queryString = BuildQueryString<RaainApiRainsCumulativesListRequest>(params);\n\n if (filters?.detailed) {\n const response = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiRainsCumulativesDetailedResponse\n >({\n key: 'rains',\n verb: 'GET',\n relativePath: rainId + '/cumulatives' + (queryString ? '?' + queryString : ''),\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n });\n return response.data;\n }\n\n const response = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiRainsCumulativesListResponse\n >({\n key: 'rains',\n verb: 'GET',\n relativePath: rainId + '/cumulatives' + (queryString ? '?' + queryString : ''),\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n });\n\n return response.data;\n } catch (e) {\n await this.checkError(e);\n }\n return {periods: [], total: 0};\n }\n\n // POST /rains/:rainId/cumulatives - Trigger cumulative computation\n async createCumulativePeriod(\n rainId: string,\n params: {\n periodBegin: Date;\n periodEnd: Date;\n provider: string;\n confName?: string;\n timeStepInMinutes?: number;\n }\n ): Promise<RaainApiRainsCumulativesCreateResponse> {\n try {\n const body: RaainApiRainsCumulativesCreateRequest = {\n periodBegin: params.periodBegin.toISOString(),\n periodEnd: params.periodEnd.toISOString(),\n provider: params.provider,\n confName: params.confName || 'admin',\n timeStepInMinutes: params.timeStepInMinutes || 5,\n };\n\n const response = await this.fidjService.sendOnEndpoint<\n RaainApiRainsCumulativesCreateRequest,\n RaainApiRainsCumulativesCreateResponse\n >({\n key: 'rains',\n verb: 'POST',\n relativePath: rainId + '/cumulatives',\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n data: body,\n });\n\n return response.data;\n } catch (e) {\n await this.checkError(e);\n }\n return null;\n }\n\n // === Gauges ===\n\n async getGauge(gaugeId: string): Promise<GaugeNode> {\n try {\n const resp = await this.fidjService.sendOnEndpoint<void, RaainApiGaugesFindOneResponse>(\n {\n key: 'gauges',\n verb: 'GET',\n relativePath: gaugeId,\n defaultKeyUrl: this.defaultUrlForAPI + '/gauges',\n }\n );\n return new GaugeNode(resp.data);\n } catch (e) {\n await this.checkError(e);\n }\n }\n\n async getGauges(\n rainId: string,\n aroundLatLng: LatLng,\n pageCount = 1\n ): Promise<Array<GaugeNodeFilter>> {\n const baseParams: RaainApiGaugesFindAllMineRequest = {\n aroundLatLng: `${aroundLatLng.lat},${aroundLatLng.lng}`,\n rainId,\n };\n if (this.asTeamId) {\n baseParams.teamId = this.asTeamId;\n }\n\n const gauges = [];\n try {\n for (let count = 1; count <= pageCount; count++) {\n const params: RaainApiGaugesFindAllMineRequest = {...baseParams, page: count};\n const queryString = BuildQueryString<RaainApiGaugesFindAllMineRequest>(params);\n const resp = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiGaugesFindAllMineResponse\n >({\n key: 'gauges',\n verb: 'GET',\n relativePath: queryString ? '?' + queryString : '',\n defaultKeyUrl: this.defaultUrlForAPI + '/gauges',\n });\n\n for (const gauge of resp.data.gauges) {\n gauges.push(new GaugeNodeFilter(gauge));\n }\n }\n } catch (e) {\n await this.checkError(e);\n }\n return gauges;\n }\n\n async getGaugeMeasures(gaugeId: string, begin: Date, end: Date): Promise<GaugeMeasure[]> {\n const params: RaainApiGaugesFindMeasuresRequest = {\n begin: begin.toISOString(),\n end: end.toISOString(),\n };\n const queryString = BuildQueryString<RaainApiGaugesFindMeasuresRequest>(params);\n const resp = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiGaugesFindMeasuresResponse\n >({\n key: 'gauges',\n verb: 'GET',\n relativePath: gaugeId + '/measures' + (queryString ? '?' + queryString : ''),\n defaultKeyUrl: this.defaultUrlForAPI + '/gauges',\n });\n\n const gaugeMeasures: GaugeMeasure[] = [];\n for (const gaugeMeasure of resp.data.gaugeMeasures) {\n gaugeMeasures.push(new GaugeMeasure(gaugeMeasure));\n }\n return gaugeMeasures;\n }\n\n async getProviders(\n rainId: string\n ): Promise<{providers: string[]; timeStepInMinutes: number[]}> {\n try {\n const response = await this.fidjService.sendOnEndpoint<\n void,\n RaainApiRainsProvidersResponse\n >({\n verb: 'GET',\n key: 'rains',\n relativePath: rainId + '/providers',\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n });\n\n return {\n providers: response.data.providers || [],\n timeStepInMinutes: response.data.timeStepInMinutes?.length\n ? response.data.timeStepInMinutes\n : [5, 10, 15, 30, 60],\n };\n } catch (e) {\n console.error('getProviders error:', e);\n return {\n providers: [],\n timeStepInMinutes: [5, 10, 15, 30, 60],\n };\n }\n }\n\n protected setRoles(roles: Array<string>): void {\n this.roles = roles;\n }\n\n private setDateComponents(\n date: Date,\n c: {\n year?: number;\n month?: number;\n day?: number;\n hour?: number;\n minute?: number;\n }\n ): string {\n const dateToShow = new Date(date);\n\n if (c.year !== undefined) {\n dateToShow.setUTCFullYear(c.year);\n }\n if (c.month !== undefined) {\n dateToShow.setUTCMonth(c.month - 1);\n }\n if (c.day !== undefined) {\n dateToShow.setUTCDate(c.day);\n }\n if (c.hour !== undefined) {\n dateToShow.setUTCHours(c.hour);\n }\n if (c.minute !== undefined) {\n dateToShow.setUTCMinutes(c.minute);\n }\n\n return dateToShow.toISOString();\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport {ProfileService} from '../profile.service';\nimport {\n CumulativePeriod,\n IndividualCumulative,\n RaainApiRainsCumulativesDetailedResponse,\n RaainApiRainsCumulativesListResponse,\n} from 'raain-model';\n\nexport interface CumulativeSelection {\n periodBegin: Date;\n periodEnd: Date;\n windowInMinutes: number;\n cumulativeId?: string;\n cumulativeDate?: Date;\n}\n\n@Component({\n selector: 'cumulative-selector',\n templateUrl: './cumulative-selector.component.html',\n styleUrls: ['./cumulative-selector.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CumulativeSelectorComponent implements OnInit {\n @Input() rainId: string;\n @Input() currentPeriodBegin: Date;\n @Input() currentPeriodEnd: Date;\n @Input() provider: string;\n @Input() timeStepInMinutes: number = 5;\n @Input() isAdmin: boolean = false;\n\n @Output() periodSelected = new EventEmitter<CumulativeSelection>();\n @Output() cancelled = new EventEmitter<void>();\n\n availablePeriods: CumulativePeriod[] = [];\n baseCumulatives: CumulativePeriod = null;\n loading = true;\n creating = false;\n creationProgress = '';\n errorMessage = '';\n\n coveragePercent = 0;\n canCreateNew = false;\n currentWindowMinutes = 0;\n\n expandedPeriods: Map<string, IndividualCumulative[]> = new Map();\n loadingExpanded: Set<string> = new Set();\n\n private readonly POLL_TIMEOUT_MS = 900000; // 900 seconds\n private readonly POLL_INTERVAL_MS = 3000;\n\n constructor(\n private profileService: ProfileService,\n private cdr: ChangeDetectorRef\n ) {}\n\n async ngOnInit() {\n this.currentWindowMinutes = Math.round(\n (this.currentPeriodEnd.getTime() - this.currentPeriodBegin.getTime()) / 60000\n );\n await this.loadAvailablePeriods();\n }\n\n async loadAvailablePeriods() {\n this.loading = true;\n this.errorMessage = '';\n this.cdr.markForCheck();\n\n try {\n // Fetch all cumulative periods (admin sees all, non-admin sees only customer-launched)\n const response = (await this.profileService.getCumulativePeriods(this.rainId, {\n provider: this.provider,\n forced: this.isAdmin,\n periodBegin: this.currentPeriodBegin.toISOString(),\n periodEnd: this.currentPeriodEnd.toISOString(),\n })) as RaainApiRainsCumulativesListResponse;\n\n // Filter for existing custom cumulatives (window > 0)\n this.availablePeriods = response.periods.filter((p) => p.windowInMinutes > 0);\n\n // Get base cumulatives (window = 0) to check coverage\n this.baseCumulatives = response.periods.find((p) => p.windowInMinutes === 0);\n\n this.calculateCoverage();\n } catch (e) {\n this.errorMessage = 'Failed to load cumulative periods';\n console.error('Error loading cumulative periods:', e);\n }\n\n this.loading = false;\n this.cdr.markForCheck();\n }\n\n calculateCoverage() {\n if (!this.baseCumulatives || !this.baseCumulatives.count) {\n this.coveragePercent = 0;\n this.canCreateNew = false;\n return;\n }\n\n // Calculate expected number of base cumulatives (always 5-min granularity)\n const baseTimeStep = 5;\n const expectedCount = Math.ceil(this.currentWindowMinutes / baseTimeStep);\n\n if (this.baseCumulatives.count >= expectedCount) {\n this.coveragePercent = 100;\n } else {\n this.coveragePercent = Math.round((this.baseCumulatives.count / expectedCount) * 100);\n }\n\n // Allow creation as long as some base data exists\n this.canCreateNew = this.coveragePercent > 0;\n }\n\n selectPeriod(period: CumulativePeriod) {\n this.periodSelected.emit({\n periodBegin: new Date(period.periodBegin),\n periodEnd: new Date(period.periodEnd),\n windowInMinutes: period.windowInMinutes,\n });\n }\n\n async toggleExpand(period: CumulativePeriod) {\n const key = `${period.windowInMinutes}`;\n if (this.expandedPeriods.has(key)) {\n this.expandedPeriods.delete(key);\n this.cdr.markForCheck();\n return;\n }\n\n this.loadingExpanded.add(key);\n this.cdr.markForCheck();\n\n try {\n const response = (await this.profileService.getCumulativePeriods(this.rainId, {\n provider: this.provider,\n windowInMinutes: period.windowInMinutes,\n forced: this.isAdmin,\n detailed: true,\n })) as RaainApiRainsCumulativesDetailedResponse;\n\n this.expandedPeriods.set(key, response.cumulatives || []);\n } catch (e) {\n console.error('Error loading individual cumulatives:', e);\n this.expandedPeriods.set(key, []);\n }\n\n this.loadingExpanded.delete(key);\n this.cdr.markForCheck();\n }\n\n selectIndividualCumulative(item: IndividualCumulative) {\n const endDate = new Date(item.date);\n const beginDate = new Date(endDate.getTime() - item.windowInMinutes * 60000);\n\n this.periodSelected.emit({\n periodBegin: beginDate,\n periodEnd: endDate,\n windowInMinutes: item.windowInMinutes,\n cumulativeId: item.id,\n cumulativeDate: endDate,\n });\n }\n\n isExpanded(period: CumulativePeriod): boolean {\n return this.expandedPeriods.has(`${period.windowInMinutes}`);\n }\n\n isLoadingExpanded(period: CumulativePeriod): boolean {\n return this.loadingExpanded.has(`${period.windowInMinutes}`);\n }\n\n getExpandedItems(period: CumulativePeriod): IndividualCumulative[] {\n return this.expandedPeriods.get(`${period.windowInMinutes}`) || [];\n }\n\n getItemPeriodBegin(item: IndividualCumulative): Date {\n const endDate = new Date(item.date);\n return new Date(endDate.getTime() - item.windowInMinutes * 60000);\n }\n\n async createNewPeriod() {\n if (!this.canCreateNew || this.creating) {\n return;\n }\n\n this.creating = true;\n this.creationProgress = 'Starting cumulative computation...';\n this.errorMessage = '';\n this.cdr.markForCheck();\n\n try {\n // Trigger cumulative creation\n const result = await this.profileService.createCumulativePeriod(this.rainId, {\n periodBegin: this.currentPeriodBegin,\n periodEnd: this.currentPeriodEnd,\n provider: this.provider,\n timeStepInMinutes: this.timeStepInMinutes,\n });\n\n if (!result) {\n throw new Error('Failed to trigger cumulative computation');\n }\n\n this.creationProgress = `Jobs queued. Polling for completion...`;\n this.cdr.markForCheck();\n\n // Poll for completion\n const success = await this.pollForCompletion();\n\n if (success) {\n this.periodSelected.emit({\n periodBegin: this.currentPeriodBegin,\n periodEnd: this.currentPeriodEnd,\n windowInMinutes: this.currentWindowMinutes,\n });\n } else {\n this.errorMessage = 'Timeout waiting for cumulative computation';\n }\n } catch (e) {\n this.errorMessage = `Error: ${e.message || 'Unknown error'}`;\n console.error('Error creating cumulative:', e);\n }\n\n this.creating = false;\n this.cdr.markForCheck();\n }\n\n private async pollForCompletion(): Promise<boolean> {\n const startTime = Date.now();\n\n while (Date.now() - startTime < this.POLL_TIMEOUT_MS) {\n try {\n const progress = await this.profileService.getRainProgress(this.rainId);\n\n if (progress === 0) {\n // Trigger background fetch from raain-ground via timeframeCumulative\n await this.profileService.getRainTimeframe(\n this.rainId,\n this.currentPeriodBegin,\n this.currentPeriodEnd,\n this.isAdmin,\n this.provider,\n this.timeStepInMinutes,\n this.currentWindowMinutes\n );\n\n // Check if cumulative now exists (admin sees all cumulatives)\n const response = (await this.profileService.getCumulativePeriods(this.rainId, {\n provider: this.provider,\n windowInMinutes: this.currentWindowMinutes,\n forced: this.isAdmin,\n })) as RaainApiRainsCumulativesListResponse;\n\n const found = response.periods.find(\n (p) => p.windowInMinutes === this.currentWindowMinutes\n );\n\n if (found) {\n return true;\n }\n }\n\n const elapsed = Math.round((Date.now() - startTime) / 1000);\n this.creationProgress = `Computing... (${elapsed}s, queue: ${progress})`;\n this.cdr.markForCheck();\n\n await this.sleep(this.POLL_INTERVAL_MS);\n } catch (e) {\n console.warn('Poll error:', e);\n await this.sleep(this.POLL_INTERVAL_MS);\n }\n }\n\n return false;\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n cancel() {\n this.cancelled.emit();\n }\n\n formatPeriod(period: CumulativePeriod): string {\n const begin = new Date(period.periodBegin);\n const end = new Date(period.periodEnd);\n return `${begin.toLocaleString()} → ${end.toLocaleString()}`;\n }\n\n formatWindow(minutes: number): string {\n if (minutes < 60) {\n return `${minutes} min`;\n }\n const hours = minutes / 60;\n return hours === 1 ? '1 hour' : `${hours} hours`;\n }\n}\n","<div class=\"cumulative-selector-overlay\">\n <div class=\"cumulative-selector-modal\">\n <div class=\"modal-header\">\n <h2>Select Cumulative Period</h2>\n <ion-button (click)=\"cancel()\" fill=\"clear\">\n <ion-icon name=\"close\"></ion-icon>\n </ion-button>\n </div>\n\n <div class=\"modal-content\">\n <!-- Loading state -->\n <div *ngIf=\"loading\" class=\"loading-state\">\n <ion-spinner name=\"crescent\"></ion-spinner>\n <p>Loading available periods...</p>\n </div>\n\n <!-- Error message -->\n <div *ngIf=\"errorMessage\" class=\"error-message\">\n <ion-icon name=\"warning-outline\"></ion-icon>\n <span>{{ errorMessage }}</span>\n </div>\n\n <!-- Available periods list -->\n <div *ngIf=\"!loading && availablePeriods.length > 0\" class=\"periods-section\">\n <h3>Available Cumulative Periods</h3>\n <ion-list>\n <ng-container *ngFor=\"let period of availablePeriods\">\n <!-- Period header (click to expand) -->\n <ion-item (click)=\"toggleExpand(period)\" [disabled]=\"creating\" button>\n <ion-icon [name]=\"isExpanded(period) ? 'chevron-down' : 'chevron-forward'\"\n slot=\"start\"></ion-icon>\n <ion-label>\n <h2>{{ formatWindow(period.windowInMinutes) }}</h2>\n <p>{{ formatPeriod(period) }}</p>\n <p class=\"count-info\">{{ period.count }} cumulative(s) - click to expand</p>\n </ion-label>\n </ion-item>\n\n <!-- Expanded: individual cumulatives -->\n <div *ngIf=\"isExpanded(period)\" class=\"expanded-items\">\n <ion-spinner *ngIf=\"isLoadingExpanded(period)\" name=\"crescent\"></ion-spinner>\n <ion-list *ngIf=\"!isLoadingExpanded(period)\" class=\"nested-list\">\n <ion-item (click)=\"selectIndividualCumulative(item)\"\n *ngFor=\"let item of getExpandedItems(period)\"\n [disabled]=\"creating\"\n button\n class=\"nested-item\">\n <ion-icon name=\"time-outline\" slot=\"start\"></ion-icon>\n <ion-label>\n <h3>{{ getItemPeriodBegin(item) | date:'HH:mm' }}\n - {{ item.date | date:'HH:mm' }}</h3>\n </ion-label>\n <ion-icon name=\"chevron-forward\" slot=\"end\"></ion-icon>\n </ion-item>\n <ion-item *ngIf=\"getExpandedItems(period).length === 0\" class=\"nested-item\">\n <ion-label>\n <p>No individual cumulatives found</p>\n </ion-label>\n </ion-item>\n </ion-list>\n </div>\n </ng-container>\n </ion-list>\n </div>\n\n <!-- No periods available -->\n <div *ngIf=\"!loading && availablePeriods.length === 0\" class=\"no-periods\">\n <ion-icon name=\"information-circle-outline\"></ion-icon>\n <p>No cumulative periods available yet.</p>\n </div>\n\n <!-- Create new section (admin only) -->\n <div *ngIf=\"!loading && isAdmin\" class=\"create-section\">\n <h3>Create New Cumulative</h3>\n <div class=\"create-info\">\n <p>\n <strong>Period:</strong>\n {{ currentPeriodBegin?.toLocaleString() }} → {{ currentPeriodEnd?.toLocaleString() }}\n </p>\n <p>\n <strong>Window:</strong> {{ formatWindow(currentWindowMinutes) }}\n </p>\n <p *ngIf=\"baseCumulatives\" [class.coverage-error]=\"coveragePercent === 0\"\n [class.coverage-ok]=\"coveragePercent >= 100\"\n [class.coverage-warn]=\"coveragePercent > 0 && coveragePercent < 100\"\n class=\"coverage-info\">\n <ion-icon [name]=\"coveragePercent >= 100 ? 'checkmark-circle' : 'alert-circle'\"></ion-icon>\n Base data coverage: {{ coveragePercent }}%\n </p>\n <p *ngIf=\"!baseCumulatives\" class=\"coverage-error\">\n <ion-icon name=\"alert-circle\"></ion-icon>\n No base cumulatives available\n </p>\n </div>\n\n <!-- Creation progress -->\n <div *ngIf=\"creating\" class=\"creation-progress\">\n <ion-spinner name=\"crescent\"></ion-spinner>\n <span>{{ creationProgress }}</span>\n </div>\n\n <ion-button (click)=\"createNewPeriod()\" [disabled]=\"!canCreateNew || creating\"\n expand=\"block\"\n id=\"createNewCumulative\">\n <ion-icon name=\"add-circle-outline\" slot=\"start\"></ion-icon>\n Create {{ formatWindow(currentWindowMinutes) }} Cumulative\n </ion-button>\n\n <p *ngIf=\"!canCreateNew && !creating\" class=\"create-hint\">\n Create is disabled because no base 5-min cumulatives exist for the selected period.\n </p>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <ion-button (click)=\"cancel()\" [disabled]=\"creating\" fill=\"outline\">\n Cancel\n </ion-button>\n </div>\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport {IonToggle} from '@ionic/angular';\nimport {ProfileService} from '../profile.service';\nimport {\n CartesianMeasureValue,\n QualityIndicator,\n RaainApiRainsCumulativesListResponse,\n RainNode,\n TeamNode,\n} from 'raain-model';\nimport {\n DateRange,\n ElementsFactory,\n MapLatLng,\n ModelPerformanceElement,\n ModelPerformanceElementInput,\n TimeframeContainers,\n} from 'raain-ui';\nimport {CompareManager, FrameSet, mapDateRangeToString, RefreshManager} from '../tools';\nimport {XYType} from '../xytype';\nimport {RadarService} from '../radar.service';\nimport {Storage} from '../storage.service';\nimport {CumulativeSelection} from '../cumulative-selector/cumulative-selector.component';\n\nlet TEST_DETECTION = 0;\n\n@Component({\n selector: 'raain-details',\n templateUrl: 'raain-details.component.html',\n styleUrls: ['raain-details.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RaainDetailsComponent implements OnDestroy, OnChanges {\n private static readonly HOUR_MS = 60 * 60000;\n private static readonly DAY_MS = 24 * 60 * 60 * 1000;\n\n @Input()\n public toggleAdmin: boolean;\n @Input()\n public rainNode: RainNode;\n @Input()\n public compareManager: CompareManager;\n @Input()\n public refreshManager: RefreshManager;\n @Input()\n public profileService: ProfileService;\n @Input()\n public radarService: RadarService;\n @Input()\n public scaleLabel = 'mm';\n @Input()\n public showCreateMissingImages = true;\n @Input()\n public showCumulativeCompare = true;\n @Input()\n public showDateRange = true;\n @Input()\n public showCumulativeToggle = true;\n @Input()\n public forceTimeStep: number;\n\n public availableProviders: string[] = [];\n public availableTimeSteps: number[] = [];\n public availableTimeStepOptions: {label: string; value: string}[] = [];\n public selectedProvider: string;\n public selectedTimeStep: number;\n public timeStepMode: 'eq' | 'lte' = 'eq';\n\n public periodBegin: Date;\n public periodEnd: Date;\n\n // public UI variables\n public teamNode: TeamNode;\n public periodBeginAsString: string;\n public periodEndAsString: string;\n public periodDurationAsString: string;\n public dateShown: Date;\n public coordinates: MapLatLng;\n public borders: MapLatLng[];\n public timeframeContainers: TimeframeContainers;\n public currentTimeframeTarget: FrameSet;\n public timeframeDates: Date[];\n public countPoints: {\n label: string;\n style: string;\n values: {date: Date; value: number}[];\n }[];\n public countsPeriod: {\n percentImages?: XYType[];\n queueRunning?: number;\n progress?: number;\n };\n\n public gaugeSelectedPoints: {\n label: string;\n style: string;\n values: {date: Date; value: number}[];\n }[];\n public toggleHistory: boolean;\n public toggleMap: boolean;\n public toggleCompare: boolean;\n public toggleGaugeMeasures: boolean;\n public toggleRemoveCompareDuplicate: boolean;\n public toggleCumulative: boolean;\n public refreshInProgress: boolean;\n public sumDetails: string;\n public showPixelMarkers: boolean = false;\n public isAdmin: boolean;\n public showFullError: boolean;\n public showQualityModal: boolean;\n public qualityIndicators: QualityIndicator[] = [];\n public qualityIndicatorsLoading: boolean = false;\n public showCumulativeSelector: boolean = false;\n public creatingCumulative: boolean = false;\n public showQualityDetails: boolean = false;\n public modelPerformanceData: Array<{\n name: string;\n date: Date;\n KPEi: number | null;\n KPE1: number | null;\n }> = [];\n private performanceChart: ModelPerformanceElement;\n\n @ViewChild('cumulativeToggle') cumulativeToggleRef: IonToggle;\n @ViewChild('performanceCanvas') performanceCanvasRef: any;\n\n // Cached computed values (to avoid method calls in templates)\n public percentOfComputations: number = 0;\n public presentComputationCount: number = 0;\n public expectedComputationCount: number = 0;\n public percentOfImages: number = 0;\n public truncatedError: string = '';\n public cumulativeDurationInMinutes: number = 10;\n protected readonly DateRange = DateRange;\n\n constructor(\n protected storage: Storage,\n private readonly cdr: ChangeDetectorRef\n ) {}\n\n private static PeriodDisplay(date: Date | string) {\n let d = new Date();\n if (date) {\n d = new Date(date);\n const userTimezoneOffset = d.getTimezoneOffset() * 60000;\n d = new Date(d.getTime() - userTimezoneOffset);\n }\n const exampleFormattedDate = '2017-06-01T08:30';\n return d.toISOString().substring(0, exampleFormattedDate.length);\n }\n\n private static DateUTC(date: string) {\n const hasISOFormat = date.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$/);\n let d = new Date(date);\n if (!hasISOFormat) {\n const userTimezoneOffset = d.getTimezoneOffset() * 60000;\n d = new Date(d.getTime() - userTimezoneOffset);\n }\n return d;\n }\n\n private static MapCountToDateValue(c: XYType): {date: Date; value: number} {\n return {\n date: RaainDetailsComponent.DateUTC(c.name),\n value: Math.min(100, c.x),\n };\n }\n\n async openQualityModal() {\n this.showQualityModal = true;\n this.qualityIndicatorsLoading = true;\n this.qualityIndicators = [];\n this.modelPerformanceData = [];\n this.cdr.markForCheck();\n\n if (this.rainNode?.id) {\n const result = await this.profileService.getIndicators(this.rainNode.id);\n this.qualityIndicators = result.indicators;\n this.modelPerformanceData = this.buildModelPerformanceData(result.indicators);\n }\n\n this.qualityIndicatorsLoading = false;\n this.cdr.markForCheck();\n\n if (this.modelPerformanceData.length > 0) {\n setTimeout(() => this.renderPerformanceChart(), 100);\n }\n }\n\n closeQualityModal() {\n this.showQualityModal = false;\n if (this.performanceChart?.chart) {\n this.performanceChart.chart.destroy();\n this.performanceChart = null;\n }\n }\n\n buildModelPerformanceData(\n indicators: QualityIndicator[]\n ): Array<{name: string; date: Date; KPEi: number | null; KPE1: number | null}> {\n // Group by version combo (computingVersion + qualityVersion)\n const grouped = new Map<string, {date: Date; KPEi: number | null; KPE1: number | null}>();\n\n for (const ind of indicators) {\n const key = `C${ind.computingVersion}-Q${ind.qualityVersion}`;\n if (!grouped.has(key)) {\n grouped.set(key, {date: new Date(ind.lastUpdatedAt), KPEi: null, KPE1: null});\n }\n const entry = grouped.get(key);\n\n // Update date to latest\n const indDate = new Date(ind.lastUpdatedAt);\n if (indDate.getTime() > entry.date.getTime()) {\n entry.date = indDate;\n }\n\n if (ind.timeStepInMinutes === 5) {\n entry.KPEi = ind.averageQuality;\n } else if (ind.timeStepInMinutes === 60) {\n entry.KPE1 = ind.averageQuality;\n }\n }\n\n return Array.from(grouped.entries()).map(([name, data]) => ({\n name,\n date: data.date,\n KPEi: data.KPEi,\n KPE1: data.KPE1,\n }));\n }\n\n private renderPerformanceChart() {\n const canvas = this.performanceCanvasRef?.nativeElement;\n if (!canvas) {\n return;\n }\n const factory = new ElementsFactory();\n this.performanceChart = factory.createModelPerformance(\n canvas,\n new ModelPerformanceElementInput(this.modelPerformanceData)\n );\n }\n\n formatDate(dateStr: string): string {\n const date = new Date(dateStr);\n return (\n date.toLocaleDateString() +\n ' ' +\n date.toLocaleTimeString([], {hour: '2-digit', minute: '2-digit'})\n );\n }\n\n public async fetchData(focusDate: Date, focusRange: DateRange) {\n const values = [];\n for (let i = 0; i < 10; i++) {\n values.push({date: new Date(2020 + i, 0), value: 10});\n }\n const fakeData = [\n {\n label: '% Rainy',\n style: 'bar',\n values,\n },\n {\n label: '% Images',\n style: 'bar',\n values,\n },\n {\n label: '% Computations',\n style: 'bar',\n values,\n },\n ];\n\n const range = mapDateRangeToString(focusRange);\n let data = fakeData;\n if (!this.rainNode) {\n return data;\n }\n\n if (focusRange === DateRange.CENTURY) {\n // fake\n } else if (focusRange === DateRange.HOUR) {\n const hourCounts = await this.profileService.getCountsHour(this.rainNode.id, {\n periodBegin: focusDate,\n });\n\n data = [\n {\n label: 'Rainy Count',\n style: 'line',\n values: hourCounts.rainyCount.map(RaainDetailsComponent.MapCountToDateValue),\n },\n {\n label: '% Images',\n style: 'bar',\n values: hourCounts.percentImages.map(RaainDetailsComponent.MapCountToDateValue),\n },\n {\n label: '% Computations',\n style: 'bar',\n values: hourCounts.percentComputations.map(\n RaainDetailsComponent.MapCountToDateValue\n ),\n },\n {\n label: 'Rainy Sum',\n style: 'line',\n values: hourCounts.rainySum.map(RaainDetailsComponent.MapCountToDateValue),\n },\n ];\n } else {\n const counts = await this.profileService.getCounts(this.rainNode.id, {\n range,\n periodBegin: focusDate,\n });\n\n data = [\n {\n label: '% Rainy',\n style: 'bar',\n values: counts.percentRainy.map(RaainDetailsComponent.MapCountToDateValue),\n },\n {\n label: '% Images',\n style: 'bar',\n values: counts.percentImages.map(RaainDetailsComponent.MapCountToDateValue),\n },\n {\n label: '% Computations',\n style: 'bar',\n values: counts.percentComputations.map(\n RaainDetailsComponent.MapCountToDateValue\n ),\n },\n ];\n }\n\n // console.log(`fetchData DONE ${range}`, data);\n return data;\n }\n\n // Wrapper function that preserves the async nature of fetchData\n public fetchDataWrapper = async (focusDate: Date, focusRange: DateRange) => {\n return await this.fetchData(focusDate, focusRange);\n };\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.change(changes).then((ignored) => {});\n }\n\n ngOnDestroy() {\n this.cleanAll();\n }\n\n async onEnableCountHistoryTab(rain: RainNode) {\n if (!this.toggleHistory) {\n this.countPoints = [];\n }\n }\n\n async onPeriodBeginChange(event: any) {\n const newValue = event?.target?.value ?? this.periodBeginAsString;\n this.periodBegin = new Date(newValue);\n this.periodBeginAsString = RaainDetailsComponent.PeriodDisplay(this.periodBegin);\n this.storage.set('raain-periodBegin', this.periodBegin);\n\n await this.onPeriodDurationChange(event);\n }\n\n async onPeriodEndChange(event: any) {\n const newValue = event?.target?.value ?? this.periodEndAsString;\n this.periodEnd = new Date(newValue);\n this.periodEndAsString = RaainDetailsComponent.PeriodDisplay(this.periodEnd);\n this.storage.set('raain-periodEnd', this.periodEnd);\n\n this.periodBegin = new Date(\n this.periodEnd.getTime() - this.getDurationInHours() * RaainDetailsComponent.HOUR_MS\n );\n this.periodBeginAsString = RaainDetailsComponent.PeriodDisplay(this.periodBegin);\n this.storage.set('raain-periodBegin', this.periodBegin);\n this.updateRefreshManagerPeriod();\n }\n\n async onPeriodDurationChange(_event: object) {\n const durationInHours = this.getDurationInHours();\n this.periodEnd = new Date(\n this.periodBegin.getTime() + durationInHours * RaainDetailsComponent.HOUR_MS\n );\n this.periodEndAsString = RaainDetailsComponent.PeriodDisplay(this.periodEnd);\n this.storage.set('raain-periodEnd', this.periodEnd);\n this.storage.set('raain-periodDurationInHours', durationInHours);\n this.updateRefreshManagerPeriod();\n this.updateCumulativeDurationInMinutes();\n }\n\n async onDateChangeInCount(dateChanged: Date) {\n const dateString =\n dateChanged.toISOString().substring(0, 11) +\n dateChanged.toLocaleTimeString().substring(0, 5);\n this.periodDurationAsString = '1';\n\n if (this.toggleCumulative) {\n // Cumulative: select periodEnd\n this.periodEndAsString = dateString;\n await this.onPeriodEndChange(null);\n } else {\n // Granular: select periodBegin\n this.periodBeginAsString = dateString;\n await this.onPeriodBeginChange(null);\n }\n await this.refreshManager.refresh(false, this.toggleAdmin);\n }\n\n async onDateChangeInMap(dateShown: Date) {\n this.dateShown = dateShown;\n await this.fetchAndUpdateMap();\n await this.refreshManager.setReportPeriod(this.dateShown);\n }\n\n async onSumChangeInMap(sum: string) {\n this.sumDetails = sum;\n }\n\n async onGaugeSelectInMap(mapLatLng: MapLatLng) {\n const gaugesFiltered = this.compareManager.gaugesInMap.filter(\n (g) => g.lat === mapLatLng.lat && g.lng === mapLatLng.lng\n );\n if (gaugesFiltered.length !== 1) {\n return;\n }\n const gaugeSelected = gaugesFiltered[0];\n\n await this.refreshGaugeValues({id: gaugeSelected.id, name: gaugeSelected.name});\n\n await this.compareManager.selectGauge(gaugeSelected.id, 0);\n }\n\n async refreshGaugeValues(gaugeSelected: {id: string; name: string}) {\n const gaugeValueShowBegin = new Date(\n this.periodBegin.getTime() - RaainDetailsComponent.DAY_MS\n );\n const gaugeValueShowEnd = new Date(this.periodEnd.getTime() + RaainDetailsComponent.DAY_MS);\n gaugeValueShowBegin.setHours(0, 0);\n gaugeValueShowEnd.setHours(23, 59);\n\n const gaugeMeasures = await this.profileService.getGaugeMeasures(\n gaugeSelected.id,\n gaugeValueShowBegin,\n gaugeValueShowEnd\n );\n const gaugeValues: {date: Date; value: number}[] = gaugeMeasures.map((gm) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const cartesianMeasureValue = new CartesianMeasureValue(gm.values[0] as any);\n return {\n date: gm.date,\n value: cartesianMeasureValue.getCartesianValues()[0].value,\n };\n });\n this.gaugeSelectedPoints = [\n {\n label: gaugeSelected.name,\n style: 'bar',\n values: gaugeValues,\n },\n ];\n this.cdr.markForCheck();\n }\n\n async onGaugeSelectInCompare(e: {point: XYType; compareIndex: number}) {\n await this.refreshGaugeValues({id: e.point.id, name: e.point.name});\n\n await this.compareManager.selectGauge(e.point.id, e.compareIndex);\n }\n\n async onToggleMap($event: Event) {\n // if (this.toggleMap) {\n // await this.refreshMap();\n // }\n }\n\n onTogglePixelMarkers() {\n // Toggle is bound to showPixelMarkers, raain-map handles marker display\n }\n\n async onCumulativeToggleClick($event: Event) {\n console.log('[CumulativeToggle] click event', {\n currentValue: this.toggleCumulative,\n eventType: $event.type,\n target: ($event.target as HTMLElement)?.tagName,\n });\n\n $event.preventDefault();\n $event.stopPropagation();\n\n if (!this.toggleCumulative) {\n console.log('[CumulativeToggle] showing popup, toggle stays OFF');\n // Currently OFF, user wants to enable - show selector popup\n this.showCumulativeSelector = true;\n\n // Force reset the toggle visual state after ion-toggle's internal handler\n setTimeout(() => {\n if (this.cumulativeToggleRef) {\n this.cumulativeToggleRef.checked = false;\n console.log('[CumulativeToggle] force reset toggle to OFF');\n }\n }, 0);\n\n this.cdr.markForCheck();\n } else {\n console.log('[CumulativeToggle] turning OFF');\n // Currently ON, user wants to disable - direct toggle off\n this.toggleCumulative = false;\n this.storage.set('raain-toggleCumulative', false);\n this.dateShown = this.getDateBasedOnCumulativeMode(this.timeframeDates);\n this.updateCumulativeDurationInMinutes();\n if (this.toggleMap) {\n this.updateRefreshManagerPeriod();\n await this.refreshManager.refresh(false, this.toggleAdmin);\n }\n this.cdr.markForCheck();\n }\n console.log('[CumulativeToggle] after handler, toggleCumulative =', this.toggleCumulative);\n }\n\n async onCumulativePeriodSelected(selection: CumulativeSelection) {\n this.showCumulativeSelector = false;\n\n // Update period to match selection\n this.periodBegin = selection.periodBegin;\n this.periodEnd = selection.periodEnd;\n this.periodBeginAsString = RaainDetailsComponent.PeriodDisplay(this.periodBegin);\n this.periodEndAsString = RaainDetailsComponent.PeriodDisplay(this.periodEnd);\n\n // Calculate duration in hours\n const durationMs = this.periodEnd.getTime() - this.periodBegin.getTime();\n const durationHours = durationMs / RaainDetailsComponent.HOUR_MS;\n this.periodDurationAsString = String(durationHours);\n\n // Store cumulative period\n this.storage.set('raain-periodBegin', this.periodBegin);\n this.storage.set('raain-periodEnd', this.periodEnd);\n this.storage.set('raain-periodDurationInHours', durationHours);\n\n // Enable cumulative mode\n this.toggleCumulative = true;\n this.storage.set('raain-toggleCumulative', true);\n\n this.dateShown = this.getDateBasedOnCumulativeMode(this.timeframeDates);\n this.updateCumulativeDurationInMinutes();\n\n // Refresh map\n if (this.toggleMap) {\n this.updateRefreshManagerPeriod();\n await this.refreshManager.refresh(false, this.toggleAdmin);\n }\n\n this.cdr.markForCheck();\n }\n\n onCumulativeSelectorCancelled() {\n console.log('[CumulativeToggle] cancelled, toggleCumulative =', this.toggleCumulative);\n this.showCumulativeSelector = false;\n this.cdr.markForCheck();\n }\n\n updateCumulativeDurationInMinutes() {\n if (this.toggleCumulative) {\n // Cumulative mode: use period duration\n this.cumulativeDurationInMinutes = parseFloat(this.periodDurationAsString) * 60;\n } else {\n // Granular mode: use selectedTimeStep\n this.cumulativeDurationInMinutes = this.selectedTimeStep || 10;\n }\n }\n\n async onProviderChanged($event: Event) {\n this.selectedProvider = ($event as CustomEvent)?.detail?.value;\n this.storage.set('raain-selectedProvider', this.selectedProvider);\n await this.applyRefreshManagerSettings();\n }\n\n async onTimeStepChanged($event: Event) {\n const raw: string = ($event as CustomEvent)?.detail?.value;\n const [mode, stepStr] = raw.split(':');\n this.timeStepMode = mode as 'eq' | 'lte';\n this.selectedTimeStep = parseInt(stepStr, 10);\n this.storage.set('raain-selectedTimeStep', this.selectedTimeStep);\n this.storage.set('raain-timeStepMode', this.timeStepMode);\n this.updateCumulativeDurationInMinutes();\n await this.applyRefreshManagerSettings();\n }\n\n async loadProviders() {\n if (!this.rainNode?.id) {\n return;\n }\n\n try {\n const result = await this.profileService.getProviders(this.rainNode.id);\n this.availableProviders = result.providers.sort();\n this.availableTimeSteps = result.timeStepInMinutes.sort((a, b) => a - b);\n\n // Load saved selections or use defaults\n this.selectedProvider =\n this.storage.get('raain-selectedProvider') ||\n (this.availableProviders.length > 0 ? this.availableProviders[0] : 'Raain');\n this.selectedTimeStep =\n this.storage.get('raain-selectedTimeStep') ||\n (this.availableTimeSteps.length > 0 ? this.availableTimeSteps[0] : 10);\n this.timeStepMode = this.storage.get('raain-timeStepMode') || 'eq';\n } catch (e) {\n // Set fallback values\n this.availableProviders = ['Raain'];\n this.availableTimeSteps = [5, 10, 15, 30, 60];\n this.selectedProvider = 'Raain';\n this.selectedTimeStep = 10;\n this.timeStepMode = 'eq';\n }\n // Override timeStep if forced\n if (this.forceTimeStep) {\n this.selectedTimeStep = this.forceTimeStep;\n }\n\n this.buildTimeStepOptions();\n\n // Set provider and timeStep on refreshManager\n if (this.refreshManager) {\n this.refreshManager.provider = this.selectedProvider;\n this.refreshManager.timeStepInMinutes = this.selectedTimeStep;\n this.refreshManager.timeStepMode = this.timeStepMode;\n }\n this.cdr.markForCheck();\n }\n\n private buildTimeStepOptions() {\n this.availableTimeStepOptions = [];\n for (const step of this.availableTimeSteps) {\n this.availableTimeStepOptions.push({label: `= ${step} min`, value: `eq:${step}`});\n this.availableTimeStepOptions.push({label: `≤ ${step} min`, value: `lte:${step}`});\n }\n }\n\n onChangeDetectionTest(rainNode: RainNode) {\n console.log(TEST_DETECTION++, 'onChangeDetectionTest');\n return '';\n }\n\n updateTruncatedError() {\n const error = this.refreshManager?.lastError || '';\n if (error.length <= 80) {\n this.truncatedError = error;\n return;\n }\n this.truncatedError = error.substring(0, 80) + '...';\n }\n\n updateCachedValues() {\n this.updatePercentOfImages();\n this.updatePercentOfComputations();\n this.updateTruncatedError();\n this.updateCumulativeDurationInMinutes();\n }\n\n async refreshMap() {\n this.gaugeSelectedPoints = [];\n this.dateShown = this.getDateBasedOnCumulativeMode();\n this.borders = [];\n\n this.compareManager.cleanAll();\n await this.compareManager.setGaugesInMap();\n await this.refreshManager.refresh(false, this.toggleAdmin);\n this.cdr.markForCheck();\n }\n\n async triggerCumulativeCreation() {\n if (this.creatingCumulative) {\n return;\n }\n this.creatingCumulative = true;\n this.cdr.markForCheck();\n\n try {\n await this.profileService.createCumulativePeriod(this.rainNode.id, {\n periodBegin: this.periodBegin,\n periodEnd: this.periodEnd,\n provider: this.selectedProvider,\n timeStepInMinutes: this.selectedTimeStep,\n });\n\n const success = await this.pollForCumulativeCompletion();\n\n if (success) {\n await this.refreshMap();\n } else {\n console.error('triggerCumulativeCreation: timeout waiting for computation');\n }\n } catch (e) {\n console.error('triggerCumulativeCreation error:', e);\n }\n\n this.creatingCumulative = false;\n this.cdr.markForCheck();\n }\n\n async setPeriodOfNow() {\n const last30mn = new Date();\n last30mn.setMinutes(last30mn.getMinutes() - 30);\n this.periodBeginAsString =\n last30mn.toISOString().substring(0, 11) + last30mn.toLocaleTimeString().substring(0, 5);\n this.periodDurationAsString = '1';\n await this.onPeriodBeginChange(null);\n await this.refreshManager.refresh(false, this.toggleAdmin);\n }\n\n updatePercentOfImages() {\n if (!this.countsPeriod?.percentImages?.length) {\n this.percentOfImages = 0;\n return;\n }\n\n const duringPeriod = this.countsPeriod.percentImages.filter(\n (a) =>\n this.periodBegin.getTime() <= new Date(a.name).getTime() &&\n new Date(a.name).getTime() <= this.periodEnd.getTime()\n );\n const summed = duringPeriod.reduce((a, b) => a + (b.x ?? 0), 0);\n this.percentOfImages = Math.round(summed / duringPeriod.length);\n }\n\n updatePercentOfComputations() {\n const expectedCount = this.refreshManager?.getExpectedTimelineCount();\n if (!expectedCount) {\n this.percentOfComputations = 0;\n this.presentComputationCount = 0;\n this.expectedComputationCount = 0;\n return;\n }\n\n const presentCount = this.refreshManager?.getPresentTimelineCount() || 0;\n this.presentComputationCount = presentCount;\n this.expectedComputationCount = expectedCount;\n this.percentOfComputations = Math.round((presentCount / expectedCount) * 100);\n }\n\n private async pollForCumulativeCompletion(): Promise<boolean> {\n const POLL_TIMEOUT_MS = 900000;\n const POLL_INTERVAL_MS = 3000;\n const startTime = Date.now();\n const windowInMinutes = Math.round(\n (this.periodEnd.getTime() - this.periodBegin.getTime()) / 60000\n );\n\n while (Date.now() - startTime < POLL_TIMEOUT_MS) {\n try {\n const progress = await this.profileService.getRainProgress(this.rainNode.id);\n\n if (progress === 0) {\n // Trigger background fetch from raain-ground via timeframeCumulative\n await this.profileService.getRainTimeframe(\n this.rainNode.id,\n this.periodBegin,\n this.periodEnd,\n this.toggleAdmin,\n this.selectedProvider,\n this.selectedTimeStep,\n windowInMinutes\n );\n\n // Verify cumulative actually exists\n const response = (await this.profileService.getCumulativePeriods(\n this.rainNode.id,\n {\n provider: this.selectedProvider,\n windowInMinutes,\n forced: this.toggleAdmin,\n }\n )) as RaainApiRainsCumulativesListResponse;\n\n const found = response.periods.find(\n (p) => p.windowInMinutes === windowInMinutes\n );\n\n if (found) {\n return true;\n }\n }\n\n await new Promise((r) => setTimeout(r, POLL_INTERVAL_MS));\n } catch (e) {\n console.warn('Poll error:', e);\n await new Promise((r) => setTimeout(r, POLL_INTERVAL_MS));\n }\n }\n\n return false;\n }\n\n private getDateBasedOnCumulativeMode(fallbackDates?: Date[]): Date {\n if (fallbackDates?.length > 0) {\n const dateExists = fallbackDates.some((d) => d.getTime() === this.dateShown?.getTime());\n if (!dateExists) {\n return this.toggleCumulative\n ? fallbackDates[fallbackDates.length - 1]\n : fallbackDates[0];\n }\n }\n return this.toggleCumulative ? this.periodEnd : this.periodBegin;\n }\n\n private getCumulativeHours(): number {\n return this.toggleCumulative ? parseFloat(this.periodDurationAsString) : 0;\n }\n\n private getDurationInHours(): number {\n return parseFloat(this.periodDurationAsString);\n }\n\n private updateRefreshManagerPeriod() {\n this.refreshManager.cumulative = this.toggleCumulative;\n\n // Align dates to 5-minute boundaries (floor) for consistency with raain-ground\n const alignTo5minFloor = (date: Date): Date => {\n const minutes = date.getMinutes();\n const alignedMinutes = Math.floor(minutes / 5) * 5;\n return new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n alignedMinutes,\n 0,\n 0\n );\n };\n\n this.refreshManager.period = {\n begin: alignTo5minFloor(this.periodBegin),\n end: alignTo5minFloor(this.periodEnd),\n };\n }\n\n private async fetchAndUpdateMap() {\n await this.refreshManager.fetch(\n this.dateShown,\n this.toggleGaugeMeasures,\n this.getCumulativeHours()\n );\n this.currentTimeframeTarget = this.refreshManager.getTimelineSelectedFrameSet();\n this.cdr.markForCheck();\n }\n\n private async applyRefreshManagerSettings() {\n if (!this.refreshManager) {\n return;\n }\n this.refreshManager.provider = this.selectedProvider;\n this.refreshManager.timeStepInMinutes = this.selectedTimeStep;\n this.refreshManager.timeStepMode = this.timeStepMode;\n await this.refreshManager.refresh(false, this.toggleAdmin);\n }\n\n private cleanAll() {\n this.borders = [];\n this.isAdmin = false;\n this.timeframeContainers = new TimeframeContainers([]);\n this.currentTimeframeTarget = null;\n this.timeframeDates = [];\n this.countPoints = [];\n this.countsPeriod = {progress: 0, queueRunning: 0, percentImages: []};\n this.gaugeSelectedPoints = [];\n\n this.toggleHistory = false;\n this.toggleMap = true;\n this.toggleCompare = false;\n this.toggleGaugeMeasures = false;\n this.toggleRemoveCompareDuplicate = true;\n this.toggleCumulative = this.showCumulativeToggle\n ? this.storage.get('raain-toggleCumulative')\n : false;\n\n this.periodBegin = new Date(this.storage.get('raain-periodBegin'));\n this.periodEnd = new Date(this.storage.get('raain-periodEnd'));\n this.periodBeginAsString = RaainDetailsComponent.PeriodDisplay(this.periodBegin);\n this.periodEndAsString = RaainDetailsComponent.PeriodDisplay(this.periodEnd);\n const durationMs = this.periodEnd.getTime() - this.periodBegin.getTime();\n this.periodDurationAsString = '' + durationMs / RaainDetailsComponent.HOUR_MS;\n\n this.dateShown = this.getDateBasedOnCumulativeMode();\n this.refreshInProgress = false;\n this.showFullError = false;\n this.showQualityModal = false;\n this.qualityIndicators = [];\n this.qualityIndicatorsLoading = false;\n\n this.compareManager?.cleanAll();\n this.refreshManager?.cleanAll();\n }\n\n private async init() {\n this.cleanAll();\n this.updateCachedValues();\n await this.initRain();\n this.cdr.markForCheck();\n }\n\n private async initRain() {\n if (!this.rainNode) {\n return;\n }\n\n this.isAdmin = this.profileService.isAdmin();\n\n this.refreshManager.rainNode = this.rainNode;\n this.compareManager.rainNode = this.rainNode;\n\n // Load providers and set on refreshManager\n await this.loadProviders();\n\n this.refreshManager.setMethods(\n this.onRefreshInProgress.bind(this),\n this.onRefreshDone.bind(this),\n this.onFetchDone.bind(this)\n );\n\n const center = this.rainNode.getCenter();\n this.coordinates = new MapLatLng(center.lat, center.lng);\n this.teamNode = await this.profileService.getTeam(\n this.rainNode.getLink(TeamNode.TYPE).getId()\n );\n\n // Load all gauges linked to the rainNode on map\n await this.compareManager.setGaugesInMap();\n\n if (this.periodBegin && this.periodEnd) {\n this.updateRefreshManagerPeriod();\n await this.refreshManager.refresh(false, this.toggleAdmin);\n }\n }\n\n private async onRefreshInProgress(\n countPeriods: {\n percentImages?: XYType[];\n queueRunning?: number;\n progress?: number;\n },\n timeframeDates: Date[]\n ) {\n this.refreshInProgress = true;\n this.countsPeriod = countPeriods;\n this.timeframeDates = timeframeDates;\n this.updateCachedValues();\n this.cdr.markForCheck();\n }\n\n private async onRefreshDone(timeframeDates: Date[]) {\n this.timeframeDates = timeframeDates;\n this.refreshInProgress = false;\n this.updateCachedValues();\n this.cdr.markForCheck();\n\n if (this.toggleMap && timeframeDates.length > 0) {\n this.dateShown = this.getDateBasedOnCumulativeMode(timeframeDates);\n if (this.dateShown) {\n await this.fetchAndUpdateMap();\n }\n }\n }\n\n private async onFetchDone(timeframeContainers?: TimeframeContainers) {\n if (timeframeContainers) {\n this.timeframeContainers = timeframeContainers;\n }\n this.cdr.markForCheck();\n }\n\n private async change(_changes: SimpleChanges) {\n await this.init();\n }\n}\n","<!-- Main content container -->\n<div *ngIf=\"rainNode\" class=\"raain-details-container\">\n\n <!-- Period selection section -->\n <ion-card class=\"period-card\">\n <ion-card-content>\n <div class=\"period-controls\">\n <div class=\"period-row\">\n\n <ion-button (click)=\"toggleHistory = !toggleHistory; onEnableCountHistoryTab(rainNode)\"\n fill=\"outline\">\n <ion-icon name=\"calendar-clear-outline\" slot=\"start\"></ion-icon>\n <ion-icon [name]=\"toggleHistory ? 'chevron-down' : 'chevron-forward'\" slot=\"end\"></ion-icon>\n </ion-button>\n\n <div class=\"period-start ion-hide-md-down\">\n <input (change)=\"onPeriodBeginChange($event)\"\n [disabled]=\"toggleCumulative\"\n [value]=\"periodBeginAsString\"\n class=\"datetime-input\"\n type=\"datetime-local\">\n </div>\n\n <div class=\"period-duration ion-hide-md-down\">\n <ion-select (ionDismiss)=\"onPeriodDurationChange($event)\"\n [(ngModel)]=\"periodDurationAsString\"\n [disabled]=\"toggleCumulative\"\n class=\"duration-select\"\n id=\"periodDuration\"\n interface=\"popover\">\n <ion-select-option value=\"0.25\">15 minutes</ion-select-option>\n <ion-select-option value=\"0.5\">30 minutes</ion-select-option>\n <ion-select-option value=\"1\">1 hour</ion-select-option>\n <ion-select-option value=\"2\">2 hours</ion-select-option>\n <ion-select-option value=\"3\">3 hours</ion-select-option>\n <ion-select-option value=\"4\">4 hours</ion-select-option>\n <ion-select-option value=\"5\">5 hours</ion-select-option>\n <ion-select-option value=\"6\">6 hours</ion-select-option>\n <ion-select-option value=\"8\">8 hours</ion-select-option>\n <ion-select-option value=\"10\">10 hours</ion-select-option>\n <ion-select-option value=\"12\">12 hours</ion-select-option>\n <ion-select-option *ngIf=\"isAdmin\" value=\"24\">24 hours</ion-select-option>\n </ion-select>\n </div>\n\n <div class=\"period-start ion-hide-md-down\">\n <input (change)=\"onPeriodEndChange($event)\"\n [disabled]=\"toggleCumulative\"\n [value]=\"periodEndAsString\"\n class=\"datetime-input\"\n type=\"datetime-local\">\n </div>\n\n <div *ngIf=\"showCumulativeToggle\" (click)=\"onCumulativeToggleClick($event)\" class=\"toggle-cumulative\">\n <ion-label [class.text-primary]=\"toggleCumulative\">\n {{ toggleCumulative ? 'Cumulative' : 'Granular' }}\n </ion-label>\n <ion-toggle #cumulativeToggle [checked]=\"toggleCumulative\">\n </ion-toggle>\n </div>\n </div>\n\n <!-- Hidden label for change detection (uncomment to debug)\n <div class=\"hidden-label\">{{ onChangeDetectionTest(rainNode) }}</div>\n -->\n </div>\n\n <!-- Historical map section -->\n <div *ngIf=\"toggleHistory\" class=\"period-controls\">\n <raain-date-dynamic (changedDate)=\"onDateChangeInCount($event)\"\n [currentHeight]=\"300\"\n [fetchData]=\"fetchDataWrapper\"\n [points]=\"countPoints\">\n </raain-date-dynamic>\n </div>\n </ion-card-content>\n </ion-card>\n\n <!-- Map performance -->\n <ion-grid class=\"map-performance\">\n <ion-row id=\"progressAndRefresh\">\n <ion-col class=\"provider-selection\" size=\"12\" size-md=\"6\">\n <ion-button (click)=\"openQualityModal()\" class=\"quality-info-button\" fill=\"clear\">\n {{ refreshManager.rainComputationMapVersion }}\n <ion-icon name=\"help-circle-outline\" slot=\"end\"></ion-icon>\n </ion-button>\n <div *ngIf=\"availableProviders.length > 0 || availableTimeSteps.length > 0\" class=\"selection-row\">\n <ion-select (ionChange)=\"onProviderChanged($event)\"\n [value]=\"selectedProvider\"\n interface=\"popover\"\n label=\"Provider\"\n placeholder=\"Select Provider\">\n <ion-select-option *ngFor=\"let provider of availableProviders\" [value]=\"provider\">\n {{ provider }}\n </ion-select-option>\n </ion-select>\n\n <ion-select (ionChange)=\"onTimeStepChanged($event)\"\n [disabled]=\"forceTimeStep\"\n [value]=\"timeStepMode + ':' + selectedTimeStep\"\n interface=\"popover\"\n label=\"Time Step\"\n placeholder=\"Select Time Step\">\n <ion-select-option *ngFor=\"let opt of availableTimeStepOptions\" [value]=\"opt.value\">\n {{ opt.label }}\n </ion-select-option>\n </ion-select>\n\n <span class=\"computation-count\">\n {{ presentComputationCount }}/{{ expectedComputationCount }}\n <ion-button (click)=\"triggerCumulativeCreation()\"\n *ngIf=\"showCreateMissingImages\"\n [disabled]=\"creatingCumulative\" fill=\"clear\" color=\"medium\"\n id=\"createMissingImages\"\n size=\"small\">\n <ion-icon *ngIf=\"!creatingCumulative\" name=\"refresh-outline\"\n slot=\"icon-only\"></ion-icon>\n <ion-spinner *ngIf=\"creatingCumulative\" name=\"crescent\"\n slot=\"icon-only\"></ion-spinner>\n </ion-button>\n <i *ngIf=\"countsPeriod?.progress\" class=\"progress-indicator\">\n In Progress: {{ countsPeriod.progress }}...\n </i>\n </span>\n </div>\n </ion-col>\n <ion-col class=\"ion-text-right\" size=\"12\" size-md=\"6\">\n <ion-button (click)=\"refreshMap()\" [disabled]=\"refreshInProgress\" class=\"refresh-button\">\n Refresh Map\n </ion-button>\n </ion-col>\n </ion-row>\n\n <!-- status update row -->\n <ion-row>\n <!-- Progress col -->\n <ion-progress-bar\n [buffer]=\"(countsPeriod.progress / ((timeframeDates?.length || 10) +3))+0.01\"\n [style.visibility]=\"refreshInProgress ? 'visible' : 'hidden'\"\n [value]=\"countsPeriod.progress / ((timeframeDates?.length || 10) +3)\"\n color=\"primary\">\n </ion-progress-bar>\n\n <!-- Error col -->\n <ion-col (click)=\"showFullError = !showFullError\" *ngIf=\"refreshManager.lastError\" class=\"error-row\"\n size=\"12\">\n <div class=\"error-content\">\n <ion-icon class=\"error-icon\" name=\"warning-outline\"></ion-icon>\n <span [class.expanded]=\"showFullError\" class=\"error-text\">\n {{ showFullError ? refreshManager.lastError : truncatedError }}\n </span>\n <ion-icon [name]=\"showFullError ? 'chevron-up' : 'chevron-down'\" class=\"error-caret\"></ion-icon>\n </div>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <!-- Map section -->\n <ion-card class=\"map-card\">\n <ion-card-content class=\"map-content\">\n <ion-grid>\n <ion-row *ngIf=\"toggleMap && (percentOfImages || percentOfComputations)\">\n <!-- Map component -->\n <ion-col class=\"map-column\" size-lg=\"7\" size-md=\"12\">\n <div class=\"map-container\">\n <raain-map #raainMapRef\n (changedDate)=\"onDateChangeInMap($event)\"\n (changedSum)=\"onSumChangeInMap($event)\"\n (selectedMarker)=\"onGaugeSelectInMap($event)\"\n [coordinates]=\"coordinates\"\n [cumulativeDurationInMinutes]=\"cumulativeDurationInMinutes\"\n [currentHeight]=\"500\"\n [defaultDate]=\"dateShown\"\n [markers]=\"{\n borders,\n gauges: compareManager.gaugesInMap,\n gaugesInCompare: compareManager.gaugesInCompare,\n selectedGauges: compareManager.selectedGauges,\n pixels: compareManager.selectedPixels,\n pixelsSolution: compareManager.pixelsSolutions?.length ? compareManager.pixelsSolutions[0] : [],\n speeds: compareManager.speeds\n }\"\n [scaleLabel]=\"toggleCumulative ? 'mm' : scaleLabel\"\n [showNavigation]=\"!toggleCumulative\"\n [showDateRange]=\"showDateRange\"\n [showVisiblePixelMarkers]=\"showPixelMarkers\"\n [sumFn]=\"refreshManager.sumFn\"\n [sumValues]=\"refreshManager.sumValues\"\n [timeframeContainers]=\"timeframeContainers\"\n [timeframeDates]=\"timeframeDates\">\n </raain-map>\n </div>\n\n <div class=\"data-column\">\n <!-- Technical details (collapsible for cleaner UI) -->\n <details class=\"technical-details\">\n <summary>Image Details</summary>\n <div class=\"details-content\">\n <div class=\"detail-row\">\n <span class=\"detail-label\">Computed:</span>\n <span class=\"detail-value\">{{ refreshManager.rainComputationMapDoneDate | date:'yyyy-MM-dd HH:mm' }}</span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Version:</span>\n <span class=\"detail-value\">{{ refreshManager.rainComputationMapVersion }}</span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Launched by:</span>\n <span class=\"detail-value\">{{ refreshManager.rainComputationMapLaunchedBy }}</span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Time spent:</span>\n <span class=\"detail-value\">{{ refreshManager.rainComputationMapTimeSpentInMs }}\n ms</span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Date:</span>\n <span class=\"detail-value\">{{ refreshManager.rainComputationMapDate?.toISOString() }}\n | {{ refreshManager.rainComputationMapDate | date:'yyyy-MM-dd HH:mm' }}</span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Water in the map:</span>\n <span class=\"detail-value\">{{ sumDetails }}</span>\n <ion-toggle\n (ionChange)=\"onTogglePixelMarkers()\"\n [(ngModel)]=\"showPixelMarkers\"\n style=\"margin-left: 8px; transform: scale(0.7);\">\n </ion-toggle>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Source DBZ min:</span>\n <span class=\"detail-value\">{{ refreshManager.rainComputationMapOriginalMin }}</span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Source DBZ max:</span>\n <span class=\"detail-value\">{{ refreshManager.rainComputationMapOriginalMax }}</span>\n </div>\n </div>\n </details>\n </div>\n </ion-col>\n\n <!-- Data panel -->\n <ion-col *ngIf=\"!!compareManager.compareVersion && (!toggleCumulative || showCumulativeCompare)\"\n class=\"data-column\" size-lg=\"5\" size-md=\"12\">\n <div class=\"data-panel\">\n <!-- Compare stack component -->\n <div class=\"compare-stack\">\n <raain-compare-stack\n (selectedPoint)=\"onGaugeSelectInCompare($event)\"\n [compareManager]=\"compareManager\"\n [cumulative]=\"toggleCumulative\">\n </raain-compare-stack>\n </div>\n\n <!-- Technical details (collapsible for cleaner UI) -->\n <details class=\"technical-details\">\n <summary>Compare Details</summary>\n <div class=\"details-content\">\n <div [ngClass]=\"{'warning': refreshManager.rainComputationMapDoneDate?.getTime() > compareManager.currentQualityDoneDate?.getTime() + 60000}\"\n class=\"detail-row\">\n <span class=\"detail-label\">Computed:</span>\n <span class=\"detail-value\">{{ compareManager.currentQualityDoneDate | date:'yyyy-MM-dd HH:mm' }}</span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Version:</span>\n <span class=\"detail-value\">{{ compareManager.compareVersion }}</span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Launched by:</span>\n <span class=\"detail-value\">{{ compareManager.currentQualityLaunchedBy }}</span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Time spent:</span>\n <span class=\"detail-value\">{{ compareManager.currentQualityTimeSpentInMs }}\n ms</span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Gauges:</span>\n <span class=\"detail-value\">{{ compareManager.gaugesInCompare.length }}</span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Points:</span>\n <span class=\"detail-value\">{{ compareManager.globalComparePoints.length }}</span>\n </div>\n </div>\n </details>\n </div>\n </ion-col>\n </ion-row>\n <ion-row>\n <!-- Bottom progress bar -->\n <ion-progress-bar *ngIf=\"refreshInProgress\"\n [buffer]=\"(countsPeriod.progress / ((timeframeDates?.length || 10) +3))+0.01\"\n [value]=\"countsPeriod.progress / ((timeframeDates?.length || 10) +3)\"\n color=\"primary\">\n </ion-progress-bar>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n\n <!-- Gauge values section -->\n <ion-card *ngIf=\"gaugeSelectedPoints.length && gaugeSelectedPoints[0].values.length\" class=\"gauge-card\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon name=\"analytics-outline\"></ion-icon>\n Selected Gauge Data\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <raain-date-focus\n [currentHeight]=\"300\"\n [focusDate]=\"periodBegin\"\n [focusRange]=\"DateRange.DAY\"\n [points]=\"gaugeSelectedPoints\"\n [withoutAll]=\"true\">\n </raain-date-focus>\n </ion-card-content>\n </ion-card>\n\n <!-- Quality Performance Modal -->\n <div (click)=\"closeQualityModal()\" *ngIf=\"showQualityModal\" class=\"quality-modal-overlay\">\n <div (click)=\"$event.stopPropagation()\" class=\"quality-modal-content\">\n <div class=\"quality-modal-header\">\n <h2>Model Quality Performance</h2>\n <ion-button (click)=\"closeQualityModal()\" fill=\"clear\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </div>\n <div class=\"quality-modal-body\">\n <div *ngIf=\"qualityIndicatorsLoading\" class=\"quality-loading\">\n <ion-spinner name=\"crescent\"></ion-spinner>\n <span>Loading indicators...</span>\n </div>\n <div *ngIf=\"!qualityIndicatorsLoading && qualityIndicators.length === 0\" class=\"quality-empty\">\n No quality indicators available for this year.\n </div>\n\n <!-- Performance Chart -->\n <div *ngIf=\"!qualityIndicatorsLoading && modelPerformanceData.length > 0\" class=\"performance-chart-container\">\n <canvas #performanceCanvas></canvas>\n </div>\n\n <!-- Details Accordion -->\n <div *ngIf=\"!qualityIndicatorsLoading && qualityIndicators.length > 0\" class=\"quality-details-section\">\n <div (click)=\"showQualityDetails = !showQualityDetails\" class=\"quality-details-toggle\">\n <span>Details</span>\n <ion-icon [name]=\"showQualityDetails ? 'chevron-up' : 'chevron-down'\"></ion-icon>\n </div>\n <table *ngIf=\"showQualityDetails\" class=\"quality-table\">\n <thead>\n <tr>\n <th>Model</th>\n <th>Compare</th>\n <th>Gauges</th>\n <th>Period</th>\n <th>Avg Quality</th>\n <th>Updated</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let indicator of qualityIndicators\">\n <td>{{ indicator.computingVersion }}</td>\n <td>{{ indicator.qualityVersion }}</td>\n <td>{{ indicator.provider }}<br>{{ indicator.timeStepInMinutes }} min</td>\n <td>{{ formatDate(indicator.startDate) }}<br>{{ formatDate(indicator.endDate) }}</td>\n <td>{{ indicator.averageQuality | number:'1.2-2' }}</td>\n <td>{{ formatDate(indicator.lastUpdatedAt) }}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Cumulative Selector Modal -->\n <cumulative-selector (cancelled)=\"onCumulativeSelectorCancelled()\"\n (periodSelected)=\"onCumulativePeriodSelected($event)\"\n *ngIf=\"showCumulativeSelector\"\n [currentPeriodBegin]=\"periodBegin\"\n [currentPeriodEnd]=\"periodEnd\"\n [isAdmin]=\"toggleAdmin\"\n [provider]=\"selectedProvider\"\n [rainId]=\"rainNode?.id\"\n [timeStepInMinutes]=\"selectedTimeStep\">\n </cumulative-selector>\n\n</div>\n","import {Injectable} from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class Cache {\n private readonly _cache: Record<string, unknown>;\n\n constructor() {\n this._cache = {};\n }\n\n public async getValue<T>(key: string, asyncGetter: () => Promise<T>): Promise<T> {\n if (!Object.prototype.hasOwnProperty.call(this._cache, key)) {\n console.log('cache not done: ', key);\n this.putValue(key, await asyncGetter());\n } else {\n console.log('cache done: ', key);\n }\n return this._cache[key] as T;\n }\n\n public putValue<T>(key: string, value: T): void {\n this._cache[key] = value;\n\n const length = Object.getOwnPropertyNames(this._cache).length;\n if (length > 30) {\n console.warn('Pb on cache size exceed ? do a restart ?', length);\n }\n }\n}\n","import {Injectable} from '@angular/core';\nimport {\n MeasureValuePolarContainer,\n RadarPolarMeasureValue,\n RainNode,\n RainPolarMeasureValue,\n} from 'raain-model';\nimport {PolarMapValue} from 'raain-ui';\nimport {ProfileService} from './profile.service';\nimport {FrameSet} from './tools';\n\n@Injectable()\nexport class RadarService {\n constructor(private profileService: ProfileService) {}\n\n static getGeoValuesFromRainMeasures(\n measureValue: RainPolarMeasureValue,\n rain: RainNode\n ): PolarMapValue[] {\n return this.computeValues(measureValue.getPolars(), rain);\n }\n\n static getGeoValuesFromRadarMeasures(\n measureValue: RadarPolarMeasureValue,\n rain: RainNode\n ): PolarMapValue[] {\n return this.computeValues(measureValue.getPolars(), rain);\n }\n\n private static computeValues(polarMeasureValues: MeasureValuePolarContainer[], rain: RainNode) {\n const values: PolarMapValue[] = [];\n polarMeasureValues.forEach((p) => {\n const azimuth = p.azimuth;\n let distance = 0;\n const polarEdges = p.polarEdges;\n polarEdges.forEach((e) => {\n const pmv = new PolarMapValue(e, azimuth, distance);\n values.push(pmv);\n distance += p.distance;\n });\n });\n\n return values;\n }\n\n async getTimeline(rainNode: RainNode): Promise<FrameSet[]> {\n const timeline: FrameSet[] = [];\n const links = rainNode?.getLinks() ?? [];\n\n for (const link of links) {\n const cumulativeIndex = link.href.indexOf('cumulatives/');\n if (cumulativeIndex >= 0) {\n const start = cumulativeIndex + 'cumulatives/'.length;\n const str1 = link.href.substring(start);\n if (str1) {\n const splitted = str1.split('/');\n const frameDate = new Date(splitted[0]);\n const version = splitted[1];\n const rainComputationCumulativeId = splitted[2];\n const existingTargets = timeline.filter(\n (t) => t.date.getTime() === frameDate.getTime()\n );\n if (existingTargets.length) {\n existingTargets[0].rainComputationCumulativeId =\n rainComputationCumulativeId;\n } else {\n timeline.push(\n new FrameSet(frameDate, [], null, null, [], rainComputationCumulativeId)\n );\n }\n }\n }\n }\n\n return timeline;\n }\n}\n","export const CONSTANTS = {\n _RAIN_STATUS_0_NOT_STARTED: 0,\n _RAIN_STATUS_0_WAIT_FOR_INTERNAL_VALIDATION: 0.3,\n _RAIN_STATUS_1_READY_TO_COMPUTE: 0.6,\n _RAIN_STATUS_1_READY: 1,\n\n _INPUT_VALIDITY_NOT_CHECKED_YET: -1,\n _INPUT_VALIDITY_CHECK_IN_PROGRESS: -0.5,\n _INPUT_VALIDITY_NOT_VALID: 0,\n _INPUT_VALIDITY_NOT_CONFIDENT: 0.5,\n _INPUT_VALIDITY_VALID: 1,\n};\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {EventNode, RainNode} from 'raain-model';\nimport {CONSTANTS} from './shared.const';\n\n@Pipe({name: 'areStopped'})\nexport class AreStopped implements PipeTransform {\n transform(rains: RainNode[]): RainNode[] {\n return rains.filter((rain) => rain.status <= CONSTANTS._RAIN_STATUS_0_NOT_STARTED);\n }\n}\n\n@Pipe({name: 'areInProgress'})\nexport class AreInProgressPipe implements PipeTransform {\n transform(rains: RainNode[]): RainNode[] {\n return rains.filter(\n (rain) =>\n CONSTANTS._RAIN_STATUS_0_NOT_STARTED < rain.status &&\n rain.status < CONSTANTS._RAIN_STATUS_1_READY_TO_COMPUTE\n );\n }\n}\n\n@Pipe({name: 'areReady'})\nexport class AreReady implements PipeTransform {\n transform(rains: RainNode[]): RainNode[] {\n return rains.filter(\n (rain) =>\n rain.status >= CONSTANTS._RAIN_STATUS_1_READY_TO_COMPUTE &&\n rain.quality > CONSTANTS._INPUT_VALIDITY_NOT_CONFIDENT\n );\n }\n}\n\n@Pipe({name: 'isReady'})\nexport class IsReady implements PipeTransform {\n transform(rain: RainNode): RainNode {\n if (rain.status >= CONSTANTS._RAIN_STATUS_1_READY_TO_COMPUTE) {\n return rain;\n }\n return null;\n }\n}\n\n@Pipe({name: 'isNotReady'})\nexport class IsNotReady implements PipeTransform {\n transform(rain: RainNode): RainNode {\n if (rain.status < CONSTANTS._RAIN_STATUS_1_READY_TO_COMPUTE) {\n return rain;\n }\n return null;\n }\n}\n\n@Pipe({name: 'waitForValidation'})\nexport class WaitForValidation implements PipeTransform {\n transform(rain: RainNode): RainNode {\n if (rain.status === CONSTANTS._RAIN_STATUS_1_READY_TO_COMPUTE) {\n return rain;\n }\n return null;\n }\n}\n\n@Pipe({name: 'hasGoodQuality'})\nexport class HasGoodQuality implements PipeTransform {\n transform(rain: RainNode): RainNode {\n if (rain.quality > CONSTANTS._INPUT_VALIDITY_NOT_CONFIDENT) {\n return rain;\n }\n return null;\n }\n}\n\n@Pipe({name: 'hasNotGoodQuality'})\nexport class HasNotGoodQuality implements PipeTransform {\n transform(rain: RainNode): RainNode {\n if (rain.quality < CONSTANTS._INPUT_VALIDITY_VALID) {\n return rain;\n }\n return null;\n }\n}\n\n@Pipe({name: 'progressValue'})\nexport class ProgressValue implements PipeTransform {\n transform(rain: RainNode): number {\n if (rain.status < 0) {\n return 0;\n } else if (rain.status > 1) {\n return 1;\n }\n return rain.status;\n }\n}\n\n@Pipe({name: 'progressBuffer'})\nexport class ProgressBuffer implements PipeTransform {\n transform(rain: RainNode): number {\n if (rain.quality < 0) {\n return 0;\n } else if (rain.quality > 1) {\n return 1;\n }\n return rain.quality;\n }\n}\n\n@Pipe({\n name: 'haveNotBeenRed',\n pure: false,\n})\nexport class HaveNotBeenRed implements PipeTransform {\n transform(events: EventNode[]): EventNode[] {\n return events.filter((event) => !event.red);\n }\n}\n","import {Directive, ElementRef, OnDestroy, OnInit} from '@angular/core';\nimport {ProfileService} from './profile.service';\nimport {Router} from '@angular/router';\n\n// Helper function to pause execution for a specified time in milliseconds\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n@Directive({\n selector: 'ion-toolbar',\n})\nexport class ProfileIconDirective implements OnInit, OnDestroy {\n private refreshTimer: any;\n private profileButton: HTMLElement;\n private isConnected: boolean = true;\n\n constructor(\n private el: ElementRef,\n private profileService: ProfileService,\n private router: Router\n ) {}\n\n ngOnInit() {\n // Check if the user is logged in and if the toolbar is not inside a modal\n if (this.profileService.isLoggedIn() && !this.isInsideModal()) {\n // Get the email from the profile service\n const email = this.profileService.getEmail();\n\n // Create the profile button element\n const profileButtons = document.createElement('ion-buttons');\n profileButtons.setAttribute('slot', 'primary');\n\n // Create the button\n const button = document.createElement('ion-button');\n\n // Store references for later use\n this.profileButton = button;\n\n // Create the icon\n const icon = document.createElement('ion-icon');\n icon.setAttribute('name', 'person-circle-outline');\n icon.setAttribute('slot', 'start');\n\n // Create the label\n const label = document.createElement('ion-label');\n label.textContent = email;\n\n // Assemble the button\n button.appendChild(icon);\n button.appendChild(label);\n\n // Add click event listener to the button\n button.addEventListener('click', () => {\n this.navigateToProfile();\n });\n\n // Assemble the buttons container\n profileButtons.appendChild(button);\n\n // Append the buttons to the toolbar\n this.el.nativeElement.appendChild(profileButtons);\n\n // Start the background refresh timer (check every minute)\n this.startBackgroundRefresh();\n }\n }\n\n ngOnDestroy() {\n // Clear the timer when the directive is destroyed\n if (this.refreshTimer) {\n clearInterval(this.refreshTimer);\n this.refreshTimer = null;\n }\n }\n\n navigateToProfile() {\n this.router.navigateByUrl('/profile');\n }\n\n private startBackgroundRefresh() {\n this.refreshTimer = setInterval(() => {\n this.checkAndRefreshConnection();\n }, 20000);\n }\n\n private checkAndRefreshConnection() {\n this.performConnectionRefresh();\n }\n\n private showSkeletonText() {\n if (this.profileButton) {\n this.profileButton.style.opacity = '0.7';\n this.profileButton.style.transition = 'opacity 0.3s ease';\n }\n }\n\n private hideSkeletonText() {\n if (this.profileButton) {\n this.profileButton.style.opacity = '1';\n }\n }\n\n private async performConnectionRefresh() {\n // Show skeleton text and hide button during loading\n this.showSkeletonText();\n\n // Connection successful\n this.isConnected = await this.profileService.isConnected();\n\n if (this.isConnected) {\n // Call the refresh function\n const needsConnectionRefresh = this.profileService.needsConnectionRefresh();\n const isLoggedIn = this.profileService.isLoggedIn();\n if (needsConnectionRefresh || !isLoggedIn) {\n await this.profileService.connectionRefresh();\n }\n await sleep(1000);\n }\n this.updateButtonState();\n\n // Hide skeleton text and show button when loading is complete\n this.hideSkeletonText();\n }\n\n private updateButtonState() {\n if (this.profileButton) {\n if (this.isConnected) {\n // Enable button\n this.profileButton.removeAttribute('disabled');\n this.profileButton.removeAttribute('title');\n } else {\n // Disable button and add tooltip\n this.profileButton.setAttribute('disabled', 'true');\n this.profileButton.setAttribute('title', 'Profile unavailable - No connection');\n }\n }\n }\n\n // Helper method to check if the toolbar is inside a modal\n private isInsideModal(): boolean {\n let parent = this.el.nativeElement.parentElement;\n\n // Traverse up the DOM tree to find if any parent is an ion-modal\n while (parent) {\n if (parent.tagName && parent.tagName.toLowerCase() === 'ion-modal') {\n return true;\n }\n parent = parent.parentElement;\n }\n\n return false;\n }\n}\n","import {NgModule} from '@angular/core';\nimport {\n AreInProgressPipe,\n AreReady,\n AreStopped,\n HasGoodQuality,\n HasNotGoodQuality,\n HaveNotBeenRed,\n IsNotReady,\n IsReady,\n ProgressBuffer,\n ProgressValue,\n WaitForValidation,\n} from './shared.pipe';\n\n@NgModule({\n declarations: [\n AreStopped,\n AreInProgressPipe,\n AreReady,\n IsReady,\n IsNotReady,\n WaitForValidation,\n HasGoodQuality,\n HasNotGoodQuality,\n ProgressValue,\n ProgressBuffer,\n HaveNotBeenRed,\n ],\n exports: [\n AreStopped,\n AreInProgressPipe,\n AreReady,\n IsReady,\n IsNotReady,\n WaitForValidation,\n HasGoodQuality,\n HasNotGoodQuality,\n ProgressValue,\n ProgressBuffer,\n HaveNotBeenRed,\n ],\n})\nexport class PipesModule {}\n","import {CommonModule, NgOptimizedImage, NgStyle} from '@angular/common';\nimport {NgModule, Optional, SkipSelf} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\n\nimport {ProfileService} from './profile.service';\nimport {Storage} from './storage.service';\nimport {RadarService} from './radar.service';\nimport {Cache} from './cache.service';\nimport {ProfileIconDirective} from './profile-icon.directive';\nimport {IonicModule, IonRange} from '@ionic/angular';\nimport {PipesModule} from './pipes.module';\nimport {RaainMapComponent} from './raain-map/raain-map.component';\nimport {RaainCompareComponent} from './raain-compare/raain-compare.component';\nimport {RaainConfigurationComponent} from './raain-configuration/raain-configuration.component';\nimport {RaainDateFocusComponent} from './raain-date-focus/raain-date-focus.component';\nimport {RaainDateDynamicComponent} from './raain-date-dynamic/raain-date-dynamic.component';\nimport {RaainSpeedComponent} from './raain-speed/raain-speed.component';\nimport {RaainCompareStackComponent} from './raain-compare-stack/raain-compare-stack.component';\nimport {RaainGlobeComponent} from './raain-globe/raain-globe.component';\nimport {RaainDetailsComponent} from './raain-details/raain-details.component';\nimport {CumulativeSelectorComponent} from './cumulative-selector/cumulative-selector.component';\n\n@NgModule({\n declarations: [\n RaainMapComponent,\n RaainCompareComponent,\n RaainCompareStackComponent,\n RaainDateFocusComponent,\n RaainDateDynamicComponent,\n RaainConfigurationComponent,\n RaainSpeedComponent,\n RaainGlobeComponent,\n ProfileIconDirective,\n RaainDetailsComponent,\n CumulativeSelectorComponent,\n ],\n imports: [CommonModule, FormsModule, IonicModule, NgOptimizedImage, PipesModule],\n providers: [Storage, RadarService, ProfileService, Cache, IonRange],\n exports: [\n CommonModule,\n NgStyle,\n PipesModule,\n\n RaainMapComponent,\n RaainCompareComponent,\n RaainCompareStackComponent,\n RaainDateFocusComponent,\n RaainDateDynamicComponent,\n RaainConfigurationComponent,\n RaainSpeedComponent,\n RaainGlobeComponent,\n ProfileIconDirective,\n RaainDetailsComponent,\n CumulativeSelectorComponent,\n ],\n})\nexport class SharedModule {\n constructor(@Optional() @SkipSelf() parentModule?: SharedModule) {\n if (parentModule) {\n // throw new Error(\n console.warn('SharedModule is already loaded. Import it in the AppModule only');\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.Storage","i1","i2","i3.RaainCompareComponent","sleep","i3","i4","i1.ProfileService","i5.RaainMapComponent","i6.RaainCompareStackComponent","i7.RaainDateFocusComponent","i8.RaainDateDynamicComponent","i9.CumulativeSelectorComponent"],"mappings":"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"}
|