1
0
mirror of https://github.com/immich-app/immich.git synced 2025-08-08 23:07:06 +02:00

refactor: actions provider (#19651)

* refactor: actions provider

* chore: rename error and stack

* remove empty checks

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
This commit is contained in:
shenlong
2025-07-01 08:10:25 +05:30
committed by GitHub
parent 5011636d95
commit 21f500191a
8 changed files with 159 additions and 140 deletions

View File

@ -1,6 +1,5 @@
import 'package:collection/collection.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
import 'package:immich_mobile/domain/services/timeline.service.dart';
import 'package:immich_mobile/providers/infrastructure/timeline.provider.dart';
@ -13,12 +12,8 @@ final multiSelectProvider =
class MultiSelectState {
final Set<BaseAsset> selectedAssets;
final int lastUpdatedTime;
const MultiSelectState({
required this.selectedAssets,
required this.lastUpdatedTime,
});
const MultiSelectState({required this.selectedAssets});
bool get isEnabled => selectedAssets.isNotEmpty;
bool get hasRemote => selectedAssets.any(
@ -30,31 +25,25 @@ class MultiSelectState {
(asset) => asset.storage == AssetState.local,
);
MultiSelectState copyWith({
Set<BaseAsset>? selectedAssets,
int? lastUpdatedTime,
}) {
MultiSelectState copyWith({Set<BaseAsset>? selectedAssets}) {
return MultiSelectState(
selectedAssets: selectedAssets ?? this.selectedAssets,
lastUpdatedTime: lastUpdatedTime ?? this.lastUpdatedTime,
);
}
@override
String toString() =>
'MultiSelectState(selectedAssets: $selectedAssets, lastUpdatedTime: $lastUpdatedTime)';
String toString() => 'MultiSelectState(selectedAssets: $selectedAssets)';
@override
bool operator ==(covariant MultiSelectState other) {
if (identical(this, other)) return true;
final listEquals = const DeepCollectionEquality().equals;
return listEquals(other.selectedAssets, selectedAssets) &&
other.lastUpdatedTime == lastUpdatedTime;
return listEquals(other.selectedAssets, selectedAssets);
}
@override
int get hashCode => selectedAssets.hashCode ^ lastUpdatedTime.hashCode;
int get hashCode => selectedAssets.hashCode;
}
class MultiSelectNotifier extends Notifier<MultiSelectState> {
@ -64,10 +53,7 @@ class MultiSelectNotifier extends Notifier<MultiSelectState> {
MultiSelectState build() {
_timelineService = ref.read(timelineServiceProvider);
return const MultiSelectState(
selectedAssets: {},
lastUpdatedTime: 0,
);
return const MultiSelectState(selectedAssets: {});
}
void selectAsset(BaseAsset asset) {
@ -98,17 +84,8 @@ class MultiSelectNotifier extends Notifier<MultiSelectState> {
}
}
void clearSelection() {
state = state.copyWith(
selectedAssets: {},
);
}
void reset() {
state = MultiSelectState(
selectedAssets: {},
lastUpdatedTime: DateTime.now().millisecondsSinceEpoch,
);
state = const MultiSelectState(selectedAssets: {});
}
/// Bucket bulk operations