Skip to content

Commit d11310a

Browse files
authored
[ENG-9770] Expand File Picker for Preprints Submissions (#806)
- Ticket: https://openscience.atlassian.net/browse/ENG-9770 - Feature flag: n/a ## Purpose When submitting a preprint, users select their manuscript file through the preprint upload step. However, the file picker currently displays only the first 10 files stored in the associated OSF project. This prevents users from accessing additional files that may contain the correct manuscript or supplemental materials, limiting their ability to complete the submission. ## Summary of Changes Expand File Picker for Preprints Submissions
1 parent 44a8f3f commit d11310a

File tree

7 files changed

+42
-18
lines changed

7 files changed

+42
-18
lines changed

src/app/features/preprints/components/stepper/file-step/file-step.component.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,13 +92,15 @@ <h2>{{ 'preprints.preprintStepper.file.title' | translate }}</h2>
9292
<osf-files-tree
9393
[currentFolder]="currentFolder()!"
9494
[files]="projectFiles()"
95-
[totalCount]="projectFiles().length"
95+
[totalCount]="filesTotalCount()"
9696
[storage]="null"
9797
[selectionMode]="null"
9898
[isLoading]="areProjectFilesLoading() || isCurrentFolderLoading()"
9999
[resourceId]="selectedProjectId()!"
100+
[scrollHeight]="'500px'"
100101
(entryFileClicked)="selectProjectFile($event)"
101102
(setCurrentFolder)="setCurrentFolder($event)"
103+
(loadFiles)="onLoadFiles($event)"
102104
/>
103105
}
104106
</section>

