From 29d839ee26b65e94c5365220c3894866050b6366 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Salazar?= <73718835+joshrs23@users.noreply.github.com> Date: Wed, 28 Jan 2026 17:34:05 -0500 Subject: [PATCH] moving created order to view order --- .../one_time_order/one_time_order_view.dart | 7 +++- .../presentation/blocs/view_orders_cubit.dart | 30 +++++++++++++++ .../presentation/pages/view_orders_page.dart | 37 +++++++++++++++++-- .../lib/src/view_orders_module.dart | 19 +++++++++- 4 files changed, 87 insertions(+), 6 deletions(-) diff --git a/apps/mobile/packages/features/client/create_order/lib/src/presentation/widgets/one_time_order/one_time_order_view.dart b/apps/mobile/packages/features/client/create_order/lib/src/presentation/widgets/one_time_order/one_time_order_view.dart index f2fba146..7ff4c66e 100644 --- a/apps/mobile/packages/features/client/create_order/lib/src/presentation/widgets/one_time_order/one_time_order_view.dart +++ b/apps/mobile/packages/features/client/create_order/lib/src/presentation/widgets/one_time_order/one_time_order_view.dart @@ -31,7 +31,12 @@ class OneTimeOrderView extends StatelessWidget { title: labels.success_title, message: labels.success_message, buttonLabel: labels.back_to_orders, - onDone: () => Modular.to.pop(), + onDone: () => Modular.to.navigate( + '/client-main/orders/', + arguments: { + 'initialDate': state.date.toIso8601String(), + }, + ), ); } diff --git a/apps/mobile/packages/features/client/view_orders/lib/src/presentation/blocs/view_orders_cubit.dart b/apps/mobile/packages/features/client/view_orders/lib/src/presentation/blocs/view_orders_cubit.dart index 727268af..46c6d76c 100644 --- a/apps/mobile/packages/features/client/view_orders/lib/src/presentation/blocs/view_orders_cubit.dart +++ b/apps/mobile/packages/features/client/view_orders/lib/src/presentation/blocs/view_orders_cubit.dart @@ -23,6 +23,7 @@ class ViewOrdersCubit extends Cubit { final GetOrdersUseCase _getOrdersUseCase; final GetAcceptedApplicationsForDayUseCase _getAcceptedAppsUseCase; + int _requestId = 0; void _init() { updateWeekOffset(0); // Initialize calendar days @@ -33,6 +34,7 @@ class ViewOrdersCubit extends Cubit { required DateTime rangeEnd, required DateTime dayForApps, }) async { + final int requestId = ++_requestId; emit(state.copyWith(status: ViewOrdersStatus.loading)); try { final List orders = await _getOrdersUseCase( @@ -42,6 +44,9 @@ class ViewOrdersCubit extends Cubit { OrdersDayArguments(day: dayForApps), ); final List updatedOrders = _applyApplications(orders, apps); + if (requestId != _requestId) { + return; + } emit( state.copyWith( status: ViewOrdersStatus.success, @@ -50,6 +55,9 @@ class ViewOrdersCubit extends Cubit { ); _updateDerivedState(); } catch (_) { + if (requestId != _requestId) { + return; + } emit(state.copyWith(status: ViewOrdersStatus.failure)); } } @@ -88,6 +96,28 @@ class ViewOrdersCubit extends Cubit { ); } + void jumpToDate(DateTime date) { + final DateTime target = DateTime(date.year, date.month, date.day); + final DateTime startDate = _calculateCalendarDays(0).first; + final int diffDays = target.difference(startDate).inDays; + final int targetOffset = (diffDays / 7).floor(); + final List calendarDays = _calculateCalendarDays(targetOffset); + + emit( + state.copyWith( + weekOffset: targetOffset, + calendarDays: calendarDays, + selectedDate: target, + ), + ); + + _loadOrdersForRange( + rangeStart: calendarDays.first, + rangeEnd: calendarDays.last, + dayForApps: target, + ); + } + void _updateDerivedState() { final List filteredOrders = _calculateFilteredOrders(state); final int activeCount = _calculateCategoryCount('active'); diff --git a/apps/mobile/packages/features/client/view_orders/lib/src/presentation/pages/view_orders_page.dart b/apps/mobile/packages/features/client/view_orders/lib/src/presentation/pages/view_orders_page.dart index c47b8518..7d521567 100644 --- a/apps/mobile/packages/features/client/view_orders/lib/src/presentation/pages/view_orders_page.dart +++ b/apps/mobile/packages/features/client/view_orders/lib/src/presentation/pages/view_orders_page.dart @@ -20,24 +20,53 @@ import '../navigation/view_orders_navigator.dart'; /// - Adhering to the project's Design System. class ViewOrdersPage extends StatelessWidget { /// Creates a [ViewOrdersPage]. - const ViewOrdersPage({super.key}); + const ViewOrdersPage({super.key, this.initialDate}); + + final DateTime? initialDate; @override Widget build(BuildContext context) { return BlocProvider( create: (BuildContext context) => Modular.get(), - child: const ViewOrdersView(), + child: ViewOrdersView(initialDate: initialDate), ); } } /// The internal view implementation for [ViewOrdersPage]. -class ViewOrdersView extends StatelessWidget { +class ViewOrdersView extends StatefulWidget { /// Creates a [ViewOrdersView]. - const ViewOrdersView({super.key}); + const ViewOrdersView({super.key, this.initialDate}); + + final DateTime? initialDate; + + @override + State createState() => _ViewOrdersViewState(); +} + +class _ViewOrdersViewState extends State { + bool _didInitialJump = false; + ViewOrdersCubit? _cubit; + + @override + void initState() { + super.initState(); + if (widget.initialDate != null) { + WidgetsBinding.instance.addPostFrameCallback((_) { + if (!mounted) return; + if (_didInitialJump) return; + _didInitialJump = true; + _cubit ??= BlocProvider.of(context); + _cubit!.jumpToDate(widget.initialDate!); + }); + } + } @override Widget build(BuildContext context) { + if (_cubit == null) { + _cubit = BlocProvider.of(context); + } return BlocBuilder( builder: (BuildContext context, ViewOrdersState state) { final List calendarDays = state.calendarDays; diff --git a/apps/mobile/packages/features/client/view_orders/lib/src/view_orders_module.dart b/apps/mobile/packages/features/client/view_orders/lib/src/view_orders_module.dart index 3579ca65..787bf6de 100644 --- a/apps/mobile/packages/features/client/view_orders/lib/src/view_orders_module.dart +++ b/apps/mobile/packages/features/client/view_orders/lib/src/view_orders_module.dart @@ -43,6 +43,23 @@ class ViewOrdersModule extends Module { @override void routes(RouteManager r) { - r.child('/', child: (BuildContext context) => const ViewOrdersPage()); + r.child( + '/', + child: (BuildContext context) { + final Object? args = Modular.args.data; + DateTime? initialDate; + if (args is DateTime) { + initialDate = args; + } else if (args is Map) { + final Object? rawDate = args['initialDate']; + if (rawDate is DateTime) { + initialDate = rawDate; + } else if (rawDate is String) { + initialDate = DateTime.tryParse(rawDate); + } + } + return ViewOrdersPage(initialDate: initialDate); + }, + ); } }