customDocLabel static method

String customDocLabel(
  1. String lang,
  2. Map<String, dynamic> doc
)

Custom document display name based on language. Follows React priority as closely as possible: selected option/label translation → displayNameFR/EN → name → translated labelKey / documentListType / workspaceSettings fallback → key.

Implementation

static String customDocLabel(String lang, Map<String, dynamic> doc) {
  final key = doc['key'] as String? ?? '';
  final label = doc['label'] as String?;
  final labelKey = doc['labelKey'] as String?;
  final translationKeys = <String>[
    if (label != null && label.isNotEmpty) label,
    if (labelKey != null && labelKey.isNotEmpty) labelKey,
    if (standardDocLabelKeys.containsKey(key)) standardDocLabelKeys[key]!,
    if (key.isNotEmpty) 'documentListType.$key',
    if (key.isNotEmpty) 'workspaceSettings.documentsPageName.$key',
  ];

  for (final translationKey in translationKeys) {
    final translated = t(lang, translationKey);
    if (translated != translationKey) {
      return translated;
    }
  }

  if (lang == 'fr') {
    final fr = doc['displayNameFR'] as String?;
    if (fr != null && fr.trim().isNotEmpty) return fr.trim();
    final en = doc['displayNameEN'] as String?;
    if (en != null && en.trim().isNotEmpty) return en.trim();
  } else if (lang == 'en') {
    final en = doc['displayNameEN'] as String?;
    if (en != null && en.trim().isNotEmpty) return en.trim();
    final fr = doc['displayNameFR'] as String?;
    if (fr != null && fr.trim().isNotEmpty) return fr.trim();
  } else {
    // Other languages: try FR first, then EN
    final fr = doc['displayNameFR'] as String?;
    if (fr != null && fr.trim().isNotEmpty) return fr.trim();
    final en = doc['displayNameEN'] as String?;
    if (en != null && en.trim().isNotEmpty) return en.trim();
  }

  final name = doc['name'] as String?;
  if (name != null && name.trim().isNotEmpty) return name.trim();

  for (final translationKey in translationKeys) {
    final translated = t(lang, translationKey);
    if (translated != translationKey) {
      return translated;
    }
  }

  return key;
}