Browse Source

Merge pull request #15396 from thingsboard/rc

Merge rc to master
pull/15400/head
Vladyslav Prykhodko 6 months ago
committed by GitHub
parent
commit
91ad234522
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 9
      ui-ngx/src/app/core/api/widget-api.models.ts
  2. 11
      ui-ngx/src/app/core/http/http-utils.ts
  3. 5
      ui-ngx/src/app/modules/home/components/alarm-rules/cf-alarm-rule-condition-dialog.component.ts
  4. 19
      ui-ngx/src/app/modules/home/models/widget-component.models.ts
  5. 22
      ui-ngx/src/app/shared/pipe/short-number.pipe.ts

9
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;

11
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;

5
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<CfAlarm
}
save(): void {
this.dialogRef.close(this.conditionFormGroup.value as AlarmRuleCondition);
this.dialogRef.close({
...this.conditionFormGroup.value,
type: this.conditionFormGroup.get('type').value,
} as AlarmRuleCondition);
}
onTestScript($event: Event) {

19
ui-ngx/src/app/modules/home/models/widget-component.models.ts

@ -38,6 +38,7 @@ import { Timewindow, WidgetTimewindow } from '@shared/models/time/time.models';
import {
IAliasController,
IStateController,
IWidgetHttpUtils,
IWidgetSubscription,
IWidgetUtils,
RpcApi,
@ -58,6 +59,13 @@ import {
ViewContainerRef
} from '@angular/core';
import { HttpClient, HttpErrorResponse } from '@angular/common/http';
import {
createDefaultHttpOptions,
defaultHttpOptions,
defaultHttpOptionsFromConfig,
defaultHttpOptionsFromParams,
defaultHttpUploadOptions
} from '@core/http/http-utils';
import { RafService } from '@core/services/raf.service';
import { WidgetTypeId } from '@shared/models/id/widget-type-id';
import { TenantId } from '@shared/models/id/tenant-id';
@ -68,7 +76,8 @@ import {
formatValue,
getEntityDetailsPageURL,
hasDatasourceLabelsVariables,
isDefined, isDefinedAndNotNull
isDefined,
isDefinedAndNotNull
} from '@core/utils';
import { Store } from '@ngrx/store';
import { AppState } from '@core/core.state';
@ -294,6 +303,14 @@ export class WidgetContext {
getEntityDetailsPageURL
};
httpUtils: IWidgetHttpUtils = {
defaultHttpOptions,
defaultHttpOptionsFromConfig,
defaultHttpOptionsFromParams,
defaultHttpUploadOptions,
createDefaultHttpOptions
};
$widgetElement: JQuery<HTMLElement>;
$container: JQuery<HTMLElement>;
$containerParent: JQuery<HTMLElement>;

22
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;

Loading…
Cancel
Save