Merge maxunbearable/feature/calculated-fields-vc-ui

This commit is contained in:
Andrii Landiak 2025-03-03 15:27:02 +02:00 committed by GitHub
commit 3bdce8bd46
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 56 additions and 8 deletions

View File

@ -84,6 +84,9 @@
<mat-checkbox formControlName="saveRelations"> <mat-checkbox formControlName="saveRelations">
{{ 'version-control.export-relations' | translate }} {{ 'version-control.export-relations' | translate }}
</mat-checkbox> </mat-checkbox>
<mat-checkbox *ngIf="typesWithCalculatedFields.has(entityTypeFormGroup.get('entityType').value)" formControlName="saveCalculatedFields">
{{ 'version-control.export-calculated-fields' | translate }}
</mat-checkbox>
</div> </div>
</div> </div>
</div> </div>

View File

@ -25,7 +25,11 @@ import { TranslateService } from '@ngx-translate/core';
import { DialogService } from '@core/services/dialog.service'; import { DialogService } from '@core/services/dialog.service';
import { catchError, map, mergeMap } from 'rxjs/operators'; import { catchError, map, mergeMap } from 'rxjs/operators';
import { Observable, of } from 'rxjs'; import { Observable, of } from 'rxjs';
import { EntityTypeVersionCreateConfig, exportableEntityTypes } from '@shared/models/vc.models'; import {
EntityTypeVersionCreateConfig,
exportableEntityTypes,
typesWithCalculatedFields
} from '@shared/models/vc.models';
import { EntityType, entityTypeTranslations } from '@shared/models/entity-type.models'; import { EntityType, entityTypeTranslations } from '@shared/models/entity-type.models';
import { DomSanitizer, SafeHtml } from '@angular/platform-browser'; import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
@ -43,6 +47,8 @@ export class AutoCommitSettingsComponent extends PageComponent implements OnInit
isReadOnly: Observable<boolean>; isReadOnly: Observable<boolean>;
readonly typesWithCalculatedFields = typesWithCalculatedFields;
constructor(protected store: Store<AppState>, constructor(protected store: Store<AppState>,
private adminService: AdminService, private adminService: AdminService,
private dialogService: DialogService, private dialogService: DialogService,
@ -104,7 +110,8 @@ export class AutoCommitSettingsComponent extends PageComponent implements OnInit
branch: null, branch: null,
saveAttributes: true, saveAttributes: true,
saveRelations: false, saveRelations: false,
saveCredentials: true saveCredentials: true,
saveCalculatedFields: true,
}; };
const allowed = this.allowedEntityTypes(); const allowed = this.allowedEntityTypes();
let entityType: EntityType = null; let entityType: EntityType = null;
@ -206,7 +213,8 @@ export class AutoCommitSettingsComponent extends PageComponent implements OnInit
branch: [config.branch, []], branch: [config.branch, []],
saveRelations: [config.saveRelations, []], saveRelations: [config.saveRelations, []],
saveAttributes: [config.saveAttributes, []], saveAttributes: [config.saveAttributes, []],
saveCredentials: [config.saveCredentials, []] saveCredentials: [config.saveCredentials, []],
saveCalculatedFields: [config.saveCalculatedFields, []]
}) })
} }
); );

View File

@ -72,6 +72,9 @@
<mat-checkbox *ngIf="!entityTypesWithoutRelatedData.has(entityTypeFormGroup.get('entityType').value)" formControlName="saveRelations"> <mat-checkbox *ngIf="!entityTypesWithoutRelatedData.has(entityTypeFormGroup.get('entityType').value)" formControlName="saveRelations">
{{ 'version-control.export-relations' | translate }} {{ 'version-control.export-relations' | translate }}
</mat-checkbox> </mat-checkbox>
<mat-checkbox *ngIf="typesWithCalculatedFields.has(entityTypeFormGroup.get('entityType').value)" formControlName="saveCalculatedFields">
{{ 'version-control.export-calculated-fields' | translate }}
</mat-checkbox>
</div> </div>
</div> </div>
</div> </div>

View File

