updateRowFromJson method
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';
}
}