flushValueDraft method

Future<void> flushValueDraft(
  1. CatalogRow row,
  2. String locale
)

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();
  }
}