raain-app 1.6.12 → 1.6.13

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.
@@ -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/raain-details/raain-details.component.ts","../../src/core/shared/raain-details/raain-details.component.html","../../src/core/shared/cache.service.ts","../../src/core/shared/fidj-storage.model.ts","../../src/core/shared/profile.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 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 showCumulative = false;\n @Input()\n public currentHeight: number;\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\n protected currentFrameContainer: FrameContainer;\n protected cartesianTools: CartesianTools;\n @ViewChild('primaryMap')\n protected mapDivRef: ElementRef;\n\n @ViewChild('canvasScale')\n protected scaleCanvasRef: ElementRef;\n\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 ) {\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 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.showCumulative ? 'mm' : 'mm/h');\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 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);\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 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 = `${average} (${Math.round(sumOfPixels)}mm for ${Math.round(this.pixelsCount)} pixels)`;\n } else {\n this.sumResult = 'NA';\n }\n this.changedSum.emit(this.sumResult);\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 periodDurationInHours =\n this.storage.get('raain-periodDurationInHours', 1) * 60 * 60 * 1000;\n this.cumulativeDateFrom.setTime(this.cumulativeDateFrom.getTime() - periodDurationInHours);\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 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} &nbsp; &nbsp; Longitude: ${lng} &nbsp; &nbsp;\n // Value: [${valueLat} ${valueLng} | ${valueLat2} ${valueLng2}] ${value}`;\n this.mcText = `Latitude: ${lat} &nbsp; &nbsp; Longitude: ${lng} &nbsp; &nbsp; Value: ${value}`;\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.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-end\">\n <ion-col id=\"map-buttons\" size-xs=\"3\">\n <div>\n <ion-button (click)=\"previous()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-back\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <ion-button (click)=\"stop()\" [hidden]=\"!autoplay\" color=\"medium\" fill=\"outline\"\n shape=\"round\">\n <ion-icon name=\"stop\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <ion-button (click)=\"next()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-forward\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </div>\n <div *ngIf=\"!timeframeContainers?.containers?.length\">&nbsp;</div>\n </ion-col>\n\n <ion-col *ngIf=\"showCumulative\" class=\"ion-hide-md-down\" size-xs=\"4\">\n <ion-item *ngIf=\"timeframeContainers?.containers?.length\">\n <ion-button color=\"medium\" fill=\"clear\" style=\"font-size: medium\">\n From {{ cumulativeDateFrom | date:'yyyy-MM-dd HH:mm' }} to\n </ion-button>\n </ion-item>\n <ion-item *ngIf=\"!timeframeContainers?.containers?.length\">&nbsp;</ion-item>\n </ion-col>\n\n <ion-col class=\"ion-text-start\" id=\"map-date\" size-xs=\"5\">\n <ion-item>\n <div *ngIf=\"timeframeContainers?.containers?.length\" slot=\"start\">\n <ion-select (ionDismiss)=\"showTimeframe()\" [(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 </div>\n <div *ngIf=\"!timeframeContainers?.containers?.length\">&nbsp;</div>\n <ion-button *ngIf=\"showCumulative\" color=\"medium\" fill=\"clear\" slot=\"end\">\n <ion-toggle (ionChange)=\"changeShowSpeedMarkers()\" [(ngModel)]=\"showSpeedMarkers\"\n [checked]=\"showSpeedMarkers\"\n color=\"medium\"></ion-toggle>\n </ion-button>\n </ion-item>\n </ion-col>\n\n <ion-col *ngIf=\"!showCumulative\" class=\"ion-hide-md-down\" size-xs=\"4\">\n <ion-range (ionChange)=\"changeAlpha()\" [(ngModel)]=\"alpha\" [max]=\"1\" [min]=\"0.2\" [snaps]=\"true\" [step]=\"0.2\"\n [ticks]=\"true\"\n color=\"medium\"></ion-range>\n <br>\n <ion-buttons>\n <ion-button color=\"medium\" fill=\"clear\">\n Gauges\n <ion-toggle (ionChange)=\"changeShowMarkers()\" [(ngModel)]=\"showMarkers\" [checked]=\"showMarkers\"\n color=\"medium\"></ion-toggle>\n </ion-button>\n <ion-button color=\"medium\" fill=\"clear\">\n Speeds\n <ion-toggle (ionChange)=\"changeShowSpeedMarkers()\" [(ngModel)]=\"showSpeedMarkers\"\n [checked]=\"showSpeedMarkers\"\n color=\"medium\"></ion-toggle>\n </ion-button>\n </ion-buttons>\n </ion-col>\n\n <!-- <ion-col class=\"ion-hide-md-down\" size-xs=\"2\">\n <ion-button color=\"medium\" fill=\"clear\">\n Cumulative\n <ion-toggle (ionChange)=\"changeCumulative()\" [(ngModel)]=\"showCumulative\" [checked]=\"showCumulative\"\n color=\"medium\"></ion-toggle>\n </ion-button>\n </ion-col>-->\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>\n <!--<ion-col class=\"ion-hide-sm-down\" size-sm=\"3\">\n <ion-button disabled=\"true\" fill=\"clear\"><small>{{ dateToShow?.toISOString() }}</small></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 <!--<ion-col size-sm=\"3\" size-xs=\"12\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ sumResult }}</ion-button>\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 @ViewChild('canvasElement')\n protected canvasElement: ElementRef;\n\n private configurationElement: ConfigurationElement;\n private onDrag;\n private onSizeChanged;\n private created;\n\n constructor(private ngZone: NgZone) {\n this.onSizeChanged = () => {};\n this.onDrag = (e: any) => {\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 );\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 );\n }\n\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\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 this.configurationElement?.chart?.destroy();\n this.created = false;\n }\n\n private async change(changes: SimpleChanges) {\n // console.log('changed', changes);\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>\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\"> &nbsp;</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","<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 </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>\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 </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</div>\n\n<!-- TODO Speed average used\n<ion-col>\n Speed average used : {{ compareManager?.compareSpeed?.pixelsPerPeriod ?? 0 / 12 }} m/s\n with {{ compareManager?.compareSpeed?.angleInDegrees }} °\n</ion-col>\n-->\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 LatLng,\n PositionValue,\n QualityPoint,\n RainComputationQuality,\n RainNode,\n RainSpeed,\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 // rainComputationQualityId?: 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}\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 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 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.rainComputationQualitiesPerDate = {};\n\n this.selectedGauge = null;\n this.selectedGaugeInPoints = null;\n this.cleanCompareQuality('no compare yet');\n }\n\n async refreshSpeeds(frameSet: FrameSet) {\n const rainSpeedMap = await this.profileService.getRainSpeedMap(\n this.rainNode,\n frameSet.rainComputationId\n );\n\n if (rainSpeedMap?.rainSpeeds) {\n this.speeds = rainSpeedMap.rainSpeeds.map((rainSpeed: RainSpeed) => {\n const center = rainSpeed.getCenter();\n const targetPosition = this.calculateTargetPosition(rainSpeed, center);\n\n return new MapLatLng(\n targetPosition.lat,\n targetPosition.lng,\n rainSpeed.azimuthInDegrees,\n `az${rainSpeed.azimuthInDegrees} sp${rainSpeed.speedInMetersPerSec} trust${rainSpeed.trustRatio}`,\n `az${rainSpeed.azimuthInDegrees} sp${rainSpeed.speedInMetersPerSec} trust${rainSpeed.trustRatio}`,\n rainSpeed.speedInMetersPerSec\n );\n });\n } else {\n this.speeds = [];\n }\n }\n\n async refreshCompareQuality(frameSet: FrameSet) {\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 const uiCompares: IUICompare[] = comparePerDate.compareTimeline\n .map((c) => {\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(c.maxValue * 1.2, c.maxValue * 1.2),\n comparePointsHistory: c.qualityPointsLegacy,\n remarks: c.remarks,\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 withCompareDuplicate: boolean\n ) {\n try {\n await this.fetchRainComputationQualities(targetsOrdered);\n\n await this.buildComparesTimeline(targetsOrdered, 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 = this.buildCompares.compareCumulative.maxValue * 1.2;\n this.globalComparePoints = this.buildCompares.compareCumulative.qualityPoints.map(\n (qp) =>\n new XYType(qp.getGaugeValue(), qp.getRainValue(), 2, qp.gaugeLabel, qp.gaugeId)\n );\n this.globalComparePointsMax = new XYType(maxValue, maxValue);\n } catch (e) {\n console.warn(e);\n }\n }\n\n async setGaugesInMap() {\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 const rainNodeGaugeIds = this.rainNode.getLinks(GaugeNode.TYPE).map((l) => l.getId());\n\n const visibleGauges = gaugesToFilter.filter((g) => rainNodeGaugeIds.indexOf(g.id) > -1);\n console.log('visibleGauges:', visibleGauges);\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 protected async buildComparesTimeline(\n targetsOrdered: ICompareTarget[],\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.slice(1, -1);\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(targetsOrdered: ICompareTarget[]) {\n for (const target of targetsOrdered) {\n if (\n !this.rainComputationQualitiesPerDate[target.date.toISOString()]\n // && target.rainComputationQualityId\n ) {\n try {\n let rainComputationQuality: RainComputationQuality;\n\n if (target.rainComputationCumulativeId) {\n rainComputationQuality =\n await this.profileService.getRainCumulativeCompareByDate(\n this.rainNode.id,\n target.rainComputationCumulativeId,\n target.date\n );\n } else if (target.rainComputationId) {\n rainComputationQuality = await this.profileService.getRainCompareByDate(\n this.rainNode.id,\n target.rainComputationId,\n target.date\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 private calculateTargetPosition(\n rainSpeed: RainSpeed,\n center: LatLng\n ): {lat: number; lng: number} {\n return rainSpeed.getCenter();\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} 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 lastError: string = '';\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 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 // rainComputationQualityId: this.getRainComputationQualityTarget(current),\n };\n\n const timeframeContainers = await this.refreshMapTimeframeContainers(target);\n\n this.onFetchDone(timeframeContainers)\n .then(() => this.refreshCompareQuality(current))\n .then((ignored) => {}); // NO Sync\n\n this.timelineSelectedFrameSet = current;\n }\n\n getTimelineFrameSet(): FrameSet[] {\n return this.timeframesFromRadars;\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 * 5) / 60, 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 beginExtended.setMinutes(beginExtended.getMinutes() - 7);\n endExtended.setMinutes(endExtended.getMinutes() + 7);\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 );\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 from period.begin to period.end with timeStepInMinutes\n const allExpectedDates: Date[] = [];\n const currentDate = new Date(this.period.begin);\n while (currentDate.getTime() <= this.period.end.getTime()) {\n allExpectedDates.push(new Date(currentDate));\n currentDate.setMinutes(currentDate.getMinutes() + this.timeStepInMinutes);\n }\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\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: FrameSet[] = [];\n for (const frameSet of this.timeframesFromRadarsExtended) {\n const target = JSON.parse(JSON.stringify(frameSet));\n target.date = new Date(target.date);\n // target.rainComputationQualityId = this.getRainComputationQualityTarget(frameSet);\n targets.push(target);\n }\n await this.compareManager.refreshGlobalCompareQuality(targets, !this.removeDuplicate);\n } catch (e) {\n console.error('refreshGlobalCompareReport', e);\n }\n }\n\n protected async refreshMapTimeframeContainers(target: {\n date: Date;\n rainComputationId: string;\n rainComputationCumulativeId: string;\n withGauge: boolean;\n cumulativeHours: number;\n }) {\n if (!target?.rainComputationId && !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 rainNodeCartesianMap =\n await this.profileService.getRainComputationCumulativeCumulativesMapById(\n rainNode.id,\n target.rainComputationCumulativeId,\n target.cumulativeHours\n );\n } else if (target.cumulativeHours && target.rainComputationId) {\n rainNodeCartesianMap =\n await this.profileService.getRainComputationCumulativesMapById(\n rainNode.id,\n target.rainComputationId,\n target.cumulativeHours\n );\n } else if (target.rainComputationCumulativeId) {\n rainNodeCartesianMap =\n await this.profileService.getRainComputationCumulativeCartesianMapById(\n rainNode.id,\n target.rainComputationCumulativeId\n );\n } else {\n rainNodeCartesianMap = await this.profileService.getRainComputationCartesianMapById(\n rainNode.id,\n target.rainComputationId\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 computations for id: ${target.rainComputationId} ${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);\n await this.compareManager.setGaugesInCompare();\n await this.compareManager.refreshSpeeds(frameSet);\n }\n\n protected async getValues(target: FrameSet): Promise<CartesianMapValue[]> {\n if (!target?.rainComputationId && !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 let rainComputationMap: RainComputationMap;\n\n if (target.rainComputationId) {\n rainComputationMap = await this.profileService.getRainComputationCartesianMapById(\n this.rainNode.id,\n target.rainComputationId\n );\n } else if (target.rainComputationCumulativeId) {\n rainComputationMap =\n await this.profileService.getRainComputationCumulativeCartesianMapById(\n this.rainNode.id,\n target.rainComputationCumulativeId\n );\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 computations for id: ${target.rainComputationId} ${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 {Component, Input, OnChanges, OnDestroy, SimpleChanges} from '@angular/core';\nimport {ProfileService} from '../profile.service';\nimport {CartesianMeasureValue, RainNode, TeamNode} from 'raain-model';\nimport {DateRange, MapLatLng, TimeframeContainers} from 'raain-ui';\nimport {CompareManager, FrameSet, mapDateRangeToString, RefreshManager} from '../tools';\nimport {XYType} from '../xytype';\nimport {RadarService} from '../radar.service';\nimport {Storage} from '../storage.service';\n\n@Component({\n selector: 'raain-details',\n templateUrl: 'raain-details.component.html',\n styleUrls: ['raain-details.component.scss'],\n})\nexport class RaainDetailsComponent implements OnDestroy, OnChanges {\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 toggleCumulative: boolean;\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 refreshInProgress: boolean;\n public sumDetails: string;\n public isAdmin: boolean;\n protected readonly DateRange = DateRange;\n\n constructor(protected storage: Storage) {}\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 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: '% Quality',\n // style: 'line',\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((c) => {\n return {\n date: RaainDetailsComponent.DateUTC(c.name),\n value: Math.min(100, c.x),\n };\n }),\n },\n {\n label: '% Images',\n style: 'bar',\n values: hourCounts.percentImages.map((c) => {\n return {\n date: RaainDetailsComponent.DateUTC(c.name),\n value: Math.min(100, c.x),\n };\n }),\n },\n {\n label: 'Rainy Sum',\n style: 'line',\n values: hourCounts.rainySum.map((c) => {\n return {\n date: RaainDetailsComponent.DateUTC(c.name),\n value: Math.min(100, c.x),\n };\n }),\n },\n ];\n } else {\n // console.log('fetchData TODO:', focusDate.toISOString(), range);\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((c) => {\n return {\n date: RaainDetailsComponent.DateUTC(c.name),\n value: Math.min(100, c.x),\n };\n }),\n },\n {\n label: '% Images',\n style: 'bar',\n values: counts.percentImages.map((c) => {\n return {\n date: RaainDetailsComponent.DateUTC(c.name),\n value: Math.min(100, c.x),\n };\n }),\n },\n // {\n // label: '% Quality',\n // style: 'line',\n // values: counts.percentQ.map((c) => {\n // return {\n // date: RaainDetailsComponent.DateUTC(c.name),\n // value: Math.min(100, c.x),\n // };\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 = newValue;\n this.storage.set('raain-periodBegin', this.periodBegin);\n\n await this.onPeriodDurationChange(event);\n }\n\n async onPeriodDurationChange(_event: Event) {\n const durationInHour = parseFloat(this.periodDurationAsString);\n this.periodEnd = new Date(this.periodBegin.getTime() + durationInHour * (60 * 60000));\n this.periodEndAsString = this.periodEnd.toISOString();\n this.storage.set('raain-periodEnd', this.periodEnd);\n this.storage.set('raain-periodDurationInHours', durationInHour);\n this.refreshManager.period = {begin: this.periodBegin, end: this.periodEnd};\n }\n\n async onDateChangeInCount(dateChanged: Date) {\n // console.log('onDateChangeInCount', dateChanged);\n this.periodBeginAsString =\n dateChanged.toISOString().substring(0, 11) +\n dateChanged.toLocaleTimeString().substring(0, 5);\n this.periodDurationAsString = '1';\n await this.onPeriodBeginChange(null);\n await this.refreshManager.refresh(false, true);\n }\n\n async onDateChangeInMap(dateShown: Date) {\n // console.log('onDateChangeInMap', dateShown);\n this.dateShown = dateShown;\n const cumulativeHours: number = !this.toggleCumulative\n ? 0\n : parseFloat(this.periodDurationAsString);\n await this.refreshManager.fetch(this.dateShown, this.toggleGaugeMeasures, cumulativeHours);\n this.currentTimeframeTarget = this.refreshManager.getTimelineSelectedFrameSet();\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 dayBegin = new Date(this.periodBegin.toISOString().substring(0, 10));\n const dayEnd = new Date(dayBegin.getTime() + 24 * 60 * 60 * 1000 - 1);\n const gaugeMeasures = await this.profileService.getGaugeMeasures(\n gaugeSelected.id,\n dayBegin,\n dayEnd\n );\n const gaugeValues: {date: Date; value: number}[] = gaugeMeasures.map((gm) => {\n const cartesianMeasureValue = new CartesianMeasureValue(gm.values[0] as any);\n const value = cartesianMeasureValue.getCartesianValues()[0].value;\n return {date: gm.date, value};\n });\n this.gaugeSelectedPoints = [\n {\n label: gaugeSelected.name,\n style: 'bar',\n values: gaugeValues,\n },\n ];\n // console.log('this.gaugeSelectedPoints:', this.gaugeSelectedPoints);\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 onChangeDetectionTest(rainNode: RainNode) {\n // TODO console.log(TEST_DETECTION++, 'onChangeDetectionTest');\n return '';\n }\n\n async refreshMap() {\n this.gaugeSelectedPoints = [];\n // this.qualityConf.trustfulGaugeIds = this.qualityConf.trustfulGaugeIds?.length > 0 ?\n // this.qualityConf.trustfulGaugeIds : this.gaugesToFilter.filter(g => g.isIn).map(g => g.id);\n this.borders = [\n // new MapLatLng(rainNode.latitude - 250 * 0.008, rainNode.longitude),\n // new MapLatLng(rainNode.latitude, rainNode.longitude - 250 * 0.013),\n // new MapLatLng(rainNode.latitude, rainNode.longitude + 250 * 0.013),\n // new MapLatLng(rainNode.latitude + 250 * 0.008, rainNode.longitude),\n ];\n\n this.compareManager.cleanAll();\n await this.compareManager.setGaugesInMap();\n this.refreshManager.refresh(false, this.toggleAdmin).then((_ignored) => {});\n }\n\n async setPeriodOfNow() {\n // should look like: \"2024-08-26T12:13\"\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 this.refreshManager.refresh(false, true);\n }\n\n getPercentOfImages() {\n if (!this.countsPeriod.percentImages?.length) {\n return 0;\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 return Math.round(summed / duringPeriod.length);\n }\n\n getPercentOfComputations() {\n const timeline = this.refreshManager.getTimelineFrameSet();\n if (!timeline?.length) {\n return 0;\n }\n\n const timelineWithComputation = timeline.filter((a) => !!a.rainComputationId);\n const ratio = timelineWithComputation.length / timeline.length;\n return Math.round(ratio * 100);\n }\n\n private cleanAll() {\n this.borders = [];\n\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\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 this.periodDurationAsString =\n '' + (this.periodEnd.getTime() - this.periodBegin.getTime()) / (60 * 60000);\n\n this.dateShown = this.periodBegin;\n\n this.refreshInProgress = false;\n\n this.compareManager?.cleanAll();\n this.refreshManager?.cleanAll();\n }\n\n private async init() {\n this.cleanAll();\n await this.initRain();\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 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 if (this.periodBegin && this.periodEnd) {\n this.refreshManager.period = {begin: this.periodBegin, end: this.periodEnd};\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 }\n\n private async onRefreshDone(timeframeDates: Date[]) {\n this.timeframeDates = timeframeDates;\n this.refreshInProgress = false;\n }\n\n private async onFetchDone(timeframeContainers?: TimeframeContainers) {\n if (timeframeContainers) {\n this.timeframeContainers = timeframeContainers;\n }\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 <ion-button (click)=\"setPeriodOfNow()\" class=\"now-button\" fill=\"outline\">\n <ion-icon name=\"time-outline\" slot=\"start\"></ion-icon>\n Now\n </ion-button>\n\n <div class=\"period-start ion-hide-md-down\">\n <ion-label>Start:</ion-label>\n <input (change)=\"onPeriodBeginChange($event)\"\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-label>Duration:</ion-label>\n <ion-select (ionDismiss)=\"onPeriodDurationChange($event)\"\n [(ngModel)]=\"periodDurationAsString\"\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 *ngIf=\"isAdmin\" value=\"24\">24 hours</ion-select-option>\n </ion-select>\n </div>\n\n <div id=\"all-dates\" slot=\"end\">\n <ion-label class=\"toggle-label\">All dates</ion-label>\n <ion-toggle (ionChange)=\"onEnableCountHistoryTab(rainNode)\"\n [(ngModel)]=\"toggleHistory\"\n [checked]=\"toggleHistory\">\n </ion-toggle>\n </div>\n </div>\n\n <!-- Hidden label for change detection -->\n <div class=\"hidden-label\">{{ onChangeDetectionTest(rainNode) }}</div>\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 section -->\n <ion-card class=\"map-card\">\n <ion-card-content class=\"map-content\">\n <ion-grid>\n <ion-row id=\"progressAndRefresh\">\n <ion-col size=\"12\" size-md=\"6\">\n <!-- left content (if any) -->\n </ion-col>\n <ion-col class=\"ion-text-right\" size=\"12\" size-md=\"6\">\n <ion-label class=\"ion-margin-end\">\n <span *ngIf=\"getPercentOfComputations()\">\n {{ getPercentOfComputations() }}% Images\n <i *ngIf=\"countsPeriod.progress\" class=\"progress-indicator\">\n In Progress: {{ countsPeriod.progress }}...\n </i>\n </span>\n <span *ngIf=\"!getPercentOfComputations()\">\n No image available\n </span>\n <span *ngIf=\"refreshManager.lastError\">\n <b>Errors: {{ refreshManager.lastError }}</b>\n </span>\n </ion-label>\n\n <ion-button (click)=\"refreshMap()\" [disabled]=\"refreshInProgress\" class=\"refresh-button\">\n Refresh Map\n </ion-button>\n </ion-col>\n\n <!-- Progress indicator -->\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-row *ngIf=\"toggleMap && getPercentOfImages()\">\n <!-- Map component -->\n <ion-col class=\"map-column\" size-lg=\"7\">\n <div class=\"map-container\">\n <raain-map\n (changedDate)=\"onDateChangeInMap($event)\"\n (changedSum)=\"onSumChangeInMap($event)\"\n (selectedMarker)=\"onGaugeSelectInMap($event)\"\n [coordinates]=\"coordinates\"\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 [showCumulative]=\"toggleCumulative\"\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 </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 class=\"data-column\" size-lg=\"5\">\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</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 {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 EventNode,\n GaugeMeasure,\n GaugeNode,\n LatLng,\n RadarNode,\n RainComputation,\n RainComputationMap,\n RainComputationQuality,\n RainNode,\n RainSpeedMap,\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 try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'notifications',\n verb: 'POST',\n defaultKeyUrl: this.defaultUrlForAPI + '/notifications',\n data: {\n rain: rainId,\n message,\n },\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 const args = '?rain=' + rainId;\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'notifications',\n verb: 'GET',\n relativePath: args,\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 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 try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'teams_all',\n verb: 'GET',\n defaultKeyUrl: this.defaultUrlForAPI + '/teams_all',\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({\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(teamId: string): Promise<Array<RadarNode>> {\n const radars = [];\n const url = this.defaultUrlForAPI + '/radars' + (teamId ? '?teamId=' + teamId : '');\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'radars',\n verb: 'GET',\n defaultKeyUrl: url,\n });\n for (const r of resp.data.radars) {\n const radar = new RadarNode(r);\n radars.push(radar);\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({\n key: 'radars',\n verb: 'GET',\n relativePath: id,\n defaultKeyUrl: this.defaultUrlForAPI + '/radars',\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 = {\n name: radarNode.name,\n };\n\n try {\n const resp = await this.fidjService.sendOnEndpoint({\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 resp = await this.fidjService.sendOnEndpoint({\n key: 'radars',\n verb: 'GET',\n defaultKeyUrl: this.defaultUrlForAPI + '/radars',\n });\n const lonelyRadars: RadarNode[] = [];\n const radars = resp.data.radars;\n radars.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 ): Promise<RainNode> {\n try {\n let queryPath =\n '' +\n rainId +\n '?format=timeframeCumulative&provider=' +\n provider +\n '&timeStepInMinutes=' +\n timeStepInMinutes;\n if (begin) {\n queryPath += '&begin=' + begin.toISOString();\n }\n if (end) {\n queryPath += '&end=' + end.toISOString();\n }\n if (forced) {\n queryPath += '&forced=true';\n queryPath += '&withConfig=true';\n // queryPath += '&bypassCache=' + new Date().getTime();\n }\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n verb: 'GET',\n relativePath: queryPath,\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(teamId: string): Promise<Array<RainNode>> {\n const rains = [];\n const url = this.defaultUrlForAPI + '/rains' + (teamId ? '?teamId=' + teamId : '');\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n verb: 'GET',\n defaultKeyUrl: url,\n });\n for (const rain of resp.data.rains) {\n rains.push(new RainNode(rain));\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({\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 queueRunning: number;\n }> {\n try {\n const args = `?range=${options.range}&begin=${options.periodBegin.toISOString()}`;\n\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n relativePath: rainId + '/counts' + args,\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\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 });\n\n return {\n percentImages,\n percentRainy,\n percentQ,\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 rainyCount: XYType[];\n rainySum: XYType[];\n queueRunning: number;\n }> {\n try {\n const args = `?range=hour&begin=${options.periodBegin.toISOString()}`;\n\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n relativePath: rainId + '/counts' + args,\n verb: 'GET',\n defaultKeyUrl: this.defaultUrlForAPI + '/rains/',\n });\n\n const counts = resp.data.counts.result;\n const percentImages: 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 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 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 getRainComputationCartesianMapById(\n rainId: string,\n rainComputationId: string\n ): Promise<RainComputationMap> {\n try {\n const queryPath =\n '' + rainId + '/computations/' + rainComputationId + '?format=cartesian-map';\n const response = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n verb: 'GET',\n relativePath: queryPath,\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 getRainComputationCumulativesMapById(\n rainId: string,\n rainComputationId: string,\n cumulativeHours: number\n ): Promise<RainComputationMap> {\n const queryPath = `${rainId}/computations/${rainComputationId}/cumulative/${cumulativeHours}`;\n try {\n const response = await this.fidjService.sendOnEndpoint({\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';\n return rainComputationMap;\n } catch (e) {\n await this.checkError(e);\n }\n return null;\n }\n\n async getRainComputationCumulativeCartesianMapById(\n rainId: string,\n rainComputationCumulativeId: string\n ): Promise<RainComputationMap> {\n const queryPath = `${rainId}/cumulative/${rainComputationCumulativeId}?format=cartesian-map`;\n\n try {\n const response = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n verb: 'GET',\n relativePath: queryPath,\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}/cumulative/${rainComputationCumulativeId}/cumulative/${cumulativeHours}`;\n\n try {\n const response = await this.fidjService.sendOnEndpoint({\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 getRainCompares(\n rainId: string,\n rainComputationId: string\n ): Promise<{id: string; version: string}[]> {\n const queryPath = '' + rainId + '/computations/' + rainComputationId;\n const response = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n verb: 'GET',\n relativePath: queryPath,\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n // timeout: 200000,\n });\n\n const rainComputation = new RainComputation(response.data);\n const links = rainComputation.getLinks();\n const rainComputationQualities = [];\n for (const link of links) {\n if (link.rel === RainComputationQuality.TYPE) {\n const id = link.getId();\n const dateLength = new Date().toISOString().length;\n const version = link.href.substring(\n 4 + RainComputationQuality.TYPE.length + 1 + dateLength + 1,\n link.href.indexOf('/' + id)\n );\n rainComputationQualities.push({id, version});\n }\n }\n return rainComputationQualities;\n }\n\n async getRainCompareByDate(\n rainId: string,\n rainComputationId: string,\n date: Date\n ): Promise<RainComputationQuality> {\n const queryPath =\n '' +\n rainId +\n '/computations/' +\n rainComputationId +\n '/compares?date=' +\n date.toISOString();\n\n try {\n const response = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n verb: 'GET',\n relativePath: queryPath,\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n });\n\n const rainComputationQuality = new RainComputationQuality(response.data.qualities[0]);\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 async getRainCumulativeCompareByDate(\n rainId: string,\n rainComputationCumulativeId: string,\n date: Date\n ): Promise<RainComputationQuality> {\n const queryPath =\n '' +\n rainId +\n '/cumulative/' +\n rainComputationCumulativeId +\n '/compares?date=' +\n date.toISOString();\n\n try {\n const response = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n verb: 'GET',\n relativePath: queryPath,\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n });\n\n const rainComputationQuality = new RainComputationQuality(response.data.qualities[0]);\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 async getRainProgress(rainId: string): Promise<number> {\n try {\n const queryPath = '' + rainId + '/progress';\n const response = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n verb: 'GET',\n relativePath: queryPath,\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n // timeout: 200000,\n });\n\n return response.data.inProgress;\n } catch (e) {\n await this.checkError(e);\n }\n return 0;\n }\n\n // === Gauges ===\n\n async getGauge(gaugeId: string): Promise<GaugeNode> {\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'gauges',\n verb: 'GET',\n relativePath: gaugeId,\n defaultKeyUrl: this.defaultUrlForAPI + '/gauges',\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 let queryPath = '';\n if (this.asTeamId) {\n queryPath += '?teamId=' + this.asTeamId;\n }\n if (queryPath) {\n queryPath += '&';\n } else {\n queryPath += '?';\n }\n queryPath += `rainId=${rainId}&aroundLatLng=${aroundLatLng.lat},${aroundLatLng.lng}`;\n\n const gauges = [];\n try {\n for (let count = 1; count <= pageCount; count++) {\n const paginatedQueryPath = queryPath + `&page=${count}`;\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'gauges',\n verb: 'GET',\n relativePath: paginatedQueryPath,\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 queryPath =\n '' + gaugeId + '/measures?begin=' + begin.toISOString() + '&end=' + end.toISOString();\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'gauges',\n verb: 'GET',\n relativePath: queryPath,\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 getRainSpeedMap(rainNode: RainNode, rainComputationId: string): Promise<RainSpeedMap> {\n if (!rainComputationId) {\n return null;\n }\n\n try {\n const response = await this.fidjService.sendOnEndpoint({\n verb: 'GET',\n defaultKeyUrl:\n this.defaultUrlForAPI +\n `/rains/${rainNode.id}/computations/${rainComputationId}/speeds`,\n });\n\n return new RainSpeedMap(response.data.rainSpeedMap);\n } catch (e) {\n console.error('getRainSpeedMap error:', e);\n }\n }\n\n async getProviders(\n rainId: string\n ): Promise<{providers: string[]; timeStepInMinutes: number[]}> {\n try {\n const response = await this.fidjService.sendOnEndpoint({\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 || [5, 10, 15, 30, 60],\n };\n } catch (e) {\n console.error('getProviders error:', e);\n // Return fallback values if API call fails\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 {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\n // TODO rainNode.latLngRectsAsJSON\n // pmv.setCenter(rain);\n\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 const rainId = rainNode?.id;\n\n // dates and radar measures\n for (const link of links) {\n const measureIndex = link.href.indexOf('measures/');\n if (measureIndex >= 0) {\n const start = measureIndex + 'measures/'.length;\n const str1 = link.href.substring(start);\n if (str1) {\n const end = str1.indexOf('/');\n const dateStr = str1.substring(0, end);\n const idStr = str1.substring(end + 1);\n\n const frameDate = new Date(dateStr);\n const existingTargets = timeline.filter(\n (t) => t.date.getTime() === frameDate.getTime()\n );\n if (existingTargets.length) {\n existingTargets[0].radarMeasureIds.push(idStr);\n } else {\n timeline.push(new FrameSet(frameDate, [idStr]));\n }\n }\n }\n }\n\n // computation-cumulatives\n for (const link of links) {\n const measureIndex = link.href.indexOf('cumulatives/');\n if (measureIndex >= 0) {\n const start = measureIndex + '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 // rain computations\n for (const link of links) {\n const computationIndex = link.href.indexOf('computations/');\n if (computationIndex >= 0) {\n const start = computationIndex + 13;\n const str1 = link.href.substring(start);\n if (str1) {\n const splitted = str1.split('/');\n const date = new Date(splitted[0]);\n const version = splitted[1];\n const rainComputationId = splitted[2];\n const existingTargets = timeline.filter(\n (t) => t.date.getTime() === date.getTime()\n );\n for (const target of existingTargets) {\n target.rainComputationId = rainComputationId;\n target.rainComputationVersion = version;\n target.rainComputationQualities = await this.getBuilds(\n rainId,\n rainComputationId\n );\n }\n }\n }\n }\n\n return timeline;\n }\n\n async getBuilds(\n rainId: string,\n rainComputationId: string\n ): Promise<{id: string; version: string}[]> {\n return await this.profileService.getRainCompares(rainId, rainComputationId);\n }\n}\n","// TODO remove constants but preferred progress indicator [0 to 1]\nexport const CONSTANTS = {\n _RAIN_STATUS_0_NOT_STARTED: 0,\n _RAIN_STATUS_0_WAIT_FOR_ECHOES: 0.1,\n _RAIN_STATUS_0_WAIT_FOR_INPUT: 0.2,\n _RAIN_STATUS_0_WAIT_FOR_INTERNAL_VALIDATION: 0.3,\n _RAIN_STATUS_0_READY_TO_BUILD: 0.4,\n _RAIN_STATUS_1_BUILDING: 0.5,\n _RAIN_STATUS_1_READY_TO_COMPUTE: 0.6,\n\n _RAIN_COMPUTATION_IS_READY: 0,\n _RAIN_COMPUTATION_IN_PROGRESS: 0.5,\n _RAIN_COMPUTATION_DONE: 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 _VERIFY_STATUS_FIND_RADARS: 0.3,\n _VERIFY_STATUS_FIND_SIMILAR: 0.6,\n _VERIFY_STATUS_FIND_GAUGES: 0.7,\n\n _COMPUTATION_STATUS_UNKNOWN: 0,\n _COMPUTATION_STATUS_IN_PROGRESS: 0.4,\n _COMPUTATION_STATUS_FINISHED: 1,\n};\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {EventNode, RainNode} from 'raain-model';\nimport {CONSTANTS} from './shared.const';\nimport {FrameSet} from './tools';\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({name: 'timeframeComputationProgress'})\nexport class TimeframeComputationProgress implements PipeTransform {\n transform(frameSets: FrameSet[]): number {\n let progress = 0;\n if (!frameSets || frameSets.length === 0) {\n return 1;\n }\n\n for (const frameset of frameSets) {\n if (frameset.radarMeasureIds.length && frameset.rainComputationId) {\n progress++;\n }\n }\n\n return progress / frameSets.length;\n }\n}\n\n@Pipe({name: 'timeframeQualityProgress'})\nexport class TimeframeQualityProgress implements PipeTransform {\n transform(frameSets: FrameSet[]): number {\n let progress = 0;\n if (!frameSets || frameSets.length === 0) {\n return 1;\n }\n\n for (const frameset of frameSets) {\n const qualities = frameset.rainComputationQualities\n ? frameset.rainComputationQualities\n : [];\n const atLeastOneIsNotOutdated = qualities.filter(\n (q) => q.version.indexOf('outdated') < 0\n );\n if (\n frameset.radarMeasureIds.length &&\n frameset.rainComputationId &&\n atLeastOneIsNotOutdated.length\n ) {\n progress++;\n }\n }\n\n return progress / frameSets.length;\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 skeletonText: 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 skeleton text element (hidden initially)\n const skeleton = document.createElement('ion-skeleton-text');\n skeleton.setAttribute('animated', 'true');\n skeleton.style.width = '100px';\n skeleton.style.height = '20px';\n skeleton.style.borderRadius = '4px';\n skeleton.style.margin = '8px 16px';\n skeleton.style.display = 'none';\n\n // Store reference to the skeleton text\n this.skeletonText = skeleton;\n\n // Add the skeleton text to the buttons container\n profileButtons.appendChild(skeleton);\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.skeletonText && this.profileButton) {\n this.profileButton.style.display = 'none';\n this.skeletonText.style.display = 'block';\n }\n }\n\n private hideSkeletonText() {\n if (this.skeletonText && this.profileButton) {\n this.profileButton.style.display = 'flex';\n this.skeletonText.style.display = 'none';\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 if (this.profileService.needsConnectionRefresh()) {\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 TimeframeComputationProgress,\n TimeframeQualityProgress,\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 TimeframeComputationProgress,\n TimeframeQualityProgress,\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 TimeframeComputationProgress,\n TimeframeQualityProgress,\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';\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 ],\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 ],\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","i2","i1","i3.RaainCompareComponent","sleep","i5.RaainMapComponent","i6.RaainCompareStackComponent","i7.RaainDateFocusComponent","i8.RaainDateDynamicComponent","i3","i4","i1.ProfileService"],"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/raain-details/raain-details.component.ts","../../src/core/shared/raain-details/raain-details.component.html","../../src/core/shared/cache.service.ts","../../src/core/shared/fidj-storage.model.ts","../../src/core/shared/profile.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 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 showCumulative = false;\n @Input()\n public currentHeight: number;\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\n protected currentFrameContainer: FrameContainer;\n protected cartesianTools: CartesianTools;\n @ViewChild('primaryMap')\n protected mapDivRef: ElementRef;\n\n @ViewChild('canvasScale')\n protected scaleCanvasRef: ElementRef;\n\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 ) {\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 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.showCumulative ? 'mm' : 'mm/h');\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 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);\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 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 = `${average} (${Math.round(sumOfPixels)}mm for ${Math.round(this.pixelsCount)} pixels)`;\n } else {\n this.sumResult = 'NA';\n }\n this.changedSum.emit(this.sumResult);\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 periodDurationInHours =\n this.storage.get('raain-periodDurationInHours', 1) * 60 * 60 * 1000;\n this.cumulativeDateFrom.setTime(this.cumulativeDateFrom.getTime() - periodDurationInHours);\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 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} &nbsp; &nbsp; Longitude: ${lng} &nbsp; &nbsp;\n // Value: [${valueLat} ${valueLng} | ${valueLat2} ${valueLng2}] ${value}`;\n this.mcText = `Latitude: ${lat} &nbsp; &nbsp; Longitude: ${lng} &nbsp; &nbsp; Value: ${value}`;\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.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-end\">\n <ion-col id=\"map-buttons\" size-xs=\"3\">\n <div>\n <ion-button (click)=\"previous()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-back\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <ion-button (click)=\"stop()\" [hidden]=\"!autoplay\" color=\"medium\" fill=\"outline\"\n shape=\"round\">\n <ion-icon name=\"stop\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <ion-button (click)=\"next()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-forward\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </div>\n <div *ngIf=\"!timeframeContainers?.containers?.length\">&nbsp;</div>\n </ion-col>\n\n <ion-col *ngIf=\"showCumulative\" class=\"ion-hide-md-down\" size-xs=\"4\">\n <ion-item *ngIf=\"timeframeContainers?.containers?.length\">\n <ion-button color=\"medium\" fill=\"clear\" style=\"font-size: medium\">\n From {{ cumulativeDateFrom | date:'yyyy-MM-dd HH:mm' }} to\n </ion-button>\n </ion-item>\n <ion-item *ngIf=\"!timeframeContainers?.containers?.length\">&nbsp;</ion-item>\n </ion-col>\n\n <ion-col class=\"ion-text-start\" id=\"map-date\" size-xs=\"5\">\n <ion-item>\n <div *ngIf=\"timeframeContainers?.containers?.length\" slot=\"start\">\n <ion-select (ionDismiss)=\"showTimeframe()\" [(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 </div>\n <div *ngIf=\"!timeframeContainers?.containers?.length\">&nbsp;</div>\n <ion-button *ngIf=\"showCumulative\" color=\"medium\" fill=\"clear\" slot=\"end\">\n <ion-toggle (ionChange)=\"changeShowSpeedMarkers()\" [(ngModel)]=\"showSpeedMarkers\"\n [checked]=\"showSpeedMarkers\"\n color=\"medium\"></ion-toggle>\n </ion-button>\n </ion-item>\n </ion-col>\n\n <ion-col *ngIf=\"!showCumulative\" class=\"ion-hide-md-down\" size-xs=\"4\">\n <ion-range (ionChange)=\"changeAlpha()\" [(ngModel)]=\"alpha\" [max]=\"1\" [min]=\"0.2\" [snaps]=\"true\" [step]=\"0.2\"\n [ticks]=\"true\"\n color=\"medium\"></ion-range>\n <br>\n <ion-buttons>\n <ion-button color=\"medium\" fill=\"clear\">\n Gauges\n <ion-toggle (ionChange)=\"changeShowMarkers()\" [(ngModel)]=\"showMarkers\" [checked]=\"showMarkers\"\n color=\"medium\"></ion-toggle>\n </ion-button>\n <ion-button color=\"medium\" fill=\"clear\">\n Speeds\n <ion-toggle (ionChange)=\"changeShowSpeedMarkers()\" [(ngModel)]=\"showSpeedMarkers\"\n [checked]=\"showSpeedMarkers\"\n color=\"medium\"></ion-toggle>\n </ion-button>\n </ion-buttons>\n </ion-col>\n\n <!-- <ion-col class=\"ion-hide-md-down\" size-xs=\"2\">\n <ion-button color=\"medium\" fill=\"clear\">\n Cumulative\n <ion-toggle (ionChange)=\"changeCumulative()\" [(ngModel)]=\"showCumulative\" [checked]=\"showCumulative\"\n color=\"medium\"></ion-toggle>\n </ion-button>\n </ion-col>-->\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>\n <!--<ion-col class=\"ion-hide-sm-down\" size-sm=\"3\">\n <ion-button disabled=\"true\" fill=\"clear\"><small>{{ dateToShow?.toISOString() }}</small></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 <!--<ion-col size-sm=\"3\" size-xs=\"12\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ sumResult }}</ion-button>\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 @ViewChild('canvasElement')\n protected canvasElement: ElementRef;\n\n private configurationElement: ConfigurationElement;\n private onDrag;\n private onSizeChanged;\n private created;\n\n constructor(private ngZone: NgZone) {\n this.onSizeChanged = () => {};\n this.onDrag = (e: any) => {\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 );\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 );\n }\n\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\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 this.configurationElement?.chart?.destroy();\n this.created = false;\n }\n\n private async change(changes: SimpleChanges) {\n // console.log('changed', changes);\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>\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\"> &nbsp;</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","<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 </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>\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 </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</div>\n\n<!-- TODO Speed average used\n<ion-col>\n Speed average used : {{ compareManager?.compareSpeed?.pixelsPerPeriod ?? 0 / 12 }} m/s\n with {{ compareManager?.compareSpeed?.angleInDegrees }} °\n</ion-col>\n-->\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 LatLng,\n PositionValue,\n QualityPoint,\n RainComputationQuality,\n RainNode,\n RainSpeed,\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 // rainComputationQualityId?: 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}\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 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 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.rainComputationQualitiesPerDate = {};\n\n this.selectedGauge = null;\n this.selectedGaugeInPoints = null;\n this.cleanCompareQuality('no compare yet');\n }\n\n async refreshSpeeds(frameSet: FrameSet) {\n const rainSpeedMap = await this.profileService.getRainSpeedMap(\n this.rainNode,\n frameSet.rainComputationId\n );\n\n if (rainSpeedMap?.rainSpeeds) {\n this.speeds = rainSpeedMap.rainSpeeds.map((rainSpeed: RainSpeed) => {\n const center = rainSpeed.getCenter();\n const targetPosition = this.calculateTargetPosition(rainSpeed, center);\n\n return new MapLatLng(\n targetPosition.lat,\n targetPosition.lng,\n rainSpeed.azimuthInDegrees,\n `az${rainSpeed.azimuthInDegrees} sp${rainSpeed.speedInMetersPerSec} trust${rainSpeed.trustRatio}`,\n `az${rainSpeed.azimuthInDegrees} sp${rainSpeed.speedInMetersPerSec} trust${rainSpeed.trustRatio}`,\n rainSpeed.speedInMetersPerSec\n );\n });\n } else {\n this.speeds = [];\n }\n }\n\n async refreshCompareQuality(frameSet: FrameSet) {\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 const uiCompares: IUICompare[] = comparePerDate.compareTimeline\n .map((c) => {\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(c.maxValue * 1.2, c.maxValue * 1.2),\n comparePointsHistory: c.qualityPointsLegacy,\n remarks: c.remarks,\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 withCompareDuplicate: boolean\n ) {\n try {\n await this.fetchRainComputationQualities(targetsOrdered);\n\n await this.buildComparesTimeline(targetsOrdered, 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 = this.buildCompares.compareCumulative.maxValue * 1.2;\n this.globalComparePoints = this.buildCompares.compareCumulative.qualityPoints.map(\n (qp) =>\n new XYType(qp.getGaugeValue(), qp.getRainValue(), 2, qp.gaugeLabel, qp.gaugeId)\n );\n this.globalComparePointsMax = new XYType(maxValue, maxValue);\n } catch (e) {\n console.warn(e);\n }\n }\n\n async setGaugesInMap() {\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 const rainNodeGaugeIds = this.rainNode.getLinks(GaugeNode.TYPE).map((l) => l.getId());\n\n const visibleGauges = gaugesToFilter.filter((g) => rainNodeGaugeIds.indexOf(g.id) > -1);\n console.log('visibleGauges:', visibleGauges);\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 protected async buildComparesTimeline(\n targetsOrdered: ICompareTarget[],\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.slice(1, -1);\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(targetsOrdered: ICompareTarget[]) {\n for (const target of targetsOrdered) {\n if (\n !this.rainComputationQualitiesPerDate[target.date.toISOString()]\n // && target.rainComputationQualityId\n ) {\n try {\n let rainComputationQuality: RainComputationQuality;\n\n if (target.rainComputationCumulativeId) {\n rainComputationQuality =\n await this.profileService.getRainCumulativeCompareByDate(\n this.rainNode.id,\n target.rainComputationCumulativeId,\n target.date\n );\n } else if (target.rainComputationId) {\n rainComputationQuality = await this.profileService.getRainCompareByDate(\n this.rainNode.id,\n target.rainComputationId,\n target.date\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 private calculateTargetPosition(\n rainSpeed: RainSpeed,\n center: LatLng\n ): {lat: number; lng: number} {\n return rainSpeed.getCenter();\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} 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 lastError: string = '';\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 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 // rainComputationQualityId: this.getRainComputationQualityTarget(current),\n };\n\n const timeframeContainers = await this.refreshMapTimeframeContainers(target);\n\n this.onFetchDone(timeframeContainers)\n .then(() => this.refreshCompareQuality(current))\n .then((ignored) => {}); // NO Sync\n\n this.timelineSelectedFrameSet = current;\n }\n\n getTimelineFrameSet(): FrameSet[] {\n return this.timeframesFromRadars;\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 * 5) / 60, 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 beginExtended.setMinutes(beginExtended.getMinutes() - 7);\n endExtended.setMinutes(endExtended.getMinutes() + 7);\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 );\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 from period.begin to period.end with timeStepInMinutes\n const allExpectedDates: Date[] = [];\n const currentDate = new Date(this.period.begin);\n while (currentDate.getTime() <= this.period.end.getTime()) {\n allExpectedDates.push(new Date(currentDate));\n currentDate.setMinutes(currentDate.getMinutes() + this.timeStepInMinutes);\n }\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\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: FrameSet[] = [];\n for (const frameSet of this.timeframesFromRadarsExtended) {\n const target = JSON.parse(JSON.stringify(frameSet));\n target.date = new Date(target.date);\n // target.rainComputationQualityId = this.getRainComputationQualityTarget(frameSet);\n targets.push(target);\n }\n await this.compareManager.refreshGlobalCompareQuality(targets, !this.removeDuplicate);\n } catch (e) {\n console.error('refreshGlobalCompareReport', e);\n }\n }\n\n protected async refreshMapTimeframeContainers(target: {\n date: Date;\n rainComputationId: string;\n rainComputationCumulativeId: string;\n withGauge: boolean;\n cumulativeHours: number;\n }) {\n if (!target?.rainComputationId && !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 rainNodeCartesianMap =\n await this.profileService.getRainComputationCumulativeCumulativesMapById(\n rainNode.id,\n target.rainComputationCumulativeId,\n target.cumulativeHours\n );\n } else if (target.cumulativeHours && target.rainComputationId) {\n rainNodeCartesianMap =\n await this.profileService.getRainComputationCumulativesMapById(\n rainNode.id,\n target.rainComputationId,\n target.cumulativeHours\n );\n } else if (target.rainComputationCumulativeId) {\n rainNodeCartesianMap =\n await this.profileService.getRainComputationCumulativeCartesianMapById(\n rainNode.id,\n target.rainComputationCumulativeId\n );\n } else {\n rainNodeCartesianMap = await this.profileService.getRainComputationCartesianMapById(\n rainNode.id,\n target.rainComputationId\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 computations for id: ${target.rainComputationId} ${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);\n await this.compareManager.setGaugesInCompare();\n await this.compareManager.refreshSpeeds(frameSet);\n }\n\n protected async getValues(target: FrameSet): Promise<CartesianMapValue[]> {\n if (!target?.rainComputationId && !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 let rainComputationMap: RainComputationMap;\n\n if (target.rainComputationId) {\n rainComputationMap = await this.profileService.getRainComputationCartesianMapById(\n this.rainNode.id,\n target.rainComputationId\n );\n } else if (target.rainComputationCumulativeId) {\n rainComputationMap =\n await this.profileService.getRainComputationCumulativeCartesianMapById(\n this.rainNode.id,\n target.rainComputationCumulativeId\n );\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 computations for id: ${target.rainComputationId} ${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 {Component, Input, OnChanges, OnDestroy, SimpleChanges} from '@angular/core';\nimport {ProfileService} from '../profile.service';\nimport {CartesianMeasureValue, RainNode, TeamNode} from 'raain-model';\nimport {DateRange, MapLatLng, TimeframeContainers} from 'raain-ui';\nimport {CompareManager, FrameSet, mapDateRangeToString, RefreshManager} from '../tools';\nimport {XYType} from '../xytype';\nimport {RadarService} from '../radar.service';\nimport {Storage} from '../storage.service';\n\n@Component({\n selector: 'raain-details',\n templateUrl: 'raain-details.component.html',\n styleUrls: ['raain-details.component.scss'],\n})\nexport class RaainDetailsComponent implements OnDestroy, OnChanges {\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 toggleCumulative: boolean;\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 refreshInProgress: boolean;\n public sumDetails: string;\n public isAdmin: boolean;\n protected readonly DateRange = DateRange;\n\n constructor(protected storage: Storage) {}\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 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: '% Quality',\n // style: 'line',\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((c) => {\n return {\n date: RaainDetailsComponent.DateUTC(c.name),\n value: Math.min(100, c.x),\n };\n }),\n },\n {\n label: '% Images',\n style: 'bar',\n values: hourCounts.percentImages.map((c) => {\n return {\n date: RaainDetailsComponent.DateUTC(c.name),\n value: Math.min(100, c.x),\n };\n }),\n },\n {\n label: 'Rainy Sum',\n style: 'line',\n values: hourCounts.rainySum.map((c) => {\n return {\n date: RaainDetailsComponent.DateUTC(c.name),\n value: Math.min(100, c.x),\n };\n }),\n },\n ];\n } else {\n // console.log('fetchData TODO:', focusDate.toISOString(), range);\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((c) => {\n return {\n date: RaainDetailsComponent.DateUTC(c.name),\n value: Math.min(100, c.x),\n };\n }),\n },\n {\n label: '% Images',\n style: 'bar',\n values: counts.percentImages.map((c) => {\n return {\n date: RaainDetailsComponent.DateUTC(c.name),\n value: Math.min(100, c.x),\n };\n }),\n },\n // {\n // label: '% Quality',\n // style: 'line',\n // values: counts.percentQ.map((c) => {\n // return {\n // date: RaainDetailsComponent.DateUTC(c.name),\n // value: Math.min(100, c.x),\n // };\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 = newValue;\n this.storage.set('raain-periodBegin', this.periodBegin);\n\n await this.onPeriodDurationChange(event);\n }\n\n async onPeriodDurationChange(_event: Event) {\n const durationInHour = parseFloat(this.periodDurationAsString);\n this.periodEnd = new Date(this.periodBegin.getTime() + durationInHour * (60 * 60000));\n this.periodEndAsString = this.periodEnd.toISOString();\n this.storage.set('raain-periodEnd', this.periodEnd);\n this.storage.set('raain-periodDurationInHours', durationInHour);\n this.refreshManager.period = {begin: this.periodBegin, end: this.periodEnd};\n }\n\n async onDateChangeInCount(dateChanged: Date) {\n // console.log('onDateChangeInCount', dateChanged);\n this.periodBeginAsString =\n dateChanged.toISOString().substring(0, 11) +\n dateChanged.toLocaleTimeString().substring(0, 5);\n this.periodDurationAsString = '1';\n await this.onPeriodBeginChange(null);\n await this.refreshManager.refresh(false, true);\n }\n\n async onDateChangeInMap(dateShown: Date) {\n // console.log('onDateChangeInMap', dateShown);\n this.dateShown = dateShown;\n const cumulativeHours: number = !this.toggleCumulative\n ? 0\n : parseFloat(this.periodDurationAsString);\n await this.refreshManager.fetch(this.dateShown, this.toggleGaugeMeasures, cumulativeHours);\n this.currentTimeframeTarget = this.refreshManager.getTimelineSelectedFrameSet();\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(this.periodBegin.getTime() - 24 * 60 * 60 * 1000);\n const gaugeValueShowEnd = new Date(this.periodEnd.getTime() + 24 * 60 * 60 * 1000);\n gaugeValueShowBegin.setHours(0);\n gaugeValueShowBegin.setMinutes(0);\n gaugeValueShowEnd.setHours(23);\n gaugeValueShowEnd.setMinutes(59);\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 const cartesianMeasureValue = new CartesianMeasureValue(gm.values[0] as any);\n const value = cartesianMeasureValue.getCartesianValues()[0].value;\n return {date: gm.date, value};\n });\n this.gaugeSelectedPoints = [\n {\n label: gaugeSelected.name,\n style: 'bar',\n values: gaugeValues,\n },\n ];\n // console.log('this.gaugeSelectedPoints:', this.gaugeSelectedPoints);\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 onChangeDetectionTest(rainNode: RainNode) {\n // TODO console.log(TEST_DETECTION++, 'onChangeDetectionTest');\n return '';\n }\n\n async refreshMap() {\n this.gaugeSelectedPoints = [];\n // this.qualityConf.trustfulGaugeIds = this.qualityConf.trustfulGaugeIds?.length > 0 ?\n // this.qualityConf.trustfulGaugeIds : this.gaugesToFilter.filter(g => g.isIn).map(g => g.id);\n this.borders = [\n // new MapLatLng(rainNode.latitude - 250 * 0.008, rainNode.longitude),\n // new MapLatLng(rainNode.latitude, rainNode.longitude - 250 * 0.013),\n // new MapLatLng(rainNode.latitude, rainNode.longitude + 250 * 0.013),\n // new MapLatLng(rainNode.latitude + 250 * 0.008, rainNode.longitude),\n ];\n\n this.compareManager.cleanAll();\n await this.compareManager.setGaugesInMap();\n this.refreshManager.refresh(false, this.toggleAdmin).then((_ignored) => {});\n }\n\n async setPeriodOfNow() {\n // should look like: \"2024-08-26T12:13\"\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 this.refreshManager.refresh(false, true);\n }\n\n getPercentOfImages() {\n if (!this.countsPeriod.percentImages?.length) {\n return 0;\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 return Math.round(summed / duringPeriod.length);\n }\n\n getPercentOfComputations() {\n const timeline = this.refreshManager.getTimelineFrameSet();\n if (!timeline?.length) {\n return 0;\n }\n\n const timelineWithComputation = timeline.filter((a) => !!a.rainComputationId);\n const ratio = timelineWithComputation.length / timeline.length;\n return Math.round(ratio * 100);\n }\n\n private cleanAll() {\n this.borders = [];\n\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\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 this.periodDurationAsString =\n '' + (this.periodEnd.getTime() - this.periodBegin.getTime()) / (60 * 60000);\n\n this.dateShown = this.periodBegin;\n\n this.refreshInProgress = false;\n\n this.compareManager?.cleanAll();\n this.refreshManager?.cleanAll();\n }\n\n private async init() {\n this.cleanAll();\n await this.initRain();\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 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 if (this.periodBegin && this.periodEnd) {\n this.refreshManager.period = {begin: this.periodBegin, end: this.periodEnd};\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 }\n\n private async onRefreshDone(timeframeDates: Date[]) {\n this.timeframeDates = timeframeDates;\n this.refreshInProgress = false;\n }\n\n private async onFetchDone(timeframeContainers?: TimeframeContainers) {\n if (timeframeContainers) {\n this.timeframeContainers = timeframeContainers;\n }\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 <ion-button (click)=\"setPeriodOfNow()\" class=\"now-button\" fill=\"outline\">\n <ion-icon name=\"time-outline\" slot=\"start\"></ion-icon>\n Now\n </ion-button>\n\n <div class=\"period-start ion-hide-md-down\">\n <ion-label>Start:</ion-label>\n <input (change)=\"onPeriodBeginChange($event)\"\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-label>Duration:</ion-label>\n <ion-select (ionDismiss)=\"onPeriodDurationChange($event)\"\n [(ngModel)]=\"periodDurationAsString\"\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 *ngIf=\"isAdmin\" value=\"24\">24 hours</ion-select-option>\n </ion-select>\n </div>\n\n <div id=\"all-dates\" slot=\"end\">\n <ion-label class=\"toggle-label\">All dates</ion-label>\n <ion-toggle (ionChange)=\"onEnableCountHistoryTab(rainNode)\"\n [(ngModel)]=\"toggleHistory\"\n [checked]=\"toggleHistory\">\n </ion-toggle>\n </div>\n </div>\n\n <!-- Hidden label for change detection -->\n <div class=\"hidden-label\">{{ onChangeDetectionTest(rainNode) }}</div>\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 section -->\n <ion-card class=\"map-card\">\n <ion-card-content class=\"map-content\">\n <ion-grid>\n <ion-row id=\"progressAndRefresh\">\n <ion-col size=\"12\" size-md=\"6\">\n <!-- left content (if any) -->\n </ion-col>\n <ion-col class=\"ion-text-right\" size=\"12\" size-md=\"6\">\n <ion-label class=\"ion-margin-end\">\n <span *ngIf=\"getPercentOfComputations()\">\n {{ getPercentOfComputations() }}% Images\n <i *ngIf=\"countsPeriod.progress\" class=\"progress-indicator\">\n In Progress: {{ countsPeriod.progress }}...\n </i>\n </span>\n <span *ngIf=\"!getPercentOfComputations()\">\n No image available\n </span>\n <span *ngIf=\"refreshManager.lastError\">\n <b>Errors: {{ refreshManager.lastError }}</b>\n </span>\n </ion-label>\n\n <ion-button (click)=\"refreshMap()\" [disabled]=\"refreshInProgress\" class=\"refresh-button\">\n Refresh Map\n </ion-button>\n </ion-col>\n\n <!-- Progress indicator -->\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-row *ngIf=\"toggleMap && getPercentOfImages()\">\n <!-- Map component -->\n <ion-col class=\"map-column\" size-lg=\"7\">\n <div class=\"map-container\">\n <raain-map\n (changedDate)=\"onDateChangeInMap($event)\"\n (changedSum)=\"onSumChangeInMap($event)\"\n (selectedMarker)=\"onGaugeSelectInMap($event)\"\n [coordinates]=\"coordinates\"\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 [showCumulative]=\"toggleCumulative\"\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 </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 class=\"data-column\" size-lg=\"5\">\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</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 {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 EventNode,\n GaugeMeasure,\n GaugeNode,\n LatLng,\n RadarNode,\n RainComputation,\n RainComputationMap,\n RainComputationQuality,\n RainNode,\n RainSpeedMap,\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 try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'notifications',\n verb: 'POST',\n defaultKeyUrl: this.defaultUrlForAPI + '/notifications',\n data: {\n rain: rainId,\n message,\n },\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 const args = '?rain=' + rainId;\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'notifications',\n verb: 'GET',\n relativePath: args,\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 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 try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'teams_all',\n verb: 'GET',\n defaultKeyUrl: this.defaultUrlForAPI + '/teams_all',\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({\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(teamId: string): Promise<Array<RadarNode>> {\n const radars = [];\n const url = this.defaultUrlForAPI + '/radars' + (teamId ? '?teamId=' + teamId : '');\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'radars',\n verb: 'GET',\n defaultKeyUrl: url,\n });\n for (const r of resp.data.radars) {\n const radar = new RadarNode(r);\n radars.push(radar);\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({\n key: 'radars',\n verb: 'GET',\n relativePath: id,\n defaultKeyUrl: this.defaultUrlForAPI + '/radars',\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 = {\n name: radarNode.name,\n };\n\n try {\n const resp = await this.fidjService.sendOnEndpoint({\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 resp = await this.fidjService.sendOnEndpoint({\n key: 'radars',\n verb: 'GET',\n defaultKeyUrl: this.defaultUrlForAPI + '/radars',\n });\n const lonelyRadars: RadarNode[] = [];\n const radars = resp.data.radars;\n radars.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 ): Promise<RainNode> {\n try {\n let queryPath =\n '' +\n rainId +\n '?format=timeframeCumulative&provider=' +\n provider +\n '&timeStepInMinutes=' +\n timeStepInMinutes;\n if (begin) {\n queryPath += '&begin=' + begin.toISOString();\n }\n if (end) {\n queryPath += '&end=' + end.toISOString();\n }\n if (forced) {\n queryPath += '&forced=true';\n queryPath += '&withConfig=true';\n // queryPath += '&bypassCache=' + new Date().getTime();\n }\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n verb: 'GET',\n relativePath: queryPath,\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(teamId: string): Promise<Array<RainNode>> {\n const rains = [];\n const url = this.defaultUrlForAPI + '/rains' + (teamId ? '?teamId=' + teamId : '');\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n verb: 'GET',\n defaultKeyUrl: url,\n });\n for (const rain of resp.data.rains) {\n rains.push(new RainNode(rain));\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({\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 queueRunning: number;\n }> {\n try {\n const args = `?range=${options.range}&begin=${options.periodBegin.toISOString()}`;\n\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n relativePath: rainId + '/counts' + args,\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\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 });\n\n return {\n percentImages,\n percentRainy,\n percentQ,\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 rainyCount: XYType[];\n rainySum: XYType[];\n queueRunning: number;\n }> {\n try {\n const args = `?range=hour&begin=${options.periodBegin.toISOString()}`;\n\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n relativePath: rainId + '/counts' + args,\n verb: 'GET',\n defaultKeyUrl: this.defaultUrlForAPI + '/rains/',\n });\n\n const counts = resp.data.counts.result;\n const percentImages: 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 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 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 getRainComputationCartesianMapById(\n rainId: string,\n rainComputationId: string\n ): Promise<RainComputationMap> {\n try {\n const queryPath =\n '' + rainId + '/computations/' + rainComputationId + '?format=cartesian-map';\n const response = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n verb: 'GET',\n relativePath: queryPath,\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 getRainComputationCumulativesMapById(\n rainId: string,\n rainComputationId: string,\n cumulativeHours: number\n ): Promise<RainComputationMap> {\n const queryPath = `${rainId}/computations/${rainComputationId}/cumulative/${cumulativeHours}`;\n try {\n const response = await this.fidjService.sendOnEndpoint({\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';\n return rainComputationMap;\n } catch (e) {\n await this.checkError(e);\n }\n return null;\n }\n\n async getRainComputationCumulativeCartesianMapById(\n rainId: string,\n rainComputationCumulativeId: string\n ): Promise<RainComputationMap> {\n const queryPath = `${rainId}/cumulative/${rainComputationCumulativeId}?format=cartesian-map`;\n\n try {\n const response = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n verb: 'GET',\n relativePath: queryPath,\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}/cumulative/${rainComputationCumulativeId}/cumulative/${cumulativeHours}`;\n\n try {\n const response = await this.fidjService.sendOnEndpoint({\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 getRainCompares(\n rainId: string,\n rainComputationId: string\n ): Promise<{id: string; version: string}[]> {\n const queryPath = '' + rainId + '/computations/' + rainComputationId;\n const response = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n verb: 'GET',\n relativePath: queryPath,\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n // timeout: 200000,\n });\n\n const rainComputation = new RainComputation(response.data);\n const links = rainComputation.getLinks();\n const rainComputationQualities = [];\n for (const link of links) {\n if (link.rel === RainComputationQuality.TYPE) {\n const id = link.getId();\n const dateLength = new Date().toISOString().length;\n const version = link.href.substring(\n 4 + RainComputationQuality.TYPE.length + 1 + dateLength + 1,\n link.href.indexOf('/' + id)\n );\n rainComputationQualities.push({id, version});\n }\n }\n return rainComputationQualities;\n }\n\n async getRainCompareByDate(\n rainId: string,\n rainComputationId: string,\n date: Date\n ): Promise<RainComputationQuality> {\n const queryPath =\n '' +\n rainId +\n '/computations/' +\n rainComputationId +\n '/compares?date=' +\n date.toISOString();\n\n try {\n const response = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n verb: 'GET',\n relativePath: queryPath,\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n });\n\n const rainComputationQuality = new RainComputationQuality(response.data.qualities[0]);\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 async getRainCumulativeCompareByDate(\n rainId: string,\n rainComputationCumulativeId: string,\n date: Date\n ): Promise<RainComputationQuality> {\n const queryPath =\n '' +\n rainId +\n '/cumulative/' +\n rainComputationCumulativeId +\n '/compares?date=' +\n date.toISOString();\n\n try {\n const response = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n verb: 'GET',\n relativePath: queryPath,\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n });\n\n const rainComputationQuality = new RainComputationQuality(response.data.qualities[0]);\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 async getRainProgress(rainId: string): Promise<number> {\n try {\n const queryPath = '' + rainId + '/progress';\n const response = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n verb: 'GET',\n relativePath: queryPath,\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n // timeout: 200000,\n });\n\n return response.data.inProgress;\n } catch (e) {\n await this.checkError(e);\n }\n return 0;\n }\n\n // === Gauges ===\n\n async getGauge(gaugeId: string): Promise<GaugeNode> {\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'gauges',\n verb: 'GET',\n relativePath: gaugeId,\n defaultKeyUrl: this.defaultUrlForAPI + '/gauges',\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 let queryPath = '';\n if (this.asTeamId) {\n queryPath += '?teamId=' + this.asTeamId;\n }\n if (queryPath) {\n queryPath += '&';\n } else {\n queryPath += '?';\n }\n queryPath += `rainId=${rainId}&aroundLatLng=${aroundLatLng.lat},${aroundLatLng.lng}`;\n\n const gauges = [];\n try {\n for (let count = 1; count <= pageCount; count++) {\n const paginatedQueryPath = queryPath + `&page=${count}`;\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'gauges',\n verb: 'GET',\n relativePath: paginatedQueryPath,\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 queryPath =\n '' + gaugeId + '/measures?begin=' + begin.toISOString() + '&end=' + end.toISOString();\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'gauges',\n verb: 'GET',\n relativePath: queryPath,\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 getRainSpeedMap(rainNode: RainNode, rainComputationId: string): Promise<RainSpeedMap> {\n if (!rainComputationId) {\n return null;\n }\n\n try {\n const response = await this.fidjService.sendOnEndpoint({\n verb: 'GET',\n defaultKeyUrl:\n this.defaultUrlForAPI +\n `/rains/${rainNode.id}/computations/${rainComputationId}/speeds`,\n });\n\n return new RainSpeedMap(response.data.rainSpeedMap);\n } catch (e) {\n console.error('getRainSpeedMap error:', e);\n }\n }\n\n async getProviders(\n rainId: string\n ): Promise<{providers: string[]; timeStepInMinutes: number[]}> {\n try {\n const response = await this.fidjService.sendOnEndpoint({\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 || [5, 10, 15, 30, 60],\n };\n } catch (e) {\n console.error('getProviders error:', e);\n // Return fallback values if API call fails\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 {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\n // TODO rainNode.latLngRectsAsJSON\n // pmv.setCenter(rain);\n\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 const rainId = rainNode?.id;\n\n // dates and radar measures\n for (const link of links) {\n const measureIndex = link.href.indexOf('measures/');\n if (measureIndex >= 0) {\n const start = measureIndex + 'measures/'.length;\n const str1 = link.href.substring(start);\n if (str1) {\n const end = str1.indexOf('/');\n const dateStr = str1.substring(0, end);\n const idStr = str1.substring(end + 1);\n\n const frameDate = new Date(dateStr);\n const existingTargets = timeline.filter(\n (t) => t.date.getTime() === frameDate.getTime()\n );\n if (existingTargets.length) {\n existingTargets[0].radarMeasureIds.push(idStr);\n } else {\n timeline.push(new FrameSet(frameDate, [idStr]));\n }\n }\n }\n }\n\n // computation-cumulatives\n for (const link of links) {\n const measureIndex = link.href.indexOf('cumulatives/');\n if (measureIndex >= 0) {\n const start = measureIndex + '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 // rain computations\n for (const link of links) {\n const computationIndex = link.href.indexOf('computations/');\n if (computationIndex >= 0) {\n const start = computationIndex + 13;\n const str1 = link.href.substring(start);\n if (str1) {\n const splitted = str1.split('/');\n const date = new Date(splitted[0]);\n const version = splitted[1];\n const rainComputationId = splitted[2];\n const existingTargets = timeline.filter(\n (t) => t.date.getTime() === date.getTime()\n );\n for (const target of existingTargets) {\n target.rainComputationId = rainComputationId;\n target.rainComputationVersion = version;\n target.rainComputationQualities = await this.getBuilds(\n rainId,\n rainComputationId\n );\n }\n }\n }\n }\n\n return timeline;\n }\n\n async getBuilds(\n rainId: string,\n rainComputationId: string\n ): Promise<{id: string; version: string}[]> {\n return await this.profileService.getRainCompares(rainId, rainComputationId);\n }\n}\n","// TODO remove constants but preferred progress indicator [0 to 1]\nexport const CONSTANTS = {\n _RAIN_STATUS_0_NOT_STARTED: 0,\n _RAIN_STATUS_0_WAIT_FOR_ECHOES: 0.1,\n _RAIN_STATUS_0_WAIT_FOR_INPUT: 0.2,\n _RAIN_STATUS_0_WAIT_FOR_INTERNAL_VALIDATION: 0.3,\n _RAIN_STATUS_0_READY_TO_BUILD: 0.4,\n _RAIN_STATUS_1_BUILDING: 0.5,\n _RAIN_STATUS_1_READY_TO_COMPUTE: 0.6,\n\n _RAIN_COMPUTATION_IS_READY: 0,\n _RAIN_COMPUTATION_IN_PROGRESS: 0.5,\n _RAIN_COMPUTATION_DONE: 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 _VERIFY_STATUS_FIND_RADARS: 0.3,\n _VERIFY_STATUS_FIND_SIMILAR: 0.6,\n _VERIFY_STATUS_FIND_GAUGES: 0.7,\n\n _COMPUTATION_STATUS_UNKNOWN: 0,\n _COMPUTATION_STATUS_IN_PROGRESS: 0.4,\n _COMPUTATION_STATUS_FINISHED: 1,\n};\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {EventNode, RainNode} from 'raain-model';\nimport {CONSTANTS} from './shared.const';\nimport {FrameSet} from './tools';\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({name: 'timeframeComputationProgress'})\nexport class TimeframeComputationProgress implements PipeTransform {\n transform(frameSets: FrameSet[]): number {\n let progress = 0;\n if (!frameSets || frameSets.length === 0) {\n return 1;\n }\n\n for (const frameset of frameSets) {\n if (frameset.radarMeasureIds.length && frameset.rainComputationId) {\n progress++;\n }\n }\n\n return progress / frameSets.length;\n }\n}\n\n@Pipe({name: 'timeframeQualityProgress'})\nexport class TimeframeQualityProgress implements PipeTransform {\n transform(frameSets: FrameSet[]): number {\n let progress = 0;\n if (!frameSets || frameSets.length === 0) {\n return 1;\n }\n\n for (const frameset of frameSets) {\n const qualities = frameset.rainComputationQualities\n ? frameset.rainComputationQualities\n : [];\n const atLeastOneIsNotOutdated = qualities.filter(\n (q) => q.version.indexOf('outdated') < 0\n );\n if (\n frameset.radarMeasureIds.length &&\n frameset.rainComputationId &&\n atLeastOneIsNotOutdated.length\n ) {\n progress++;\n }\n }\n\n return progress / frameSets.length;\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 skeletonText: 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 skeleton text element (hidden initially)\n const skeleton = document.createElement('ion-skeleton-text');\n skeleton.setAttribute('animated', 'true');\n skeleton.style.width = '100px';\n skeleton.style.height = '20px';\n skeleton.style.borderRadius = '4px';\n skeleton.style.margin = '8px 16px';\n skeleton.style.display = 'none';\n\n // Store reference to the skeleton text\n this.skeletonText = skeleton;\n\n // Add the skeleton text to the buttons container\n profileButtons.appendChild(skeleton);\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.skeletonText && this.profileButton) {\n this.profileButton.style.display = 'none';\n this.skeletonText.style.display = 'block';\n }\n }\n\n private hideSkeletonText() {\n if (this.skeletonText && this.profileButton) {\n this.profileButton.style.display = 'flex';\n this.skeletonText.style.display = 'none';\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 if (this.profileService.needsConnectionRefresh()) {\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 TimeframeComputationProgress,\n TimeframeQualityProgress,\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 TimeframeComputationProgress,\n TimeframeQualityProgress,\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 TimeframeComputationProgress,\n TimeframeQualityProgress,\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';\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 ],\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 ],\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","i2","i1","i3.RaainCompareComponent","sleep","i5.RaainMapComponent","i6.RaainCompareStackComponent","i7.RaainDateFocusComponent","i8.RaainDateDynamicComponent","i3","i4","i1.ProfileService"],"mappings":"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"}