|
|
|
@ -14,6 +14,7 @@ using Microsoft.Extensions.Localization; |
|
|
|
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers; |
|
|
|
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button; |
|
|
|
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Extensions; |
|
|
|
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form.DatePicker; |
|
|
|
|
|
|
|
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form; |
|
|
|
|
|
|
|
@ -144,6 +145,10 @@ public class AbpDynamicFormTagHelperService : AbpTagHelperService<AbpDynamicForm |
|
|
|
{ |
|
|
|
await ProcessSelectGroupAsync(context, output, model); |
|
|
|
} |
|
|
|
else if (IsDateGroup(context, model)) |
|
|
|
{ |
|
|
|
await ProcessDateGroupAsync(context, output, model); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
await ProcessInputGroupAsync(context, output, model); |
|
|
|
@ -151,6 +156,61 @@ public class AbpDynamicFormTagHelperService : AbpTagHelperService<AbpDynamicForm |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private async Task ProcessDateGroupAsync(TagHelperContext context, TagHelperOutput output, ModelExpression model) |
|
|
|
{ |
|
|
|
var abpDateTagHelper = GetDateGroupTagHelper(context, output, model); |
|
|
|
|
|
|
|
await abpDateTagHelper.RenderAsync(new TagHelperAttributeList(), context, _htmlEncoder, "div", TagMode.StartTagAndEndTag); |
|
|
|
} |
|
|
|
|
|
|
|
private AbpTagHelper GetDateGroupTagHelper(TagHelperContext context, TagHelperOutput output, ModelExpression model) |
|
|
|
{ |
|
|
|
return IsDateRangeGroup(model.ModelExplorer) |
|
|
|
? GetAbpDateRangeInputTagHelper(context, output, model) |
|
|
|
: GetAbpDateInputTagHelper(model); |
|
|
|
} |
|
|
|
|
|
|
|
private AbpTagHelper GetAbpDateInputTagHelper(ModelExpression model) |
|
|
|
{ |
|
|
|
var abpDateInputTagHelper = _serviceProvider.GetRequiredService<AbpDatePickerTagHelper>(); |
|
|
|
abpDateInputTagHelper.AspFor = model; |
|
|
|
abpDateInputTagHelper.ViewContext = TagHelper.ViewContext; |
|
|
|
abpDateInputTagHelper.DisplayRequiredSymbol = TagHelper.RequiredSymbols ?? true; |
|
|
|
return abpDateInputTagHelper; |
|
|
|
} |
|
|
|
|
|
|
|
private AbpTagHelper GetAbpDateRangeInputTagHelper(TagHelperContext context, TagHelperOutput output, |
|
|
|
ModelExpression model) |
|
|
|
{ |
|
|
|
var modelAttribute = model.ModelExplorer.GetAttribute<DateRangePickerAttribute>(); |
|
|
|
|
|
|
|
var pickerId = modelAttribute.PickerId; |
|
|
|
var otherModel = TagHelper.Model.ModelExplorer.Properties.SingleOrDefault(x => |
|
|
|
x != model.ModelExplorer && x.GetAttribute<DateRangePickerAttribute>()?.PickerId == pickerId); |
|
|
|
var otherModelAttribute = otherModel?.GetAttribute<DateRangePickerAttribute>(); |
|
|
|
|
|
|
|
var abpDateRangeInputTagHelper = _serviceProvider.GetRequiredService<AbpDateRangePickerTagHelper>(); |
|
|
|
abpDateRangeInputTagHelper.PickerId = pickerId; |
|
|
|
abpDateRangeInputTagHelper.ViewContext = TagHelper.ViewContext; |
|
|
|
if (modelAttribute.IsStart) |
|
|
|
{ |
|
|
|
abpDateRangeInputTagHelper.AspForStart = model; |
|
|
|
} |
|
|
|
|
|
|
|
if (otherModelAttribute?.IsStart == false) |
|
|
|
{ |
|
|
|
abpDateRangeInputTagHelper.AspForEnd = ModelExplorerToModelExpressionConverter(otherModel); |
|
|
|
} |
|
|
|
|
|
|
|
return abpDateRangeInputTagHelper; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private bool IsDateRangeGroup(ModelExplorer modelModelExplorer) |
|
|
|
{ |
|
|
|
return modelModelExplorer.GetAttribute<DateRangePickerAttribute>() != null; |
|
|
|
} |
|
|
|
|
|
|
|
protected virtual void RemoveFormGroupItemsNotInModel(TagHelperContext context, TagHelperOutput output, List<FormGroupItem> items) |
|
|
|
{ |
|
|
|
var models = GetModels(context, output); |
|
|
|
@ -293,6 +353,20 @@ public class AbpDynamicFormTagHelperService : AbpTagHelperService<AbpDynamicForm |
|
|
|
{ |
|
|
|
return IsEnum(model.ModelExplorer) || AreSelectItemsProvided(model.ModelExplorer); |
|
|
|
} |
|
|
|
|
|
|
|
protected virtual bool IsDateGroup(TagHelperContext context, ModelExpression model) |
|
|
|
{ |
|
|
|
if(model.ModelExplorer.GetAttribute<DatePickerAttribute>() != null || model.ModelExplorer.GetAttribute<DateRangePickerAttribute>() != null) |
|
|
|
{ |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
if(model.Metadata.ModelType == typeof(DateTime) || model.Metadata.ModelType == typeof(DateTime?) || model.Metadata.ModelType == typeof(DateTimeOffset) || model.Metadata.ModelType == typeof(DateTimeOffset?)) |
|
|
|
{ |
|
|
|
return true; |
|
|
|
} |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
protected virtual bool IsEnum(ModelExplorer explorer) |
|
|
|
{ |
|
|
|
|