60 lines
2.2 KiB
Dart
60 lines
2.2 KiB
Dart
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import '../auth/auth_providers.dart';
|
|
import 'club_models.dart';
|
|
import 'club_service.dart';
|
|
|
|
/// Provider for ClubService.
|
|
final clubServiceProvider = Provider<ClubService>((ref) {
|
|
return ClubService();
|
|
});
|
|
|
|
/// Stream of the active user's active Club memberships.
|
|
/// Gated to registered, non-anonymous users.
|
|
final myClubsProvider = StreamProvider<List<ClubMember>>((ref) {
|
|
final user = ref.watch(currentUserProvider);
|
|
if (user == null || user.isAnonymous) {
|
|
return Stream.value(const []);
|
|
}
|
|
final service = ref.watch(clubServiceProvider);
|
|
return service.myActiveClubsStream(user.uid);
|
|
});
|
|
|
|
/// Stream of incoming club invitations for the active user.
|
|
/// Gated to registered, non-anonymous users.
|
|
final myClubInvitesProvider = StreamProvider<List<ClubMember>>((ref) {
|
|
final user = ref.watch(currentUserProvider);
|
|
if (user == null || user.isAnonymous) {
|
|
return Stream.value(const []);
|
|
}
|
|
final service = ref.watch(clubServiceProvider);
|
|
return service.myInvitationsStream(user.uid);
|
|
});
|
|
|
|
/// Realtime stream of a specific Club's root document.
|
|
final clubDetailProvider = StreamProvider.family<Club?, String>((ref, clubId) {
|
|
final service = ref.watch(clubServiceProvider);
|
|
return service.clubStream(clubId);
|
|
});
|
|
|
|
/// Realtime stream of the active caller's membership document within a specific Club.
|
|
final currentMemberProvider = StreamProvider.family<ClubMember?, String>((ref, clubId) {
|
|
final user = ref.watch(currentUserProvider);
|
|
if (user == null || user.isAnonymous) {
|
|
return Stream.value(null);
|
|
}
|
|
final service = ref.watch(clubServiceProvider);
|
|
return service.memberStream(clubId, user.uid);
|
|
});
|
|
|
|
/// Realtime stream of active members for a specific Club (paginated limit 50).
|
|
final clubMembersProvider = StreamProvider.family<List<ClubMember>, String>((ref, clubId) {
|
|
final service = ref.watch(clubServiceProvider);
|
|
return service.activeMembersStream(clubId);
|
|
});
|
|
|
|
/// Realtime stream of pending join requests for a specific Club (leadership only).
|
|
final pendingClubRequestsProvider = StreamProvider.family<List<ClubMember>, String>((ref, clubId) {
|
|
final service = ref.watch(clubServiceProvider);
|
|
return service.pendingRequestsStream(clubId);
|
|
});
|