1- import { Injectable } from '@angular/core' ;
2- import { Actions , createEffect , ofType } from '@ngrx/effects' ;
3- import { Store } from '@ngrx/store' ;
4- import { TranslateService } from '@ngx-translate/core' ;
1+ import { Injectable } from '@angular/core' ;
2+ import { Actions , createEffect , ofType } from '@ngrx/effects' ;
3+ import { Store } from '@ngrx/store' ;
4+ import { TranslateService } from '@ngx-translate/core' ;
55import findKey from 'lodash/findKey' ;
66import isEqual from 'lodash/isEqual' ;
77import union from 'lodash/union' ;
88
9- import { from as observableFrom , Observable , of as observableOf } from 'rxjs' ;
10- import { catchError , filter , map , mergeMap , switchMap , take , tap , withLatestFrom } from 'rxjs/operators' ;
11- import { SubmissionObject } from '../../core/submission/models/submission-object.model' ;
12- import { WorkflowItem } from '../../core/submission/models/workflowitem.model' ;
13- import { WorkspaceitemSectionUploadObject } from '../../core/submission/models/workspaceitem-section-upload.model' ;
14- import { WorkspaceitemSectionsObject } from '../../core/submission/models/workspaceitem-sections.model' ;
15- import { WorkspaceItem } from '../../core/submission/models/workspaceitem.model' ;
16- import { SubmissionJsonPatchOperationsService } from '../../core/submission/submission-json-patch-operations.service' ;
17- import { isEmpty , isNotEmpty , isNotUndefined } from '../../shared/empty.util' ;
18- import { NotificationsService } from '../../shared/notifications/notifications.service' ;
19- import { SectionsType } from '../sections/sections-type' ;
20- import { SectionsService } from '../sections/sections.service' ;
21- import { SubmissionState } from '../submission.reducers' ;
22- import { SubmissionService } from '../submission.service' ;
9+ import { from as observableFrom , Observable , of as observableOf } from 'rxjs' ;
10+ import { catchError , filter , map , mergeMap , switchMap , take , tap , withLatestFrom } from 'rxjs/operators' ;
11+ import { SubmissionObject } from '../../core/submission/models/submission-object.model' ;
12+ import { WorkflowItem } from '../../core/submission/models/workflowitem.model' ;
13+ import { WorkspaceitemSectionUploadObject } from '../../core/submission/models/workspaceitem-section-upload.model' ;
14+ import { WorkspaceitemSectionsObject } from '../../core/submission/models/workspaceitem-sections.model' ;
15+ import { WorkspaceItem } from '../../core/submission/models/workspaceitem.model' ;
16+ import { SubmissionJsonPatchOperationsService } from '../../core/submission/submission-json-patch-operations.service' ;
17+ import { isEmpty , isNotEmpty , isNotUndefined } from '../../shared/empty.util' ;
18+ import { NotificationsService } from '../../shared/notifications/notifications.service' ;
19+ import { SectionsType } from '../sections/sections-type' ;
20+ import { SectionsService } from '../sections/sections.service' ;
21+ import { SubmissionState } from '../submission.reducers' ;
22+ import { SubmissionService } from '../submission.service' ;
2323import parseSectionErrors from '../utils/parseSectionErrors' ;
2424import {
2525 CompleteInitSubmissionFormAction ,
@@ -45,16 +45,19 @@ import {
4545 UpdateSectionDataAction ,
4646 UpdateSectionDataSuccessAction
4747} from './submission-objects.actions' ;
48- import { SubmissionObjectEntry } from './submission-objects.reducer' ;
49- import { Item } from '../../core/shared/item.model' ;
50- import { RemoteData } from '../../core/data/remote-data' ;
51- import { getFirstSucceededRemoteDataPayload } from '../../core/shared/operators' ;
52- import { SubmissionObjectDataService } from '../../core/submission/submission-object-data.service' ;
53- import { followLink } from '../../shared/utils/follow-link-config.model' ;
54- import parseSectionErrorPaths , { SectionErrorPath } from '../utils/parseSectionErrorPaths' ;
55- import { FormState } from '../../shared/form/form.reducer' ;
56- import { SubmissionSectionObject } from './submission-section-object.model' ;
57- import { SubmissionSectionError } from './submission-section-error.model' ;
48+ import { SubmissionObjectEntry } from './submission-objects.reducer' ;
49+ import { Item } from '../../core/shared/item.model' ;
50+ import { RemoteData } from '../../core/data/remote-data' ;
51+ import { getFirstSucceededRemoteDataPayload } from '../../core/shared/operators' ;
52+ import { SubmissionObjectDataService } from '../../core/submission/submission-object-data.service' ;
53+ import { followLink } from '../../shared/utils/follow-link-config.model' ;
54+ import parseSectionErrorPaths , { SectionErrorPath } from '../utils/parseSectionErrorPaths' ;
55+ import { FormState } from '../../shared/form/form.reducer' ;
56+ import { SubmissionSectionObject } from './submission-section-object.model' ;
57+ import { SubmissionSectionError } from './submission-section-error.model' ;
58+ import {
59+ WorkspaceitemSectionDuplicatesObject
60+ } from '../../core/submission/models/workspaceitem-section-duplicates.model' ;
5861
5962@Injectable ( )
6063export class SubmissionObjectEffects {
@@ -71,7 +74,11 @@ export class SubmissionObjectEffects {
7174 const selfLink = sectionDefinition . _links . self . href || sectionDefinition . _links . self ;
7275 const sectionId = selfLink . substr ( selfLink . lastIndexOf ( '/' ) + 1 ) ;
7376 const config = sectionDefinition . _links . config ? ( sectionDefinition . _links . config . href || sectionDefinition . _links . config ) : '' ;
74- const enabled = ( sectionDefinition . mandatory ) || ( isNotEmpty ( action . payload . sections ) && action . payload . sections . hasOwnProperty ( sectionId ) ) ;
77+ // A section is enabled if it is mandatory (except duplicate detection) or contains data in its section payload
78+ const enabled = ( sectionDefinition . mandatory && ( sectionDefinition . sectionType !== SectionsType . Duplicates ) )
79+ || ( isNotEmpty ( action . payload . sections ) && action . payload . sections . hasOwnProperty ( sectionId )
80+ && ( sectionDefinition . sectionType === SectionsType . Duplicates && isNotEmpty ( ( action . payload . sections [ sectionId ] as WorkspaceitemSectionDuplicatesObject ) . potentialDuplicates ) )
81+ ) ;
7582 let sectionData ;
7683 if ( sectionDefinition . sectionType !== SectionsType . SubmissionForm ) {
7784 sectionData = ( isNotUndefined ( action . payload . sections ) && isNotUndefined ( action . payload . sections [ sectionId ] ) ) ? action . payload . sections [ sectionId ] : Object . create ( null ) ;
@@ -434,8 +441,13 @@ export class SubmissionObjectEffects {
434441 && isEmpty ( sections [ sherpaPoliciesSectionId ] ) ) {
435442 mappedActions . push ( new UpdateSectionDataAction ( submissionId , sherpaPoliciesSectionId , null , [ ] , [ ] ) ) ;
436443 }
437- } ) ;
438444
445+ // When Duplicate Detection step is enabled, add it only if there are duplicates
446+ const duplicatesSectionId = findKey ( currentState . sections , ( section ) => section . sectionType === SectionsType . Duplicates ) ;
447+ if ( isNotUndefined ( duplicatesSectionId ) && isNotEmpty ( currentState . sections [ duplicatesSectionId ] ?. data ) && isEmpty ( sections [ duplicatesSectionId ] ) ) {
448+ mappedActions . push ( new UpdateSectionDataAction ( submissionId , duplicatesSectionId , null , [ ] , [ ] ) ) ;
449+ }
450+ } ) ;
439451 }
440452 return mappedActions ;
441453 }
0 commit comments