mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-12 20:43:08 +00:00
[CST-3782] patch add full array in case of DynamicRowArrayModel
This commit is contained in:
@@ -3,7 +3,6 @@ import { Component, EventEmitter, Input, Output, QueryList } from '@angular/core
|
||||
import { FormGroup } from '@angular/forms';
|
||||
import {
|
||||
DynamicFormArrayComponent,
|
||||
DynamicFormArrayModel,
|
||||
DynamicFormControlCustomEvent,
|
||||
DynamicFormControlEvent,
|
||||
DynamicFormControlLayout,
|
||||
@@ -58,6 +57,7 @@ export class DsDynamicFormArrayComponent extends DynamicFormArrayComponent {
|
||||
this.onCustomEvent({
|
||||
previousIndex: prevIndex,
|
||||
index,
|
||||
arrayModel: this.model,
|
||||
model: this.model.groups[index].group[0],
|
||||
control: (this.control as any).controls[index]
|
||||
}, 'move');
|
||||
|
@@ -31,6 +31,7 @@ import { FormFieldMetadataValueObject } from './models/form-field-metadata-value
|
||||
import { dateToString, isNgbDateStruct } from '../../date.util';
|
||||
import { DYNAMIC_FORM_CONTROL_TYPE_RELATION_GROUP } from './ds-dynamic-form-ui/ds-dynamic-form-constants';
|
||||
import { CONCAT_GROUP_SUFFIX, DynamicConcatModel } from './ds-dynamic-form-ui/models/ds-dynamic-concat.model';
|
||||
import { VIRTUAL_METADATA_PREFIX } from '../../../core/shared/metadata.models';
|
||||
|
||||
@Injectable()
|
||||
export class FormBuilderService extends DynamicFormService {
|
||||
@@ -121,6 +122,11 @@ export class FormBuilderService extends DynamicFormService {
|
||||
|
||||
const normalizeValue = (controlModel, controlValue, controlModelIndex) => {
|
||||
const controlLanguage = (controlModel as DsDynamicInputModel).hasLanguages ? (controlModel as DsDynamicInputModel).language : null;
|
||||
|
||||
if (controlModel?.metadataValue?.authority?.includes(VIRTUAL_METADATA_PREFIX)) {
|
||||
return controlModel.metadataValue;
|
||||
}
|
||||
|
||||
if (isString(controlValue)) {
|
||||
return new FormFieldMetadataValueObject(controlValue, controlLanguage, null, null, controlModelIndex);
|
||||
} else if (isNgbDateStruct(controlValue)) {
|
||||
|
@@ -23,6 +23,7 @@ import { DynamicRelationGroupModel } from '../../../shared/form/builder/ds-dynam
|
||||
import { VocabularyEntryDetail } from '../../../core/submission/vocabularies/models/vocabulary-entry-detail.model';
|
||||
import { deepClone } from 'fast-json-patch';
|
||||
import { dateToString, isNgbDateStruct } from '../../../shared/date.util';
|
||||
import { DynamicRowArrayModel } from '../../../shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-row-array-model';
|
||||
|
||||
/**
|
||||
* The service handling all form section operations
|
||||
@@ -357,6 +358,13 @@ export class SectionFormOperationsService {
|
||||
event: DynamicFormControlEvent,
|
||||
previousValue: FormFieldPreviousValueObject,
|
||||
hasStoredValue: boolean): void {
|
||||
|
||||
if (event.context && event.context instanceof DynamicFormArrayGroupModel) {
|
||||
// Model is a DynamicRowArrayModel
|
||||
this.handleArrayGroupPatch(pathCombiner, event, (event as any).context.context);
|
||||
return;
|
||||
}
|
||||
|
||||
const path = this.getFieldPathFromEvent(event);
|
||||
const segmentedPath = this.getFieldPathSegmentedFromChangeEvent(event);
|
||||
const value = this.getFieldValueFromChangeEvent(event);
|
||||
@@ -483,23 +491,23 @@ export class SectionFormOperationsService {
|
||||
event: DynamicFormControlEvent,
|
||||
previousValue: FormFieldPreviousValueObject) {
|
||||
|
||||
const customEvent = event.$event;
|
||||
return this.handleArrayGroupPatch(pathCombiner, event.$event, (event as any).$event.arrayModel);
|
||||
}
|
||||
|
||||
if (this.formBuilder.isQualdropGroup(customEvent.model.parent as DynamicFormControlModel)
|
||||
|| this.formBuilder.isQualdropGroup(customEvent.model as DynamicFormControlModel)) {
|
||||
// It's a qualdrup model
|
||||
this.dispatchOperationsFromMap(this.getQualdropValueMap(customEvent), pathCombiner, customEvent, previousValue);
|
||||
return;
|
||||
}
|
||||
const path = this.getFieldPathFromEvent(customEvent);
|
||||
const segmentedPath = this.getFieldPathSegmentedFromChangeEvent(customEvent);
|
||||
const moveTo = pathCombiner.getPath(path);
|
||||
const moveFrom = pathCombiner.getPath(segmentedPath + '/' + customEvent.previousIndex);
|
||||
if (isNotEmpty(moveFrom.path) && isNotEmpty(moveTo.path) && moveFrom.path !== moveTo.path) {
|
||||
this.operationsBuilder.move(
|
||||
moveTo,
|
||||
moveFrom.path
|
||||
);
|
||||
}
|
||||
/**
|
||||
* Specific patch handler for a DynamicRowArrayModel.
|
||||
* Configure a Patch ADD with the current array value.
|
||||
* @param pathCombiner
|
||||
* @param event
|
||||
* @param model
|
||||
*/
|
||||
private handleArrayGroupPatch(pathCombiner: JsonPatchOperationPathCombiner,
|
||||
event,
|
||||
model: DynamicRowArrayModel) {
|
||||
const arrayValue = this.formBuilder.getValueFromModel([model]);
|
||||
const segmentedPath2 = this.getFieldPathSegmentedFromChangeEvent(event);
|
||||
this.operationsBuilder.add(
|
||||
pathCombiner.getPath(segmentedPath2),
|
||||
arrayValue[segmentedPath2], false);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user