Skip to content

Commit

Permalink
Merge 116794b into 75090e2
Browse files Browse the repository at this point in the history
  • Loading branch information
albertms10 committed Dec 31, 2022
2 parents 75090e2 + 116794b commit 3596174
Show file tree
Hide file tree
Showing 13 changed files with 41 additions and 40 deletions.
9 changes: 5 additions & 4 deletions lib/src/model/booking/booking.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'package:cabin_booking/utils/date_time_extension.dart';
import 'package:cabin_booking/utils/time_of_day_extension.dart';
import 'package:intl/intl.dart';

import '../cabin/cabin.dart';
import '../date/date_range_item.dart';
import 'recurring_booking.dart';

Expand All @@ -18,8 +19,8 @@ abstract class Booking extends DateRangeItem {
/// Whether this [Booking] represents a locked time slot.
bool isLocked;

/// The ID of the booked Cabin.
String? cabinId;
/// The reference of the booked [Cabin].
Cabin? cabin;

/// The [RecurringBooking] reference, if this [Booking] is part of a series of
/// recurring bookings.
Expand All @@ -36,7 +37,7 @@ abstract class Booking extends DateRangeItem {
super.endDate,
this.description,
this.isLocked = false,
this.cabinId,
this.cabin,
this.recurringBooking,
this.recurringNumber,
});
Expand Down Expand Up @@ -70,7 +71,7 @@ abstract class Booking extends DateRangeItem {
DateTime? endDate,
String? description,
bool? isLocked,
String? cabinId,
Cabin? cabin,
});

@override
Expand Down
11 changes: 6 additions & 5 deletions lib/src/model/booking/recurring_booking.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:collection/collection.dart' show IterableExtension;

import '../cabin/cabin.dart';
import 'booking.dart';
import 'single_booking.dart';

