File tree Expand file tree Collapse file tree 7 files changed +42
-18
lines changed
src/app/features/preprints
components/stepper/file-step Expand file tree Collapse file tree 7 files changed +42
-18
lines changed Original file line number Diff line number Diff 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 >
Original file line number Diff line number Diff 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}
Original file line number Diff line number Diff line change @@ -12,6 +12,7 @@ import {
1212 NodesResponseJsonApi ,
1313} from '@osf/shared/models/nodes/nodes-json-api.model' ;
1414import { JsonApiService } from '@osf/shared/services/json-api.service' ;
15+ import { replaceBadEncodedChars } from '@shared/helpers/format-bad-encoding.helper' ;
1516
1617import { PreprintsMapper } from '../mappers' ;
1718import {
@@ -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 ) ;
Original file line number Diff line number Diff line change @@ -90,7 +90,10 @@ export class SetProjectRootFolder {
9090export 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
9699export class FetchLicenses {
Original file line number Diff line number Diff line change @@ -4,6 +4,7 @@ import { FileModel } from '@osf/shared/models/files/file.model';
44import { FileFolderModel } from '@osf/shared/models/files/file-folder.model' ;
55import { LicenseModel } from '@osf/shared/models/license/license.model' ;
66import { AsyncStateModel } from '@osf/shared/models/store/async-state.model' ;
7+ import { AsyncStateWithTotalCount } from '@osf/shared/models/store/async-state-with-total-count.model' ;
78
89import { PreprintFileSource } from '../../enums' ;
910import { 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 : [ ] ,
Original file line number Diff line number Diff 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 ;
Original file line number Diff line number Diff 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 ) ;
You can’t perform that action at this time.
0 commit comments