UI: Updated value name

This commit is contained in:
Vladyslav_Prykhodko 2021-03-02 13:21:53 +02:00
parent 10cea37abe
commit cbc8991b05
9 changed files with 21 additions and 20 deletions

View File

@ -47,7 +47,7 @@
"resources": [], "resources": [],
"templateHtml": "<tb-timeseries-table-widget \n [ctx]=\"ctx\">\n</tb-timeseries-table-widget>", "templateHtml": "<tb-timeseries-table-widget \n [ctx]=\"ctx\">\n</tb-timeseries-table-widget>",
"templateCss": "", "templateCss": "",
"controllerScript": "self.onInit = function() {\n}\n\nself.onDataUpdated = function() {\n self.ctx.$scope.timeseriesTableWidget.onDataUpdated();\n}\n\nself.typeParameters = function() {\n return {\n reloadOnlyOnDataUpdated: true\n };\n}\n\nself.actionSources = function() {\n return {\n 'actionCellButton': {\n name: 'widget-action.action-cell-button',\n multiple: true\n },\n 'rowClick': {\n name: 'widget-action.row-click',\n multiple: false\n }\n };\n}\n\nself.onDestroy = function() {\n}", "controllerScript": "self.onInit = function() {\n}\n\nself.onDataUpdated = function() {\n self.ctx.$scope.timeseriesTableWidget.onDataUpdated();\n}\n\nself.typeParameters = function() {\n return {\n ignoreDataUpdateOnIntervalTick: true\n };\n}\n\nself.actionSources = function() {\n return {\n 'actionCellButton': {\n name: 'widget-action.action-cell-button',\n multiple: true\n },\n 'rowClick': {\n name: 'widget-action.row-click',\n multiple: false\n }\n };\n}\n\nself.onDestroy = function() {\n}",
"settingsSchema": "{\n \"schema\": {\n \"type\": \"object\",\n \"title\": \"TimeseriesTableSettings\",\n \"properties\": {\n \"showTimestamp\": {\n \"title\": \"Display timestamp column\",\n \"type\": \"boolean\",\n \"default\": true\n },\n \"showMilliseconds\": {\n \"title\": \"Display timestamp milliseconds\",\n \"type\": \"boolean\",\n \"default\": false\n },\n \"displayPagination\": {\n \"title\": \"Display pagination\",\n \"type\": \"boolean\",\n \"default\": true\n }, \n \"defaultPageSize\": {\n \"title\": \"Default page size\",\n \"type\": \"number\",\n \"default\": 10\n },\n \"hideEmptyLines\": {\n \"title\": \"Hide empty lines\",\n \"type\": \"boolean\",\n \"default\": false\n }\n },\n \"required\": []\n },\n \"form\": [\n \"showTimestamp\",\n \"showMilliseconds\",\n \"displayPagination\",\n \"defaultPageSize\",\n \"hideEmptyLines\"\n ]\n}", "settingsSchema": "{\n \"schema\": {\n \"type\": \"object\",\n \"title\": \"TimeseriesTableSettings\",\n \"properties\": {\n \"showTimestamp\": {\n \"title\": \"Display timestamp column\",\n \"type\": \"boolean\",\n \"default\": true\n },\n \"showMilliseconds\": {\n \"title\": \"Display timestamp milliseconds\",\n \"type\": \"boolean\",\n \"default\": false\n },\n \"displayPagination\": {\n \"title\": \"Display pagination\",\n \"type\": \"boolean\",\n \"default\": true\n }, \n \"defaultPageSize\": {\n \"title\": \"Default page size\",\n \"type\": \"number\",\n \"default\": 10\n },\n \"hideEmptyLines\": {\n \"title\": \"Hide empty lines\",\n \"type\": \"boolean\",\n \"default\": false\n }\n },\n \"required\": []\n },\n \"form\": [\n \"showTimestamp\",\n \"showMilliseconds\",\n \"displayPagination\",\n \"defaultPageSize\",\n \"hideEmptyLines\"\n ]\n}",
"dataKeySettingsSchema": "{\n \"schema\": {\n \"type\": \"object\",\n \"title\": \"DataKeySettings\",\n \"properties\": {\n \"useCellStyleFunction\": {\n \"title\": \"Use cell style function\",\n \"type\": \"boolean\",\n \"default\": false\n },\n \"cellStyleFunction\": {\n \"title\": \"Cell style function: f(value)\",\n \"type\": \"string\",\n \"default\": \"\"\n },\n \"useCellContentFunction\": {\n \"title\": \"Use cell content function\",\n \"type\": \"boolean\",\n \"default\": false\n },\n \"cellContentFunction\": {\n \"title\": \"Cell content function: f(value, rowData, ctx)\",\n \"type\": \"string\",\n \"default\": \"\"\n }\n },\n \"required\": []\n },\n \"form\": [\n \"useCellStyleFunction\",\n {\n \"key\": \"cellStyleFunction\",\n \"type\": \"javascript\"\n },\n \"useCellContentFunction\",\n {\n \"key\": \"cellContentFunction\",\n \"type\": \"javascript\"\n }\n ]\n}", "dataKeySettingsSchema": "{\n \"schema\": {\n \"type\": \"object\",\n \"title\": \"DataKeySettings\",\n \"properties\": {\n \"useCellStyleFunction\": {\n \"title\": \"Use cell style function\",\n \"type\": \"boolean\",\n \"default\": false\n },\n \"cellStyleFunction\": {\n \"title\": \"Cell style function: f(value)\",\n \"type\": \"string\",\n \"default\": \"\"\n },\n \"useCellContentFunction\": {\n \"title\": \"Use cell content function\",\n \"type\": \"boolean\",\n \"default\": false\n },\n \"cellContentFunction\": {\n \"title\": \"Cell content function: f(value, rowData, ctx)\",\n \"type\": \"string\",\n \"default\": \"\"\n }\n },\n \"required\": []\n },\n \"form\": [\n \"useCellStyleFunction\",\n {\n \"key\": \"cellStyleFunction\",\n \"type\": \"javascript\"\n },\n \"useCellContentFunction\",\n {\n \"key\": \"cellContentFunction\",\n \"type\": \"javascript\"\n }\n ]\n}",
"defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Temperature °C\",\"color\":\"#2196f3\",\"settings\":{\"useCellStyleFunction\":true,\"cellStyleFunction\":\"if (value) {\\n var percent = (value + 60)/120 * 100;\\n var color = tinycolor.mix('blue', 'red', amount = percent);\\n color.setAlpha(.5);\\n return {\\n paddingLeft: '20px',\\n color: '#ffffff',\\n background: color.toRgbString(),\\n fontSize: '18px'\\n };\\n} else {\\n return {};\\n}\"},\"_hash\":0.8587686344902596,\"funcBody\":\"var value = prevValue + Math.random() * 40 - 20;\\nvar multiplier = Math.pow(10, 1 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -60) {\\n\\tvalue = -60;\\n} else if (value > 60) {\\n\\tvalue = 60;\\n}\\nreturn value;\"},{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Humidity, %\",\"color\":\"#ffc107\",\"settings\":{\"useCellStyleFunction\":true,\"cellStyleFunction\":\"if (value) {\\n var percent = value;\\n var backgroundColor = tinycolor('blue');\\n backgroundColor.setAlpha(value/100);\\n var color = 'blue';\\n if (value > 50) {\\n color = 'white';\\n }\\n \\n return {\\n paddingLeft: '20px',\\n color: color,\\n background: backgroundColor.toRgbString(),\\n fontSize: '18px'\\n };\\n} else {\\n return {};\\n}\",\"useCellContentFunction\":false},\"_hash\":0.12775350966079668,\"funcBody\":\"var value = prevValue + Math.random() * 20 - 10;\\nvar multiplier = Math.pow(10, 1 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < 5) {\\n\\tvalue = 5;\\n} else if (value > 100) {\\n\\tvalue = 100;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"interval\":1000,\"timewindowMs\":60000},\"aggregation\":{\"type\":\"NONE\",\"limit\":200}},\"showTitle\":true,\"backgroundColor\":\"rgb(255, 255, 255)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"showTimestamp\":true,\"displayPagination\":true,\"defaultPageSize\":10},\"title\":\"Timeseries table\",\"dropShadow\":true,\"enableFullscreen\":true,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400,\"padding\":\"5px 10px 5px 10px\"},\"useDashboardTimewindow\":false,\"showLegend\":false,\"widgetStyle\":{},\"actions\":{},\"showTitleIcon\":false,\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"iconSize\":\"24px\"}" "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Temperature °C\",\"color\":\"#2196f3\",\"settings\":{\"useCellStyleFunction\":true,\"cellStyleFunction\":\"if (value) {\\n var percent = (value + 60)/120 * 100;\\n var color = tinycolor.mix('blue', 'red', amount = percent);\\n color.setAlpha(.5);\\n return {\\n paddingLeft: '20px',\\n color: '#ffffff',\\n background: color.toRgbString(),\\n fontSize: '18px'\\n };\\n} else {\\n return {};\\n}\"},\"_hash\":0.8587686344902596,\"funcBody\":\"var value = prevValue + Math.random() * 40 - 20;\\nvar multiplier = Math.pow(10, 1 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -60) {\\n\\tvalue = -60;\\n} else if (value > 60) {\\n\\tvalue = 60;\\n}\\nreturn value;\"},{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Humidity, %\",\"color\":\"#ffc107\",\"settings\":{\"useCellStyleFunction\":true,\"cellStyleFunction\":\"if (value) {\\n var percent = value;\\n var backgroundColor = tinycolor('blue');\\n backgroundColor.setAlpha(value/100);\\n var color = 'blue';\\n if (value > 50) {\\n color = 'white';\\n }\\n \\n return {\\n paddingLeft: '20px',\\n color: color,\\n background: backgroundColor.toRgbString(),\\n fontSize: '18px'\\n };\\n} else {\\n return {};\\n}\",\"useCellContentFunction\":false},\"_hash\":0.12775350966079668,\"funcBody\":\"var value = prevValue + Math.random() * 20 - 10;\\nvar multiplier = Math.pow(10, 1 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < 5) {\\n\\tvalue = 5;\\n} else if (value > 100) {\\n\\tvalue = 100;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"interval\":1000,\"timewindowMs\":60000},\"aggregation\":{\"type\":\"NONE\",\"limit\":200}},\"showTitle\":true,\"backgroundColor\":\"rgb(255, 255, 255)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"showTimestamp\":true,\"displayPagination\":true,\"defaultPageSize\":10},\"title\":\"Timeseries table\",\"dropShadow\":true,\"enableFullscreen\":true,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400,\"padding\":\"5px 10px 5px 10px\"},\"useDashboardTimewindow\":false,\"showLegend\":false,\"widgetStyle\":{},\"actions\":{},\"showTitleIcon\":false,\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"iconSize\":\"24px\"}"

