fix adding of metadata only fields, and styling

This commit is contained in:
Art Lowel
2020-02-25 17:01:44 +01:00
parent 644dcf8ce6
commit a8d5ad9c37
11 changed files with 118 additions and 89 deletions

View File

@@ -9,7 +9,15 @@ import {
DynamicFormControlModel
} from '@ng-dynamic-forms/core';
import { hasValue, isNotEmpty, isNotNull, isNotUndefined, isNull, isUndefined } from '../../../shared/empty.util';
import {
hasNoValue,
hasValue,
isNotEmpty,
isNotNull,
isNotUndefined,
isNull,
isUndefined
} from '../../../shared/empty.util';
import { JsonPatchOperationPathCombiner } from '../../../core/json-patch/builder/json-patch-operation-path-combiner';
import { FormFieldPreviousValueObject } from '../../../shared/form/builder/models/form-field-previous-value-object';
import { JsonPatchOperationsBuilder } from '../../../core/json-patch/builder/json-patch-operations-builder';
@@ -312,7 +320,7 @@ export class SectionFormOperationsService {
} else if (this.formBuilder.isRelationGroup(event.model)) {
// It's a relation model
this.dispatchOperationsFromMap(this.getValueMap(value), pathCombiner, event, previousValue);
} else if (this.formBuilder.hasArrayGroupValue(event.model)) {
} else if (this.formBuilder.hasArrayGroupValue(event.model) && hasNoValue((event.model as any).relationshipConfig)) {
// Model has as value an array, so dispatch an add operation with entire block of values
this.operationsBuilder.add(
pathCombiner.getPath(segmentedPath),
@@ -327,10 +335,16 @@ export class SectionFormOperationsService {
this.operationsBuilder.remove(pathCombiner.getPath(path));
}
} else if (hasValue(event.$event) && hasValue(event.$event.previousIndex)) {
this.operationsBuilder.move(
pathCombiner.getPath(path),
pathCombiner.getPath(segmentedPath + '/' + event.$event.previousIndex).path
)
if (event.$event.previousIndex < 0) {
this.operationsBuilder.add(
pathCombiner.getPath(segmentedPath),
value, true);
} else {
this.operationsBuilder.move(
pathCombiner.getPath(path),
pathCombiner.getPath(segmentedPath + '/' + event.$event.previousIndex).path
)
}
} else {
// New value is not equal from the previous one, so dispatch a replace operation
this.operationsBuilder.replace(

View File

@@ -1,7 +1,7 @@
import { ChangeDetectorRef, Component, Inject, ViewChild } from '@angular/core';
import { DynamicFormControlEvent, DynamicFormControlModel } from '@ng-dynamic-forms/core';
import { combineLatest, Observable, Subscription } from 'rxjs';
import { combineLatest as observableCombineLatest, Observable, Subscription } from 'rxjs';
import { distinctUntilChanged, filter, find, flatMap, map, switchMap, take, tap } from 'rxjs/operators';
import { TranslateService } from '@ngx-translate/core';
import { isEqual } from 'lodash';
@@ -32,13 +32,12 @@ import { SectionsService } from '../sections.service';
import { difference } from '../../../shared/object.util';
import { WorkspaceitemSectionFormObject } from '../../../core/submission/models/workspaceitem-section-form.model';
import { WorkspaceItem } from '../../../core/submission/models/workspaceitem.model';
import { WorkspaceitemDataService } from '../../../core/submission/workspaceitem-data.service';
import { combineLatest as combineLatestObservable } from 'rxjs';
import { getRemoteDataPayload, getSucceededRemoteData } from '../../../core/shared/operators';
import { SubmissionObject } from '../../../core/submission/models/submission-object.model';
import { SubmissionObjectDataService } from '../../../core/submission/submission-object-data.service';
import { ObjectCacheService } from '../../../core/cache/object-cache.service';
import { RequestService } from '../../../core/data/request.service';
import { followLink } from '../../../shared/utils/follow-link-config.model';
/**
* This component represents a section that contains a Form.
@@ -166,19 +165,19 @@ export class SubmissionSectionformComponent extends SectionModelComponent {
map((configData: ConfigData) => configData.payload),
tap((config: SubmissionFormsModel) => this.formConfig = config),
flatMap(() =>
combineLatestObservable(
observableCombineLatest(
this.sectionService.getSectionData(this.submissionId, this.sectionData.id),
this.submissionObjectService.getHrefByID(this.submissionId).pipe(take(1)).pipe(
switchMap((href: string) => {
this.objectCache.remove(href);
this.requestService.removeByHrefSubstring(this.submissionId);
return combineLatest(
return observableCombineLatest(
this.objectCache.hasBySelfLinkObservable(href),
this.requestService.hasByHrefObservable(href)
).pipe(
filter(([existsInOC, existsInRC]) => !existsInOC && !existsInRC),
take(1),
switchMap(() => this.submissionObjectService.findById(this.submissionId).pipe(getSucceededRemoteData(), getRemoteDataPayload()) as Observable<SubmissionObject>)
switchMap(() => this.submissionObjectService.findById(this.submissionId, followLink('item')).pipe(getSucceededRemoteData(), getRemoteDataPayload()) as Observable<SubmissionObject>)
)
})
)