diff --git a/ui-ngx/src/app/core/api/widget-api.models.ts b/ui-ngx/src/app/core/api/widget-api.models.ts index f92db80cc4..12f5bc60d8 100644 --- a/ui-ngx/src/app/core/api/widget-api.models.ts +++ b/ui-ngx/src/app/core/api/widget-api.models.ts @@ -67,6 +67,7 @@ import { DashboardUtilsService } from '@core/services/dashboard-utils.service'; import { MatDialogRef } from '@angular/material/dialog'; import { TbUnit } from '@shared/models/unit.models'; import { UnitService } from '@core/services/unit.service'; +import { HttpOptionsResult, HttpUploadOptionsResult, QueryParams, RequestConfig } from '@core/http/http-utils'; export interface TimewindowFunctions { onUpdateTimewindow: (startTimeMs: number, endTimeMs: number, interval?: number) => void; @@ -94,6 +95,14 @@ export interface IWidgetUtils { getEntityDetailsPageURL: (id: string, entityType: EntityType) => string; } +export interface IWidgetHttpUtils { + defaultHttpOptions: (ignoreLoading?: boolean, ignoreErrors?: boolean, resendRequest?: boolean, queryParams?: QueryParams) => HttpOptionsResult; + defaultHttpOptionsFromConfig: (config?: RequestConfig) => HttpOptionsResult; + defaultHttpOptionsFromParams: (queryParams?: QueryParams, config?: RequestConfig) => HttpOptionsResult; + defaultHttpUploadOptions: (ignoreLoading?: boolean, ignoreErrors?: boolean, resendRequest?: boolean, queryParams?: QueryParams) => HttpUploadOptionsResult; + createDefaultHttpOptions: (queryParamsOrConfig?: QueryParams | RequestConfig, config?: RequestConfig) => HttpOptionsResult; +} + export interface PlaceMapItemActionData { action: WidgetAction | WidgetActionDescriptor; additionalParams?: any; diff --git a/ui-ngx/src/app/core/http/http-utils.ts b/ui-ngx/src/app/core/http/http-utils.ts index 8b90821c09..98f65f924a 100644 --- a/ui-ngx/src/app/core/http/http-utils.ts +++ b/ui-ngx/src/app/core/http/http-utils.ts @@ -15,7 +15,7 @@ /// import { InterceptorHttpParams } from '../interceptors/interceptor-http-params'; -import { HttpHeaders } from '@angular/common/http'; +import { HttpHeaders, HttpParams } from '@angular/common/http'; import { InterceptorConfig } from '../interceptors/interceptor-config'; export type QueryParams = { [param:string]: any }; @@ -27,6 +27,15 @@ export interface RequestConfig { queryParams?: QueryParams; } +export interface HttpOptionsResult { + headers: HttpHeaders; + params: HttpParams; +} + +export interface HttpUploadOptionsResult { + params: HttpParams; +} + export function hasRequestConfig(config?: any): boolean { if (!config) { return false; diff --git a/ui-ngx/src/app/modules/home/components/alarm-rules/cf-alarm-rule-condition-dialog.component.ts b/ui-ngx/src/app/modules/home/components/alarm-rules/cf-alarm-rule-condition-dialog.component.ts index 49f8e92458..f2f27c3b8b 100644 --- a/ui-ngx/src/app/modules/home/components/alarm-rules/cf-alarm-rule-condition-dialog.component.ts +++ b/ui-ngx/src/app/modules/home/components/alarm-rules/cf-alarm-rule-condition-dialog.component.ts @@ -332,7 +332,10 @@ export class CfAlarmRuleConditionDialogComponent extends DialogComponent; $container: JQuery; $containerParent: JQuery; diff --git a/ui-ngx/src/app/shared/pipe/short-number.pipe.ts b/ui-ngx/src/app/shared/pipe/short-number.pipe.ts index 0fda04844f..fedf958067 100644 --- a/ui-ngx/src/app/shared/pipe/short-number.pipe.ts +++ b/ui-ngx/src/app/shared/pipe/short-number.pipe.ts @@ -16,20 +16,26 @@ import { Pipe, PipeTransform } from '@angular/core'; +export interface ShortNumberArgs { + long?: boolean; + roundDown?: boolean; +} + @Pipe({ - name: 'shortNumber', - standalone: false + name: 'shortNumber', + standalone: false }) export class ShortNumberPipe implements PipeTransform { - transform(number: number, args?: any): any { - if (isNaN(number)) return 0; - if (number === null) return 0; - if (number === 0) return 0; + transform(number: number, args?: ShortNumberArgs): string { + if (!Number.isFinite(number) || number === 0) { + return '0'; + } let abs = Math.abs(number); const rounder = Math.pow(10, 1); const isNegative = number < 0; - const isLong = args && args.long; + const isLong = args?.long; + const roundDown = args?.roundDown; let key = ''; const powers = [ @@ -42,7 +48,7 @@ export class ShortNumberPipe implements PipeTransform { for (let i = 0; i < powers.length; i++) { let reduced = abs / powers[i].value; - reduced = Math.round(reduced * rounder) / rounder; + reduced = (roundDown ? Math.floor : Math.round)(reduced * rounder) / rounder; if (reduced >= 1) { abs = reduced; key = isLong ? powers[i].longKey : powers[i].key;