added workspace item to fieldparsers

This commit is contained in:
lotte
2019-07-19 16:24:40 +02:00
parent e179596ac2
commit 3bb2ac15e9
13 changed files with 75 additions and 25 deletions

View File

@@ -10,8 +10,10 @@ import { LanguageCode } from '../../models/form-field-language-value.model';
import { AuthorityOptions } from '../../../../../core/integration/models/authority-options.model'; import { AuthorityOptions } from '../../../../../core/integration/models/authority-options.model';
import { hasValue } from '../../../../empty.util'; import { hasValue } from '../../../../empty.util';
import { FormFieldMetadataValueObject } from '../../models/form-field-metadata-value.model'; import { FormFieldMetadataValueObject } from '../../models/form-field-metadata-value.model';
import { Workspaceitem } from '../../../../../core/submission/models/workspaceitem.model';
export interface DsDynamicInputModelConfig extends DynamicInputModelConfig { export interface DsDynamicInputModelConfig extends DynamicInputModelConfig {
workspaceItem: Workspaceitem;
authorityOptions?: AuthorityOptions; authorityOptions?: AuthorityOptions;
languageCodes?: LanguageCode[]; languageCodes?: LanguageCode[];
language?: string; language?: string;
@@ -24,12 +26,14 @@ export class DsDynamicInputModel extends DynamicInputModel {
@serializable() private _languageCodes: LanguageCode[]; @serializable() private _languageCodes: LanguageCode[];
@serializable() private _language: string; @serializable() private _language: string;
@serializable() languageUpdates: Subject<string>; @serializable() languageUpdates: Subject<string>;
@serializable() workspaceItem: Workspaceitem;
constructor(config: DsDynamicInputModelConfig, layout?: DynamicFormControlLayout) { constructor(config: DsDynamicInputModelConfig, layout?: DynamicFormControlLayout) {
super(config, layout); super(config, layout);
this.readOnly = config.readOnly; this.readOnly = config.readOnly;
this.value = config.value; this.value = config.value;
this.workspaceItem = config.workspaceItem;
this.language = config.language; this.language = config.language;
if (!this.language) { if (!this.language) {
// TypeAhead // TypeAhead

View File

@@ -96,6 +96,7 @@ export class DsDynamicRelationGroupComponent extends DynamicFormControlComponent
config, config,
this.model.scopeUUID, this.model.scopeUUID,
{}, {},
this.model.workspaceItem,
this.model.submissionScope, this.model.submissionScope,
this.model.readOnly); this.model.readOnly);
this.initChipsFromModelValue(); this.initChipsFromModelValue();

View File

@@ -29,6 +29,8 @@ import { DynamicRowArrayModel } from './ds-dynamic-form-ui/models/ds-dynamic-row
import { DsDynamicInputModel } from './ds-dynamic-form-ui/models/ds-dynamic-input.model'; import { DsDynamicInputModel } from './ds-dynamic-form-ui/models/ds-dynamic-input.model';
import { FormFieldMetadataValueObject } from './models/form-field-metadata-value.model'; import { FormFieldMetadataValueObject } from './models/form-field-metadata-value.model';
import { isNgbDateStruct } from '../../date.util'; import { isNgbDateStruct } from '../../date.util';
import { WorkspaceitemSectionFormObject } from '../../../core/submission/models/workspaceitem-section-form.model';
import { Workspaceitem } from '../../../core/submission/models/workspaceitem.model';
@Injectable() @Injectable()
export class FormBuilderService extends DynamicFormService { export class FormBuilderService extends DynamicFormService {
@@ -198,13 +200,13 @@ export class FormBuilderService extends DynamicFormService {
return result; return result;
} }
modelFromConfiguration(json: string | SubmissionFormsModel, scopeUUID: string, initFormValues: any = {}, submissionScope?: string, readOnly = false): DynamicFormControlModel[] | never { modelFromConfiguration(json: string | SubmissionFormsModel, scopeUUID: string, initFormValues: any = {}, wsi: Workspaceitem, submissionScope?: string, readOnly = false): DynamicFormControlModel[] | never {
let rows: DynamicFormControlModel[] = []; let rows: DynamicFormControlModel[] = [];
const rawData = typeof json === 'string' ? JSON.parse(json, JSONUtils.parseReviver) : json; const rawData = typeof json === 'string' ? JSON.parse(json, JSONUtils.parseReviver) : json;
if (rawData.rows && !isEmpty(rawData.rows)) { if (rawData.rows && !isEmpty(rawData.rows)) {
rawData.rows.forEach((currentRow) => { rawData.rows.forEach((currentRow) => {
const rowParsed = new RowParser(currentRow, scopeUUID, initFormValues, submissionScope, readOnly).parse(); const rowParsed = new RowParser(currentRow, scopeUUID, initFormValues, wsi, submissionScope, readOnly).parse();
if (isNotNull(rowParsed)) { if (isNotNull(rowParsed)) {
if (Array.isArray(rowParsed)) { if (Array.isArray(rowParsed)) {
rows = rows.concat(rowParsed); rows = rows.concat(rowParsed);

View File

@@ -1,7 +1,11 @@
import { FieldParser } from './field-parser'; import { FieldParser } from './field-parser';
import { FormFieldModel } from '../models/form-field.model'; import { FormFieldModel } from '../models/form-field.model';
import { FormFieldMetadataValueObject } from '../models/form-field-metadata-value.model'; import { FormFieldMetadataValueObject } from '../models/form-field-metadata-value.model';
import { DynamicFormControlLayout, DynamicInputModel, DynamicInputModelConfig } from '@ng-dynamic-forms/core'; import {
DynamicFormControlLayout,
DynamicInputModel,
DynamicInputModelConfig
} from '@ng-dynamic-forms/core';
import { import {
CONCAT_FIRST_INPUT_SUFFIX, CONCAT_FIRST_INPUT_SUFFIX,
CONCAT_GROUP_SUFFIX, CONCAT_GROUP_SUFFIX,
@@ -11,6 +15,7 @@ import {
} from '../ds-dynamic-form-ui/models/ds-dynamic-concat.model'; } from '../ds-dynamic-form-ui/models/ds-dynamic-concat.model';
import { isNotEmpty } from '../../../empty.util'; import { isNotEmpty } from '../../../empty.util';
import { ParserOptions } from './parser-options'; import { ParserOptions } from './parser-options';
import { Workspaceitem } from '../../../../core/submission/models/workspaceitem.model';
export class ConcatFieldParser extends FieldParser { export class ConcatFieldParser extends FieldParser {
@@ -18,9 +23,10 @@ export class ConcatFieldParser extends FieldParser {
protected initFormValues, protected initFormValues,
protected parserOptions: ParserOptions, protected parserOptions: ParserOptions,
protected separator: string, protected separator: string,
protected workspaceItem: Workspaceitem,
protected firstPlaceholder: string = null, protected firstPlaceholder: string = null,
protected secondPlaceholder: string = null) { protected secondPlaceholder: string = null) {
super(configData, initFormValues, parserOptions); super(configData, initFormValues, parserOptions, workspaceItem);
this.separator = separator; this.separator = separator;
this.firstPlaceholder = firstPlaceholder; this.firstPlaceholder = firstPlaceholder;

View File

@@ -12,12 +12,12 @@ import { DynamicFormControlLayout } from '@ng-dynamic-forms/core';
import { setLayout } from './parser.utils'; import { setLayout } from './parser.utils';
import { AuthorityOptions } from '../../../../core/integration/models/authority-options.model'; import { AuthorityOptions } from '../../../../core/integration/models/authority-options.model';
import { ParserOptions } from './parser-options'; import { ParserOptions } from './parser-options';
import { Workspaceitem } from '../../../../core/submission/models/workspaceitem.model';
export abstract class FieldParser { export abstract class FieldParser {
protected fieldId: string; protected fieldId: string;
constructor(protected configData: FormFieldModel, protected initFormValues, protected parserOptions: ParserOptions, protected workspaceItem: Workspaceitem) {
constructor(protected configData: FormFieldModel, protected initFormValues, protected parserOptions: ParserOptions) {
} }
public abstract modelFactory(fieldValue?: FormFieldMetadataValueObject, label?: boolean): any; public abstract modelFactory(fieldValue?: FormFieldMetadataValueObject, label?: boolean): any;
@@ -184,6 +184,7 @@ export abstract class FieldParser {
// Set read only option // Set read only option
controlModel.readOnly = this.parserOptions.readOnly; controlModel.readOnly = this.parserOptions.readOnly;
controlModel.disabled = this.parserOptions.readOnly; controlModel.disabled = this.parserOptions.readOnly;
controlModel.workspaceItem = this.workspaceItem;
// Set label // Set label
this.setLabel(controlModel, label, labelEmpty); this.setLabel(controlModel, label, labelEmpty);

View File

@@ -1,10 +1,11 @@
import { FormFieldModel } from '../models/form-field.model'; import { FormFieldModel } from '../models/form-field.model';
import { ConcatFieldParser } from './concat-field-parser'; import { ConcatFieldParser } from './concat-field-parser';
import { ParserOptions } from './parser-options'; import { ParserOptions } from './parser-options';
import { Workspaceitem } from '../../../../core/submission/models/workspaceitem.model';
export class NameFieldParser extends ConcatFieldParser { export class NameFieldParser extends ConcatFieldParser {
constructor(protected configData: FormFieldModel, protected initFormValues, protected parserOptions: ParserOptions) { constructor(protected configData: FormFieldModel, protected initFormValues, protected parserOptions: ParserOptions, wsi: Workspaceitem) {
super(configData, initFormValues, parserOptions, ',', 'form.last-name', 'form.first-name'); super(configData, initFormValues, parserOptions, ',', wsi, 'form.last-name', 'form.first-name');
} }
} }

View File

@@ -10,6 +10,7 @@ import { FormFieldModel } from '../models/form-field.model';
import { ParserType } from './parser-type'; import { ParserType } from './parser-type';
import { ParserOptions } from './parser-options'; import { ParserOptions } from './parser-options';
import { ParserFactory } from './parser-factory'; import { ParserFactory } from './parser-factory';
import { Workspaceitem } from '../../../../core/submission/models/workspaceitem.model';
export const ROW_ID_PREFIX = 'df-row-group-config-'; export const ROW_ID_PREFIX = 'df-row-group-config-';
@@ -19,6 +20,7 @@ export class RowParser {
constructor(protected rowData, constructor(protected rowData,
protected scopeUUID, protected scopeUUID,
protected initFormValues: any, protected initFormValues: any,
protected wsi: Workspaceitem,
protected submissionScope, protected submissionScope,
protected readOnly: boolean) { protected readOnly: boolean) {
this.authorityOptions = new IntegrationSearchOptions(scopeUUID); this.authorityOptions = new IntegrationSearchOptions(scopeUUID);
@@ -49,7 +51,7 @@ export class RowParser {
const layoutFieldClass = (fieldData.style || layoutDefaultGridClass) + layoutClass; const layoutFieldClass = (fieldData.style || layoutDefaultGridClass) + layoutClass;
const parserCo = ParserFactory.getConstructor(fieldData.input.type as ParserType); const parserCo = ParserFactory.getConstructor(fieldData.input.type as ParserType);
if (parserCo) { if (parserCo) {
fieldModel = new parserCo(fieldData, this.initFormValues, parserOptions).parse(); fieldModel = new parserCo(fieldData, this.initFormValues, parserOptions, this.wsi).parse();
} else { } else {
throw new Error(`unknown form control model type "${fieldData.input.type}" defined for Input field with label "${fieldData.label}".`, ); throw new Error(`unknown form control model type "${fieldData.input.type}" defined for Input field with label "${fieldData.label}".`, );
} }

View File

@@ -1,10 +1,11 @@
import { FormFieldModel } from '../models/form-field.model'; import { FormFieldModel } from '../models/form-field.model';
import { ConcatFieldParser } from './concat-field-parser'; import { ConcatFieldParser } from './concat-field-parser';
import { ParserOptions } from './parser-options'; import { ParserOptions } from './parser-options';
import { Workspaceitem } from '../../../../core/submission/models/workspaceitem.model';
export class SeriesFieldParser extends ConcatFieldParser { export class SeriesFieldParser extends ConcatFieldParser {
constructor(protected configData: FormFieldModel, protected initFormValues, protected parserOptions: ParserOptions) { constructor(protected configData: FormFieldModel, protected initFormValues, protected parserOptions: ParserOptions, wsi: Workspaceitem) {
super(configData, initFormValues, parserOptions, ';'); super(configData, initFormValues, parserOptions, ';', wsi);
} }
} }

View File

@@ -13,6 +13,7 @@ import { AuthorityOptions } from '../../core/integration/models/authority-option
import { AuthorityValue } from '../../core/integration/models/authority.value'; import { AuthorityValue } from '../../core/integration/models/authority.value';
import { FormFieldMetadataValueObject } from '../form/builder/models/form-field-metadata-value.model'; import { FormFieldMetadataValueObject } from '../form/builder/models/form-field-metadata-value.model';
import { DynamicRowGroupModel } from '../form/builder/ds-dynamic-form-ui/models/ds-dynamic-row-group-model'; import { DynamicRowGroupModel } from '../form/builder/ds-dynamic-form-ui/models/ds-dynamic-row-group-model';
import { Workspaceitem } from '../../core/submission/models/workspaceitem.model';
export const qualdropSelectConfig = { export const qualdropSelectConfig = {
name: 'dc.identifier_QUALDROP_METADATA', name: 'dc.identifier_QUALDROP_METADATA',
@@ -55,7 +56,8 @@ export const qualdropInputConfig = {
id: 'dc_identifier_QUALDROP_VALUE', id: 'dc_identifier_QUALDROP_VALUE',
readOnly: false, readOnly: false,
disabled: false, disabled: false,
value: 'test' value: 'test',
workspaceItem: new Workspaceitem()
}; };
export const mockQualdropSelectModel = new DynamicSelectModel(qualdropSelectConfig); export const mockQualdropSelectModel = new DynamicSelectModel(qualdropSelectConfig);
@@ -130,7 +132,8 @@ const relationGroupConfig = {
'issue test 1', 'issue test 1',
'issue test 2' 'issue test 2'
], ],
} },
workspaceItem: new Workspaceitem()
}; };
export const MockRelationModel: DynamicRelationGroupModel = new DynamicRelationGroupModel(relationGroupConfig); export const MockRelationModel: DynamicRelationGroupModel = new DynamicRelationGroupModel(relationGroupConfig);
@@ -156,7 +159,8 @@ export const inputWithLanguageAndAuthorityConfig = {
value: 'testWithLanguageAndAuthority', value: 'testWithLanguageAndAuthority',
display: 'testWithLanguageAndAuthority', display: 'testWithLanguageAndAuthority',
id: 'testWithLanguageAndAuthority', id: 'testWithLanguageAndAuthority',
} },
workspaceItem: new Workspaceitem()
}; };
export const mockInputWithLanguageAndAuthorityModel = new DsDynamicInputModel(inputWithLanguageAndAuthorityConfig); export const mockInputWithLanguageAndAuthorityModel = new DsDynamicInputModel(inputWithLanguageAndAuthorityConfig);
@@ -177,7 +181,8 @@ export const inputWithLanguageConfig = {
id: 'testWithLanguage', id: 'testWithLanguage',
readOnly: false, readOnly: false,
disabled: false, disabled: false,
value: 'testWithLanguage' value: 'testWithLanguage',
workspaceItem: new Workspaceitem()
}; };
export const mockInputWithLanguageModel = new DsDynamicInputModel(inputWithLanguageConfig); export const mockInputWithLanguageModel = new DsDynamicInputModel(inputWithLanguageConfig);
@@ -203,7 +208,8 @@ export const inputWithLanguageAndAuthorityArrayConfig = {
value: 'testLanguageAndAuthorityArray', value: 'testLanguageAndAuthorityArray',
display: 'testLanguageAndAuthorityArray', display: 'testLanguageAndAuthorityArray',
id: 'testLanguageAndAuthorityArray', id: 'testLanguageAndAuthorityArray',
}] }],
workspaceItem: new Workspaceitem()
}; };
export const mockInputWithLanguageAndAuthorityArrayModel = new DsDynamicInputModel(inputWithLanguageAndAuthorityArrayConfig); export const mockInputWithLanguageAndAuthorityArrayModel = new DsDynamicInputModel(inputWithLanguageAndAuthorityArrayConfig);
@@ -213,7 +219,8 @@ export const inputWithFormFieldValueConfig = {
id: 'testWithFormField', id: 'testWithFormField',
readOnly: false, readOnly: false,
disabled: false, disabled: false,
value: new FormFieldMetadataValueObject('testWithFormFieldValue') value: new FormFieldMetadataValueObject('testWithFormFieldValue'),
workspaceItem: new Workspaceitem()
}; };
export const mockInputWithFormFieldValueModel = new DsDynamicInputModel(inputWithFormFieldValueConfig); export const mockInputWithFormFieldValueModel = new DsDynamicInputModel(inputWithFormFieldValueConfig);
@@ -223,7 +230,8 @@ export const inputWithAuthorityValueConfig = {
id: 'testWithAuthorityField', id: 'testWithAuthorityField',
readOnly: false, readOnly: false,
disabled: false, disabled: false,
value: Object.assign({}, new AuthorityValue(), { value: 'testWithAuthorityValue', id: 'testWithAuthorityValue', display: 'testWithAuthorityValue' }) value: Object.assign({}, new AuthorityValue(), { value: 'testWithAuthorityValue', id: 'testWithAuthorityValue', display: 'testWithAuthorityValue' }),
workspaceItem: new Workspaceitem()
}; };
export const mockInputWithAuthorityValueModel = new DsDynamicInputModel(inputWithAuthorityValueConfig); export const mockInputWithAuthorityValueModel = new DsDynamicInputModel(inputWithAuthorityValueConfig);
@@ -233,7 +241,8 @@ export const inputWithObjectValueConfig = {
id: 'testWithObjectValue', id: 'testWithObjectValue',
readOnly: false, readOnly: false,
disabled: false, disabled: false,
value: { value: 'testWithObjectValue', id: 'testWithObjectValue', display: 'testWithObjectValue' } value: { value: 'testWithObjectValue', id: 'testWithObjectValue', display: 'testWithObjectValue' },
workspaceItem: new Workspaceitem()
}; };
export const mockInputWithObjectValueModel = new DsDynamicInputModel(inputWithObjectValueConfig); export const mockInputWithObjectValueModel = new DsDynamicInputModel(inputWithObjectValueConfig);
@@ -248,6 +257,7 @@ export const fileFormEditInputConfig = {
id: 'dc_title', id: 'dc_title',
readOnly: false, readOnly: false,
disabled: false, disabled: false,
workspaceItem: new Workspaceitem()
}; };
export const mockFileFormEditInputModel = new DsDynamicInputModel(fileFormEditInputConfig); export const mockFileFormEditInputModel = new DsDynamicInputModel(fileFormEditInputConfig);

View File

@@ -43,6 +43,10 @@ import { DsDynamicInputModel } from '../../../shared/form/builder/ds-dynamic-for
import { SubmissionSectionError } from '../../objects/submission-objects.reducer'; import { SubmissionSectionError } from '../../objects/submission-objects.reducer';
import { DynamicFormControlEvent, DynamicFormControlEventType } from '@ng-dynamic-forms/core'; import { DynamicFormControlEvent, DynamicFormControlEventType } from '@ng-dynamic-forms/core';
import { JsonPatchOperationPathCombiner } from '../../../core/json-patch/builder/json-patch-operation-path-combiner'; import { JsonPatchOperationPathCombiner } from '../../../core/json-patch/builder/json-patch-operation-path-combiner';
import { WorkspaceitemDataService } from '../../../core/submission/workspaceitem-data.service';
import { RemoteData } from '../../../core/data/remote-data';
import { PaginatedList } from '../../../core/data/paginated-list';
import { Workspaceitem } from '../../../core/submission/models/workspaceitem.model';
function getMockSubmissionFormsConfigService(): SubmissionFormsConfigService { function getMockSubmissionFormsConfigService(): SubmissionFormsConfigService {
return jasmine.createSpyObj('FormOperationsService', { return jasmine.createSpyObj('FormOperationsService', {
@@ -179,6 +183,7 @@ describe('SubmissionSectionformComponent test suite', () => {
{ provide: 'collectionIdProvider', useValue: collectionId }, { provide: 'collectionIdProvider', useValue: collectionId },
{ provide: 'sectionDataProvider', useValue: sectionObject }, { provide: 'sectionDataProvider', useValue: sectionObject },
{ provide: 'submissionIdProvider', useValue: submissionId }, { provide: 'submissionIdProvider', useValue: submissionId },
{ provide: WorkspaceitemDataService, useValue: {getById: observableOf(new RemoteData(false, false, true, null, new Workspaceitem()))}},
ChangeDetectorRef, ChangeDetectorRef,
SubmissionSectionformComponent SubmissionSectionformComponent
], ],

View File

@@ -15,7 +15,10 @@ import { hasValue, isNotEmpty, isUndefined } from '../../../shared/empty.util';
import { ConfigData } from '../../../core/config/config-data'; import { ConfigData } from '../../../core/config/config-data';
import { JsonPatchOperationPathCombiner } from '../../../core/json-patch/builder/json-patch-operation-path-combiner'; import { JsonPatchOperationPathCombiner } from '../../../core/json-patch/builder/json-patch-operation-path-combiner';
import { SubmissionFormsModel } from '../../../core/config/models/config-submission-forms.model'; import { SubmissionFormsModel } from '../../../core/config/models/config-submission-forms.model';
import { SubmissionSectionError, SubmissionSectionObject } from '../../objects/submission-objects.reducer'; import {
SubmissionSectionError,
SubmissionSectionObject
} from '../../objects/submission-objects.reducer';
import { FormFieldPreviousValueObject } from '../../../shared/form/builder/models/form-field-previous-value-object'; import { FormFieldPreviousValueObject } from '../../../shared/form/builder/models/form-field-previous-value-object';
import { GLOBAL_CONFIG } from '../../../../config'; import { GLOBAL_CONFIG } from '../../../../config';
import { GlobalConfig } from '../../../../config/global-config.interface'; import { GlobalConfig } from '../../../../config/global-config.interface';
@@ -28,6 +31,11 @@ import { NotificationsService } from '../../../shared/notifications/notification
import { SectionsService } from '../sections.service'; import { SectionsService } from '../sections.service';
import { difference } from '../../../shared/object.util'; import { difference } from '../../../shared/object.util';
import { WorkspaceitemSectionFormObject } from '../../../core/submission/models/workspaceitem-section-form.model'; 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 { getSucceededRemoteData } from '../../../core/shared/operators';
import { RemoteData } from '../../../core/data/remote-data';
/** /**
* This component represents a section that contains a Form. * This component represents a section that contains a Form.
@@ -94,6 +102,7 @@ export class SubmissionSectionformComponent extends SectionModelComponent {
*/ */
protected subs: Subscription[] = []; protected subs: Subscription[] = [];
protected workspaceItem;
/** /**
* The FormComponent reference * The FormComponent reference
*/ */
@@ -125,6 +134,7 @@ export class SubmissionSectionformComponent extends SectionModelComponent {
protected sectionService: SectionsService, protected sectionService: SectionsService,
protected submissionService: SubmissionService, protected submissionService: SubmissionService,
protected translate: TranslateService, protected translate: TranslateService,
protected workspaceItemDataService: WorkspaceitemDataService,
@Inject(GLOBAL_CONFIG) protected EnvConfig: GlobalConfig, @Inject(GLOBAL_CONFIG) protected EnvConfig: GlobalConfig,
@Inject('collectionIdProvider') public injectedCollectionId: string, @Inject('collectionIdProvider') public injectedCollectionId: string,
@Inject('sectionDataProvider') public injectedSectionData: SectionDataObject, @Inject('sectionDataProvider') public injectedSectionData: SectionDataObject,
@@ -138,16 +148,20 @@ export class SubmissionSectionformComponent extends SectionModelComponent {
onSectionInit() { onSectionInit() {
this.pathCombiner = new JsonPatchOperationPathCombiner('sections', this.sectionData.id); this.pathCombiner = new JsonPatchOperationPathCombiner('sections', this.sectionData.id);
this.formId = this.formService.getUniqueId(this.sectionData.id); this.formId = this.formService.getUniqueId(this.sectionData.id);
this.formConfigService.getConfigByHref(this.sectionData.config).pipe( this.formConfigService.getConfigByHref(this.sectionData.config).pipe(
map((configData: ConfigData) => configData.payload), map((configData: ConfigData) => configData.payload),
tap((config: SubmissionFormsModel) => this.formConfig = config), tap((config: SubmissionFormsModel) => this.formConfig = config),
flatMap(() => this.sectionService.getSectionData(this.submissionId, this.sectionData.id)), flatMap(() =>
combineLatestObservable(
this.sectionService.getSectionData(this.submissionId, this.sectionData.id),
this.workspaceItemDataService.findById(this.submissionId).pipe(getSucceededRemoteData())
)),
take(1)) take(1))
.subscribe((sectionData: WorkspaceitemSectionFormObject) => { .subscribe(([sectionData, workspaceItem]: [WorkspaceitemSectionFormObject, RemoteData<Workspaceitem>]) => {
if (isUndefined(this.formModel)) { if (isUndefined(this.formModel)) {
this.sectionData.errors = []; this.sectionData.errors = [];
// Is the first loading so init form // Is the first loading so init form
this.workspaceItem = workspaceItem;
this.initForm(sectionData); this.initForm(sectionData);
this.sectionData.data = sectionData; this.sectionData.data = sectionData;
this.subscriptions(); this.subscriptions();
@@ -212,7 +226,9 @@ export class SubmissionSectionformComponent extends SectionModelComponent {
this.formConfig, this.formConfig,
this.collectionId, this.collectionId,
sectionData, sectionData,
this.submissionService.getSubmissionScope()); this.workspaceItem,
this.submissionService.getSubmissionScope()
);
} catch (e) { } catch (e) {
const msg: string = this.translate.instant('error.submission.sections.init-form-error') + e.toString(); const msg: string = this.translate.instant('error.submission.sections.init-form-error') + e.toString();
const sectionError: SubmissionSectionError = { const sectionError: SubmissionSectionError = {

View File

@@ -84,7 +84,7 @@ export class SectionsService {
} else if (!isEqual(currentErrors, prevErrors)) { // compare previous error list with the current one } else if (!isEqual(currentErrors, prevErrors)) { // compare previous error list with the current one
const dispatchedErrors = []; const dispatchedErrors = [];
// Itereate over the current error list // Iterate over the current error list
currentErrors.forEach((error: SubmissionSectionError) => { currentErrors.forEach((error: SubmissionSectionError) => {
const errorPaths: SectionErrorPath[] = parseSectionErrorPaths(error.path); const errorPaths: SectionErrorPath[] = parseSectionErrorPaths(error.path);

View File

@@ -169,6 +169,7 @@ export class SubmissionSectionUploadFileEditComponent implements OnChanges {
configForm, configForm,
this.collectionId, this.collectionId,
this.fileData.metadata, this.fileData.metadata,
undefined,
this.submissionService.getSubmissionScope() this.submissionService.getSubmissionScope()
); );
formModel.push(new DynamicFormGroupModel(metadataGroupModelConfig, BITSTREAM_METADATA_FORM_GROUP_LAYOUT)); formModel.push(new DynamicFormGroupModel(metadataGroupModelConfig, BITSTREAM_METADATA_FORM_GROUP_LAYOUT));