Merge pull request #13306 from thingsboard/rc

rc
This commit is contained in:
Viacheslav Klimov 2025-05-05 15:10:02 +03:00 committed by GitHub
commit eec5783b43
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 38 additions and 49 deletions

View File

@ -43,7 +43,6 @@ import {
isDefined,
isDefinedAndNotNull,
isNotEmptyStr,
isNumber,
isObject,
isUndefined
} from '@core/utils';
@ -77,6 +76,8 @@ import {
getHeaderTitle,
getRowStyleInfo,
getTableCellButtonActions,
isValidPageStepCount,
isValidPageStepIncrement,
noDataMessage,
prepareTableCellButtonActions,
RowStyleInfo,
@ -392,10 +393,10 @@ export class AlarmsTableWidgetComponent extends PageComponent implements OnInit,
this.rowStylesInfo = getRowStyleInfo(this.ctx, this.settings, 'alarm, ctx');
const pageSize = this.settings.defaultPageSize;
let pageStepIncrement = this.settings.pageStepIncrement;
let pageStepCount = this.settings.pageStepCount;
let pageStepIncrement = isValidPageStepIncrement(this.settings.pageStepIncrement) ? this.settings.pageStepIncrement : null;
let pageStepCount = isValidPageStepCount(this.settings.pageStepCount) ? this.settings.pageStepCount : null;
if (isDefined(pageSize) && isNumber(pageSize) && pageSize > 0) {
if (Number.isInteger(pageSize) && pageSize > 0) {
this.defaultPageSize = pageSize;
}

View File

@ -42,7 +42,7 @@ import {
import { IWidgetSubscription } from '@core/api/widget-api.models';
import { UtilsService } from '@core/services/utils.service';
import { TranslateService } from '@ngx-translate/core';
import { deepClone, hashCode, isDefined, isDefinedAndNotNull, isNumber, isObject, isUndefined } from '@core/utils';
import { deepClone, hashCode, isDefined, isDefinedAndNotNull, isObject, isUndefined } from '@core/utils';
import cssjs from '@core/css/css';
import { CollectionViewer, DataSource } from '@angular/cdk/collections';
import { DataKeyType } from '@shared/models/telemetry/telemetry.models';
@ -75,6 +75,8 @@ import {
getHeaderTitle,
getRowStyleInfo,
getTableCellButtonActions,
isValidPageStepCount,
isValidPageStepIncrement,
noDataMessage,
prepareTableCellButtonActions,
RowStyleInfo,
@ -311,10 +313,10 @@ export class EntitiesTableWidgetComponent extends PageComponent implements OnIni
this.rowStylesInfo = getRowStyleInfo(this.ctx, this.settings, 'entity, ctx');
const pageSize = this.settings.defaultPageSize;
let pageStepIncrement = this.settings.pageStepIncrement;
let pageStepCount = this.settings.pageStepCount;
let pageStepIncrement = isValidPageStepIncrement(this.settings.pageStepIncrement) ? this.settings.pageStepIncrement : null;
let pageStepCount = isValidPageStepCount(this.settings.pageStepCount) ? this.settings.pageStepCount : null;
if (isDefined(pageSize) && isNumber(pageSize) && pageSize > 0) {
if (Number.isInteger(pageSize) && pageSize > 0) {
this.defaultPageSize = pageSize;
}

View File

@ -36,6 +36,8 @@ import { BehaviorSubject, merge, Observable, of, ReplaySubject, Subject, throwEr
import { catchError, map, tap } from 'rxjs/operators';
import {
constructTableCssString,
isValidPageStepCount,
isValidPageStepIncrement,
noDataMessage,
TableCellButtonActionDescriptor,
TableWidgetSettings
@ -43,7 +45,7 @@ import {
import cssjs from '@core/css/css';
import { UtilsService } from '@core/services/utils.service';
import { TranslateService } from '@ngx-translate/core';
import { hashCode, isDefined, isDefinedAndNotNull, isNumber, parseHttpErrorMessage } from '@core/utils';
import { hashCode, isDefined, isDefinedAndNotNull, parseHttpErrorMessage } from '@core/utils';
import { CollectionViewer, DataSource } from '@angular/cdk/collections';
import { emptyPageData, PageData } from '@shared/models/page/page-data';
import {
@ -207,10 +209,10 @@ export class PersistentTableComponent extends PageComponent implements OnInit, O
this.displayedColumns = [...this.displayTableColumns];
const pageSize = this.settings.defaultPageSize;
let pageStepIncrement = this.settings.pageStepIncrement;
let pageStepCount = this.settings.pageStepCount;
let pageStepIncrement = isValidPageStepIncrement(this.settings.pageStepIncrement) ? this.settings.pageStepIncrement : null;
let pageStepCount = isValidPageStepCount(this.settings.pageStepCount) ? this.settings.pageStepCount : null;
if (isDefined(pageSize) && isNumber(pageSize) && pageSize > 0) {
if (Number.isInteger(pageSize) && pageSize > 0) {
this.defaultPageSize = pageSize;
}

View File

@ -16,7 +16,7 @@
import { EntityId } from '@shared/models/id/entity-id';
import { DataKey, FormattedData, WidgetActionDescriptor, WidgetConfig } from '@shared/models/widget.models';
import { getDescendantProp, isDefined, isDefinedAndNotNull, isNotEmptyStr } from '@core/utils';
import { getDescendantProp, isDefined, isNotEmptyStr } from '@core/utils';
import { AlarmDataInfo, alarmFields } from '@shared/models/alarm.models';
import tinycolor from 'tinycolor2';
import { Direction } from '@shared/models/page/sort-order';
@ -564,11 +564,18 @@ export function getHeaderTitle(dataKey: DataKey, keySettings: TableWidgetDataKey
export function buildPageStepSizeValues(pageStepCount: number, pageStepIncrement: number): Array<number> {
const pageSteps: Array<number> = [];
if (isDefinedAndNotNull(pageStepCount) && pageStepCount > 0 && pageStepCount <= 100 &&
isDefinedAndNotNull(pageStepIncrement) && pageStepIncrement > 0) {
if (isValidPageStepCount(pageStepCount) && isValidPageStepIncrement(pageStepIncrement)) {
for (let i = 1; i <= pageStepCount; i++) {
pageSteps.push(pageStepIncrement * i);
}
}
return pageSteps;
}
export function isValidPageStepIncrement(value: number): boolean {
return Number.isInteger(value) && value > 0;
}
export function isValidPageStepCount(value: number): boolean {
return Number.isInteger(value) && value > 0 && value <= 100;
}

View File

@ -49,7 +49,6 @@ import {
hashCode,
isDefined,
isDefinedAndNotNull,
isNumber,
isObject,
isUndefined
} from '@core/utils';
@ -85,6 +84,8 @@ import {
getColumnSelectionAvailability,
getRowStyleInfo,
getTableCellButtonActions,
isValidPageStepCount,
isValidPageStepIncrement,
noDataMessage,
prepareTableCellButtonActions,
RowStyleInfo,
@ -352,10 +353,10 @@ export class TimeseriesTableWidgetComponent extends PageComponent implements OnI
this.rowStylesInfo = getRowStyleInfo(this.ctx, this.settings, 'rowData, ctx');
const pageSize = this.settings.defaultPageSize;
let pageStepIncrement = this.settings.pageStepIncrement;
let pageStepCount = this.settings.pageStepCount;
let pageStepIncrement = isValidPageStepIncrement(this.settings.pageStepIncrement) ? this.settings.pageStepIncrement : null;
let pageStepCount = isValidPageStepCount(this.settings.pageStepCount) ? this.settings.pageStepCount : null;
if (isDefined(pageSize) && isNumber(pageSize) && pageSize > 0) {
if (Number.isInteger(pageSize) && pageSize > 0) {
this.defaultPageSize = pageSize;
}

View File

@ -198,7 +198,7 @@ export const HelpLinks = {
mobileApplication: `${helpBaseUrl}/docs${docPlatformPrefix}/mobile-center/applications/`,
mobileBundle: `${helpBaseUrl}/docs${docPlatformPrefix}/mobile-center/mobile-center/`,
mobileQrCode: `${helpBaseUrl}/docs${docPlatformPrefix}/user-guide/ui/mobile-qr-code/`,
calculatedField: `${helpBaseUrl}/docs${docPlatformPrefix}/`,
calculatedField: `${helpBaseUrl}/docs${docPlatformPrefix}/user-guide/calculated-fields/`,
timewindowSettings: `${helpBaseUrl}/docs${docPlatformPrefix}/user-guide/dashboards/#time-window`,
}
};

View File

@ -59,8 +59,6 @@
"import": "Importeren",
"export": "Exporteren",
"share-via": "Delen via {{provider}}",
"move": "Verplaatsen",
"select": "Selecteren",
"continue": "Voortzetten",
"discard-changes": "Wijzigingen negeren",
"download": "Downloaden",
@ -291,7 +289,6 @@
"enable": "OAuth2-instellingen inschakelen",
"domains": "Domeinen",
"mobile-apps": "Mobiele applicaties",
"no-mobile-apps": "Geen applicaties geconfigureerd",
"mobile-package": "Applicatie pakket",
"mobile-package-placeholder": "Vb.: my.example.app",
"mobile-package-hint": "Voor Android: uw eigen unieke applicatie-ID. Voor iOS: ID van productbundel.",
@ -299,7 +296,6 @@
"mobile-app-secret": "Geheim van de toepassing",
"invalid-mobile-app-secret": "Het geheim van de toepassing mag alleen alfanumerieke tekens bevatten en moet tussen de 16 en 2048 tekens lang zijn.",
"copy-mobile-app-secret": "Toepassingsgeheim kopiëren",
"add-mobile-app": "Applicatie toevoegen",
"delete-mobile-app": "Toepassingsgegevens verwijderen",
"providers": "Providers",
"platform-web": "Web",
@ -627,8 +623,6 @@
"filter-type-entity-view-search-query": "Zoekquery voor entiteitsweergave",
"filter-type-entity-view-search-query-description": "Entiteitsweergaven met types {{entityViewTypes}} die {{relationType}} relatie hebben {{direction}} {{rootEntity}}",
"filter-type-apiUsageState": "Api-gebruiksstatus",
"filter-type-edge-search-query": "Edge-zoekopdracht",
"filter-type-edge-search-query-description": "Edge met types {{edgeTypes}} die {{relationType}} relatie hebben {{direction}} {{rootEntity}}",
"entity-filter": "Entiteit filteren",
"resolve-multiple": "Oplossen als meerdere entiteiten",
"resolve-multiple-hint": "Inschakelen om gegevens van alle gefilterde entiteiten tegelijk weer te geven. \nAls uitgeschakeld, toont de widget alleen gegevens van de geselecteerde entiteit.",
@ -727,7 +721,6 @@
"asset-required": "Asset is vereist",
"name-starts-with": "Expressie van itemnaam",
"help-text": "Gebruik '%' naar behoefte: '%asset_name_contains%', '%asset_name_ends', 'asset_starts_with'.",
"search": "Assets zoeken",
"select-group-to-add": "Selecteer doelgroep om geselecteerde assets toe te voegen",
"select-group-to-move": "Selecteer de doelgroep om geselecteerde assets te verplaatsen",
"remove-assets-from-group": "Weet je zeker dat je { count, plural, =1 {1 asset} other {# assets} } uit groep '{{entityGroup}}' wilt verwijderen?",
@ -804,7 +797,6 @@
"email-messages": "E-mailberichten",
"email-messages-daily-activity": "Dagelijkse activiteit e-mailberichten",
"email-messages-monthly-activity": "Maandelijkse activiteit e-mailberichten",
"exceptions": "Uitzonderingen",
"executions": "Executies",
"javascript": "JavaScript",
"javascript-executions": "JavaScript-uitvoeringen",
@ -820,9 +812,7 @@
"permanent-failures": "${entityName} Permanente storingen",
"permanent-timeouts": "Permanente time-outs van $ {entityName}",
"processing-failures": "${entityName} Verwerkingsfouten",
"processing-failures-and-timeouts": "Verwerkingsfouten en time-outs",
"processing-timeouts": "${entityName} time-outs voor verwerking",
"queue-stats": "Queue Statistieken",
"rule-chain": "Rule chain",
"rule-engine": "Rule engine",
"rule-engine-daily-activity": "Dagelijkse activiteit van de rule engine",
@ -969,7 +959,7 @@
"name": "Naam",
"name-required": "Naam is verplicht.",
"name-max-length": "Naam moet kleiner zijn dan 256 tekens",
"description": "Omschrijving: __________",
"description": "Omschrijving",
"decoder": "Decoder",
"encoder": "Coderingsprogramma",
"test-decoder-fuction": "Test decoder functie",
@ -1047,7 +1037,6 @@
"manage-customer-assets": "Klant devices beheren",
"manage-public-assets": "Openbare asset beheren",
"manage-customer-edges": "Beheer klant edges",
"manage-public-assets": "Openbare asset beheren",
"add-customer-text": "Nieuwe klant toevoegen",
"no-customers-text": "Geen klanten gevonden",
"customer-details": "Klantgegevens",
@ -2451,7 +2440,7 @@
"name": "Naam",
"name-required": "Naam is verplicht.",
"name-max-length": "Naam moet kleiner zijn dan 256 tekens",
"description": "Omschrijving: __________",
"description": "Omschrijving",
"add": "Entiteitsgroep toevoegen",
"open-entity-group": "Entiteitsgroep openen",
"add-entity-group-text": "Nieuwe entiteitsgroep toevoegen",
@ -2655,8 +2644,6 @@
"assign-entity-views": "Entiteitsweergaven toewijzen",
"assign-entity-views-text": "Wijs { count, plural, =1 {1 entity view} other {# entity views} } toe aan de klant",
"delete-entity-views": "Entiteitsweergaven verwijderen",
"make-public": "Entiteitsweergave openbaar maken",
"make-private": "Entiteitsweergave privé maken",
"unassign-from-customer": "Toewijzing van klant ongedaan maken",
"unassign-entity-views": "Toewijzing van entiteitsweergaven intrekken",
"unassign-entity-views-action-title": "Toewijzing { count, plural, =1 {1 entity view} other {# entity views} } van klant ongedaan maken",
@ -2666,10 +2653,6 @@
"delete-entity-views-title": "Weet u zeker dat u { count, plural, =1 {1 entity view} other {# entity views} } wilt verwijderen?",
"delete-entity-views-action-title": "Verwijder { count, plural, =1 {1 entity view} other {# entity views} }",
"delete-entity-views-text": "Opgelet, na de bevestiging worden alle geselecteerde entiteitsweergaven verwijderd en kunnen alle gerelateerde gegevens niet meer worden hersteld.",
"make-public-entity-view-title": "Weet u zeker dat u de entiteitsweergave '{{entityViewName}}' openbaar wilt maken?",
"make-public-entity-view-text": "Na de bevestiging worden de entiteitsweergave en al haar gegevens openbaar en toegankelijk gemaakt voor anderen.",
"make-private-entity-view-title": "Weet u zeker dat u de entiteitsweergave '{{entityViewName}}' privé wilt maken?",
"make-private-entity-view-text": "Na de bevestiging worden de entiteitsweergave en al zijn gegevens privé gemaakt en zijn ze niet toegankelijk voor anderen.",
"unassign-entity-view-title": "Weet u zeker dat u de toewijzing van de entiteitsweergave '{{entityViewName}}' wilt opheffen?",
"unassign-entity-view-text": "Na de bevestiging wordt de toewijzing van de entiteitsweergave ongedaan gemaakt en is deze niet toegankelijk voor de klant.",
"unassign-entity-view": "Toewijzing van entiteitsweergave ongedaan maken",
@ -2760,7 +2743,6 @@
"type": "Type",
"in": "In",
"out": "Buiten",
"metadata": "Metagegevens",
"message": "Bericht",
"entity": "Entiteit",
"message-id": "Bericht-ID",
@ -3319,7 +3301,7 @@
"name": "Naam",
"name-required": "Naam is verplicht.",
"name-max-length": "Naam moet kleiner zijn dan 256 tekens",
"description": "Omschrijving: __________",
"description": "Omschrijving",
"base-url": "Basis-URL",
"base-url-required": "Basis-URL is vereist",
"security-key": "Beveiligingssleutel",
@ -4596,7 +4578,7 @@
"name": "Naam",
"name-required": "Naam is verplicht.",
"name-max-length": "Naam moet kleiner zijn dan 256 tekens",
"description": "Omschrijving: __________",
"description": "Omschrijving",
"events": "Events",
"details": "Details",
"copyId": "Rol-ID kopiëren",
@ -4641,7 +4623,7 @@
"permissions-required": "Er moet ten minste één machtigingsvermelding worden opgegeven.",
"remove-permission": "Machtigingsinvoer verwijderen",
"add-permission": "Machtigingsinvoer toevoegen",
"other": "Anders __________",
"other": "Anders",
"resource": {
"resource": "Hulpbron",
"select-resource": "Bron selecteren",
@ -5781,12 +5763,6 @@
"delete-solution-text": "Opgelet, na de bevestiging worden de oplossing en alle gerelateerde gegevens onherstelbaar.",
"installing": "Oplossingssjabloon installeren..."
},
"markdown": {
"edit": "Bewerken",
"preview": "Voorbeeld",
"copy-code": "Klik om te kopiëren",
"copied": "Gekopieerd!"
},
"white-labeling": {
"white-labeling": "White labelling",
"white-labeling-general": "Algemene White Labeling",