mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-18 07:23:03 +00:00
Merge remote-tracking branch 'origin/main' into more-eslint
This commit is contained in:
@@ -5,10 +5,7 @@ import { SubmissionDefinitionsModel } from '../../core/config/models/config-subm
|
||||
import { Item } from '../../core/shared/item.model';
|
||||
import { SubmissionObject } from '../../core/submission/models/submission-object.model';
|
||||
import { WorkspaceitemSectionUploadFileObject } from '../../core/submission/models/workspaceitem-section-upload-file.model';
|
||||
import {
|
||||
WorkspaceitemSectionDataType,
|
||||
WorkspaceitemSectionsObject,
|
||||
} from '../../core/submission/models/workspaceitem-sections.model';
|
||||
import { WorkspaceitemSectionDataType, WorkspaceitemSectionsObject } from '../../core/submission/models/workspaceitem-sections.model';
|
||||
import { type } from '../../shared/ngrx/type';
|
||||
import { SectionsType } from '../sections/sections-type';
|
||||
import { SectionVisibility } from './section-visibility.model';
|
||||
@@ -56,9 +53,13 @@ export const SubmissionObjectActionTypes = {
|
||||
DISCARD_SUBMISSION_SUCCESS: type('dspace/submission/DISCARD_SUBMISSION_SUCCESS'),
|
||||
DISCARD_SUBMISSION_ERROR: type('dspace/submission/DISCARD_SUBMISSION_ERROR'),
|
||||
|
||||
// Clearing active section types
|
||||
CLEAN_DUPLICATE_DETECTION: type('dspace/submission/CLEAN_DUPLICATE_DETECTION'),
|
||||
|
||||
// Upload file types
|
||||
NEW_FILE: type('dspace/submission/NEW_FILE'),
|
||||
EDIT_FILE_DATA: type('dspace/submission/EDIT_FILE_DATA'),
|
||||
EDIT_FILE_PRIMARY_BITSTREAM_DATA: type('dspace/submission/EDIT_FILE_PRIMARY_BITSTREAM_DATA'),
|
||||
DELETE_FILE: type('dspace/submission/DELETE_FILE'),
|
||||
|
||||
// Errors
|
||||
@@ -239,6 +240,25 @@ export class UpdateSectionDataAction implements Action {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes data and makes 'detect-duplicate' section not visible.
|
||||
*/
|
||||
export class CleanDuplicateDetectionAction implements Action {
|
||||
type = SubmissionObjectActionTypes.CLEAN_DUPLICATE_DETECTION;
|
||||
payload: {
|
||||
submissionId: string;
|
||||
};
|
||||
|
||||
/**
|
||||
* creates a new CleanDetectDuplicateAction
|
||||
*
|
||||
* @param submissionId Id of the submission on which perform the action
|
||||
*/
|
||||
constructor(submissionId: string ) {
|
||||
this.payload = { submissionId };
|
||||
}
|
||||
}
|
||||
|
||||
export class UpdateSectionDataSuccessAction implements Action {
|
||||
type = SubmissionObjectActionTypes.UPDATE_SECTION_DATA_SUCCESS;
|
||||
}
|
||||
@@ -760,6 +780,29 @@ export class NewUploadedFileAction implements Action {
|
||||
}
|
||||
}
|
||||
|
||||
export class EditFilePrimaryBitstreamAction implements Action {
|
||||
type = SubmissionObjectActionTypes.EDIT_FILE_PRIMARY_BITSTREAM_DATA;
|
||||
payload: {
|
||||
submissionId: string;
|
||||
sectionId: string;
|
||||
fileId: string | null;
|
||||
};
|
||||
|
||||
/**
|
||||
* Edit a file data
|
||||
*
|
||||
* @param submissionId
|
||||
* the submission's ID
|
||||
* @param sectionId
|
||||
* the section's ID
|
||||
* @param fileId
|
||||
* the file's ID
|
||||
*/
|
||||
constructor(submissionId: string, sectionId: string, fileId: string | null) {
|
||||
this.payload = { submissionId, sectionId, fileId: fileId };
|
||||
}
|
||||
}
|
||||
|
||||
export class EditFileDataAction implements Action {
|
||||
type = SubmissionObjectActionTypes.EDIT_FILE_DATA;
|
||||
payload: {
|
||||
@@ -821,6 +864,7 @@ export type SubmissionObjectAction = DisableSectionAction
|
||||
| InitSubmissionFormAction
|
||||
| ResetSubmissionFormAction
|
||||
| CancelSubmissionFormAction
|
||||
| CleanDuplicateDetectionAction
|
||||
| CompleteInitSubmissionFormAction
|
||||
| ChangeSubmissionCollectionAction
|
||||
| SaveAndDepositSubmissionAction
|
||||
@@ -833,6 +877,7 @@ export type SubmissionObjectAction = DisableSectionAction
|
||||
| SectionStatusChangeAction
|
||||
| NewUploadedFileAction
|
||||
| EditFileDataAction
|
||||
| EditFilePrimaryBitstreamAction
|
||||
| DeleteUploadedFileAction
|
||||
| InertSectionErrorsAction
|
||||
| DeleteSectionErrorsAction
|
||||
|
@@ -1,81 +1,39 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import {
|
||||
Actions,
|
||||
createEffect,
|
||||
ofType,
|
||||
} from '@ngrx/effects';
|
||||
import { Actions, createEffect, ofType } from '@ngrx/effects';
|
||||
import { Store } from '@ngrx/store';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
import findKey from 'lodash/findKey';
|
||||
import isEqual from 'lodash/isEqual';
|
||||
import union from 'lodash/union';
|
||||
import {
|
||||
from as observableFrom,
|
||||
Observable,
|
||||
of as observableOf,
|
||||
} from 'rxjs';
|
||||
import {
|
||||
catchError,
|
||||
filter,
|
||||
map,
|
||||
mergeMap,
|
||||
switchMap,
|
||||
take,
|
||||
tap,
|
||||
withLatestFrom,
|
||||
} from 'rxjs/operators';
|
||||
|
||||
import { RemoteData } from '../../core/data/remote-data';
|
||||
import { Item } from '../../core/shared/item.model';
|
||||
import { getFirstSucceededRemoteDataPayload } from '../../core/shared/operators';
|
||||
import { from as observableFrom, Observable, of as observableOf } from 'rxjs';
|
||||
import { catchError, filter, map, mergeMap, switchMap, take, tap, withLatestFrom } from 'rxjs/operators';
|
||||
import { SubmissionObject } from '../../core/submission/models/submission-object.model';
|
||||
import { WorkflowItem } from '../../core/submission/models/workflowitem.model';
|
||||
import { WorkspaceItem } from '../../core/submission/models/workspaceitem.model';
|
||||
import { WorkspaceitemSectionUploadObject } from '../../core/submission/models/workspaceitem-section-upload.model';
|
||||
import { WorkspaceitemSectionsObject } from '../../core/submission/models/workspaceitem-sections.model';
|
||||
import { WorkspaceItem } from '../../core/submission/models/workspaceitem.model';
|
||||
import { SubmissionJsonPatchOperationsService } from '../../core/submission/submission-json-patch-operations.service';
|
||||
import { SubmissionObjectDataService } from '../../core/submission/submission-object-data.service';
|
||||
import {
|
||||
isEmpty,
|
||||
isNotEmpty,
|
||||
isNotUndefined,
|
||||
} from '../../shared/empty.util';
|
||||
import { FormState } from '../../shared/form/form.reducer';
|
||||
import { isEmpty, isNotEmpty, isNotUndefined } from '../../shared/empty.util';
|
||||
import { NotificationsService } from '../../shared/notifications/notifications.service';
|
||||
import { followLink } from '../../shared/utils/follow-link-config.model';
|
||||
import { SectionsService } from '../sections/sections.service';
|
||||
import { SectionsType } from '../sections/sections-type';
|
||||
import { SectionsService } from '../sections/sections.service';
|
||||
import { SubmissionState } from '../submission.reducers';
|
||||
import { SubmissionService } from '../submission.service';
|
||||
import parseSectionErrorPaths, { SectionErrorPath } from '../utils/parseSectionErrorPaths';
|
||||
import parseSectionErrors from '../utils/parseSectionErrors';
|
||||
import {
|
||||
CompleteInitSubmissionFormAction,
|
||||
DepositSubmissionAction,
|
||||
DepositSubmissionErrorAction,
|
||||
DepositSubmissionSuccessAction,
|
||||
DiscardSubmissionErrorAction,
|
||||
DiscardSubmissionSuccessAction,
|
||||
InitSectionAction,
|
||||
InitSubmissionFormAction,
|
||||
ResetSubmissionFormAction,
|
||||
SaveAndDepositSubmissionAction,
|
||||
SaveForLaterSubmissionFormAction,
|
||||
SaveForLaterSubmissionFormSuccessAction,
|
||||
SaveSubmissionFormAction,
|
||||
SaveSubmissionFormErrorAction,
|
||||
SaveSubmissionFormSuccessAction,
|
||||
SaveSubmissionSectionFormAction,
|
||||
SaveSubmissionSectionFormErrorAction,
|
||||
SaveSubmissionSectionFormSuccessAction,
|
||||
SubmissionObjectAction,
|
||||
SubmissionObjectActionTypes,
|
||||
UpdateSectionDataAction,
|
||||
UpdateSectionDataSuccessAction,
|
||||
} from './submission-objects.actions';
|
||||
import { CleanDuplicateDetectionAction, CompleteInitSubmissionFormAction, DepositSubmissionAction, DepositSubmissionErrorAction, DepositSubmissionSuccessAction, DiscardSubmissionErrorAction, DiscardSubmissionSuccessAction, InitSectionAction, InitSubmissionFormAction, ResetSubmissionFormAction, SaveAndDepositSubmissionAction, SaveForLaterSubmissionFormAction, SaveForLaterSubmissionFormSuccessAction, SaveSubmissionFormAction, SaveSubmissionFormErrorAction, SaveSubmissionFormSuccessAction, SaveSubmissionSectionFormAction, SaveSubmissionSectionFormErrorAction, SaveSubmissionSectionFormSuccessAction, SubmissionObjectAction, SubmissionObjectActionTypes, UpdateSectionDataAction, UpdateSectionDataSuccessAction } from './submission-objects.actions';
|
||||
import { SubmissionObjectEntry } from './submission-objects.reducer';
|
||||
import { SubmissionSectionError } from './submission-section-error.model';
|
||||
import { Item } from '../../core/shared/item.model';
|
||||
import { RemoteData } from '../../core/data/remote-data';
|
||||
import { getFirstSucceededRemoteDataPayload } from '../../core/shared/operators';
|
||||
import { SubmissionObjectDataService } from '../../core/submission/submission-object-data.service';
|
||||
import { followLink } from '../../shared/utils/follow-link-config.model';
|
||||
import parseSectionErrorPaths, { SectionErrorPath } from '../utils/parseSectionErrorPaths';
|
||||
import { FormState } from '../../shared/form/form.reducer';
|
||||
import { SubmissionSectionObject } from './submission-section-object.model';
|
||||
import { SubmissionSectionError } from './submission-section-error.model';
|
||||
import { WorkspaceitemSectionDuplicatesObject } from '../../core/submission/models/workspaceitem-section-duplicates.model';
|
||||
import { environment } from '../../../environments/environment';
|
||||
|
||||
@Injectable()
|
||||
export class SubmissionObjectEffects {
|
||||
@@ -92,7 +50,12 @@ export class SubmissionObjectEffects {
|
||||
const selfLink = sectionDefinition._links.self.href || sectionDefinition._links.self;
|
||||
const sectionId = selfLink.substr(selfLink.lastIndexOf('/') + 1);
|
||||
const config = sectionDefinition._links.config ? (sectionDefinition._links.config.href || sectionDefinition._links.config) : '';
|
||||
const enabled = (sectionDefinition.mandatory) || (isNotEmpty(action.payload.sections) && action.payload.sections.hasOwnProperty(sectionId));
|
||||
// A section is enabled if it is mandatory or contains data in its section payload
|
||||
// except for detect duplicate steps which will be hidden with no data unless overridden in config, even if mandatory
|
||||
const enabled = (sectionDefinition.mandatory && (sectionDefinition.sectionType !== SectionsType.Duplicates))
|
||||
|| (isNotEmpty(action.payload.sections) && action.payload.sections.hasOwnProperty(sectionId)
|
||||
&& (sectionDefinition.sectionType === SectionsType.Duplicates && (alwaysDisplayDuplicates() || isNotEmpty((action.payload.sections[sectionId] as WorkspaceitemSectionDuplicatesObject).potentialDuplicates)))
|
||||
);
|
||||
let sectionData;
|
||||
if (sectionDefinition.sectionType !== SectionsType.SubmissionForm) {
|
||||
sectionData = (isNotUndefined(action.payload.sections) && isNotUndefined(action.payload.sections[sectionId])) ? action.payload.sections[sectionId] : Object.create(null);
|
||||
@@ -455,8 +418,16 @@ export class SubmissionObjectEffects {
|
||||
&& isEmpty(sections[sherpaPoliciesSectionId])) {
|
||||
mappedActions.push(new UpdateSectionDataAction(submissionId, sherpaPoliciesSectionId, null, [], []));
|
||||
}
|
||||
});
|
||||
|
||||
// When Duplicate Detection step is enabled, add it only if there are duplicates in the response section data
|
||||
// or if configuration overrides this behaviour
|
||||
if (!alwaysDisplayDuplicates()) {
|
||||
const duplicatesSectionId = findKey(currentState.sections, (section) => section.sectionType === SectionsType.Duplicates);
|
||||
if (isNotUndefined(duplicatesSectionId) && sections.hasOwnProperty(duplicatesSectionId) && isEmpty((sections[duplicatesSectionId] as WorkspaceitemSectionDuplicatesObject).potentialDuplicates)) {
|
||||
mappedActions.push(new CleanDuplicateDetectionAction(submissionId));
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
return mappedActions;
|
||||
}
|
||||
@@ -502,3 +473,7 @@ function filterErrors(sectionForm: FormState, sectionErrors: SubmissionSectionEr
|
||||
});
|
||||
return filteredErrors;
|
||||
}
|
||||
|
||||
function alwaysDisplayDuplicates(): boolean {
|
||||
return (environment.submission.duplicateDetection.alwaysShowSection);
|
||||
}
|
||||
|
@@ -1,49 +1,8 @@
|
||||
import { Item } from '../../core/shared/item.model';
|
||||
import {
|
||||
mockSubmissionCollectionId,
|
||||
mockSubmissionDefinitionResponse,
|
||||
mockSubmissionId,
|
||||
mockSubmissionSelfUrl,
|
||||
mockSubmissionState,
|
||||
} from '../../shared/mocks/submission.mock';
|
||||
import { mockSubmissionCollectionId, mockSubmissionDefinitionResponse, mockSubmissionId, mockSubmissionSelfUrl, mockSubmissionState } from '../../shared/mocks/submission.mock';
|
||||
import { SectionsType } from '../sections/sections-type';
|
||||
import {
|
||||
CancelSubmissionFormAction,
|
||||
ChangeSubmissionCollectionAction,
|
||||
CompleteInitSubmissionFormAction,
|
||||
DeleteSectionErrorsAction,
|
||||
DeleteUploadedFileAction,
|
||||
DepositSubmissionAction,
|
||||
DepositSubmissionErrorAction,
|
||||
DepositSubmissionSuccessAction,
|
||||
DisableSectionAction,
|
||||
DiscardSubmissionAction,
|
||||
DiscardSubmissionSuccessAction,
|
||||
EditFileDataAction,
|
||||
EnableSectionAction,
|
||||
InertSectionErrorsAction,
|
||||
InitSectionAction,
|
||||
InitSubmissionFormAction,
|
||||
NewUploadedFileAction,
|
||||
RemoveSectionErrorsAction,
|
||||
ResetSubmissionFormAction,
|
||||
SaveAndDepositSubmissionAction,
|
||||
SaveForLaterSubmissionFormAction,
|
||||
SaveForLaterSubmissionFormErrorAction,
|
||||
SaveSubmissionFormAction,
|
||||
SaveSubmissionFormErrorAction,
|
||||
SaveSubmissionFormSuccessAction,
|
||||
SaveSubmissionSectionFormAction,
|
||||
SaveSubmissionSectionFormErrorAction,
|
||||
SaveSubmissionSectionFormSuccessAction,
|
||||
SectionStatusChangeAction,
|
||||
SubmissionObjectAction,
|
||||
UpdateSectionDataAction,
|
||||
} from './submission-objects.actions';
|
||||
import {
|
||||
submissionObjectReducer,
|
||||
SubmissionObjectState,
|
||||
} from './submission-objects.reducer';
|
||||
import { CancelSubmissionFormAction, ChangeSubmissionCollectionAction, CleanDuplicateDetectionAction, CompleteInitSubmissionFormAction, DeleteSectionErrorsAction, DeleteUploadedFileAction, DepositSubmissionAction, DepositSubmissionErrorAction, DepositSubmissionSuccessAction, DisableSectionAction, DiscardSubmissionAction, DiscardSubmissionSuccessAction, EditFileDataAction, EnableSectionAction, InertSectionErrorsAction, InitSectionAction, InitSubmissionFormAction, NewUploadedFileAction, RemoveSectionErrorsAction, ResetSubmissionFormAction, SaveAndDepositSubmissionAction, SaveForLaterSubmissionFormAction, SaveForLaterSubmissionFormErrorAction, SaveSubmissionFormAction, SaveSubmissionFormErrorAction, SaveSubmissionFormSuccessAction, SaveSubmissionSectionFormAction, SaveSubmissionSectionFormErrorAction, SaveSubmissionSectionFormSuccessAction, SectionStatusChangeAction, SubmissionObjectAction, UpdateSectionDataAction } from './submission-objects.actions';
|
||||
import { submissionObjectReducer, SubmissionObjectState } from './submission-objects.reducer';
|
||||
|
||||
describe('submissionReducer test suite', () => {
|
||||
|
||||
@@ -276,7 +235,7 @@ describe('submissionReducer test suite', () => {
|
||||
expect(newState[826].sections.traditionalpagetwo.enabled).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should enable submission section properly', () => {
|
||||
it('should disable submission section properly', () => {
|
||||
|
||||
let action: SubmissionObjectAction = new EnableSectionAction(submissionId, 'traditionalpagetwo');
|
||||
let newState = submissionObjectReducer(initState, action);
|
||||
@@ -647,4 +606,20 @@ describe('submissionReducer test suite', () => {
|
||||
expect(newState[826].sections.upload.data).toEqual(expectedState);
|
||||
});
|
||||
|
||||
it('should enable duplicates section properly', () => {
|
||||
|
||||
let action: SubmissionObjectAction = new EnableSectionAction(submissionId, 'duplicates');
|
||||
let newState = submissionObjectReducer(initState, action);
|
||||
|
||||
expect(newState[826].sections.duplicates.enabled).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should clean duplicates section properly', () => {
|
||||
|
||||
let action = new CleanDuplicateDetectionAction(submissionId);
|
||||
let newState = submissionObjectReducer(initState, action);
|
||||
|
||||
expect(newState[826].sections.duplicates.enabled).toBeFalsy();
|
||||
});
|
||||
|
||||
});
|
||||
|
@@ -1,50 +1,13 @@
|
||||
import { hasValue, isEmpty, isNotEmpty, isNotNull, isNull, isUndefined } from '../../shared/empty.util';
|
||||
import differenceWith from 'lodash/differenceWith';
|
||||
import findKey from 'lodash/findKey';
|
||||
import isEqual from 'lodash/isEqual';
|
||||
import uniqWith from 'lodash/uniqWith';
|
||||
|
||||
import { WorkspaceitemSectionUploadObject } from '../../core/submission/models/workspaceitem-section-upload.model';
|
||||
import {
|
||||
hasValue,
|
||||
isEmpty,
|
||||
isNotEmpty,
|
||||
isNotNull,
|
||||
isUndefined,
|
||||
} from '../../shared/empty.util';
|
||||
import {
|
||||
ChangeSubmissionCollectionAction,
|
||||
CompleteInitSubmissionFormAction,
|
||||
DeleteSectionErrorsAction,
|
||||
DeleteUploadedFileAction,
|
||||
DepositSubmissionAction,
|
||||
DepositSubmissionErrorAction,
|
||||
DepositSubmissionSuccessAction,
|
||||
DisableSectionAction,
|
||||
EditFileDataAction,
|
||||
EnableSectionAction,
|
||||
InertSectionErrorsAction,
|
||||
InitSectionAction,
|
||||
InitSubmissionFormAction,
|
||||
NewUploadedFileAction,
|
||||
RemoveSectionErrorsAction,
|
||||
ResetSubmissionFormAction,
|
||||
SaveAndDepositSubmissionAction,
|
||||
SaveForLaterSubmissionFormAction,
|
||||
SaveForLaterSubmissionFormErrorAction,
|
||||
SaveForLaterSubmissionFormSuccessAction,
|
||||
SaveSubmissionFormAction,
|
||||
SaveSubmissionFormErrorAction,
|
||||
SaveSubmissionFormSuccessAction,
|
||||
SaveSubmissionSectionFormAction,
|
||||
SaveSubmissionSectionFormErrorAction,
|
||||
SaveSubmissionSectionFormSuccessAction,
|
||||
SectionStatusChangeAction,
|
||||
SetActiveSectionAction,
|
||||
SetSectionFormId,
|
||||
SubmissionObjectAction,
|
||||
SubmissionObjectActionTypes,
|
||||
UpdateSectionDataAction,
|
||||
ChangeSubmissionCollectionAction, CleanDuplicateDetectionAction, CompleteInitSubmissionFormAction, DeleteSectionErrorsAction, DeleteUploadedFileAction, DepositSubmissionAction, DepositSubmissionErrorAction, DepositSubmissionSuccessAction, DisableSectionAction, EditFileDataAction, EditFilePrimaryBitstreamAction, EnableSectionAction, InertSectionErrorsAction, InitSectionAction, InitSubmissionFormAction, NewUploadedFileAction, RemoveSectionErrorsAction, ResetSubmissionFormAction, SaveAndDepositSubmissionAction, SaveForLaterSubmissionFormAction, SaveForLaterSubmissionFormErrorAction, SaveForLaterSubmissionFormSuccessAction, SaveSubmissionFormAction, SaveSubmissionFormErrorAction, SaveSubmissionFormSuccessAction, SaveSubmissionSectionFormAction, SaveSubmissionSectionFormErrorAction, SaveSubmissionSectionFormSuccessAction, SectionStatusChangeAction, SetActiveSectionAction, SetSectionFormId, SubmissionObjectAction, SubmissionObjectActionTypes, UpdateSectionDataAction,
|
||||
} from './submission-objects.actions';
|
||||
import { WorkspaceitemSectionUploadObject } from '../../core/submission/models/workspaceitem-section-upload.model';
|
||||
import { SubmissionSectionObject } from './submission-section-object.model';
|
||||
|
||||
/**
|
||||
@@ -209,6 +172,10 @@ export function submissionObjectReducer(state = initialState, action: Submission
|
||||
return newFile(state, action as NewUploadedFileAction);
|
||||
}
|
||||
|
||||
case SubmissionObjectActionTypes.EDIT_FILE_PRIMARY_BITSTREAM_DATA: {
|
||||
return editPrimaryBitstream(state, action as EditFilePrimaryBitstreamAction);
|
||||
}
|
||||
|
||||
case SubmissionObjectActionTypes.EDIT_FILE_DATA: {
|
||||
return editFileData(state, action as EditFileDataAction);
|
||||
}
|
||||
@@ -230,6 +197,10 @@ export function submissionObjectReducer(state = initialState, action: Submission
|
||||
return removeSectionErrors(state, action as RemoveSectionErrorsAction);
|
||||
}
|
||||
|
||||
case SubmissionObjectActionTypes.CLEAN_DUPLICATE_DETECTION: {
|
||||
return cleanDuplicateDetectionSection(state, action as CleanDuplicateDetectionAction);
|
||||
}
|
||||
|
||||
default: {
|
||||
return state;
|
||||
}
|
||||
@@ -741,6 +712,46 @@ function newFile(state: SubmissionObjectState, action: NewUploadedFileAction): S
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Edit primary bitstream.
|
||||
*
|
||||
* @param state
|
||||
* the current state
|
||||
* @param action
|
||||
* an EditFilePrimaryBitstreamAction action
|
||||
* @return SubmissionObjectState
|
||||
* the new state, with the edited file.
|
||||
*/
|
||||
function editPrimaryBitstream(state: SubmissionObjectState, action: EditFilePrimaryBitstreamAction): SubmissionObjectState {
|
||||
const filesData = state[ action.payload.submissionId ].sections[ action.payload.sectionId ].data as WorkspaceitemSectionUploadObject;
|
||||
const { submissionId, sectionId, fileId } = action.payload;
|
||||
|
||||
const fileIndex = findKey(filesData.files, { uuid: fileId });
|
||||
if (isNull(fileIndex)) {
|
||||
return state;
|
||||
}
|
||||
|
||||
const submission = state[submissionId];
|
||||
return {
|
||||
...state,
|
||||
[submissionId]: {
|
||||
...submission,
|
||||
sections: {
|
||||
...submission.sections,
|
||||
[sectionId]: {
|
||||
...submission.sections[sectionId],
|
||||
data: {
|
||||
...submission.sections[sectionId].data as WorkspaceitemSectionUploadObject,
|
||||
primary: fileId
|
||||
}
|
||||
}
|
||||
},
|
||||
isLoading: submission.isLoading,
|
||||
savePending: submission.savePending,
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Edit a file.
|
||||
*
|
||||
@@ -817,3 +828,20 @@ function deleteFile(state: SubmissionObjectState, action: DeleteUploadedFileActi
|
||||
}
|
||||
return state;
|
||||
}
|
||||
|
||||
function cleanDuplicateDetectionSection(state: SubmissionObjectState, action: CleanDuplicateDetectionAction): SubmissionObjectState {
|
||||
if (isNotEmpty(state[ action.payload.submissionId ]) && state[action.payload.submissionId].sections.hasOwnProperty('duplicates')) {
|
||||
return Object.assign({}, state, {
|
||||
[ action.payload.submissionId ]: Object.assign({}, state[ action.payload.submissionId ], {
|
||||
sections: Object.assign({}, state[ action.payload.submissionId ].sections, {
|
||||
[ 'duplicates' ]: Object.assign({}, state[ action.payload.submissionId ].sections.duplicates, {
|
||||
enabled: false,
|
||||
data: { potentialDuplicates: [] }
|
||||
})
|
||||
})
|
||||
})
|
||||
});
|
||||
} else {
|
||||
return state;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user