mirror of
				https://github.com/immich-app/immich.git
				synced 2025-11-03 19:17:11 -05: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,
 | 
						|
  );
 | 
						|
});
 |