@@ -30,15 +30,34 @@ type DataroomFolderWithDocuments = DataroomFolder & {
3030 } [ ] ;
3131} ;
3232
33+ type FolderPath = Set < string > | null
34+
35+ function findFolderPath ( folder : DataroomFolderWithDocuments , folderId : string , currentPath : Set < string > = new Set < string > ( ) ) :FolderPath {
36+ if ( folder . id === folderId ) {
37+ return currentPath . add ( folder . id ) ;
38+ }
39+
40+ for ( const child of folder . childFolders ) {
41+ const path = findFolderPath ( child , folderId , currentPath . add ( folder . id ) ) ;
42+ if ( path ) {
43+ return path ;
44+ }
45+ }
46+
47+ return null ;
48+ }
49+
3350const FolderComponent = memo (
3451 ( {
3552 folder,
3653 folderId,
3754 setFolderId,
55+ folderPath
3856 } : {
3957 folder : DataroomFolderWithDocuments ;
4058 folderId : string | null ;
4159 setFolderId : React . Dispatch < React . SetStateAction < string | null > > ;
60+ folderPath : Set < string > | null ;
4261 } ) => {
4362 const router = useRouter ( ) ;
4463
@@ -64,13 +83,14 @@ const FolderComponent = memo(
6483 folder = { childFolder }
6584 folderId = { folderId }
6685 setFolderId = { setFolderId }
86+ folderPath = { folderPath }
6787 />
6888 ) ) ,
6989 [ folder . childFolders , folderId , setFolderId ] ,
7090 ) ;
7191
7292 const isActive = folder . id === folderId ;
73- const isChildActive = folder . childFolders . some (
93+ const isChildActive = folderPath ?. has ( folder . id ) || folder . childFolders . some (
7494 ( childFolder ) => childFolder . id === folderId ,
7595 ) ;
7696
@@ -116,6 +136,21 @@ const SidebarFolders = ({
116136 return [ ] ;
117137 } , [ folders , documents ] ) ;
118138
139+ const folderPath = useMemo ( ( ) => {
140+ if ( ! folderId ) {
141+ return null ;
142+ }
143+
144+ for ( let i = 0 ; i < nestedFolders . length ; i ++ ) {
145+ const path = findFolderPath ( nestedFolders [ i ] , folderId ) ;
146+ if ( path ) {
147+ return path ;
148+ }
149+ }
150+
151+ return null ;
152+ } , [ folders , documents , folderId ] )
153+
119154 return (
120155 < FileTree >
121156 { nestedFolders . map ( ( folder ) => (
@@ -124,6 +159,7 @@ const SidebarFolders = ({
124159 folder = { folder }
125160 folderId = { folderId }
126161 setFolderId = { setFolderId }
162+ folderPath = { folderPath }
127163 />
128164 ) ) }
129165 </ FileTree >
0 commit comments