moving created order to view order
This commit is contained in:
@@ -31,7 +31,12 @@ class OneTimeOrderView extends StatelessWidget {
|
|||||||
title: labels.success_title,
|
title: labels.success_title,
|
||||||
message: labels.success_message,
|
message: labels.success_message,
|
||||||
buttonLabel: labels.back_to_orders,
|
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 GetOrdersUseCase _getOrdersUseCase;
|
||||||
final GetAcceptedApplicationsForDayUseCase _getAcceptedAppsUseCase;
|
final GetAcceptedApplicationsForDayUseCase _getAcceptedAppsUseCase;
|
||||||
|
int _requestId = 0;
|
||||||
|
|
||||||
void _init() {
|
void _init() {
|
||||||
updateWeekOffset(0); // Initialize calendar days
|
updateWeekOffset(0); // Initialize calendar days
|
||||||
@@ -33,6 +34,7 @@ class ViewOrdersCubit extends Cubit<ViewOrdersState> {
|
|||||||
required DateTime rangeEnd,
|
required DateTime rangeEnd,
|
||||||
required DateTime dayForApps,
|
required DateTime dayForApps,
|
||||||
}) async {
|
}) async {
|
||||||
|
final int requestId = ++_requestId;
|
||||||
emit(state.copyWith(status: ViewOrdersStatus.loading));
|
emit(state.copyWith(status: ViewOrdersStatus.loading));
|
||||||
try {
|
try {
|
||||||
final List<OrderItem> orders = await _getOrdersUseCase(
|
final List<OrderItem> orders = await _getOrdersUseCase(
|
||||||
@@ -42,6 +44,9 @@ class ViewOrdersCubit extends Cubit<ViewOrdersState> {
|
|||||||
OrdersDayArguments(day: dayForApps),
|
OrdersDayArguments(day: dayForApps),
|
||||||
);
|
);
|
||||||
final List<OrderItem> updatedOrders = _applyApplications(orders, apps);
|
final List<OrderItem> updatedOrders = _applyApplications(orders, apps);
|
||||||
|
if (requestId != _requestId) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
emit(
|
emit(
|
||||||
state.copyWith(
|
state.copyWith(
|
||||||
status: ViewOrdersStatus.success,
|
status: ViewOrdersStatus.success,
|
||||||
@@ -50,6 +55,9 @@ class ViewOrdersCubit extends Cubit<ViewOrdersState> {
|
|||||||
);
|
);
|
||||||
_updateDerivedState();
|
_updateDerivedState();
|
||||||
} catch (_) {
|
} catch (_) {
|
||||||
|
if (requestId != _requestId) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
emit(state.copyWith(status: ViewOrdersStatus.failure));
|
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() {
|
void _updateDerivedState() {
|
||||||
final List<OrderItem> filteredOrders = _calculateFilteredOrders(state);
|
final List<OrderItem> filteredOrders = _calculateFilteredOrders(state);
|
||||||
final int activeCount = _calculateCategoryCount('active');
|
final int activeCount = _calculateCategoryCount('active');
|
||||||
|
|||||||
@@ -20,24 +20,53 @@ import '../navigation/view_orders_navigator.dart';
|
|||||||
/// - Adhering to the project's Design System.
|
/// - Adhering to the project's Design System.
|
||||||
class ViewOrdersPage extends StatelessWidget {
|
class ViewOrdersPage extends StatelessWidget {
|
||||||
/// Creates a [ViewOrdersPage].
|
/// Creates a [ViewOrdersPage].
|
||||||
const ViewOrdersPage({super.key});
|
const ViewOrdersPage({super.key, this.initialDate});
|
||||||
|
|
||||||
|
final DateTime? initialDate;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return BlocProvider<ViewOrdersCubit>(
|
return BlocProvider<ViewOrdersCubit>(
|
||||||
create: (BuildContext context) => Modular.get<ViewOrdersCubit>(),
|
create: (BuildContext context) => Modular.get<ViewOrdersCubit>(),
|
||||||
child: const ViewOrdersView(),
|
child: ViewOrdersView(initialDate: initialDate),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The internal view implementation for [ViewOrdersPage].
|
/// The internal view implementation for [ViewOrdersPage].
|
||||||
class ViewOrdersView extends StatelessWidget {
|
class ViewOrdersView extends StatefulWidget {
|
||||||
/// Creates a [ViewOrdersView].
|
/// 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
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
if (_cubit == null) {
|
||||||
|
_cubit = BlocProvider.of<ViewOrdersCubit>(context);
|
||||||
|
}
|
||||||
return BlocBuilder<ViewOrdersCubit, ViewOrdersState>(
|
return BlocBuilder<ViewOrdersCubit, ViewOrdersState>(
|
||||||
builder: (BuildContext context, ViewOrdersState state) {
|
builder: (BuildContext context, ViewOrdersState state) {
|
||||||
final List<DateTime> calendarDays = state.calendarDays;
|
final List<DateTime> calendarDays = state.calendarDays;
|
||||||
|
|||||||
@@ -43,6 +43,23 @@ class ViewOrdersModule extends Module {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void routes(RouteManager r) {
|
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