moving created order to view order
This commit is contained in:
@@ -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(),
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user