84 lines
2.4 KiB
Dart
84 lines
2.4 KiB
Dart
import 'package:equatable/equatable.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
|
import 'package:flux/core/blocs/session/session_cubit.dart';
|
|
import 'package:flux/features/operations/data/operations_repository.dart';
|
|
import 'package:flux/features/operations/models/operation_model.dart';
|
|
import 'package:get_it/get_it.dart';
|
|
|
|
part 'operation_list_state.dart';
|
|
|
|
class OperationListCubit extends Cubit<OperationListState> {
|
|
final OperationsRepository _repository = GetIt.I<OperationsRepository>();
|
|
final SessionCubit _sessionCubit = GetIt.I<SessionCubit>();
|
|
|
|
OperationListCubit() : super(const OperationListState()) {
|
|
loadOperations(refresh: true);
|
|
}
|
|
|
|
Future<void> loadOperations({bool refresh = false}) async {
|
|
if (state.status == OperationListStatus.loading) return;
|
|
if (!refresh && state.hasReachedMax) return;
|
|
|
|
emit(
|
|
state.copyWith(
|
|
status: OperationListStatus.loading,
|
|
errorMessage: null,
|
|
operations: refresh ? [] : state.operations,
|
|
hasReachedMax: refresh ? false : state.hasReachedMax,
|
|
),
|
|
);
|
|
|
|
try {
|
|
final currentOffset = refresh ? 0 : state.operations.length;
|
|
final companyId = _sessionCubit.state.company?.id;
|
|
|
|
if (companyId == null) {
|
|
throw Exception("Company ID non trovato nella sessione");
|
|
}
|
|
|
|
final newOperations = await _repository.fetchOperations(
|
|
companyId: companyId,
|
|
offset: currentOffset,
|
|
limit: 50,
|
|
searchTerm: state.query,
|
|
dateRange: state.dateRange,
|
|
);
|
|
|
|
final bool reachedMax = newOperations.length < 50;
|
|
|
|
emit(
|
|
state.copyWith(
|
|
status: OperationListStatus.success,
|
|
operations: refresh
|
|
? newOperations
|
|
: [...state.operations, ...newOperations],
|
|
hasReachedMax: reachedMax,
|
|
),
|
|
);
|
|
} catch (e) {
|
|
emit(
|
|
state.copyWith(
|
|
status: OperationListStatus.failure,
|
|
errorMessage: "Errore nel caricamento operazioni: $e",
|
|
),
|
|
);
|
|
}
|
|
}
|
|
|
|
void updateFilters({String? query, DateTimeRange? range}) {
|
|
emit(
|
|
state.copyWith(
|
|
query: query ?? state.query,
|
|
dateRange: range ?? state.dateRange,
|
|
),
|
|
);
|
|
loadOperations(refresh: true);
|
|
}
|
|
|
|
void clearFilters() {
|
|
emit(const OperationListState()); // Resetta tutto allo stato iniziale
|
|
loadOperations(refresh: true);
|
|
}
|
|
}
|