diff --git a/src/app/core/config/models/config-submission-section.model.ts b/src/app/core/config/models/config-submission-section.model.ts index 0d4ae9aa102..af19f3cef51 100644 --- a/src/app/core/config/models/config-submission-section.model.ts +++ b/src/app/core/config/models/config-submission-section.model.ts @@ -41,6 +41,12 @@ export class SubmissionSectionModel extends ConfigObject { @autoserialize sectionType: SectionsType; + /** + * A string representing the type this section extends + */ + @autoserialize + extendsSectionType: SectionsType; + /** * The [SubmissionSectionVisibility] object for this section */ diff --git a/src/app/core/submission/submission-response-parsing.service.ts b/src/app/core/submission/submission-response-parsing.service.ts index 1e5ba027f83..13e70fed6bf 100644 --- a/src/app/core/submission/submission-response-parsing.service.ts +++ b/src/app/core/submission/submission-response-parsing.service.ts @@ -141,10 +141,7 @@ export class SubmissionResponseParsingService extends BaseResponseParsingService // Iterate over all workspaceitem's sections Object.keys(item.sections) .forEach((sectionId) => { - if (typeof item.sections[sectionId] === 'object' && (isNotEmpty(item.sections[sectionId]) && - // When Upload section is disabled, add to submission only if there are files - (!item.sections[sectionId].hasOwnProperty('files') || isNotEmpty((item.sections[sectionId] as any).files)))) { - + if (typeof item.sections[sectionId] === 'object' && (isNotEmpty(item.sections[sectionId]))) { const sectiondata = Object.create({}); // Iterate over all sections property Object.keys(item.sections[sectionId]) diff --git a/src/app/submission/objects/submission-objects.actions.ts b/src/app/submission/objects/submission-objects.actions.ts index e075ce5e5ba..78ef72c9fe3 100644 --- a/src/app/submission/objects/submission-objects.actions.ts +++ b/src/app/submission/objects/submission-objects.actions.ts @@ -121,6 +121,7 @@ export class InitSectionAction implements Action { config: string; mandatory: boolean; sectionType: SectionsType; + extendsSectionType: SectionsType; visibility: SectionVisibility; enabled: boolean; data: WorkspaceitemSectionDataType; @@ -142,6 +143,8 @@ export class InitSectionAction implements Action { * the section's mandatory * @param sectionType * the section's type + * @param extendsSectionType + * the type of the section it extends * @param visibility * the section's visibility * @param enabled @@ -157,11 +160,12 @@ export class InitSectionAction implements Action { config: string, mandatory: boolean, sectionType: SectionsType, + extendsSectionType: SectionsType, visibility: SectionVisibility, enabled: boolean, data: WorkspaceitemSectionDataType, errors: SubmissionSectionError[]) { - this.payload = { submissionId, sectionId, header, config, mandatory, sectionType, visibility, enabled, data, errors }; + this.payload = { submissionId, sectionId, header, config, mandatory, sectionType, extendsSectionType, visibility, enabled, data, errors }; } } diff --git a/src/app/submission/objects/submission-objects.effects.spec.ts b/src/app/submission/objects/submission-objects.effects.spec.ts index 66c6e8316ef..d6076d6bc2d 100644 --- a/src/app/submission/objects/submission-objects.effects.spec.ts +++ b/src/app/submission/objects/submission-objects.effects.spec.ts @@ -161,6 +161,7 @@ describe('SubmissionObjectEffects test suite', () => { config, sectionDefinition.mandatory, sectionDefinition.sectionType, + sectionDefinition.extendsSectionType, sectionDefinition.visibility, enabled, sectionData, diff --git a/src/app/submission/objects/submission-objects.effects.ts b/src/app/submission/objects/submission-objects.effects.ts index 53dcd9a19e1..a7586489f20 100644 --- a/src/app/submission/objects/submission-objects.effects.ts +++ b/src/app/submission/objects/submission-objects.effects.ts @@ -116,6 +116,7 @@ export class SubmissionObjectEffects { config, sectionDefinition.mandatory, sectionDefinition.sectionType, + sectionDefinition.extendsSectionType, sectionDefinition.visibility, enabled, sectionData, diff --git a/src/app/submission/objects/submission-objects.reducer.spec.ts b/src/app/submission/objects/submission-objects.reducer.spec.ts index 2389a5600c8..09225c09995 100644 --- a/src/app/submission/objects/submission-objects.reducer.spec.ts +++ b/src/app/submission/objects/submission-objects.reducer.spec.ts @@ -238,6 +238,7 @@ describe('submissionReducer test suite', () => { config: 'https://rest.api/dspace-spring-rest/api/config/submissionforms/traditionalpageone', mandatory: true, sectionType: 'submission-form', + extendsSectionType: undefined, visibility: undefined, collapsed: false, enabled: true, @@ -259,6 +260,7 @@ describe('submissionReducer test suite', () => { true, SectionsType.SubmissionForm, undefined, + undefined, true, {}, null); diff --git a/src/app/submission/objects/submission-objects.reducer.ts b/src/app/submission/objects/submission-objects.reducer.ts index 82e33062cda..c074f748fd1 100644 --- a/src/app/submission/objects/submission-objects.reducer.ts +++ b/src/app/submission/objects/submission-objects.reducer.ts @@ -566,6 +566,7 @@ function initSection(state: SubmissionObjectState, action: InitSectionAction): S config: action.payload.config, mandatory: action.payload.mandatory, sectionType: action.payload.sectionType, + extendsSectionType: action.payload.extendsSectionType, visibility: action.payload.visibility, collapsed: false, enabled: action.payload.enabled, diff --git a/src/app/submission/objects/submission-section-object.model.ts b/src/app/submission/objects/submission-section-object.model.ts index 7338539607b..5d4cf119deb 100644 --- a/src/app/submission/objects/submission-section-object.model.ts +++ b/src/app/submission/objects/submission-section-object.model.ts @@ -27,6 +27,11 @@ export interface SubmissionSectionObject { */ sectionType: SectionsType; + /** + * The type this section extends + */ + extendsSectionType: SectionsType; + /** * The section visibility */ diff --git a/src/app/submission/sections/cc-license/submission-section-cc-licenses.component.spec.ts b/src/app/submission/sections/cc-license/submission-section-cc-licenses.component.spec.ts index 7b540ecd910..eacf94bcc0d 100644 --- a/src/app/submission/sections/cc-license/submission-section-cc-licenses.component.spec.ts +++ b/src/app/submission/sections/cc-license/submission-section-cc-licenses.component.spec.ts @@ -40,6 +40,7 @@ describe('SubmissionSectionCcLicensesComponent', () => { header: 'test header', id: 'test section id', sectionType: SectionsType.SubmissionForm, + extendsSectionType: undefined, }; const submissionCcLicenses: SubmissionCcLicence[] = [ diff --git a/src/app/submission/sections/container/section-container.component.spec.ts b/src/app/submission/sections/container/section-container.component.spec.ts index 4dfa65a13bf..510d4ab54ce 100644 --- a/src/app/submission/sections/container/section-container.component.spec.ts +++ b/src/app/submission/sections/container/section-container.component.spec.ts @@ -51,6 +51,7 @@ const sectionObject: SectionDataObject = { header: 'submit.progressbar.describe.stepone', id: 'traditionalpageone', sectionType: SectionsType.SubmissionForm, + extendsSectionType: undefined, }; describe('SubmissionSectionContainerComponent test suite', () => { 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 da5a620d1ad..e1207eb6e59 100644 --- a/src/app/submission/sections/form/section-form.component.spec.ts +++ b/src/app/submission/sections/form/section-form.component.spec.ts @@ -84,6 +84,7 @@ const sectionObject: SectionDataObject = { header: 'submit.progressbar.describe.stepone', id: 'traditionalpageone', sectionType: SectionsType.SubmissionForm, + extendsSectionType: undefined, }; const testFormConfiguration = { diff --git a/src/app/submission/sections/identifiers/section-identifiers.component.spec.ts b/src/app/submission/sections/identifiers/section-identifiers.component.spec.ts index 8aa760bb3e3..2dada78f9f3 100644 --- a/src/app/submission/sections/identifiers/section-identifiers.component.spec.ts +++ b/src/app/submission/sections/identifiers/section-identifiers.component.spec.ts @@ -114,6 +114,7 @@ const sectionObject: SectionDataObject = { header: 'submission.sections.submit.progressbar.identifiers', id: 'identifiers', sectionType: SectionsType.Identifiers, + extendsSectionType: undefined, sectionVisibility: null, }; diff --git a/src/app/submission/sections/license/section-license.component.spec.ts b/src/app/submission/sections/license/section-license.component.spec.ts index 95b2e7f50ab..a7bd5779f49 100644 --- a/src/app/submission/sections/license/section-license.component.spec.ts +++ b/src/app/submission/sections/license/section-license.component.spec.ts @@ -112,6 +112,7 @@ const sectionObject: SectionDataObject = { header: 'submit.progressbar.describe.license', id: 'license', sectionType: SectionsType.License, + extendsSectionType: undefined, }; const dynamicFormControlEvent: DynamicFormControlEvent = { diff --git a/src/app/submission/sections/models/section-data.model.ts b/src/app/submission/sections/models/section-data.model.ts index 7ecb820db77..1a278a4aa1f 100644 --- a/src/app/submission/sections/models/section-data.model.ts +++ b/src/app/submission/sections/models/section-data.model.ts @@ -47,6 +47,11 @@ export interface SectionDataObject { */ sectionType: SectionsType; + /** + * The type this section extends + */ + extendsSectionType: SectionsType; + /** * Eventually additional fields */ diff --git a/src/app/submission/sections/sections.service.ts b/src/app/submission/sections/sections.service.ts index 8d86ee84b54..e64b59d1888 100644 --- a/src/app/submission/sections/sections.service.ts +++ b/src/app/submission/sections/sections.service.ts @@ -388,7 +388,9 @@ export class SectionsService { return this.store.select(submissionObjectFromIdSelector(submissionId)).pipe( filter((submissionState: SubmissionObjectEntry) => isNotUndefined(submissionState)), map((submissionState: SubmissionObjectEntry) => { - return isNotUndefined(submissionState.sections) && isNotUndefined(findKey(submissionState.sections, { sectionType: sectionType })); + return isNotUndefined(submissionState.sections) && + (isNotUndefined(findKey(submissionState.sections, { sectionType: sectionType })) || + isNotUndefined(findKey(submissionState.sections, { extendsSectionType: sectionType }))); }), distinctUntilChanged()); } @@ -404,7 +406,7 @@ export class SectionsService { filter((submissionState: SubmissionObjectEntry) => isNotUndefined(submissionState)), map((submissionState: SubmissionObjectEntry) => { return isNotUndefined(submissionState.sections) && isNotUndefined(submissionState.sections[sectionId]) - && submissionState.sections[sectionId].sectionType === sectionType; + && (submissionState.sections[sectionId].sectionType === sectionType || submissionState.sections[sectionId].extendsSectionType === sectionType); }), distinctUntilChanged()); } diff --git a/src/app/submission/sections/upload/section-upload.component.spec.ts b/src/app/submission/sections/upload/section-upload.component.spec.ts index 61db6c68851..f376724e3a4 100644 --- a/src/app/submission/sections/upload/section-upload.component.spec.ts +++ b/src/app/submission/sections/upload/section-upload.component.spec.ts @@ -115,6 +115,7 @@ describe('SubmissionSectionUploadComponent test suite', () => { header: 'submit.progressbar.describe.upload', id: 'upload-id', sectionType: SectionsType.Upload, + extendsSectionType: undefined, }; submissionId = mockSubmissionId; collectionId = mockSubmissionCollectionId; diff --git a/src/app/submission/submission.service.spec.ts b/src/app/submission/submission.service.spec.ts index 0ba8e5d9a21..c38a8f39d0c 100644 --- a/src/app/submission/submission.service.spec.ts +++ b/src/app/submission/submission.service.spec.ts @@ -605,6 +605,7 @@ describe('SubmissionService test suite', () => { config: 'https://rest.api/dspace-spring-rest/api/config/submissionforms/keyinformation', mandatory: true, sectionType: 'submission-form', + extendsSectionType: undefined, data: {}, errorsToShow: [], serverValidationErrors: [], @@ -615,6 +616,7 @@ describe('SubmissionService test suite', () => { config: 'https://rest.api/dspace-spring-rest/api/config/submissionforms/indexing', mandatory: false, sectionType: 'submission-form', + extendsSectionType: undefined, data: {}, errorsToShow: [], serverValidationErrors: [], @@ -625,6 +627,7 @@ describe('SubmissionService test suite', () => { config: 'https://rest.api/dspace-spring-rest/api/config/submissionforms/publicationchannel', mandatory: true, sectionType: 'submission-form', + extendsSectionType: undefined, data: {}, errorsToShow: [], serverValidationErrors: [], @@ -635,6 +638,7 @@ describe('SubmissionService test suite', () => { config: 'https://rest.api/dspace-spring-rest/api/config/submissionforms/acknowledgement', mandatory: false, sectionType: 'submission-form', + extendsSectionType: undefined, data: {}, errorsToShow: [], serverValidationErrors: [], @@ -645,6 +649,7 @@ describe('SubmissionService test suite', () => { config: 'https://rest.api/dspace-spring-rest/api/config/submissionforms/identifiers', mandatory: false, sectionType: 'submission-form', + extendsSectionType: undefined, data: {}, errorsToShow: [], serverValidationErrors: [], @@ -655,6 +660,7 @@ describe('SubmissionService test suite', () => { config: 'https://rest.api/dspace-spring-rest/api/config/submissionforms/references', mandatory: false, sectionType: 'submission-form', + extendsSectionType: undefined, data: {}, errorsToShow: [], serverValidationErrors: [], @@ -665,6 +671,7 @@ describe('SubmissionService test suite', () => { config: 'https://rest.api/dspace-spring-rest/api/config/submissionuploads/upload', mandatory: true, sectionType: 'upload', + extendsSectionType: undefined, data: {}, errorsToShow: [], serverValidationErrors: [], @@ -675,6 +682,7 @@ describe('SubmissionService test suite', () => { config: '', mandatory: true, sectionType: 'license', + extendsSectionType: undefined, data: {}, errorsToShow: [], serverValidationErrors: [], diff --git a/src/app/submission/submission.service.ts b/src/app/submission/submission.service.ts index 312d74bc8a5..53b4927e328 100644 --- a/src/app/submission/submission.service.ts +++ b/src/app/submission/submission.service.ts @@ -321,6 +321,7 @@ export class SubmissionService { sectionObject.header = sections[sectionId].header; sectionObject.id = sectionId; sectionObject.sectionType = sections[sectionId].sectionType; + sectionObject.extendsSectionType = sections[sectionId].extendsSectionType; availableSections.push(sectionObject); }); return availableSections;