@@ -43,7 +43,7 @@ function Figure(props) {
4343 < figure className = "figure" >
4444 < FigBody { ...props } >
4545 < FigureLabels labels = { props . labels } >
46- < img src = { props . thumbnail_url } { ...props . listeners } { ...props . attributes } />
46+ < img src = { props . thumbnail_url } { ...props . listeners } { ...props . attributes } aria-selected = { props . isSelected } />
4747 </ FigureLabels >
4848 </ FigBody >
4949 < figcaption >
@@ -71,14 +71,16 @@ function ScrollSpy(props) {
7171
7272
7373const FilesList = memo ( ( props : any ) => {
74- const { structure, setDirty, selectFile, webAudio} = props ;
74+ const { structure, setDirty, selectFile, selectedFileId , webAudio} = props ;
7575
7676 return (
7777 < ul className = "files-browser" > {
7878 structure . files . length === 0 ?
7979 < li className = "status" > { gettext ( "Empty folder" ) } </ li > : (
8080 < > { structure . files . map ( file => (
81- < li key = { file . id } onClick = { ( ) => selectFile ( file ) } > < Figure { ...file } webAudio = { webAudio } /> </ li >
81+ < li key = { file . id } onClick = { ( ) => selectFile ( file ) } >
82+ < Figure { ...file } webAudio = { webAudio } isSelected = { file . id === selectedFileId } />
83+ </ li >
8284 ) ) }
8385 { structure . offset !== null && < ScrollSpy key = { structure . offset } setDirty = { setDirty } /> }
8486 </ >
@@ -189,8 +191,10 @@ const FileSelectDialog = forwardRef((props: any, forwardedRef) => {
189191 }
190192
191193 async function initializeStructure ( ) {
194+ const params = new URLSearchParams ( ) ;
195+ mimeTypes ?. forEach ( type => params . append ( 'mimetypes' , type ) ) ;
192196 setDirty ( false ) ;
193- const response = await fetch ( `${ baseUrl } structure/${ realm } ` ) ;
197+ const response = await fetch ( `${ baseUrl } structure/${ realm } ${ params . size === 0 ? '' : `? ${ params . toString ( ) } ` } ` ) ;
194198 if ( response . ok ) {
195199 setStructure ( await response . json ( ) ) ;
196200 } else {
@@ -244,6 +248,8 @@ const FileSelectDialog = forwardRef((props: any, forwardedRef) => {
244248 } , [ ] ) ;
245249
246250 const selectFolder = useCallback ( folder => {
251+ if ( structure . last_folder === folder . id )
252+ return ;
247253 setCurrentFolderId ( folder . id ) ;
248254 if ( props . selectFolder ) {
249255 props . selectFolder ( folder ) ;
@@ -299,19 +305,20 @@ const FileSelectDialog = forwardRef((props: any, forwardedRef) => {
299305 />
300306 < div className = "browser-body" >
301307 < nav className = "folder-structure" >
302- < ul role = "navigation" >
303- { structure . root_folder && < FolderStructure
308+ < ul role = "navigation" > {
309+ structure . root_folder && < FolderStructure
304310 baseUrl = { baseUrl }
305311 folder = { structure . root_folder }
306312 lastFolderId = { structure . last_folder }
307313 selectFolder = { selectFolder }
314+ selectedFolderId = { props . selectedFolderId }
308315 toggleRecursive = { toggleRecursive }
309316 refreshStructure = { ( ) => setStructure ( { ...structure } ) }
310317 isListed = { structure . recursive ? false : null }
311318 setCurrentFolderId = { setCurrentFolderId }
312319 setCurrentFolderElement = { setCurrentFolderElement }
313- /> }
314- </ ul >
320+ />
321+ } </ ul >
315322 </ nav >
316323 < FileUploader
317324 folderId = { structure . last_folder }
@@ -325,6 +332,7 @@ const FileSelectDialog = forwardRef((props: any, forwardedRef) => {
325332 structure = { structure }
326333 setDirty = { setDirty }
327334 selectFile = { selectFile }
335+ selectedFileId = { props . selectedFileId }
328336 webAudio = { webAudio }
329337 />
330338 } </ FileUploader >
0 commit comments