Merge pull request #12186 from vvlladd28/improvement/js-library/version
Added JavaScript library details audit logs and version control
This commit is contained in:
commit
faf702a48e
@ -41,10 +41,10 @@
|
||||
<mat-checkbox *ngIf="entityId.entityType === entityTypes.DEVICE" formControlName="saveCredentials" style="margin-bottom: 16px;">
|
||||
{{ 'version-control.export-credentials' | translate }}
|
||||
</mat-checkbox>
|
||||
<mat-checkbox formControlName="saveAttributes" style="margin-bottom: 16px;">
|
||||
<mat-checkbox *ngIf="!entityTypesWithoutRelatedData.has(entityId.entityType)" formControlName="saveAttributes" style="margin-bottom: 16px;">
|
||||
{{ 'version-control.export-attributes' | translate }}
|
||||
</mat-checkbox>
|
||||
<mat-checkbox formControlName="saveRelations" style="margin-bottom: 16px;">
|
||||
<mat-checkbox *ngIf="!entityTypesWithoutRelatedData.has(entityId.entityType)" formControlName="saveRelations" style="margin-bottom: 16px;">
|
||||
{{ 'version-control.export-relations' | translate }}
|
||||
</mat-checkbox>
|
||||
</div>
|
||||
|
||||
@ -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<VersionCreationResult>;
|
||||
@ -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
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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',
|
||||
|
||||
@ -0,0 +1,27 @@
|
||||
<!--
|
||||
|
||||
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.
|
||||
|
||||
-->
|
||||
<mat-tab *ngIf="entity && entity.tenantId.id !== NULL_UUID && authUser.authority === authorities.TENANT_ADMIN && !isEdit" #auditLogsTab="matTab"
|
||||
label="{{ 'audit-log.audit-logs' | translate }}">
|
||||
<tb-audit-log-table detailsMode="true" [active]="auditLogsTab.isActive" [auditLogMode]="auditLogModes.ENTITY" [entityId]="entity.id"></tb-audit-log-table>
|
||||
</mat-tab>
|
||||
<mat-tab *ngIf="entity && entity.tenantId.id !== NULL_UUID && authUser.authority === authorities.TENANT_ADMIN && !isEdit"
|
||||
label="{{ 'version-control.version-control' | translate }}" #versionControlTab="matTab">
|
||||
<tb-version-control detailsMode="true" singleEntityMode="true"
|
||||
(versionRestored)="entitiesTableConfig.updateData()"
|
||||
[active]="versionControlTab.isActive" [entityId]="entity.id" [entityName]="entity.name" [externalEntityId]="entity.externalId || entity.id"></tb-version-control>
|
||||
</mat-tab>
|
||||
@ -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<Resource> {
|
||||
|
||||
readonly NULL_UUID = NULL_UUID;
|
||||
|
||||
constructor(protected store: Store<AppState>) {
|
||||
super(store);
|
||||
}
|
||||
}
|
||||
@ -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> = [
|
||||
EntityType.NOTIFICATION_RULE
|
||||
];
|
||||
|
||||
export const entityTypesWithoutRelatedData: Set<EntityType> = new Set([
|
||||
export const entityTypesWithoutRelatedData: Set<EntityType | AliasEntityType> = 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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user