rescheduleCalendarEntry method Null safety
- {required CalendarEntry calendarEntry,
- required String? placeToMeet,
- required String? message,
- required Instant date,
- required String userId}
Reschedules a calendar entry.
Implementation
Future<CalendarEntry?> rescheduleCalendarEntry({
required final CalendarEntry calendarEntry,
required final String? placeToMeet,
required final String? message,
required final Instant date,
required final String userId,
}) async {
final ownInvitation = calendarEntry.invitations
.firstWhereOrNull((element) => element.participant.userId == userId);
if (ownInvitation == null) {
return null;
}
//
// Note: we only pass the string parameters as variables below because
// flutter_graphql chokes on the ID and Date types. Trying to supply these
// as variables will always make the query fail.
//
final gqlQueryString = '''
mutation RescheduleInvitation(\$meetingLocation: String, \$message: String) {
rescheduleInvitation(
invitation: "${ownInvitation.id}",
newDateTime: "${InstantPattern.extendedIso.format(date)}",
message: \$message,
meetingLocation: \$meetingLocation,
) {
${InvitationGqlEntity.gqlQueryFragment}
}
}
''';
try {
final queryResult = await graphQLClient.mutate<void>(MutationOptions(
document: gql(gqlQueryString),
variables: <String, dynamic>{
"message": message,
"meetingLocation": placeToMeet,
},
));
if (queryResult.hasException) {
logger?.e(queryResult.exception.toString());
return null;
}
final data =
queryResult.data!['rescheduleInvitation'] as Map<String, dynamic>;
final updatedCalendarEntryEntity = CalendarEntryGqlEntity.fromJson(
data['calendarEntry'] as Map<String, dynamic>);
if (updatedCalendarEntryEntity == null) {
return null;
}
final updatedCalendarEntry = updatedCalendarEntryEntity.toCalendarEntry();
if (!_calendarStreamController.isClosed) {
_calendarStreamController.add([
EntityUpdated(updatedCalendarEntry, calendarEntry),
].toBuiltList());
}
return updatedCalendarEntry;
} catch (e, stackTrace) {
logger?.e('Could not reschedule invitation', e.toString(), stackTrace);
return null;
}
}