mirror of
https://github.com/immich-app/immich.git
synced 2024-12-30 11:28:22 +02:00
e57e279fe1
* 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))),
|
|
);
|