updateRowFromJson method

Future<String?> updateRowFromJson({
  1. required String sourceId,
  2. required String collection,
  3. required Map<String, Object?> originalRow,
  4. required Map<String, Object?> updatedRow,
})

Perbarui baris dari map JSON hasil edit. Mengembalikan pesan error atau null jika sukses.

Implementation

Future<String?> updateRowFromJson({
  required String sourceId,
  required String collection,
  required Map<String, Object?> originalRow,
  required Map<String, Object?> updatedRow,
}) async {
  final original = Map<String, Object?>.from(originalRow);
  final originalDisplay = DbLensJsonUtils.prepareRow(original);
  final updated = Map<String, Object?>.from(
    withoutRowIdEntry(Map<String, dynamic>.from(updatedRow)),
  );

  final changedColumns = <String>[];
  for (final key in originalDisplay.keys) {
    if (!updated.containsKey(key)) continue;
    if (!_valuesEqual(originalDisplay[key], updated[key])) {
      changedColumns.add(key);
    }
  }

  if (changedColumns.isEmpty) return null;

  busy = true;
  lastError = null;
  notifyListeners();
  try {
    for (final column in changedColumns) {
      await _repository.updateCell(
        sourceId,
        collection,
        column,
        updated[column],
        original,
      );
    }
    busy = false;
    notifyListeners();
    return null;
  } catch (error) {
    busy = false;
    final message = 'Failed to update row: $error';
    lastError = message;
    notifyListeners();
    return message;
  }
}