6177214e-ce7c-49e3-99de-ff9721b26f63 — Commit 6aa61d15
Changed files
.../components/booking_details_bottom_sheet.dart | 1 - .../pregistration/cubit/preregistration_cubit.dart | 44 ++++---- .../pregistration/cubit/preregistration_state.dart | 29 +++-- .../pages/prereg_up_sales_catalog_page.dart | 15 +-- .../lib/pregistration/preregistration_flow.dart | 6 +- comwell_key_app/lib/routing/app_router.dart | 6 +- .../components/catalog/addon_upgrade_catalog.dart | 46 +++----- .../components/catalog/room_upgrade_catalog.dart | 1 - .../components/catalog/service_catalog.dart | 5 +- .../up_sales/components/generic_item_counter.dart | 74 +++++++++++++ .../lib/up_sales/components/item_counter.dart | 73 ------------- .../components/up_sales_bottom_button.dart | 8 -- .../components/up_sales_services_widget.dart | 4 +- .../components/up_sales_upgrades_widget.dart | 12 +-- .../lib/up_sales/cubit/up_sales_cubit.dart | 56 ++++------ .../lib/up_sales/cubit/up_sales_state.dart | 117 ++++----------------- .../lib/up_sales/models/addon_upgrade.dart | 12 ++- comwell_key_app/lib/up_sales/models/upgrade.dart | 13 ++- .../lib/up_sales/pages/addon_upgrade_page.dart | 66 +++++++----- .../lib/up_sales/pages/room_upgrade_page.dart | 4 - .../lib/up_sales/pages/services_upgrade_page.dart | 9 +- comwell_key_app/lib/up_sales/up_sales_catalog.dart | 53 +++------- 22 files changed, 254 insertions(+), 400 deletions(-)
Diff
diff --git a/comwell_key_app/lib/booking_details/components/booking_details_bottom_sheet.dart b/comwell_key_app/lib/booking_details/components/booking_details_bottom_sheet.dart
index d211bde4..6a66d9a9 100644
--- a/comwell_key_app/lib/booking_details/components/booking_details_bottom_sheet.dart
+++ b/comwell_key_app/lib/booking_details/components/booking_details_bottom_sheet.dart
@@ -175,7 +175,6 @@ class BookingDetailsBottomSheet extends StatelessWidget {
booking: cubit.booking,
upSales: cubit.upSales!.addOnUpgrades,
height: 252,
- selectedUpSales: cubit.state.selectedUpSales,
showRadioButton: false,
isSinglePurchase: true,
onTap: (upgrade) {
diff --git a/comwell_key_app/lib/pregistration/cubit/preregistration_cubit.dart b/comwell_key_app/lib/pregistration/cubit/preregistration_cubit.dart
index b94b5c89..f275d7e5 100644
--- a/comwell_key_app/lib/pregistration/cubit/preregistration_cubit.dart
+++ b/comwell_key_app/lib/pregistration/cubit/preregistration_cubit.dart
@@ -9,6 +9,7 @@ import 'package:comwell_key_app/profile_settings/repostiory/profile_settings_rep
import 'package:comwell_key_app/tracking/comwell_tracking.dart';
import 'package:comwell_key_app/tracking/models/analytics_event_item.dart';
import 'package:comwell_key_app/up_sales/models/addon_list.dart';
+import 'package:comwell_key_app/up_sales/models/addon_upgrade.dart';
import 'package:comwell_key_app/up_sales/models/room_upgrade.dart';
import 'package:comwell_key_app/up_sales/models/upgrade.dart';
import 'package:comwell_key_app/up_sales/models/up_sales.dart';
@@ -409,35 +410,18 @@ class PreregistrationCubit extends Cubit<PreregistrationState> {
}
}
- void increment() {
- // emit(state.copyWith(quantity: state.quantity + 1));
- }
-
- void decrement() {
- // if (state.addOnUpgrades.firstWhere((e) => e.id == .id).quantity > 0 || state.selectedUpSales.isNotEmpty) {
- // emit(state.copyWith(quantity: state.quantity - 1));
- // }
- }
-
void onContinue() {
emit(state.copyWith(selected: false));
}
- void updateUpgradeQuantity(Upgrade upgrade, int quantity) {
- if (quantity == 0) {
- final filteredUpSales =
- state.selectedUpSales.where((item) => item.id != upgrade.id).toList();
- emit(state.copyWith(selectedUpSales: filteredUpSales));
- return;
- } else {
- final existingItems =
- state.selectedUpSales.where((item) => item.id != upgrade.id).toList();
- final newSelectedUpSales = [
- ...existingItems,
- ...List.generate(quantity, (_) => upgrade)
- ];
- emit(state.copyWith(selectedUpSales: newSelectedUpSales));
- }
+ void updateAddonUpgradeQuantity(AddOnUpgrade upgrade, int quantity) {
+ emit(state.updateSelectedUpgradeWithQuantity(upgrade, quantity));
+ }
+
+ List<AddOnUpgrade> get selectedAddOnUpgrades {
+ return upSales.addOnUpgrades
+ .where((upgrade) => upgrade.quantity > 0 || upgrade.isSelected)
+ .toList();
}
int extrasTotalQuantity(Upgrade upgrade) {
@@ -445,4 +429,14 @@ class PreregistrationCubit extends Cubit<PreregistrationState> {
.where((element) => element.id == upgrade.id)
.length;
}
+
+ void increment(AddOnUpgrade upgrade) {
+ emit(state.copyWith(selectedUpSales: [...state.selectedUpSales, upgrade]));
+ }
+
+ void decrement(AddOnUpgrade upgrade) {
+ emit(state.copyWith(
+ selectedUpSales:
+ state.selectedUpSales.where((e) => e.id != upgrade.id).toList()));
+ }
}
diff --git a/comwell_key_app/lib/pregistration/cubit/preregistration_state.dart b/comwell_key_app/lib/pregistration/cubit/preregistration_state.dart
index 0f267bb4..dde18d6c 100644
--- a/comwell_key_app/lib/pregistration/cubit/preregistration_state.dart
+++ b/comwell_key_app/lib/pregistration/cubit/preregistration_state.dart
@@ -106,17 +106,34 @@ class PreregistrationState extends Equatable {
}
}
+ PreregistrationState addQuantity(AddOnUpgrade upgrade) {
+ return copyWith(
+ availableAddOnUpgrades: availableAddOnUpgrades
+ .map((e) =>
+ e.id == upgrade.id ? e.copyWith(quantity: e.quantity + 1) : e)
+ .toList(),
+ selectedRoomUpgrade: selectedRoomUpgrade);
+ }
+
PreregistrationState updateRoomUpgrade({required RoomUpgrade roomUpgrade}) =>
copyWith(selectedRoomUpgrade: roomUpgrade.id);
- PreregistrationState removeRoomUpgrade() =>
- copyWith(selectedRoomUpgrade: '');
+ PreregistrationState removeRoomUpgrade() => copyWith(selectedRoomUpgrade: '');
+
+ PreregistrationState removeSelectedUpSales({required Upgrade upgrade}) =>
+ copyWith(
+ selectedUpSales:
+ selectedUpSales.where((item) => item.id != upgrade.id).toList(),
+ selectedRoomUpgrade: selectedRoomUpgrade);
+
- PreregistrationState removeSelectedUpSales({required Upgrade upgrade}) => copyWith(
- selectedUpSales:
- selectedUpSales.where((item) => item.id != upgrade.id).toList(),
- selectedRoomUpgrade: selectedRoomUpgrade);
+ PreregistrationState updateSelectedUpgradeWithQuantity(AddOnUpgrade upgrade, int quantity) {
+ final index = selectedUpSales.indexWhere((e) => e.id == upgrade.id);
+ selectedUpSales[index] = upgrade.copyWith(quantity: quantity);
+
+ return copyWith(selectedUpSales: selectedUpSales);
+ }
PreregistrationState copyWith({
bool? isLoading,
diff --git a/comwell_key_app/lib/pregistration/pages/prereg_up_sales_catalog_page.dart b/comwell_key_app/lib/pregistration/pages/prereg_up_sales_catalog_page.dart
index e458442a..364b31dd 100644
--- a/comwell_key_app/lib/pregistration/pages/prereg_up_sales_catalog_page.dart
+++ b/comwell_key_app/lib/pregistration/pages/prereg_up_sales_catalog_page.dart
@@ -1,18 +1,11 @@
-import 'package:comwell_key_app/routing/app_routes.dart';
import 'package:comwell_key_app/up_sales/components/catalog/addon_upgrade_catalog.dart';
import 'package:comwell_key_app/up_sales/components/catalog/room_upgrade_catalog.dart';
import 'package:comwell_key_app/up_sales/components/catalog/service_catalog.dart';
import 'package:comwell_key_app/pregistration/cubit/preregistration_cubit.dart';
import 'package:comwell_key_app/pregistration/cubit/preregistration_state.dart';
-import 'package:comwell_key_app/up_sales/models/upgrade.dart';
-import 'package:comwell_key_app/up_sales/models/addon_upgrade.dart';
-import 'package:comwell_key_app/up_sales/models/room_upgrade.dart';
-import 'package:comwell_key_app/up_sales/models/room_upgrade_extra.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';
import 'package:flutter_bloc/flutter_bloc.dart';
-import 'package:go_router/go_router.dart';
class PreregUpSalesCatalogPage extends StatelessWidget {
const PreregUpSalesCatalogPage({super.key});
@@ -65,7 +58,6 @@ class PreregUpSalesCatalogPage extends StatelessWidget {
ServiceCatalog(
booking: cubit.booking,
upSales: serviceUpgrades,
- selectedUpSales: state.selectedUpSales,
onServiceSelected: (upgrade, isSelected) {
if (isSelected) {
cubit.removeUpgrade(upgrade);
@@ -125,13 +117,10 @@ class PreregUpSalesCatalogPage extends StatelessWidget {
const SizedBox(height: 8),
AddOnUpgradeCatalog(
addOnUpgrades: addonUpgrade,
- selectedUpSales: cubit.state.selectedUpSales
- .whereType<AddOnUpgrade>()
- .toList(),
extrasTotalPrice: cubit.extrasTotalPrice,
selectedRoomUpgrade: selectedRoomUpgrade?.id ?? '',
- onAddOnUpgradeSelected: (upgrade) {
- cubit.addSelected(upgrade);
+ onAddOnUpgradeSelected: (upgrade, quantity) {
+ cubit.updateAddonUpgradeQuantity(upgrade, quantity);
},
),
],
diff --git a/comwell_key_app/lib/pregistration/preregistration_flow.dart b/comwell_key_app/lib/pregistration/preregistration_flow.dart
index ca06e2a4..e6953263 100644
--- a/comwell_key_app/lib/pregistration/preregistration_flow.dart
+++ b/comwell_key_app/lib/pregistration/preregistration_flow.dart
@@ -59,9 +59,9 @@ class _PreregistrationFlowState extends State<PreregistrationFlow> {
style: ButtonStyle(
backgroundColor:
WidgetStateProperty.resolveWith((states) {
- if (states.contains(WidgetState.disabled)) {
- return Colors.grey;
- }
+ // if (states.contains(WidgetState.disabled)) {
+ // return Colors.grey;
+ // }
return const Color(0xffAA8D65);
}),
foregroundColor:
diff --git a/comwell_key_app/lib/routing/app_router.dart b/comwell_key_app/lib/routing/app_router.dart
index a52cf9e4..83ed359d 100644
--- a/comwell_key_app/lib/routing/app_router.dart
+++ b/comwell_key_app/lib/routing/app_router.dart
@@ -449,13 +449,11 @@ GoRouter goRouter() {
path: "/${AppRoutes.addonUpgrade.name}",
name: AppRoutes.addonUpgrade.name,
builder: (context, state) {
- //with extra
final extras = state.extra as List<dynamic>;
return AddonUpgradePage(
addonUpgrade: extras[0] as AddOnUpgrade,
- selectedUpSales: extras[1] as List<Upgrade>,
- extrasTotalPrice: extras[2] as int,
- selectedRoomUpgrade: extras[3] as String,
+ extrasTotalPrice: extras[1] as int,
+ selectedRoomUpgrade: extras[2] as String,
);
}),
GoRoute(
diff --git a/comwell_key_app/lib/up_sales/components/catalog/addon_upgrade_catalog.dart b/comwell_key_app/lib/up_sales/components/catalog/addon_upgrade_catalog.dart
index 069881c2..ebede4ee 100644
--- a/comwell_key_app/lib/up_sales/components/catalog/addon_upgrade_catalog.dart
+++ b/comwell_key_app/lib/up_sales/components/catalog/addon_upgrade_catalog.dart
@@ -1,59 +1,40 @@
import 'package:comwell_key_app/routing/app_routes.dart';
-import 'package:comwell_key_app/themes/light_theme.dart';
import 'package:comwell_key_app/up_sales/components/up_sales_upgrades_widget.dart';
import 'package:comwell_key_app/up_sales/models/addon_upgrade.dart';
-import 'package:comwell_key_app/up_sales/models/upgrade.dart';
-import 'package:comwell_key_app/up_sales/models/room_upgrade_extra.dart';
-import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
class AddOnUpgradeCatalog extends StatelessWidget {
final List<AddOnUpgrade> addOnUpgrades;
- final List<AddOnUpgrade> selectedUpSales;
- final void Function(AddOnUpgrade)? onAddOnUpgradeSelected;
+ final void Function(AddOnUpgrade, int) onAddOnUpgradeSelected;
final int extrasTotalPrice;
- final String selectedRoomUpgrade;
+ final String selectedRoomUpgrade;
const AddOnUpgradeCatalog({
- super.key,
- required this.addOnUpgrades,
- required this.selectedUpSales,
- this.onAddOnUpgradeSelected,
+ super.key,
+ required this.addOnUpgrades,
+ required this.onAddOnUpgradeSelected,
required this.extrasTotalPrice,
required this.selectedRoomUpgrade,
});
@override
Widget build(BuildContext context) {
- final theme = Theme.of(context);
-
-
- if (addOnUpgrades.isEmpty) {
- return Padding(
- padding: const EdgeInsets.symmetric(horizontal: 16),
- child: Text('no_room_upgrades_available'.tr(),
- style: theme.textTheme.headlineMedium
- ?.copyWith(color: colorHeadlineText)),
- );
- }
-
return SizedBox(
height: 289,
child: ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: addOnUpgrades.length,
itemBuilder: (context, index) {
- final isSelected = selectedUpSales.any((e) => e.id == addOnUpgrades.elementAt(index).id);
-
-
+ final isSelected = addOnUpgrades.elementAt(index).isSelected;
return GestureDetector(
onTap: () async {
- final result = await context.pushNamed(
- AppRoutes.addonUpgrade.name,
- extra: [addOnUpgrades.elementAt(index), selectedUpSales, extrasTotalPrice, selectedRoomUpgrade]
- );
- if (result is AddOnUpgrade) {
- onAddOnUpgradeSelected?.call(result);
+ final quantity = await context.pushNamed(AppRoutes.addonUpgrade.name, extra: [
+ addOnUpgrades.elementAt(index),
+ extrasTotalPrice,
+ selectedRoomUpgrade,
+ ]);
+ if (quantity is int) {
+ onAddOnUpgradeSelected(addOnUpgrades.elementAt(index), quantity);
}
},
child: UpSalesUpgradesWidget(
@@ -63,7 +44,6 @@ class AddOnUpgradeCatalog extends StatelessWidget {
isSelected: isSelected,
routeName: AppRoutes.addonUpgrade.name,
showCounter: true,
- selectedUpSales: selectedUpSales,
onTap: (upgrade) {},
),
);
diff --git a/comwell_key_app/lib/up_sales/components/catalog/room_upgrade_catalog.dart b/comwell_key_app/lib/up_sales/components/catalog/room_upgrade_catalog.dart
index 3ccea389..d81f6754 100644
--- a/comwell_key_app/lib/up_sales/components/catalog/room_upgrade_catalog.dart
+++ b/comwell_key_app/lib/up_sales/components/catalog/room_upgrade_catalog.dart
@@ -75,7 +75,6 @@ class RoomUpgradeCatalog extends StatelessWidget {
isSelected: isSelected,
routeName: AppRoutes.roomUpgrade.name,
showCounter: false,
- selectedUpSales: selectedUpSales,
onTap: (upgrade) {
onTap?.call(upgrade);
},
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 26662e86..a687704b 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
@@ -15,7 +15,6 @@ class ServiceCatalog extends StatelessWidget {
final List<AddOnUpgrade> upSales;
final double? height;
final void Function(Upgrade) onTap;
- final List<Upgrade> selectedUpSales;
final bool showRadioButton;
final void Function(AddOnUpgrade, bool) onServiceSelected;
final Booking booking;
@@ -25,7 +24,6 @@ class ServiceCatalog extends StatelessWidget {
required this.upSales,
this.height,
required this.onTap,
- required this.selectedUpSales,
this.showRadioButton = true,
required this.onServiceSelected,
required this.booking,
@@ -41,7 +39,7 @@ class ServiceCatalog extends StatelessWidget {
scrollDirection: Axis.horizontal,
itemCount: upSales.length,
itemBuilder: (context, index) {
- final isSelected = selectedUpSales.any((e) => e.id == upSales.elementAt(index).id);
+ final isSelected = upSales.elementAt(index).isSelected;
final isPopular = upSales.elementAt(index).tags.contains('popular');
return GestureDetector(
onTap: () async {
@@ -64,7 +62,6 @@ class ServiceCatalog extends StatelessWidget {
showRadioButton: showRadioButton,
width: kUpSalesServiceWidgetWidthLarge,
upgrade: upSales.elementAt(index),
- selectedUpSales: selectedUpSales,
isSelected: isSelected,
isPopular: isPopular,
onTap: onTap,
diff --git a/comwell_key_app/lib/up_sales/components/generic_item_counter.dart b/comwell_key_app/lib/up_sales/components/generic_item_counter.dart
new file mode 100644
index 00000000..82da17bc
--- /dev/null
+++ b/comwell_key_app/lib/up_sales/components/generic_item_counter.dart
@@ -0,0 +1,74 @@
+import 'package:comwell_key_app/up_sales/models/addon_upgrade.dart';
+import 'package:flutter/material.dart';
+
+class GenericItemCounter extends StatelessWidget {
+ final AddOnUpgrade addonUpgrade;
+ final int quantity;
+ final VoidCallback onIncrement;
+ final VoidCallback onDecrement;
+
+ const GenericItemCounter({
+ super.key,
+ required this.addonUpgrade,
+ required this.quantity,
+ required this.onIncrement,
+ required this.onDecrement,
+ });
+
+ @override
+ Widget build(BuildContext context) {
+ final theme = Theme.of(context);
+
+ return Container(
+ color: Theme.of(context).colorScheme.surface,
+ child: Padding(
+ padding: const EdgeInsets.only(
+ left: 16.0,
+ right: 16.0,
+ top: 16.0,
+ bottom: 40,
+ ),
+ child: Row(
+ crossAxisAlignment: CrossAxisAlignment.center,
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Row(
+ children: [
+ InkWell(
+ onTap: onDecrement,
+ borderRadius: BorderRadius.circular(24),
+ child: Container(
+ width: 44,
+ height: 44,
+ decoration: BoxDecoration(
+ color: Theme.of(context).colorScheme.onSurface,
+ shape: BoxShape.circle,
+ ),
+ child: Icon(Icons.remove, color: Theme.of(context).colorScheme.surface),
+ ),
+ ),
+ const SizedBox(width: 16),
+ Text('$quantity', style: theme.textTheme.headlineMedium),
+ const SizedBox(width: 16),
+ // Plus button
+ InkWell(
+ onTap: onIncrement,
+ borderRadius: BorderRadius.circular(24),
+ child: Container(
+ width: 44,
+ height: 44,
+ decoration: BoxDecoration(
+ color: Theme.of(context).colorScheme.onSurface,
+ shape: BoxShape.circle,
+ ),
+ child: Icon(Icons.add, color: Theme.of(context).colorScheme.surface),
+ ),
+ ),
+ ],
+ ),
+ ],
+ ),
+ ),
+ );
+ }
+}
\ No newline at end of file
diff --git a/comwell_key_app/lib/up_sales/components/item_counter.dart b/comwell_key_app/lib/up_sales/components/item_counter.dart
deleted file mode 100644
index fe7a59ba..00000000
--- a/comwell_key_app/lib/up_sales/components/item_counter.dart
+++ /dev/null
@@ -1,73 +0,0 @@
-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/addon_upgrade.dart';
-import 'package:comwell_key_app/up_sales/models/room_upgrade_extra.dart';
-import 'package:flutter/material.dart';
-import 'package:flutter_bloc/flutter_bloc.dart';
-
-class ItemCounter extends StatelessWidget {
- final AddOnUpgrade addonUpgrade;
- final int quantity;
- const ItemCounter({super.key, required this.addonUpgrade, required this.quantity});
-
- @override
- Widget build(BuildContext context) {
- return BlocBuilder<UpSalesCubit, UpSalesState>(builder: (context, state) {
- final theme = Theme.of(context);
- final cubit = context.read<UpSalesCubit>();
-
- return Container(
- color: Theme.of(context).colorScheme.surface,
- child: Padding(
- padding: const EdgeInsets.only(
- left: 16.0,
- right: 16.0,
- top: 16.0,
- bottom: 40,
- ),
- child: Row(
- crossAxisAlignment: CrossAxisAlignment.center,
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: [
- Row(
- children: [
- InkWell(
- onTap: () => cubit.decrement(addonUpgrade),
- borderRadius: BorderRadius.circular(24),
- child: Container(
- width: 44,
- height: 44,
- decoration: BoxDecoration(
- color: Theme.of(context).colorScheme.onSurface,
- shape: BoxShape.circle,
- ),
- child: Icon(Icons.remove, color: Theme.of(context).colorScheme.surface),
- ),
- ),
- const SizedBox(width: 16),
- Text('$quantity',
- style: theme.textTheme.headlineMedium),
- const SizedBox(width: 16),
- // Plus button
- InkWell(
- onTap: () => cubit.increment(addonUpgrade),
- borderRadius: BorderRadius.circular(24),
- child: Container(
- width: 44,
- height: 44,
- decoration: BoxDecoration(
- color: Theme.of(context).colorScheme.onSurface,
- shape: BoxShape.circle,
- ),
- child: Icon(Icons.add, color: Theme.of(context).colorScheme.surface),
- ),
- ),
- ],
- ),
- ],
- ),
- ),
- );
- });
- }
-}
diff --git a/comwell_key_app/lib/up_sales/components/up_sales_bottom_button.dart b/comwell_key_app/lib/up_sales/components/up_sales_bottom_button.dart
index 4a139d0a..05c25910 100644
--- a/comwell_key_app/lib/up_sales/components/up_sales_bottom_button.dart
+++ b/comwell_key_app/lib/up_sales/components/up_sales_bottom_button.dart
@@ -1,16 +1,10 @@
-import 'package:comwell_key_app/routing/app_routes.dart';
import 'package:comwell_key_app/themes/light_theme.dart';
-import 'package:comwell_key_app/up_sales/models/room_upgrade.dart';
-import 'package:comwell_key_app/up_sales/models/upgrade.dart';
import 'package:flutter/material.dart';
-import 'package:go_router/go_router.dart';
class UpSalesBottomButton extends StatelessWidget {
final List<Widget> children;
final VoidCallback onContinue;
- final VoidCallback? onAddUpSale;
final VoidCallback? onSinglePurchaseContinue;
- final List<Upgrade> selectedUpSales;
final int extrasTotalPrice;
final String selectedRoomUpgrade;
final bool isSinglePurchase;
@@ -18,9 +12,7 @@ class UpSalesBottomButton extends StatelessWidget {
super.key,
required this.onContinue,
required this.children,
- required this.selectedUpSales,
required this.extrasTotalPrice,
- this.onAddUpSale,
required this.selectedRoomUpgrade,
this.onSinglePurchaseContinue,
this.isSinglePurchase = false,
diff --git a/comwell_key_app/lib/up_sales/components/up_sales_services_widget.dart b/comwell_key_app/lib/up_sales/components/up_sales_services_widget.dart
index edd8be24..35f51f00 100644
--- a/comwell_key_app/lib/up_sales/components/up_sales_services_widget.dart
+++ b/comwell_key_app/lib/up_sales/components/up_sales_services_widget.dart
@@ -14,7 +14,6 @@ class UpSalesServicesWidget extends StatelessWidget {
final bool? isPopular;
final void Function(Upgrade)? onTap;
final bool showRadioButton;
- final List<Upgrade>? selectedUpSales;
const UpSalesServicesWidget(
{super.key,
this.width = 328,
@@ -24,7 +23,6 @@ class UpSalesServicesWidget extends StatelessWidget {
this.isPopular,
this.onTap,
this.showRadioButton = true,
- this.selectedUpSales,
});
@override
@@ -73,7 +71,7 @@ class UpSalesServicesWidget extends StatelessWidget {
const SizedBox(width: 8),
if (showRadioButton)
ComwellRadioButton(
- selected: selectedUpSales?.any((e) => e.id == upgrade.id) ?? false,
+ selected: isSelected ?? false,
onTap: () {
onTap?.call(upgrade);
}),
diff --git a/comwell_key_app/lib/up_sales/components/up_sales_upgrades_widget.dart b/comwell_key_app/lib/up_sales/components/up_sales_upgrades_widget.dart
index d69156c1..7deb62f6 100644
--- a/comwell_key_app/lib/up_sales/components/up_sales_upgrades_widget.dart
+++ b/comwell_key_app/lib/up_sales/components/up_sales_upgrades_widget.dart
@@ -14,7 +14,6 @@ class UpSalesUpgradesWidget extends StatelessWidget {
final String routeName;
final bool showCounter;
final void Function(Upgrade) onTap;
- final List<Upgrade> selectedUpSales;
const UpSalesUpgradesWidget({
super.key,
this.width = 328,
@@ -24,20 +23,11 @@ class UpSalesUpgradesWidget extends StatelessWidget {
required this.routeName,
this.showCounter = false,
required this.onTap,
- required this.selectedUpSales,
});
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
-
- // Find the AddOnUpgrade with the same ID and get its quantity
- final quantity = showCounter
- ? selectedUpSales
- .where((element) => element.id == upgrade.id)
- .firstOrNull?.quantity ?? 0
- : 0;
-
return AnimatedContainer(
duration: const Duration(milliseconds: 300),
curve: Curves.easeInOut,
@@ -120,7 +110,7 @@ class UpSalesUpgradesWidget extends StatelessWidget {
),
const SizedBox(width: 8),
showCounter
- ? UpgradesCounter(quantity: quantity)
+ ? UpgradesCounter(quantity: upgrade.quantity)
: ComwellRadioButton(
selected:
isSelected,
diff --git a/comwell_key_app/lib/up_sales/cubit/up_sales_cubit.dart b/comwell_key_app/lib/up_sales/cubit/up_sales_cubit.dart
index 73c8a3de..28f83550 100644
--- a/comwell_key_app/lib/up_sales/cubit/up_sales_cubit.dart
+++ b/comwell_key_app/lib/up_sales/cubit/up_sales_cubit.dart
@@ -20,18 +20,12 @@ class UpSalesCubit extends Cubit<UpSalesState> {
required this.booking})
: super(UpSalesState.initial());
- void toggleSelected(String index) {
- emit(state.copyWith(
- selected: !state.selected,
- availableRoomUpgrades: upSales.roomUpgrades));
- }
void init() async {
emit(UpSalesState(
selected: false,
addOnUpgrades: upSales.addOnUpgrades,
availableRoomUpgrades: upSales.roomUpgrades,
- selectedUpSales: const [],
selectedRoomUpgrade: '',
isLoading: true,
processingState: UpSalesProcessingStateNotStarted(),
@@ -43,42 +37,29 @@ class UpSalesCubit extends Cubit<UpSalesState> {
}
}
- void increment(AddOnUpgrade upgrade) {
- emit(state.addQuantity(upgrade));
- }
-
- void decrement(AddOnUpgrade upgrade) {
- emit(state.removeQuantity(upgrade));
- }
-
void onContinue() {
emit(state.copyWith(selected: false));
}
- void updateAddonUpgradeQuantity(AddOnUpgrade upgrade) {
- emit(state.updateSelectedUpgradeWithQuantity(upgrade));
+ void updateAddonUpgradeQuantity(AddOnUpgrade upgrade, int quantity) {
+ emit(state.updateSelectedUpgradeWithQuantity(upgrade, quantity));
}
- void addSelected(Upgrade upgrade) {
+ void toggleSelectedUpgrade(Upgrade upgrade) {
if (upgrade is RoomUpgrade) {
emit(state.updateRoomUpgrade(roomUpgrade: upgrade));
} else {
- emit(state.addSelectedUpsales(upgrade: upgrade));
- }
- }
-
- void removeUpgrade(Upgrade upgrade) {
- if (upgrade is RoomUpgrade) {
- emit(state.removeRoomUpgrade());
- } else {
- emit(state.removeSelectedUpSales(upgrade: upgrade));
+ print("qqq upgrade 1 ${state.addOnUpgrades.where((e) => e.id == upgrade.id)}");
+ emit(state.toggleSelectedAddonUpsale(upgrade: upgrade as AddOnUpgrade));
+ print("qqq upgrade 2 ${state.addOnUpgrades.where((e) => e.id == upgrade.id)}");
}
}
int get extrasTotalPrice {
- //This is the total price of the selected up sales and the price of the selected room upgrade if it is selected
- return state.selectedUpSales
- .fold(0, (sum, upgrade) => sum + upgrade.price * upgrade.quantity) +
+ //This is the total price of the selected up sales and the price of the selected
+ //room upgrade if it is selected
+ return selectedAddOnUpgrades.fold(
+ 0, (sum, upgrade) => sum + upgrade.price * upgrade.quantity) +
(state.selectedRoomUpgrade.isNotEmpty
? upSales.roomUpgrades
.firstWhere((e) => e.id == state.selectedRoomUpgrade)
@@ -87,18 +68,26 @@ class UpSalesCubit extends Cubit<UpSalesState> {
}
int extrasTotalQuantity(Upgrade upgrade) {
- return state.selectedUpSales
+ return selectedAddOnUpgrades
.where((element) => element.id == upgrade.id)
.length;
}
+ List<AddOnUpgrade> get selectedAddOnUpgrades {
+ final selectedUpgrades = state.addOnUpgrades
+ .where((upgrade) => upgrade.quantity > 0 || upgrade.isSelected)
+ .toList();
+ return selectedUpgrades;
+ }
+
void toggleTermsAccepted() {
emit(state.copyWith(termsAccepted: !state.termsAccepted));
}
Future<void> addUpSalesToBooking(
- List<Upgrade> selectedUpSales, RoomUpgrade? selectedRoomUpgrade) async {
-
+ List<Upgrade> selectedUpSales,
+ RoomUpgrade? selectedRoomUpgrade,
+ ) async {
emit(state.processingStateUpdated(UpSalesProcessingStateProcessing()));
try {
// Extract RoomUpgrade from selectedUpSales to get the roomType
@@ -112,9 +101,8 @@ class UpSalesCubit extends Cubit<UpSalesState> {
await upSaleRepository.addUpSalesToBooking(
booking.confirmationId, booking.hotelCode, roomType, addonList);
- await Future.delayed(const Duration(seconds: 2));
+ await Future<void>.delayed(const Duration(seconds: 2));
emit(state.processingStateUpdated(UpSalesProcessingStateSuccess()));
-
} catch (e) {
print("here");
emit(state.processingStateUpdated(UpSalesProcessingStateError()));
diff --git a/comwell_key_app/lib/up_sales/cubit/up_sales_state.dart b/comwell_key_app/lib/up_sales/cubit/up_sales_state.dart
index e8499a2b..82030cbe 100644
--- a/comwell_key_app/lib/up_sales/cubit/up_sales_state.dart
+++ b/comwell_key_app/lib/up_sales/cubit/up_sales_state.dart
@@ -9,7 +9,6 @@ class UpSalesState extends Equatable {
final bool selected;
final List<AddOnUpgrade> addOnUpgrades;
final List<RoomUpgrade> availableRoomUpgrades;
- final List<Upgrade> selectedUpSales;
final String selectedRoomUpgrade;
final Exception? error;
final bool isLoading;
@@ -19,7 +18,6 @@ class UpSalesState extends Equatable {
required this.selected,
required this.addOnUpgrades,
required this.availableRoomUpgrades,
- required this.selectedUpSales,
required this.selectedRoomUpgrade,
this.error,
required this.isLoading,
@@ -32,7 +30,6 @@ class UpSalesState extends Equatable {
selected,
addOnUpgrades,
availableRoomUpgrades,
- selectedUpSales,
selectedRoomUpgrade,
termsAccepted,
isLoading,
@@ -43,7 +40,6 @@ class UpSalesState extends Equatable {
: selected = false,
addOnUpgrades = [],
availableRoomUpgrades = [],
- selectedUpSales = [],
selectedRoomUpgrade = '',
error = null,
isLoading = false,
@@ -58,42 +54,8 @@ class UpSalesState extends Equatable {
UpSalesState loaded({required UpSales upSales}) =>
copyWith(isLoading: false, availableRoomUpgrades: upSales.roomUpgrades);
- UpSalesState addSelectedUpsales({required Upgrade upgrade}) {
- if (upgrade is AddOnUpgrade) {
- final newUpsale = upgrade.copyWith(quantity: 1);
- return copyWith(
- selectedUpSales: [...selectedUpSales, newUpsale],
- selectedRoomUpgrade: selectedRoomUpgrade);
- } else {
- return copyWith(
- selectedUpSales: [...selectedUpSales, upgrade],
- selectedRoomUpgrade: selectedRoomUpgrade);
- }
- }
-
- UpSalesState updateSelectedUpSales({
- required List<Upgrade> upgradeList,
- }) {
- if (upgradeList.isEmpty) return this;
- return copyWith(
- selectedUpSales: upgradeList, selectedRoomUpgrade: selectedRoomUpgrade);
- }
-
- UpSalesState updateOtherUpgradeWithQuantity(
- {required List<Upgrade> upgradeList}) {
- if (upgradeList.isEmpty) return this;
-
- // Get the ID of the item we're updating
- final String updateItemId = upgradeList.first.id;
-
- // Remove existing items with the same ID
- final existingItems =
- selectedUpSales.where((upgrade) => upgrade.id != updateItemId).toList();
-
- // Add the new items while preserving other items
- return copyWith(
- selectedUpSales: [...existingItems, ...upgradeList],
- selectedRoomUpgrade: selectedRoomUpgrade);
+ UpSalesState toggleSelectedAddonUpsale({required AddOnUpgrade upgrade}) {
+ return updateUprade(upgrade.copyWith(isSelected: !upgrade.isSelected));
}
UpSalesState updateRoomUpgrade({required RoomUpgrade roomUpgrade}) =>
@@ -101,63 +63,26 @@ class UpSalesState extends Equatable {
UpSalesState removeRoomUpgrade() => copyWith(selectedRoomUpgrade: '');
- UpSalesState removeSelectedUpSales({required Upgrade upgrade}) => copyWith(
- selectedUpSales:
- selectedUpSales.where((item) => item.id != upgrade.id).toList(),
- selectedRoomUpgrade: selectedRoomUpgrade);
-
- UpSalesState addQuantity(AddOnUpgrade upgrade) => copyWith(
- addOnUpgrades: addOnUpgrades
- .map((e) => e.id == upgrade.id ? e.copyWith(quantity: e.quantity + 1) : e)
- .toList(),
- selectedRoomUpgrade: selectedRoomUpgrade);
-
- UpSalesState removeQuantity(AddOnUpgrade upgrade) => copyWith(
- addOnUpgrades: addOnUpgrades
- .map((e) => e.id == upgrade.id ? e.copyWith(quantity: e.quantity - 1) : e)
- .toList(),
- selectedRoomUpgrade: selectedRoomUpgrade);
-
- UpSalesState addQuantityForUpgrade(String upgradeId) => copyWith(
- addOnUpgrades: addOnUpgrades
- .map((e) =>
- e.id == upgradeId ? e.copyWith(quantity: e.quantity + 1) : e)
- .toList(),
- selectedRoomUpgrade: selectedRoomUpgrade);
-
- UpSalesState removeQuantityForUpgrade(String upgradeId) => copyWith(
- addOnUpgrades: addOnUpgrades
- .map((e) => e.id == upgradeId && e.quantity > 0
- ? e.copyWith(quantity: e.quantity - 1)
- : e)
- .toList(),
- selectedRoomUpgrade: selectedRoomUpgrade);
-
- UpSalesState updateSelectedUpgradeWithQuantity(AddOnUpgrade upgrade) {
- // Remove any existing instance of this upgrade from selectedUpSales
- final existingItems =
- selectedUpSales.where((item) => item.id != upgrade.id).toList();
-
- print("existingItems ${existingItems}");
-
- print("upgrade ${upgrade.quantity}");
-
-
- // If quantity is 0, just remove the upgrade from selectedUpSales
- if (upgrade.quantity <= 0) {
- return copyWith(
- selectedUpSales: existingItems,
- selectedRoomUpgrade: selectedRoomUpgrade);
- }
-
- // Add the new upgrade to selectedUpSales
- final updatedSelectedUpSales = [...existingItems, upgrade];
+ UpSalesState removeSelectedUpSales({required AddOnUpgrade upgrade}) {
+ final updatedAddOnUpgrades = addOnUpgrades.toList();
+ final index = updatedAddOnUpgrades.indexWhere((e) => e.id == upgrade.id);
+ updatedAddOnUpgrades[index] =
+ upgrade.copyWith(quantity: 0, isSelected: false);
+ return copyWith(addOnUpgrades: updatedAddOnUpgrades);
+ }
- print("updatedSelectedUpSales ${updatedSelectedUpSales}");
+ UpSalesState updateSelectedUpgradeWithQuantity(
+ AddOnUpgrade upgrade,
+ int quantity,
+ ) {
+ return updateUprade(upgrade.copyWith(quantity: quantity));
+ }
- return copyWith(
- selectedUpSales: updatedSelectedUpSales,
- selectedRoomUpgrade: selectedRoomUpgrade);
+ UpSalesState updateUprade(AddOnUpgrade upgrade) {
+ final updatedAddOnUpgrades = addOnUpgrades.toList();
+ final index = updatedAddOnUpgrades.indexWhere((e) => e.id == upgrade.id);
+ updatedAddOnUpgrades[index] = upgrade;
+ return copyWith(addOnUpgrades: updatedAddOnUpgrades);
}
UpSalesState processingStateUpdated(UpSalesProcessingState processingState) =>
@@ -167,7 +92,6 @@ class UpSalesState extends Equatable {
bool? selected,
List<AddOnUpgrade>? addOnUpgrades,
List<RoomUpgrade>? availableRoomUpgrades,
- List<Upgrade>? selectedUpSales,
String? selectedRoomUpgrade,
bool? isLoading,
Exception? error,
@@ -180,7 +104,6 @@ class UpSalesState extends Equatable {
availableRoomUpgrades:
availableRoomUpgrades ?? this.availableRoomUpgrades,
selectedRoomUpgrade: selectedRoomUpgrade ?? this.selectedRoomUpgrade,
- selectedUpSales: selectedUpSales ?? this.selectedUpSales,
isLoading: isLoading ?? this.isLoading,
error: error ?? this.error,
termsAccepted: termsAccepted ?? this.termsAccepted,
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 b783645e..b8ec1099 100644
--- a/comwell_key_app/lib/up_sales/models/addon_upgrade.dart
+++ b/comwell_key_app/lib/up_sales/models/addon_upgrade.dart
@@ -3,7 +3,7 @@ import 'package:comwell_key_app/up_sales/models/upgrade.dart';
class AddOnUpgrade extends Upgrade {
final bool isSelected;
final bool isService;
- AddOnUpgrade({
+ const AddOnUpgrade({
required super.id,
required super.name,
required super.price,
@@ -14,7 +14,10 @@ class AddOnUpgrade extends Upgrade {
required super.quantity,
required this.isSelected,
required this.isService,
- });
+ });
+
+ @override
+ List<Object?> get props => [id, quantity, isSelected];
@override
String toString() {
@@ -37,9 +40,8 @@ class AddOnUpgrade extends Upgrade {
quantity: quantity ?? this.quantity,
isSelected: isSelected ?? this.isSelected,
isService: isService ?? this.isService,
- );
+ );
}
-
}
enum FacilityType {
@@ -53,4 +55,4 @@ enum FacilityType {
static FacilityType fromString(String value) {
return FacilityType.values.firstWhere((e) => e.name == value.toLowerCase());
}
-}
\ No newline at end of file
+}
diff --git a/comwell_key_app/lib/up_sales/models/upgrade.dart b/comwell_key_app/lib/up_sales/models/upgrade.dart
index 37fcad29..0ed2a675 100644
--- a/comwell_key_app/lib/up_sales/models/upgrade.dart
+++ b/comwell_key_app/lib/up_sales/models/upgrade.dart
@@ -1,5 +1,7 @@
-abstract class Upgrade {
+import 'package:equatable/equatable.dart';
+
+abstract class Upgrade extends Equatable {
final String id;
final String name;
final int price;
@@ -19,5 +21,12 @@ abstract class Upgrade {
required this.tags,
required this.quantity,
});
-
+
+ @override
+ List<Object?> get props => [id, quantity];
+
+ @override
+ String toString() {
+ return 'Upgrade(id: $id, name: $name, price: $price, currency: $currency, images: $images, description: $description, tags: $tags, quantity: $quantity)';
+ }
}
\ No newline at end of file
diff --git a/comwell_key_app/lib/up_sales/pages/addon_upgrade_page.dart b/comwell_key_app/lib/up_sales/pages/addon_upgrade_page.dart
index fe170bde..86f357e8 100644
--- a/comwell_key_app/lib/up_sales/pages/addon_upgrade_page.dart
+++ b/comwell_key_app/lib/up_sales/pages/addon_upgrade_page.dart
@@ -1,37 +1,51 @@
import 'package:comwell_key_app/common/components/comwell_app_bar.dart';
import 'package:comwell_key_app/common/const.dart';
-import 'package:comwell_key_app/up_sales/components/item_counter.dart';
-import 'package:comwell_key_app/up_sales/cubit/up_sales_cubit.dart';
+import 'package:comwell_key_app/up_sales/components/generic_item_counter.dart';
import 'package:comwell_key_app/up_sales/models/addon_upgrade.dart';
-import 'package:comwell_key_app/up_sales/models/upgrade.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
-import 'package:flutter_bloc/flutter_bloc.dart';
import '../../themes/light_theme.dart';
import '../components/up_sales_bottom_button.dart';
-class AddonUpgradePage extends StatelessWidget {
+class AddonUpgradePage extends StatefulWidget {
final AddOnUpgrade addonUpgrade;
- final List<Upgrade> selectedUpSales;
+ //prop drilled
final int extrasTotalPrice;
final String selectedRoomUpgrade;
+
+
+
const AddonUpgradePage(
{super.key,
required this.addonUpgrade,
- required this.selectedUpSales,
required this.extrasTotalPrice,
- required this.selectedRoomUpgrade});
+ required this.selectedRoomUpgrade,
+ });
+
+ @override
+ State<AddonUpgradePage> createState() => _AddonUpgradePageState();
+}
+class _AddonUpgradePageState extends State<AddonUpgradePage> {
+ late int quantity = widget.addonUpgrade.quantity;
+
+ void increment() {
+ setState(() {
+ quantity++;
+ });
+ }
+
+ void decrement() {
+ setState(() {
+ quantity--;
+ });
+ }
+
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
final width = MediaQuery.of(context).size.width;
final height = MediaQuery.of(context).size.height;
- final quantity = selectedUpSales
- .where((e) => e.id == addonUpgrade.id)
- .firstOrNull
- ?.quantity ??
- 0;
return Scaffold(
backgroundColor: Theme.of(context).colorScheme.surface,
@@ -80,11 +94,11 @@ class AddonUpgradePage extends StatelessWidget {
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
- Text(addonUpgrade.name,
+ Text(widget.addonUpgrade.name,
style: theme.textTheme.headlineLarge),
Text(
"total_charge_value"
- .tr(args: [addonUpgrade.price.toString()]),
+ .tr(args: [widget.addonUpgrade.price.toString()]),
style: theme.textTheme.headlineLarge),
],
),
@@ -92,7 +106,7 @@ class AddonUpgradePage extends StatelessWidget {
SizedBox(
width: width * 0.8,
child: Text(
- addonUpgrade.description,
+ widget.addonUpgrade.description,
style: theme.textTheme.bodySmall
?.copyWith(color: colorHeadlineText),
),
@@ -112,21 +126,21 @@ class AddonUpgradePage extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
- ItemCounter(addonUpgrade: addonUpgrade, quantity: quantity),
+ GenericItemCounter(
+ key: ValueKey(quantity),
+ addonUpgrade: widget.addonUpgrade,
+ quantity: quantity,
+ onIncrement: increment,
+ onDecrement: decrement,
+ ),
Expanded(
flex: 2,
child: UpSalesBottomButton(
- onAddUpSale: () {
- Navigator.pop(
- context, addonUpgrade.copyWith(quantity: quantity));
- },
onContinue: () {
- Navigator.pop(
- context, addonUpgrade.copyWith(quantity: quantity));
+ Navigator.pop(context, quantity);
},
- selectedUpSales: selectedUpSales,
- extrasTotalPrice: extrasTotalPrice,
- selectedRoomUpgrade: selectedRoomUpgrade,
+ extrasTotalPrice: widget.extrasTotalPrice,
+ selectedRoomUpgrade: widget.selectedRoomUpgrade,
children: [Text('add_to_booking'.tr())],
),
),
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 98f051bf..3439f356 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
@@ -144,13 +144,9 @@ class _RoomUpgradePageState extends State<RoomUpgradePage> {
children: [
const Divider(color: colorDivider),
UpSalesBottomButton(
- onAddUpSale: () {
- Navigator.pop(context, [widget.roomUpgradeList.roomUpgrade, isSelected]);
- },
onContinue: () {
Navigator.pop(context, [widget.roomUpgradeList.roomUpgrade, isSelected]);
},
- selectedUpSales: state.selectedUpSales,
extrasTotalPrice: cubit.extrasTotalPrice,
selectedRoomUpgrade: state.selectedRoomUpgrade,
children: [
diff --git a/comwell_key_app/lib/up_sales/pages/services_upgrade_page.dart b/comwell_key_app/lib/up_sales/pages/services_upgrade_page.dart
index 4f378b7a..3fe705ae 100644
--- a/comwell_key_app/lib/up_sales/pages/services_upgrade_page.dart
+++ b/comwell_key_app/lib/up_sales/pages/services_upgrade_page.dart
@@ -107,17 +107,11 @@ class ServicesUpgradePage extends StatelessWidget {
const Divider(color: colorDivider),
UpSalesBottomButton(
isSinglePurchase: roomUpgradeList.isSinglePurchase,
- onAddUpSale: () {
- Navigator.pop(
- context, [roomUpgradeList.addOnUpgrade, isSelected]);
- },
onSinglePurchaseContinue: () {
if (roomUpgradeList.isSinglePurchase) {
- cubit.addSelected(roomUpgradeList.addOnUpgrade!);
- print("selected up sales ${cubit.state.selectedUpSales}");
context
.pushNamed(AppRoutes.upSaleConfirmation.name, extra: [
- cubit.state.selectedUpSales.whereType<AddOnUpgrade>().toList(),
+ cubit.selectedAddOnUpgrades,
cubit.extrasTotalPrice,
roomUpgradeList.roomUpgrade
]);
@@ -127,7 +121,6 @@ class ServicesUpgradePage extends StatelessWidget {
Navigator.pop(
context, [roomUpgradeList.addOnUpgrade, isSelected]);
},
- selectedUpSales: state.selectedUpSales,
extrasTotalPrice: cubit.extrasTotalPrice,
selectedRoomUpgrade: state.selectedRoomUpgrade,
children: [
diff --git a/comwell_key_app/lib/up_sales/up_sales_catalog.dart b/comwell_key_app/lib/up_sales/up_sales_catalog.dart
index 87bf9c43..65177713 100644
--- a/comwell_key_app/lib/up_sales/up_sales_catalog.dart
+++ b/comwell_key_app/lib/up_sales/up_sales_catalog.dart
@@ -50,7 +50,7 @@ class UpSalesCatalog extends StatelessWidget {
style: theme.textTheme.headlineLarge),
),
const SizedBox(height: 40),
- if (serviceUpgrades.isNotEmpty) ...[
+ if (serviceUpgrades.isNotEmpty && serviceUpgrades.any((e) => e.isService)) ...[
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Text('services'.tr(),
@@ -60,22 +60,11 @@ class UpSalesCatalog extends StatelessWidget {
ServiceCatalog(
booking: cubit.booking,
upSales: serviceUpgrades,
- selectedUpSales: cubit.state.selectedUpSales,
onServiceSelected: (upgrade, isSelected) {
- if (isSelected) {
- cubit.removeUpgrade(upgrade);
- } else {
- cubit.addSelected(upgrade);
- }
+ cubit.toggleSelectedUpgrade(upgrade);
},
onTap: (upgrade) {
- final isSelected = cubit.state.selectedUpSales
- .any((e) => e.id == upgrade.id);
- if (isSelected) {
- cubit.removeUpgrade(upgrade);
- } else {
- cubit.addSelected(upgrade);
- }
+ cubit.toggleSelectedUpgrade(upgrade);
},
),
],
@@ -91,27 +80,17 @@ class UpSalesCatalog extends StatelessWidget {
booking: cubit.booking,
availableRoomUpgrades: cubit.upSales.roomUpgrades,
selectedRoomUpgrade: cubit.state.selectedRoomUpgrade,
- selectedUpSales: cubit.state.selectedUpSales,
+ selectedUpSales: cubit.selectedAddOnUpgrades,
onRoomUpgradeSelected: (upgrade, isSelected) {
- if (isSelected) {
- cubit.removeUpgrade(upgrade);
- } else {
- cubit.addSelected(upgrade);
- }
+ cubit.toggleSelectedUpgrade(upgrade);
},
onTap: (upgrade) {
- final isSelected =
- cubit.state.selectedRoomUpgrade == upgrade.id;
- if (isSelected) {
- cubit.removeUpgrade(upgrade);
- } else {
- cubit.addSelected(upgrade);
- }
+ cubit.toggleSelectedUpgrade(upgrade);
},
),
const SizedBox(height: 24),
],
- if (addonUpgrades.isNotEmpty) ...[
+ if (addonUpgrades.any((e) => !e.isService)) ...[
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Text('other_up_sales'.tr(),
@@ -119,16 +98,12 @@ class UpSalesCatalog extends StatelessWidget {
),
const SizedBox(height: 8),
AddOnUpgradeCatalog(
- addOnUpgrades: addonUpgrades,
- selectedUpSales: cubit.state.selectedUpSales
- .whereType<AddOnUpgrade>()
- .toList(),
- extrasTotalPrice: cubit.extrasTotalPrice,
- selectedRoomUpgrade: selectedRoomUpgrade?.id ?? '',
- onAddOnUpgradeSelected: (upgrade) {
- cubit.updateAddonUpgradeQuantity(upgrade);
- },
- ),
+ addOnUpgrades: cubit.selectedAddOnUpgrades,
+ extrasTotalPrice: cubit.extrasTotalPrice,
+ selectedRoomUpgrade: selectedRoomUpgrade?.id ?? '',
+ onAddOnUpgradeSelected: (upgrade, quantity) {
+ cubit.updateAddonUpgradeQuantity(upgrade, quantity);
+ }),
],
const SizedBox(height: 24),
],
@@ -138,7 +113,7 @@ class UpSalesCatalog extends StatelessWidget {
bottomNavigationBar: Column(mainAxisSize: MainAxisSize.min, children: [
const Divider(color: colorDivider),
UpSalesContinueButton(
- selectedUpSales: cubit.state.selectedUpSales.whereType<AddOnUpgrade>().toList(),
+ selectedUpSales: cubit.selectedAddOnUpgrades,
extrasTotalPrice: cubit.extrasTotalPrice,
selectedRoomUpgrade: selectedRoomUpgrade,
)