public GridRendererContext( ImutableGridRendererContext imutableGridRendererContext, IRendererTreeBuilder rendererTreeBuilder, ITableDataSet tableDataSet) { if (imutableGridRendererContext is null) { throw new ArgumentNullException(nameof(imutableGridRendererContext)); } GridConfiguration = imutableGridRendererContext.GridConfiguration; GridItemProperties = imutableGridRendererContext.GridItemProperties; GridItemCollectionProperties = imutableGridRendererContext.GridEntityConfiguration.ClrTypeCollectionProperties; CssClasses = imutableGridRendererContext.CssClasses; PropertyValueAccessor = imutableGridRendererContext.GetPropertyValueAccessor; RendererTreeBuilder = rendererTreeBuilder ?? throw new ArgumentNullException(nameof(RendererTreeBuilder)); RequestRerenderNotification = imutableGridRendererContext.RequestRerenderNotification; TableDataSet = tableDataSet ?? throw new ArgumentNullException(nameof(tableDataSet)); TableDataSet.GroupingOptions.SetConfiguration(GridConfiguration?.GroupingOptions); TableDataSet.GroupingOptions.GroupableProperties = this.GridItemProperties.ToList(); this.gridEntityConfiguration = imutableGridRendererContext.GridEntityConfiguration; this.valueFormatters = imutableGridRendererContext.ValueFormatters; this.specialColumnValues = imutableGridRendererContext.SpecialColumnValues; this.firstColumnName = GridItemProperties.First().Name; this.lastColumnName = GridItemProperties.Last().Name; }
public override void BuildInputRendererTree(IRendererTreeBuilder rendererTreeBuilder, IActualItemContext <object> actualItemContext, Action <string, object> onChangeAction, string columnName) { var value = actualItemContext.GetActualItemColumnValue(columnName); if (IsSupportedDateType(value)) { var dateTimeValue = ConvertToDateTime(value); var dateValueContainsTime = Math.Abs(dateTimeValue.TimeOfDay.TotalSeconds) > 0.00000000001; var dateFormat = dateValueContainsTime ? "yyyy-MM-dd'T'HH:mm:ss" : "yyyy-MM-dd"; rendererTreeBuilder .OpenElement(HtmlTagNames.Div, "edit-field-wrapper") .OpenElement(HtmlTagNames.Input, "edit-text-field") .AddAttribute(HtmlAttributes.Type, dateValueContainsTime ? "datetime-local" : "date") .AddAttribute(HtmlAttributes.Value, BindConverter.FormatValue(dateTimeValue, dateFormat)) .AddAttribute(HtmlJsEvents.OnChange, EventCallback.Factory.Create(this, (ChangeEventArgs e) => { onChangeAction?.Invoke(columnName, BindConverterExtensions.ConvertTo(e.Value, DateTime.MinValue)); })) .CloseElement() .CloseElement(); } else { Successor.BuildInputRendererTree(rendererTreeBuilder, actualItemContext, onChangeAction, columnName); } }
public GridRendererContext( ImutableGridRendererContext imutableGridRendererContext, IRendererTreeBuilder rendererTreeBuilder, ITableDataSet tableDataSet, ISpecialColumnFragmentsCollection specialColumnFragmentsCollection, FlexGridContext flexGridContext) { if (imutableGridRendererContext is null) { throw new ArgumentNullException(nameof(imutableGridRendererContext)); } RendererTreeBuilder = rendererTreeBuilder ?? throw new ArgumentNullException(nameof(RendererTreeBuilder)); TableDataSet = tableDataSet ?? throw new ArgumentNullException(nameof(tableDataSet)); FlexGridContext = flexGridContext ?? throw new ArgumentNullException(nameof(flexGridContext)); GridConfiguration = imutableGridRendererContext.GridConfiguration; GridItemProperties = imutableGridRendererContext.GridItemProperties; GridItemCollectionProperties = imutableGridRendererContext.GridEntityConfiguration.ClrTypeCollectionProperties; CssClasses = imutableGridRendererContext.CssClasses; PropertyValueAccessor = imutableGridRendererContext.GetPropertyValueAccessor; gridEntityConfiguration = imutableGridRendererContext.GridEntityConfiguration; valueFormatters = imutableGridRendererContext.ValueFormatters; columnRendererFragments = specialColumnFragmentsCollection .Merge(gridEntityConfiguration, imutableGridRendererContext.ColumnRendererFragments); columnEditRendererBuilders = specialColumnFragmentsCollection .Merge(gridEntityConfiguration, imutableGridRendererContext.ColumnEditRendererBuilders); firstColumnName = GridItemProperties.First().Name; lastColumnName = GridItemProperties.Last().Name; NumberOfColumns = GridItemProperties.Count + (imutableGridRendererContext.InlineEditItemIsAllowed() || imutableGridRendererContext.CreateItemIsAllowed() ? 1 : 0) + (GridConfiguration.IsMasterTable ? 1 : 0); }
public void BuildRendererTree( IFormLayout <TModel> createFormLayout, CreateItemRendererContext <TModel> createItemRendererContext, IRendererTreeBuilder rendererTreeBuilder) { var bodyAction = createFormLayout.BuildBodyRendererTree(createItemRendererContext, formInputRendererTreeProvider); var footerAction = createFormLayout.BuildFooterRendererTree(createItemRendererContext); RenderFragment <EditContext> formBody = (EditContext context) => delegate(RenderTreeBuilder builder) { var internalBuilder = new BlazorRendererTreeBuilder(builder); bodyAction?.Invoke(internalBuilder); footerAction?.Invoke(internalBuilder); internalBuilder .OpenComponent(typeof(DataAnnotationsValidator)) .CloseComponent(); }; rendererTreeBuilder .OpenComponent(typeof(EditForm)) .AddAttribute(nameof(EditContext), createItemRendererContext.ViewModel.EditContext) .AddAttribute("OnValidSubmit", eventCallbackFactory.Create <EditContext>(this, context => createItemRendererContext.ViewModel.SaveAction.Invoke(createItemRendererContext.ViewModel.Model))) .AddAttribute(RenderTreeBuilder.ChildContent, formBody) .CloseComponent(); createItemRendererContext.ViewModel.ValidateModel(); }
public override void BuildInputRendererTree(IRendererTreeBuilder rendererTreeBuilder, IActualItemContext <object> actualItemContext, Action <string, object> onChangeAction) { var localColumnName = actualItemContext.ActualColumnName; var value = actualItemContext.GetActualItemColumnValue(localColumnName); if (IsSupportedDateType(value)) { var dateTimeValue = ConvertToDateTime(value); var dateValueContatinsTime = dateTimeValue.TimeOfDay.TotalSeconds != 0; var dateFormat = dateValueContatinsTime ? "yyyy-MM-dd'T'HH:mm:ss" : "yyyy-MM-dd"; rendererTreeBuilder .OpenElement(HtmlTagNames.Div, "edit-field-wrapper") .OpenElement(HtmlTagNames.Input, "edit-text-field") .AddAttribute(HtmlAttributes.Type, dateValueContatinsTime ? "datetime-local" : "date") .AddAttribute(HtmlAttributes.Value, BindMethods.GetValue(dateTimeValue, dateFormat)) .AddAttribute(HtmlJSEvents.OnChange, BindMethods.SetValueHandler(delegate(DateTime __value) { onChangeAction?.Invoke(localColumnName, __value); }, dateTimeValue, dateFormat)) .CloseElement() .CloseElement(); } else { successor.BuildInputRendererTree(rendererTreeBuilder, actualItemContext, onChangeAction); } }
public static IRendererTreeBuilder OpenElement(this IRendererTreeBuilder rendererTreeBuilder, string elementName, string className) { rendererTreeBuilder .OpenElement(elementName) .AddCssClass(className); return(rendererTreeBuilder); }
private void AddDoubleValueHandlerIfValueIsDouble(IRendererTreeBuilder rendererTreeBuilder, Action <string, object> onChangeAction, string localColumnName, object value) { if (value is double doubleValue) { rendererTreeBuilder.AddAttribute(HtmlAttributes.Value, BindConverter.FormatValue(doubleValue)); rendererTreeBuilder.AddAttribute(HtmlJSEvents.OnChange, EventCallback.Factory.Create(this, (ChangeEventArgs e) => onChangeAction?.Invoke(localColumnName, BindConverterExtensions.ConvertTo(e.Value, 0d)))); } }
public static IRendererTreeBuilder AddValidationMessage <T>(this IRendererTreeBuilder rendererTreeBuilder, LambdaExpression lambdaExpression) { rendererTreeBuilder .OpenComponent(typeof(ValidationMessage <>).MakeGenericType(typeof(T))) .AddAttribute("For", lambdaExpression) .CloseComponent(); return(rendererTreeBuilder); }
private void AddDoubleValueHandlerIfValueIsDouble(IRendererTreeBuilder rendererTreeBuilder, Action <string, object> onChangeAction, string localColumnName, object value) { if (value is double doubleValue) { rendererTreeBuilder.AddAttribute(HtmlJSEvents.OnChange, BindMethods.SetValueHandler(delegate(double __value) { onChangeAction?.Invoke(localColumnName, __value); }, doubleValue) ); } }
private void TryAddOnChangeHandler(IRendererTreeBuilder rendererTreeBuilder, Action <string, object> onChangeAction, string localColumnName, object value) { if (value is int intValue) { rendererTreeBuilder.AddAttribute(HtmlAttributes.Value, BindConverter.FormatValue(intValue)); rendererTreeBuilder.AddAttribute(HtmlJSEvents.OnChange, EventCallback.Factory.Create(this, (ChangeEventArgs e) => onChangeAction?.Invoke(localColumnName, BindConverterExtensions.ConvertTo(e.Value, 0)))); } else { AddLongValueHandlerIfValueIsLong(rendererTreeBuilder, onChangeAction, localColumnName, value); } }
public override void BuildInputRendererTree(IRendererTreeBuilder rendererTreeBuilder, IActualItemContext <object> actualItemContext, Action <string, object> onChangeAction, string columnName) { var value = actualItemContext.GetActualItemColumnValue(columnName); rendererTreeBuilder .OpenElement(HtmlTagNames.Div, "edit-field-wrapper") .OpenElement(HtmlTagNames.Input, "edit-text-field") .AddAttribute(HtmlAttributes.Type, GetInputType(value?.ToString() ?? InputTypeText)) .AddAttribute(HtmlAttributes.Value, BindConverter.FormatValue(value)) .AddAttribute(HtmlJsEvents.OnChange, EventCallback.Factory.Create(this, (ChangeEventArgs e) => onChangeAction?.Invoke(columnName, BindConverterExtensions.ConvertTo(e.Value, string.Empty))) ) .CloseElement() .CloseElement(); }
public void BuildRendererTree( ICreateFormLayout <TItem> createFormLayout, CreateItemRendererContext <TItem> createItemRendererContext, IRendererTreeBuilder rendererTreeBuilder) { var bodyAction = createFormLayout.BuildBodyRendererTree(createItemRendererContext, editInputRendererTree); var footerAction = createFormLayout.BuildFooterRendererTree(createItemRendererContext); rendererTreeBuilder.OpenElement(HtmlTagNames.Form); bodyAction?.Invoke(rendererTreeBuilder); footerAction?.Invoke(rendererTreeBuilder); rendererTreeBuilder.CloseElement(); }
private void AddLongValueHandlerIfValueIsLong(IRendererTreeBuilder rendererTreeBuilder, Action <string, object> onChangeAction, string localColumnName, object value) { if (value is long longValue) { rendererTreeBuilder.AddAttribute(HtmlJSEvents.OnChange, BindMethods.SetValueHandler(delegate(long __value) { onChangeAction?.Invoke(localColumnName, __value); }, longValue) ); } else { AddDecimalValueHandlerIfValueIsDecimal(rendererTreeBuilder, onChangeAction, localColumnName, value); } }
public override void BuildInputRendererTree(IRendererTreeBuilder rendererTreeBuilder, IActualItemContext <object> actualItemContext, Action <string, object> onChangeAction) { var localColumnName = actualItemContext.ActualColumnName; var value = actualItemContext.GetActualItemColumnValue(localColumnName); if (value is Enum enumTypeValue) { var actualStringValue = enumTypeValue.ToString(); rendererTreeBuilder .OpenElement(HtmlTagNames.Div, "edit-field-wrapper") .OpenElement(HtmlTagNames.Select, "edit-text-field") .AddAttribute(HtmlJSEvents.OnChange, EventCallback.Factory.Create(this, (ChangeEventArgs e) => { var parsedValue = Enum.Parse(value.GetType(), e.Value.ToString()); onChangeAction?.Invoke(localColumnName, parsedValue); } )); foreach (var enumValue in Enum.GetValues(enumTypeValue.GetType())) { var enumStringValue = enumValue.ToString(); rendererTreeBuilder.OpenElement(HtmlTagNames.Option); if (enumStringValue == actualStringValue) { rendererTreeBuilder.AddAttribute(HtmlAttributes.Selected, true); } rendererTreeBuilder .AddAttribute(HtmlAttributes.Value, enumStringValue) .AddContent(enumStringValue) .CloseElement(); } rendererTreeBuilder .CloseElement() .CloseElement(); } else { successor.BuildInputRendererTree(rendererTreeBuilder, actualItemContext, onChangeAction); } }
public override void BuildInputRendererTree(IRendererTreeBuilder rendererTreeBuilder, IActualItemContext <object> actualItemContext, Action <string, object> onChangeAction) { var localColumnName = actualItemContext.ActualColumnName; var value = actualItemContext.GetActualItemColumnValue(localColumnName); rendererTreeBuilder .OpenElement(HtmlTagNames.Div, "edit-field-wrapper") .OpenElement(HtmlTagNames.Input, "edit-text-field") .AddAttribute(HtmlAttributes.Type, GetInputType(value?.ToString() ?? InputTypeText)) .AddAttribute(HtmlAttributes.Value, BindMethods.GetValue(value)) .AddAttribute(HtmlJSEvents.OnChange, BindMethods.SetValueHandler(delegate(string __value) { onChangeAction?.Invoke(localColumnName, __value); }, value?.ToString() ?? string.Empty) ) .CloseElement() .CloseElement(); }
public override void BuildInputRendererTree(IRendererTreeBuilder rendererTreeBuilder, IActualItemContext <object> actualItemContext, Action <string, object> onChangeAction, string columnName) { var value = actualItemContext.GetActualItemColumnValue(columnName); if (IsSupportedNumberType(value)) { rendererTreeBuilder .OpenElement(HtmlTagNames.Div, "edit-field-wrapper") .OpenElement(HtmlTagNames.Input, "edit-text-field") .AddAttribute(HtmlAttributes.Type, "number"); TryAddOnChangeHandler(rendererTreeBuilder, onChangeAction, columnName, value); rendererTreeBuilder .CloseElement() .CloseElement(); } else { Successor.BuildInputRendererTree(rendererTreeBuilder, actualItemContext, onChangeAction, columnName); } }
public override void BuildInputRendererTree(IRendererTreeBuilder rendererTreeBuilder, IActualItemContext <object> actualItemContext, Action <string, object> onChangeAction) => rendererTree.BuildInputRendererTree(rendererTreeBuilder, actualItemContext, onChangeAction);
public abstract void BuildInputRendererTree(IRendererTreeBuilder rendererTreeBuilder, IActualItemContext <object> actualItemContext, Action <string, object> onChangeAction, string columnName);
abstract public void BuildInputRendererTree(IRendererTreeBuilder rendererTreeBuilder, IActualItemContext <object> actualItemContext, Action <string, object> onChangeAction);
public static IRendererTreeBuilder AddCssClass(this IRendererTreeBuilder rendererTreeBuilder, string className) { rendererTreeBuilder.AddAttribute(HtmlAttributes.Class, className); return(rendererTreeBuilder); }