public Action <IRendererTreeBuilder> BuildRendererTree <TItem>(IActualItemContext <TItem> actualItemContext, FormField field, string localColumnName) where TItem : class
        {
            var value = actualItemContext.GetActualItemColumnValue(localColumnName);

            var valueExpression = GetValueExpression(actualItemContext.ActualItem, field);
            var convertedValue  = ConvertToDateTime(value);

            actualItemContext.SetActualItemColumnValue(localColumnName, convertedValue);

            return(builder =>
            {
                builder
                .OpenElement(HtmlTagNames.Div, "form-field-wrapper")
                .OpenComponent(typeof(InputDate <>).MakeGenericType(field.Type))
                .AddAttribute("id", $"create-form-{localColumnName}")
                .AddAttribute("class", "edit-text-field")
                .AddAttribute("Value", convertedValue)
                .AddAttribute("ValueExpression", valueExpression);

                if (field.UnderlyingType == typeof(DateTime))
                {
                    if (field.IsNullable)
                    {
                        builder
                        .AddAttribute("ValueChanged", _eventCallbackFactory.Create <DateTime?>(this, v => actualItemContext.SetActualItemColumnValue(localColumnName, v)))
                        .CloseComponent()
                        .AddValidationMessage <DateTime?>(valueExpression);
                    }
                    else
                    {
                        builder
                        .AddAttribute("ValueChanged", _eventCallbackFactory.Create <DateTime>(this, v => actualItemContext.SetActualItemColumnValue(localColumnName, v)))
                        .CloseComponent()
                        .AddValidationMessage <DateTime>(valueExpression);
                    }
                }
                else
                {
                    if (field.IsNullable)
                    {
                        builder
                        .AddAttribute("ValueChanged", _eventCallbackFactory.Create <DateTimeOffset?>(this, v => actualItemContext.SetActualItemColumnValue(localColumnName, v)))
                        .CloseComponent()
                        .AddValidationMessage <DateTimeOffset?>(valueExpression);
                    }
                    else
                    {
                        builder
                        .AddAttribute("ValueChanged", _eventCallbackFactory.Create <DateTimeOffset>(this, v => actualItemContext.SetActualItemColumnValue(localColumnName, v)))
                        .CloseComponent()
                        .AddValidationMessage <DateTimeOffset>(valueExpression);
                    }
                }

                builder.CloseElement();
            });
        }
        public Action <IRendererTreeBuilder> BuildRendererTree <TItem>(IActualItemContext <TItem> actualItemContext, FormField field) where TItem : class
        {
            var localColumnName = actualItemContext.ActualColumnName;
            var value           = actualItemContext.GetActualItemColumnValue(localColumnName);

            var valueExpression = GetValueExpression(actualItemContext.ActualItem, field);

            return(builder =>
            {
                builder
                .OpenElement(HtmlTagNames.Div, "form-field-wrapper")
                .OpenComponent(typeof(InputNumber <>).MakeGenericType(field.Type))
                .AddAttribute("Id", $"create-form-{localColumnName}")
                .AddAttribute("Class", "edit-text-field")
                .AddAttribute("Value", value)
                .AddAttribute("ValueExpression", valueExpression);

                if (field.UnderlyneType == typeof(int))
                {
                    if (field.IsNullable)
                    {
                        builder
                        .AddAttribute("ValueChanged", eventCallbackFactory.Create <int?>(this, v => actualItemContext.SetActualItemColumnValue(localColumnName, v)))
                        .CloseComponent()
                        .AddValidationMessage <int?>(valueExpression);
                    }
                    else
                    {
                        builder
                        .AddAttribute("ValueChanged", eventCallbackFactory.Create <int>(this, v => actualItemContext.SetActualItemColumnValue(localColumnName, v)))
                        .CloseComponent()
                        .AddValidationMessage <int>(valueExpression);
                    }
                }
                else if (field.UnderlyneType == typeof(long))
                {
                    if (field.IsNullable)
                    {
                        builder
                        .AddAttribute("ValueChanged", eventCallbackFactory.Create <long?>(this, v => actualItemContext.SetActualItemColumnValue(localColumnName, v)))
                        .CloseComponent()
                        .AddValidationMessage <long?>(valueExpression);
                    }
                    else
                    {
                        builder
                        .AddAttribute("ValueChanged", eventCallbackFactory.Create <long>(this, v => actualItemContext.SetActualItemColumnValue(localColumnName, v)))
                        .CloseComponent()
                        .AddValidationMessage <long>(valueExpression);
                    }
                }
                else if (field.UnderlyneType == typeof(decimal))
                {
                    if (field.IsNullable)
                    {
                        builder
                        .AddAttribute("ValueChanged", eventCallbackFactory.Create <decimal?>(this, v => actualItemContext.SetActualItemColumnValue(localColumnName, v)))
                        .CloseComponent()
                        .AddValidationMessage <decimal?>(valueExpression);
                    }
                    else
                    {
                        builder
                        .AddAttribute("ValueChanged", eventCallbackFactory.Create <decimal>(this, v => actualItemContext.SetActualItemColumnValue(localColumnName, v)))
                        .CloseComponent()
                        .AddValidationMessage <decimal>(valueExpression);
                    }
                }
                else if (field.UnderlyneType == typeof(double))
                {
                    if (field.IsNullable)
                    {
                        builder
                        .AddAttribute("ValueChanged", eventCallbackFactory.Create <double?>(this, v => actualItemContext.SetActualItemColumnValue(localColumnName, v)))
                        .CloseComponent()
                        .AddValidationMessage <double?>(valueExpression);
                    }
                    else
                    {
                        builder
                        .AddAttribute("ValueChanged", eventCallbackFactory.Create <double>(this, v => actualItemContext.SetActualItemColumnValue(localColumnName, v)))
                        .CloseComponent()
                        .AddValidationMessage <double>(valueExpression);
                    }
                }
                else if (field.UnderlyneType == typeof(float))
                {
                    if (field.IsNullable)
                    {
                        builder
                        .AddAttribute("ValueChanged", eventCallbackFactory.Create <float?>(this, v => actualItemContext.SetActualItemColumnValue(localColumnName, v)))
                        .CloseComponent()
                        .AddValidationMessage <float?>(valueExpression);
                    }
                    else
                    {
                        builder
                        .AddAttribute("ValueChanged", eventCallbackFactory.Create <float>(this, v => actualItemContext.SetActualItemColumnValue(localColumnName, v)))
                        .CloseComponent()
                        .AddValidationMessage <float>(valueExpression);
                    }
                }

                builder.CloseElement();
            });
        }
