newKeyState method

CatalogKeyState newKeyState({
  1. required List<String> locales,
  2. required String sourceLocale,
  3. required String sourceHash,
  4. required Map<String, dynamic> valuesByLocale,
  5. required bool markGreenIfComplete,
  6. required DateTime now,
})

Implementation

CatalogKeyState newKeyState({
  required List<String> locales,
  required String sourceLocale,
  required String sourceHash,
  required Map<String, dynamic> valuesByLocale,
  required bool markGreenIfComplete,
  required DateTime now,
}) {
  final cells = <String, CatalogCellState>{};
  for (final locale in locales) {
    final value = valuesByLocale[locale];
    final isSourceLocale = locale == sourceLocale;
    final hasValue = !isCatalogValueEmpty(value);

    if (isSourceLocale && hasValue) {
      cells[locale] = CatalogCellState(
        status: CatalogCellStatus.green,
        lastReviewedSourceHash: sourceHash,
        lastReviewedAt: now,
        lastEditedAt: now,
      );
      continue;
    }

    if (isSourceLocale) {
      cells[locale] = CatalogCellState(
        status: CatalogCellStatus.warning,
        reason: CatalogStatusReasons.newKeyNeedsTranslationReview,
        lastEditedAt: now,
      );
      continue;
    }

    if (hasValue) {
      cells[locale] = CatalogCellState(
        status: markGreenIfComplete ? CatalogCellStatus.warning : CatalogCellStatus.green,
        reason: markGreenIfComplete ? CatalogStatusReasons.newKeyNeedsTranslationReview : null,
        lastEditedAt: now,
      );
    } else {
      cells[locale] = CatalogCellState(
        status: CatalogCellStatus.red,
        reason: CatalogStatusReasons.targetMissing,
        lastEditedAt: now,
      );
    }
  }

  return CatalogKeyState(
    sourceHash: sourceHash,
    cells: cells,
  );
}