6177214e-ce7c-49e3-99de-ff9721b26f63 — Commit 3bec73a1
Changed files
comwell_key_app/assets/translations/da-DK.json | 3 +- comwell_key_app/assets/translations/en-US.json | 3 +- .../booking_details/components/share_button.dart | 109 ++++++++++++--------- comwell_key_app/lib/overview/overview_page.dart | 32 +++--- comwell_key_app/lib/services/api.dart | 23 +++-- 5 files changed, 101 insertions(+), 69 deletions(-)
Diff
diff --git a/comwell_key_app/assets/translations/da-DK.json b/comwell_key_app/assets/translations/da-DK.json
index 895bf3ef..7fec28e9 100644
--- a/comwell_key_app/assets/translations/da-DK.json
+++ b/comwell_key_app/assets/translations/da-DK.json
@@ -350,5 +350,6 @@
"choose_room_error_title": "Kunne ikke vælge værelse",
"choose_room_error_subtitle": "Der er sket en fejl. Prøv igen senere eller gå til receptionen",
"share_booking_error_title": "Kunne ikke finde gæsterne på værelset",
- "share_booking_error_subtitle": "Der er sket en fejl. Prøv igen senere."
+ "share_booking_error_subtitle": "Der er sket en fejl. Prøv igen senere.",
+ "refresh_bookings": "Opdater bookinger"
}
\ No newline at end of file
diff --git a/comwell_key_app/assets/translations/en-US.json b/comwell_key_app/assets/translations/en-US.json
index 5e64aa27..f0fe3de5 100644
--- a/comwell_key_app/assets/translations/en-US.json
+++ b/comwell_key_app/assets/translations/en-US.json
@@ -352,5 +352,6 @@
"choose_room_error_title": "Could not choose room",
"choose_room_error_subtitle": "An error occurred. Please try again later or go to the reception.",
"share_booking_error_title": "Could not find guests on the room",
- "share_booking_error_subtitle": "An error occurred. Please try again later."
+ "share_booking_error_subtitle": "An error occurred. Please try again later.",
+ "refresh_bookings": "Refresh bookings"
}
diff --git a/comwell_key_app/lib/booking_details/components/share_button.dart b/comwell_key_app/lib/booking_details/components/share_button.dart
index 247aa8b7..b6a59445 100644
--- a/comwell_key_app/lib/booking_details/components/share_button.dart
+++ b/comwell_key_app/lib/booking_details/components/share_button.dart
@@ -135,6 +135,10 @@ class ShareButton extends StatelessWidget {
listener: (context, state) {},
builder: (context, state) {
final cubit = context.read<ShareBookingCubit>();
+ final guestsWithoutBooker = guests
+ .where((guest) => guest.name != booker)
+ .map((guest) => guest.name)
+ .toList();
return ClipRRect(
borderRadius: const BorderRadius.only(
@@ -148,7 +152,8 @@ class ShareButton extends StatelessWidget {
child: Column(
children: [
Padding(
- padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0),
+ padding: const EdgeInsets.symmetric(
+ horizontal: 16.0, vertical: 8.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
@@ -185,7 +190,7 @@ class ShareButton extends StatelessWidget {
}
return Expanded(
child: GuestList(
- guests: guests.where((guest) => guest.name != booker).map((guest) => guest.name).toList(),
+ guests: guestsWithoutBooker,
selectedGuests: state.selectedGuests,
onGuestSelected: (Iterable<String> newSelection) {
cubit.updateSelectedGuests(newSelection);
@@ -194,56 +199,62 @@ class ShareButton extends StatelessWidget {
})
],
)),
- bottomNavigationBar: state.error != null ? null : SafeArea(
- child: Column(
- mainAxisSize: MainAxisSize.min,
- crossAxisAlignment: CrossAxisAlignment.end,
- mainAxisAlignment: MainAxisAlignment.end,
- children: [
- Divider(
- height: 1,
- color: Colors.grey.shade300,
- ),
- Padding(
- padding: const EdgeInsets.all(16.0),
- child: ElevatedButton(
- onPressed: state.selectedGuests.isNotEmpty
- ? () async {
- final shouldRemove = await showDialog<bool>(
- context: bottomSheetContext,
- builder: (context) => _buildRemoveGuestDialog(
- context,
- cubit,
- bottomSheetContext,
- state.selectedGuests,
- ),
- );
-
- if (shouldRemove == true && context.mounted) {
- context.pop(state.selectedGuests);
- }
- }
- : null,
- style: ElevatedButton.styleFrom(
- backgroundColor: state.selectedGuests.isNotEmpty
- ? Colors.black
- : const Color(0xffE0E0E0),
- minimumSize: const Size.fromHeight(50),
- elevation: 0,
- ),
- child: Text(
- 'cancel_sharing'.tr(),
- style: TextStyle(
- color: state.selectedGuests.isNotEmpty
- ? Colors.white
- : Colors.grey[500],
+ bottomNavigationBar: state.error != null
+ ? null
+ : SafeArea(
+ child: Column(
+ mainAxisSize: MainAxisSize.min,
+ crossAxisAlignment: CrossAxisAlignment.end,
+ mainAxisAlignment: MainAxisAlignment.end,
+ children: [
+ Divider(
+ height: 1,
+ color: Colors.grey.shade300,
),
- ),
+ Padding(
+ padding: const EdgeInsets.all(16.0),
+ child: ElevatedButton(
+ onPressed: state.selectedGuests.isNotEmpty
+ ? () async {
+ final shouldRemove =
+ await showDialog<bool>(
+ context: bottomSheetContext,
+ builder: (context) =>
+ _buildRemoveGuestDialog(
+ context,
+ cubit,
+ bottomSheetContext,
+ state.selectedGuests,
+ ),
+ );
+
+ if (shouldRemove == true &&
+ context.mounted) {
+ context.pop(state.selectedGuests);
+ }
+ }
+ : null,
+ style: ElevatedButton.styleFrom(
+ backgroundColor:
+ state.selectedGuests.isNotEmpty
+ ? Colors.black
+ : const Color(0xffE0E0E0),
+ minimumSize: const Size.fromHeight(50),
+ elevation: 0,
+ ),
+ child: Text(
+ 'cancel_sharing'.tr(),
+ style: TextStyle(
+ color: state.selectedGuests.isNotEmpty
+ ? Colors.white
+ : Colors.grey[500],
+ ),
+ ),
+ ),
+ ),
+ ],
),
),
- ],
- ),
- ),
),
);
},
diff --git a/comwell_key_app/lib/overview/overview_page.dart b/comwell_key_app/lib/overview/overview_page.dart
index d52dc32f..2dcb6e03 100644
--- a/comwell_key_app/lib/overview/overview_page.dart
+++ b/comwell_key_app/lib/overview/overview_page.dart
@@ -104,27 +104,41 @@ class OverviewTabViewState extends State<OverviewPage>
subtitle: 'overview_error_subtitle'.tr(),
border: true,
),
- IconButton(onPressed: () {
- context.read<OverviewCubit>().fetchBookings();
- }, icon: const Icon(Icons.refresh, color: Colors.black)),
+ IconButton(
+ onPressed: () {
+ context.read<OverviewCubit>().fetchBookings();
+ },
+ icon: const Icon(
+ Icons.refresh,
+ color: Colors.black,
+ ),
+ tooltip: 'refresh_bookings'.tr(),
+ ),
const FindBookingButton()
],
),
] else if (state is OverviewLoaded) ...[
OverviewTabView(
tabController: _tabController,
- bookings: Bookings(current: state.bookings.current, past: state.bookings.past, cancelled: state.bookings.cancelled)),
+ bookings: Bookings(
+ current: state.bookings.current,
+ past: state.bookings.past,
+ cancelled: state.bookings.cancelled)),
] else if (state is OverviewError) ...[
OverviewTabView(
tabController: _tabController,
- bookings: const Bookings(current: [], past: [], cancelled: [])),
+ bookings:
+ const Bookings(current: [], past: [], cancelled: [])),
] else if (state is OverviewNoBookingFound) ...[
OverviewTabView(
- tabController: _tabController, bookings: const Bookings(current: [], past: [], cancelled: [])),
+ tabController: _tabController,
+ bookings:
+ const Bookings(current: [], past: [], cancelled: [])),
] else ...[
OverviewTabView(
tabController: _tabController,
- bookings: const Bookings(current: [], past: [], cancelled: [])),
+ bookings:
+ const Bookings(current: [], past: [], cancelled: [])),
],
Column(
children: [
@@ -232,13 +246,9 @@ class OverviewTabView extends StatelessWidget {
final TabController _tabController;
final Bookings bookings;
-
-
@override
Widget build(BuildContext context) {
-
-
return Expanded(
child: TabBarView(
controller: _tabController,
diff --git a/comwell_key_app/lib/services/api.dart b/comwell_key_app/lib/services/api.dart
index 0c4028db..8ba96dbb 100644
--- a/comwell_key_app/lib/services/api.dart
+++ b/comwell_key_app/lib/services/api.dart
@@ -49,7 +49,8 @@ class Api {
"limit": 100,
};
final json = jsonEncode(body);
- final response = await dio.get<List<dynamic>>(ApiEndpoints.getPastBookings, data: json);
+ final response =
+ await dio.get<List<dynamic>>(ApiEndpoints.getPastBookings, data: json);
return response.data!.map((e) => BookingDTO.fromJson(e as Json)).toList();
}
@@ -59,16 +60,19 @@ class Api {
"limit": 100,
};
final json = jsonEncode(body);
- final response = await dio.get<List<dynamic>>(ApiEndpoints.getCancelledBookings, data: json);
+ final response = await dio
+ .get<List<dynamic>>(ApiEndpoints.getCancelledBookings, data: json);
return response.data!.map((e) => BookingDTO.fromJson(e as Json)).toList();
}
+
Future<List<BookingDTO>> fetchCurrentBookingsForUser() async {
final body = {
"skip": 0,
"limit": 100,
};
final json = jsonEncode(body);
- final response = await dio.get<List<dynamic>>(ApiEndpoints.getCurrentBookings, data: json);
+ final response = await dio
+ .get<List<dynamic>>(ApiEndpoints.getCurrentBookings, data: json);
return response.data!.map((e) => BookingDTO.fromJson(e as Json)).toList();
}
@@ -310,9 +314,15 @@ class Api {
.post<void>(ApiEndpoints.provisionKey, data: {'bookingId': bookingId});
}
- Future<BookingDTO?> getBookingDetails(String hmsConfirmationNumber, String hotelCode) async {
- final response =
- await dio.get<Json>(ApiEndpoints.getBookingDetails.replaceAll('{confirmationId}', hmsConfirmationNumber).replaceAll('{hotelCode}', hotelCode));
+ Future<BookingDTO?> getBookingDetails(
+ String hmsConfirmationNumber, String hotelCode) async {
+ final uri = Uri.parse(ApiEndpoints.getBookingDetails).replace(
+ queryParameters: {
+ 'confirmationId': hmsConfirmationNumber,
+ 'hotelCode': hotelCode,
+ },
+ );
+ final response = await dio.get<Json>(uri.toString());
return BookingDTO.fromJson(response.data!);
}
@@ -328,7 +338,6 @@ class Api {
return response.data!;
}
-
Future<UpSalesDTO> fetchUpSales(
String confirmationId, String hotelCode) async {
final body = {