raain-app 1.5.21 → 1.5.23

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/ReportManager.ts","../../src/core/shared/tools/DateRangeTools.ts","../../src/core/shared/shared.const.ts","../../src/core/shared/shared.pipe.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.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 {IconOptions} from 'leaflet';\nimport {\n CartesianMapValue,\n ChartScaleColors,\n ElementsFactory,\n FrameContainer,\n MapElement,\n MapLatLng,\n ScaleElement,\n ScaleElementInput,\n TimeframeContainer,\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 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 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: any;\n @Input()\n public sumFn: any;\n public sumResult: string;\n\n @Output()\n public selectedMarker = new EventEmitter<MapLatLng>();\n\n @Output()\n public changedDate = new EventEmitter<Date>();\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 protected currentFrameContainer: FrameContainer;\n protected cumulativeTimeframeContainers: TimeframeContainers;\n\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 iconOptions: {\n gauges: IconOptions;\n selectedGauges: IconOptions;\n pixels: IconOptions;\n borders: IconOptions;\n gaugesInCompare: IconOptions;\n pixelsSolution: IconOptions;\n };\n\n constructor(\n private ngZone: NgZone,\n private storage: Storage\n ) {\n this.delete();\n\n const iconSize = [40, 40]; // size of the icon\n const iconAnchor = [20, 20]; // point of the icon which will correspond to marker's location\n const pixelSize = [41, 41];\n const pixelAnchor = [20, 20];\n const popupAnchor = [0, -20]; // point from which the popup should open relative to the iconAnchor\n this.iconOptions = {\n gauges: {iconUrl: './assets/maps/marker-pluvio.png', iconSize, iconAnchor, popupAnchor},\n gaugesInCompare: {\n iconUrl: './assets/maps/marker-pluvio-diag.png',\n iconSize,\n iconAnchor,\n popupAnchor,\n },\n selectedGauges: {\n iconUrl: './assets/maps/marker-pluvio-diag-select.png',\n iconSize,\n iconAnchor,\n popupAnchor,\n },\n pixels: {iconUrl: './assets/maps/marker-rain.png', iconSize, iconAnchor, popupAnchor},\n pixelsSolution: {\n iconUrl: './assets/maps/marker-rain2.png',\n iconSize: pixelSize,\n iconAnchor: pixelAnchor,\n popupAnchor,\n },\n borders: {\n iconUrl: './assets/maps/marker-shadow.png',\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 && new Date(this.dateToShowAsString).getTime() === this.dateToShow?.getTime())\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 changeCumulative() {\n if (this.showCumulative) {\n const factory = new ElementsFactory(this.coordinates, true);\n this.createScale(factory, 'mm');\n this.cumulativeTimeframeContainers = this.timeframeContainers;\n } else {\n const factory = new ElementsFactory(this.coordinates, true);\n this.createScale(factory, 'mm/h');\n }\n\n this.updateTimeframe();\n }\n\n public changeAlpha() {\n // console.log('changeAlpha', this.alpha);\n this.storage.set('raain-map-alpha', this.alpha);\n if (!this.mapElement || !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 const markers = [\n {iconsLatLng: this.markers.gauges, iconsOptions: this.iconOptions.gauges},\n {\n iconsLatLng: this.markers.selectedGauges,\n iconsOptions: this.iconOptions.selectedGauges,\n },\n {\n iconsLatLng: this.markers.gaugesInCompare,\n iconsOptions: this.iconOptions.gaugesInCompare,\n },\n {iconsLatLng: this.markers.pixels, iconsOptions: this.iconOptions.pixels},\n {\n iconsLatLng: this.markers.pixelsSolution,\n iconsOptions: this.iconOptions.pixelsSolution,\n },\n // {iconsLatLng: this.markers.borders, iconsOptions: this.iconOptions.borders},\n ];\n\n const factory = new ElementsFactory(this.coordinates, true);\n this.createScale(factory, '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,\n });\n\n this.changeAlpha();\n\n this.mapElement.mapLeaflet?.on('mousemove', (evt) => this.onMapMouseMove(evt));\n this.mapElement.markersProduced?.forEach((m) =>\n m.on('click', (evt) => this.onMapClick(evt))\n );\n this.onSizeChanged = () => {\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 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.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 new Date(changes.defaultDate.currentValue).getTime() ===\n new Date(changes.defaultDate.previousValue).getTime()\n ) {\n return;\n }\n possibleNewDefaultDate = this.defaultDate;\n }\n\n if (changes.markers && this.mapElement?.markersLayer) {\n const markers = [\n {iconsLatLng: this.markers.gauges, iconOptions: this.iconOptions.gauges},\n {\n iconsLatLng: this.markers.selectedGauges,\n iconOptions: this.iconOptions.selectedGauges,\n },\n {\n iconsLatLng: this.markers.gaugesInCompare,\n iconOptions: this.iconOptions.gaugesInCompare,\n },\n {iconsLatLng: this.markers.pixels, iconOptions: this.iconOptions.pixels},\n {\n iconsLatLng: this.markers.pixelsSolution,\n iconOptions: this.iconOptions.pixelsSolution,\n },\n // {iconsLatLng: this.markers.borders, iconOptions: this.iconOptions.borders},\n ];\n const markersProduced = this.mapElement.markersLayer.render(markers).markers;\n if (markersProduced) {\n markersProduced.forEach((m) => m.on('click', (evt) => this.onMapClick(evt)));\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 (changes.markers && this.markers.selectedGauges.length === 1) {\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 const drawer = this.mapElement.compositeLayer.getFirstDrawer();\n this.sumResult = drawer?.getExecOfWindowPoints(this.sumValues, this.sumFn);\n }\n\n this.changeNavigation(possibleNewDefaultDate);\n }\n\n private changeNavigation(defaultDate?: Date) {\n // update possible names\n if (this.timeframeContainers && 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) => d.getTime() === defaultDate.getTime()).length === 1\n ) {\n this.dateToShow = defaultDate;\n }\n if (\n !this.dateToShow &&\n this.possibleDates.length > 0 &&\n this.possibleDates.filter((d) => d.getTime() === this.dateToShow?.getTime()).length !==\n 1\n ) {\n this.dateToShow = this.possibleDates[0];\n }\n this.dateToShowAsString = this.dateToShow.toISOString();\n }\n\n private getDateToShowIndex(): number {\n let index = 0;\n for (const date of this.possibleDates) {\n if (date.toISOString().substring(0, 19) === this.dateToShowAsString.substring(0, 19)) {\n break;\n }\n index++;\n }\n return index;\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 = Math.round(valueSelected[0].value * 1000) / 1000;\n valueLat = Math.round(valueSelected[0].lat * 1000) / 1000;\n valueLng = Math.round(valueSelected[0].lng * 1000) / 1000;\n valueLat2 = Math.round(valueSelected[0].lat2 * 1000) / 1000;\n valueLng2 = Math.round(valueSelected[0].lng2 * 1000) / 1000;\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 for (const gauge of this.markers.gauges) {\n if (gauge.id === evt?.target?.options?.alt) {\n this.markers.selectedGauges = [gauge];\n break;\n }\n }\n\n this.selectedMarker.emit(\n new MapLatLng(evt.latlng?.lat, evt.latlng?.lng, undefined, evt.id, evt.name)\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 (!this.showCumulative) {\n this.mapElement.updateMapTimeframe(this.timeframeContainers);\n this.currentFrameContainer = this.timeframeContainers?.containers[0]?.timeframe[0];\n } else if (this.timeframeContainers.containers[0]?.timeframe) {\n for (const container of this.timeframeContainers.containers[0].timeframe) {\n const alreadyExist =\n this.cumulativeTimeframeContainers.containers[0].timeframe.filter(\n (c) => new Date(c.date).getTime() === new Date(container.date).getTime()\n );\n if (alreadyExist.length < 1) {\n this.cumulativeTimeframeContainers.containers[0].timeframe.push(container);\n }\n }\n console.log(new Date().toISOString(), 'cartesianMapValues: computing...');\n const cartesianMapValues =\n this.cumulativeTimeframeContainers.getCumulativeCartesianValues();\n console.log(new Date().toISOString(), 'cartesianMapValues:', cartesianMapValues.length);\n this.currentFrameContainer = new FrameContainer(\n this.defaultDate,\n cartesianMapValues,\n false,\n true\n );\n\n this.mapElement.updateMapTimeframe(\n new TimeframeContainers([\n new TimeframeContainer(\n this.defaultDate.toISOString(),\n [this.currentFrameContainer],\n 'cumulative'\n ),\n ])\n );\n }\n\n this.changeAlpha();\n }\n\n private createScale(factory: ElementsFactory, label: string) {\n this.deleteScale();\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","<ion-grid>\n\n <ion-row class=\"ion-align-items-end\">\n <ion-col id=\"map-buttons\" size-xs=\"3\">\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 </ion-col>\n <ion-col class=\"ion-text-start\" id=\"map-date\" size-md=\"4\" size-xs=\"5\">\n <ion-select (ionDismiss)=\"showTimeframe()\" [(ngModel)]=\"dateToShowAsString\" interface=\"popover\"\n placeholder=\"Period\" value=\"{{dateToShowAsString}}\">\n <ion-select-option *ngFor=\"let dateToSelect of possibleDates\" value=\"{{dateToSelect.toISOString()}}\">\n {{ dateToSelect | date:'yyyy-MM-dd HH:mm' }}\n </ion-select-option>\n </ion-select>\n </ion-col>\n <ion-col class=\"ion-hide-md-down\" size-xs=\"2\">\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-col>\n <ion-col class=\"ion-hide-md-down\" size-xs=\"2\">\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 </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]=\"100\">\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=\"7\">\n <span [innerHTML]=\"mcText\"></span>\n </ion-col>\n <ion-col size-sm=\"2\" size-xs=\"12\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ sumResult }}</ion-button>\n </ion-col>\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-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 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</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\n <!--\n <ion-col>\n <ion-card id=\"card-matrix\">\n <div *ngIf=\"compareManager?.compareNames?.length\">\n <raain-speed [compareSpeedMatrix]=\"compareManager.compareSpeedMatrix\"\n [compareTrustedIndicator]=\"compareManager.compareTrustedIndicator\"\n [currentHeight]=\"300\"\n ></raain-speed>\n </div>\n <ion-card-content>\n {{ compareManager?.compareVersion }}\n </ion-card-content>\n </ion-card>\n </ion-col> -->\n\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>{{ 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\n <!--\n <ion-card id=\"card-selected-gauge\" slot=\"end\">\n <ion-card-content>\n <ion-accordion-group>\n\n <ion-accordion value=\"selected\">\n <ion-item color=\"light\" slot=\"header\">\n <ion-label>debug</ion-label>\n </ion-item>\n\n <div class=\"ion-padding\" slot=\"content\">\n date: {{ currentTimeframeTarget.date | date:'yyyy-MM-dd HH:mm:ss' }}<br>\n radarMeasureId: {{ currentTimeframeTarget.radarMeasureId }}<br>\n rainComputationId: {{ currentTimeframeTarget.rainComputationId }}<br>\n rainComputationVersion: {{ currentTimeframeTarget.rainComputationVersion }}<br>\n rainComputationQualitiesPerDate :\n <ul>\n <li *ngFor=\"let rcq of currentTimeframeTarget.rainComputationQualitiesPerDate\">\n {{ rcq.version }} - {{ rcq.id }}\n </li>\n </ul>\n </div>\n\n </ion-accordion>\n <ion-accordion *ngIf=\"selectedGauge\" value=\"context\">\n <ion-item color=\"light\" slot=\"header\">\n <ion-label>{{ selectedGaugeInPointsDetail }}</ion-label>\n </ion-item>\n <div [innerHTML]=\"formatLabelOfSelectedGauge(selectedGaugeInPoints)\" class=\"ion-padding\"\n slot=\"content\"></div>\n </ion-accordion>\n </ion-accordion-group>\n </ion-card-content>\n </ion-card>\n -->\n</div>\n","import {\n AfterViewChecked,\n Component,\n ElementRef,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport {EarthMapElement, EarthMapElementInput, ElementsFactory} from 'raain-ui';\n\n@Component({\n selector: 'raain-globe',\n templateUrl: './raain-globe.component.html',\n styleUrls: ['./raain-globe.component.scss'],\n})\nexport class RaainGlobeComponent implements AfterViewChecked, OnDestroy, OnChanges {\n @Input()\n public points: {\n label: string;\n style: string;\n values: {date: Date; value: number}[];\n }[];\n\n @Input()\n public currentHeight: number;\n public currentWidth: number;\n\n @ViewChild('canvasElement')\n protected canvasElement: ElementRef;\n\n private earthMapElement: EarthMapElement;\n private onSizeChanged;\n private created: boolean;\n\n constructor(private ngZone: NgZone) {\n this.onSizeChanged = () => {};\n }\n\n public ngAfterViewChecked(): void {\n this.create();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.change(changes);\n }\n\n public ngOnDestroy(): void {\n this.delete();\n }\n\n @HostListener('window:resize', ['$event'])\n private onResize(event: any): void {\n this.updateMapSize();\n }\n\n private create() {\n if (this.created) {\n return;\n }\n this.created = true;\n\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n const factory = new ElementsFactory();\n try {\n this.earthMapElement = factory.createEarthMap(\n this.canvasElement.nativeElement,\n new EarthMapElementInput('')\n );\n } catch (e) {\n console.warn('dynamic focus creation issue', e);\n }\n }, 100);\n });\n }\n\n private async delete() {\n // await this.earthMapElement?.destroy();\n this.created = false;\n }\n\n private async change(changes: SimpleChanges) {\n await this.delete();\n this.create();\n }\n\n private updateMapSize(): void {\n const mapDivWidth = this.canvasElement.nativeElement.parentNode?.parentNode['clientWidth'];\n const padding = 20;\n let currentWidth =\n mapDivWidth ||\n window.innerWidth ||\n document.documentElement.clientWidth ||\n document.body.clientWidth;\n const currentHeight =\n this.currentHeight ||\n window.innerHeight ||\n document.documentElement.clientHeight ||\n document.body.clientHeight;\n currentWidth -= padding;\n this.currentWidth = currentWidth;\n this.currentHeight = currentHeight;\n\n this.ngZone.run(() => {\n this.onSizeChanged();\n });\n }\n}\n","<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\" size-sm=\"12\">\n <div #canvasElement [style.height.px]=\"currentHeight\" id=\"canvas-container\">\n </div>\n </ion-col>\n </ion-row>\n</ion-grid>\n","import {MapLatLng} from 'raain-ui';\nimport {\n IComparePerDate,\n ICompares,\n PositionValue,\n QualityPoint,\n RainComputationQuality,\n RainNode,\n SpeedMatrixContainer,\n} from 'raain-model';\nimport {XYType} from '../xytype';\nimport {ProfileService} from '../profile.service';\nimport {FrameSet} from './FrameSet';\nimport {GaugeNodeFilter} from './GaugeNodeFilter';\n\nexport interface ICompareTarget {\n date: Date;\n rainComputationId: string;\n rainComputationQualityId: string;\n}\n\nexport interface IUICompare {\n name: string;\n comparePoints: XYType[];\n comparePointsMax: XYType;\n comparePointsHistory: QualityPoint[];\n remarks: string;\n}\n\nexport class CompareManager {\n public gaugesToFilter: GaugeNodeFilter[];\n public rainNodeGauges: string[];\n\n public gaugesInMap: MapLatLng[];\n public gaugesInCompare: MapLatLng[];\n public selectedGauges: MapLatLng[];\n public selectedPixels: MapLatLng[];\n public pixelsSolutions: 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\n public currentQualityDoneDate: Date;\n public currentQualityLaunchedBy: string;\n public currentQualityTimeSpentInMs: number;\n public globalComparePoints: XYType[];\n public globalComparePointsMax: XYType;\n\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 }\n\n protected static CompareDate(date1: Date, date2: Date, minutes: number): boolean {\n const date1AsDate: Date = new Date(date1.getTime());\n const date2Diff = new Date(date2.getTime());\n date2Diff.setMinutes(date2Diff.getMinutes() + minutes);\n const diff = Math.round((date1AsDate.getTime() - date2Diff.getTime()) / (60 * 1000));\n return diff === 0;\n }\n\n public cleanAll() {\n this.gaugesInMap = [];\n this.gaugesToFilter = [];\n this.rainNodeGauges = [];\n this.gaugesInCompare = [];\n this.selectedGauges = [];\n this.selectedPixels = [];\n this.pixelsSolutions = [];\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 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.map((c) => {\n return {\n name: c.name,\n comparePoints: c.qualityPoints.map(\n (p) =>\n new XYType(p.getGaugeValue(), p.getRainValue(), 2, p.gaugeLabel, p.gaugeId)\n ),\n comparePointsMax: new XYType(c.maxValue * 1.2, c.maxValue * 1.2),\n comparePointsHistory: c.qualityPointsLegacy,\n remarks: c.remarks,\n };\n });\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 this.compareSpeedMatrix =\n comparePerDate.rainComputationQuality.qualitySpeedMatrixContainer.renderMergedMatrix({\n normalize: true,\n });\n this.compareTrustedIndicator =\n comparePerDate.rainComputationQuality.qualitySpeedMatrixContainer.getTrustedIndicators()[0];\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 / 12) * 1.2;\n this.globalComparePoints = this.buildCompares.compareCumulative.qualityPoints.map(\n (qp) =>\n new XYType(\n qp.getGaugeValue() / 12,\n qp.getRainValue() / 12,\n 2,\n qp.gaugeLabel,\n qp.gaugeId\n )\n );\n this.globalComparePointsMax = new XYType(maxValue, maxValue);\n } catch (e) {\n console.warn(e);\n }\n }\n\n async setGaugesInMap() {\n const gaugesToFilter = await this.profileService.getGauges(this.rainNode?.id);\n this.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 this.rainNodeGauges = this.rainNode.getLinks('gauge').map((l) => l.getId());\n\n const visibleGauges = this.gaugesToFilter.filter(\n (g) => this.rainNodeGauges.indexOf(g.id) > -1\n );\n const mapLatLng: MapLatLng[] = [];\n for (const gauge of visibleGauges) {\n mapLatLng.push(\n new MapLatLng(gauge.latitude, gauge.longitude, undefined, gauge.id, gauge.name)\n );\n }\n this.gaugesInMap = mapLatLng;\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 // console.log('selectGauge', gaugeId, compareIndex);\n\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 return this.resetSelectedGauges();\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 dates: Date[] = targetsOrdered.map((t) => t.date);\n const qualities: RainComputationQuality[] = dates\n .filter((d) => !!d)\n .map((d) => this.getRainComputationQuality(d));\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 (compareIndex < 0 || this.compareNames.length < compareIndex) {\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 const rainComputationQuality = await this.profileService.getRainCompareByDate(\n this.rainNode.id,\n target.rainComputationId,\n target.date\n );\n if (rainComputationQuality) {\n this.rainComputationQualitiesPerDate[target.date.toISOString()] =\n rainComputationQuality;\n }\n } catch (e) {\n console.warn(e);\n }\n }\n }\n }\n\n protected getRainComputationQuality(date: Date): RainComputationQuality {\n return this.rainComputationQualitiesPerDate[date.toISOString()];\n }\n\n protected selectGaugeInCompare() {\n const globalComparePoints = JSON.parse(JSON.stringify(this.globalComparePoints));\n for (const p of globalComparePoints) {\n if (p.id === this.selectedGaugeInPoints?.gaugeId) {\n p.r = 10;\n } else {\n p.r = 2;\n }\n }\n this.globalComparePoints = globalComparePoints;\n\n for (const compare of this.uiCompares) {\n const comparePoints = JSON.parse(JSON.stringify(compare.comparePoints));\n comparePoints.forEach((p) => {\n if (p.id === this.selectedGaugeInPoints?.gaugeId) {\n p.r = 10;\n } else {\n p.r = 3;\n }\n });\n compare.comparePoints = comparePoints;\n }\n }\n\n protected resetSelectedGauges() {\n // console.log('resetSelectedGauges reset');\n this.selectedGauge = null;\n this.selectedGaugeInPoints = null;\n this.selectedGauges = [];\n this.selectedPixels = [];\n this.pixelsSolutions = [];\n this.selectGaugeInCompare();\n }\n}\n","export class FrameSet {\n constructor(\n public date: Date,\n public radarMeasureIds: string[] = [],\n public rainComputationId: string = null,\n public rainComputationVersion: string = null,\n public rainComputationQualities: {\n version: string;\n id: string;\n }[] = []\n ) {}\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 {Subject, takeUntil, timer} from 'rxjs';\nimport {switchMap} from 'rxjs/operators';\nimport {RainNode} from 'raain-model';\nimport {TimeframeContainer, TimeframeContainers} from 'raain-ui';\nimport {RadarService} from '../radar.service';\nimport {ProfileService} from '../profile.service';\nimport {CompareManager} from './CompareManager';\nimport {XYType} from '../xytype';\n\nexport class RefreshManager {\n public rainComputationMapDate: Date;\n public rainComputationMapDoneDate: Date;\n public rainComputationMapLaunchedBy: string;\n public rainComputationMapTimeSpentInMs: number;\n protected closeRefreshTimer: Subject<unknown>;\n protected countsPeriod: {\n percentImages?: XYType[];\n queueRunning?: number;\n };\n protected timeframesFromRadars: FrameSet[];\n protected timeframesFromRadarsExtended: FrameSet[];\n protected timelineSelectedFrameSet: FrameSet;\n protected timeframeDates: Date[];\n protected removeDuplicate: boolean;\n protected dataInternal: boolean;\n protected onRefreshInProgress: (\n countPeriods: {\n percentImages?: XYType[];\n queueRunning?: 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.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 }\n\n private _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 static Delay(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\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.countsPeriod = {};\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 // console.log('no correct dateShown', dateShown, this.timeframesFromRadarsExtended);\n return;\n }\n\n // build [current, previous, next] targets\n const current: FrameSet = currents[0];\n const position = this.timeframesFromRadarsExtended.indexOf(current);\n let previous: FrameSet = null,\n next: FrameSet = null;\n const positionNames: string[] = ['' + current.date.getTime()];\n const frameSets = {};\n frameSets['' + current.date.getTime()] = current;\n if (position > 0) {\n previous = this.timeframesFromRadarsExtended[position - 1];\n positionNames.push('' + previous.date.getTime());\n frameSets['' + previous.date.getTime()] = previous;\n }\n if (position < this.timeframesFromRadarsExtended.length) {\n next = this.timeframesFromRadarsExtended[position + 1];\n if (next?.date) {\n positionNames.push('' + next.date.getTime());\n frameSets['' + next.date.getTime()] = next;\n }\n }\n\n // align Map with targets\n const targets: {\n date: Date;\n rainComputationId: string;\n rainComputationQualityId: string;\n cumulativeHours: number;\n }[] = [];\n for (const positionName of positionNames) {\n if (frameSets[positionName]) {\n const target = frameSets[positionName];\n target.rainComputationQualityId = this.getRainComputationQualityTarget(target);\n target.withGauge = withGaugesMeasures;\n target.cumulativeHours = cumulativeHours;\n targets.push(target);\n\n const timeframeContainers = await this.refreshMapTimeframeContainers(target);\n\n if (positionName === '' + current.date.getTime()) {\n this.onFetchDone(timeframeContainers).then((ignored) => {});\n }\n }\n }\n\n // align Compare with current date\n this.refreshCompareQuality(current).then((ignored) => {});\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.checkPeriod();\n\n this.dataInternal = dataInternal;\n this.compareManager.cleanAll();\n let refreshInProgress = false;\n let refreshDone = false;\n\n timer(1000, 15000)\n .pipe(\n switchMap(async () => {\n if (refreshInProgress) {\n return refreshDone;\n }\n\n refreshInProgress = true;\n this.onRefreshInProgress(await this.refreshCounts(), this.timeframeDates).then(\n (ignored) => {}\n );\n refreshDone = await this.refreshPeriodInsidePolling();\n if (!refreshDone) {\n refreshInProgress = false;\n }\n return refreshDone;\n }),\n takeUntil(this.closeRefreshTimer)\n )\n .subscribe({\n next: async (refreshFinished: boolean) => {\n if (refreshFinished) {\n this.closeRefreshTimer.next(null);\n await this.onRefreshDone(this.timeframeDates);\n }\n },\n error: (error: any) => {\n console.error('error in refresh', error);\n },\n });\n }\n\n setRemoveDuplicate(b: boolean) {\n this.removeDuplicate = b;\n }\n\n protected checkPeriod() {\n if (this.period.begin.getTime() === this.period.end.getTime()) {\n throw new Error('need a period');\n }\n }\n\n protected async refreshCounts() {\n this.countsPeriod = await this.profileService.getCounts(this.rainNode.id, {\n range: 'day',\n periodBegin: this._period.begin,\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 let done = false;\n try {\n done = this.refreshCheckIfDone();\n\n // behind refresh\n await this.refreshTimeframesFromRadars(done);\n this.refreshGlobalCompareReport(done).then((ignored) => {});\n\n return done;\n } catch (e) {\n console.warn(e);\n }\n\n return done;\n }\n\n protected refreshCheckIfDone(): boolean {\n // console.log('refreshPeriodInsidePolling', this.countsPeriod.computationsByTeam, this.countsPeriod.radarMeasures)\n // return this.countsPeriod.computationsByTeam === this.countsPeriod.radarMeasures;\n return this.countsPeriod.queueRunning === 0;\n }\n\n protected async refreshTimeframesFromRadars(done: boolean) {\n if (!done) {\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 );\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 console.log('timeframesFromRadarsExtended:', this.timeframesFromRadarsExtended);\n\n this.timeframeDates = this.timeframesFromRadars.map((frameSet) => frameSet.date);\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 = [];\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 withGauge: boolean;\n cumulativeHours: number;\n }) {\n if (!target || !target.rainComputationId) {\n console.warn('Pb with refreshMapTimeframeContainers insights');\n return;\n }\n\n const rainNode = this.rainNode;\n const containers: TimeframeContainer[] = [];\n const newCreatedTimeframeContainers = new TimeframeContainers(containers);\n try {\n let rainNodeCartesianMap;\n\n if (!target.cumulativeHours) {\n rainNodeCartesianMap = await this.profileService.getRainComputationCartesianMapById(\n rainNode.id,\n target.rainComputationId\n );\n } else {\n rainNodeCartesianMap =\n await this.profileService.getRainComputationCumulativeMapById(\n rainNode.id,\n target.rainComputationId,\n target.cumulativeHours\n );\n }\n\n if (rainNodeCartesianMap) {\n newCreatedTimeframeContainers.addFromRainComputationMap(\n rainNodeCartesianMap,\n false\n );\n\n this.rainComputationMapDate = rainNodeCartesianMap.date;\n this.rainComputationMapDoneDate = rainNodeCartesianMap.isDoneDate;\n this.rainComputationMapLaunchedBy = rainNodeCartesianMap.launchedBy;\n this.rainComputationMapTimeSpentInMs = rainNodeCartesianMap.timeSpentInMs;\n }\n } catch (e) {\n console.warn('Pb with computations for id:', target.rainComputationId, e);\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 }\n}\n","import {CartesianMeasureValue, CartesianTools, ICartesianMeasureValue, RainNode} from 'raain-model';\nimport {CartesianMapValue} from 'raain-ui';\nimport {RadarService} from '../radar.service';\nimport {ProfileService} from '../profile.service';\n\nexport class ReportManager {\n public sumFn: (c: CartesianMapValue[]) => string;\n public sumValues: CartesianMapValue[];\n protected cartesianTools: CartesianTools;\n\n constructor(\n protected radarService: RadarService,\n protected profileService: ProfileService\n ) {\n this.cartesianTools = new CartesianTools();\n this.cartesianTools.buildLatLngEarthMap();\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 }\n\n async setPeriod(begin: Date, end: Date) {\n const {values, timeframesFromRadars} = await this.refreshTimeframesFromRadars(begin, end);\n this.sumFn = (cartesianMapValues: CartesianMapValue[]) => {\n let sumResult = 0;\n if (cartesianMapValues?.length) {\n sumResult = cartesianMapValues.reduce((p, v) => p + (v.value * 5) / 60, 0);\n sumResult = Math.round((sumResult / cartesianMapValues.length) * 10) / 10; // timeframesFromRadars.length\n }\n return 'w:' + sumResult; // wt\n };\n this.sumValues = values;\n }\n\n protected async refreshTimeframesFromRadars(begin: Date, end: Date) {\n this.rainNode = await this.profileService.getRainTimeframe(this.rainNode.id, begin, end);\n\n const timeframesFromRadarsExtended = await this.radarService.getTimeline(this.rainNode);\n const timeframesFromRadars = timeframesFromRadarsExtended\n .filter(\n (frameSet) =>\n begin.getTime() <= frameSet.date.getTime() &&\n frameSet.date.getTime() <= end.getTime()\n )\n .sort((a, b) => a.date.getTime() - b.date.getTime());\n\n let values: CartesianMapValue[] = [];\n for (const frameSet of timeframesFromRadars) {\n values = values.concat(await this.getValues(frameSet));\n }\n\n return {values, timeframesFromRadars};\n }\n\n protected async getValues(target: {rainComputationId: string}): Promise<CartesianMapValue[]> {\n if (!target || !target.rainComputationId) {\n console.warn('Pb with target insights');\n return [];\n }\n\n let values: CartesianMapValue[] = [];\n try {\n const rainNodeCartesianMap =\n await this.profileService.getRainComputationCartesianMapById(\n this.rainNode.id,\n target.rainComputationId\n );\n\n if (rainNodeCartesianMap) {\n rainNodeCartesianMap.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 console.warn('Pb with computations for id:', target.rainComputationId, e);\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","// 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 }\n\n // const value = (rain.progressIngest + rain.progressComputing) / 2;\n const value = rain.status / 2; // 0\n // if (rain.status === CONSTANTS._RAIN_STATUS_0_READY_TO_BUILD) {\n // value = 0.3;\n // } else if (rain.status === CONSTANTS._RAIN_STATUS_1_BUILDING) {\n // value = 0.6;\n // } else if (rain.status === CONSTANTS._RAIN_STATUS_1_READY_TO_COMPUTE) {\n // value = 1;\n // }\n return value;\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 }\n\n const value = rain.quality / 2;\n return value;\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 const haveNotBeenRed = events.filter((event) => !event.red);\n return haveNotBeenRed;\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 {\n CompareManager,\n FrameSet,\n mapDateRangeToString,\n RefreshManager,\n ReportManager,\n} 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 reportManager: ReportManager;\n @Input()\n public profileService: ProfileService;\n @Input()\n public radarService: RadarService;\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 };\n\n public gaugeSelectedPoints: {\n label: string;\n style: string;\n values: {date: Date; value: number}[];\n }[];\n public toggleHistory: boolean;\n public toggleMap: boolean;\n public toggleCompare: boolean;\n public toggleGaugeMeasures: boolean;\n public toggleRemoveCompareDuplicate: boolean;\n public toggleCumulative: boolean;\n public refreshInProgress: boolean;\n 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 (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 {date: RaainDetailsComponent.DateUTC(c.name), value: c.x};\n }),\n },\n {\n label: '% Images',\n style: 'bar',\n values: hourCounts.percentImages.map((c) => {\n return {date: RaainDetailsComponent.DateUTC(c.name), value: c.x};\n }),\n },\n {\n label: 'Rainy Sum',\n style: 'line',\n values: hourCounts.rainySum.map((c) => {\n return {date: RaainDetailsComponent.DateUTC(c.name), value: c.x};\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 {date: RaainDetailsComponent.DateUTC(c.name), value: c.x};\n }),\n },\n {\n label: '% Images',\n style: 'bar',\n values: counts.percentImages.map((c) => {\n return {date: RaainDetailsComponent.DateUTC(c.name), value: c.x};\n }),\n },\n {\n label: '% Quality',\n style: 'line',\n values: counts.percentQ.map((c) => {\n return {date: RaainDetailsComponent.DateUTC(c.name), value: c.x};\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.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 this.refreshManager.refresh(false, true).then((ignored) => {});\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 }\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 await this.compareManager.setGaugesInMap();\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.refreshManager.refresh(false, this.toggleAdmin).then((ignored) => {});\n }\n\n async onReportClick() {\n await this.reportManager.setPeriod(this.dateShown, this.dateShown);\n }\n\n async onReportCumulativeClick() {\n await this.reportManager.setPeriod(this.periodBegin, this.periodEnd);\n }\n\n async launchComputation() {\n await this.profileService.launchRainComputation(this.rainNode.id, this.dateShown);\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).then((ignored) => {});\n }\n\n getPercentOfImages() {\n if (!this.countsPeriod.percentImages?.length) {\n return 0;\n }\n\n const duringPeriod = this.countsPeriod.percentImages.filter(\n (a) => new Date(a.name).getTime() === this.periodBegin.getTime()\n );\n const summed = duringPeriod.reduce((a, b) => a + (b.x ?? 0), 0);\n return summed / duringPeriod.length;\n }\n\n private cleanAll() {\n this.borders = [];\n\n this.timeframeContainers = new TimeframeContainers([]);\n this.currentTimeframeTarget = null;\n this.timeframeDates = [];\n this.countPoints = [];\n this.countsPeriod = {};\n this.gaugeSelectedPoints = [];\n\n this.toggleHistory = false;\n this.toggleMap = false;\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.refreshManager.rainNode = this.rainNode;\n this.compareManager.rainNode = this.rainNode;\n this.reportManager.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(this.rainNode.getLink('team').getId());\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 },\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 this.timeframeContainers = timeframeContainers;\n }\n\n private async change(changes: SimpleChanges) {\n await this.init();\n }\n}\n","<!-- all contents -->\n<ion-list *ngIf=\"rainNode\">\n\n <!-- rainNode titles -->\n <ion-item lines=\"none\">\n <ion-icon *ngIf=\"(rainNode | hasGoodQuality)\" color=\"success\" name=\"radio-button-off\" slot=\"start\"></ion-icon>\n <ion-icon *ngIf=\"!(rainNode | hasGoodQuality)\" color=\"warning\" name=\"radio-button-off\" slot=\"start\"></ion-icon>\n <ion-card-title>{{ rainNode.name }}</ion-card-title>\n <ion-card-subtitle>by {{ teamNode?.name }}</ion-card-subtitle>\n <ion-toggle (ionChange)=\"onEnableCountHistoryTab(rainNode)\" [(ngModel)]=\"toggleHistory\"\n [checked]=\"toggleHistory\"\n slot=\"end\"></ion-toggle>\n </ion-item>\n\n <!-- count map -->\n <ion-item *ngIf=\"toggleHistory\" lines=\"none\">\n <ion-card id=\"card-count\">\n <ion-card-content>\n <raain-date-dynamic (changedDate)=\"onDateChangeInCount($event)\"\n [currentHeight]=\"300\"\n [fetchData]=\"fetchDataWrapper\"\n [points]=\"countPoints\"></raain-date-dynamic>\n </ion-card-content>\n </ion-card>\n </ion-item>\n\n <!-- period select -->\n <ion-item>\n <ion-icon name=\"calendar\" slot=\"start\"></ion-icon>\n <ion-button (click)=\"setPeriodOfNow()\" fill=\"outline\" slot=\"start\">\n Now\n </ion-button>\n <ion-label class=\"ion-hide-md-down\" slot=\"start\" style=\"max-width: fit-content; margin-right: 5px\">\n Start:\n <input (change)=\"onPeriodBeginChange($event)\"\n [value]=\"periodBeginAsString\"\n type=\"datetime-local\">\n Local time. &nbsp; During:\n </ion-label>\n <ion-select (ionDismiss)=\"onPeriodDurationChange($event)\" [(ngModel)]=\"periodDurationAsString\"\n class=\"ion-hide-md-down\"\n id=\"periodDuration\" interface=\"popover\"\n slot=\"start\">\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>\n\n <ion-label>{{ onChangeDetectionTest(rainNode) }}</ion-label>\n\n <ion-button (click)=\"refreshMap()\" *ngIf=\"!refreshInProgress\"\n slot=\"end\">\n refresh map\n </ion-button>\n </ion-item>\n\n <ion-progress-bar *ngIf=\"refreshInProgress\" color=\"primary\" type=\"indeterminate\"></ion-progress-bar>\n\n <!-- map info -->\n <ion-item *ngIf=\"!(getPercentOfImages())\" lines=\"none\">\n <ion-icon name=\"map\" slot=\"start\"></ion-icon>\n <ion-label style=\"color:lightgray; font-size: small\">\n No radar measure.\n </ion-label>\n </ion-item>\n <ion-item *ngIf=\"getPercentOfImages()\" lines=\"none\">\n <ion-icon name=\"map\" slot=\"start\"></ion-icon>\n <ion-label style=\"color:lightgray; font-size: small\">\n % Images: {{ getPercentOfImages() }}\n </ion-label>\n\n <ion-toggle (ionChange)=\"onToggleMap($event)\" [(ngModel)]=\"toggleMap\" [checked]=\"toggleMap\"\n slot=\"end\"></ion-toggle>\n </ion-item>\n\n <!-- map -->\n <ion-item *ngIf=\"toggleMap\" lines=\"none\">\n <ion-grid>\n <ion-row>\n <ion-col size-lg=\"7\">\n <raain-map\n (changedDate)=\"onDateChangeInMap($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 }\"\n [sumFn]=\"reportManager.sumFn\"\n [sumValues]=\"reportManager.sumValues\"\n [timeframeContainers]=\"timeframeContainers\"\n [timeframeDates]=\"timeframeDates\"\n ></raain-map>\n </ion-col>\n\n <ion-col class=\"ion-hide-xl-down\" size-lg=\"5\">\n <ion-button color=\"medium\" fill=\"clear\">\n Cumulative\n <ion-toggle [(ngModel)]=\"toggleCumulative\" [checked]=\"toggleCumulative\"\n color=\"secondary\"></ion-toggle>\n </ion-button>\n\n\n <p>\n computed: {{ refreshManager.rainComputationMapDoneDate | date:'yyyy-MM-dd HH:mm' }}<br>\n launched by: {{ refreshManager.rainComputationMapLaunchedBy }}<br>\n time spent (ms): {{ refreshManager.rainComputationMapTimeSpentInMs }}\n </p>\n\n <raain-compare-stack\n (selectedPoint)=\"onGaugeSelectInCompare($event)\"\n [compareManager]=\"compareManager\"\n [cumulative]=\"toggleCumulative\"></raain-compare-stack>\n\n <small>\n <span\n *ngIf=\"refreshManager.rainComputationMapDoneDate?.getTime() <= compareManager.currentQualityDoneDate?.getTime() + 60000\">\n {{ compareManager.currentQualityDoneDate | date:'yyyy-MM-dd HH:mm' }}</span>\n <span\n *ngIf=\"refreshManager.rainComputationMapDoneDate?.getTime() > compareManager.currentQualityDoneDate?.getTime() + 60000\"\n style=\"color: red; font-size: larger\">\n {{ compareManager.currentQualityDoneDate | date:'yyyy-MM-dd HH:mm' }}\n BEFORE {{ refreshManager.rainComputationMapDoneDate | date:'yyyy-MM-dd HH:mm' }}</span>\n gaugesInCompare ? {{ compareManager.gaugesInCompare.length }}\n globalComparePoints ? {{ compareManager.globalComparePoints.length }}\n launchedBy: {{ compareManager.currentQualityLaunchedBy }}\n version: {{ compareManager.compareVersion }}\n timeSpentInMs: {{ compareManager.currentQualityTimeSpentInMs }}\n </small>\n </ion-col>\n\n </ion-row>\n </ion-grid>\n </ion-item>\n\n <!-- gauge values -->\n <ion-item *ngIf=\"gaugeSelectedPoints.length && gaugeSelectedPoints[0].values.length\" lines=\"none\">\n <ion-card>\n <ion-card-content>\n <raain-date-focus [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 </ion-item>\n\n <ion-progress-bar *ngIf=\"refreshInProgress\" color=\"primary\" type=\"indeterminate\"></ion-progress-bar>\n\n</ion-list>\n","import {Injectable} from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class Cache {\n private readonly _cache: any;\n\n constructor() {\n this._cache = {};\n }\n\n public async getValue(key: string, asyncGetter): Promise<any> {\n if (!this._cache.hasOwnProperty(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];\n }\n\n public putValue(key: string, value: any): 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 RadarNode,\n RainComputation,\n RainComputationMap,\n RainComputationQuality,\n RainNode,\n SpeedMatrixContainer,\n TeamNode,\n} from 'raain-model';\n\nimport {Storage} from './storage.service';\n\nimport {FidjStorage, FidjStorageNode} from './fidj-storage.model';\nimport {ErrorInterface, FidjService, LoggerLevelEnum} from 'fidj-angular';\nimport {XYType} from './xytype';\nimport {GaugeNodeFilter} from './tools';\nimport {Router} from '@angular/router';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ProfileService {\n public readyForSync: BehaviorSubject<boolean>;\n public asTeamId: string;\n\n protected email: string;\n protected isDemo: boolean;\n protected roles: Array<string>;\n protected nodeData: FidjStorageNode;\n protected fidjStorage: FidjStorage;\n protected haveTryToReconnect: boolean;\n\n constructor(\n protected storage: Storage,\n protected fidjService: FidjService,\n protected httpClient: HttpClient,\n private router: Router\n ) {\n this.email = this.storage.get('raain-email');\n this.asTeamId = this.storage.get('raain-asTeamId');\n this.readyForSync = new BehaviorSubject<boolean>(false);\n this.roles = [];\n this.fidjStorage = new FidjStorage(storage);\n this.isDemoMode = false;\n }\n\n get isDemoMode() {\n return this.isDemo;\n }\n\n set isDemoMode(mode) {\n this.isDemo = mode ? mode : true;\n this.fidjStorage.setDemoMode(this.isDemo);\n }\n\n get defaultUrlForAPI() {\n return this.storage.get('raain-urlForAPI');\n }\n\n set defaultUrlForAPI(url: string) {\n this.storage.set('raain-urlForAPI', url);\n }\n\n async refreshProfile(): Promise<FidjStorageNode> {\n try {\n this.nodeData = await this.fidjStorage.getRefreshedNodeCopy(this.fidjService);\n this.setRoles(await this.fidjService.getRoles());\n return this.nodeData;\n } catch (e) {\n await this.checkError(e);\n }\n }\n\n 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 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 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 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('radar').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 ): Promise<RainNode> {\n try {\n let queryPath = '' + rainId + '?format=timeframe';\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.timeframe);\n rainNode.name += '.radar.timeframe';\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 launchRainComputation(rainId: string, date: Date): Promise<RainComputation[]> {\n const response = await this.fidjService.sendOnEndpoint({\n verb: 'POST',\n key: 'rains',\n relativePath: '' + rainId + '/computations',\n data: {\n date: date.toISOString(),\n },\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n });\n\n return response.data.computations?.map((c) => new RainComputation(c));\n }\n\n async getRainComputationCartesianMapById(\n rainId: string,\n rainComputationId: string\n ): Promise<RainComputationMap> {\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 }\n\n async getRainComputationCumulativeMapById(\n rainId: string,\n rainComputationId: string,\n cumulativeHours: number\n ): Promise<RainComputationMap> {\n const queryPath =\n '' + rainId + '/computations/' + rainComputationId + '/cumulative/' + cumulativeHours;\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 }\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 // === 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(rainId?: string): Promise<Array<GaugeNodeFilter>> {\n let queryPath = '';\n if (this.asTeamId) {\n queryPath += '?teamId=' + this.asTeamId;\n }\n if (rainId) {\n if (queryPath) {\n queryPath += '&';\n } else {\n queryPath += '?';\n }\n queryPath += 'rainId=' + rainId;\n }\n\n const gauges = [];\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'gauges',\n verb: 'GET',\n relativePath: queryPath,\n defaultKeyUrl: this.defaultUrlForAPI + '/gauges',\n });\n\n for (const gauge of resp.data.gauges) {\n gauges.push(new GaugeNodeFilter(gauge));\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 // === Private ===\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 + 9;\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 // 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","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 {IonicModule, IonRange} from '@ionic/angular';\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';\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\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 RaainDetailsComponent,\n ],\n imports: [CommonModule, FormsModule, IonicModule, NgOptimizedImage],\n providers: [\n Storage,\n RadarService,\n ProfileService,\n Cache,\n IonRange,\n TimeframeComputationProgress,\n TimeframeQualityProgress,\n ],\n exports: [\n CommonModule,\n NgStyle,\n\n RaainMapComponent,\n RaainCompareComponent,\n RaainCompareStackComponent,\n RaainDateFocusComponent,\n RaainDateDynamicComponent,\n RaainConfigurationComponent,\n RaainSpeedComponent,\n RaainGlobeComponent,\n\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 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","i5.RaainMapComponent","i6.RaainCompareStackComponent","i7.RaainDateFocusComponent","i8.RaainDateDynamicComponent","i9.HasGoodQuality","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/ReportManager.ts","../../src/core/shared/tools/DateRangeTools.ts","../../src/core/shared/shared.const.ts","../../src/core/shared/shared.pipe.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.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 {IconOptions} from 'leaflet';\nimport {\n CartesianMapValue,\n ChartScaleColors,\n ElementsFactory,\n FrameContainer,\n MapElement,\n MapLatLng,\n ScaleElement,\n ScaleElementInput,\n TimeframeContainer,\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 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 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: any;\n @Input()\n public sumFn: any;\n public sumResult: string;\n\n @Output()\n public selectedMarker = new EventEmitter<MapLatLng>();\n\n @Output()\n public changedDate = new EventEmitter<Date>();\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 protected currentFrameContainer: FrameContainer;\n protected cumulativeTimeframeContainers: TimeframeContainers;\n\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 iconOptions: {\n gauges: IconOptions;\n selectedGauges: IconOptions;\n pixels: IconOptions;\n borders: IconOptions;\n gaugesInCompare: IconOptions;\n pixelsSolution: IconOptions;\n };\n\n constructor(\n private ngZone: NgZone,\n private storage: Storage\n ) {\n this.delete();\n\n const iconSize = [40, 40]; // size of the icon\n const iconAnchor = [20, 20]; // point of the icon which will correspond to marker's location\n const pixelSize = [41, 41];\n const pixelAnchor = [20, 20];\n const popupAnchor = [0, -20]; // point from which the popup should open relative to the iconAnchor\n this.iconOptions = {\n gauges: {iconUrl: './assets/maps/marker-pluvio.png', iconSize, iconAnchor, popupAnchor},\n gaugesInCompare: {\n iconUrl: './assets/maps/marker-pluvio-diag.png',\n iconSize,\n iconAnchor,\n popupAnchor,\n },\n selectedGauges: {\n iconUrl: './assets/maps/marker-pluvio-diag-select.png',\n iconSize,\n iconAnchor,\n popupAnchor,\n },\n pixels: {iconUrl: './assets/maps/marker-rain.png', iconSize, iconAnchor, popupAnchor},\n pixelsSolution: {\n iconUrl: './assets/maps/marker-rain2.png',\n iconSize: pixelSize,\n iconAnchor: pixelAnchor,\n popupAnchor,\n },\n borders: {\n iconUrl: './assets/maps/marker-shadow.png',\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 && new Date(this.dateToShowAsString).getTime() === this.dateToShow?.getTime())\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 changeCumulative() {\n if (this.showCumulative) {\n const factory = new ElementsFactory(this.coordinates, true);\n this.createScale(factory, 'mm');\n this.cumulativeTimeframeContainers = this.timeframeContainers;\n } else {\n const factory = new ElementsFactory(this.coordinates, true);\n this.createScale(factory, 'mm/h');\n }\n\n this.updateTimeframe();\n }\n\n public changeAlpha() {\n // console.log('changeAlpha', this.alpha);\n this.storage.set('raain-map-alpha', this.alpha);\n if (!this.mapElement || !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 const markers = [\n {iconsLatLng: this.markers.gauges, iconsOptions: this.iconOptions.gauges},\n {\n iconsLatLng: this.markers.selectedGauges,\n iconsOptions: this.iconOptions.selectedGauges,\n },\n {\n iconsLatLng: this.markers.gaugesInCompare,\n iconsOptions: this.iconOptions.gaugesInCompare,\n },\n {iconsLatLng: this.markers.pixels, iconsOptions: this.iconOptions.pixels},\n {\n iconsLatLng: this.markers.pixelsSolution,\n iconsOptions: this.iconOptions.pixelsSolution,\n },\n // {iconsLatLng: this.markers.borders, iconsOptions: this.iconOptions.borders},\n ];\n\n const factory = new ElementsFactory(this.coordinates, true);\n this.createScale(factory, '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,\n });\n\n this.changeAlpha();\n\n this.mapElement.mapLeaflet?.on('mousemove', (evt) => this.onMapMouseMove(evt));\n this.mapElement.markersProduced?.forEach((m) =>\n m.on('click', (evt) => this.onMapClick(evt))\n );\n this.onSizeChanged = () => {\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 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.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 new Date(changes.defaultDate.currentValue).getTime() ===\n new Date(changes.defaultDate.previousValue).getTime()\n ) {\n return;\n }\n possibleNewDefaultDate = this.defaultDate;\n }\n\n if (changes.markers && this.mapElement?.markersLayer) {\n const markers = [\n {iconsLatLng: this.markers.gauges, iconOptions: this.iconOptions.gauges},\n {\n iconsLatLng: this.markers.selectedGauges,\n iconOptions: this.iconOptions.selectedGauges,\n },\n {\n iconsLatLng: this.markers.gaugesInCompare,\n iconOptions: this.iconOptions.gaugesInCompare,\n },\n {iconsLatLng: this.markers.pixels, iconOptions: this.iconOptions.pixels},\n {\n iconsLatLng: this.markers.pixelsSolution,\n iconOptions: this.iconOptions.pixelsSolution,\n },\n // {iconsLatLng: this.markers.borders, iconOptions: this.iconOptions.borders},\n ];\n const markersProduced = this.mapElement.markersLayer.render(markers).markers;\n if (markersProduced) {\n markersProduced.forEach((m) => m.on('click', (evt) => this.onMapClick(evt)));\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 (changes.markers && this.markers.selectedGauges.length === 1) {\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 const drawer = this.mapElement.compositeLayer.getFirstDrawer();\n this.sumResult = drawer?.getExecOfWindowPoints(this.sumValues, this.sumFn);\n }\n\n this.changeNavigation(possibleNewDefaultDate);\n }\n\n private changeNavigation(defaultDate?: Date) {\n // update possible names\n if (this.timeframeContainers && 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) => d.getTime() === defaultDate.getTime()).length === 1\n ) {\n this.dateToShow = defaultDate;\n }\n if (\n !this.dateToShow &&\n this.possibleDates.length > 0 &&\n this.possibleDates.filter((d) => d.getTime() === this.dateToShow?.getTime()).length !==\n 1\n ) {\n this.dateToShow = this.possibleDates[0];\n }\n this.dateToShowAsString = this.dateToShow.toISOString();\n }\n\n private getDateToShowIndex(): number {\n let index = 0;\n for (const date of this.possibleDates) {\n if (date.toISOString().substring(0, 19) === this.dateToShowAsString.substring(0, 19)) {\n break;\n }\n index++;\n }\n return index;\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 = Math.round(valueSelected[0].value * 1000) / 1000;\n valueLat = Math.round(valueSelected[0].lat * 1000) / 1000;\n valueLng = Math.round(valueSelected[0].lng * 1000) / 1000;\n valueLat2 = Math.round(valueSelected[0].lat2 * 1000) / 1000;\n valueLng2 = Math.round(valueSelected[0].lng2 * 1000) / 1000;\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 for (const gauge of this.markers.gauges) {\n if (gauge.id === evt?.target?.options?.alt) {\n this.markers.selectedGauges = [gauge];\n break;\n }\n }\n\n this.selectedMarker.emit(\n new MapLatLng(evt.latlng?.lat, evt.latlng?.lng, undefined, evt.id, evt.name)\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 (!this.showCumulative) {\n this.mapElement.updateMapTimeframe(this.timeframeContainers);\n this.currentFrameContainer = this.timeframeContainers?.containers[0]?.timeframe[0];\n } else if (this.timeframeContainers.containers[0]?.timeframe) {\n for (const container of this.timeframeContainers.containers[0].timeframe) {\n const alreadyExist =\n this.cumulativeTimeframeContainers.containers[0].timeframe.filter(\n (c) => new Date(c.date).getTime() === new Date(container.date).getTime()\n );\n if (alreadyExist.length < 1) {\n this.cumulativeTimeframeContainers.containers[0].timeframe.push(container);\n }\n }\n console.log(new Date().toISOString(), 'cartesianMapValues: computing...');\n const cartesianMapValues =\n this.cumulativeTimeframeContainers.getCumulativeCartesianValues();\n console.log(new Date().toISOString(), 'cartesianMapValues:', cartesianMapValues.length);\n this.currentFrameContainer = new FrameContainer(\n this.defaultDate,\n cartesianMapValues,\n false,\n true\n );\n\n this.mapElement.updateMapTimeframe(\n new TimeframeContainers([\n new TimeframeContainer(\n this.defaultDate.toISOString(),\n [this.currentFrameContainer],\n 'cumulative'\n ),\n ])\n );\n }\n\n this.changeAlpha();\n }\n\n private createScale(factory: ElementsFactory, label: string) {\n this.deleteScale();\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","<ion-grid>\n\n <ion-row class=\"ion-align-items-end\">\n <ion-col id=\"map-buttons\" size-xs=\"3\">\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 </ion-col>\n <ion-col class=\"ion-text-start\" id=\"map-date\" size-md=\"4\" size-xs=\"5\">\n <ion-select (ionDismiss)=\"showTimeframe()\" [(ngModel)]=\"dateToShowAsString\" interface=\"popover\"\n placeholder=\"Period\" value=\"{{dateToShowAsString}}\">\n <ion-select-option *ngFor=\"let dateToSelect of possibleDates\" value=\"{{dateToSelect.toISOString()}}\">\n {{ dateToSelect | date:'yyyy-MM-dd HH:mm' }}\n </ion-select-option>\n </ion-select>\n </ion-col>\n <ion-col class=\"ion-hide-md-down\" size-xs=\"2\">\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-col>\n <ion-col class=\"ion-hide-md-down\" size-xs=\"2\">\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 </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]=\"100\">\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=\"7\">\n <span [innerHTML]=\"mcText\"></span>\n </ion-col>\n <ion-col size-sm=\"2\" size-xs=\"12\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ sumResult }}</ion-button>\n </ion-col>\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-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 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</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\n <!--\n <ion-col>\n <ion-card id=\"card-matrix\">\n <div *ngIf=\"compareManager?.compareNames?.length\">\n <raain-speed [compareSpeedMatrix]=\"compareManager.compareSpeedMatrix\"\n [compareTrustedIndicator]=\"compareManager.compareTrustedIndicator\"\n [currentHeight]=\"300\"\n ></raain-speed>\n </div>\n <ion-card-content>\n {{ compareManager?.compareVersion }}\n </ion-card-content>\n </ion-card>\n </ion-col> -->\n\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>{{ 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\n <!--\n <ion-card id=\"card-selected-gauge\" slot=\"end\">\n <ion-card-content>\n <ion-accordion-group>\n\n <ion-accordion value=\"selected\">\n <ion-item color=\"light\" slot=\"header\">\n <ion-label>debug</ion-label>\n </ion-item>\n\n <div class=\"ion-padding\" slot=\"content\">\n date: {{ currentTimeframeTarget.date | date:'yyyy-MM-dd HH:mm:ss' }}<br>\n radarMeasureId: {{ currentTimeframeTarget.radarMeasureId }}<br>\n rainComputationId: {{ currentTimeframeTarget.rainComputationId }}<br>\n rainComputationVersion: {{ currentTimeframeTarget.rainComputationVersion }}<br>\n rainComputationQualitiesPerDate :\n <ul>\n <li *ngFor=\"let rcq of currentTimeframeTarget.rainComputationQualitiesPerDate\">\n {{ rcq.version }} - {{ rcq.id }}\n </li>\n </ul>\n </div>\n\n </ion-accordion>\n <ion-accordion *ngIf=\"selectedGauge\" value=\"context\">\n <ion-item color=\"light\" slot=\"header\">\n <ion-label>{{ selectedGaugeInPointsDetail }}</ion-label>\n </ion-item>\n <div [innerHTML]=\"formatLabelOfSelectedGauge(selectedGaugeInPoints)\" class=\"ion-padding\"\n slot=\"content\"></div>\n </ion-accordion>\n </ion-accordion-group>\n </ion-card-content>\n </ion-card>\n -->\n</div>\n","import {\n AfterViewChecked,\n Component,\n ElementRef,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport {EarthMapElement, EarthMapElementInput, ElementsFactory} from 'raain-ui';\n\n@Component({\n selector: 'raain-globe',\n templateUrl: './raain-globe.component.html',\n styleUrls: ['./raain-globe.component.scss'],\n})\nexport class RaainGlobeComponent implements AfterViewChecked, OnDestroy, OnChanges {\n @Input()\n public points: {\n label: string;\n style: string;\n values: {date: Date; value: number}[];\n }[];\n\n @Input()\n public currentHeight: number;\n public currentWidth: number;\n\n @ViewChild('canvasElement')\n protected canvasElement: ElementRef;\n\n private earthMapElement: EarthMapElement;\n private onSizeChanged;\n private created: boolean;\n\n constructor(private ngZone: NgZone) {\n this.onSizeChanged = () => {};\n }\n\n public ngAfterViewChecked(): void {\n this.create();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.change(changes);\n }\n\n public ngOnDestroy(): void {\n this.delete();\n }\n\n @HostListener('window:resize', ['$event'])\n private onResize(event: any): void {\n this.updateMapSize();\n }\n\n private create() {\n if (this.created) {\n return;\n }\n this.created = true;\n\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n const factory = new ElementsFactory();\n try {\n this.earthMapElement = factory.createEarthMap(\n this.canvasElement.nativeElement,\n new EarthMapElementInput('')\n );\n } catch (e) {\n console.warn('dynamic focus creation issue', e);\n }\n }, 100);\n });\n }\n\n private async delete() {\n // await this.earthMapElement?.destroy();\n this.created = false;\n }\n\n private async change(changes: SimpleChanges) {\n await this.delete();\n this.create();\n }\n\n private updateMapSize(): void {\n const mapDivWidth = this.canvasElement.nativeElement.parentNode?.parentNode['clientWidth'];\n const padding = 20;\n let currentWidth =\n mapDivWidth ||\n window.innerWidth ||\n document.documentElement.clientWidth ||\n document.body.clientWidth;\n const currentHeight =\n this.currentHeight ||\n window.innerHeight ||\n document.documentElement.clientHeight ||\n document.body.clientHeight;\n currentWidth -= padding;\n this.currentWidth = currentWidth;\n this.currentHeight = currentHeight;\n\n this.ngZone.run(() => {\n this.onSizeChanged();\n });\n }\n}\n","<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\" size-sm=\"12\">\n <div #canvasElement [style.height.px]=\"currentHeight\" id=\"canvas-container\">\n </div>\n </ion-col>\n </ion-row>\n</ion-grid>\n","import {MapLatLng} from 'raain-ui';\nimport {\n IComparePerDate,\n ICompares,\n PositionValue,\n QualityPoint,\n RainComputationQuality,\n RainNode,\n SpeedMatrixContainer,\n} from 'raain-model';\nimport {XYType} from '../xytype';\nimport {ProfileService} from '../profile.service';\nimport {FrameSet} from './FrameSet';\nimport {GaugeNodeFilter} from './GaugeNodeFilter';\n\nexport interface ICompareTarget {\n date: Date;\n rainComputationId: string;\n rainComputationQualityId: string;\n}\n\nexport interface IUICompare {\n name: string;\n comparePoints: XYType[];\n comparePointsMax: XYType;\n comparePointsHistory: QualityPoint[];\n remarks: string;\n}\n\nexport class CompareManager {\n public gaugesToFilter: GaugeNodeFilter[];\n public rainNodeGauges: string[];\n\n public gaugesInMap: MapLatLng[];\n public gaugesInCompare: MapLatLng[];\n public selectedGauges: MapLatLng[];\n public selectedPixels: MapLatLng[];\n public pixelsSolutions: 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\n public currentQualityDoneDate: Date;\n public currentQualityLaunchedBy: string;\n public currentQualityTimeSpentInMs: number;\n public globalComparePoints: XYType[];\n public globalComparePointsMax: XYType;\n\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 }\n\n protected static CompareDate(date1: Date, date2: Date, minutes: number): boolean {\n const date1AsDate: Date = new Date(date1.getTime());\n const date2Diff = new Date(date2.getTime());\n date2Diff.setMinutes(date2Diff.getMinutes() + minutes);\n const diff = Math.round((date1AsDate.getTime() - date2Diff.getTime()) / (60 * 1000));\n return diff === 0;\n }\n\n public cleanAll() {\n this.gaugesInMap = [];\n this.gaugesToFilter = [];\n this.rainNodeGauges = [];\n this.gaugesInCompare = [];\n this.selectedGauges = [];\n this.selectedPixels = [];\n this.pixelsSolutions = [];\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 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.map((c) => {\n return {\n name: c.name,\n comparePoints: c.qualityPoints.map(\n (p) =>\n new XYType(p.getGaugeValue(), p.getRainValue(), 2, p.gaugeLabel, p.gaugeId)\n ),\n comparePointsMax: new XYType(c.maxValue * 1.2, c.maxValue * 1.2),\n comparePointsHistory: c.qualityPointsLegacy,\n remarks: c.remarks,\n };\n });\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 this.compareSpeedMatrix =\n comparePerDate.rainComputationQuality.qualitySpeedMatrixContainer.renderMergedMatrix({\n normalize: true,\n });\n this.compareTrustedIndicator =\n comparePerDate.rainComputationQuality.qualitySpeedMatrixContainer.getTrustedIndicators()[0];\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 / 12) * 1.2;\n this.globalComparePoints = this.buildCompares.compareCumulative.qualityPoints.map(\n (qp) =>\n new XYType(\n qp.getGaugeValue() / 12,\n qp.getRainValue() / 12,\n 2,\n qp.gaugeLabel,\n qp.gaugeId\n )\n );\n this.globalComparePointsMax = new XYType(maxValue, maxValue);\n } catch (e) {\n console.warn(e);\n }\n }\n\n async setGaugesInMap() {\n const gaugesToFilter = await this.profileService.getGauges(this.rainNode?.id);\n this.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 this.rainNodeGauges = this.rainNode.getLinks('gauge').map((l) => l.getId());\n\n const visibleGauges = this.gaugesToFilter.filter(\n (g) => this.rainNodeGauges.indexOf(g.id) > -1\n );\n const mapLatLng: MapLatLng[] = [];\n for (const gauge of visibleGauges) {\n mapLatLng.push(\n new MapLatLng(gauge.latitude, gauge.longitude, undefined, gauge.id, gauge.name)\n );\n }\n this.gaugesInMap = mapLatLng;\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 // console.log('selectGauge', gaugeId, compareIndex);\n\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 return this.resetSelectedGauges();\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 dates: Date[] = targetsOrdered.map((t) => t.date);\n const qualities: RainComputationQuality[] = dates\n .filter((d) => !!d)\n .map((d) => this.getRainComputationQuality(d))\n .filter((rcq) => !!rcq);\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 (compareIndex < 0 || this.compareNames.length < compareIndex) {\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 const rainComputationQuality = await this.profileService.getRainCompareByDate(\n this.rainNode.id,\n target.rainComputationId,\n target.date\n );\n if (rainComputationQuality) {\n this.rainComputationQualitiesPerDate[target.date.toISOString()] =\n rainComputationQuality;\n }\n } catch (e) {\n console.warn(e);\n }\n }\n }\n }\n\n protected getRainComputationQuality(date: Date): RainComputationQuality {\n return this.rainComputationQualitiesPerDate[date.toISOString()];\n }\n\n protected selectGaugeInCompare() {\n const globalComparePoints = JSON.parse(JSON.stringify(this.globalComparePoints));\n for (const p of globalComparePoints) {\n if (p.id === this.selectedGaugeInPoints?.gaugeId) {\n p.r = 10;\n } else {\n p.r = 2;\n }\n }\n this.globalComparePoints = globalComparePoints;\n\n for (const compare of this.uiCompares) {\n const comparePoints = JSON.parse(JSON.stringify(compare.comparePoints));\n comparePoints.forEach((p) => {\n if (p.id === this.selectedGaugeInPoints?.gaugeId) {\n p.r = 10;\n } else {\n p.r = 3;\n }\n });\n compare.comparePoints = comparePoints;\n }\n }\n\n protected resetSelectedGauges() {\n // console.log('resetSelectedGauges reset');\n this.selectedGauge = null;\n this.selectedGaugeInPoints = null;\n this.selectedGauges = [];\n this.selectedPixels = [];\n this.pixelsSolutions = [];\n this.selectGaugeInCompare();\n }\n}\n","export class FrameSet {\n constructor(\n public date: Date,\n public radarMeasureIds: string[] = [],\n public rainComputationId: string = null,\n public rainComputationVersion: string = null,\n public rainComputationQualities: {\n version: string;\n id: string;\n }[] = []\n ) {}\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 {Subject, takeUntil, timer} from 'rxjs';\nimport {switchMap} from 'rxjs/operators';\nimport {RainNode} from 'raain-model';\nimport {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 rainComputationMapDate: Date;\n public rainComputationMapDoneDate: Date;\n public rainComputationMapLaunchedBy: string;\n public rainComputationMapTimeSpentInMs: number;\n protected closeRefreshTimer: Subject<unknown>;\n protected countsPeriod: {\n percentImages?: XYType[];\n queueRunning?: number;\n };\n protected timeframesFromRadars: FrameSet[];\n protected timeframesFromRadarsExtended: FrameSet[];\n protected timelineSelectedFrameSet: FrameSet;\n protected timeframeDates: Date[];\n protected removeDuplicate: boolean;\n protected dataInternal: boolean;\n protected onRefreshInProgress: (\n countPeriods: {\n percentImages?: XYType[];\n queueRunning?: 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.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 }\n\n private _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 static Delay(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\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.countsPeriod = {};\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 // console.log('no correct dateShown', dateShown, this.timeframesFromRadarsExtended);\n return;\n }\n\n // build [current, previous, next] targets\n const current: FrameSet = currents[0];\n const position = this.timeframesFromRadarsExtended.indexOf(current);\n let previous: FrameSet = null,\n next: FrameSet = null;\n const positionNames: string[] = ['' + current.date.getTime()];\n const frameSets = {};\n frameSets['' + current.date.getTime()] = current;\n if (position > 0) {\n previous = this.timeframesFromRadarsExtended[position - 1];\n positionNames.push('' + previous.date.getTime());\n frameSets['' + previous.date.getTime()] = previous;\n }\n if (position < this.timeframesFromRadarsExtended.length) {\n next = this.timeframesFromRadarsExtended[position + 1];\n if (next?.date) {\n positionNames.push('' + next.date.getTime());\n frameSets['' + next.date.getTime()] = next;\n }\n }\n\n // align Map with targets\n const targets: {\n date: Date;\n rainComputationId: string;\n rainComputationQualityId: string;\n cumulativeHours: number;\n }[] = [];\n for (const positionName of positionNames) {\n if (frameSets[positionName]) {\n const target = frameSets[positionName];\n target.rainComputationQualityId = this.getRainComputationQualityTarget(target);\n target.withGauge = withGaugesMeasures;\n target.cumulativeHours = cumulativeHours;\n targets.push(target);\n\n const timeframeContainers = await this.refreshMapTimeframeContainers(target);\n\n if (positionName === '' + current.date.getTime()) {\n this.onFetchDone(timeframeContainers).then((ignored) => {});\n }\n }\n }\n\n // align Compare with current date\n this.refreshCompareQuality(current).then((ignored) => {});\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.checkPeriod();\n\n this.dataInternal = dataInternal;\n this.compareManager.cleanAll();\n let refreshInProgress = false;\n let refreshDone = false;\n\n timer(1000, 15000)\n .pipe(\n switchMap(async () => {\n if (refreshInProgress) {\n return refreshDone;\n }\n\n refreshInProgress = true;\n this.onRefreshInProgress(await this.refreshCounts(), this.timeframeDates).then(\n (ignored) => {}\n );\n refreshDone = await this.refreshPeriodInsidePolling();\n if (!refreshDone) {\n refreshInProgress = false;\n }\n return refreshDone;\n }),\n takeUntil(this.closeRefreshTimer)\n )\n .subscribe({\n next: async (refreshFinished: boolean) => {\n if (refreshFinished) {\n this.closeRefreshTimer.next(null);\n await this.onRefreshDone(this.timeframeDates);\n }\n },\n error: (error: any) => {\n console.error('error in refresh', error);\n },\n });\n }\n\n setRemoveDuplicate(b: boolean) {\n this.removeDuplicate = b;\n }\n\n protected checkPeriod() {\n if (this.period.begin.getTime() === this.period.end.getTime()) {\n throw new Error('need a period');\n }\n }\n\n protected async refreshCounts() {\n this.countsPeriod = await this.profileService.getCounts(this.rainNode.id, {\n range: 'day',\n periodBegin: this._period.begin,\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 let done = false;\n try {\n done = await this.refreshCheckIfDone();\n\n // behind refresh\n await this.refreshTimeframesFromRadars(done);\n this.refreshGlobalCompareReport(done).then((ignored) => {});\n\n return done;\n } catch (e) {\n console.warn(e);\n }\n\n return done;\n }\n\n protected async refreshCheckIfDone(): Promise<boolean> {\n // TODO return this.countsPeriod.queueRunning === 0;\n await sleep(5000);\n return true;\n }\n\n protected async refreshTimeframesFromRadars(done: boolean) {\n if (!done) {\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 );\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 console.log('timeframesFromRadarsExtended:', this.timeframesFromRadarsExtended);\n\n this.timeframeDates = this.timeframesFromRadars.map((frameSet) => frameSet.date);\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 = [];\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 withGauge: boolean;\n cumulativeHours: number;\n }) {\n if (!target || !target.rainComputationId) {\n console.warn('Pb with refreshMapTimeframeContainers insights');\n return;\n }\n\n const rainNode = this.rainNode;\n const containers: TimeframeContainer[] = [];\n const newCreatedTimeframeContainers = new TimeframeContainers(containers);\n try {\n let rainNodeCartesianMap;\n\n if (!target.cumulativeHours) {\n rainNodeCartesianMap = await this.profileService.getRainComputationCartesianMapById(\n rainNode.id,\n target.rainComputationId\n );\n } else {\n rainNodeCartesianMap =\n await this.profileService.getRainComputationCumulativeMapById(\n rainNode.id,\n target.rainComputationId,\n target.cumulativeHours\n );\n }\n\n if (rainNodeCartesianMap) {\n newCreatedTimeframeContainers.addFromRainComputationMap(\n rainNodeCartesianMap,\n false\n );\n\n this.rainComputationMapDate = rainNodeCartesianMap.date;\n this.rainComputationMapDoneDate = rainNodeCartesianMap.isDoneDate;\n this.rainComputationMapLaunchedBy = rainNodeCartesianMap.launchedBy;\n this.rainComputationMapTimeSpentInMs = rainNodeCartesianMap.timeSpentInMs;\n }\n } catch (e) {\n console.warn('Pb with computations for id:', target.rainComputationId, e);\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 }\n}\n","import {CartesianMeasureValue, CartesianTools, ICartesianMeasureValue, RainNode} from 'raain-model';\nimport {CartesianMapValue} from 'raain-ui';\nimport {RadarService} from '../radar.service';\nimport {ProfileService} from '../profile.service';\n\nexport class ReportManager {\n public sumFn: (c: CartesianMapValue[]) => string;\n public sumValues: CartesianMapValue[];\n protected cartesianTools: CartesianTools;\n\n constructor(\n protected radarService: RadarService,\n protected profileService: ProfileService\n ) {\n this.cartesianTools = new CartesianTools();\n this.cartesianTools.buildLatLngEarthMap();\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 }\n\n async setPeriod(begin: Date, end: Date) {\n const {values, timeframesFromRadars} = await this.refreshTimeframesFromRadars(begin, end);\n this.sumFn = (cartesianMapValues: CartesianMapValue[]) => {\n let sumResult = 0;\n if (cartesianMapValues?.length) {\n sumResult = cartesianMapValues.reduce((p, v) => p + (v.value * 5) / 60, 0);\n sumResult = Math.round((sumResult / cartesianMapValues.length) * 10) / 10; // timeframesFromRadars.length\n }\n return 'w:' + sumResult; // wt\n };\n this.sumValues = values;\n }\n\n protected async refreshTimeframesFromRadars(begin: Date, end: Date) {\n this.rainNode = await this.profileService.getRainTimeframe(this.rainNode.id, begin, end);\n\n const timeframesFromRadarsExtended = await this.radarService.getTimeline(this.rainNode);\n const timeframesFromRadars = timeframesFromRadarsExtended\n .filter(\n (frameSet) =>\n begin.getTime() <= frameSet.date.getTime() &&\n frameSet.date.getTime() <= end.getTime()\n )\n .sort((a, b) => a.date.getTime() - b.date.getTime());\n\n let values: CartesianMapValue[] = [];\n for (const frameSet of timeframesFromRadars) {\n values = values.concat(await this.getValues(frameSet));\n }\n\n return {values, timeframesFromRadars};\n }\n\n protected async getValues(target: {rainComputationId: string}): Promise<CartesianMapValue[]> {\n if (!target || !target.rainComputationId) {\n console.warn('Pb with target insights');\n return [];\n }\n\n let values: CartesianMapValue[] = [];\n try {\n const rainNodeCartesianMap =\n await this.profileService.getRainComputationCartesianMapById(\n this.rainNode.id,\n target.rainComputationId\n );\n\n if (rainNodeCartesianMap) {\n rainNodeCartesianMap.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 console.warn('Pb with computations for id:', target.rainComputationId, e);\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","// 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 }\n\n // const value = (rain.progressIngest + rain.progressComputing) / 2;\n const value = rain.status / 2; // 0\n // if (rain.status === CONSTANTS._RAIN_STATUS_0_READY_TO_BUILD) {\n // value = 0.3;\n // } else if (rain.status === CONSTANTS._RAIN_STATUS_1_BUILDING) {\n // value = 0.6;\n // } else if (rain.status === CONSTANTS._RAIN_STATUS_1_READY_TO_COMPUTE) {\n // value = 1;\n // }\n return value;\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 }\n\n const value = rain.quality / 2;\n return value;\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 const haveNotBeenRed = events.filter((event) => !event.red);\n return haveNotBeenRed;\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 {\n CompareManager,\n FrameSet,\n mapDateRangeToString,\n RefreshManager,\n ReportManager,\n} 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 reportManager: ReportManager;\n @Input()\n public profileService: ProfileService;\n @Input()\n public radarService: RadarService;\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 };\n\n public gaugeSelectedPoints: {\n label: string;\n style: string;\n values: {date: Date; value: number}[];\n }[];\n public toggleHistory: boolean;\n public toggleMap: boolean;\n public toggleCompare: boolean;\n public toggleGaugeMeasures: boolean;\n public toggleRemoveCompareDuplicate: boolean;\n public toggleCumulative: boolean;\n public refreshInProgress: boolean;\n 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 (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 {date: RaainDetailsComponent.DateUTC(c.name), value: c.x};\n }),\n },\n {\n label: '% Images',\n style: 'bar',\n values: hourCounts.percentImages.map((c) => {\n return {date: RaainDetailsComponent.DateUTC(c.name), value: c.x};\n }),\n },\n {\n label: 'Rainy Sum',\n style: 'line',\n values: hourCounts.rainySum.map((c) => {\n return {date: RaainDetailsComponent.DateUTC(c.name), value: c.x};\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 {date: RaainDetailsComponent.DateUTC(c.name), value: c.x};\n }),\n },\n {\n label: '% Images',\n style: 'bar',\n values: counts.percentImages.map((c) => {\n return {date: RaainDetailsComponent.DateUTC(c.name), value: c.x};\n }),\n },\n {\n label: '% Quality',\n style: 'line',\n values: counts.percentQ.map((c) => {\n return {date: RaainDetailsComponent.DateUTC(c.name), value: c.x};\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.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 this.refreshManager.refresh(false, true).then((ignored) => {});\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 }\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 await this.compareManager.setGaugesInMap();\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.refreshManager.refresh(false, this.toggleAdmin).then((ignored) => {});\n }\n\n async onReportClick() {\n await this.reportManager.setPeriod(this.dateShown, this.dateShown);\n }\n\n async onReportCumulativeClick() {\n await this.reportManager.setPeriod(this.periodBegin, this.periodEnd);\n }\n\n async launchComputation() {\n await this.profileService.launchRainComputation(this.rainNode.id, this.dateShown);\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).then((ignored) => {});\n }\n\n getPercentOfImages() {\n if (!this.countsPeriod.percentImages?.length) {\n return 0;\n }\n\n const duringPeriod = this.countsPeriod.percentImages.filter(\n (a) => new Date(a.name).getTime() === this.periodBegin.getTime()\n );\n const summed = duringPeriod.reduce((a, b) => a + (b.x ?? 0), 0);\n return summed / duringPeriod.length;\n }\n\n private cleanAll() {\n this.borders = [];\n\n this.timeframeContainers = new TimeframeContainers([]);\n this.currentTimeframeTarget = null;\n this.timeframeDates = [];\n this.countPoints = [];\n this.countsPeriod = {};\n this.gaugeSelectedPoints = [];\n\n this.toggleHistory = false;\n this.toggleMap = false;\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.refreshManager.rainNode = this.rainNode;\n this.compareManager.rainNode = this.rainNode;\n this.reportManager.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(this.rainNode.getLink('team').getId());\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 },\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 this.timeframeContainers = timeframeContainers;\n }\n\n private async change(changes: SimpleChanges) {\n await this.init();\n }\n}\n","<!-- all contents -->\n<ion-list *ngIf=\"rainNode\">\n\n <!-- rainNode titles -->\n <ion-item lines=\"none\">\n <ion-icon *ngIf=\"(rainNode | hasGoodQuality)\" color=\"success\" name=\"radio-button-off\" slot=\"start\"></ion-icon>\n <ion-icon *ngIf=\"!(rainNode | hasGoodQuality)\" color=\"warning\" name=\"radio-button-off\" slot=\"start\"></ion-icon>\n <ion-card-title>{{ rainNode.name }}</ion-card-title>\n <ion-card-subtitle>by {{ teamNode?.name }}</ion-card-subtitle>\n <ion-toggle (ionChange)=\"onEnableCountHistoryTab(rainNode)\" [(ngModel)]=\"toggleHistory\"\n [checked]=\"toggleHistory\"\n slot=\"end\"></ion-toggle>\n </ion-item>\n\n <!-- count map -->\n <ion-item *ngIf=\"toggleHistory\" lines=\"none\">\n <ion-card id=\"card-count\">\n <ion-card-content>\n <raain-date-dynamic (changedDate)=\"onDateChangeInCount($event)\"\n [currentHeight]=\"300\"\n [fetchData]=\"fetchDataWrapper\"\n [points]=\"countPoints\"></raain-date-dynamic>\n </ion-card-content>\n </ion-card>\n </ion-item>\n\n <!-- period select -->\n <ion-item>\n <ion-icon name=\"calendar\" slot=\"start\"></ion-icon>\n <ion-button (click)=\"setPeriodOfNow()\" fill=\"outline\" slot=\"start\">\n Now\n </ion-button>\n <ion-label class=\"ion-hide-md-down\" slot=\"start\" style=\"max-width: fit-content; margin-right: 5px\">\n Start:\n <input (change)=\"onPeriodBeginChange($event)\"\n [value]=\"periodBeginAsString\"\n type=\"datetime-local\">\n Local time. &nbsp; During:\n </ion-label>\n <ion-select (ionDismiss)=\"onPeriodDurationChange($event)\" [(ngModel)]=\"periodDurationAsString\"\n class=\"ion-hide-md-down\"\n id=\"periodDuration\" interface=\"popover\"\n slot=\"start\">\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>\n\n <ion-label>{{ onChangeDetectionTest(rainNode) }}</ion-label>\n\n <ion-button (click)=\"refreshMap()\" *ngIf=\"!refreshInProgress\"\n slot=\"end\">\n refresh map\n </ion-button>\n </ion-item>\n\n <ion-progress-bar *ngIf=\"refreshInProgress\" color=\"primary\" type=\"indeterminate\"></ion-progress-bar>\n\n <!-- map info -->\n <ion-item *ngIf=\"!(getPercentOfImages())\" lines=\"none\">\n <ion-icon name=\"map\" slot=\"start\"></ion-icon>\n <ion-label style=\"color:lightgray; font-size: small\">\n No radar measure.\n </ion-label>\n </ion-item>\n <ion-item *ngIf=\"getPercentOfImages()\" lines=\"none\">\n <ion-icon name=\"map\" slot=\"start\"></ion-icon>\n <ion-label style=\"color:lightgray; font-size: small\">\n % Images: {{ getPercentOfImages() }}\n </ion-label>\n\n <ion-toggle (ionChange)=\"onToggleMap($event)\" [(ngModel)]=\"toggleMap\" [checked]=\"toggleMap\"\n slot=\"end\"></ion-toggle>\n </ion-item>\n\n <!-- map -->\n <ion-item *ngIf=\"toggleMap\" lines=\"none\">\n <ion-grid>\n <ion-row>\n <ion-col size-lg=\"7\">\n <raain-map\n (changedDate)=\"onDateChangeInMap($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 }\"\n [sumFn]=\"reportManager.sumFn\"\n [sumValues]=\"reportManager.sumValues\"\n [timeframeContainers]=\"timeframeContainers\"\n [timeframeDates]=\"timeframeDates\"\n ></raain-map>\n </ion-col>\n\n <ion-col class=\"ion-hide-xl-down\" size-lg=\"5\">\n <ion-button color=\"medium\" fill=\"clear\">\n Cumulative\n <ion-toggle [(ngModel)]=\"toggleCumulative\" [checked]=\"toggleCumulative\"\n color=\"secondary\"></ion-toggle>\n </ion-button>\n\n\n <p>\n computed: {{ refreshManager.rainComputationMapDoneDate | date:'yyyy-MM-dd HH:mm' }}<br>\n launched by: {{ refreshManager.rainComputationMapLaunchedBy }}<br>\n time spent (ms): {{ refreshManager.rainComputationMapTimeSpentInMs }}\n </p>\n\n <raain-compare-stack\n (selectedPoint)=\"onGaugeSelectInCompare($event)\"\n [compareManager]=\"compareManager\"\n [cumulative]=\"toggleCumulative\"></raain-compare-stack>\n\n <small>\n <span\n *ngIf=\"refreshManager.rainComputationMapDoneDate?.getTime() <= compareManager.currentQualityDoneDate?.getTime() + 60000\">\n {{ compareManager.currentQualityDoneDate | date:'yyyy-MM-dd HH:mm' }}</span>\n <span\n *ngIf=\"refreshManager.rainComputationMapDoneDate?.getTime() > compareManager.currentQualityDoneDate?.getTime() + 60000\"\n style=\"color: red; font-size: larger\">\n {{ compareManager.currentQualityDoneDate | date:'yyyy-MM-dd HH:mm' }}\n BEFORE {{ refreshManager.rainComputationMapDoneDate | date:'yyyy-MM-dd HH:mm' }}</span>\n gaugesInCompare ? {{ compareManager.gaugesInCompare.length }}\n globalComparePoints ? {{ compareManager.globalComparePoints.length }}\n launchedBy: {{ compareManager.currentQualityLaunchedBy }}\n version: {{ compareManager.compareVersion }}\n timeSpentInMs: {{ compareManager.currentQualityTimeSpentInMs }}\n </small>\n </ion-col>\n\n </ion-row>\n </ion-grid>\n </ion-item>\n\n <!-- gauge values -->\n <ion-item *ngIf=\"gaugeSelectedPoints.length && gaugeSelectedPoints[0].values.length\" lines=\"none\">\n <ion-card>\n <ion-card-content>\n <raain-date-focus [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 </ion-item>\n\n <ion-progress-bar *ngIf=\"refreshInProgress\" color=\"primary\" type=\"indeterminate\"></ion-progress-bar>\n\n</ion-list>\n","import {Injectable} from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class Cache {\n private readonly _cache: any;\n\n constructor() {\n this._cache = {};\n }\n\n public async getValue(key: string, asyncGetter): Promise<any> {\n if (!this._cache.hasOwnProperty(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];\n }\n\n public putValue(key: string, value: any): 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 RadarNode,\n RainComputation,\n RainComputationMap,\n RainComputationQuality,\n RainNode,\n SpeedMatrixContainer,\n TeamNode,\n} from 'raain-model';\n\nimport {Storage} from './storage.service';\n\nimport {FidjStorage, FidjStorageNode} from './fidj-storage.model';\nimport {ErrorInterface, FidjService, LoggerLevelEnum} from 'fidj-angular';\nimport {XYType} from './xytype';\nimport {GaugeNodeFilter} from './tools';\nimport {Router} from '@angular/router';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ProfileService {\n public readyForSync: BehaviorSubject<boolean>;\n public asTeamId: string;\n\n protected email: string;\n protected isDemo: boolean;\n protected roles: Array<string>;\n protected nodeData: FidjStorageNode;\n protected fidjStorage: FidjStorage;\n protected haveTryToReconnect: boolean;\n\n constructor(\n protected storage: Storage,\n protected fidjService: FidjService,\n protected httpClient: HttpClient,\n private router: Router\n ) {\n this.email = this.storage.get('raain-email');\n this.asTeamId = this.storage.get('raain-asTeamId');\n this.readyForSync = new BehaviorSubject<boolean>(false);\n this.roles = [];\n this.fidjStorage = new FidjStorage(storage);\n this.isDemoMode = false;\n }\n\n get isDemoMode() {\n return this.isDemo;\n }\n\n set isDemoMode(mode) {\n this.isDemo = mode ? mode : true;\n this.fidjStorage.setDemoMode(this.isDemo);\n }\n\n get defaultUrlForAPI() {\n return this.storage.get('raain-urlForAPI');\n }\n\n set defaultUrlForAPI(url: string) {\n this.storage.set('raain-urlForAPI', url);\n }\n\n async refreshProfile(): Promise<FidjStorageNode> {\n try {\n this.nodeData = await this.fidjStorage.getRefreshedNodeCopy(this.fidjService);\n this.setRoles(await this.fidjService.getRoles());\n return this.nodeData;\n } catch (e) {\n await this.checkError(e);\n }\n }\n\n 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 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 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 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('radar').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 ): Promise<RainNode> {\n try {\n let queryPath = '' + rainId + '?format=timeframe';\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.timeframe);\n rainNode.name += '.radar.timeframe';\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 launchRainComputation(rainId: string, date: Date): Promise<RainComputation[]> {\n const response = await this.fidjService.sendOnEndpoint({\n verb: 'POST',\n key: 'rains',\n relativePath: '' + rainId + '/computations',\n data: {\n date: date.toISOString(),\n },\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n });\n\n return response.data.computations?.map((c) => new RainComputation(c));\n }\n\n async getRainComputationCartesianMapById(\n rainId: string,\n rainComputationId: string\n ): Promise<RainComputationMap> {\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 }\n\n async getRainComputationCumulativeMapById(\n rainId: string,\n rainComputationId: string,\n cumulativeHours: number\n ): Promise<RainComputationMap> {\n const queryPath =\n '' + rainId + '/computations/' + rainComputationId + '/cumulative/' + cumulativeHours;\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 }\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 // === 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(rainId?: string): Promise<Array<GaugeNodeFilter>> {\n let queryPath = '';\n if (this.asTeamId) {\n queryPath += '?teamId=' + this.asTeamId;\n }\n if (rainId) {\n if (queryPath) {\n queryPath += '&';\n } else {\n queryPath += '?';\n }\n queryPath += 'rainId=' + rainId;\n }\n\n const gauges = [];\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'gauges',\n verb: 'GET',\n relativePath: queryPath,\n defaultKeyUrl: this.defaultUrlForAPI + '/gauges',\n });\n\n for (const gauge of resp.data.gauges) {\n gauges.push(new GaugeNodeFilter(gauge));\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 // === Private ===\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 + 9;\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 // 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","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 {IonicModule, IonRange} from '@ionic/angular';\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';\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\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 RaainDetailsComponent,\n ],\n imports: [CommonModule, FormsModule, IonicModule, NgOptimizedImage],\n providers: [\n Storage,\n RadarService,\n ProfileService,\n Cache,\n IonRange,\n TimeframeComputationProgress,\n TimeframeQualityProgress,\n ],\n exports: [\n CommonModule,\n NgStyle,\n\n RaainMapComponent,\n RaainCompareComponent,\n RaainCompareStackComponent,\n RaainDateFocusComponent,\n RaainDateDynamicComponent,\n RaainConfigurationComponent,\n RaainSpeedComponent,\n RaainGlobeComponent,\n\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 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","i5.RaainMapComponent","i6.RaainCompareStackComponent","i7.RaainDateFocusComponent","i8.RaainDateDynamicComponent","i9.HasGoodQuality","i3","i4","i1.ProfileService"],"mappings":"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"}