Expand All @@ -24,7 +25,7 @@ class RecurringBooking extends Booking {
super.endDate,
super.description,
super.isLocked,
super.cabinId,
super.cabin,
this.periodicity = Periodicity.weekly,
this.repeatEvery = 1,
DateTime? recurringEndDate,
Expand Down Expand Up @@ -78,7 +79,7 @@ class RecurringBooking extends Booking {
endDate: booking.endDate,
description: booking.description,
isLocked: booking.isLocked,
cabinId: booking.cabinId,
cabin: booking.cabin,
periodicity: periodicity,
repeatEvery: repeatEvery,
recurringEndDate: recurringEndDate,
Expand Down Expand Up @@ -153,7 +154,7 @@ class RecurringBooking extends Booking {
endDate: endDate,
description: description,
isLocked: isLocked,
cabinId: cabinId,
cabin: cabin,
recurringBooking: linked ? this : null,
);

Expand Down Expand Up @@ -199,7 +200,7 @@ class RecurringBooking extends Booking {
DateTime? endDate,
String? description,
bool? isLocked,
String? cabinId,
Cabin? cabin,
Periodicity? periodicity,
int? repeatEvery,
DateTime? recurringEndDate,
Expand All @@ -211,7 +212,7 @@ class RecurringBooking extends Booking {
endDate: endDate ?? this.endDate,
description: description ?? this.description,
isLocked: isLocked ?? this.isLocked,
cabinId: cabinId ?? this.cabinId,
cabin: cabin ?? this.cabin,
periodicity: periodicity ?? this.periodicity,
repeatEvery: repeatEvery ?? this.repeatEvery,
recurringEndDate: recurringEndDate != null && occurrences == null
Expand Down
9 changes: 5 additions & 4 deletions lib/src/model/booking/single_booking.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import '../cabin/cabin.dart';
import 'booking.dart';

class SingleBooking extends Booking {
Expand All @@ -7,7 +8,7 @@ class SingleBooking extends Booking {
super.endDate,
super.description,
super.isLocked,
super.cabinId,
super.cabin,
super.recurringBooking,
super.recurringNumber,
});
Expand All @@ -21,7 +22,7 @@ class SingleBooking extends Booking {
endDate: booking.endDate,
description: booking.description,
isLocked: booking.isLocked,
cabinId: booking.cabinId,
cabin: booking.cabin,
);

@override
Expand All @@ -31,15 +32,15 @@ class SingleBooking extends Booking {
DateTime? endDate,
String? description,
bool? isLocked,
String? cabinId,
Cabin? cabin,
}) =>
SingleBooking(
id: id ?? super.id,
startDate: startDate ?? this.startDate,
endDate: endDate ?? this.endDate,
description: description ?? this.description,
isLocked: isLocked ?? this.isLocked,
cabinId: cabinId ?? this.cabinId,
cabin: cabin ?? this.cabin,
);

@override
Expand Down
2 changes: 1 addition & 1 deletion lib/src/model/cabin/cabin.dart
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ class Cabin extends Item {
Iterable<Booking> searchBookings(String query, {int? limit}) =>
_bookingManager
.searchBookings(query, limit: limit)
.map((booking) => booking.copyWith(cabinId: id));
.map((booking) => booking.copyWith(cabin: this));

@override
String toString() => '$number';
Expand Down
14 changes: 7 additions & 7 deletions lib/src/model/cabin/cabin_manager.dart
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ class CabinManager extends WritableManager<Set<Cabin>> with ChangeNotifier {
SingleBooking booking, {
bool notify = true,
}) {
cabinFromId(booking.cabinId ?? cabinId).addSingleBooking(booking);
cabinFromId(booking.cabin?.id ?? cabinId).addSingleBooking(booking);

if (notify) notifyListeners();
}
Expand All @@ -263,7 +263,7 @@ class CabinManager extends WritableManager<Set<Cabin>> with ChangeNotifier {
RecurringBooking recurringBooking, {
bool notify = true,
}) {
cabinFromId(recurringBooking.cabinId ?? cabinId)
cabinFromId(recurringBooking.cabin?.id ?? cabinId)
.addRecurringBooking(recurringBooking);

if (notify) notifyListeners();
Expand All @@ -274,11 +274,11 @@ class CabinManager extends WritableManager<Set<Cabin>> with ChangeNotifier {
SingleBooking booking, {
bool notify = true,
}) {
if (booking.cabinId == null || booking.cabinId == cabinId) {
if (booking.cabin?.id == null || booking.cabin?.id == cabinId) {
cabinFromId(cabinId).modifySingleBooking(booking);
} else {
cabinFromId(cabinId).removeSingleBookingById(booking.id);
cabinFromId(booking.cabinId).addSingleBooking(booking);
cabinFromId(booking.cabin?.id).addSingleBooking(booking);
}

if (notify) notifyListeners();
Expand All @@ -289,12 +289,12 @@ class CabinManager extends WritableManager<Set<Cabin>> with ChangeNotifier {
RecurringBooking recurringBooking, {
bool notify = true,
}) {
if (recurringBooking.cabinId == null ||
recurringBooking.cabinId == cabinId) {
if (recurringBooking.cabin?.id == null ||
recurringBooking.cabin?.id == cabinId) {
cabinFromId(cabinId).modifyRecurringBooking(recurringBooking);
} else {
cabinFromId(cabinId).removeRecurringBookingById(recurringBooking.id);
cabinFromId(recurringBooking.cabinId)
cabinFromId(recurringBooking.cabin?.id)
.addRecurringBooking(recurringBooking);
}

Expand Down
4 changes: 2 additions & 2 deletions lib/utils/dialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@ Future<void> showNewBookingDialog({

if (newBooking != null) {
if (newBooking is RecurringBooking) {
return cabinManager.addRecurringBooking(newBooking.cabinId, newBooking);
return cabinManager.addRecurringBooking(newBooking.cabin?.id, newBooking);
}

if (newBooking is SingleBooking) {
return cabinManager.addSingleBooking(newBooking.cabinId, newBooking);
return cabinManager.addSingleBooking(newBooking.cabin?.id, newBooking);
}
}
}
6 changes: 3 additions & 3 deletions lib/widgets/booking/booking_floating_action_button.dart
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ class BookingFloatingActionButton extends StatelessWidget {
minutes: defaultSlotDuration.inMinutes,
),
),
cabinId: cabinManager.cabins.first.id,
cabin: cabinManager.cabins.first,
occurrences: 1,
),
cabinManager: cabinManager,
Expand All @@ -64,7 +64,7 @@ class BookingFloatingActionButton extends StatelessWidget {
),
),
isLocked: true,
cabinId: cabinManager.cabins.first.id,
cabin: cabinManager.cabins.first,
),
cabinManager: cabinManager,
);
Expand All @@ -89,7 +89,7 @@ class BookingFloatingActionButton extends StatelessWidget {
minutes: defaultSlotDuration.inMinutes,
),
),
cabinId: cabinManager.cabins.first.id,
cabin: cabinManager.cabins.first,
),
cabinManager: cabinManager,
);
Expand Down
9 changes: 5 additions & 4 deletions lib/widgets/booking/booking_form.dart
Original file line number Diff line number Diff line change
Expand Up @@ -91,9 +91,10 @@ class _BookingFormState extends State<BookingForm> {
child: Column(
children: [
CabinDropdown(
value: _booking.cabinId!,
value: _booking.cabin!.id,
onChanged: (value) {
setState(() => _booking.cabinId = value);
if (value == null) return;
setState(() => _booking.cabin?.id = value);
},
),
const SizedBox(height: 24),
Expand Down Expand Up @@ -193,7 +194,7 @@ class _BookingFormState extends State<BookingForm> {
}

if (cabinManager
.cabinFromId(_booking.cabinId)
.cabinFromId(_booking.cabin?.id)
.bookingsOverlapWith(_booking)) {
return appLocalizations.occupied;
}
Expand Down Expand Up @@ -274,7 +275,7 @@ class _BookingFormState extends State<BookingForm> {
}

if (cabinManager
.cabinFromId(_booking.cabinId)
.cabinFromId(_booking.cabin?.id)
.bookingsOverlapWith(_booking)) {
return appLocalizations.occupied;
}
Expand Down
6 changes: 2 additions & 4 deletions lib/widgets/booking/booking_preview_panel_action_bar.dart
Original file line number Diff line number Diff line change
Expand Up @@ -85,13 +85,11 @@ class _BookingPreviewEditIconButton extends StatelessWidget {
Future<void> _onEdit(BuildContext context) async {
final cabinManager = Provider.of<CabinManager>(context, listen: false);

final initialBooking = booking.recurringBooking ?? booking;
final editedBooking = await showDialog<Booking>(
context: context,
builder: (context) => BookingDialog(
booking: (booking.recurringBooking != null
? booking.recurringBooking!
: booking)
.copyWith(cabinId: cabin.id),
booking: initialBooking.copyWith(cabin: cabin),
),
);

Expand Down
2 changes: 1 addition & 1 deletion lib/widgets/booking/empty_booking_slot.dart
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ class _EmptyBookingSlotActionable extends StatelessWidget {
booking: SingleBooking(
startDate: startDate,
endDate: endDate,
cabinId: cabin.id,
cabin: cabin,
),
cabinManager: cabinManager,
);
Expand Down
4 changes: 2 additions & 2 deletions lib/widgets/jump_bar/booking_search_result.dart
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@ class BookingSearchResult extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SearchResultLabel(
label: booking.cabinId != null
label: booking.cabin != null
? '${appLocalizations.cabin} '
'${cabinManager.cabinFromId(booking.cabinId).number}'
'${cabinManager.cabinFromId(booking.cabin?.id).number}'
: null,
placeholder: appLocalizations.cabin,
),
Expand Down
2 changes: 1 addition & 1 deletion lib/widgets/jump_bar/jump_bar.dart
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ class _JumpBarState extends State<JumpBar> {
.tokenize(TokenizedBooking.expressions(appLocalizations));
final booking = TokenizedBooking.fromTokens(bookingTokens)
.toSingleBooking(appLocalizations)
.copyWith(cabinId: cabin?.id);
.copyWith(cabin: cabin);

final searchedBookings = Provider.of<CabinManager>(
context,
Expand Down
3 changes: 1 addition & 2 deletions lib/widgets/jump_bar/jump_bar_results.dart
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,7 @@ class JumpBarResults extends StatelessWidget {
return showNewBookingDialog(
context: context,
booking: suggestedBooking!.copyWith(
cabinId:
suggestedBooking!.cabinId ?? cabinManager.cabins.first.id,
cabin: suggestedBooking!.cabin ?? cabinManager.cabins.first,
),
cabinManager: cabinManager,
);
Expand Down

0 comments on commit 3596174

Please sign in to comment.