55 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| import 'package:hooks_riverpod/hooks_riverpod.dart';
 | |
| import 'package:island/models/activity.dart';
 | |
| import 'package:island/pods/network.dart';
 | |
| import 'package:riverpod_annotation/riverpod_annotation.dart';
 | |
| 
 | |
| part 'event_calendar.g.dart';
 | |
| 
 | |
| /// Query parameters for fetching event calendar data
 | |
| class EventCalendarQuery {
 | |
|   /// Username to fetch calendar for, null means current user ('me')
 | |
|   final String? uname;
 | |
| 
 | |
|   /// Year to fetch calendar for
 | |
|   final int year;
 | |
| 
 | |
|   /// Month to fetch calendar for
 | |
|   final int month;
 | |
| 
 | |
|   const EventCalendarQuery({
 | |
|     required this.uname,
 | |
|     required this.year,
 | |
|     required this.month,
 | |
|   });
 | |
| 
 | |
|   @override
 | |
|   bool operator ==(Object other) =>
 | |
|       identical(this, other) ||
 | |
|       other is EventCalendarQuery &&
 | |
|           runtimeType == other.runtimeType &&
 | |
|           uname == other.uname &&
 | |
|           year == other.year &&
 | |
|           month == other.month;
 | |
| 
 | |
|   @override
 | |
|   int get hashCode => uname.hashCode ^ year.hashCode ^ month.hashCode;
 | |
| }
 | |
| 
 | |
| /// Provider for fetching event calendar data
 | |
| /// This can be used anywhere in the app where calendar data is needed
 | |
| @riverpod
 | |
| Future<List<SnEventCalendarEntry>> eventCalendar(
 | |
|   Ref ref,
 | |
|   EventCalendarQuery query,
 | |
| ) async {
 | |
|   final client = ref.watch(apiClientProvider);
 | |
|   final resp = await client.get(
 | |
|     '/pass/accounts/${query.uname ?? 'me'}/calendar',
 | |
|     queryParameters: {'year': query.year, 'month': query.month},
 | |
|   );
 | |
|   return resp.data
 | |
|       .map((e) => SnEventCalendarEntry.fromJson(e))
 | |
|       .cast<SnEventCalendarEntry>()
 | |
|       .toList();
 | |
| }
 |