Merge pull request #13501 from vvlladd28/improved/entity-type/add-reletion

Add allow created/view relation to rule chain
This commit is contained in:
Igor Kulikov 2025-06-02 19:36:21 +03:00 committed by GitHub
commit a00ff91540
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 22 additions and 6 deletions

View File

@ -38,6 +38,7 @@
'relation.to-entity' : 'relation.from-entity') | translate}}</small>
<tb-entity-list-select
formControlName="targetEntityIds"
[additionEntityTypes]="additionEntityTypes"
required="true">
</tb-entity-list-select>
<tb-json-object-edit

View File

@ -19,7 +19,7 @@ import { ErrorStateMatcher } from '@angular/material/core';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import { Store } from '@ngrx/store';
import { AppState } from '@core/core.state';
import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, FormGroupDirective, NgForm, Validators } from '@angular/forms';
import { FormBuilder, FormControl, FormGroup, FormGroupDirective, NgForm, Validators } from '@angular/forms';
import {
CONTAINS_TYPE,
EntityRelation,
@ -33,6 +33,9 @@ import { JsonObjectEditComponent } from '@shared/components/json-object-edit.com
import { Router } from '@angular/router';
import { DialogComponent } from '@shared/components/dialog.component';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { getCurrentAuthUser } from '@core/auth/auth.selectors';
import { Authority } from '@shared/models/authority.enum';
import { EntityType } from '@shared/models/entity-type.models';
export interface RelationDialogData {
isAdd: boolean;
@ -48,25 +51,29 @@ export interface RelationDialogData {
})
export class RelationDialogComponent extends DialogComponent<RelationDialogComponent, boolean> implements OnInit, ErrorStateMatcher {
relationFormGroup: UntypedFormGroup;
relationFormGroup: FormGroup;
additionEntityTypes: {[key in string]: string} = {};
isAdd: boolean;
direction: EntitySearchDirection;
entitySearchDirection = EntitySearchDirection;
additionalInfo: UntypedFormControl;
additionalInfo: FormControl;
@ViewChild('additionalInfoEdit', {static: true}) additionalInfoEdit: JsonObjectEditComponent;
submitted = false;
private authUser = getCurrentAuthUser(this.store);
constructor(protected store: Store<AppState>,
protected router: Router,
@Inject(MAT_DIALOG_DATA) public data: RelationDialogData,
private entityRelationService: EntityRelationService,
@SkipSelf() private errorStateMatcher: ErrorStateMatcher,
public dialogRef: MatDialogRef<RelationDialogComponent, boolean>,
public fb: UntypedFormBuilder,
public fb: FormBuilder,
private destroyRef: DestroyRef) {
super(store, router, dialogRef);
this.isAdd = data.isAdd;
@ -74,13 +81,17 @@ export class RelationDialogComponent extends DialogComponent<RelationDialogCompo
}
ngOnInit(): void {
if (this.authUser.authority === Authority.TENANT_ADMIN) {
this.additionEntityTypes = {[EntityType.RULE_CHAIN]: null};
}
this.relationFormGroup = this.fb.group({
type: [this.isAdd ? CONTAINS_TYPE : this.data.relation.type, [Validators.required]],
targetEntityIds: [this.isAdd ? null :
[this.direction === EntitySearchDirection.FROM ? this.data.relation.to : this.data.relation.from],
[Validators.required]]
});
this.additionalInfo = new UntypedFormControl(this.data.relation.additionalInfo ? {...this.data.relation.additionalInfo} : null);
this.additionalInfo = new FormControl(this.data.relation.additionalInfo ? {...this.data.relation.additionalInfo} : null);
if (!this.isAdd) {
this.relationFormGroup.get('type').disable();
this.relationFormGroup.get('targetEntityIds').disable();
@ -94,7 +105,7 @@ export class RelationDialogComponent extends DialogComponent<RelationDialogCompo
);
}
isErrorState(control: UntypedFormControl | null, form: FormGroupDirective | NgForm | null): boolean {
isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {
const originalErrorState = this.errorStateMatcher.isErrorState(control, form);
const customErrorState = !!(control && control.invalid && this.submitted);
return originalErrorState || customErrorState;

View File

@ -26,6 +26,7 @@
[useAliasEntityTypes]="useAliasEntityTypes"
[allowedEntityTypes]="allowedEntityTypes"
[filterAllowedEntityTypes]="filterAllowedEntityTypes"
[additionEntityTypes]="additionEntityTypes"
formControlName="entityType">
</tb-entity-type-select>
<tb-entity-list

View File

@ -65,6 +65,9 @@ export class EntityListSelectComponent implements ControlValueAccessor, OnInit {
@Input()
predefinedEntityType: EntityType | AliasEntityType;
@Input()
additionEntityTypes: {[key in string]: string} = {};
displayEntityTypeSelect: boolean;
private defaultEntityType: EntityType | AliasEntityType = null;