Fix: Resolve critical linting issues and bugs (concurrency, syntax, dead code)
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:krow_core/core.dart';
|
||||
import 'package:krow_domain/krow_domain.dart';
|
||||
import '../../domain/arguments/orders_day_arguments.dart';
|
||||
import '../../domain/arguments/orders_range_arguments.dart';
|
||||
@@ -10,14 +11,14 @@ import 'view_orders_state.dart';
|
||||
/// Cubit for managing the state of the View Orders feature.
|
||||
///
|
||||
/// This Cubit handles loading orders, date selection, and tab filtering.
|
||||
class ViewOrdersCubit extends Cubit<ViewOrdersState> {
|
||||
class ViewOrdersCubit extends Cubit<ViewOrdersState>
|
||||
with BlocErrorHandler<ViewOrdersState> {
|
||||
ViewOrdersCubit({
|
||||
required GetOrdersUseCase getOrdersUseCase,
|
||||
required GetAcceptedApplicationsForDayUseCase getAcceptedAppsUseCase,
|
||||
})
|
||||
: _getOrdersUseCase = getOrdersUseCase,
|
||||
_getAcceptedAppsUseCase = getAcceptedAppsUseCase,
|
||||
super(ViewOrdersState(selectedDate: DateTime.now())) {
|
||||
}) : _getOrdersUseCase = getOrdersUseCase,
|
||||
_getAcceptedAppsUseCase = getAcceptedAppsUseCase,
|
||||
super(ViewOrdersState(selectedDate: DateTime.now())) {
|
||||
_init();
|
||||
}
|
||||
|
||||
@@ -36,30 +37,33 @@ class ViewOrdersCubit extends Cubit<ViewOrdersState> {
|
||||
}) async {
|
||||
final int requestId = ++_requestId;
|
||||
emit(state.copyWith(status: ViewOrdersStatus.loading));
|
||||
try {
|
||||
final List<OrderItem> orders = await _getOrdersUseCase(
|
||||
OrdersRangeArguments(start: rangeStart, end: rangeEnd),
|
||||
);
|
||||
final Map<String, List<Map<String, dynamic>>> apps = await _getAcceptedAppsUseCase(
|
||||
OrdersDayArguments(day: dayForApps),
|
||||
);
|
||||
final List<OrderItem> updatedOrders = _applyApplications(orders, apps);
|
||||
if (requestId != _requestId) {
|
||||
return;
|
||||
}
|
||||
emit(
|
||||
state.copyWith(
|
||||
status: ViewOrdersStatus.success,
|
||||
orders: updatedOrders,
|
||||
),
|
||||
);
|
||||
_updateDerivedState();
|
||||
} catch (_) {
|
||||
if (requestId != _requestId) {
|
||||
return;
|
||||
}
|
||||
emit(state.copyWith(status: ViewOrdersStatus.failure));
|
||||
}
|
||||
|
||||
await handleError(
|
||||
emit: (ViewOrdersState s) {
|
||||
if (requestId == _requestId) emit(s);
|
||||
},
|
||||
action: () async {
|
||||
final List<OrderItem> orders = await _getOrdersUseCase(
|
||||
OrdersRangeArguments(start: rangeStart, end: rangeEnd),
|
||||
);
|
||||
final Map<String, List<Map<String, dynamic>>> apps =
|
||||
await _getAcceptedAppsUseCase(OrdersDayArguments(day: dayForApps));
|
||||
|
||||
if (requestId != _requestId) {
|
||||
return;
|
||||
}
|
||||
|
||||
final List<OrderItem> updatedOrders = _applyApplications(orders, apps);
|
||||
emit(
|
||||
state.copyWith(
|
||||
status: ViewOrdersStatus.success,
|
||||
orders: updatedOrders,
|
||||
),
|
||||
);
|
||||
_updateDerivedState();
|
||||
},
|
||||
onError: (String _) => state.copyWith(status: ViewOrdersStatus.failure),
|
||||
);
|
||||
}
|
||||
|
||||
void selectDate(DateTime date) {
|
||||
@@ -78,7 +82,9 @@ class ViewOrdersCubit extends Cubit<ViewOrdersState> {
|
||||
final DateTime? selectedDate = state.selectedDate;
|
||||
final DateTime updatedSelectedDate =
|
||||
selectedDate != null &&
|
||||
calendarDays.any((DateTime day) => _isSameDay(day, selectedDate))
|
||||
calendarDays.any(
|
||||
(DateTime day) => _isSameDay(day, selectedDate),
|
||||
)
|
||||
? selectedDate
|
||||
: calendarDays.first;
|
||||
emit(
|
||||
@@ -135,17 +141,21 @@ class ViewOrdersCubit extends Cubit<ViewOrdersState> {
|
||||
}
|
||||
|
||||
Future<void> _refreshAcceptedApplications(DateTime day) async {
|
||||
try {
|
||||
final Map<String, List<Map<String, dynamic>>> apps = await _getAcceptedAppsUseCase(
|
||||
OrdersDayArguments(day: day),
|
||||
);
|
||||
final List<OrderItem> updatedOrders =
|
||||
_applyApplications(state.orders, apps);
|
||||
emit(state.copyWith(orders: updatedOrders));
|
||||
_updateDerivedState();
|
||||
} catch (_) {
|
||||
// Keep existing data on failure.
|
||||
}
|
||||
await handleErrorWithResult(
|
||||
action: () async {
|
||||
final Map<String, List<Map<String, dynamic>>> apps =
|
||||
await _getAcceptedAppsUseCase(OrdersDayArguments(day: day));
|
||||
final List<OrderItem> updatedOrders = _applyApplications(
|
||||
state.orders,
|
||||
apps,
|
||||
);
|
||||
emit(state.copyWith(orders: updatedOrders));
|
||||
_updateDerivedState();
|
||||
},
|
||||
onError: (_) {
|
||||
// Keep existing data on failure, just log error via handleErrorWithResult
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
List<OrderItem> _applyApplications(
|
||||
@@ -153,7 +163,8 @@ class ViewOrdersCubit extends Cubit<ViewOrdersState> {
|
||||
Map<String, List<Map<String, dynamic>>> apps,
|
||||
) {
|
||||
return orders.map((OrderItem order) {
|
||||
final List<Map<String, dynamic>> confirmed = apps[order.id] ?? const <Map<String, dynamic>>[];
|
||||
final List<Map<String, dynamic>> confirmed =
|
||||
apps[order.id] ?? const <Map<String, dynamic>>[];
|
||||
if (confirmed.isEmpty) {
|
||||
return order;
|
||||
}
|
||||
@@ -209,9 +220,10 @@ class ViewOrdersCubit extends Cubit<ViewOrdersState> {
|
||||
).format(state.selectedDate!);
|
||||
|
||||
// Filter by date
|
||||
final List<OrderItem> ordersOnDate = state.orders
|
||||
.where((OrderItem s) => s.date == selectedDateStr)
|
||||
.toList();
|
||||
final List<OrderItem> ordersOnDate =
|
||||
state.orders
|
||||
.where((OrderItem s) => s.date == selectedDateStr)
|
||||
.toList();
|
||||
|
||||
// Sort by start time
|
||||
ordersOnDate.sort(
|
||||
@@ -219,30 +231,38 @@ class ViewOrdersCubit extends Cubit<ViewOrdersState> {
|
||||
);
|
||||
|
||||
if (state.filterTab == 'all') {
|
||||
final List<OrderItem> filtered = ordersOnDate
|
||||
.where(
|
||||
(OrderItem s) =>
|
||||
// TODO(orders): move PENDING to its own tab once available.
|
||||
<String>['OPEN', 'FILLED', 'CONFIRMED', 'PENDING', 'ASSIGNED']
|
||||
.contains(s.status),
|
||||
)
|
||||
.toList();
|
||||
final List<OrderItem> filtered =
|
||||
ordersOnDate
|
||||
.where(
|
||||
(OrderItem s) =>
|
||||
// TODO(orders): move PENDING to its own tab once available.
|
||||
<String>[
|
||||
'OPEN',
|
||||
'FILLED',
|
||||
'CONFIRMED',
|
||||
'PENDING',
|
||||
'ASSIGNED',
|
||||
].contains(s.status),
|
||||
)
|
||||
.toList();
|
||||
print(
|
||||
'ViewOrders tab=all statuses=${ordersOnDate.map((OrderItem s) => s.status).toList()} filtered=${filtered.length}',
|
||||
);
|
||||
return filtered;
|
||||
} else if (state.filterTab == 'active') {
|
||||
final List<OrderItem> filtered = ordersOnDate
|
||||
.where((OrderItem s) => s.status == 'IN_PROGRESS')
|
||||
.toList();
|
||||
final List<OrderItem> filtered =
|
||||
ordersOnDate
|
||||
.where((OrderItem s) => s.status == 'IN_PROGRESS')
|
||||
.toList();
|
||||
print(
|
||||
'ViewOrders tab=active statuses=${ordersOnDate.map((OrderItem s) => s.status).toList()} filtered=${filtered.length}',
|
||||
);
|
||||
return filtered;
|
||||
} else if (state.filterTab == 'completed') {
|
||||
final List<OrderItem> filtered = ordersOnDate
|
||||
.where((OrderItem s) => s.status == 'COMPLETED')
|
||||
.toList();
|
||||
final List<OrderItem> filtered =
|
||||
ordersOnDate
|
||||
.where((OrderItem s) => s.status == 'COMPLETED')
|
||||
.toList();
|
||||
print(
|
||||
'ViewOrders tab=completed statuses=${ordersOnDate.map((OrderItem s) => s.status).toList()} filtered=${filtered.length}',
|
||||
);
|
||||
@@ -260,11 +280,17 @@ class ViewOrdersCubit extends Cubit<ViewOrdersState> {
|
||||
|
||||
if (category == 'active') {
|
||||
return state.orders
|
||||
.where((OrderItem s) => s.date == selectedDateStr && s.status == 'IN_PROGRESS')
|
||||
.where(
|
||||
(OrderItem s) =>
|
||||
s.date == selectedDateStr && s.status == 'IN_PROGRESS',
|
||||
)
|
||||
.length;
|
||||
} else if (category == 'completed') {
|
||||
return state.orders
|
||||
.where((OrderItem s) => s.date == selectedDateStr && s.status == 'COMPLETED')
|
||||
.where(
|
||||
(OrderItem s) =>
|
||||
s.date == selectedDateStr && s.status == 'COMPLETED',
|
||||
)
|
||||
.length;
|
||||
}
|
||||
return 0;
|
||||
@@ -281,9 +307,15 @@ class ViewOrdersCubit extends Cubit<ViewOrdersState> {
|
||||
.where(
|
||||
(OrderItem s) =>
|
||||
s.date == selectedDateStr &&
|
||||
<String>['OPEN', 'FILLED', 'CONFIRMED', 'PENDING', 'ASSIGNED']
|
||||
.contains(s.status),
|
||||
<String>[
|
||||
'OPEN',
|
||||
'FILLED',
|
||||
'CONFIRMED',
|
||||
'PENDING',
|
||||
'ASSIGNED',
|
||||
].contains(s.status),
|
||||
)
|
||||
.length;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user