/// Invoices Provider /// /// Riverpod providers for managing invoices state. library; import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:worker/core/network/dio_client.dart'; import 'package:worker/features/invoices/data/datasources/invoice_remote_datasource.dart'; import 'package:worker/features/invoices/data/repositories/invoice_repository_impl.dart'; import 'package:worker/features/invoices/domain/entities/invoice.dart'; import 'package:worker/features/invoices/domain/repositories/invoice_repository.dart'; part 'invoices_provider.g.dart'; /// Invoice Repository Provider @riverpod Future invoiceRepository(Ref ref) async { final dioClient = await ref.watch(dioClientProvider.future); final remoteDataSource = InvoiceRemoteDataSource(dioClient); return InvoiceRepositoryImpl(remoteDataSource); } /// Invoices Provider /// /// Provides list of all invoices from repository. @riverpod class Invoices extends _$Invoices { @override Future> build() async { try { final repository = await ref.read(invoiceRepositoryProvider.future); final invoices = await repository.getInvoicesList( limitStart: 0, limitPageLength: 0, // 0 = get all ); // Sort by posting date (newest first) invoices.sort((a, b) => b.postingDate.compareTo(a.postingDate)); return invoices; } catch (e) { throw Exception('Failed to load invoices: $e'); } } /// Refresh invoices Future refresh() async { state = const AsyncValue.loading(); state = await AsyncValue.guard(() async { final repository = await ref.read(invoiceRepositoryProvider.future); final invoices = await repository.getInvoicesList( limitStart: 0, limitPageLength: 0, ); // Sort by posting date (newest first) invoices.sort((a, b) => b.postingDate.compareTo(a.postingDate)); return invoices; }); } } /// Invoice Detail Provider /// /// Provides invoice detail by ID. @riverpod Future invoiceDetail(Ref ref, String name) async { final repository = await ref.watch(invoiceRepositoryProvider.future); return await repository.getInvoiceDetail(name); }