mirror of
https://github.com/immich-app/immich.git
synced 2025-07-09 03:04:16 -04:00
89 lines
2.8 KiB
Dart
89 lines
2.8 KiB
Dart
import 'package:easy_localization/easy_localization.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
|
import 'package:immich_mobile/extensions/build_context_extensions.dart';
|
|
import 'package:immich_mobile/models/search/search_filter.model.dart';
|
|
import 'package:immich_mobile/providers/search/search_filters.provider.dart';
|
|
import 'package:immich_mobile/widgets/search/search_filter/search_filter_chip.dart';
|
|
|
|
class ShowDatePicker extends ConsumerWidget {
|
|
const ShowDatePicker({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context, WidgetRef ref) {
|
|
final date =
|
|
ref.watch(searchFiltersProvider.select((filters) => filters.date));
|
|
|
|
showDatePicker() async {
|
|
final firstDate = DateTime(1900);
|
|
final lastDate = DateTime.now();
|
|
|
|
final dateRange = await showDateRangePicker(
|
|
context: context,
|
|
firstDate: firstDate,
|
|
lastDate: lastDate,
|
|
currentDate: DateTime.now(),
|
|
initialDateRange: DateTimeRange(
|
|
start: date.takenAfter ?? lastDate,
|
|
end: date.takenBefore ?? lastDate,
|
|
),
|
|
helpText: 'search_filter_date_title'.tr(),
|
|
cancelText: 'action_common_cancel'.tr(),
|
|
confirmText: 'action_common_select'.tr(),
|
|
saveText: 'action_common_save'.tr(),
|
|
errorFormatText: 'invalid_date_format'.tr(),
|
|
errorInvalidText: 'invalid_date'.tr(),
|
|
fieldStartHintText: 'start_date'.tr(),
|
|
fieldEndHintText: 'end_date'.tr(),
|
|
initialEntryMode: DatePickerEntryMode.calendar,
|
|
keyboardType: TextInputType.text,
|
|
);
|
|
|
|
if (dateRange == null) {
|
|
ref.read(searchFiltersProvider.notifier).date =
|
|
const SearchDateFilter();
|
|
return;
|
|
}
|
|
|
|
ref.read(searchFiltersProvider.notifier).date = SearchDateFilter(
|
|
takenAfter: dateRange.start,
|
|
takenBefore: dateRange.end.add(
|
|
const Duration(
|
|
hours: 23,
|
|
minutes: 59,
|
|
seconds: 59,
|
|
),
|
|
),
|
|
);
|
|
ref.read(searchFiltersProvider.notifier).search();
|
|
}
|
|
|
|
return SearchFilterChip(
|
|
icon: Icons.date_range_rounded,
|
|
onTap: showDatePicker,
|
|
label: 'search_filter_date'.tr(),
|
|
currentFilter: Text(
|
|
getFormattedText(date.takenAfter, date.takenBefore),
|
|
style: context.textTheme.labelLarge,
|
|
),
|
|
);
|
|
}
|
|
|
|
String getFormattedText(DateTime? start, DateTime? end) {
|
|
if (start == null || end == null) {
|
|
return '';
|
|
}
|
|
|
|
if (end.difference(start).inHours < 24) {
|
|
return DateFormat.yMMMd().format(start.toLocal());
|
|
}
|
|
|
|
return 'search_filter_date_interval'.tr(
|
|
namedArgs: {
|
|
"start": DateFormat.yMMMd().format(start.toLocal()),
|
|
"end": DateFormat.yMMMd().format(end.toLocal()),
|
|
},
|
|
);
|
|
}
|
|
}
|