forked from Cutlery/immich
		
	* refactor: server info model to use data classes instead of dtos * mobile: add return types and refactor private variables in map / stack --------- Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
		
			
				
	
	
		
			52 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
import 'package:hooks_riverpod/hooks_riverpod.dart';
 | 
						|
import 'package:immich_mobile/shared/models/asset.dart';
 | 
						|
import 'package:immich_mobile/shared/providers/db.provider.dart';
 | 
						|
import 'package:isar/isar.dart';
 | 
						|
 | 
						|
class AssetStackNotifier extends StateNotifier<List<Asset>> {
 | 
						|
  final Asset _asset;
 | 
						|
  final Ref _ref;
 | 
						|
 | 
						|
  AssetStackNotifier(
 | 
						|
    this._asset,
 | 
						|
    this._ref,
 | 
						|
  ) : super([]) {
 | 
						|
    fetchStackChildren();
 | 
						|
  }
 | 
						|
 | 
						|
  void fetchStackChildren() async {
 | 
						|
    if (mounted) {
 | 
						|
      state = await _ref.read(assetStackProvider(_asset).future);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  void removeChild(int index) {
 | 
						|
    if (index < state.length) {
 | 
						|
      state.removeAt(index);
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
final assetStackStateProvider = StateNotifierProvider.autoDispose
 | 
						|
    .family<AssetStackNotifier, List<Asset>, Asset>(
 | 
						|
  (ref, asset) => AssetStackNotifier(asset, ref),
 | 
						|
);
 | 
						|
 | 
						|
final assetStackProvider =
 | 
						|
    FutureProvider.autoDispose.family<List<Asset>, Asset>((ref, asset) async {
 | 
						|
  // Guard [local asset]
 | 
						|
  if (asset.remoteId == null) {
 | 
						|
    return [];
 | 
						|
  }
 | 
						|
 | 
						|
  return await ref
 | 
						|
      .watch(dbProvider)
 | 
						|
      .assets
 | 
						|
      .filter()
 | 
						|
      .isArchivedEqualTo(false)
 | 
						|
      .isTrashedEqualTo(false)
 | 
						|
      .stackParentIdEqualTo(asset.remoteId)
 | 
						|
      .sortByFileCreatedAtDesc()
 | 
						|
      .findAll();
 | 
						|
});
 |