dependency field fix
This commit is contained in:
parent
ed96403d25
commit
ef016f5419
|
@ -611,7 +611,7 @@ public class DescriptionServiceImpl implements DescriptionService {
|
||||||
|
|
||||||
Map<String, List<UUID>> fieldToReferenceMap = new HashMap<>();
|
Map<String, List<UUID>> fieldToReferenceMap = new HashMap<>();
|
||||||
|
|
||||||
List<DescriptionReferenceEntity> descriptionReferences = this.queryFactory.query(DescriptionReferenceQuery.class).descriptionIds(descriptionId).collect();
|
List<DescriptionReferenceEntity> descriptionReferences = this.queryFactory.query(DescriptionReferenceQuery.class).isActive(IsActive.Active).descriptionIds(descriptionId).collect();
|
||||||
Map<UUID, List<DescriptionReferenceEntity>> descriptionReferenceEntityByReferenceId = new HashMap<>();
|
Map<UUID, List<DescriptionReferenceEntity>> descriptionReferenceEntityByReferenceId = new HashMap<>();
|
||||||
for (DescriptionReferenceEntity descriptionReferenceEntity : descriptionReferences){
|
for (DescriptionReferenceEntity descriptionReferenceEntity : descriptionReferences){
|
||||||
List<DescriptionReferenceEntity> descriptionReferenceEntities = descriptionReferenceEntityByReferenceId.getOrDefault(descriptionReferenceEntity.getReferenceId(), null);
|
List<DescriptionReferenceEntity> descriptionReferenceEntities = descriptionReferenceEntityByReferenceId.getOrDefault(descriptionReferenceEntity.getReferenceId(), null);
|
||||||
|
|
|
@ -767,7 +767,7 @@ public class DmpServiceImpl implements DmpService {
|
||||||
private void patchAndSaveReferences(List<DmpReferencePersist> models, UUID dmpId, eu.eudat.commons.types.dmpblueprint.DefinitionEntity blueprintDefinition) throws InvalidApplicationException {
|
private void patchAndSaveReferences(List<DmpReferencePersist> models, UUID dmpId, eu.eudat.commons.types.dmpblueprint.DefinitionEntity blueprintDefinition) throws InvalidApplicationException {
|
||||||
if (models == null) models = new ArrayList<>();
|
if (models == null) models = new ArrayList<>();
|
||||||
|
|
||||||
List<DmpReferenceEntity> dmpReferences = this.queryFactory.query(DmpReferenceQuery.class).dmpIds(dmpId).collect();
|
List<DmpReferenceEntity> dmpReferences = this.queryFactory.query(DmpReferenceQuery.class).dmpIds(dmpId).isActives(IsActive.Active).collect();
|
||||||
Map<UUID, List<DmpReferenceEntity>> dmpReferenceEntityByReferenceId = new HashMap<>();
|
Map<UUID, List<DmpReferenceEntity>> dmpReferenceEntityByReferenceId = new HashMap<>();
|
||||||
for (DmpReferenceEntity dmpReferenceEntity : dmpReferences){
|
for (DmpReferenceEntity dmpReferenceEntity : dmpReferences){
|
||||||
List<DmpReferenceEntity> dmpReferenceEntities = dmpReferenceEntityByReferenceId.getOrDefault(dmpReferenceEntity.getReferenceId(), null);
|
List<DmpReferenceEntity> dmpReferenceEntities = dmpReferenceEntityByReferenceId.getOrDefault(dmpReferenceEntity.getReferenceId(), null);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { Component, Input, OnInit } from '@angular/core';
|
import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';
|
||||||
import { UntypedFormArray, UntypedFormGroup } from '@angular/forms';
|
import { UntypedFormArray, UntypedFormGroup } from '@angular/forms';
|
||||||
import { MatDialog } from '@angular/material/dialog';
|
import { MatDialog } from '@angular/material/dialog';
|
||||||
import { ReferenceType } from '@app/core/model/reference-type/reference-type';
|
import { ReferenceType } from '@app/core/model/reference-type/reference-type';
|
||||||
|
@ -13,13 +13,14 @@ import { Reference, ReferencePersist } from '@app/core/model/reference/reference
|
||||||
import { ReferenceSearchLookup } from '@app/core/query/reference-search.lookup';
|
import { ReferenceSearchLookup } from '@app/core/query/reference-search.lookup';
|
||||||
import { Guid } from '@common/types/guid';
|
import { Guid } from '@common/types/guid';
|
||||||
import { nameof } from 'ts-simple-nameof';
|
import { nameof } from 'ts-simple-nameof';
|
||||||
|
import { Subscription } from 'rxjs';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-reference-field-component',
|
selector: 'app-reference-field-component',
|
||||||
templateUrl: 'reference-field.component.html',
|
templateUrl: 'reference-field.component.html',
|
||||||
styleUrls: ['./reference-field.component.scss']
|
styleUrls: ['./reference-field.component.scss']
|
||||||
})
|
})
|
||||||
export class ReferenceFieldComponent extends BaseComponent implements OnInit {
|
export class ReferenceFieldComponent extends BaseComponent implements OnInit, OnChanges {
|
||||||
|
|
||||||
@Input() referenceType: ReferenceType = null;
|
@Input() referenceType: ReferenceType = null;
|
||||||
@Input() form: UntypedFormGroup = null;
|
@Input() form: UntypedFormGroup = null;
|
||||||
|
@ -31,11 +32,13 @@ export class ReferenceFieldComponent extends BaseComponent implements OnInit {
|
||||||
@Input() dependencies: UntypedFormGroup = null;
|
@Input() dependencies: UntypedFormGroup = null;
|
||||||
|
|
||||||
referenceToUse: Reference[]= [];
|
referenceToUse: Reference[]= [];
|
||||||
referenceToUseInitialized = false;
|
|
||||||
|
referenceDepedencyIds: Guid[] = [];
|
||||||
|
|
||||||
multipleAutoCompleteSearchConfiguration: MultipleAutoCompleteConfiguration;
|
multipleAutoCompleteSearchConfiguration: MultipleAutoCompleteConfiguration;
|
||||||
singleAutoCompleteSearchConfiguration: SingleAutoCompleteConfiguration;
|
singleAutoCompleteSearchConfiguration: SingleAutoCompleteConfiguration;
|
||||||
|
|
||||||
|
dependenciesSubscription: Subscription = null;
|
||||||
constructor(
|
constructor(
|
||||||
private referenceService: ReferenceService,
|
private referenceService: ReferenceService,
|
||||||
public enumUtils: EnumUtils,
|
public enumUtils: EnumUtils,
|
||||||
|
@ -43,13 +46,9 @@ export class ReferenceFieldComponent extends BaseComponent implements OnInit {
|
||||||
) { super(); }
|
) { super(); }
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
const referenceDepedencyIds = this.referenceType.definition.sources.filter(x => x.referenceTypeDependencies).flatMap(x => x.referenceTypeDependencies).filter(x => x).map(x => x.id);
|
this.referenceDepedencyIds = this.referenceType.definition.sources.filter(x => x.referenceTypeDependencies).flatMap(x => x.referenceTypeDependencies).filter(x => x).map(x => x.id);
|
||||||
if (referenceDepedencyIds.length > 0) {
|
if (this.referenceDepedencyIds.length > 0) {
|
||||||
this.referenceToUseInitialized = false;
|
this.resolveReferenceDepedency(true);
|
||||||
this.dependencies.valueChanges.pipe(takeUntil(this._destroyed)).subscribe(changes => {
|
|
||||||
this.resolveReferenceDepedency(referenceDepedencyIds);
|
|
||||||
});
|
|
||||||
this.resolveReferenceDepedency(referenceDepedencyIds);
|
|
||||||
} else {
|
} else {
|
||||||
if (this.multiple) {
|
if (this.multiple) {
|
||||||
this.multipleAutoCompleteSearchConfiguration = this.referenceService.getMultipleAutoCompleteSearchConfiguration(this.referenceType.id, null);
|
this.multipleAutoCompleteSearchConfiguration = this.referenceService.getMultipleAutoCompleteSearchConfiguration(this.referenceType.id, null);
|
||||||
|
@ -59,7 +58,20 @@ export class ReferenceFieldComponent extends BaseComponent implements OnInit {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
resolveReferenceDepedency(referenceDepedencyIds: Guid[]) {
|
ngOnChanges(changes: SimpleChanges) {
|
||||||
|
if ((changes['dependencies'] || changes['referenceType']) && this.dependencies != null && this.referenceType != null) {
|
||||||
|
this.referenceDepedencyIds = this.referenceType.definition.sources.filter(x => x.referenceTypeDependencies).flatMap(x => x.referenceTypeDependencies).filter(x => x).map(x => x.id);
|
||||||
|
if (this.referenceDepedencyIds.length > 0) {
|
||||||
|
if (this.dependenciesSubscription != null) this.dependenciesSubscription.unsubscribe();
|
||||||
|
this.resolveReferenceDepedency(true);
|
||||||
|
this.dependenciesSubscription = this.dependencies.valueChanges.pipe(takeUntil(this._destroyed)).subscribe(changes => {
|
||||||
|
this.resolveReferenceDepedency(false);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resolveReferenceDepedency(isInitial: boolean) {
|
||||||
const referenceToUse : Reference[]= [];
|
const referenceToUse : Reference[]= [];
|
||||||
Object.keys(this.dependencies.controls).forEach(controlName => {
|
Object.keys(this.dependencies.controls).forEach(controlName => {
|
||||||
// (this.dependencies.get(controlName).get('references').value as Reference[]).filter(x=> sourcesWithDependencies.some(y => y.referenceTypeDependencies) x.type.id == this.referenceType.id &&)
|
// (this.dependencies.get(controlName).get('references').value as Reference[]).filter(x=> sourcesWithDependencies.some(y => y.referenceTypeDependencies) x.type.id == this.referenceType.id &&)
|
||||||
|
@ -67,7 +79,7 @@ export class ReferenceFieldComponent extends BaseComponent implements OnInit {
|
||||||
if (foudReferences != null) {
|
if (foudReferences != null) {
|
||||||
for (let i = 0; i < foudReferences.length; i++) {
|
for (let i = 0; i < foudReferences.length; i++) {
|
||||||
const foudReference = foudReferences[i];
|
const foudReference = foudReferences[i];
|
||||||
if (foudReference?.typeId && referenceDepedencyIds.includes(foudReference.typeId)) {
|
if (foudReference?.typeId && this.referenceDepedencyIds.includes(foudReference.typeId)) {
|
||||||
const typed = foudReference as ReferencePersist;
|
const typed = foudReference as ReferencePersist;
|
||||||
|
|
||||||
referenceToUse.push({
|
referenceToUse.push({
|
||||||
|
@ -84,20 +96,28 @@ export class ReferenceFieldComponent extends BaseComponent implements OnInit {
|
||||||
id: typed.typeId,
|
id: typed.typeId,
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
} else if (foudReference?.type?.id && referenceDepedencyIds.includes(foudReference.type.id)) {
|
} else if (foudReference?.type?.id && this.referenceDepedencyIds.includes(foudReference.type.id)) {
|
||||||
const typed = foudReference as Reference;
|
const typed = foudReference as Reference;
|
||||||
if (typed != null) referenceToUse.push(typed);
|
if (typed != null) referenceToUse.push(typed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (this.referenceToUseInitialized && (!referenceToUse.map(x => x.reference).every(x => this.referenceToUse.map(y => y.reference).includes(x)) ||
|
if (!isInitial && (!referenceToUse.map(x => x.reference).every(x => this.referenceToUse.map(y => y.reference).includes(x)) ||
|
||||||
!this.referenceToUse.map(x => x.reference).every(x => referenceToUse.map(y => y.reference).includes(x)))) {
|
!this.referenceToUse.map(x => x.reference).every(x => referenceToUse.map(y => y.reference).includes(x)))) {
|
||||||
this.form.setValue(null, {onlySelf: true, emitEvent: false});
|
this.referenceToUse = referenceToUse;
|
||||||
}
|
this.form.setValue([]);
|
||||||
|
this.form.updateValueAndValidity();
|
||||||
|
} else {
|
||||||
|
this.referenceToUse = referenceToUse;
|
||||||
|
}
|
||||||
|
// if (this.referenceToUseInitialized && (!referenceToUse.map(x => x.reference).every(x => this.referenceToUse.map(y => y.reference).includes(x)) ||
|
||||||
|
// !this.referenceToUse.map(x => x.reference).every(x => referenceToUse.map(y => y.reference).includes(x)))) {
|
||||||
|
// this.form.setValue(null, {onlySelf: true, emitEvent: false});
|
||||||
|
// }
|
||||||
|
|
||||||
this.referenceToUse = referenceToUse;
|
// this.referenceToUse = referenceToUse;
|
||||||
this.referenceToUseInitialized = true;
|
// this.referenceToUseInitialized = true;
|
||||||
|
|
||||||
if (this.multiple) {
|
if (this.multiple) {
|
||||||
this.multipleAutoCompleteSearchConfiguration = this.referenceService.getMultipleAutoCompleteSearchConfiguration(this.referenceType.id, this.referenceToUse);
|
this.multipleAutoCompleteSearchConfiguration = this.referenceService.getMultipleAutoCompleteSearchConfiguration(this.referenceType.id, this.referenceToUse);
|
||||||
|
|
Loading…
Reference in New Issue