Merge remote-tracking branch 'upstream/master' into feature/cell-click-action
This commit is contained in:
commit
4425871d3e
@ -11,7 +11,7 @@
|
||||
"resources": [],
|
||||
"templateHtml": "<tb-entities-table-widget \n [ctx]=\"ctx\">\n</tb-entities-table-widget>",
|
||||
"templateCss": "",
|
||||
"controllerScript": "self.onInit = function() {\n}\n\nself.onDataUpdated = function() {\n self.ctx.$scope.entitiesTableWidget.onDataUpdated();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n hasDataPageLink: true,\n warnOnPageDataOverflow: false,\n dataKeysOptional: true\n };\n}\n\nself.actionSources = function() {\n return {\n 'actionCellButton': {\n name: 'widget-action.action-cell-button',\n multiple: true,\n hasShowCondition: true\n },\n 'rowClick': {\n name: 'widget-action.row-click',\n multiple: false\n },\n 'rowDoubleClick': {\n name: 'widget-action.row-double-click',\n multiple: false\n },\n 'cellClick': {\n name: 'widget-action.cell-click',\n multiple: true\n }\n };\n}\n\nself.onDestroy = function() {\n}\n",
|
||||
"controllerScript": "self.onInit = function() {\n}\n\nself.onDataUpdated = function() {\n self.ctx.$scope.entitiesTableWidget.onDataUpdated();\n}\n\nself.onEditModeChanged = function() {\n self.ctx.$scope.entitiesTableWidget.onEditModeChanged();\n}\n\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n hasDataPageLink: true,\n warnOnPageDataOverflow: false,\n dataKeysOptional: true\n };\n}\n\nself.actionSources = function() {\n return {\n 'actionCellButton': {\n name: 'widget-action.action-cell-button',\n multiple: true,\n hasShowCondition: true\n },\n 'rowClick': {\n name: 'widget-action.row-click',\n multiple: false\n },\n 'rowDoubleClick': {\n name: 'widget-action.row-double-click',\n multiple: false\n },\n 'cellClick': {\n name: 'widget-action.cell-click',\n multiple: false\n }\n };\n}\n\nself.onDestroy = function() {\n}\n",
|
||||
"settingsSchema": "",
|
||||
"dataKeySettingsSchema": "",
|
||||
"settingsDirective": "tb-entities-table-widget-settings",
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"resources": [],
|
||||
"templateHtml": "<tb-entities-table-widget \n [ctx]=\"ctx\">\n</tb-entities-table-widget>",
|
||||
"templateCss": "",
|
||||
"controllerScript": "self.onInit = function() {\n}\n\nself.onDataUpdated = function() {\n self.ctx.$scope.entitiesTableWidget.onDataUpdated();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n hasDataPageLink: true,\n warnOnPageDataOverflow: false,\n dataKeysOptional: true\n };\n}\n\nself.actionSources = function() {\n return {\n 'actionCellButton': {\n name: 'widget-action.action-cell-button',\n multiple: true,\n hasShowCondition: true\n },\n 'rowClick': {\n name: 'widget-action.row-click',\n multiple: false\n },\n 'rowDoubleClick': {\n name: 'widget-action.row-double-click',\n multiple: false\n },\n 'cellClick': {\n name: 'widget-action.cell-click',\n multiple: true\n }\n };\n}\n\nself.onDestroy = function() {\n}\n",
|
||||
"controllerScript": "self.onInit = function() {\n}\n\nself.onDataUpdated = function() {\n self.ctx.$scope.entitiesTableWidget.onDataUpdated();\n}\n\nself.onEditModeChanged = function() {\n self.ctx.$scope.entitiesTableWidget.onEditModeChanged();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n hasDataPageLink: true,\n warnOnPageDataOverflow: false,\n dataKeysOptional: true\n };\n}\n\nself.actionSources = function() {\n return {\n 'actionCellButton': {\n name: 'widget-action.action-cell-button',\n multiple: true,\n hasShowCondition: true\n },\n 'rowClick': {\n name: 'widget-action.row-click',\n multiple: false\n },\n 'rowDoubleClick': {\n name: 'widget-action.row-double-click',\n multiple: false\n },\n 'cellClick': {\n name: 'widget-action.cell-click',\n multiple: false\n }\n };\n}\n\nself.onDestroy = function() {\n}\n",
|
||||
"settingsSchema": "",
|
||||
"dataKeySettingsSchema": "",
|
||||
"settingsDirective": "tb-entities-table-widget-settings",
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"resources": [],
|
||||
"templateHtml": "<tb-entities-hierarchy-widget \n [ctx]=\"ctx\">\n</tb-entities-hierarchy-widget>",
|
||||
"templateCss": "",
|
||||
"controllerScript": "self.onInit = function() {\n}\n\nself.onDataUpdated = function() {\n self.ctx.$scope.entitiesHierarchyWidget.onDataUpdated();\n}\n\nself.typeParameters = function() {\n return {\n dataKeysOptional: true\n };\n}\n\nself.actionSources = function() {\n return {\n 'nodeSelected': {\n name: 'widget-action.node-selected',\n multiple: false\n }\n };\n}\n\nself.onDestroy = function() {\n}\n",
|
||||
"controllerScript": "self.onInit = function() {\n}\n\nself.onDataUpdated = function() {\n self.ctx.$scope.entitiesHierarchyWidget.onDataUpdated();\n}\n\nself.onEditModeChanged = function() {\n self.ctx.$scope.entitiesHierarchyWidget.onEditModeChanged();\n}\n\nself.typeParameters = function() {\n return {\n dataKeysOptional: true\n };\n}\n\nself.actionSources = function() {\n return {\n 'nodeSelected': {\n name: 'widget-action.node-selected',\n multiple: false\n }\n };\n}\n\nself.onDestroy = function() {\n}\n",
|
||||
"settingsSchema": "",
|
||||
"dataKeySettingsSchema": "",
|
||||
"settingsDirective": "tb-entities-hierarchy-widget-settings",
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"resources": [],
|
||||
"templateHtml": "<tb-entities-table-widget \n [ctx]=\"ctx\">\n</tb-entities-table-widget>",
|
||||
"templateCss": "",
|
||||
"controllerScript": "self.onInit = function() {\n}\n\nself.onDataUpdated = function() {\n self.ctx.$scope.entitiesTableWidget.onDataUpdated();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n hasDataPageLink: true,\n warnOnPageDataOverflow: false,\n dataKeysOptional: true,\n defaultDataKeysFunction: function() {\n return [{ name: 'name', type: 'entityField' }];\n }\n };\n}\n\nself.actionSources = function() {\n return {\n 'actionCellButton': {\n name: 'widget-action.action-cell-button',\n multiple: true,\n hasShowCondition: true\n },\n 'rowClick': {\n name: 'widget-action.row-click',\n multiple: false\n },\n 'rowDoubleClick': {\n name: 'widget-action.row-double-click',\n multiple: false\n },\n 'cellClick': {\n name: 'widget-action.cell-click',\n multiple: true\n }\n };\n}\n\nself.onDestroy = function() {\n}\n",
|
||||
"controllerScript": "self.onInit = function() {\n}\n\nself.onDataUpdated = function() {\n self.ctx.$scope.entitiesTableWidget.onDataUpdated();\n}\n\nself.onEditModeChanged = function() {\n self.ctx.$scope.entitiesTableWidget.onEditModeChanged();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n hasDataPageLink: true,\n warnOnPageDataOverflow: false,\n dataKeysOptional: true,\n defaultDataKeysFunction: function() {\n return [{ name: 'name', type: 'entityField' }];\n }\n };\n}\n\nself.actionSources = function() {\n return {\n 'actionCellButton': {\n name: 'widget-action.action-cell-button',\n multiple: true,\n hasShowCondition: true\n },\n 'rowClick': {\n name: 'widget-action.row-click',\n multiple: false\n },\n 'rowDoubleClick': {\n name: 'widget-action.row-double-click',\n multiple: false\n },\n 'cellClick': {\n name: 'widget-action.cell-click',\n multiple: false\n }\n };\n}\n\nself.onDestroy = function() {\n}\n",
|
||||
"settingsSchema": "",
|
||||
"dataKeySettingsSchema": "",
|
||||
"settingsDirective": "tb-entities-table-widget-settings",
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
"resources": [],
|
||||
"templateHtml": "<tb-timeseries-table-widget \n [ctx]=\"ctx\">\n</tb-timeseries-table-widget>",
|
||||
"templateCss": "",
|
||||
"controllerScript": "self.onInit = function() {\n}\n\nself.onDataUpdated = function() {\n self.ctx.$scope.timeseriesTableWidget.onDataUpdated();\n}\n\nself.onLatestDataUpdated = function() {\n self.ctx.$scope.timeseriesTableWidget.onLatestDataUpdated();\n}\n\nself.typeParameters = function() {\n return {\n ignoreDataUpdateOnIntervalTick: true,\n hasAdditionalLatestDataKeys: true,\n defaultDataKeysFunction: function() {\n return [{ name: 'temperature', label: 'Temperature', type: 'timeseries', units: '°C', decimals: 0 }];\n }\n };\n}\n\nself.actionSources = function() {\n return {\n 'actionCellButton': {\n name: 'widget-action.action-cell-button',\n multiple: true,\n hasShowCondition: true\n },\n 'rowClick': {\n name: 'widget-action.row-click',\n multiple: false\n }\n };\n}\n\nself.onDestroy = function() {\n}\n",
|
||||
"controllerScript": "self.onInit = function() {\n}\n\nself.onDataUpdated = function() {\n self.ctx.$scope.timeseriesTableWidget.onDataUpdated();\n}\n\nself.onLatestDataUpdated = function() {\n self.ctx.$scope.timeseriesTableWidget.onLatestDataUpdated();\n}\n\nself.onEditModeChanged = function() {\n self.ctx.$scope.timeseriesTableWidget.onEditModeChanged();\n}\n\nself.typeParameters = function() {\n return {\n ignoreDataUpdateOnIntervalTick: true,\n hasAdditionalLatestDataKeys: true,\n defaultDataKeysFunction: function() {\n return [{ name: 'temperature', label: 'Temperature', type: 'timeseries', units: '°C', decimals: 0 }];\n }\n };\n}\n\nself.actionSources = function() {\n return {\n 'actionCellButton': {\n name: 'widget-action.action-cell-button',\n multiple: true,\n hasShowCondition: true\n },\n 'rowClick': {\n name: 'widget-action.row-click',\n multiple: false\n }\n };\n}\n\nself.onDestroy = function() {\n}\n",
|
||||
"settingsSchema": "",
|
||||
"dataKeySettingsSchema": "",
|
||||
"latestDataKeySettingsSchema": "",
|
||||
|
||||
@ -103,7 +103,7 @@ public class RuleChainActorMessageProcessor extends ComponentMsgProcessor<RuleCh
|
||||
RuleChain ruleChain = service.findRuleChainById(tenantId, entityId);
|
||||
if (ruleChain != null && RuleChainType.CORE.equals(ruleChain.getType())) {
|
||||
List<RuleNode> ruleNodeList = service.getRuleChainNodes(tenantId, entityId);
|
||||
log.trace("[{}][{}] Starting rule chain with {} nodes", tenantId, entityId, ruleNodeList.size());
|
||||
log.debug("[{}][{}] Starting rule chain with {} nodes", tenantId, entityId, ruleNodeList.size());
|
||||
// Creating and starting the actors;
|
||||
for (RuleNode ruleNode : ruleNodeList) {
|
||||
log.trace("[{}][{}] Creating rule node [{}]: {}", entityId, ruleNode.getId(), ruleNode.getName(), ruleNode);
|
||||
@ -124,7 +124,7 @@ public class RuleChainActorMessageProcessor extends ComponentMsgProcessor<RuleCh
|
||||
if (ruleChain != null && RuleChainType.CORE.equals(ruleChain.getType())) {
|
||||
ruleChainName = ruleChain.getName();
|
||||
List<RuleNode> ruleNodeList = service.getRuleChainNodes(tenantId, entityId);
|
||||
log.trace("[{}][{}] Updating rule chain with {} nodes", tenantId, entityId, ruleNodeList.size());
|
||||
log.debug("[{}][{}] Updating rule chain with {} nodes", tenantId, entityId, ruleNodeList.size());
|
||||
for (RuleNode ruleNode : ruleNodeList) {
|
||||
RuleNodeCtx existing = nodeActors.get(ruleNode.getId());
|
||||
if (existing == null) {
|
||||
|
||||
@ -121,6 +121,7 @@ public class BaseRelationService implements RelationService {
|
||||
keys.add(new RelationCacheKey(null, event.getTo(), event.getType(), event.getTypeGroup(), EntitySearchDirection.TO));
|
||||
keys.add(new RelationCacheKey(null, event.getTo(), null, event.getTypeGroup(), EntitySearchDirection.TO));
|
||||
cache.evict(keys);
|
||||
log.debug("Processed evict event: {}", event);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -17,11 +17,13 @@ package org.thingsboard.server.dao.relation;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.ToString;
|
||||
import org.thingsboard.server.common.data.id.EntityId;
|
||||
import org.thingsboard.server.common.data.relation.EntityRelation;
|
||||
import org.thingsboard.server.common.data.relation.RelationTypeGroup;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@ToString
|
||||
public class EntityRelationEvent {
|
||||
@Getter
|
||||
private final EntityId from;
|
||||
|
||||
@ -197,6 +197,7 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC
|
||||
List<RuleNodeUpdateResult> updatedRuleNodes = new ArrayList<>();
|
||||
List<RuleNode> existingRuleNodes = getRuleChainNodes(tenantId, ruleChainMetaData.getRuleChainId());
|
||||
for (RuleNode existingNode : existingRuleNodes) {
|
||||
relationService.deleteEntityRelations(tenantId, existingNode.getId());
|
||||
Integer index = ruleNodeIndexMap.get(existingNode.getId());
|
||||
RuleNode newRuleNode = null;
|
||||
if (index != null) {
|
||||
|
||||
@ -135,6 +135,11 @@ public class TenantServiceImpl extends AbstractCachedEntityService<TenantId, Ten
|
||||
Tenant savedTenant = tenantDao.save(tenant.getId(), tenant);
|
||||
TenantId tenantId = savedTenant.getId();
|
||||
publishEvictEvent(new TenantEvictEvent(tenantId, create));
|
||||
|
||||
if (create && defaultEntitiesCreator != null) {
|
||||
defaultEntitiesCreator.accept(tenantId);
|
||||
}
|
||||
|
||||
eventPublisher.publishEvent(SaveEntityEvent.builder().tenantId(tenantId)
|
||||
.entityId(tenantId).entity(savedTenant).created(create).build());
|
||||
|
||||
@ -143,10 +148,8 @@ public class TenantServiceImpl extends AbstractCachedEntityService<TenantId, Ten
|
||||
assetProfileService.createDefaultAssetProfile(tenantId);
|
||||
apiUsageStateService.createDefaultApiUsageState(tenantId, null);
|
||||
notificationSettingsService.createDefaultNotificationConfigs(tenantId);
|
||||
if (defaultEntitiesCreator != null) {
|
||||
defaultEntitiesCreator.accept(tenantId);
|
||||
}
|
||||
}
|
||||
|
||||
return savedTenant;
|
||||
}
|
||||
|
||||
|
||||
@ -163,6 +163,13 @@ export class EntitiesHierarchyWidgetComponent extends PageComponent implements O
|
||||
this.updateNodeData(this.subscription.data);
|
||||
}
|
||||
|
||||
public onEditModeChanged() {
|
||||
if (this.textSearchMode) {
|
||||
this.ctx.hideTitlePanel = !this.ctx.isEdit;
|
||||
this.ctx.detectChanges(true);
|
||||
}
|
||||
}
|
||||
|
||||
private initializeConfig() {
|
||||
this.ctx.widgetActions = [this.searchAction];
|
||||
|
||||
|
||||
@ -273,6 +273,13 @@ export class EntitiesTableWidgetComponent extends PageComponent implements OnIni
|
||||
this.ctx.detectChanges();
|
||||
}
|
||||
|
||||
public onEditModeChanged() {
|
||||
if (this.textSearchMode) {
|
||||
this.ctx.hideTitlePanel = !this.ctx.isEdit;
|
||||
this.ctx.detectChanges(true);
|
||||
}
|
||||
}
|
||||
|
||||
public pageLinkSortDirection(): SortDirection {
|
||||
return entityDataPageLinkSortDirection(this.pageLink);
|
||||
}
|
||||
|
||||
@ -307,6 +307,13 @@ export class TimeseriesTableWidgetComponent extends PageComponent implements OnI
|
||||
this.ctx.detectChanges();
|
||||
}
|
||||
|
||||
public onEditModeChanged() {
|
||||
if (this.textSearchMode) {
|
||||
this.ctx.hideTitlePanel = !this.ctx.isEdit;
|
||||
this.ctx.detectChanges(true);
|
||||
}
|
||||
}
|
||||
|
||||
private initialize() {
|
||||
this.ctx.widgetActions = [this.searchAction, this.columnDisplayAction];
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user