@ -33,7 +33,8 @@ import {
EntityTypeVersionCreateConfig, EntityTypeVersionCreateConfig,
exportableEntityTypes, exportableEntityTypes,
SyncStrategy, SyncStrategy,
syncStrategyTranslationMap syncStrategyTranslationMap,
typesWithCalculatedFields
} from '@shared/models/vc.models'; } from '@shared/models/vc.models';
import { Store } from '@ngrx/store'; import { Store } from '@ngrx/store';
import { AppState } from '@core/core.state'; import { AppState } from '@core/core.state';
@ -79,6 +80,8 @@ export class EntityTypesVersionCreateComponent extends PageComponent implements
loading = true; loading = true;
readonly typesWithCalculatedFields = typesWithCalculatedFields;
constructor(protected store: Store<AppState>, constructor(protected store: Store<AppState>,
private translate: TranslateService, private translate: TranslateService,
private fb: UntypedFormBuilder, private fb: UntypedFormBuilder,
@ -150,6 +153,7 @@ export class EntityTypesVersionCreateComponent extends PageComponent implements
saveRelations: [config.saveRelations, []], saveRelations: [config.saveRelations, []],
saveAttributes: [config.saveAttributes, []], saveAttributes: [config.saveAttributes, []],
saveCredentials: [config.saveCredentials, []], saveCredentials: [config.saveCredentials, []],
saveCalculatedFields: [config.saveCalculatedFields, []],
allEntities: [config.allEntities, []], allEntities: [config.allEntities, []],
entityIds: [config.entityIds, [Validators.required]] entityIds: [config.entityIds, [Validators.required]]
}) })
@ -202,6 +206,7 @@ export class EntityTypesVersionCreateComponent extends PageComponent implements
saveAttributes: true, saveAttributes: true,
saveRelations: true, saveRelations: true,
saveCredentials: true, saveCredentials: true,
saveCalculatedFields: true,
allEntities: true, allEntities: true,
entityIds: [] entityIds: []
}; };

View File

@ -72,6 +72,9 @@
<mat-checkbox *ngIf="!entityTypesWithoutRelatedData.has(entityTypeFormGroup.get('entityType').value)" formControlName="loadRelations"> <mat-checkbox *ngIf="!entityTypesWithoutRelatedData.has(entityTypeFormGroup.get('entityType').value)" formControlName="loadRelations">
{{ 'version-control.load-relations' | translate }} {{ 'version-control.load-relations' | translate }}
</mat-checkbox> </mat-checkbox>
<mat-checkbox *ngIf="typesWithCalculatedFields.has(entityTypeFormGroup.get('entityType').value)" formControlName="loadCalculatedFields">
{{ 'version-control.load-calculated-fields' | translate }}
</mat-checkbox>
</div> </div>
</div> </div>
</div> </div>

View File

@ -31,7 +31,8 @@ import { PageComponent } from '@shared/components/page.component';
import { import {
entityTypesWithoutRelatedData, entityTypesWithoutRelatedData,
EntityTypeVersionLoadConfig, EntityTypeVersionLoadConfig,
exportableEntityTypes exportableEntityTypes,
typesWithCalculatedFields
} from '@shared/models/vc.models'; } from '@shared/models/vc.models';
import { Store } from '@ngrx/store'; import { Store } from '@ngrx/store';
import { AppState } from '@core/core.state'; import { AppState } from '@core/core.state';
@ -75,6 +76,8 @@ export class EntityTypesVersionLoadComponent extends PageComponent implements On
loading = true; loading = true;
readonly typesWithCalculatedFields = typesWithCalculatedFields;
constructor(protected store: Store<AppState>, constructor(protected store: Store<AppState>,
private translate: TranslateService, private translate: TranslateService,
private popoverService: TbPopoverService, private popoverService: TbPopoverService,
@ -145,6 +148,7 @@ export class EntityTypesVersionLoadComponent extends PageComponent implements On
loadRelations: [config.loadRelations, []], loadRelations: [config.loadRelations, []],
loadAttributes: [config.loadAttributes, []], loadAttributes: [config.loadAttributes, []],
loadCredentials: [config.loadCredentials, []], loadCredentials: [config.loadCredentials, []],
loadCalculatedFields: [config.loadCalculatedFields, []],
removeOtherEntities: [config.removeOtherEntities, []], removeOtherEntities: [config.removeOtherEntities, []],
findExistingEntityByName: [config.findExistingEntityByName, []] findExistingEntityByName: [config.findExistingEntityByName, []]
}) })
@ -180,6 +184,7 @@ export class EntityTypesVersionLoadComponent extends PageComponent implements On
loadAttributes: true, loadAttributes: true,
loadRelations: true, loadRelations: true,
loadCredentials: true, loadCredentials: true,
loadCalculatedFields: true,
removeOtherEntities: false, removeOtherEntities: false,
findExistingEntityByName: true findExistingEntityByName: true
}; };

View File

