diff --git a/src/app/submission/sections/form/section-form.component.spec.ts b/src/app/submission/sections/form/section-form.component.spec.ts index 889f17c393..346a22fa84 100644 --- a/src/app/submission/sections/form/section-form.component.spec.ts +++ b/src/app/submission/sections/form/section-form.component.spec.ts @@ -249,6 +249,8 @@ describe('SubmissionSectionFormComponent test suite', () => { formConfigService.findByHref.and.returnValue(createSuccessfulRemoteDataObject$(testFormConfiguration)); sectionsServiceStub.getSectionData.and.returnValue(observableOf(sectionData)); sectionsServiceStub.getSectionServerErrors.and.returnValue(observableOf([])); + sectionsServiceStub.isSectionReadOnly.and.returnValue(observableOf(false)); + spyOn(comp, 'initForm'); spyOn(comp, 'subscriptions'); diff --git a/src/app/submission/sections/form/section-form.component.ts b/src/app/submission/sections/form/section-form.component.ts index 326d277ffb..a89a9aa886 100644 --- a/src/app/submission/sections/form/section-form.component.ts +++ b/src/app/submission/sections/form/section-form.component.ts @@ -118,6 +118,12 @@ export class SubmissionSectionFormComponent extends SectionModelComponent { protected subs: Subscription[] = []; protected submissionObject: SubmissionObject; + + /** + * A flag representing if this section is readonly + */ + protected isSectionReadonly = false; + /** * The FormComponent reference */ @@ -175,13 +181,15 @@ export class SubmissionSectionFormComponent extends SectionModelComponent { this.sectionService.getSectionData(this.submissionId, this.sectionData.id, this.sectionData.sectionType), this.submissionObjectService.findById(this.submissionId, true, false, followLink('item')).pipe( getFirstSucceededRemoteData(), - getRemoteDataPayload()) + getRemoteDataPayload()), + this.sectionService.isSectionReadOnly(this.submissionId, this.sectionData.id, this.submissionService.getSubmissionScope()) ])), take(1)) - .subscribe(([sectionData, submissionObject]: [WorkspaceitemSectionFormObject, SubmissionObject]) => { + .subscribe(([sectionData, submissionObject, isSectionReadOnly]: [WorkspaceitemSectionFormObject, SubmissionObject, boolean]) => { if (isUndefined(this.formModel)) { // this.sectionData.errorsToShow = []; this.submissionObject = submissionObject; + this.isSectionReadonly = isSectionReadOnly; // Is the first loading so init form this.initForm(sectionData); this.sectionData.data = sectionData; @@ -286,11 +294,11 @@ export class SubmissionSectionFormComponent extends SectionModelComponent { this.formConfig, this.collectionId, sectionData, - this.submissionService.getSubmissionScope() + this.submissionService.getSubmissionScope(), + this.isSectionReadonly ); const sectionMetadata = this.sectionService.computeSectionConfiguredMetadata(this.formConfig); this.sectionService.updateSectionData(this.submissionId, this.sectionData.id, sectionData, this.sectionData.errorsToShow, this.sectionData.serverValidationErrors, sectionMetadata); - } catch (e) { const msg: string = this.translate.instant('error.submission.sections.init-form-error') + e.toString(); const sectionError: SubmissionSectionError = { diff --git a/src/app/submission/sections/sections.service.ts b/src/app/submission/sections/sections.service.ts index cc2802dba7..0ea6232237 100644 --- a/src/app/submission/sections/sections.service.ts +++ b/src/app/submission/sections/sections.service.ts @@ -334,8 +334,9 @@ export class SectionsService { filter((sectionObj) => hasValue(sectionObj)), map((sectionObj: SubmissionSectionObject) => { return isNotEmpty(sectionObj.visibility) - && sectionObj.visibility.other === 'READONLY' - && submissionScope !== SubmissionScopeType.WorkspaceItem; + && ((sectionObj.visibility.other === 'READONLY' && submissionScope !== SubmissionScopeType.WorkspaceItem) + || (sectionObj.visibility.main === 'READONLY' && submissionScope === SubmissionScopeType.WorkspaceItem) + ); }), distinctUntilChanged()); }