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 { 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 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 assets) { state = state.copyWith(selectedItems: {...state.selectedItems, ...assets}); } void removeSingleSelectedItem(AssetResponseDto asset) { Set currentList = state.selectedItems; currentList.removeWhere((e) => e.id == asset.id); state = state.copyWith(selectedItems: currentList); } void removeMultipleSelectedItem(List assets) { Set currentList = state.selectedItems; for (AssetResponseDto asset in assets) { currentList.removeWhere((e) => e.id == asset.id); } state = state.copyWith(selectedItems: currentList); } void shareAssets(List 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( ((ref) => HomePageStateNotifier(ref.watch(shareServiceProvider))), );