6177214e-ce7c-49e3-99de-ff9721b26f63 — Commit 54aa4188
Changed files
comwell_key_app/assets/translations/da-DK.json | 3 +- comwell_key_app/assets/translations/en-US.json | 3 +- .../up_sales/models/dto/room_upgrade_dto.g.dart | 5 ++ .../choose_share_room/pages/room_info_page.dart | 18 +++---- .../lib/services/mappers/addon_item_mapper.dart | 1 + .../lib/services/mappers/booking_mapper.dart | 2 +- .../components/catalog/service_catalog.dart | 2 +- .../components/facilities_bottom_sheet.dart | 62 +++++++++++----------- .../lib/up_sales/components/facilities_tags.dart | 0 .../up_sales/components/facility_icon_text.dart | 7 +-- .../lib/up_sales/mappers/room_upgrade_mapper.dart | 2 + .../lib/up_sales/models/addon_upgrade.dart | 11 ---- .../lib/up_sales/models/dto/room_upgrade_dto.dart | 7 ++- .../lib/up_sales/models/room_upgrade.dart | 25 ++++++--- .../lib/up_sales/pages/room_upgrade_page.dart | 24 +++++---- 15 files changed, 94 insertions(+), 78 deletions(-)
Diff
diff --git a/comwell_key_app/assets/translations/da-DK.json b/comwell_key_app/assets/translations/da-DK.json
index bba533ee..3d0f45e0 100644
--- a/comwell_key_app/assets/translations/da-DK.json
+++ b/comwell_key_app/assets/translations/da-DK.json
@@ -320,5 +320,6 @@
"invalid_birthday": "Ugyldig fødselsdag",
"invalid_birthday_description": "Din gemte fødselsdag er ikke tilladt. Vælg en ny dato.",
"up_sales_confirmation_title": "Betalingsoversigt",
- "up_sales_confirmation_no_up_sales": "Ingen tilvalg valgt."
+ "up_sales_confirmation_no_up_sales": "Ingen tilvalg valgt.",
+ "facilities": "Faciliteter"
}
\ 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 e9b4e446..196d5ba8 100644
--- a/comwell_key_app/assets/translations/en-US.json
+++ b/comwell_key_app/assets/translations/en-US.json
@@ -323,5 +323,6 @@
"invalid_birthday": "Invalid birthday",
"invalid_birthday_description": "Your saved birthday is not allowed. Please pick a new date.",
"up_sales_confirmation_title": "Payment overview",
- "up_sales_confirmation_no_up_sales": "No upgrades selected."
+ "up_sales_confirmation_no_up_sales": "No upgrades selected.",
+ "facilities": "Facilities"
}
diff --git a/comwell_key_app/lib/.generated/up_sales/models/dto/room_upgrade_dto.g.dart b/comwell_key_app/lib/.generated/up_sales/models/dto/room_upgrade_dto.g.dart
index ccaf58a4..c599438b 100644
--- a/comwell_key_app/lib/.generated/up_sales/models/dto/room_upgrade_dto.g.dart
+++ b/comwell_key_app/lib/.generated/up_sales/models/dto/room_upgrade_dto.g.dart
@@ -15,6 +15,10 @@ RoomUpgradeDTO _$RoomUpgradeDTOFromJson(Map json) => RoomUpgradeDTO(
tags: (json['tags'] as List<dynamic>).map((e) => e as String),
currency: json['currency'] as String,
quantity: (json['quantity'] as num?)?.toInt(),
+ facilityTypes: (json['facilityTypes'] as List<dynamic>)
+ .map(
+ (e) => FacilityType.fromJson(Map<String, dynamic>.from(e as Map)))
+ .toList(),
);
Map<String, dynamic> _$RoomUpgradeDTOToJson(RoomUpgradeDTO instance) =>
@@ -27,4 +31,5 @@ Map<String, dynamic> _$RoomUpgradeDTOToJson(RoomUpgradeDTO instance) =>
'description': instance.description,
'tags': instance.tags.toList(),
'quantity': instance.quantity,
+ 'facilityTypes': instance.facilityTypes.map((e) => e.toJson()).toList(),
};
diff --git a/comwell_key_app/lib/choose_share_room/pages/room_info_page.dart b/comwell_key_app/lib/choose_share_room/pages/room_info_page.dart
index 12c3861f..e0062fff 100644
--- a/comwell_key_app/lib/choose_share_room/pages/room_info_page.dart
+++ b/comwell_key_app/lib/choose_share_room/pages/room_info_page.dart
@@ -7,7 +7,8 @@ import 'package:comwell_key_app/routing/app_routes.dart';
import 'package:comwell_key_app/themes/light_theme.dart';
import 'package:comwell_key_app/common/components/room_image_carousel.dart';
import 'package:comwell_key_app/overview/models/booking.dart';
-import 'package:comwell_key_app/up_sales/models/upgrade.dart';
+import 'package:comwell_key_app/up_sales/models/facility_type.dart';
+import 'package:comwell_key_app/up_sales/models/room_upgrade.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:comwell_key_app/up_sales/components/facility_icon_text.dart';
@@ -38,7 +39,7 @@ class _RoomInfoPageState extends State<RoomInfoPage> {
.toList(); // Use booking image
final room =
widget.booking.rooms.isNotEmpty ? widget.booking.rooms.first : null;
- final facilities = room?.roomFacilities.toList() ?? <AddOnUpgrade>[];
+ final facilities = room?.roomFacilities.toList() ?? <FacilityType>[];
final hasFacilities = facilities.isNotEmpty;
final description = room?.description ?? '';
final height = MediaQuery.of(context).size.height;
@@ -122,10 +123,10 @@ class _RoomInfoPageState extends State<RoomInfoPage> {
runSpacing: 8,
children: [
...facilities.map((f) => FacilityIconText(
- facility: f as AddOnUpgrade, showDivider: true)),
+ facility: f as FacilityType, showDivider: true)),
GestureDetector(
- onTap: () =>
- _showFacilitiesSheet(context, facilities),
+ onTap: () =>{},
+ // _showFacilitiesSheet(context, facilities),
child: Padding(
padding: const EdgeInsets.symmetric(
horizontal: 4.0),
@@ -194,8 +195,7 @@ class _RoomInfoPageState extends State<RoomInfoPage> {
}
void _showFacilitiesSheet(
- BuildContext context, List<Upgrade> facilities) {
- final height = MediaQuery.of(context).size.height;
+ BuildContext context, List<FacilityType> facilities) {
showModalBottomSheet<void>(
context: context,
isScrollControlled: true,
@@ -206,10 +206,10 @@ class _RoomInfoPageState extends State<RoomInfoPage> {
builder: (context) {
return ConstrainedBox(
constraints: BoxConstraints(
- maxHeight: height - kComwellAppBarHeight,
+ maxHeight: MediaQuery.of(context).size.height - kComwellAppBarHeight,
),
child: FacilitiesBottomSheet(
- tags: facilities.map((f) => f.tags).expand((tags) => tags).toList(),
+ facilities: facilities,
),
);
},
diff --git a/comwell_key_app/lib/services/mappers/addon_item_mapper.dart b/comwell_key_app/lib/services/mappers/addon_item_mapper.dart
index 6e1a206d..8ff4c109 100644
--- a/comwell_key_app/lib/services/mappers/addon_item_mapper.dart
+++ b/comwell_key_app/lib/services/mappers/addon_item_mapper.dart
@@ -18,6 +18,7 @@ extension AddOnItemDTOMapper on AddOnItemDTO {
description: description,
tags: ['room'],
quantity: quantity,
+ facilityTypes: [],
);
} else {
// This is an addon upgrade
diff --git a/comwell_key_app/lib/services/mappers/booking_mapper.dart b/comwell_key_app/lib/services/mappers/booking_mapper.dart
index 349e1980..b023e48e 100644
--- a/comwell_key_app/lib/services/mappers/booking_mapper.dart
+++ b/comwell_key_app/lib/services/mappers/booking_mapper.dart
@@ -32,7 +32,7 @@ extension BookingDTOMapper on BookingDTO {
balance: balance,
maskedCardNumber: maskedCardNumber,
rooms: rooms,
- addOnItems: addOnItems?.toUpgrades() ?? [],
+ addOnItems: addOnItems?.map((upgrade) => upgrade.toUpgrade()).toList() ?? [],
);
}
}
diff --git a/comwell_key_app/lib/up_sales/components/catalog/service_catalog.dart b/comwell_key_app/lib/up_sales/components/catalog/service_catalog.dart
index e35f3087..3d959659 100644
--- a/comwell_key_app/lib/up_sales/components/catalog/service_catalog.dart
+++ b/comwell_key_app/lib/up_sales/components/catalog/service_catalog.dart
@@ -11,7 +11,7 @@ import 'package:go_router/go_router.dart';
class ServiceCatalog extends StatelessWidget {
final List<AddOnUpgrade> upSales;
final double? height;
- final void Function(Upgrade) onTap;
+ final void Function(AddOnUpgrade) onTap;
final bool showRadioButton;
final void Function(AddOnUpgrade, bool) onServiceSelected;
final Booking booking;
diff --git a/comwell_key_app/lib/up_sales/components/facilities_bottom_sheet.dart b/comwell_key_app/lib/up_sales/components/facilities_bottom_sheet.dart
index a2d20626..4cce52ec 100644
--- a/comwell_key_app/lib/up_sales/components/facilities_bottom_sheet.dart
+++ b/comwell_key_app/lib/up_sales/components/facilities_bottom_sheet.dart
@@ -1,22 +1,24 @@
import 'package:comwell_key_app/themes/light_theme.dart';
import 'package:comwell_key_app/up_sales/components/facility_icon_text.dart';
+import 'package:comwell_key_app/up_sales/models/facility_type.dart';
+import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
class FacilitiesBottomSheet extends StatelessWidget {
- final List<String> tags;
- const FacilitiesBottomSheet({super.key, required this.tags});
+ final List<FacilityType> facilities;
+ const FacilitiesBottomSheet({super.key, required this.facilities});
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
- // Group facilities for display dynamically
- final Map<String, List<String>> grouped = {};
- for (final tag in tags) {
- final facilitiesOfType = tags.where((f) => f.contains(tag)).toList();
- if (facilitiesOfType.isNotEmpty) {
- grouped[tag] = facilitiesOfType;
+ // Group facilities by groupName
+ final Map<String, List<FacilityType>> grouped = {};
+ for (final facility in facilities) {
+ if (!grouped.containsKey(facility.groupName)) {
+ grouped[facility.groupName] = [];
}
+ grouped[facility.groupName]!.add(facility);
}
return Container(
@@ -30,7 +32,7 @@ class FacilitiesBottomSheet extends StatelessWidget {
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
- Text('Faciliteter', style: theme.textTheme.headlineLarge),
+ Text('facilities'.tr(), style: theme.textTheme.labelLarge),
IconButton(
icon: const Icon(
Icons.close,
@@ -47,38 +49,38 @@ class FacilitiesBottomSheet extends StatelessWidget {
...grouped.entries.map((entry) => Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- Text(entry.key.toUpperCase(),
+ Text(entry.key,
style: theme.textTheme.bodySmall?.copyWith(
fontWeight: FontWeight.bold,
color: theme.colorScheme.onSurface)),
const SizedBox(height: 8),
Wrap(
- direction: entry.key == "bed"
+ direction: entry.key == "Bed types"
? Axis.horizontal
: Axis.vertical,
spacing: 16,
runSpacing: 8,
- children: entry.key == "bed" ? [] : []
- // ? entry.value
- // .map((f) => Container(
- // width: 175,
- // height: 56,
- // decoration: BoxDecoration(
- // border: Border.all(
- // color: colorDivider,
- // ),
- // borderRadius: BorderRadius.circular(8),
- // ),
- // child: Center(
- // child: FacilityIconText(facility: f, showDivider: false)),
- // ))
- // .toList()
- // : entry.value
- // .map((f) => FacilityIconText(facility: f, showDivider: false))
- // .toList(),
+ children: entry.value
+ .map((f) => Container(
+ key: ValueKey(f.name),
+ width: entry.key == "Bed types" ? 175 : null,
+ height: entry.key == "Bed types" ? 56 : null,
+ decoration: BoxDecoration(
+ border: entry.key == "Bed types"
+ ? Border.all(
+ color: colorDivider,
+ )
+ : null,
+ borderRadius: BorderRadius.circular(8),
+ ),
+ child: Center(
+ child: FacilityIconText(
+ facility: f, showDivider: false)),
+ ))
+ .toList(),
),
const SizedBox(height: 16),
- if (entry.key != "bed")
+ if (entry.key != "Bed types")
const Column(
children: [
Divider(
diff --git a/comwell_key_app/lib/up_sales/components/facilities_tags.dart b/comwell_key_app/lib/up_sales/components/facilities_tags.dart
deleted file mode 100644
index e69de29b..00000000
diff --git a/comwell_key_app/lib/up_sales/components/facility_icon_text.dart b/comwell_key_app/lib/up_sales/components/facility_icon_text.dart
index e69b1dcf..993a96da 100644
--- a/comwell_key_app/lib/up_sales/components/facility_icon_text.dart
+++ b/comwell_key_app/lib/up_sales/components/facility_icon_text.dart
@@ -1,10 +1,11 @@
import 'package:comwell_key_app/themes/light_theme.dart';
-import 'package:comwell_key_app/up_sales/models/addon_upgrade.dart';
+import 'package:comwell_key_app/up_sales/models/facility_type.dart';
+import 'package:comwell_key_app/up_sales/models/room_upgrade.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
class FacilityIconText extends StatelessWidget {
- final AddOnUpgrade facility;
+ final FacilityType facility;
final bool showDivider;
const FacilityIconText({super.key, required this.facility, this.showDivider = true});
@@ -13,7 +14,7 @@ class FacilityIconText extends StatelessWidget {
return Row(
mainAxisSize: MainAxisSize.min,
children: [
- // SvgPicture.asset(facility.icon, width: 20, height: 20),
+ SvgPicture.network(facility.icon, width: 20, height: 20),
const SizedBox(width: 4),
Text(facility.name, style: Theme.of(context).textTheme.bodySmall),
const SizedBox(width: 6),
diff --git a/comwell_key_app/lib/up_sales/mappers/room_upgrade_mapper.dart b/comwell_key_app/lib/up_sales/mappers/room_upgrade_mapper.dart
index 056bfaf6..6e0823a6 100644
--- a/comwell_key_app/lib/up_sales/mappers/room_upgrade_mapper.dart
+++ b/comwell_key_app/lib/up_sales/mappers/room_upgrade_mapper.dart
@@ -1,4 +1,5 @@
import 'package:comwell_key_app/up_sales/models/dto/room_upgrade_dto.dart';
+import 'package:comwell_key_app/up_sales/models/facility_type.dart';
import 'package:comwell_key_app/up_sales/models/room_upgrade.dart';
@@ -13,6 +14,7 @@ extension RoomUpgradeDTOMapper on RoomUpgradeDTO {
description: description,
tags: tags,
quantity: quantity ?? 0,
+ facilityTypes: facilityTypes.map((e) => FacilityType.fromJson(e.toJson())).toList(),
);
}
diff --git a/comwell_key_app/lib/up_sales/models/addon_upgrade.dart b/comwell_key_app/lib/up_sales/models/addon_upgrade.dart
index b8ec1099..7939a91c 100644
--- a/comwell_key_app/lib/up_sales/models/addon_upgrade.dart
+++ b/comwell_key_app/lib/up_sales/models/addon_upgrade.dart
@@ -44,15 +44,4 @@ class AddOnUpgrade extends Upgrade {
}
}
-enum FacilityType {
- bed,
- electronics,
- bathroom,
- business,
- service,
- room;
- static FacilityType fromString(String value) {
- return FacilityType.values.firstWhere((e) => e.name == value.toLowerCase());
- }
-}
diff --git a/comwell_key_app/lib/up_sales/models/dto/room_upgrade_dto.dart b/comwell_key_app/lib/up_sales/models/dto/room_upgrade_dto.dart
index bd91282e..643ba20c 100644
--- a/comwell_key_app/lib/up_sales/models/dto/room_upgrade_dto.dart
+++ b/comwell_key_app/lib/up_sales/models/dto/room_upgrade_dto.dart
@@ -1,4 +1,5 @@
-import 'package:comwell_key_app/up_sales/models/dto/addon_upgrade_dto.dart';
+import 'package:comwell_key_app/up_sales/models/facility_type.dart';
+import 'package:comwell_key_app/up_sales/models/room_upgrade.dart';
import 'package:comwell_key_app/utils/json.dart';
import 'package:json_annotation/json_annotation.dart';
@@ -14,6 +15,7 @@ class RoomUpgradeDTO {
final String description;
final Iterable<String> tags;
final int? quantity;
+ final List<FacilityType> facilityTypes;
RoomUpgradeDTO(
{required this.id,
@@ -23,7 +25,8 @@ class RoomUpgradeDTO {
required this.description,
required this.tags,
required this.currency,
- this.quantity});
+ this.quantity,
+ required this.facilityTypes});
Json toJson() => _$RoomUpgradeDTOToJson(this);
diff --git a/comwell_key_app/lib/up_sales/models/room_upgrade.dart b/comwell_key_app/lib/up_sales/models/room_upgrade.dart
index e3e81cf3..80b63796 100644
--- a/comwell_key_app/lib/up_sales/models/room_upgrade.dart
+++ b/comwell_key_app/lib/up_sales/models/room_upgrade.dart
@@ -1,6 +1,9 @@
+import 'package:comwell_key_app/up_sales/models/addon_upgrade.dart';
+import 'package:comwell_key_app/up_sales/models/facility_type.dart';
import 'package:comwell_key_app/up_sales/models/upgrade.dart';
class RoomUpgrade extends Upgrade {
+ final List<FacilityType> facilityTypes;
RoomUpgrade({
required super.id,
required super.name,
@@ -10,6 +13,7 @@ class RoomUpgrade extends Upgrade {
required super.description,
required super.tags,
required super.quantity,
+ required this.facilityTypes,
});
RoomUpgrade copyWith({
@@ -21,6 +25,7 @@ class RoomUpgrade extends Upgrade {
Iterable<String>? tags,
String? currency,
int? quantity,
+ List<FacilityType>? facilityTypes,
}) {
return RoomUpgrade(
name: name ?? this.name,
@@ -31,6 +36,7 @@ class RoomUpgrade extends Upgrade {
tags: tags ?? this.tags,
currency: currency ?? this.currency,
quantity: quantity ?? this.quantity,
+ facilityTypes: facilityTypes ?? this.facilityTypes,
);
}
@@ -44,12 +50,15 @@ class RoomUpgrade extends Upgrade {
[name, price, images, description, id, tags, currency];
}
-enum UpgradeType {
- service,
- room,
- other;
+// enum FacilityType {
+// bed,
+// electronics,
+// bathroom,
+// business,
+// service,
+// room;
- static UpgradeType fromString(String value) {
- return UpgradeType.values.firstWhere((e) => e.name == value);
- }
-}
+// static FacilityType fromString(String value) {
+// return FacilityType.values.firstWhere((e) => e.name == value.toLowerCase());
+// }
+// }
diff --git a/comwell_key_app/lib/up_sales/pages/room_upgrade_page.dart b/comwell_key_app/lib/up_sales/pages/room_upgrade_page.dart
index 3439f356..69a3a04b 100644
--- a/comwell_key_app/lib/up_sales/pages/room_upgrade_page.dart
+++ b/comwell_key_app/lib/up_sales/pages/room_upgrade_page.dart
@@ -2,9 +2,12 @@ import 'package:comwell_key_app/common/components/comwell_app_bar.dart';
import 'package:comwell_key_app/common/const.dart';
import 'package:comwell_key_app/themes/light_theme.dart';
import 'package:comwell_key_app/common/components/room_image_carousel.dart';
+import 'package:comwell_key_app/up_sales/components/facilities_bottom_sheet.dart';
+import 'package:comwell_key_app/up_sales/components/facility_icon_text.dart';
import 'package:comwell_key_app/up_sales/components/up_sales_bottom_button.dart';
import 'package:comwell_key_app/up_sales/cubit/up_sales_cubit.dart';
import 'package:comwell_key_app/up_sales/cubit/up_sales_state.dart';
+import 'package:comwell_key_app/up_sales/models/facility_type.dart';
import 'package:comwell_key_app/up_sales/models/room_upgrade_list.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
@@ -21,7 +24,7 @@ class RoomUpgradePage extends StatefulWidget {
class _RoomUpgradePageState extends State<RoomUpgradePage> {
bool _isExpanded = false;
- List<String> get allFacilities => [...widget.roomUpgradeList.roomUpgrade?.tags ?? []];
+ List<FacilityType> get allFacilities => [...widget.roomUpgradeList.roomUpgrade?.facilityTypes ?? []];
@override
Widget build(BuildContext context) {
@@ -109,9 +112,9 @@ class _RoomUpgradePageState extends State<RoomUpgradePage> {
spacing: 8,
runSpacing: 8,
children: [
- // ...widget.roomUpgradeList.roomUpgrade?.facilities.map((f) =>
- // FacilityIconText(
- // facility: f, showDivider: true)),
+ ...widget.roomUpgradeList.roomUpgrade?.facilityTypes.map((f) =>
+ FacilityIconText(
+ facility: f, showDivider: true)).toList() ?? [],
GestureDetector(
onTap: () => _showFacilitiesSheet(context),
child: Padding(
@@ -186,13 +189,12 @@ class _RoomUpgradePageState extends State<RoomUpgradePage> {
borderRadius: BorderRadius.vertical(top: Radius.circular(24)),
),
builder: (context) {
- // return ConstrainedBox(
- // constraints: BoxConstraints(
- // maxHeight: height - kComwellAppBarHeight,
- // ),
- // child: FacilitiesBottomSheet(facilities: allFacilities),
- // );
- return const SizedBox.shrink();
+ return ConstrainedBox(
+ constraints: BoxConstraints(
+ maxHeight: MediaQuery.of(context).size.height - kComwellAppBarHeight,
+ ),
+ child: FacilitiesBottomSheet(facilities: allFacilities),
+ );
},
);
}