getFieldsElementsMap method

Map<String, UIElement> getFieldsElementsMap({
  1. List<String>? fields,
  2. List<String>? ignoreFields,
  3. bool resolveUIComponents = true,
})

Implementation

Map<String, UIElement> getFieldsElementsMap({
  List<String>? fields,
  List<String>? ignoreFields,
  bool resolveUIComponents = true,
}) {
  fields ??= [];
  ignoreFields ??= [];

  final specificFields = fields.isNotEmpty;

  final fieldsElements = getFieldsElements();

  final map = <String, UIElement>{};

  for (var elem in fieldsElements) {
    var fieldName = getElementFieldName(
      elem,
      resolveUIComponents: resolveUIComponents,
    )!;

    var include = specificFields ? fields.contains(fieldName) : true;

    if (include && !ignoreFields.contains(fieldName)) {
      if (map.containsKey(fieldName)) {
        var elemValue = parseChildElementValue(
          map[fieldName],
          allowTextAsValue: false,
          resolveUIComponents: resolveUIComponents,
        );

        if (isEmptyObject(elemValue)) {
          var value = parseChildElementValue(
            elem,
            allowTextAsValue: false,
            resolveUIComponents: resolveUIComponents,
          );
          if (isNotEmptyObject(value)) {
            map[fieldName] = elem;
          }
        }
      } else {
        map[fieldName] = elem;
      }
    }
  }

  return map;
}