import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../core/api/api_providers.dart'; import '../../../core/api/guarded_api_call.dart'; import '../../auth/data/auth_providers.dart'; import '../domain/inventory_item.dart'; import '../domain/inventory_consumption.dart'; import 'inventory_repository.dart'; class InventoryQuery { final String location; final String sort; const InventoryQuery({required this.location, required this.sort}); } class _StringNotifier extends Notifier { _StringNotifier(this._initial); final String _initial; @override String build() => _initial; void setValue(String value) { state = value; } } final inventoryLocationFilterProvider = NotifierProvider<_StringNotifier, String>(() => _StringNotifier('')); final inventorySortFilterProvider = NotifierProvider<_StringNotifier, String>(() => _StringNotifier('')); final inventoryQueryProvider = Provider((ref) { final location = ref.watch(inventoryLocationFilterProvider); final sort = ref.watch(inventorySortFilterProvider); return InventoryQuery(location: location, sort: sort); }); final inventoryRepositoryProvider = Provider((ref) { return InventoryRepository(ref.watch(apiClientProvider)); }); final inventoryProvider = FutureProvider>((ref) async { final token = await ref.watch(authStateProvider.future); final query = ref.watch(inventoryQueryProvider); return guardedApiCall( ref, () => ref.read(inventoryRepositoryProvider).fetchInventory( location: query.location, sort: query.sort, token: token, ), ); }); final inventoryDetailProvider = FutureProvider.family((ref, id) async { final token = await ref.watch(authStateProvider.future); return guardedApiCall( ref, () => ref.read(inventoryRepositoryProvider).fetchInventoryItem(id, token: token), ); }); final consumptionHistoryProvider = FutureProvider.family, int>((ref, id) async { final token = await ref.watch(authStateProvider.future); return guardedApiCall( ref, () => ref .read(inventoryRepositoryProvider) .fetchConsumptionHistory(id, token: token), ); });