@ -47,6 +47,9 @@
<mat-checkbox *ngIf="!entityTypesWithoutRelatedData.has(entityId.entityType)" formControlName="saveRelations" style="margin-bottom: 16px;"> <mat-checkbox *ngIf="!entityTypesWithoutRelatedData.has(entityId.entityType)" formControlName="saveRelations" style="margin-bottom: 16px;">
{{ 'version-control.export-relations' | translate }} {{ 'version-control.export-relations' | translate }}
</mat-checkbox> </mat-checkbox>
<mat-checkbox *ngIf="typesWithCalculatedFields.has(entityId.entityType)" formControlName="saveCalculatedFields" class="mb-4">
{{ 'version-control.export-calculated-fields' | translate }}
</mat-checkbox>
</div> </div>
</fieldset> </fieldset>
</form> </form>

View File

@ -20,6 +20,7 @@ import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms
import { import {
entityTypesWithoutRelatedData, entityTypesWithoutRelatedData,
SingleEntityVersionCreateRequest, SingleEntityVersionCreateRequest,
typesWithCalculatedFields,
VersionCreateRequestType, VersionCreateRequestType,
VersionCreationResult VersionCreationResult
} from '@shared/models/vc.models'; } from '@shared/models/vc.models';
@ -71,6 +72,8 @@ export class EntityVersionCreateComponent extends PageComponent implements OnIni
private versionCreateResultSubscription: Subscription; private versionCreateResultSubscription: Subscription;
readonly typesWithCalculatedFields = typesWithCalculatedFields;
constructor(protected store: Store<AppState>, constructor(protected store: Store<AppState>,
private entitiesVersionControlService: EntitiesVersionControlService, private entitiesVersionControlService: EntitiesVersionControlService,
private cd: ChangeDetectorRef, private cd: ChangeDetectorRef,
@ -115,7 +118,8 @@ export class EntityVersionCreateComponent extends PageComponent implements OnIni
? this.createVersionFormGroup.get('saveRelations').value : false, ? this.createVersionFormGroup.get('saveRelations').value : false,
saveAttributes: !entityTypesWithoutRelatedData.has(this.entityId.entityType) saveAttributes: !entityTypesWithoutRelatedData.has(this.entityId.entityType)
? this.createVersionFormGroup.get('saveAttributes').value : false, ? this.createVersionFormGroup.get('saveAttributes').value : false,
saveCredentials: this.entityId.entityType === EntityType.DEVICE ? this.createVersionFormGroup.get('saveCredentials').value : false saveCredentials: this.entityId.entityType === EntityType.DEVICE ? this.createVersionFormGroup.get('saveCredentials').value : false,
saveCalculatedFields: typesWithCalculatedFields.has(this.entityId.entityType) ? this.createVersionFormGroup.get('saveCalculatedFields').value : false,
}, },
type: VersionCreateRequestType.SINGLE_ENTITY type: VersionCreateRequestType.SINGLE_ENTITY
}; };

View File

@ -36,6 +36,9 @@
<mat-checkbox *ngIf="entityDataInfo.hasRelations" formControlName="loadRelations" style="margin-bottom: 16px;"> <mat-checkbox *ngIf="entityDataInfo.hasRelations" formControlName="loadRelations" style="margin-bottom: 16px;">
{{ 'version-control.load-relations' | translate }} {{ 'version-control.load-relations' | translate }}
</mat-checkbox> </mat-checkbox>
<mat-checkbox *ngIf="entityDataInfo.hasCalculatedFields" formControlName="loadCalculatedFields" class="mb-4">
{{ 'version-control.load-calculated-fields' | translate }}
</mat-checkbox>
</div> </div>
</fieldset> </fieldset>
</form> </form>

View File

