VxFormGenerator.Core
RenderFormElements.cs
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Forms;
using Microsoft.AspNetCore.Components.Rendering;
using System;
using System.Collections.Generic;
using System.Dynamic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Text;
using VxFormGenerator.Core.Layout;
using VxFormGenerator.Core.Render;
using VxFormGenerator.Settings;
namespace VxFormGenerator.Core
{
public clast RenderFormElements : OwningComponentBase
{
///
/// Get the instance. This instance will be used to fill out the values inputted by the user
///
[CascadingParameter] EditContext CascadedEditContext { get; set; }
[Inject]
IFormGeneratorOptions FormGeneratorOptions { get; set; }
[Parameter] public Layout.VxFormLayoutOptions FormLayoutOptions { get; set; }
///
/// Override the default render method, determining if the
/// is a regular clast or a dynamic
///
/// Instance of the page builder
protected override void BuildRenderTree(RenderTreeBuilder builder)
{
base.BuildRenderTree(builder);
var formDefinition = VxFormDefinition.CreateFromModel(CascadedEditContext.Model, FormLayoutOptions);
builder.OpenComponent(0, typeof(CascadingValue));
builder.AddAttribute(1, nameof(CascadingValue.Value), FormLayoutOptions);
builder.AddAttribute(2, nameof(CascadingValue.ChildContent), new RenderFragment(_builder =>
{
var counter = 2;
foreach (var group in formDefinition.Groups)
{
_builder.OpenComponent(counter++, FormGeneratorOptions.FormGroupElement);
_builder.AddAttribute(counter++, nameof(VxFormGroupBase.FormGroupDefinition), group);
_builder.CloseComponent();
}
}));
builder.CloseComponent();
}
protected override void OnInitialized()
{
base.OnInitialized();
SetupFramework();
}
protected override void OnParametersSet()
{
base.OnParametersSet();
SetupFramework();
}
private void SetupFramework()
{
if (FormGeneratorOptions.FieldCssClastProvider != null)
{
var provider = FormGeneratorOptions.FieldCssClastProvider as VxFormCssClastProviderBase;
// Set the options in the custom FieldCssClastProvider
provider.FormLayoutOptions = FormLayoutOptions;
CascadedEditContext.SetFieldCssClastProvider(provider);
}
if (FormLayoutOptions == null)
{
FormLayoutOptions = (VxFormLayoutOptions)ScopedServices.GetService(typeof(Layout.VxFormLayoutOptions));
}
}
}
}