report_providers.dart 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import 'package:flutter_riverpod/flutter_riverpod.dart';
  2. import 'package:asr_client/services/mock_data_service.dart';
  3. import 'package:asr_client/models/report.dart';
  4. final reportGroupsProvider = Provider<List<ReportDateGroup>>(
  5. (_) => MockDataService.reportGroups,
  6. );
  7. final reportFilterProvider = StateProvider<ReportFilter>(
  8. (_) => ReportFilter.all,
  9. );
  10. enum ReportFilter { all, ok, warn, draft }
  11. final filteredReportsProvider = Provider<List<ReportDateGroup>>((ref) {
  12. final groups = ref.watch(reportGroupsProvider);
  13. final filter = ref.watch(reportFilterProvider);
  14. if (filter == ReportFilter.all) return groups;
  15. return groups
  16. .map(
  17. (group) => ReportDateGroup(
  18. label: group.label,
  19. reports: group.reports
  20. .where((report) => _matchesFilter(report.status, filter))
  21. .toList(),
  22. ),
  23. )
  24. .where((group) => group.reports.isNotEmpty)
  25. .toList();
  26. });
  27. bool _matchesFilter(ReportStatus status, ReportFilter filter) {
  28. switch (filter) {
  29. case ReportFilter.ok:
  30. return status == ReportStatus.ok;
  31. case ReportFilter.warn:
  32. return status == ReportStatus.warn;
  33. case ReportFilter.draft:
  34. return status == ReportStatus.draft;
  35. case ReportFilter.all:
  36. return true;
  37. }
  38. }