flushValueDraft method
Implementation
Future<void> flushValueDraft(CatalogRow row, String locale) async {
final key = _draftKey(row.keyPath, locale);
final draft = _valueDrafts[key];
if (draft == null) {
return;
}
draft.timer?.cancel();
if (!_isValueDraftDirty(draft) || draft.rawError != null) {
notifyListeners();
return;
}
draft.syncState = CatalogDraftSyncState.saving;
notifyListeners();
try {
final updatedRow = await _client.updateCell(
keyPath: row.keyPath,
locale: locale,
value: draft.value,
);
draft.baseValue = cloneCatalogValue(updatedRow.valuesByLocale[locale]);
final sourceValue = updatedRow.valuesByLocale[_queue.meta?.sourceLocale];
draft.editorMode = detectEditorMode(
serverValue: updatedRow.valuesByLocale[locale],
sourceValue: sourceValue,
rawPinned: draft.rawPinned,
);
draft.value = buildInitialCatalogValue(
serverValue: updatedRow.valuesByLocale[locale],
sourceValue: sourceValue,
editorMode: draft.editorMode,
);
draft.rawText = prettyCatalogJson(draft.value);
draft.rawError = null;
draft.touched = false;
draft.syncState = CatalogDraftSyncState.saved;
draft.errorMessage = null;
_queue.upsertRow(updatedRow);
await _queue.refreshSummary();
_scheduleSavedReset(draft);
notifyListeners();
} catch (error) {
draft.syncState = CatalogDraftSyncState.saveError;
draft.errorMessage = error.toString();
notifyListeners();
}
}