Example #3
0
        public Action <IRendererTreeBuilder> BuildRendererTree <TItem>(IActualItemContext <TItem> actualItemContext, FormField field) where TItem : class
        {
            var localColumnName = actualItemContext.ActualColumnName;
            var value           = actualItemContext.GetActualItemColumnValue(localColumnName);

            var valueExpression = GetValueExpression(actualItemContext.ActualItem, field);

            return(builder =>
            {
                builder
                .OpenElement(HtmlTagNames.Div, "checkbox")
                .OpenElement(HtmlTagNames.Label)
                .OpenComponent(typeof(InputCheckbox))
                .AddAttribute("Id", $"create-form-{localColumnName}")
                .AddAttribute("Class", string.Empty)
                .AddAttribute("Value", value)
                .AddAttribute("ValueExpression", valueExpression);

                if (field.IsNullable)
                {
                    builder.AddAttribute("ValueChanged", eventCallbackFactory.Create <bool?>(this, v => actualItemContext.SetActualItemColumnValue(localColumnName, v)));
                }
                else
                {
                    builder.AddAttribute("ValueChanged", eventCallbackFactory.Create <bool>(this, v => actualItemContext.SetActualItemColumnValue(localColumnName, v)));
                }

                builder
                .CloseComponent()
                .OpenElement(HtmlTagNames.Span, "cr")
                .OpenElement(HtmlTagNames.I, "cr-icon fa fa-check")
                .CloseElement()
                .CloseElement()
                .CloseElement()
                .CloseElement();

                if (field.IsNullable)
                {
                    builder.AddValidationMessage <bool?>(valueExpression);
                }
                else
                {
                    builder.AddValidationMessage <bool>(valueExpression);
                }
            });
        }
        private LambdaExpression GetValueExpression(object actualItem, FormField field)
        {
            if (field.UnderlyneType == typeof(int))
            {
                if (field.IsNullable)
                {
                    return(Expression.Lambda <Func <int?> >(
                               Expression.Property(
                                   Expression.Constant(actualItem),
                                   field.Info)));
                }
                else
                {
                    return(Expression.Lambda <Func <int> >(
                               Expression.Property(
                                   Expression.Constant(actualItem),
                                   field.Info)));
                }
            }
            else if (field.UnderlyneType == typeof(long))
            {
                if (field.IsNullable)
                {
                    return(Expression.Lambda <Func <long?> >(
                               Expression.Property(
                                   Expression.Constant(actualItem),
                                   field.Info)));
                }
                else
                {
                    return(Expression.Lambda <Func <long> >(
                               Expression.Property(
                                   Expression.Constant(actualItem),
                                   field.Info)));
                }
            }
            else if (field.UnderlyneType == typeof(decimal))
            {
                if (field.IsNullable)
                {
                    return(Expression.Lambda <Func <decimal?> >(
                               Expression.Property(
                                   Expression.Constant(actualItem),
                                   field.Info)));
                }
                else
                {
                    return(Expression.Lambda <Func <decimal> >(
                               Expression.Property(
                                   Expression.Constant(actualItem),
                                   field.Info)));
                }
            }
            else if (field.UnderlyneType == typeof(double))
            {
                if (field.IsNullable)
                {
                    return(Expression.Lambda <Func <double?> >(
                               Expression.Property(
                                   Expression.Constant(actualItem),
                                   field.Info)));
                }
                else
                {
                    return(Expression.Lambda <Func <double> >(
                               Expression.Property(
                                   Expression.Constant(actualItem),
                                   field.Info)));
                }
            }
            else if (field.UnderlyneType == typeof(float))
            {
                if (field.IsNullable)
                {
                    return(Expression.Lambda <Func <float?> >(
                               Expression.Property(
                                   Expression.Constant(actualItem),
                                   field.Info)));
                }
                else
                {
                    return(Expression.Lambda <Func <float> >(
                               Expression.Property(
                                   Expression.Constant(actualItem),
                                   field.Info)));
                }
            }

            throw new ArgumentException($"{nameof(NumberInputBuilder)} does not support type {field.UnderlyneType}");
        }
        public Action <IRendererTreeBuilder> BuildRendererTree <TItem>(IActualItemContext <TItem> actualItemContext, FormField field, string columnName) where TItem : class
        {
            var value = actualItemContext.GetActualItemColumnValue(columnName);

            var valueExpression = Expression.Lambda <Func <string> >(
                Expression.Property(
                    Expression.Constant(actualItemContext.ActualItem),
                    field.Info));

            return(builder =>
            {
                builder
                .OpenElement(HtmlTagNames.Div, "form-field-wrapper")
                .OpenComponent(typeof(InputText))
                .AddAttribute("id", $"create-form-{columnName}")
                .AddAttribute("class", "edit-text-field")
                .AddAttribute("Value", value)
                .AddAttribute("ValueExpression", valueExpression)
                .AddAttribute("ValueChanged", _eventCallbackFactory.Create <string>(this, v => actualItemContext.SetActualItemColumnValue(columnName, v)))
                .CloseComponent()
                .AddValidationMessage <string>(valueExpression)
                .CloseElement();
            });
        }