372e7eca86
Single landing-screen provider fans out to requests/quarantine/users list endpoints in parallel and returns counts for the section-card badges. Per-section AsyncNotifier controllers land alongside their screens in subsequent commits. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
54 lines
1.8 KiB
Dart
54 lines
1.8 KiB
Dart
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
|
|
import '../api/endpoints/admin_invites.dart';
|
|
import '../api/endpoints/admin_quarantine.dart';
|
|
import '../api/endpoints/admin_requests.dart';
|
|
import '../api/endpoints/admin_users.dart';
|
|
import '../library/library_providers.dart' show dioProvider;
|
|
|
|
final adminRequestsApiProvider = FutureProvider<AdminRequestsApi>((ref) async {
|
|
return AdminRequestsApi(await ref.watch(dioProvider.future));
|
|
});
|
|
|
|
final adminQuarantineApiProvider =
|
|
FutureProvider<AdminQuarantineApi>((ref) async {
|
|
return AdminQuarantineApi(await ref.watch(dioProvider.future));
|
|
});
|
|
|
|
final adminUsersApiProvider = FutureProvider<AdminUsersApi>((ref) async {
|
|
return AdminUsersApi(await ref.watch(dioProvider.future));
|
|
});
|
|
|
|
final adminInvitesApiProvider = FutureProvider<AdminInvitesApi>((ref) async {
|
|
return AdminInvitesApi(await ref.watch(dioProvider.future));
|
|
});
|
|
|
|
class AdminCounts {
|
|
const AdminCounts({
|
|
required this.requests,
|
|
required this.quarantine,
|
|
required this.users,
|
|
});
|
|
final int requests;
|
|
final int quarantine;
|
|
final int users;
|
|
}
|
|
|
|
/// Fans out to the three list endpoints in parallel and rolls them up
|
|
/// into `{requests, quarantine, users}` for the landing screen badges.
|
|
final adminCountsProvider = FutureProvider<AdminCounts>((ref) async {
|
|
final requestsApi = await ref.watch(adminRequestsApiProvider.future);
|
|
final quarantineApi = await ref.watch(adminQuarantineApiProvider.future);
|
|
final usersApi = await ref.watch(adminUsersApiProvider.future);
|
|
final results = await Future.wait([
|
|
requestsApi.list(),
|
|
quarantineApi.list(),
|
|
usersApi.list(),
|
|
]);
|
|
return AdminCounts(
|
|
requests: (results[0] as List).length,
|
|
quarantine: (results[1] as List).length,
|
|
users: (results[2] as List).length,
|
|
);
|
|
});
|