@@ -7,6 +7,7 @@ import React, {
77 useRef ,
88 useState ,
99} from 'react' ;
10+ import { InView } from 'react-intersection-observer' ;
1011import { Tooltip } from 'react-tooltip' ;
1112import FigureLabels from '../common/FigureLabels' ;
1213import FileUploader from '../common/FileUploader' ;
@@ -50,25 +51,40 @@ function Figure(props) {
5051
5152
5253const FilesList = memo ( ( props : any ) => {
53- const { files, selectFile} = props ;
54+ const { files, numFiles, selectFile} = props ;
55+ const [ { offset, limit} , setOffset ] = useState ( { offset : 0 , limit : 10 } ) ;
5456
55- console . log ( 'FolderList' , files ) ;
57+ console . log ( 'FolderList' , numFiles , files ) ;
58+
59+ function loadMore ( inView , entry ) {
60+ if ( inView ) {
61+ console . log ( 'load more:' , entry . target ) ;
62+ }
63+ }
5664
5765 return (
5866 < ul className = "files-browser" > {
5967 files . length === 0 ?
60- < li className = "status" > { gettext ( "Empty folder" ) } </ li > :
61- files . map ( file => (
68+ < li className = "status" > { gettext ( "Empty folder" ) } </ li > : (
69+ < > { files . map ( file => (
6270 < li key = { file . id } onClick = { ( ) => selectFile ( file ) } > < Figure { ...file } /> </ li >
63- ) ) }
64- </ ul >
71+ ) ) }
72+ { numFiles > files . length && < InView as = "li" onChange = { loadMore } /> }
73+ </ >
74+ ) } </ ul >
6575 ) ;
6676} ) ;
6777
6878
6979export default function FileSelectDialog ( props ) {
7080 const { realm, baseUrl, csrfToken, selectFile} = props ;
71- const [ structure , setStructure ] = useState ( { root_folder : null , last_folder : null , files : null , labels : [ ] } ) ;
81+ const [ structure , setStructure ] = useState ( {
82+ root_folder : null ,
83+ last_folder : null ,
84+ files : null ,
85+ num_files : 0 ,
86+ labels : [ ] ,
87+ } ) ;
7288 const [ uploadedFile , setUploadedFile ] = useState ( null ) ;
7389 const ref = useRef ( null ) ;
7490 const uploaderRef = useRef ( null ) ;
@@ -115,6 +131,7 @@ export default function FileSelectDialog(props) {
115131 root_folder : structure . root_folder ,
116132 last_folder : folderId ,
117133 files : null ,
134+ num_files : 0 ,
118135 labels : structure . labels ,
119136 } ;
120137 const response = await fetch ( fetchUrl ) ;
@@ -170,7 +187,7 @@ export default function FileSelectDialog(props) {
170187 > {
171188 structure . files === null ?
172189 < div className = "status" > { gettext ( "Loading files…" ) } </ div > :
173- < FilesList files = { structure . files } selectFile = { selectFile } />
190+ < FilesList files = { structure . files } numFiles = { structure . num_files } selectFile = { selectFile } />
174191 } </ FileUploader >
175192 </ div >
176193 </ > }
0 commit comments