updateRowFromJson method

Future<String?> updateRowFromJson(
  1. Map<String, Object?> originalRow,
  2. Map<String, Object?> updatedRow
)

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

Implementation

Future<String?> updateRowFromJson(
  Map<String, Object?> originalRow,
  Map<String, Object?> updatedRow,
) async {
  final sourceId = selectedSourceId;
  final collection = selectedCollection;
  if (sourceId == null || collection == null || !canEditCells) {
    return 'Editing is not available in this view.';
  }

  final original = Map<String, Object?>.from(originalRow);
  final originalDisplay = JsonViewUtils.prepareRow(original);
  final updated = Map<String, Object?>.from(updatedRow)..remove('_rowid_');

  final validationError = _validateRowUpdate(original, updated);
  if (validationError != null) return validationError;

  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;

  try {
    for (final column in changedColumns) {
      await _updateCell(
        sourceId,
        collection,
        column,
        updated[column],
        original,
      );
    }
    await refresh();
    return null;
  } catch (error) {
    return 'Failed to update row: $error';
  }
}