MotorSignal-App/lib/services/clubs/club_providers.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);
});