fix: remove selected range after going to availability overview

This commit is contained in:
Freek van de Ven 2024-07-10 14:55:52 +02:00 committed by Bart Ribbers
parent 4c75c8c260
commit 79be2d74dc
2 changed files with 31 additions and 38 deletions

View file

@ -71,6 +71,7 @@ class _AvailabilityOverviewState extends State<AvailabilityOverview> {
}); });
}, },
availabilities: availabilitySnapshot, availabilities: availabilitySnapshot,
selectedRange: _selectedRange,
); );
var templateLegend = TemplateLegend( var templateLegend = TemplateLegend(
@ -96,6 +97,9 @@ class _AvailabilityOverviewState extends State<AvailabilityOverview> {
_selectedRange!, _selectedRange!,
availabilitesWithinSelectedRange, availabilitesWithinSelectedRange,
); );
setState(() {
_selectedRange = null;
});
}; };
var startEditButton = options.primaryButtonBuilder( var startEditButton = options.primaryButtonBuilder(

View file

@ -6,13 +6,14 @@ import "package:flutter_availability/src/util/availability_deviation.dart";
import "package:flutter_availability/src/util/scope.dart"; import "package:flutter_availability/src/util/scope.dart";
/// ///
class CalendarView extends StatefulWidget { class CalendarView extends StatelessWidget {
/// ///
const CalendarView({ const CalendarView({
required this.month, required this.month,
required this.availabilities, required this.availabilities,
required this.onMonthChanged, required this.onMonthChanged,
required this.onEditDateRange, required this.onEditDateRange,
required this.selectedRange,
super.key, super.key,
}); });
@ -28,46 +29,35 @@ class CalendarView extends StatefulWidget {
/// Callback for when the date range is edited by the user /// Callback for when the date range is edited by the user
final void Function(DateTimeRange? range) onEditDateRange; final void Function(DateTimeRange? range) onEditDateRange;
@override ///
State<CalendarView> createState() => _CalendarViewState(); final DateTimeRange? selectedRange;
}
class _CalendarViewState extends State<CalendarView> { void _onTapDate(DateTime day) {
DateTimeRange? _selectedRange;
void onTapDate(DateTime day) {
// if there is already a range selected, with a single date and the date // if there is already a range selected, with a single date and the date
//that is selected is after it we extend the range //that is selected is after it we extend the range
if (_selectedRange != null && if (selectedRange != null &&
day.isAfter(_selectedRange!.start) && day.isAfter(selectedRange!.start) &&
_selectedRange!.start == _selectedRange!.end) { selectedRange!.start == selectedRange!.end) {
setState(() { onEditDateRange(
_selectedRange = DateTimeRange( DateTimeRange(
start: _selectedRange!.start, start: selectedRange!.start,
end: day, end: day,
); ),
}); );
widget.onEditDateRange(_selectedRange);
return; return;
} }
// if select the already selected date we want to clear the range // if select the already selected date we want to clear the range
if (_selectedRange != null && if (selectedRange != null &&
day.isAtSameMomentAs(_selectedRange!.start) && day.isAtSameMomentAs(selectedRange!.start) &&
day.isAtSameMomentAs(_selectedRange!.end)) { day.isAtSameMomentAs(selectedRange!.end)) {
setState(() { onEditDateRange(null);
_selectedRange = null;
});
widget.onEditDateRange(_selectedRange);
return; return;
} }
// if there is already a range selected we want to clear // if there is already a range selected we want to clear
//it and start a new one //it and start a new one
setState(() { onEditDateRange(DateTimeRange(start: day, end: day));
_selectedRange = DateTimeRange(start: day, end: day);
});
widget.onEditDateRange(_selectedRange);
} }
@override @override
@ -77,8 +67,7 @@ class _CalendarViewState extends State<CalendarView> {
var options = availabilityScope.options; var options = availabilityScope.options;
var translations = options.translations; var translations = options.translations;
var mappedCalendarDays = var mappedCalendarDays = _mapAvailabilitiesToCalendarDays(availabilities);
_mapAvailabilitiesToCalendarDays(widget.availabilities);
var monthDateSelector = Row( var monthDateSelector = Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
@ -87,8 +76,8 @@ class _CalendarViewState extends State<CalendarView> {
padding: EdgeInsets.zero, padding: EdgeInsets.zero,
icon: const Icon(Icons.chevron_left), icon: const Icon(Icons.chevron_left),
onPressed: () { onPressed: () {
widget.onMonthChanged( onMonthChanged(
DateTime(widget.month.year, widget.month.month - 1), DateTime(month.year, month.month - 1),
); );
}, },
), ),
@ -96,7 +85,7 @@ class _CalendarViewState extends State<CalendarView> {
SizedBox( SizedBox(
width: _calculateTextWidthOfLongestMonth(context, translations), width: _calculateTextWidthOfLongestMonth(context, translations),
child: Text( child: Text(
translations.monthYearFormatter(context, widget.month), translations.monthYearFormatter(context, month),
style: theme.textTheme.titleMedium, style: theme.textTheme.titleMedium,
textAlign: TextAlign.center, textAlign: TextAlign.center,
), ),
@ -106,8 +95,8 @@ class _CalendarViewState extends State<CalendarView> {
padding: EdgeInsets.zero, padding: EdgeInsets.zero,
icon: const Icon(Icons.chevron_right), icon: const Icon(Icons.chevron_right),
onPressed: () { onPressed: () {
widget.onMonthChanged( onMonthChanged(
DateTime(widget.month.year, widget.month.month + 1), DateTime(month.year, month.month + 1),
); );
}, },
), ),
@ -115,10 +104,10 @@ class _CalendarViewState extends State<CalendarView> {
); );
var calendarGrid = CalendarGrid( var calendarGrid = CalendarGrid(
month: widget.month, month: month,
days: mappedCalendarDays, days: mappedCalendarDays,
onDayTap: onTapDate, onDayTap: _onTapDate,
selectedRange: _selectedRange, selectedRange: selectedRange,
); );
return Column( return Column(