[CST-12043] feature: add primary bitstream switch

This commit is contained in:
Vlad Nouski
2023-10-20 16:07:31 +02:00
parent a55eb97a6a
commit ffdeca69f4
13 changed files with 303 additions and 77 deletions

View File

@@ -59,6 +59,7 @@ export const SubmissionObjectActionTypes = {
// 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
@@ -760,6 +761,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;
};
/**
* 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) {
this.payload = { submissionId, sectionId, fileId: fileId };
}
}
export class EditFileDataAction implements Action {
type = SubmissionObjectActionTypes.EDIT_FILE_DATA;
payload: {
@@ -833,6 +857,7 @@ export type SubmissionObjectAction = DisableSectionAction
| SectionStatusChangeAction
| NewUploadedFileAction
| EditFileDataAction
| EditFilePrimaryBitstreamAction
| DeleteUploadedFileAction
| InertSectionErrorsAction
| DeleteSectionErrorsAction

View File

@@ -1,4 +1,4 @@
import { hasValue, isEmpty, isNotEmpty, isNotNull, isUndefined } from '../../shared/empty.util';
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';
@@ -14,6 +14,7 @@ import {
DepositSubmissionSuccessAction,
DisableSectionAction,
EditFileDataAction,
EditFilePrimaryBitstreamAction,
EnableSectionAction,
InertSectionErrorsAction,
InitSectionAction,
@@ -203,6 +204,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);
}
@@ -735,6 +740,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.
*