View File

@ -92,7 +92,7 @@ export class DataAggregator {
private interval: number, private interval: number,
private stateData: boolean, private stateData: boolean,
private utils: UtilsService, private utils: UtilsService,
private isReloadOnlyOnDataUpdated: boolean) { private ignoreDataUpdateOnIntervalTick: boolean) {
this.tsKeyNames.forEach((key) => { this.tsKeyNames.forEach((key) => {
this.dataBuffer[key] = []; this.dataBuffer[key] = [];
}); });
@ -205,7 +205,7 @@ export class DataAggregator {
} else { } else {
this.data = this.updateData(); this.data = this.updateData();
} }
if (this.onDataCb && (!this.isReloadOnlyOnDataUpdated || this.updatedData)) { if (this.onDataCb && (!this.ignoreDataUpdateOnIntervalTick || this.updatedData)) {
this.onDataCb(this.data, detectChanges); this.onDataCb(this.data, detectChanges);
this.updatedData = false; this.updatedData = false;
} }

View File

@ -66,7 +66,7 @@ export interface EntityDataSubscriptionOptions {
type: widgetType; type: widgetType;
entityFilter?: EntityFilter; entityFilter?: EntityFilter;
isPaginatedDataSubscription?: boolean; isPaginatedDataSubscription?: boolean;
isReloadOnlyOnDataUpdated?: boolean; ignoreDataUpdateOnIntervalTick?: boolean;
pageLink?: EntityDataPageLink; pageLink?: EntityDataPageLink;
keyFilters?: Array<KeyFilter>; keyFilters?: Array<KeyFilter>;
additionalKeyFilters?: Array<KeyFilter>; additionalKeyFilters?: Array<KeyFilter>;
@ -673,7 +673,7 @@ export class EntityDataSubscription {
subsTw.aggregation.interval, subsTw.aggregation.interval,
subsTw.aggregation.stateData, subsTw.aggregation.stateData,
this.utils, this.utils,
this.entityDataSubscriptionOptions.isReloadOnlyOnDataUpdated this.entityDataSubscriptionOptions.ignoreDataUpdateOnIntervalTick
); );
} }

