307 lines
17 KiB
C#
307 lines
17 KiB
C#
using AyCode.Entities.Users;
|
|
using DevExpress.Blazor;
|
|
using Microsoft.AspNetCore.Components;
|
|
using Microsoft.AspNetCore.Components.Forms;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel.DataAnnotations;
|
|
using System.Linq;
|
|
using System.Linq.Expressions;
|
|
using System.Reflection;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using TIAM.Entities.TransferDestinations;
|
|
using TIAMWebApp.Shared.Application.Utility;
|
|
|
|
|
|
namespace TIAMSharedUI.Pages.Components
|
|
{
|
|
public partial class InputWizard : ComponentBase
|
|
{
|
|
[Inject]
|
|
LogToBrowserConsole logToBrowserConsole { get; set; }
|
|
|
|
string FormSubmitResult = "";
|
|
//TestUserData Data { get; set; } = new TestUserData();
|
|
TransferDestination Data { get; set; } = new TransferDestination();
|
|
|
|
string PhoneMask { get; set; } = "(999)000-0000";
|
|
|
|
void HandleValidSubmit()
|
|
{
|
|
FormSubmitResult = "You have been registred successully.";
|
|
}
|
|
void HandleInvalidSubmit()
|
|
{
|
|
FormSubmitResult = "Please correct all errors";
|
|
}
|
|
|
|
public RenderFragment CreateEditFormFields() => formLayoutBuilder =>
|
|
{
|
|
logToBrowserConsole.LogToBC("Hellooooo");
|
|
|
|
var propertyList = typeof(TransferDestination).GetProperties();
|
|
//var propertyList = typeof(TestUserData).GetProperties();
|
|
formLayoutBuilder.OpenComponent<DxFormLayout>(0);
|
|
formLayoutBuilder.AddAttribute(1, "ChildContent", (RenderFragment)((layoutItemBuilder) =>
|
|
{
|
|
int i = 0;
|
|
foreach (var property in propertyList)
|
|
{
|
|
//if(property.Name == "Id" || property.Name == "Latitude" || property.Name == "Longitude" || property.Name == "Created" || property.Name == "Modified")
|
|
if(property.Name == "Id" || property.Name == "Created" || property.Name == "Modified")
|
|
{
|
|
continue;
|
|
}
|
|
|
|
DataTypeAttribute attrList = (DataTypeAttribute)property.GetCustomAttributes(typeof(DataTypeAttribute), false).First();
|
|
DisplayAttribute displayLabel = (DisplayAttribute)property.GetCustomAttributes(typeof(DisplayAttribute), false).First();
|
|
layoutItemBuilder.OpenComponent<DxFormLayoutItem>(i++);
|
|
layoutItemBuilder.AddAttribute(i++, "Caption", displayLabel.Name);
|
|
layoutItemBuilder.AddAttribute(i++, "ColSpanMd", 12);
|
|
//layoutItemBuilder.AddAttribute(i++, "CssClass", "form-field");
|
|
var access = Expression.Property(Expression.Constant(Data), property.Name);
|
|
var lambda = Expression.Lambda(typeof(Func<>).MakeGenericType(property.PropertyType), access);
|
|
var lambda2 = Expression.Lambda(typeof(Func<>).MakeGenericType(property.PropertyType), access);
|
|
|
|
layoutItemBuilder.AddAttribute(i++, "Template", (RenderFragment<Object>)((context) => ((editor) =>
|
|
{
|
|
var j = 0;
|
|
switch (attrList.DataType)
|
|
{
|
|
|
|
case DataType.Text:
|
|
{
|
|
editor.OpenComponent<DxTextBox>(j++);
|
|
logToBrowserConsole.LogToBC($"{property.Name}, {property.PropertyType}");
|
|
editor.AddAttribute(j++, "Text", property.GetValue(Data));
|
|
editor.AddAttribute(j++, "TextExpression", lambda);
|
|
editor.AddAttribute(j++, "CssClass", "form-field");
|
|
editor.AddAttribute(j++, "TextChanged", EventCallback.Factory.Create<System.String>(this, str => { property.SetValue(Data, str); }));
|
|
editor.CloseComponent();
|
|
break;
|
|
}
|
|
case DataType.Password:
|
|
{
|
|
|
|
editor.OpenComponent<DxTextBox>(j++);
|
|
editor.AddAttribute(j++, "Password", true);
|
|
editor.AddAttribute(j++, "NullText", "Password");
|
|
editor.AddAttribute(j++, "Text", property.GetValue(Data));
|
|
editor.AddAttribute(j++, "TextExpression", lambda);
|
|
editor.AddAttribute(j++, "TextChanged", EventCallback.Factory.Create<System.String>(this, str => { property.SetValue(Data, str); }));
|
|
editor.CloseComponent();
|
|
break;
|
|
}
|
|
case DataType.PhoneNumber:
|
|
{
|
|
editor.OpenComponent<DxMaskedInput<String>>(j++);
|
|
editor.AddAttribute(j++, "Value", property.GetValue(Data));
|
|
editor.AddAttribute(j++, "Mask", PhoneMask);
|
|
editor.AddAttribute(j++, "ValueExpression", lambda);
|
|
editor.AddAttribute(j++, "ValueChanged", EventCallback.Factory.Create<System.String>(this, str => { property.SetValue(Data, str); }));
|
|
editor.CloseComponent();
|
|
break;
|
|
}
|
|
case DataType.Date:
|
|
{
|
|
editor.OpenComponent<DxDateEdit<DateTime>>(j);
|
|
editor.AddAttribute(j++, "Date", property.GetValue(Data));
|
|
editor.AddAttribute(j++, "DateExpression", lambda);
|
|
editor.AddAttribute(j++, "DateChanged", EventCallback.Factory.Create<System.DateTime>(this, str => { property.SetValue(Data, str); }));
|
|
editor.CloseComponent();
|
|
break;
|
|
|
|
}
|
|
case DataType.Custom:
|
|
{
|
|
if(property.PropertyType == typeof(double))
|
|
{
|
|
|
|
editor.OpenComponent<DxTextBox>(j);
|
|
object _value = property.GetValue(Data);
|
|
string _valueString = _value == null ? "" : _value.ToString();
|
|
logToBrowserConsole.LogToBC($"Bleh: {_value.GetType()}, {_valueString}");
|
|
editor.AddAttribute(j++, "Text", _valueString);
|
|
//editor.AddAttribute(j++, "Text", property.GetValue(Data));
|
|
var lambda2 = Expression.Lambda<Func<double>>(Expression.Convert(access, typeof(string)));
|
|
editor.AddAttribute(j++, "TextExpression", lambda2);
|
|
editor.AddAttribute(j++, "CssClass", "form-field");
|
|
editor.AddAttribute(j++, "TextChanged", EventCallback.Factory.Create<System.String>(this, str => { property.SetValue(Data, str); }));
|
|
editor.CloseComponent();
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
|
|
editor.OpenComponent<DxComboBox<String, String>>(j);
|
|
editor.AddAttribute(j++, "Data", AdditionalData.Occupations);
|
|
editor.AddAttribute(j++, "Value", property.GetValue(Data));
|
|
editor.AddAttribute(j++, "ValueExpression", lambda);
|
|
editor.AddAttribute(j++, "ValueChanged", EventCallback.Factory.Create<System.String>(this, str => { property.SetValue(Data, str); }));
|
|
editor.CloseComponent();
|
|
break;
|
|
}
|
|
|
|
}
|
|
case DataType.MultilineText:
|
|
{
|
|
editor.OpenComponent<DxMemo>(j);
|
|
editor.AddAttribute(j++, "Text", property.GetValue(Data));
|
|
editor.AddAttribute(j++, "TextExpression", lambda);
|
|
editor.AddAttribute(j++, "CssClass", "form-field");
|
|
editor.AddAttribute(j++, "TextChanged", EventCallback.Factory.Create<System.String>(this, str => { property.SetValue(Data, str); }));
|
|
editor.CloseComponent();
|
|
break;
|
|
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
})));
|
|
|
|
layoutItemBuilder.CloseComponent();
|
|
layoutItemBuilder.OpenElement(i++, "div");
|
|
layoutItemBuilder.AddAttribute(i++, "class", "text-danger");
|
|
layoutItemBuilder.OpenComponent(i++, typeof(ValidationMessage<>).MakeGenericType(property.PropertyType));
|
|
layoutItemBuilder.AddAttribute(i++, "For", lambda);
|
|
layoutItemBuilder.CloseComponent();
|
|
layoutItemBuilder.CloseElement();
|
|
}
|
|
layoutItemBuilder.OpenComponent<DxFormLayoutItem>(i++);
|
|
layoutItemBuilder.AddAttribute(i++, "Template", (RenderFragment<Object>)((context) => ((editor) =>
|
|
{
|
|
|
|
editor.OpenComponent<DxButton>(i++);
|
|
editor.AddAttribute(i++, "SubmitFormOnClick", true);
|
|
editor.AddAttribute(i++, "Text", "Bleh");
|
|
editor.CloseComponent();
|
|
})));
|
|
|
|
layoutItemBuilder.CloseComponent();
|
|
}));
|
|
formLayoutBuilder.CloseComponent();
|
|
};
|
|
|
|
public RenderFragment CreateDynamicTest() => formLayoutBuilder =>
|
|
{
|
|
logToBrowserConsole.LogToBC("Hellooooo");
|
|
|
|
var propertyList = typeof(TransferDestination).GetProperties();
|
|
//var propertyList = typeof(TestUserData).GetProperties();
|
|
formLayoutBuilder.OpenComponent<StepComponent>(0);
|
|
formLayoutBuilder.AddAttribute(1, "ChildContent", (RenderFragment)((layoutItemBuilder) =>
|
|
{
|
|
int i = 0;
|
|
|
|
/*DataTypeAttribute attrList = (DataTypeAttribute)property.GetCustomAttributes(typeof(DataTypeAttribute), false).First();
|
|
DisplayAttribute displayLabel = (DisplayAttribute)property.GetCustomAttributes(typeof(DisplayAttribute), false).First();
|
|
layoutItemBuilder.OpenComponent<DxFormLayoutItem>(i++);
|
|
layoutItemBuilder.AddAttribute(i++, "Caption", displayLabel.Name);
|
|
layoutItemBuilder.AddAttribute(i++, "ColSpanMd", 12);
|
|
//layoutItemBuilder.AddAttribute(i++, "CssClass", "form-field");
|
|
var access = Expression.Property(Expression.Constant(Data), property.Name);
|
|
var lambda = Expression.Lambda(typeof(Func<>).MakeGenericType(property.PropertyType), access);
|
|
layoutItemBuilder.AddAttribute(i++, "Template", (RenderFragment<Object>)((context) => ((editor) =>
|
|
{
|
|
var j = 0;
|
|
switch (attrList.DataType)
|
|
{
|
|
|
|
case DataType.Text:
|
|
{
|
|
editor.OpenComponent<DxTextBox>(j++);
|
|
logToBrowserConsole.LogToBC($"{property.Name}, {property.PropertyType}, {property.GetValue(Data).ToString()}");
|
|
editor.AddAttribute(j++, "Text", property.GetValue(Data));
|
|
editor.AddAttribute(j++, "TextExpression", lambda);
|
|
editor.AddAttribute(j++, "CssClass", "form-field");
|
|
editor.AddAttribute(j++, "TextChanged", EventCallback.Factory.Create<System.String>(this, str => { property.SetValue(Data, str); }));
|
|
editor.CloseComponent();
|
|
break;
|
|
}
|
|
case DataType.Password:
|
|
{
|
|
|
|
editor.OpenComponent<DxTextBox>(j++);
|
|
editor.AddAttribute(j++, "Password", true);
|
|
editor.AddAttribute(j++, "NullText", "Password");
|
|
editor.AddAttribute(j++, "Text", property.GetValue(Data));
|
|
editor.AddAttribute(j++, "TextExpression", lambda);
|
|
editor.AddAttribute(j++, "TextChanged", EventCallback.Factory.Create<System.String>(this, str => { property.SetValue(Data, str); }));
|
|
editor.CloseComponent();
|
|
break;
|
|
}
|
|
case DataType.PhoneNumber:
|
|
{
|
|
editor.OpenComponent<DxMaskedInput<String>>(j++);
|
|
editor.AddAttribute(j++, "Value", property.GetValue(Data));
|
|
editor.AddAttribute(j++, "Mask", PhoneMask);
|
|
editor.AddAttribute(j++, "ValueExpression", lambda);
|
|
editor.AddAttribute(j++, "ValueChanged", EventCallback.Factory.Create<System.String>(this, str => { property.SetValue(Data, str); }));
|
|
editor.CloseComponent();
|
|
break;
|
|
}
|
|
case DataType.Date:
|
|
{
|
|
editor.OpenComponent<DxDateEdit<DateTime>>(j);
|
|
editor.AddAttribute(j++, "Date", property.GetValue(Data));
|
|
editor.AddAttribute(j++, "DateExpression", lambda);
|
|
editor.AddAttribute(j++, "DateChanged", EventCallback.Factory.Create<System.DateTime>(this, str => { property.SetValue(Data, str); }));
|
|
editor.CloseComponent();
|
|
break;
|
|
|
|
}
|
|
case DataType.Custom:
|
|
{
|
|
editor.OpenComponent<DxComboBox<String, String>>(j);
|
|
editor.AddAttribute(j++, "Data", AdditionalData.Occupations);
|
|
editor.AddAttribute(j++, "Value", property.GetValue(Data));
|
|
editor.AddAttribute(j++, "ValueExpression", lambda);
|
|
editor.AddAttribute(j++, "ValueChanged", EventCallback.Factory.Create<System.String>(this, str => { property.SetValue(Data, str); }));
|
|
editor.CloseComponent();
|
|
break;
|
|
|
|
}
|
|
case DataType.MultilineText:
|
|
{
|
|
editor.OpenComponent<DxMemo>(j);
|
|
editor.AddAttribute(j++, "Text", property.GetValue(Data));
|
|
editor.AddAttribute(j++, "TextExpression", lambda);
|
|
editor.AddAttribute(j++, "CssClass", "form-field");
|
|
editor.AddAttribute(j++, "TextChanged", EventCallback.Factory.Create<System.String>(this, str => { property.SetValue(Data, str); }));
|
|
editor.CloseComponent();
|
|
break;
|
|
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
})));
|
|
|
|
layoutItemBuilder.CloseComponent();
|
|
layoutItemBuilder.OpenElement(i++, "div");
|
|
layoutItemBuilder.AddAttribute(i++, "class", "text-danger");
|
|
layoutItemBuilder.OpenComponent(i++, typeof(ValidationMessage<>).MakeGenericType(property.PropertyType));
|
|
layoutItemBuilder.AddAttribute(i++, "For", lambda);
|
|
layoutItemBuilder.CloseComponent();
|
|
layoutItemBuilder.CloseElement();*/
|
|
|
|
|
|
layoutItemBuilder.OpenComponent<DxFormLayoutItem>(i++);
|
|
layoutItemBuilder.AddAttribute(i++, "Template", (RenderFragment<Object>)((context) => ((editor) =>
|
|
{
|
|
|
|
editor.OpenComponent<DxButton>(i++);
|
|
editor.AddAttribute(i++, "SubmitFormOnClick", true);
|
|
editor.AddAttribute(i++, "Text", "Bleh");
|
|
editor.CloseComponent();
|
|
})));
|
|
|
|
layoutItemBuilder.CloseComponent();
|
|
}));
|
|
formLayoutBuilder.CloseComponent();
|
|
};
|
|
|
|
}
|
|
}
|