diff --git a/ui-ngx/src/app/modules/home/components/vc/entity-version-create.component.html b/ui-ngx/src/app/modules/home/components/vc/entity-version-create.component.html
index 67ef5908e5..ab127e45cd 100644
--- a/ui-ngx/src/app/modules/home/components/vc/entity-version-create.component.html
+++ b/ui-ngx/src/app/modules/home/components/vc/entity-version-create.component.html
@@ -41,10 +41,10 @@
{{ 'version-control.export-credentials' | translate }}
-
+
{{ 'version-control.export-attributes' | translate }}
-
+
{{ 'version-control.export-relations' | translate }}
diff --git a/ui-ngx/src/app/modules/home/components/vc/entity-version-create.component.ts b/ui-ngx/src/app/modules/home/components/vc/entity-version-create.component.ts
index 26d45de2c0..7d3e89eda8 100644
--- a/ui-ngx/src/app/modules/home/components/vc/entity-version-create.component.ts
+++ b/ui-ngx/src/app/modules/home/components/vc/entity-version-create.component.ts
@@ -18,6 +18,7 @@ import { ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular
import { PageComponent } from '@shared/components/page.component';
import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';
import {
+ entityTypesWithoutRelatedData,
SingleEntityVersionCreateRequest,
VersionCreateRequestType,
VersionCreationResult
@@ -62,6 +63,8 @@ export class EntityVersionCreateComponent extends PageComponent implements OnIni
entityTypes = EntityType;
+ entityTypesWithoutRelatedData = entityTypesWithoutRelatedData;
+
resultMessage: string;
versionCreateResult$: Observable;
@@ -108,8 +111,10 @@ export class EntityVersionCreateComponent extends PageComponent implements OnIni
branch: this.createVersionFormGroup.get('branch').value,
versionName: this.createVersionFormGroup.get('versionName').value,
config: {
- saveRelations: this.createVersionFormGroup.get('saveRelations').value,
- saveAttributes: this.createVersionFormGroup.get('saveAttributes').value,
+ saveRelations: !entityTypesWithoutRelatedData.has(this.entityId.entityType)
+ ? this.createVersionFormGroup.get('saveRelations').value : false,
+ saveAttributes: !entityTypesWithoutRelatedData.has(this.entityId.entityType)
+ ? this.createVersionFormGroup.get('saveAttributes').value : false,
saveCredentials: this.entityId.entityType === EntityType.DEVICE ? this.createVersionFormGroup.get('saveCredentials').value : false
},
type: VersionCreateRequestType.SINGLE_ENTITY
diff --git a/ui-ngx/src/app/modules/home/pages/admin/admin.module.ts b/ui-ngx/src/app/modules/home/pages/admin/admin.module.ts
index 704f909809..784aade083 100644
--- a/ui-ngx/src/app/modules/home/pages/admin/admin.module.ts
+++ b/ui-ngx/src/app/modules/home/pages/admin/admin.module.ts
@@ -27,6 +27,7 @@ import { SmsProviderComponent } from '@home/pages/admin/sms-provider.component';
import { SendTestSmsDialogComponent } from '@home/pages/admin/send-test-sms-dialog.component';
import { HomeSettingsComponent } from '@home/pages/admin/home-settings.component';
import { ResourcesLibraryComponent } from '@home/pages/admin/resource/resources-library.component';
+import { ResourceTabsComponent } from '@home/pages/admin/resource/resource-tabs.component';
import { ResourcesTableHeaderComponent } from '@home/pages/admin/resource/resources-table-header.component';
import { QueueComponent } from '@home/pages/admin/queue/queue.component';
import { RepositoryAdminSettingsComponent } from '@home/pages/admin/repository-admin-settings.component';
@@ -47,6 +48,7 @@ import { NgxFlowModule } from '@flowjs/ngx-flow';
SecuritySettingsComponent,
HomeSettingsComponent,
ResourcesLibraryComponent,
+ ResourceTabsComponent,
ResourcesTableHeaderComponent,
JsResourceComponent,
JsLibraryTableHeaderComponent,
diff --git a/ui-ngx/src/app/modules/home/pages/admin/resource/js-library-table-config.resolver.ts b/ui-ngx/src/app/modules/home/pages/admin/resource/js-library-table-config.resolver.ts
index b0fadd53d9..862adf48d5 100644
--- a/ui-ngx/src/app/modules/home/pages/admin/resource/js-library-table-config.resolver.ts
+++ b/ui-ngx/src/app/modules/home/pages/admin/resource/js-library-table-config.resolver.ts
@@ -43,6 +43,7 @@ import { EntityAction } from '@home/models/entity/entity-component.models';
import { JsLibraryTableHeaderComponent } from '@home/pages/admin/resource/js-library-table-header.component';
import { JsResourceComponent } from '@home/pages/admin/resource/js-resource.component';
import { switchMap } from 'rxjs/operators';
+import { ResourceTabsComponent } from '@home/pages/admin/resource/resource-tabs.component';
@Injectable()
export class JsLibraryTableConfigResolver {
@@ -57,6 +58,7 @@ export class JsLibraryTableConfigResolver {
this.config.entityType = EntityType.TB_RESOURCE;
this.config.entityComponent = JsResourceComponent;
+ this.config.entityTabsComponent = ResourceTabsComponent;
this.config.entityTranslations = {
details: 'javascript.javascript-resource-details',
add: 'javascript.add',
diff --git a/ui-ngx/src/app/modules/home/pages/admin/resource/resource-tabs.component.html b/ui-ngx/src/app/modules/home/pages/admin/resource/resource-tabs.component.html
new file mode 100644
index 0000000000..fb608683d8
--- /dev/null
+++ b/ui-ngx/src/app/modules/home/pages/admin/resource/resource-tabs.component.html
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
diff --git a/ui-ngx/src/app/modules/home/pages/admin/resource/resource-tabs.component.ts b/ui-ngx/src/app/modules/home/pages/admin/resource/resource-tabs.component.ts
new file mode 100644
index 0000000000..2cd2f43d62
--- /dev/null
+++ b/ui-ngx/src/app/modules/home/pages/admin/resource/resource-tabs.component.ts
@@ -0,0 +1,36 @@
+///
+/// Copyright © 2016-2024 The Thingsboard Authors
+///
+/// Licensed under the Apache License, Version 2.0 (the "License");
+/// you may not use this file except in compliance with the License.
+/// You may obtain a copy of the License at
+///
+/// http://www.apache.org/licenses/LICENSE-2.0
+///
+/// Unless required by applicable law or agreed to in writing, software
+/// distributed under the License is distributed on an "AS IS" BASIS,
+/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+/// See the License for the specific language governing permissions and
+/// limitations under the License.
+///
+
+import { Component } from '@angular/core';
+import { EntityTabsComponent } from '@home/components/entity/entity-tabs.component';
+import { Resource } from '@shared/models/resource.models';
+import { Store } from '@ngrx/store';
+import { AppState } from '@core/core.state';
+import { NULL_UUID } from '@shared/models/id/has-uuid';
+
+@Component({
+ selector: 'tb-resource-tabs',
+ templateUrl: './resource-tabs.component.html',
+ styleUrls: []
+})
+export class ResourceTabsComponent extends EntityTabsComponent {
+
+ readonly NULL_UUID = NULL_UUID;
+
+ constructor(protected store: Store) {
+ super(store);
+ }
+}
diff --git a/ui-ngx/src/app/shared/models/vc.models.ts b/ui-ngx/src/app/shared/models/vc.models.ts
index ba54a297a7..15d41656df 100644
--- a/ui-ngx/src/app/shared/models/vc.models.ts
+++ b/ui-ngx/src/app/shared/models/vc.models.ts
@@ -15,7 +15,7 @@
///
import { EntityId } from '@shared/models/id/entity-id';
-import { EntityType } from '@shared/models/entity-type.models';
+import { AliasEntityType, EntityType } from '@shared/models/entity-type.models';
import { ExportableEntity } from '@shared/models/base-data';
import { EntityRelation } from '@shared/models/relation.models';
import { Device, DeviceCredentials } from '@shared/models/device.models';
@@ -38,7 +38,7 @@ export const exportableEntityTypes: Array = [
EntityType.NOTIFICATION_RULE
];
-export const entityTypesWithoutRelatedData: Set = new Set([
+export const entityTypesWithoutRelatedData: Set = new Set([
EntityType.NOTIFICATION_TEMPLATE,
EntityType.NOTIFICATION_TARGET,
EntityType.NOTIFICATION_RULE,
@@ -104,8 +104,8 @@ export function createDefaultEntityTypesVersionCreate(): {[entityType: string]:
for (const entityType of exportableEntityTypes) {
res[entityType] = {
syncStrategy: null,
- saveAttributes: true,
- saveRelations: true,
+ saveAttributes: !entityTypesWithoutRelatedData.has(entityType),
+ saveRelations: !entityTypesWithoutRelatedData.has(entityType),
saveCredentials: true,
allEntities: true,
entityIds: []
@@ -151,8 +151,8 @@ export function createDefaultEntityTypesVersionLoad(): {[entityType: string]: En
const res: {[entityType: string]: EntityTypeVersionLoadConfig} = {};
for (const entityType of exportableEntityTypes) {
res[entityType] = {
- loadAttributes: true,
- loadRelations: true,
+ loadAttributes: !entityTypesWithoutRelatedData.has(entityType),
+ loadRelations: !entityTypesWithoutRelatedData.has(entityType),
loadCredentials: true,
removeOtherEntities: false,
findExistingEntityByName: true