src/app/features/preprints/components/stepper/file-step/file-step.component.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ export class FileStepComponent implements OnInit {
9999
areAvailableProjectsLoading = select(PreprintStepperSelectors.areAvailableProjectsLoading);
100100

101101
projectFiles = select(PreprintStepperSelectors.getProjectFiles);
102+
filesTotalCount = select(PreprintStepperSelectors.getFilesTotalCount);
102103
areProjectFilesLoading = select(PreprintStepperSelectors.areProjectFilesLoading);
103104

104105
currentFolder = select(PreprintStepperSelectors.getCurrentFolder);
@@ -190,7 +191,7 @@ export class FileStepComponent implements OnInit {
190191
switchMap(() => {
191192
const filesLink = this.currentFolder()?.links.filesLink;
192193
if (filesLink) {
193-
return this.actions.getProjectFilesByLink(filesLink);
194+
return this.actions.getProjectFilesByLink(filesLink, 1);
194195
} else {
195196
return EMPTY;
196197
}
@@ -232,6 +233,10 @@ export class FileStepComponent implements OnInit {
232233
return;
233234
}
234235
this.actions.setCurrentFolder(folder);
235-
this.actions.getProjectFilesByLink(folder.links.filesLink);
236+
this.actions.getProjectFilesByLink(folder.links.filesLink, 1);
237+
}
238+
239+
onLoadFiles(event: { link: string; page: number }) {
240+
this.actions.getProjectFilesByLink(event.link, event.page);
236241
}
237242
}

src/app/features/preprints/services/preprints-projects.service.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
NodesResponseJsonApi,
1313
} from '@osf/shared/models/nodes/nodes-json-api.model';
1414
import { JsonApiService } from '@osf/shared/services/json-api.service';
15+
import { replaceBadEncodedChars } from '@shared/helpers/format-bad-encoding.helper';
1516

1617
import { PreprintsMapper } from '../mappers';
1718
import {
@@ -44,7 +45,7 @@ export class PreprintsProjectsService {
4445
map((response) => {
4546
return response.data.map((item) => ({
4647
id: item.id,
47-
name: item.attributes.title,
48+
name: replaceBadEncodedChars(item.attributes.title),
4849
}));
4950
})
5051
);
@@ -55,7 +56,7 @@ export class PreprintsProjectsService {
5556
map((response) => {
5657
return {
5758
id: response.data.id,
58-
name: response.data.attributes.title,
59+
name: replaceBadEncodedChars(response.data.attributes.title),
5960
};
6061
})
6162
);

src/app/features/preprints/store/preprint-stepper/preprint-stepper.actions.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,10 @@ export class SetProjectRootFolder {
9090
export class FetchProjectFilesByLink {
9191
static readonly type = '[Preprint Stepper] Get Project Files By Link';
9292

93-
constructor(public filesLink: string) {}
93+
constructor(
94+
public filesLink: string,
95+
public page: number
96+
) {}
9497
}
9598

9699
export class FetchLicenses {

src/app/features/preprints/store/preprint-stepper/preprint-stepper.model.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { FileModel } from '@osf/shared/models/files/file.model';
44
import { FileFolderModel } from '@osf/shared/models/files/file-folder.model';
55
import { LicenseModel } from '@osf/shared/models/license/license.model';
66
import { AsyncStateModel } from '@osf/shared/models/store/async-state.model';
7+
import { AsyncStateWithTotalCount } from '@osf/shared/models/store/async-state-with-total-count.model';
78

89
import { PreprintFileSource } from '../../enums';
910
import { PreprintFilesLinks, PreprintModel } from '../../models';
@@ -15,7 +16,7 @@ export interface PreprintStepperStateModel {
1516
preprintFilesLinks: AsyncStateModel<PreprintFilesLinks | null>;
1617
preprintFile: AsyncStateModel<FileModel | null>;
1718
availableProjects: AsyncStateModel<IdNameModel[]>;
18-
projectFiles: AsyncStateModel<FileModel[]>;
19+
projectFiles: AsyncStateWithTotalCount<FileModel[]>;
1920
licenses: AsyncStateModel<LicenseModel[]>;
2021
currentFolder: AsyncStateModel<FileFolderModel | null>;
2122
preprintProject: AsyncStateModel<IdNameModel | null>;
@@ -51,6 +52,7 @@ export const DEFAULT_PREPRINT_STEPPER_STATE: PreprintStepperStateModel = {
5152
data: [],
5253
isLoading: false,
5354
error: null,
55+
totalCount: 0,
5456
},
5557
licenses: {
5658
data: [],

src/app/features/preprints/store/preprint-stepper/preprint-stepper.selectors.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@ export class PreprintStepperSelectors {
5353
return state.projectFiles.data;
5454
}
5555

56+
@Selector([PreprintStepperState])
57+
static getFilesTotalCount(state: PreprintStepperStateModel) {
58+
return state.projectFiles.totalCount;
59+
}
60+
5661
@Selector([PreprintStepperState])
5762
static areProjectFilesLoading(state: PreprintStepperStateModel) {
5863
return state.projectFiles.isLoading;

src/app/features/preprints/store/preprint-stepper/preprint-stepper.state.ts

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -255,18 +255,24 @@ export class PreprintStepperState {
255255

256256
@Action(FetchProjectFilesByLink)
257257
getProjectFilesByLink(ctx: StateContext<PreprintStepperStateModel>, action: FetchProjectFilesByLink) {
258-
ctx.setState(patch({ projectFiles: patch({ isLoading: true }) }));
259-
260-
return this.fileService.getFilesWithoutFiltering(action.filesLink, 1).pipe(
258+
const state = ctx.getState();
259+
ctx.patchState({
260+
projectFiles: {
261+
...state.projectFiles,
262+
isLoading: true,
263+
},
264+
});
265+
return this.fileService.getFilesWithoutFiltering(action.filesLink, action.page).pipe(
261266
tap((response) => {
262-
ctx.setState(
263-
patch({
264-
projectFiles: patch({
265-
data: response.data,
266-
isLoading: false,
267-
}),
268-
})
269-
);
267+
const newData = action.page === 1 ? response.data : [...(state.projectFiles.data ?? []), ...response.data];
268+
ctx.patchState({
269+
projectFiles: {
270+
data: newData,
271+
isLoading: false,
272+
totalCount: response.totalCount,
273+
error: null,
274+
},
275+
});
270276
}),
271277
catchError((error) => handleSectionError(ctx, 'projectFiles', error))
272278
);

0 commit comments

Comments
 (0)