import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../core/api/api_client.dart'; import '../events/providers.dart'; import '../home/providers.dart'; import '../portfolio/providers.dart'; import 'data/imports_api.dart'; final importsApiProvider = Provider((ref) => ImportsApi(ref.watch(apiProvider).dio)); /// The list on `/imports`. Not auto-disposed by status: the filter is a separate provider so /// changing it refetches without rebuilding the page state. final importsStatusFilterProvider = StateProvider((ref) => null); final importsListProvider = FutureProvider.autoDispose>((ref) async { final status = ref.watch(importsStatusFilterProvider); return ref.watch(importsApiProvider).list(status: status); }); /// A single import's preview. For an uncommitted import the server recomputes counts and /// reconciliation on every read, so this is deliberately re-fetched rather than cached from /// the list response. final importPreviewProvider = FutureProvider.autoDispose.family((ref, id) async { return ref.watch(importsApiProvider).get(id); }); /// Everything whose numbers change once events land in (or move inside) the ledger: /// portfolio, holdings, allocation, the value series, the dashboard and the event list. /// Called after a successful commit and after every pending-instrument resolve. void invalidateLedgerDependents(WidgetRef ref) { invalidatePortfolioProviders(ref); invalidateHomeProviders(ref); ref.invalidate(eventsControllerProvider); }