validateDoneBlockers method
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;
}