import 'package:enaklo_pos/core/components/buttons.dart'; import 'package:enaklo_pos/core/components/custom_modal_dialog.dart'; import 'package:enaklo_pos/core/components/flushbar.dart'; import 'package:enaklo_pos/core/components/spaces.dart'; import 'package:enaklo_pos/core/constants/colors.dart'; import 'package:enaklo_pos/core/extensions/build_context_ext.dart'; import 'package:enaklo_pos/data/models/response/order_response_model.dart'; import 'package:enaklo_pos/presentation/home/bloc/order_form/order_form_bloc.dart'; import 'package:enaklo_pos/presentation/home/models/product_quantity.dart'; import 'package:enaklo_pos/presentation/sales/blocs/order_loader/order_loader_bloc.dart'; import 'package:enaklo_pos/presentation/success/pages/success_save_order_page.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; class PaymentAddOrderDialog extends StatefulWidget { final List items; const PaymentAddOrderDialog({super.key, required this.items}); @override State createState() => _PaymentAddOrderDialogState(); } class _PaymentAddOrderDialogState extends State { Order? selectOrder; @override void initState() { super.initState(); context.read().add( OrderLoaderEvent.getByStatus( 'pending', dateFrom: DateTime.now(), dateTo: DateTime.now(), ), ); } @override Widget build(BuildContext context) { return CustomModalDialog( title: 'Bayar Nanti', subtitle: 'Simpan pesanan dan bayar nanti', contentPadding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 24.0), minWidth: context.deviceWidth * 0.4, minHeight: context.deviceHeight * 0.4, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const Text( 'Pilih Meja yang sudah dipesan', style: TextStyle( color: AppColors.black, fontSize: 16, fontWeight: FontWeight.w600, ), ), const SpaceHeight(6.0), BlocBuilder( builder: (context, state) { return state.maybeWhen( orElse: () => Center(child: const CircularProgressIndicator()), loading: () => Center(child: const CircularProgressIndicator()), loaded: ( orders, totalOrder, _, __, ___, ) { final availableOrders = orders; if (selectOrder == null && availableOrders.isNotEmpty) { selectOrder = availableOrders.first; } if (availableOrders.isEmpty) { return Container( padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: Colors.orange[50], borderRadius: BorderRadius.circular(16), border: Border.all( color: Colors.orange, width: 1, ), ), child: const Text( 'Tidak ada meja yang tersedia. Silakan pilih opsi lain.', style: TextStyle(color: Colors.orange), ), ); } return Container( padding: const EdgeInsets.symmetric(horizontal: 16), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(16), border: Border.all( color: Theme.of(context).primaryColor, width: 2, ), ), child: DropdownButtonHideUnderline( child: DropdownButton( isExpanded: true, value: availableOrders.firstWhere( (t) => t.id == selectOrder?.id, orElse: () => availableOrders.first, ), onChanged: (Order? newValue) { setState(() { selectOrder = newValue; }); }, items: availableOrders .map>( (Order value) => DropdownMenuItem( value: value, child: Text( "${value.tableNumber ?? ""} - ${value.metadata?['customer_name'] ?? ""}", ), ), ) .toList(), ), ), ); }, ); }), ], ), SpaceHeight(24), BlocListener( listener: (context, state) { state.maybeWhen( orElse: () {}, success: (data) { context.pushReplacement( SuccessSaveOrderPage( productQuantity: widget.items, orderId: selectOrder?.id ?? "", ), ); }, error: (message) => AppFlushbar.showError(context, message), ); }, child: BlocBuilder( builder: (context, state) { return state.maybeWhen( orElse: () => Button.filled( onPressed: () { context .read() .add(OrderFormEvent.addToOrder( items: widget.items, orderId: selectOrder?.id ?? "", )); }, label: "Simpan", ), loading: () => Center( child: const CircularProgressIndicator(), ), ); }, ), ), ], ), ); } }