mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-12 12:33:07 +00:00
Fixed an issue occurred while removing an item from a qualdrop group
This commit is contained in:
@@ -65,10 +65,14 @@ export class FormOperationsService {
|
|||||||
return isNotUndefined(fieldIndex) ? fieldIndex : 0;
|
return isNotUndefined(fieldIndex) ? fieldIndex : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public getComboboxMap(event): Map<string, any> {
|
public getQualdropValueMap(event): Map<string, any> {
|
||||||
const metadataValueMap = new Map();
|
const metadataValueMap = new Map();
|
||||||
|
|
||||||
(event.model.parent.parent as DynamicFormArrayGroupModel).context.groups.forEach((arrayModel: DynamicFormArrayGroupModel) => {
|
const context = this.formBuilder.isQualdropGroup(event.model)
|
||||||
|
? (event.model.parent as DynamicFormArrayGroupModel).context
|
||||||
|
: (event.model.parent.parent as DynamicFormArrayGroupModel).context;
|
||||||
|
|
||||||
|
context.groups.forEach((arrayModel: DynamicFormArrayGroupModel) => {
|
||||||
const groupModel = arrayModel.group[0] as DynamicQualdropModel;
|
const groupModel = arrayModel.group[0] as DynamicQualdropModel;
|
||||||
const metadataValueList = metadataValueMap.get(groupModel.qualdropId) ? metadataValueMap.get(groupModel.qualdropId) : [];
|
const metadataValueList = metadataValueMap.get(groupModel.qualdropId) ? metadataValueMap.get(groupModel.qualdropId) : [];
|
||||||
if (groupModel.value) {
|
if (groupModel.value) {
|
||||||
@@ -80,15 +84,40 @@ export class FormOperationsService {
|
|||||||
return metadataValueMap;
|
return metadataValueMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
public getFieldPathFromChangeEvent(event: DynamicFormControlEvent) {
|
public getFieldPathFromEvent(event: DynamicFormControlEvent): string {
|
||||||
const fieldIndex = this.getArrayIndexFromEvent(event);
|
const fieldIndex = this.getArrayIndexFromEvent(event);
|
||||||
const fieldId = this.getFieldPathSegmentedFromChangeEvent(event);
|
const fieldId = this.getFieldPathSegmentedFromChangeEvent(event);
|
||||||
return (isNotUndefined(fieldIndex)) ? fieldId + '/' + fieldIndex : fieldId;
|
return (isNotUndefined(fieldIndex)) ? fieldId + '/' + fieldIndex : fieldId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public getQualdropItemPathFromEvent(event: DynamicFormControlEvent, valueMap: Map<string, any>): string {
|
||||||
|
const fieldIndex = this.getArrayIndexFromEvent(event);
|
||||||
|
const metadataValueMap = new Map();
|
||||||
|
let path;
|
||||||
|
|
||||||
|
const context = this.formBuilder.isQualdropGroup(event.model)
|
||||||
|
? (event.model.parent as DynamicFormArrayGroupModel).context
|
||||||
|
: (event.model.parent.parent as DynamicFormArrayGroupModel).context;
|
||||||
|
|
||||||
|
context.groups.forEach((arrayModel: DynamicFormArrayGroupModel, index: number) => {
|
||||||
|
const groupModel = arrayModel.group[0] as DynamicQualdropModel;
|
||||||
|
const metadataValueList = metadataValueMap.get(groupModel.qualdropId) ? metadataValueMap.get(groupModel.qualdropId) : [];
|
||||||
|
if (groupModel.value) {
|
||||||
|
metadataValueList.push(groupModel.value);
|
||||||
|
metadataValueMap.set(groupModel.qualdropId, metadataValueList);
|
||||||
|
}
|
||||||
|
if (index === fieldIndex) {
|
||||||
|
path = groupModel.qualdropId + '/' + (metadataValueMap.get(groupModel.qualdropId).length - 1)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
public getFieldPathSegmentedFromChangeEvent(event: DynamicFormControlEvent) {
|
public getFieldPathSegmentedFromChangeEvent(event: DynamicFormControlEvent) {
|
||||||
let fieldId;
|
let fieldId;
|
||||||
if (this.formBuilder.isQualdropGroup(event.model.parent as DynamicFormControlModel)) {
|
if (this.formBuilder.isQualdropGroup(event.model as DynamicFormControlModel)) {
|
||||||
|
fieldId = (event.model as any).qualdropId;
|
||||||
|
} else if (this.formBuilder.isQualdropGroup(event.model.parent as DynamicFormControlModel)) {
|
||||||
fieldId = (event.model.parent as any).qualdropId;
|
fieldId = (event.model.parent as any).qualdropId;
|
||||||
} else {
|
} else {
|
||||||
fieldId = this.formBuilder.getId(event.model);
|
fieldId = this.formBuilder.getId(event.model);
|
||||||
@@ -147,10 +176,10 @@ export class FormOperationsService {
|
|||||||
protected dispatchOperationsFromRemoveEvent(pathCombiner: JsonPatchOperationPathCombiner,
|
protected dispatchOperationsFromRemoveEvent(pathCombiner: JsonPatchOperationPathCombiner,
|
||||||
event: DynamicFormControlEvent,
|
event: DynamicFormControlEvent,
|
||||||
previousValue: FormFieldPreviousValueObject) {
|
previousValue: FormFieldPreviousValueObject) {
|
||||||
const path = this.getFieldPathFromChangeEvent(event);
|
const path = this.getFieldPathFromEvent(event);
|
||||||
const value = this.getFieldValueFromChangeEvent(event);
|
const value = this.getFieldValueFromChangeEvent(event);
|
||||||
if (this.formBuilder.isQualdropGroup(event.model.parent as DynamicFormControlModel)) {
|
if (this.formBuilder.isQualdropGroup(event.model as DynamicFormControlModel)) {
|
||||||
this.dispatchOperationsFromMap(this.getComboboxMap(event), pathCombiner, event, previousValue);
|
this.dispatchOperationsFromMap(this.getQualdropValueMap(event), pathCombiner, event, previousValue);
|
||||||
} else if (isNotEmpty(value)) {
|
} else if (isNotEmpty(value)) {
|
||||||
this.operationsBuilder.remove(pathCombiner.getPath(path));
|
this.operationsBuilder.remove(pathCombiner.getPath(path));
|
||||||
}
|
}
|
||||||
@@ -160,13 +189,13 @@ export class FormOperationsService {
|
|||||||
event: DynamicFormControlEvent,
|
event: DynamicFormControlEvent,
|
||||||
previousValue: FormFieldPreviousValueObject,
|
previousValue: FormFieldPreviousValueObject,
|
||||||
hasStoredValue: boolean) {
|
hasStoredValue: boolean) {
|
||||||
const path = this.getFieldPathFromChangeEvent(event);
|
const path = this.getFieldPathFromEvent(event);
|
||||||
const segmentedPath = this.getFieldPathSegmentedFromChangeEvent(event);
|
const segmentedPath = this.getFieldPathSegmentedFromChangeEvent(event);
|
||||||
const value = this.getFieldValueFromChangeEvent(event);
|
const value = this.getFieldValueFromChangeEvent(event);
|
||||||
// Detect which operation must be dispatched
|
// Detect which operation must be dispatched
|
||||||
if (this.formBuilder.isQualdropGroup(event.model.parent as DynamicFormControlModel)) {
|
if (this.formBuilder.isQualdropGroup(event.model.parent as DynamicFormControlModel)) {
|
||||||
// It's a qualdrup model
|
// It's a qualdrup model
|
||||||
this.dispatchOperationsFromMap(this.getComboboxMap(event), pathCombiner, event, previousValue);
|
this.dispatchOperationsFromMap(this.getQualdropValueMap(event), pathCombiner, event, previousValue);
|
||||||
} else if (this.formBuilder.isRelationGroup(event.model)) {
|
} else if (this.formBuilder.isRelationGroup(event.model)) {
|
||||||
// It's a relation model
|
// It's a relation model
|
||||||
this.dispatchOperationsFromMap(this.getValueMap(value), pathCombiner, event, previousValue);
|
this.dispatchOperationsFromMap(this.getValueMap(value), pathCombiner, event, previousValue);
|
||||||
@@ -215,6 +244,10 @@ export class FormOperationsService {
|
|||||||
event: DynamicFormControlEvent,
|
event: DynamicFormControlEvent,
|
||||||
previousValue: FormFieldPreviousValueObject) {
|
previousValue: FormFieldPreviousValueObject) {
|
||||||
const currentValueMap = valueMap;
|
const currentValueMap = valueMap;
|
||||||
|
if (event.type === 'remove') {
|
||||||
|
const path = this.getQualdropItemPathFromEvent(event, currentValueMap);
|
||||||
|
this.operationsBuilder.remove(pathCombiner.getPath(path));
|
||||||
|
} else {
|
||||||
if (previousValue.isPathEqual(this.formBuilder.getPath(event.model))) {
|
if (previousValue.isPathEqual(this.formBuilder.getPath(event.model))) {
|
||||||
previousValue.value.forEach((entry, index) => {
|
previousValue.value.forEach((entry, index) => {
|
||||||
const currentValue = currentValueMap.get(index);
|
const currentValue = currentValueMap.get(index);
|
||||||
@@ -236,6 +269,7 @@ export class FormOperationsService {
|
|||||||
this.operationsBuilder.add(pathCombiner.getPath(index), entry, true);
|
this.operationsBuilder.add(pathCombiner.getPath(index), entry, true);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
previousValue.delete();
|
previousValue.delete();
|
||||||
}
|
}
|
||||||
|
@@ -223,7 +223,7 @@ export class FormSectionComponent extends SectionModelComponent implements OnDes
|
|||||||
const path = this.formBuilderService.getPath(event.model);
|
const path = this.formBuilderService.getPath(event.model);
|
||||||
if (this.formBuilderService.hasMappedGroupValue(event.model)) {
|
if (this.formBuilderService.hasMappedGroupValue(event.model)) {
|
||||||
this.previousValue.path = path;
|
this.previousValue.path = path;
|
||||||
this.previousValue.value = this.formOperationsService.getComboboxMap(event);
|
this.previousValue.value = this.formOperationsService.getQualdropValueMap(event);
|
||||||
} else if (isNotEmpty(value) && ((typeof value === 'object' && isNotEmpty(value.value)) || (typeof value === 'string'))) {
|
} else if (isNotEmpty(value) && ((typeof value === 'object' && isNotEmpty(value.value)) || (typeof value === 'string'))) {
|
||||||
this.previousValue.path = path;
|
this.previousValue.path = path;
|
||||||
this.previousValue.value = value;
|
this.previousValue.value = value;
|
||||||
|
Reference in New Issue
Block a user