@ -79,7 +79,8 @@ export class EntityVersionRestoreComponent extends PageComponent implements OnIn
this.restoreFormGroup = this.fb.group({ this.restoreFormGroup = this.fb.group({
loadAttributes: [true, []], loadAttributes: [true, []],
loadRelations: [true, []], loadRelations: [true, []],
loadCredentials: [true, []] loadCredentials: [true, []],
loadCalculatedFields: [true, []]
}); });
this.entitiesVersionControlService.getEntityDataInfo(this.externalEntityId, this.versionId).subscribe((data) => { this.entitiesVersionControlService.getEntityDataInfo(this.externalEntityId, this.versionId).subscribe((data) => {
this.entityDataInfo = data; this.entityDataInfo = data;
@ -110,7 +111,8 @@ export class EntityVersionRestoreComponent extends PageComponent implements OnIn
config: { config: {
loadRelations: this.entityDataInfo.hasRelations ? this.restoreFormGroup.get('loadRelations').value : false, loadRelations: this.entityDataInfo.hasRelations ? this.restoreFormGroup.get('loadRelations').value : false,
loadAttributes: this.entityDataInfo.hasAttributes ? this.restoreFormGroup.get('loadAttributes').value : false, loadAttributes: this.entityDataInfo.hasAttributes ? this.restoreFormGroup.get('loadAttributes').value : false,
loadCredentials: this.entityDataInfo.hasCredentials ? this.restoreFormGroup.get('loadCredentials').value : false loadCredentials: this.entityDataInfo.hasCredentials ? this.restoreFormGroup.get('loadCredentials').value : false,
loadCalculatedFields: this.entityDataInfo.hasCalculatedFields ? this.restoreFormGroup.get('loadCalculatedFields').value : false
}, },
type: VersionLoadRequestType.SINGLE_ENTITY type: VersionLoadRequestType.SINGLE_ENTITY
}; };

View File

@ -49,6 +49,7 @@ export interface VersionCreateConfig {
saveRelations: boolean; saveRelations: boolean;
saveAttributes: boolean; saveAttributes: boolean;
saveCredentials: boolean; saveCredentials: boolean;
saveCalculatedFields: boolean;
} }
export enum VersionCreateRequestType { export enum VersionCreateRequestType {
@ -106,6 +107,7 @@ export function createDefaultEntityTypesVersionCreate(): {[entityType: string]:
syncStrategy: null, syncStrategy: null,
saveAttributes: !entityTypesWithoutRelatedData.has(entityType), saveAttributes: !entityTypesWithoutRelatedData.has(entityType),
saveRelations: !entityTypesWithoutRelatedData.has(entityType), saveRelations: !entityTypesWithoutRelatedData.has(entityType),
saveCalculatedFields: typesWithCalculatedFields.has(entityType),
saveCredentials: true, saveCredentials: true,
allEntities: true, allEntities: true,
entityIds: [] entityIds: []
@ -118,6 +120,7 @@ export interface VersionLoadConfig {
loadRelations: boolean; loadRelations: boolean;
loadAttributes: boolean; loadAttributes: boolean;
loadCredentials: boolean; loadCredentials: boolean;
loadCalculatedFields: boolean;
} }
export enum VersionLoadRequestType { export enum VersionLoadRequestType {
@ -154,6 +157,7 @@ export function createDefaultEntityTypesVersionLoad(): {[entityType: string]: En
loadAttributes: !entityTypesWithoutRelatedData.has(entityType), loadAttributes: !entityTypesWithoutRelatedData.has(entityType),
loadRelations: !entityTypesWithoutRelatedData.has(entityType), loadRelations: !entityTypesWithoutRelatedData.has(entityType),
loadCredentials: true, loadCredentials: true,
loadCalculatedFields: typesWithCalculatedFields.has(entityType),
removeOtherEntities: false, removeOtherEntities: false,
findExistingEntityByName: true findExistingEntityByName: true
}; };
@ -254,4 +258,7 @@ export interface EntityDataInfo {
hasRelations: boolean; hasRelations: boolean;
hasAttributes: boolean; hasAttributes: boolean;
hasCredentials: boolean; hasCredentials: boolean;
hasCalculatedFields: boolean;
} }
export const typesWithCalculatedFields = new Set<EntityType | AliasEntityType>([EntityType.DEVICE, EntityType.ASSET, EntityType.ASSET_PROFILE, EntityType.DEVICE_PROFILE]);

View File

@ -6320,6 +6320,7 @@
"export-relations": "Export relations", "export-relations": "Export relations",
"export-attributes": "Export attributes", "export-attributes": "Export attributes",
"export-credentials": "Export credentials", "export-credentials": "Export credentials",
"export-calculated-fields": "Export calculated fields",
"entity-versions": "Entity versions", "entity-versions": "Entity versions",
"versions": "Versions", "versions": "Versions",
"created-time": "Created time", "created-time": "Created time",
@ -6336,6 +6337,7 @@
"load-relations": "Load relations", "load-relations": "Load relations",
"load-attributes": "Load attributes", "load-attributes": "Load attributes",
"load-credentials": "Load credentials", "load-credentials": "Load credentials",
"load-calculated-fields": "Load calculated fields",
"compare-with-current": "Compare with current", "compare-with-current": "Compare with current",
"diff-entity-with-version": "Diff with entity version '{{versionName}}'", "diff-entity-with-version": "Diff with entity version '{{versionName}}'",
"previous-difference": "Previous Difference", "previous-difference": "Previous Difference",