Files
tasq/lib/providers/sync_queue_provider.dart
T
2026-04-27 06:20:39 +08:00

108 lines
3.4 KiB
Dart

import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'announcements_provider.dart';
import 'attendance_provider.dart';
import 'chat_provider.dart';
import 'it_service_request_provider.dart';
import 'leave_provider.dart';
import 'notifications_provider.dart';
import 'pass_slip_provider.dart';
import 'profile_provider.dart';
import 'tasks_provider.dart';
import 'tickets_provider.dart';
import 'user_offices_provider.dart';
/// Total count of items waiting to sync across all modules.
/// Used by the offline banner and reconnect overlay for dynamic messaging.
final pendingSyncCountProvider = Provider<int>((ref) {
// Tasks
final tasks = ref.watch(offlinePendingTasksProvider).length;
final taskUpdates = ref.watch(offlinePendingTaskUpdatesProvider).length;
final messages = ref.watch(offlinePendingMessagesProvider)
.values
.fold<int>(0, (sum, list) => sum + list.length);
final assignments = ref.watch(offlinePendingAssignmentsProvider).length;
final activityLogs =
ref.watch(offlinePendingActivityLogItemsProvider).length;
// Leave
final leaves = ref.watch(offlinePendingLeavesProvider).length;
final leaveUpdates = ref.watch(offlinePendingLeaveUpdatesProvider).length;
// Pass slips
final passSlips = ref.watch(offlinePendingPassSlipsProvider).length;
final passSlipUpdates =
ref.watch(offlinePendingPassSlipUpdatesProvider).length;
// Announcements
final announcements = ref.watch(offlinePendingAnnouncementsProvider).length;
final announcementUpdates =
ref.watch(offlinePendingAnnouncementUpdatesProvider).length;
final announcementComments =
ref.watch(offlinePendingAnnouncementCommentsProvider).length;
// IT Service Requests
final itRequests =
ref.watch(offlinePendingItServiceRequestsProvider).length;
final itRequestUpdates =
ref.watch(offlinePendingItServiceRequestUpdatesProvider).length;
final isrActions = ref.watch(offlinePendingIsrActionsProvider).length;
// Attendance
final checkIns = ref.watch(offlinePendingCheckInsProvider).length;
final attendanceUpdates =
ref.watch(offlinePendingAttendanceUpdatesProvider).length;
// Notifications
final notifReads =
ref.watch(offlinePendingNotificationReadsProvider).length;
final notifBatchReads =
ref.watch(offlinePendingBatchNotificationReadsProvider).length;
// Profile
final profileUpdates =
ref.watch(offlinePendingProfileUpdatesProvider).length;
// Tickets
final tickets = ref.watch(offlinePendingTicketsProvider).length;
final ticketUpdates =
ref.watch(offlinePendingTicketUpdatesProvider).length;
// Offices
final offices = ref.watch(offlinePendingOfficesProvider).length;
// User offices
final officeOps = ref.watch(offlinePendingUserOfficeOpsProvider).length;
// Chat
final chatMessages = ref.watch(offlinePendingChatMessagesProvider)
.values
.fold<int>(0, (sum, list) => sum + list.length);
return tasks +
taskUpdates +
messages +
assignments +
activityLogs +
leaves +
leaveUpdates +
passSlips +
passSlipUpdates +
announcements +
announcementUpdates +
announcementComments +
itRequests +
itRequestUpdates +
isrActions +
checkIns +
attendanceUpdates +
notifReads +
notifBatchReads +
profileUpdates +
tickets +
ticketUpdates +
offices +
officeOps +
chatMessages;
});