fieldDescription function

ResourceField fieldDescription(
  1. DataBean<DataObject> bean,
  2. DataField field,
  3. Iterable<DataBean<DataObject>> relatedBeans
)

Implementation

ResourceField fieldDescription(
  DataBean bean,
  DataField field,
  Iterable<DataBean> relatedBeans,
) {
  final meta = field.metaOfType<Meta>();
  final apertureMeta = field.metaOfType<ApertureField>();
  final validation = field.constraintOfType<RegExpConstraint>();
  final length = field.constraintOfType<MaxLengthConstraint>();
  final isAuto = field.hasMetaOfType<Id>((id) => id.auto);

  final ResourceFieldLookup? lookup;
  if (field.metaOfType<RelationId>() case final relationId?) {
    final relationBean = relatedBeans.firstWhere(
      (e) => e.type == relationId.type,
    );
    lookup = ResourceFieldLookup(
      resourceId: relationBean.name,
      resourceFieldId: relationBean.requireIdField.name,
      filter: ResourceRelationFilter(),
    );
  } else {
    lookup = null;
  }

  return ResourceField(
    id: field.name,
    name: meta?.name ?? niceName(field.name),
    description: meta?.description,
    readOnly: isAuto || (apertureMeta?.readOnly ?? false),
    validation: validation?.expression,
    length: length?.length,
    type: _fieldType(field),
    nullable: field.type.isNullable,
    objectDescription: _objectDescription(field, relatedBeans),
    enumValues: field
        .constraintOfType<EnumConstraint>()
        ?.values
        .map((e) => e.name)
        .toList(),
    lookup: lookup,
  );
}