@@ -18,7 +18,7 @@ import {useAudioSettings, useCookie, useSessionStorage} from '../common/Storage'
1818import FileUploader from '../common/FileUploader' ;
1919import FinderSettings from './FinderSettings' ;
2020import FolderTabs from './FolderTabs' ;
21- import MenuBar from './MenuBar' ;
21+ import MenuBar , { VERBOSE_HTTP_ERROR_CODES } from './MenuBar' ;
2222import SelectableArea from './SelectableArea' ;
2323import InodeList from './InodeList' ;
2424import DraggedInodes from './DraggedInodes' ;
@@ -38,7 +38,7 @@ export default function FolderAdmin() {
3838 const menuBarRef = useRef ( null ) ;
3939 const folderTabsRef = useRef ( null ) ;
4040 const uploaderRef = useRef ( null ) ;
41- const columnRefs = Object . fromEntries ( settings . ancestors . map ( id => [ id , useRef ( null ) ] ) ) ;
41+ const columnRefs = Object . fromEntries ( settings . ancestors . map ( ancestor => [ ancestor . id , useRef ( null ) ] ) ) ;
4242 const overlayRef = useRef ( null ) ;
4343 const downloadLinkRef = useRef ( null ) ;
4444 const [ currentFolderId , setCurrentFolderId ] = useState ( settings . folder_id ) ;
@@ -267,9 +267,9 @@ export default function FolderAdmin() {
267267 folderTabsRef . current . setFavoriteFolders ( body . favorite_folders ) ;
268268 }
269269 if ( sourceFolderId !== targetFolderId ) {
270- inodes = inodes . filter ( inode => ! inode . dragged ) ;
270+ inodes = inodes . filter ( inode => ! ( inode . can_change && inode . dragged ) ) ;
271271 }
272- } else if ( response . status === 409 ) {
272+ } else if ( VERBOSE_HTTP_ERROR_CODES . has ( response . status ) ) {
273273 alert ( await response . text ( ) ) ;
274274 } else {
275275 console . error ( response ) ;
@@ -306,6 +306,7 @@ export default function FolderAdmin() {
306306 < InodeList
307307 ref = { columnRefs [ settings . folder_id ] }
308308 folderId = { settings . folder_id }
309+ sortingDisabled = { true }
309310 setCurrentFolder = { setCurrentFolder }
310311 listRef = { columnRefs [ settings . folder_id ] }
311312 menuBarRef = { menuBarRef }
@@ -334,35 +335,37 @@ export default function FolderAdmin() {
334335 }
335336 incomplete = ancestors . length < settings . ancestors . length ;
336337 }
337- let previousFolderId = null ;
338- return ancestors . map ( folderId => {
338+ let previousAncestorId = null ;
339+ return ancestors . map ( ancestor => {
339340 const snippet = (
340341 < FileUploader
341- key = { folderId }
342- ref = { folderId === settings . folder_id ? uploaderRef : null }
343- folderId = { folderId }
342+ key = { ancestor . id }
343+ ref = { ancestor . id === settings . folder_id ? uploaderRef : null }
344+ folderId = { ancestor . id }
345+ disabled = { ! ancestor . can_change }
344346 handleUpload = { handleUpload }
345347 settings = { settings }
346348 multiple
347349 >
348350 < SelectableArea
349- folderId = { folderId }
351+ folderId = { ancestor . id }
350352 deselectAll = { deselectAll }
351- columnRef = { columnRefs [ folderId ] }
353+ columnRef = { columnRefs [ ancestor . id ] }
352354 dragging = { dragging }
353355 >
354356 < DroppableArea
355- id = { `column:${ folderId } ` }
357+ id = { `column:${ ancestor . id } ` }
356358 className = "column-droppable"
357359 currentId = { `column:${ currentFolderId } ` }
358360 dragging = { dragging }
359361 >
360362 < InodeList
361- ref = { columnRefs [ folderId ] }
362- folderId = { folderId }
363- previousFolderId = { previousFolderId }
363+ ref = { columnRefs [ ancestor . id ] }
364+ folderId = { ancestor . id }
365+ ancestorFolderId = { previousAncestorId }
366+ sortingDisabled = { ! ancestor . can_change }
364367 setCurrentFolder = { setCurrentFolder }
365- listRef = { columnRefs [ folderId ] }
368+ listRef = { columnRefs [ ancestor . id ] }
366369 menuBarRef = { menuBarRef }
367370 folderTabsRef = { folderTabsRef }
368371 layout = { layout }
@@ -376,7 +379,7 @@ export default function FolderAdmin() {
376379 </ SelectableArea >
377380 </ FileUploader >
378381 ) ;
379- previousFolderId = folderId ;
382+ previousAncestorId = ancestor . id ;
380383 return snippet ;
381384 } ) ;
382385 }
0 commit comments