forked from Cutlery/immich
		
	* Share unique assets * Style share preparing dialog * Share assets from multiselect * Fix i18n * Use navigator like in delete dialog * Center bottom-bar buttons
		
			
				
	
	
		
			93 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
import 'package:auto_route/auto_route.dart';
 | 
						|
import 'package:flutter/material.dart';
 | 
						|
import 'package:hooks_riverpod/hooks_riverpod.dart';
 | 
						|
import 'package:immich_mobile/modules/home/models/home_page_state.model.dart';
 | 
						|
import 'package:immich_mobile/shared/services/share.service.dart';
 | 
						|
import 'package:immich_mobile/shared/ui/share_dialog.dart';
 | 
						|
import 'package:openapi/api.dart';
 | 
						|
 | 
						|
class HomePageStateNotifier extends StateNotifier<HomePageState> {
 | 
						|
 | 
						|
  final ShareService _shareService;
 | 
						|
 | 
						|
  HomePageStateNotifier(this._shareService)
 | 
						|
      : super(
 | 
						|
          HomePageState(
 | 
						|
            isMultiSelectEnable: false,
 | 
						|
            selectedItems: {},
 | 
						|
            selectedDateGroup: {},
 | 
						|
          ),
 | 
						|
        );
 | 
						|
 | 
						|
  void addSelectedDateGroup(String dateGroupTitle) {
 | 
						|
    state = state.copyWith(
 | 
						|
      selectedDateGroup: {...state.selectedDateGroup, dateGroupTitle},
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  void removeSelectedDateGroup(String dateGroupTitle) {
 | 
						|
    var currentDateGroup = state.selectedDateGroup;
 | 
						|
 | 
						|
    currentDateGroup.removeWhere((e) => e == dateGroupTitle);
 | 
						|
 | 
						|
    state = state.copyWith(selectedDateGroup: currentDateGroup);
 | 
						|
  }
 | 
						|
 | 
						|
  void enableMultiSelect(Set<AssetResponseDto> selectedItems) {
 | 
						|
    state =
 | 
						|
        state.copyWith(isMultiSelectEnable: true, selectedItems: selectedItems);
 | 
						|
  }
 | 
						|
 | 
						|
  void disableMultiSelect() {
 | 
						|
    state = state.copyWith(
 | 
						|
      isMultiSelectEnable: false,
 | 
						|
      selectedItems: {},
 | 
						|
      selectedDateGroup: {},
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  void addSingleSelectedItem(AssetResponseDto asset) {
 | 
						|
    state = state.copyWith(selectedItems: {...state.selectedItems, asset});
 | 
						|
  }
 | 
						|
 | 
						|
  void addMultipleSelectedItems(List<AssetResponseDto> assets) {
 | 
						|
    state = state.copyWith(selectedItems: {...state.selectedItems, ...assets});
 | 
						|
  }
 | 
						|
 | 
						|
  void removeSingleSelectedItem(AssetResponseDto asset) {
 | 
						|
    Set<AssetResponseDto> currentList = state.selectedItems;
 | 
						|
 | 
						|
    currentList.removeWhere((e) => e.id == asset.id);
 | 
						|
 | 
						|
    state = state.copyWith(selectedItems: currentList);
 | 
						|
  }
 | 
						|
 | 
						|
  void removeMultipleSelectedItem(List<AssetResponseDto> assets) {
 | 
						|
    Set<AssetResponseDto> currentList = state.selectedItems;
 | 
						|
 | 
						|
    for (AssetResponseDto asset in assets) {
 | 
						|
      currentList.removeWhere((e) => e.id == asset.id);
 | 
						|
    }
 | 
						|
 | 
						|
    state = state.copyWith(selectedItems: currentList);
 | 
						|
  }
 | 
						|
 | 
						|
  void shareAssets(List<AssetResponseDto> assets, BuildContext context) {
 | 
						|
    showDialog(
 | 
						|
      context: context,
 | 
						|
      builder: (BuildContext buildContext) {
 | 
						|
        _shareService
 | 
						|
            .shareAssets(assets)
 | 
						|
            .then((_) => Navigator.of(buildContext).pop());
 | 
						|
        return const ShareDialog();
 | 
						|
      },
 | 
						|
      barrierDismissible: false,
 | 
						|
    );
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
final homePageStateProvider =
 | 
						|
    StateNotifierProvider<HomePageStateNotifier, HomePageState>(
 | 
						|
  ((ref) => HomePageStateNotifier(ref.watch(shareServiceProvider))),
 | 
						|
);
 |