Offline rediness
This commit is contained in:
@@ -105,3 +105,73 @@ final pendingSyncCountProvider = Provider<int>((ref) {
|
||||
officeOps +
|
||||
chatMessages;
|
||||
});
|
||||
|
||||
/// Per-category breakdown of pending-sync items (only non-zero entries).
|
||||
/// Keys are stable category identifiers used for icon/label lookup in the UI.
|
||||
final pendingSyncBreakdownProvider = Provider<Map<String, int>>((ref) {
|
||||
final result = <String, int>{};
|
||||
|
||||
final tasks = ref.watch(offlinePendingTasksProvider).length +
|
||||
ref.watch(offlinePendingTaskUpdatesProvider).length;
|
||||
if (tasks > 0) result['tasks'] = tasks;
|
||||
|
||||
final tickets = ref.watch(offlinePendingTicketsProvider).length +
|
||||
ref.watch(offlinePendingTicketUpdatesProvider).length;
|
||||
if (tickets > 0) result['tickets'] = tickets;
|
||||
|
||||
final messages = ref
|
||||
.watch(offlinePendingMessagesProvider)
|
||||
.values
|
||||
.fold<int>(0, (s, l) => s + l.length) +
|
||||
ref
|
||||
.watch(offlinePendingChatMessagesProvider)
|
||||
.values
|
||||
.fold<int>(0, (s, l) => s + l.length);
|
||||
if (messages > 0) result['messages'] = messages;
|
||||
|
||||
final assignments = ref.watch(offlinePendingAssignmentsProvider).length;
|
||||
if (assignments > 0) result['assignments'] = assignments;
|
||||
|
||||
final activityLogs =
|
||||
ref.watch(offlinePendingActivityLogItemsProvider).length;
|
||||
if (activityLogs > 0) result['activity_logs'] = activityLogs;
|
||||
|
||||
final checkIns = ref.watch(offlinePendingCheckInsProvider).length;
|
||||
if (checkIns > 0) result['check_ins'] = checkIns;
|
||||
|
||||
final attendanceUpdates =
|
||||
ref.watch(offlinePendingAttendanceUpdatesProvider).length;
|
||||
if (attendanceUpdates > 0) result['attendance'] = attendanceUpdates;
|
||||
|
||||
final leaves = ref.watch(offlinePendingLeavesProvider).length +
|
||||
ref.watch(offlinePendingLeaveUpdatesProvider).length;
|
||||
if (leaves > 0) result['leaves'] = leaves;
|
||||
|
||||
final passSlips = ref.watch(offlinePendingPassSlipsProvider).length +
|
||||
ref.watch(offlinePendingPassSlipUpdatesProvider).length;
|
||||
if (passSlips > 0) result['pass_slips'] = passSlips;
|
||||
|
||||
final announcements = ref.watch(offlinePendingAnnouncementsProvider).length +
|
||||
ref.watch(offlinePendingAnnouncementUpdatesProvider).length +
|
||||
ref.watch(offlinePendingAnnouncementCommentsProvider).length;
|
||||
if (announcements > 0) result['announcements'] = announcements;
|
||||
|
||||
final itRequests = ref.watch(offlinePendingItServiceRequestsProvider).length +
|
||||
ref.watch(offlinePendingItServiceRequestUpdatesProvider).length +
|
||||
ref.watch(offlinePendingIsrActionsProvider).length;
|
||||
if (itRequests > 0) result['it_requests'] = itRequests;
|
||||
|
||||
final notifReads = ref.watch(offlinePendingNotificationReadsProvider).length +
|
||||
ref.watch(offlinePendingBatchNotificationReadsProvider).length;
|
||||
if (notifReads > 0) result['notification_reads'] = notifReads;
|
||||
|
||||
final profileUpdates =
|
||||
ref.watch(offlinePendingProfileUpdatesProvider).length;
|
||||
if (profileUpdates > 0) result['profile_updates'] = profileUpdates;
|
||||
|
||||
final officeChanges = ref.watch(offlinePendingOfficesProvider).length +
|
||||
ref.watch(offlinePendingUserOfficeOpsProvider).length;
|
||||
if (officeChanges > 0) result['office_changes'] = officeChanges;
|
||||
|
||||
return result;
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user