mirror of
				https://github.com/immich-app/immich.git
				synced 2025-10-31 18:47:09 -04:00 
			
		
		
		
	* very rough prototype for folder navigation without assets * fix: refactored data model and tried to implement asset loading * fix: openapi generator shadowing query param in /view/folder * add simple alphanumeric sorting for folders * basic asset viewing in folders * rudimentary switch sorting order * fixed reactivity when toggling sort order * Fixed trailing comma * Fixed bad merge conflict resolution * Regenerated open-api * Added rudimentary breadcrumbs * Fixed linting problems * feat: cleanup --------- Co-authored-by: Alex <alex.tran1502@gmail.com> Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
		
			
				
	
	
		
			63 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| import 'package:hooks_riverpod/hooks_riverpod.dart';
 | |
| import 'package:immich_mobile/constants/enums.dart';
 | |
| import 'package:immich_mobile/models/folder/root_folder.model.dart';
 | |
| import 'package:immich_mobile/services/folder.service.dart';
 | |
| import 'package:immich_mobile/widgets/asset_grid/asset_grid_data_structure.dart';
 | |
| import 'package:logging/logging.dart';
 | |
| 
 | |
| class FolderStructureNotifier extends StateNotifier<AsyncValue<RootFolder>> {
 | |
|   final FolderService _folderService;
 | |
|   final Logger _log = Logger("FolderStructureNotifier");
 | |
| 
 | |
|   FolderStructureNotifier(this._folderService) : super(const AsyncLoading());
 | |
| 
 | |
|   Future<void> fetchFolders(SortOrder order) async {
 | |
|     try {
 | |
|       final folders = await _folderService.getFolderStructure(order);
 | |
|       state = AsyncData(folders);
 | |
|     } catch (e, stack) {
 | |
|       _log.severe("Failed to build folder structure", e, stack);
 | |
|       state = AsyncError(e, stack);
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| final folderStructureProvider =
 | |
|     StateNotifierProvider<FolderStructureNotifier, AsyncValue<RootFolder>>(
 | |
|         (ref) {
 | |
|   return FolderStructureNotifier(
 | |
|     ref.watch(folderServiceProvider),
 | |
|   );
 | |
| });
 | |
| 
 | |
| class FolderRenderListNotifier extends StateNotifier<AsyncValue<RenderList>> {
 | |
|   final FolderService _folderService;
 | |
|   final RootFolder _folder;
 | |
|   final Logger _log = Logger("FolderAssetsNotifier");
 | |
| 
 | |
|   FolderRenderListNotifier(this._folderService, this._folder)
 | |
|       : super(const AsyncLoading());
 | |
| 
 | |
|   Future<void> fetchAssets(SortOrder order) async {
 | |
|     try {
 | |
|       final assets = await _folderService.getFolderAssets(_folder, order);
 | |
|       final renderList =
 | |
|           await RenderList.fromAssets(assets, GroupAssetsBy.none);
 | |
|       state = AsyncData(renderList);
 | |
|     } catch (e, stack) {
 | |
|       _log.severe("Failed to fetch folder assets", e, stack);
 | |
|       state = AsyncError(e, stack);
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| final folderRenderListProvider = StateNotifierProvider.family<
 | |
|     FolderRenderListNotifier,
 | |
|     AsyncValue<RenderList>,
 | |
|     RootFolder>((ref, folder) {
 | |
|   return FolderRenderListNotifier(
 | |
|     ref.watch(folderServiceProvider),
 | |
|     folder,
 | |
|   );
 | |
| });
 |