validateDoneBlockers method

List<String> validateDoneBlockers(
  1. CatalogRow row,
  2. String locale,
  3. CatalogLocalizations l10n
)

Implementation

List<String> validateDoneBlockers(CatalogRow row, String locale, CatalogLocalizations l10n) {
  final sourceLocale = _queue.meta?.sourceLocale;
  if (sourceLocale == null) {
    return const <String>[];
  }
  final draft = valueDraftFor(row, locale);
  final blockers = <String>[];
  if (locale == sourceLocale) {
    return blockers;
  }
  if (draft.rawError != null) {
    blockers.add(l10n.advancedJsonHelp);
    return blockers;
  }
  if (draft.syncState == CatalogDraftSyncState.dirty ||
      draft.syncState == CatalogDraftSyncState.saving ||
      draft.syncState == CatalogDraftSyncState.saveError) {
    blockers.add(l10n.blockerWaitAutosave);
  }
  if (isCatalogValueEmpty(draft.value)) {
    blockers.add(l10n.blockerTranslationEmpty);
  }
  final requiredPaths = requiredCatalogPaths(
    sourceValue: row.valuesByLocale[sourceLocale],
    currentValue: draft.value,
    editorMode: draft.editorMode,
  );
  final missingBranches = requiredPaths.where((path) {
    final value = readCatalogPath(draft.value, path);
    if (value is String) {
      return value.trim().isEmpty;
    }
    return value == null;
  }).toList();
  if (missingBranches.isNotEmpty && draft.editorMode != CatalogEditorMode.raw) {
    blockers.add(l10n.blockerFillBranches);
  }
  final sourcePlaceholders = collectCatalogPlaceholders(row.valuesByLocale[sourceLocale]);
  final targetPlaceholders = collectCatalogPlaceholders(draft.value);
  final missingPlaceholders = sourcePlaceholders.where((item) => !targetPlaceholders.contains(item)).toList();
  if (missingPlaceholders.isNotEmpty) {
    blockers.add('${l10n.blockerMissingPlaceholders}: ${missingPlaceholders.map((item) => '{$item}').join(', ')}');
  }
  return blockers;
}