View File

@ -61,7 +61,7 @@ export class EntityDataService {
private utils: UtilsService) {} private utils: UtilsService) {}
public prepareSubscription(listener: EntityDataListener, public prepareSubscription(listener: EntityDataListener,
isReloadOnlyOnDataUpdated = false): Observable<EntityDataLoadResult> { ignoreDataUpdateOnIntervalTick = false): Observable<EntityDataLoadResult> {
const datasource = listener.configDatasource; const datasource = listener.configDatasource;
listener.subscriptionOptions = this.createSubscriptionOptions( listener.subscriptionOptions = this.createSubscriptionOptions(
datasource, datasource,
@ -70,7 +70,7 @@ export class EntityDataService {
datasource.keyFilters, datasource.keyFilters,
null, null,
false, false,
isReloadOnlyOnDataUpdated); ignoreDataUpdateOnIntervalTick);
if (datasource.type === DatasourceType.entity && (!datasource.entityFilter || !datasource.pageLink)) { if (datasource.type === DatasourceType.entity && (!datasource.entityFilter || !datasource.pageLink)) {
return of(null); return of(null);
} }
@ -90,7 +90,7 @@ export class EntityDataService {
public subscribeForPaginatedData(listener: EntityDataListener, public subscribeForPaginatedData(listener: EntityDataListener,
pageLink: EntityDataPageLink, pageLink: EntityDataPageLink,
keyFilters: KeyFilter[], keyFilters: KeyFilter[],
isReloadOnlyOnDataUpdated = false): Observable<EntityDataLoadResult> { ignoreDataUpdateOnIntervalTick = false): Observable<EntityDataLoadResult> {
const datasource = listener.configDatasource; const datasource = listener.configDatasource;
listener.subscriptionOptions = this.createSubscriptionOptions( listener.subscriptionOptions = this.createSubscriptionOptions(
datasource, datasource,
@ -99,7 +99,7 @@ export class EntityDataService {
datasource.keyFilters, datasource.keyFilters,
keyFilters, keyFilters,
true, true,
isReloadOnlyOnDataUpdated); ignoreDataUpdateOnIntervalTick);
if (datasource.type === DatasourceType.entity && (!datasource.entityFilter || !pageLink)) { if (datasource.type === DatasourceType.entity && (!datasource.entityFilter || !pageLink)) {
listener.dataLoaded(emptyPageData<EntityData>(), [], listener.dataLoaded(emptyPageData<EntityData>(), [],
listener.configDatasourceIndex, listener.subscriptionOptions.pageLink); listener.configDatasourceIndex, listener.subscriptionOptions.pageLink);
@ -124,7 +124,7 @@ export class EntityDataService {
keyFilters: KeyFilter[], keyFilters: KeyFilter[],
additionalKeyFilters: KeyFilter[], additionalKeyFilters: KeyFilter[],
isPaginatedDataSubscription: boolean, isPaginatedDataSubscription: boolean,
isReloadOnlyOnDataUpdated: boolean): EntityDataSubscriptionOptions { ignoreDataUpdateOnIntervalTick: boolean): EntityDataSubscriptionOptions {
const subscriptionDataKeys: Array<SubscriptionDataKey> = []; const subscriptionDataKeys: Array<SubscriptionDataKey> = [];
datasource.dataKeys.forEach((dataKey) => { datasource.dataKeys.forEach((dataKey) => {
const subscriptionDataKey: SubscriptionDataKey = { const subscriptionDataKey: SubscriptionDataKey = {
@ -147,7 +147,7 @@ export class EntityDataService {
entityDataSubscriptionOptions.additionalKeyFilters = additionalKeyFilters; entityDataSubscriptionOptions.additionalKeyFilters = additionalKeyFilters;
} }
entityDataSubscriptionOptions.isPaginatedDataSubscription = isPaginatedDataSubscription; entityDataSubscriptionOptions.isPaginatedDataSubscription = isPaginatedDataSubscription;
entityDataSubscriptionOptions.isReloadOnlyOnDataUpdated = isReloadOnlyOnDataUpdated; entityDataSubscriptionOptions.ignoreDataUpdateOnIntervalTick = ignoreDataUpdateOnIntervalTick;
return entityDataSubscriptionOptions; return entityDataSubscriptionOptions;
} }
} }

View File

@ -226,7 +226,7 @@ export interface WidgetSubscriptionOptions {
hasDataPageLink?: boolean; hasDataPageLink?: boolean;
singleEntity?: boolean; singleEntity?: boolean;
warnOnPageDataOverflow?: boolean; warnOnPageDataOverflow?: boolean;
reloadOnlyOnDataUpdated?: boolean; ignoreDataUpdateOnIntervalTick?: boolean;
targetDeviceAliasIds?: Array<string>; targetDeviceAliasIds?: Array<string>;
targetDeviceIds?: Array<string>; targetDeviceIds?: Array<string>;
useDashboardTimewindow?: boolean; useDashboardTimewindow?: boolean;

View File

@ -83,7 +83,7 @@ export class WidgetSubscription implements IWidgetSubscription {
hasDataPageLink: boolean; hasDataPageLink: boolean;
singleEntity: boolean; singleEntity: boolean;
warnOnPageDataOverflow: boolean; warnOnPageDataOverflow: boolean;
reloadOnlyOnDataUpdated: boolean; ignoreDataUpdateOnIntervalTick: boolean;
datasourcePages: PageData<Datasource>[]; datasourcePages: PageData<Datasource>[];
dataPages: PageData<Array<DatasourceData>>[]; dataPages: PageData<Array<DatasourceData>>[];
@ -201,7 +201,7 @@ export class WidgetSubscription implements IWidgetSubscription {
this.hasDataPageLink = options.hasDataPageLink; this.hasDataPageLink = options.hasDataPageLink;
this.singleEntity = options.singleEntity; this.singleEntity = options.singleEntity;
this.warnOnPageDataOverflow = options.warnOnPageDataOverflow; this.warnOnPageDataOverflow = options.warnOnPageDataOverflow;
this.reloadOnlyOnDataUpdated = options.reloadOnlyOnDataUpdated; this.ignoreDataUpdateOnIntervalTick = options.ignoreDataUpdateOnIntervalTick;
this.datasourcePages = []; this.datasourcePages = [];
this.datasources = []; this.datasources = [];
this.dataPages = []; this.dataPages = [];
@ -425,7 +425,7 @@ export class WidgetSubscription implements IWidgetSubscription {
} }
}; };
this.entityDataListeners.push(listener); this.entityDataListeners.push(listener);
return this.ctx.entityDataService.prepareSubscription(listener, this.reloadOnlyOnDataUpdated); return this.ctx.entityDataService.prepareSubscription(listener, this.ignoreDataUpdateOnIntervalTick);
}); });
return forkJoin(resolveResultObservables).pipe( return forkJoin(resolveResultObservables).pipe(
map((resolveResults) => { map((resolveResults) => {
@ -817,7 +817,8 @@ export class WidgetSubscription implements IWidgetSubscription {
} }
}; };
this.entityDataListeners[datasourceIndex] = entityDataListener; this.entityDataListeners[datasourceIndex] = entityDataListener;
return this.ctx.entityDataService.subscribeForPaginatedData(entityDataListener, pageLink, keyFilters, this.reloadOnlyOnDataUpdated); return this.ctx.entityDataService.subscribeForPaginatedData(entityDataListener, pageLink, keyFilters,
this.ignoreDataUpdateOnIntervalTick);
} else { } else {
return of(null); return of(null);
} }

View File

@ -485,8 +485,8 @@ export class WidgetComponentService {
if (isUndefined(result.typeParameters.warnOnPageDataOverflow)) { if (isUndefined(result.typeParameters.warnOnPageDataOverflow)) {
result.typeParameters.warnOnPageDataOverflow = true; result.typeParameters.warnOnPageDataOverflow = true;
} }
if (isUndefined(result.typeParameters.reloadOnlyOnDataUpdated)) { if (isUndefined(result.typeParameters.ignoreDataUpdateOnIntervalTick)) {
result.typeParameters.reloadOnlyOnDataUpdated = false; result.typeParameters.ignoreDataUpdateOnIntervalTick = false;
} }
if (isUndefined(result.typeParameters.dataKeysOptional)) { if (isUndefined(result.typeParameters.dataKeysOptional)) {
result.typeParameters.dataKeysOptional = false; result.typeParameters.dataKeysOptional = false;

View File

@ -895,7 +895,7 @@ export class WidgetComponent extends PageComponent implements OnInit, AfterViewI
hasDataPageLink: this.typeParameters.hasDataPageLink, hasDataPageLink: this.typeParameters.hasDataPageLink,
singleEntity: this.typeParameters.singleEntity, singleEntity: this.typeParameters.singleEntity,
warnOnPageDataOverflow: this.typeParameters.warnOnPageDataOverflow, warnOnPageDataOverflow: this.typeParameters.warnOnPageDataOverflow,
reloadOnlyOnDataUpdated: this.typeParameters.reloadOnlyOnDataUpdated, ignoreDataUpdateOnIntervalTick: this.typeParameters.ignoreDataUpdateOnIntervalTick,
comparisonEnabled: comparisonSettings.comparisonEnabled, comparisonEnabled: comparisonSettings.comparisonEnabled,
timeForComparison: comparisonSettings.timeForComparison timeForComparison: comparisonSettings.timeForComparison
}; };

View File

@ -154,7 +154,7 @@ export interface WidgetTypeParameters {
hasDataPageLink?: boolean; hasDataPageLink?: boolean;
singleEntity?: boolean; singleEntity?: boolean;
warnOnPageDataOverflow?: boolean; warnOnPageDataOverflow?: boolean;
reloadOnlyOnDataUpdated?: boolean; ignoreDataUpdateOnIntervalTick?: boolean;
} }
export interface WidgetControllerDescriptor { export interface WidgetControllerDescriptor {