shouldRenderField method

bool shouldRenderField(
  1. Field field
)

Implementation

bool shouldRenderField(Field field) {
  if (field.hidden == true) return false;

  if (field.conditionalOn != null) {
    final conditional = field.conditionalOn!;
    final conditionalField = conditional.field;
    final valuesList = conditional.values;
    // Only support 'label' or 'value' for conditionalValueKey
    final conditionalValueKey = conditional.conditionalValueKey ?? 'value';
    // Try to get operator from conditionalOn if present, else default to 'eq'
    final operator = (conditional as dynamic).operator ?? 'eq';

    final selectedValue = values[conditionalField];
    final fieldOptions = options[conditionalField] ?? [];

    // Find the selected option for the conditional field
    final selectedOption = fieldOptions.cast<Option?>().firstWhere(
          (option) => option?.value == selectedValue,
          orElse: () => null,
        );

    dynamic selectedKeyValue;
    if (selectedOption != null) {
      if (conditionalValueKey == 'label') {
        selectedKeyValue = selectedOption.label;
      } else if (conditionalValueKey == 'value') {
        selectedKeyValue = selectedOption.value;
      } else {
        selectedKeyValue = selectedValue;
      }
    } else {
      selectedKeyValue = selectedValue;
    }

    if (operator == 'eq') {
      return valuesList.contains(selectedKeyValue);
    } else if (operator == 'neq') {
      return !valuesList.contains(selectedKeyValue);
    }
    return false;
  }

  return true;
}