Exemple #1
0
        private static IEnumerable <Field> RenderFields(HttpContext httpContext, object feature, MethodInfo method, ParameterInfo parameter)
        {
            var type = parameter.ParameterType;

            if (IsSimpleValue(type))
            {
                var field = new Field();
                field.Name     = GetName(parameter);
                field.Title    = field.Name.ChangeCase(TextCase.ProperCase);
                field.DataType = KnownFieldDataTypes.GetDataTypeName(type);
                field.Type     = KnownFieldTypes.GetTypeName(field.DataType);
                yield return(field);
            }
            else
            {
                var prefix   = GetName(parameter);
                var category = prefix.ChangeCase(TextCase.ProperCase);

                var properties = type.GetProperties();
                foreach (var property in properties)
                {
                    var suffix = GetName(property);

                    var field = new Field();
                    field.Category = category;
                    field.Name     = $"{prefix}.{suffix}";
                    field.Title    = suffix.ChangeCase(TextCase.ProperCase);
                    field.DataType = KnownFieldDataTypes.GetDataTypeName(property.PropertyType);
                    field.Type     = KnownFieldTypes.GetTypeName(field.DataType);

                    var widget =
                        type.GetCustomAttributes(true).OfType <WidgetAttribute>().FirstOrDefault();
                    if (widget != null)
                    {
                        field.CopyFrom(widget);
                        field.Properties = new FieldProperties();
                        field.Properties.CopyFrom(widget);

                        // TODO: Implementar HAS OPTIONS de alguma forma
                        //
                        //// Verificando se o widget da suporte à interface IHasOptions<TOption>
                        //var options = field.Get<Option[]>("Options");
                        //if (options != null)
                        //{
                        //  var values = field.Get<object[]>("Value");
                        //  if (values == null)
                        //  {
                        //    var value = field.Get("Value");
                        //    values = value.AsSingle().NonNull().ToArray();
                        //  }

                        //  var fieldValues = new FieldValueCollection();
                        //  foreach (var option in options)
                        //  {
                        //    var fieldValue = new FieldValue();
                        //    fieldValue.CopyFrom(options);
                        //    fieldValue.Selected = values.Contains(option.Value);
                        //  }
                        //  field.Value = fieldValues;
                        //}
                    }

                    yield return(field);
                }
            }
        }
Exemple #2
0
 public static string MakeFieldType(Type type)
 {
     return(KnownFieldDataTypes.GetDataTypeName(type) ?? KnownFieldDataTypes.Text);
 }