SupabaseRealtimePayload.fromJson constructor

SupabaseRealtimePayload.fromJson(
  1. Map<String, dynamic> json
)

Implementation

factory SupabaseRealtimePayload.fromJson(Map<String, dynamic> json) {
  final schema = json['schema'] as String;
  final table = json['table'] as String;
  final commitTimestamp = json['commit_timestamp'] as String;
  final eventType = json['type'] as String;
  final primaryKeys = (json['columns'] as List)
      .where(
        (e) =>
            ((e as Map<String, dynamic>)['flags'] as List?)
                ?.contains('key') ==
            true,
      )
      .map((e) => (e as Map<String, dynamic>)['name'] as String)
      .toList();
  Map<String, dynamic>? newRecord;
  if (json['type'] == 'INSERT' || json['type'] == 'UPDATE') {
    final columns = convertColumnList(json['columns'] as List<dynamic>?);
    final records = json['record'] as Map<String, dynamic>? ?? {};
    newRecord = convertChangeData(columns, records);
  }
  Map<String, dynamic>? oldRecord;
  if (json['type'] == 'UPDATE' || json['type'] == 'DELETE') {
    final columns = convertColumnList(json['columns'] as List<dynamic>?);
    final records = json['old_record'] as Map<String, dynamic>? ?? {};
    oldRecord = convertChangeData(columns, records);
  }
  return SupabaseRealtimePayload(
    table: table,
    schema: schema,
    commitTimestamp: commitTimestamp,
    eventType: eventType,
    newRecord: newRecord,
    oldRecord: oldRecord,
    // ignore: deprecated_member_use_from_same_package
    primaryKeys: primaryKeys,
  );
}