@@ -64,13 +64,18 @@ def _get_realm(self, request, slug):
6464
6565 def structure (self , request , slug ):
6666 realm = self ._get_realm (request , slug )
67- root_folder = FolderModel .objects .get_root_folder (realm )
68- root_folder_id = str (root_folder .id )
67+ root_folder_id = str (realm .root_folder .id )
6968 request .session .setdefault ('finder.open_folders' , [])
7069 request .session .setdefault ('finder.last_folder' , root_folder_id )
71- if is_open := root_folder .subfolders .exists ():
70+ last_folder_id = request .session ['finder.last_folder' ]
71+ if is_open := realm .root_folder .subfolders .exists ():
7272 # direct children of the root folder are open regardless of the `open_folders` session
73- children = self ._get_children (request .session ['finder.open_folders' ], root_folder )
73+ # in addition to that, also open all ancestors of the last opened folder
74+ open_folders = set (request .session ['finder.open_folders' ])
75+ open_folders .update (
76+ map (str , FolderModel .objects .get (id = last_folder_id ).ancestors .values_list ('id' , flat = True ))
77+ )
78+ children = self ._get_children (open_folders , realm .root_folder )
7479 else :
7580 children = None
7681 return {
@@ -172,11 +177,13 @@ def search(self, request, folder_id):
172177 offset = int (request .GET .get ('offset' , 0 ))
173178 starting_folder = FolderModel .objects .get (id = folder_id )
174179 search_realm = request .COOKIES .get ('django-finder-search-realm' )
175- if search_realm == 'everywhere' :
176- starting_folder = starting_folder .ancestors [- 1 ]
177180 if isinstance (starting_folder .descendants , QuerySet ):
181+ if search_realm == 'everywhere' :
182+ starting_folder = starting_folder .ancestors .last ()
178183 parent_ids = Subquery (starting_folder .descendants .values ('id' ))
179- else :
184+ else : # django-cte not installed (slow)
185+ if search_realm == 'everywhere' :
186+ starting_folder = starting_folder .ancestors [- 1 ]
180187 parent_ids = [descendant .id for descendant in starting_folder .descendants ]
181188
182189 lookup = {
0 commit comments