import 'package:pshared/data/mapper/organization/bound.dart'; import 'package:pshared/models/recipient/filter.dart'; import 'package:pshared/models/recipient/recipient.dart'; import 'package:pshared/models/recipient/status.dart'; import 'package:pshared/models/recipient/type.dart'; import 'package:pshared/provider/organizations.dart'; import 'package:pshared/provider/template.dart'; import 'package:pshared/service/recipient/service.dart'; class RecipientsProvider extends GenericProvider { late OrganizationsProvider _organizations; RecipientFilter _selectedFilter = RecipientFilter.all; String _query = ''; RecipientFilter get selectedFilter => _selectedFilter; String get query => _query; List get recipients => List.unmodifiable(items.toList()..sort((a, b) => a.storable.createdAt.compareTo(b.storable.createdAt))); RecipientsProvider() : super(service: RecipientService.basicService); List get filteredRecipients { List filtered = recipients.where((r) { switch (_selectedFilter) { case RecipientFilter.ready: return r.status == RecipientStatus.ready; case RecipientFilter.registered: return r.status == RecipientStatus.registered; case RecipientFilter.notRegistered: return r.status == RecipientStatus.notRegistered; case RecipientFilter.all: return true; } }).toList(); if (_query.isNotEmpty) { filtered = filtered.where((r) => r.matchesQuery(_query)).toList(); } return filtered; } void setFilter(RecipientFilter filter) { _selectedFilter = filter; notifyListeners(); } void setQuery(String query) { _query = query.trim().toLowerCase(); notifyListeners(); } Future create({ required String name, required String email, }) async => createObject( _organizations.current.id, newRecipient( organizationRef: _organizations.current.id, email: email, name: name, status: RecipientStatus.ready, type: RecipientType.internal, ).toDTO().toJson(), ); void updateProviders(OrganizationsProvider organizations) { _organizations = organizations; if (_organizations.isOrganizationSet) { load(_organizations.current.id, _organizations.current.id); } } }