mirror of
https://github.com/immich-app/immich.git
synced 2024-12-17 12:22:31 +02:00
40a8115101
* Fixed app not resuming backup after closing and reopening the app * Fixed cosmetic effect of backup button doesn't change state right away after pressing start backup * Fixed grammar * Fixed deep copy problem that cause incorrect asset count when backing up * Format code
109 lines
3.3 KiB
Dart
109 lines
3.3 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter/services.dart';
|
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
|
import 'package:immich_mobile/modules/sharing/providers/asset_selection.provider.dart';
|
|
import 'package:immich_mobile/shared/models/immich_asset.model.dart';
|
|
|
|
class MonthGroupTitle extends HookConsumerWidget {
|
|
final String month;
|
|
final List<ImmichAsset> assetGroup;
|
|
|
|
const MonthGroupTitle(
|
|
{Key? key, required this.month, required this.assetGroup})
|
|
: super(key: key);
|
|
|
|
@override
|
|
Widget build(BuildContext context, WidgetRef ref) {
|
|
final selectedDateGroup = ref.watch(assetSelectionProvider).selectedMonths;
|
|
final selectedAssets =
|
|
ref.watch(assetSelectionProvider).selectedNewAssetsForAlbum;
|
|
final isAlbumExist = ref.watch(assetSelectionProvider).isAlbumExist;
|
|
|
|
_handleTitleIconClick() {
|
|
HapticFeedback.heavyImpact();
|
|
|
|
if (isAlbumExist) {
|
|
if (selectedDateGroup.contains(month)) {
|
|
ref
|
|
.watch(assetSelectionProvider.notifier)
|
|
.removeAssetsInMonth(month, []);
|
|
ref
|
|
.watch(assetSelectionProvider.notifier)
|
|
.removeSelectedAdditionalAssets(assetGroup);
|
|
} else {
|
|
ref
|
|
.watch(assetSelectionProvider.notifier)
|
|
.addAllAssetsInMonth(month, []);
|
|
|
|
// Deep clone assetGroup
|
|
var assetGroupWithNewItems = [...assetGroup];
|
|
|
|
for (var selectedAsset in selectedAssets) {
|
|
assetGroupWithNewItems.removeWhere((a) => a.id == selectedAsset.id);
|
|
}
|
|
|
|
ref
|
|
.watch(assetSelectionProvider.notifier)
|
|
.addAdditionalAssets(assetGroupWithNewItems);
|
|
}
|
|
} else {
|
|
if (selectedDateGroup.contains(month)) {
|
|
ref
|
|
.watch(assetSelectionProvider.notifier)
|
|
.removeAssetsInMonth(month, assetGroup);
|
|
} else {
|
|
ref
|
|
.watch(assetSelectionProvider.notifier)
|
|
.addAllAssetsInMonth(month, assetGroup);
|
|
}
|
|
}
|
|
}
|
|
|
|
_getSimplifiedMonth() {
|
|
var monthAndYear = month.split(',');
|
|
var yearText = monthAndYear[1].trim();
|
|
var monthText = monthAndYear[0].trim();
|
|
var currentYear = DateTime.now().year.toString();
|
|
|
|
if (yearText == currentYear) {
|
|
return monthText;
|
|
} else {
|
|
return month;
|
|
}
|
|
}
|
|
|
|
return SliverToBoxAdapter(
|
|
child: Padding(
|
|
padding: const EdgeInsets.only(
|
|
top: 29.0, bottom: 29.0, left: 14.0, right: 8.0),
|
|
child: Row(
|
|
children: [
|
|
GestureDetector(
|
|
onTap: _handleTitleIconClick,
|
|
child: selectedDateGroup.contains(month)
|
|
? Icon(
|
|
Icons.check_circle_rounded,
|
|
color: Theme.of(context).primaryColor,
|
|
)
|
|
: const Icon(
|
|
Icons.circle_outlined,
|
|
color: Colors.grey,
|
|
),
|
|
),
|
|
Padding(
|
|
padding: const EdgeInsets.only(left: 8.0),
|
|
child: Text(
|
|
_getSimplifiedMonth(),
|
|
style: TextStyle(
|
|
fontSize: 24,
|
|
color: Theme.of(context).primaryColor,
|
|
),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|