This commit is contained in:
2026-05-15 13:32:34 +02:00
parent f19f19a279
commit f4a8314978
5 changed files with 219 additions and 41 deletions

View File

@@ -10,24 +10,24 @@ class TicketListCubit extends Cubit<TicketListState> {
static const int _limit = 20; // Paginazione a blocchi di 20
TicketListCubit() : super(const TicketListState()) {
fetchTickets(reset: true);
loadTickets(refresh: true);
}
/// Recupera i ticket. Se reset = true, svuota la lista e riparte da offset 0.
Future<void> fetchTickets({bool reset = false}) async {
Future<void> loadTickets({bool refresh = false}) async {
if (state.isLoading) return;
if (!reset && state.hasReachedMax) return;
if (!refresh && state.hasReachedMax) return;
emit(
state.copyWith(
isLoading: true,
errorMessage: '',
tickets: reset ? [] : state.tickets,
tickets: refresh ? [] : state.tickets,
),
);
try {
final currentOffset = reset ? 0 : state.tickets.length;
final currentOffset = refresh ? 0 : state.tickets.length;
final newTickets = await _repository.fetchStoreTickets(
offset: currentOffset,
@@ -41,7 +41,7 @@ class TicketListCubit extends Cubit<TicketListState> {
emit(
state.copyWith(
tickets: reset ? newTickets : [...state.tickets, ...newTickets],
tickets: refresh ? newTickets : [...state.tickets, ...newTickets],
isLoading: false,
hasReachedMax: newTickets.length < _limit,
),
@@ -74,6 +74,24 @@ class TicketListCubit extends Cubit<TicketListState> {
clearStatus: clearStatus,
),
);
fetchTickets(reset: true); // Applica i filtri e ricarica
loadTickets(refresh: true); // Applica i filtri e ricarica
}
void toggleTicketSelection(String ticketId) {
final currentSelection = Set<String>.from(state.selectedTicketIds);
if (currentSelection.contains(ticketId)) {
currentSelection.remove(ticketId);
} else {
currentSelection.add(ticketId);
}
emit(state.copyWith(selectedTicketIds: currentSelection));
}
void clearSelection() {
emit(state.copyWith(selectedTicketIds: {}));
}
void selectAll(List<String> ticketIds) {
emit(state.copyWith(selectedTicketIds: ticketIds.toSet()));
}
}

View File

@@ -7,6 +7,7 @@ class TicketListState extends Equatable {
final bool isLoading;
final bool hasReachedMax;
final String errorMessage;
final Set<String> selectedTicketIds;
// Filtri attivi
final String? searchTerm;
@@ -20,6 +21,7 @@ class TicketListState extends Equatable {
this.isLoading = false,
this.hasReachedMax = false,
this.errorMessage = '',
this.selectedTicketIds = const {},
this.searchTerm,
this.dateRange,
this.statusFilter,
@@ -32,6 +34,7 @@ class TicketListState extends Equatable {
bool? isLoading,
bool? hasReachedMax,
String? errorMessage,
Set<String>? selectedTicketIds,
String? searchTerm,
DateTimeRange? dateRange,
TicketStatus? statusFilter,
@@ -51,6 +54,7 @@ class TicketListState extends Equatable {
statusFilter: clearStatus ? null : (statusFilter ?? this.statusFilter),
ticketTypeFilter: ticketTypeFilter ?? this.ticketTypeFilter,
staffIdFilter: staffIdFilter ?? this.staffIdFilter,
selectedTicketIds: selectedTicketIds ?? this.selectedTicketIds,
);
}
@@ -60,6 +64,7 @@ class TicketListState extends Equatable {
isLoading,
hasReachedMax,
errorMessage,
selectedTicketIds,
searchTerm,
dateRange,
statusFilter,