From 072ea801718abcdae132ad43422e3cbd4fa0714c Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Thu, 11 Apr 2024 13:37:24 +0200 Subject: [PATCH 1/2] 113996: Support for extending submission steps --- .../core/config/models/config-submission-section.model.ts | 6 ++++++ .../core/submission/submission-response-parsing.service.ts | 5 +---- src/app/submission/objects/submission-objects.actions.ts | 6 +++++- src/app/submission/objects/submission-objects.effects.ts | 1 + src/app/submission/objects/submission-objects.reducer.ts | 1 + .../submission/objects/submission-section-object.model.ts | 5 +++++ src/app/submission/sections/models/section-data.model.ts | 5 +++++ src/app/submission/sections/sections.service.ts | 6 ++++-- src/app/submission/submission.service.ts | 1 + 9 files changed, 29 insertions(+), 7 deletions(-) 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 bdc884dfa46..71daade50af 100644 --- a/src/app/core/config/models/config-submission-section.model.ts +++ b/src/app/core/config/models/config-submission-section.model.ts @@ -36,6 +36,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 ff847762357..641728a87fa 100644 --- a/src/app/core/submission/submission-response-parsing.service.ts +++ b/src/app/core/submission/submission-response-parsing.service.ts @@ -137,10 +137,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 9182611e479..a60bce7c7ec 100644 --- a/src/app/submission/objects/submission-objects.actions.ts +++ b/src/app/submission/objects/submission-objects.actions.ts @@ -117,6 +117,7 @@ export class InitSectionAction implements Action { config: string; mandatory: boolean; sectionType: SectionsType; + extendsSectionType: SectionsType; visibility: SectionVisibility; enabled: boolean; data: WorkspaceitemSectionDataType; @@ -138,6 +139,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 @@ -153,11 +156,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.ts b/src/app/submission/objects/submission-objects.effects.ts index 98646009d5b..a92ffe35d7c 100644 --- a/src/app/submission/objects/submission-objects.effects.ts +++ b/src/app/submission/objects/submission-objects.effects.ts @@ -87,6 +87,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.ts b/src/app/submission/objects/submission-objects.reducer.ts index a05bf05f52c..76e5184b98d 100644 --- a/src/app/submission/objects/submission-objects.reducer.ts +++ b/src/app/submission/objects/submission-objects.reducer.ts @@ -549,6 +549,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 16e437da80f..94041258bab 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/models/section-data.model.ts b/src/app/submission/sections/models/section-data.model.ts index 6f8126dffc0..6c256656773 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 0ea62322370..d88ead34e1e 100644 --- a/src/app/submission/sections/sections.service.ts +++ b/src/app/submission/sections/sections.service.ts @@ -374,7 +374,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()); } @@ -390,7 +392,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/submission.service.ts b/src/app/submission/submission.service.ts index 9eb8cf110a5..5f132605859 100644 --- a/src/app/submission/submission.service.ts +++ b/src/app/submission/submission.service.ts @@ -297,6 +297,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; From 713564bd83f9c525d5e1aee8fff99728e19667a4 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Thu, 11 Apr 2024 16:49:04 +0200 Subject: [PATCH 2/2] 113996: Test fixes --- .../submission/objects/submission-objects.effects.spec.ts | 1 + .../submission/objects/submission-objects.reducer.spec.ts | 2 ++ .../submission-section-cc-licenses.component.spec.ts | 3 ++- .../container/section-container.component.spec.ts | 3 ++- .../sections/form/section-form.component.spec.ts | 3 ++- .../identifiers/section-identifiers.component.spec.ts | 1 + .../sections/license/section-license.component.spec.ts | 3 ++- .../sections/upload/section-upload.component.spec.ts | 3 ++- src/app/submission/submission.service.spec.ts | 8 ++++++++ 9 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/app/submission/objects/submission-objects.effects.spec.ts b/src/app/submission/objects/submission-objects.effects.spec.ts index a1bb878aa59..9b98d91a47c 100644 --- a/src/app/submission/objects/submission-objects.effects.spec.ts +++ b/src/app/submission/objects/submission-objects.effects.spec.ts @@ -145,6 +145,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.reducer.spec.ts b/src/app/submission/objects/submission-objects.reducer.spec.ts index 2a24afae19c..e8172907a62 100644 --- a/src/app/submission/objects/submission-objects.reducer.spec.ts +++ b/src/app/submission/objects/submission-objects.reducer.spec.ts @@ -234,6 +234,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, @@ -255,6 +256,7 @@ describe('submissionReducer test suite', () => { true, SectionsType.SubmissionForm, undefined, + undefined, true, {}, null); 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 bb83e48d212..badcb0d91be 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 @@ -33,7 +33,8 @@ describe('SubmissionSectionCcLicensesComponent', () => { serverValidationErrors: [], header: 'test header', id: 'test section id', - sectionType: SectionsType.SubmissionForm + 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 d3f4a93762a..2a6ecf65dea 100644 --- a/src/app/submission/sections/container/section-container.component.spec.ts +++ b/src/app/submission/sections/container/section-container.component.spec.ts @@ -40,7 +40,8 @@ const sectionObject: SectionDataObject = { serverValidationErrors: [], header: 'submit.progressbar.describe.stepone', id: 'traditionalpageone', - sectionType: SectionsType.SubmissionForm + 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 4fbf324edf8..30527a2cf0f 100644 --- a/src/app/submission/sections/form/section-form.component.spec.ts +++ b/src/app/submission/sections/form/section-form.component.spec.ts @@ -63,7 +63,8 @@ const sectionObject: SectionDataObject = { serverValidationErrors: [], header: 'submit.progressbar.describe.stepone', id: 'traditionalpageone', - sectionType: SectionsType.SubmissionForm + 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 041e2af23a4..73e1a697a04 100644 --- a/src/app/submission/sections/identifiers/section-identifiers.component.spec.ts +++ b/src/app/submission/sections/identifiers/section-identifiers.component.spec.ts @@ -99,6 +99,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 35fea95b8df..3be275fd4a7 100644 --- a/src/app/submission/sections/license/section-license.component.spec.ts +++ b/src/app/submission/sections/license/section-license.component.spec.ts @@ -74,7 +74,8 @@ const sectionObject: SectionDataObject = { serverValidationErrors: [], header: 'submit.progressbar.describe.license', id: 'license', - sectionType: SectionsType.License + sectionType: SectionsType.License, + extendsSectionType: undefined, }; const dynamicFormControlEvent: DynamicFormControlEvent = { 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 068fc5c7660..4ea96bcb05f 100644 --- a/src/app/submission/sections/upload/section-upload.component.spec.ts +++ b/src/app/submission/sections/upload/section-upload.component.spec.ts @@ -102,7 +102,8 @@ describe('SubmissionSectionUploadComponent test suite', () => { serverValidationErrors: [], header: 'submit.progressbar.describe.upload', id: 'upload-id', - sectionType: SectionsType.Upload + 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 1e2be5b6121..0e419340a2f 100644 --- a/src/app/submission/submission.service.spec.ts +++ b/src/app/submission/submission.service.spec.ts @@ -581,6 +581,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: [] @@ -591,6 +592,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: [] @@ -601,6 +603,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: [] @@ -611,6 +614,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: [] @@ -621,6 +625,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: [] @@ -631,6 +636,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: [] @@ -641,6 +647,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: [] @@ -651,6 +658,7 @@ describe('SubmissionService test suite', () => { config: '', mandatory: true, sectionType: 'license', + extendsSectionType: undefined, data: {}, errorsToShow: [], serverValidationErrors: []