Files
sendico/frontend/pshared/lib/provider/invitations.dart
2026-01-12 21:28:18 +03:00

65 lines
2.0 KiB
Dart

import 'package:pshared/data/mapper/invitation/invitation.dart';
import 'package:pshared/models/invitation/invitation.dart';
import 'package:pshared/models/invitation/status.dart';
import 'package:pshared/provider/organizations.dart';
import 'package:pshared/provider/template.dart';
import 'package:pshared/service/invitation/service.dart';
class InvitationsProvider extends GenericProvider<Invitation> {
InvitationsProvider() : super(service: InvitationService.basicService);
late OrganizationsProvider _organizations;
String? _loadedOrganizationId;
List<Invitation> get invitations => List<Invitation>.unmodifiable(items);
void updateProviders(OrganizationsProvider organizations) {
_organizations = organizations;
if (_organizations.isOrganizationSet) {
final organizationId = _organizations.current.id;
if (_loadedOrganizationId != organizationId) {
_loadedOrganizationId = organizationId;
load(organizationId, organizationId);
}
}
}
Future<Invitation> sendInvitation({
required String email,
required String roleRef,
required String inviterRef,
String name = '',
String comment = '',
DateTime? expiresAt,
}) async {
final invitation = newInvitation(
organizationRef: _organizations.current.id,
roleRef: roleRef,
inviterRef: inviterRef,
email: email,
name: name,
comment: comment,
expiresAt: expiresAt,
);
return createObject(_organizations.current.id, invitation.toDTO().toJson());
}
Future<void> updateInvitation(Invitation invitation) {
return update(invitation.toDTO().toJson());
}
Future<void> revokeInvitation(Invitation invitation) {
return updateInvitation(invitation.copyWith(status: InvitationStatus.revoked));
}
Future<void> setInvitationArchived(Invitation invitation, bool archived) {
return setArchived(
organizationRef: _organizations.current.id,
objectRef: invitation.id,
newIsArchived: archived,
);
}
}