moving created order to view order

This commit is contained in:
José Salazar
2026-01-28 17:34:05 -05:00
parent d488f542b5
commit 29d839ee26
4 changed files with 87 additions and 6 deletions

View File

@@ -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: <String, dynamic>{
'initialDate': state.date.toIso8601String(),
},
),
);
}

View File

@@ -23,6 +23,7 @@ class ViewOrdersCubit extends Cubit<ViewOrdersState> {
final GetOrdersUseCase _getOrdersUseCase;
final GetAcceptedApplicationsForDayUseCase _getAcceptedAppsUseCase;
int _requestId = 0;
void _init() {
updateWeekOffset(0); // Initialize calendar days
@@ -33,6 +34,7 @@ class ViewOrdersCubit extends Cubit<ViewOrdersState> {
required DateTime rangeEnd,
required DateTime dayForApps,
}) async {
final int requestId = ++_requestId;
emit(state.copyWith(status: ViewOrdersStatus.loading));
try {
final List<OrderItem> orders = await _getOrdersUseCase(
@@ -42,6 +44,9 @@ class ViewOrdersCubit extends Cubit<ViewOrdersState> {
OrdersDayArguments(day: dayForApps),
);
final List<OrderItem> updatedOrders = _applyApplications(orders, apps);
if (requestId != _requestId) {
return;
}
emit(
state.copyWith(
status: ViewOrdersStatus.success,
@@ -50,6 +55,9 @@ class ViewOrdersCubit extends Cubit<ViewOrdersState> {
);
_updateDerivedState();
} catch (_) {
if (requestId != _requestId) {
return;
}
emit(state.copyWith(status: ViewOrdersStatus.failure));
}
}
@@ -88,6 +96,28 @@ class ViewOrdersCubit extends Cubit<ViewOrdersState> {
);
}
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<DateTime> 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<OrderItem> filteredOrders = _calculateFilteredOrders(state);
final int activeCount = _calculateCategoryCount('active');

View File

@@ -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<ViewOrdersCubit>(
create: (BuildContext context) => Modular.get<ViewOrdersCubit>(),
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<ViewOrdersView> createState() => _ViewOrdersViewState();
}
class _ViewOrdersViewState extends State<ViewOrdersView> {
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<ViewOrdersCubit>(context);
_cubit!.jumpToDate(widget.initialDate!);
});
}
}
@override
Widget build(BuildContext context) {
if (_cubit == null) {
_cubit = BlocProvider.of<ViewOrdersCubit>(context);
}
return BlocBuilder<ViewOrdersCubit, ViewOrdersState>(
builder: (BuildContext context, ViewOrdersState state) {
final List<DateTime> calendarDays = state.calendarDays;

View File

@@ -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<String, dynamic>) {
final Object? rawDate = args['initialDate'];
if (rawDate is DateTime) {
initialDate = rawDate;
} else if (rawDate is String) {
initialDate = DateTime.tryParse(rawDate);
}
}
return ViewOrdersPage(initialDate: initialDate);
},
);
}
}