Skip to content

Commit 19ce014

Browse files
[DSC-2149] port fix for upload files issue
1 parent 02e29eb commit 19ce014

5 files changed

Lines changed: 51 additions & 29 deletions

File tree

src/app/shared/mocks/section-upload.service.mock.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { SubmissionFormsConfigDataService } from '../../core/config/submission-f
55
*/
66
export function getMockSectionUploadService(): SubmissionFormsConfigDataService {
77
return jasmine.createSpyObj('SectionUploadService', {
8+
getUploadedFilesData: jasmine.createSpy('getUploadedFilesData'),
89
getUploadedFileList: jasmine.createSpy('getUploadedFileList'),
910
getFileData: jasmine.createSpy('getFileData'),
1011
getDefaultPolicies: jasmine.createSpy('getDefaultPolicies'),

src/app/shared/mocks/submission.mock.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3674,6 +3674,11 @@ export const mockUploadFiles = [
36743674
}
36753675
];
36763676

3677+
export const mockUploadFilesData = {
3678+
primary: null,
3679+
files: JSON.parse(JSON.stringify(mockUploadFiles)),
3680+
};
3681+
36773682
export const mockFileFormData = {
36783683
metadata: {
36793684
'dc.title': [

src/app/submission/sections/upload/section-upload.component.spec.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import {
2424
mockSubmissionState,
2525
mockUploadConfigResponse,
2626
mockUploadConfigResponseNotRequired,
27-
mockUploadFiles,
27+
mockUploadFiles, mockUploadFilesData,
2828
} from '../../../shared/mocks/submission.mock';
2929
import { SubmissionUploadsConfigDataService } from '../../../core/config/submission-uploads-config-data.service';
3030
import { SectionUploadService } from './section-upload.service';
@@ -162,6 +162,7 @@ describe('SubmissionSectionUploadComponent test suite', () => {
162162
);
163163

164164
bitstreamService.getUploadedFileList.and.returnValue(observableOf([]));
165+
bitstreamService.getUploadedFilesData.and.returnValue(observableOf({ primary: null, files: [] }));
165166
};
166167

167168
TestBed.configureTestingModule({
@@ -232,7 +233,7 @@ describe('SubmissionSectionUploadComponent test suite', () => {
232233
});
233234

234235
it('should init component properly', () => {
235-
236+
bitstreamService.getUploadedFilesData.and.returnValue(observableOf({ primary: null, files: [] }));
236237
submissionServiceStub.getSubmissionObject.and.returnValue(observableOf(submissionState));
237238

238239
collectionDataService.findById.and.returnValue(createSuccessfulRemoteDataObject$(Object.assign(new Collection(), mockCollection, {
@@ -248,8 +249,6 @@ describe('SubmissionSectionUploadComponent test suite', () => {
248249
createSuccessfulRemoteDataObject$(Object.assign(new Group(), mockGroup))
249250
);
250251

251-
bitstreamService.getUploadedFileList.and.returnValue(observableOf([]));
252-
253252
comp.onSectionInit();
254253

255254
const expectedGroupsMap = new Map([
@@ -271,6 +270,7 @@ describe('SubmissionSectionUploadComponent test suite', () => {
271270
});
272271

273272
it('should init file list properly', () => {
273+
bitstreamService.getUploadedFilesData.and.returnValue(observableOf({ primary: null, files: [] }));
274274

275275
submissionServiceStub.getSubmissionObject.and.returnValue(observableOf(submissionState));
276276

@@ -285,7 +285,7 @@ describe('SubmissionSectionUploadComponent test suite', () => {
285285
createSuccessfulRemoteDataObject$(Object.assign(new Group(), mockGroup))
286286
);
287287

288-
bitstreamService.getUploadedFileList.and.returnValue(observableOf(mockUploadFiles));
288+
bitstreamService.getUploadedFilesData.and.returnValue(observableOf(mockUploadFilesData));
289289

290290
comp.onSectionInit();
291291

@@ -308,6 +308,8 @@ describe('SubmissionSectionUploadComponent test suite', () => {
308308
});
309309

310310
it('should properly read the section status when required is true', () => {
311+
bitstreamService.getUploadedFilesData.and.returnValue(observableOf({ primary: null, files: [] }));
312+
311313
submissionServiceStub.getSubmissionObject.and.returnValue(observableOf(submissionState));
312314

313315
sectionsServiceStub.getSectionErrors.and.returnValue(observableOf([]));
@@ -325,7 +327,7 @@ describe('SubmissionSectionUploadComponent test suite', () => {
325327

326328
bitstreamService.getUploadedFileList.and.returnValue(cold('-a-b', {
327329
a: [],
328-
b: mockUploadFiles
330+
b: mockUploadFiles,
329331
}));
330332

331333
comp.onSectionInit();
@@ -341,6 +343,8 @@ describe('SubmissionSectionUploadComponent test suite', () => {
341343
it('should properly read the section status when required is false', () => {
342344
submissionServiceStub.getSubmissionObject.and.returnValue(observableOf(submissionState));
343345

346+
bitstreamService.getUploadedFilesData.and.returnValue(observableOf({ primary: null, files: [] }));
347+
344348
sectionsServiceStub.getSectionErrors.and.returnValue(observableOf([]));
345349

346350
collectionDataService.findById.and.returnValue(createSuccessfulRemoteDataObject$(mockCollection));

src/app/submission/sections/upload/section-upload.component.ts

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import { followLink } from '../../../shared/utils/follow-link-config.model';
2727
import { getFirstSucceededRemoteData } from '../../../core/shared/operators';
2828
import { DSONameService } from '../../../core/breadcrumbs/dso-name.service';
2929
import { SubmissionVisibility } from '../../utils/visibility.util';
30+
import { WorkspaceitemSectionUploadObject } from '../../../core/submission/models/workspaceitem-section-upload.model';
3031

3132
export const POLICY_DEFAULT_NO_LIST = 1; // Banner1
3233
export const POLICY_DEFAULT_WITH_LIST = 2; // Banner2
@@ -197,28 +198,20 @@ export class SubmissionSectionUploadComponent extends SectionModelComponent {
197198
}),
198199

199200
// retrieve submission's bitstreams from state
200-
observableCombineLatest(this.configMetadataForm$,
201-
this.bitstreamService.getUploadedFileList(this.submissionId, this.sectionData.id)).pipe(
202-
filter(([configMetadataForm, fileList]: [SubmissionFormsModel, any[]]) => {
203-
return isNotEmpty(configMetadataForm) && isNotUndefined(fileList);
201+
observableCombineLatest([
202+
this.configMetadataForm$,
203+
this.bitstreamService.getUploadedFilesData(this.submissionId, this.sectionData.id),
204+
]).pipe(
205+
filter(([configMetadataForm, sectionUploadObject]: [SubmissionFormsModel, WorkspaceitemSectionUploadObject]) => {
206+
return isNotEmpty(configMetadataForm) && isNotEmpty(sectionUploadObject);
204207
}),
205-
distinctUntilChanged())
206-
.subscribe(([configMetadataForm, fileList]: [SubmissionFormsModel, any[]]) => {
207-
this.fileList = [];
208-
this.fileIndexes = [];
209-
this.fileNames = [];
210-
this.changeDetectorRef.detectChanges();
211-
if (isNotUndefined(fileList) && fileList.length > 0) {
212-
fileList.forEach((file) => {
213-
this.fileList.push(file);
214-
this.fileIndexes.push(file.uuid);
215-
this.fileNames.push(this.getFileName(configMetadataForm, file));
216-
});
217-
}
218-
219-
this.changeDetectorRef.detectChanges();
220-
}
221-
)
208+
distinctUntilChanged(),
209+
).subscribe(([configMetadataForm, { files }]: [SubmissionFormsModel, WorkspaceitemSectionUploadObject]) => {
210+
this.fileList = files;
211+
this.fileIndexes = this.fileList.map(file => file.uuid);
212+
this.fileNames = Array.from(files, file => this.getFileName(configMetadataForm, file));
213+
this.changeDetectorRef.detectChanges();
214+
}),
222215
);
223216
}
224217

src/app/submission/sections/upload/section-upload.service.ts

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,14 @@ import {
1010
EditFileDataAction,
1111
NewUploadedFileAction
1212
} from '../../objects/submission-objects.actions';
13-
import { submissionUploadedFileFromUuidSelector, submissionUploadedFilesFromIdSelector } from '../../selectors';
13+
import {
14+
submissionSectionDataFromIdSelector,
15+
submissionUploadedFileFromUuidSelector,
16+
submissionUploadedFilesFromIdSelector
17+
} from '../../selectors';
1418
import { isUndefined } from '../../../shared/empty.util';
1519
import { WorkspaceitemSectionUploadFileObject } from '../../../core/submission/models/workspaceitem-section-upload-file.model';
20+
import { WorkspaceitemSectionUploadObject } from '../../../core/submission/models/workspaceitem-section-upload.model';
1621

1722
/**
1823
* A service that provides methods to handle submission's bitstream state.
@@ -26,7 +31,21 @@ export class SectionUploadService {
2631
* @param {Store<SubmissionState>} store
2732
*/
2833
constructor(private store: Store<SubmissionState>) {}
29-
34+
/**
35+
* Return submission's bitstream data from state
36+
*
37+
* @param submissionId
38+
* The submission id
39+
* @param sectionId
40+
* The section id
41+
* @returns {WorkspaceitemSectionUploadObject}
42+
* Returns submission's bitstream data
43+
*/
44+
public getUploadedFilesData(submissionId: string, sectionId: string): Observable<WorkspaceitemSectionUploadObject> {
45+
return this.store.select(submissionSectionDataFromIdSelector(submissionId, sectionId)).pipe(
46+
map((state) => state),
47+
distinctUntilChanged());
48+
}
3049
/**
3150
* Return submission's bitstream list from state
3251
*

0 commit comments

Comments
 (0)