isFieldRequired static method

bool isFieldRequired({
  1. required FormFieldModel field,
  2. required Map<String, dynamic> formData,
  3. required List<NestedContext> contexts,
})

Implementation

static bool isFieldRequired({
  required FormFieldModel field,
  required Map<String, dynamic> formData,
  required List<NestedContext> contexts,
}) {
  // Check if the field is hard-required
  if (field.required == true) {
    return true;
  }

  // If field has no validations, it's not required
  if (field.validations == null || field.validations!.isEmpty) {
    return false;
  }

  final requiredValidation = field.validations!.firstWhereOrNull(
    (ValidationRule v) => v.type == ValidationRuleType.required,
  );
  if (requiredValidation != null) {
    // Check the dependencies of the validation rule
    if (requiredValidation.dependencies.isNotEmpty) {
      var allDependenciesMet = true;
      for (final dependency in requiredValidation.dependencies) {
        final resolvedFieldPath = _resolveTemplatedFieldPath(
          dependency.field,
          contexts,
        );
        final dependencyValue = getNestedFormValue(
          formData,
          resolvedFieldPath,
        );

        final conditionMet = _evaluateCondition(
          dependencyValue,
          dependency.operator,
          dependency.compareValue,
        );

        if (!conditionMet) {
          allDependenciesMet = false;
          break; // If any dependency fails, field is not required
        }
      }

      if (!allDependenciesMet) {
        return false; // Dependencies not met, field is not required
      }

      return true;
    }
  }
  return false;
}