Browse Source

Improve Blazor module extensibility feature

pull/11086/head
liangshiwei 5 years ago
parent
commit
420e1387bb
  1. 18
      framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/CheckExtensionProperty.razor
  2. 16
      framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/CheckExtensionProperty.razor.cs
  3. 22
      framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/DateTimeExtensionProperty.razor
  4. 13
      framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/DateTimeExtensionProperty.razor.cs
  5. 6
      framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/ExtensionProperties.razor
  6. 39
      framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/ExtensionPropertyComponentBase.cs
  7. 7
      framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/LookupExtensionProperty.razor
  8. 17
      framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/LookupExtensionProperty.razor.cs
  9. 26
      framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/SelectExtensionProperty.razor
  10. 11
      framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/SelectExtensionProperty.razor.cs
  11. 19
      framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/TextExtensionProperty.razor
  12. 17
      framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/TextExtensionProperty.razor.cs
  13. 18
      framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/TimeExtensionProperty.razor
  14. 13
      framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/TimeExtensionProperty.razor.cs

18
framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/CheckExtensionProperty.razor

@ -2,10 +2,20 @@
@typeparam TResourceType @typeparam TResourceType
@using Volo.Abp.BlazoriseUI @using Volo.Abp.BlazoriseUI
@using Volo.Abp.Localization @using Volo.Abp.Localization
@inherits ExtensionPropertyComponentBase<TEntity, TResourceType>
@if (PropertyInfo != null && Entity != null) @if (PropertyInfo != null && Entity != null)
{ {
<Field> <Validation Validator="@Validate" MessageLocalizer="@LH.Localize">
<Check TValue="bool" @bind-Checked="@Value">@PropertyInfo.GetLocalizedDisplayName(StringLocalizerFactory)</Check> <Field>
</Field> <Check TValue="bool" @bind-Checked="@Value">
} <ChildContent>
@PropertyInfo.GetLocalizedDisplayName(StringLocalizerFactory)
</ChildContent>
<Feedback>
<ValidationError/>
</Feedback>
</Check>
</Field>
</Validation>
}

16
framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/CheckExtensionProperty.razor.cs

@ -1,22 +1,10 @@
using Microsoft.AspNetCore.Components; using Volo.Abp.Data;
using Microsoft.Extensions.Localization;
using Volo.Abp.Data;
using Volo.Abp.ObjectExtending;
namespace Volo.Abp.BlazoriseUI.Components.ObjectExtending; namespace Volo.Abp.BlazoriseUI.Components.ObjectExtending;
public partial class CheckExtensionProperty<TEntity, TResourceType> : ComponentBase public partial class CheckExtensionProperty<TEntity, TResourceType>
where TEntity : IHasExtraProperties where TEntity : IHasExtraProperties
{ {
[Inject]
public IStringLocalizerFactory StringLocalizerFactory { get; set; }
[Parameter]
public TEntity Entity { get; set; }
[Parameter]
public ObjectExtensionPropertyInfo PropertyInfo { get; set; }
protected bool Value { protected bool Value {
get { get {
return PropertyInfo.GetInputValueOrDefault<bool>(Entity.GetProperty(PropertyInfo.Name)); return PropertyInfo.GetInputValueOrDefault<bool>(Entity.GetProperty(PropertyInfo.Name));

22
framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/DateTimeExtensionProperty.razor

@ -3,15 +3,21 @@
@using Volo.Abp.BlazoriseUI @using Volo.Abp.BlazoriseUI
@using Volo.Abp.Localization @using Volo.Abp.Localization
@using Volo.Abp.ObjectExtending @using Volo.Abp.ObjectExtending
@inherits ExtensionPropertyComponentBase<TEntity, TResourceType>
@if (PropertyInfo != null && Entity != null) @if (PropertyInfo != null && Entity != null)
{ {
<Field> <Validation Validator="@Validate" MessageLocalizer="@LH.Localize">
<FieldLabel>@PropertyInfo.GetLocalizedDisplayName(StringLocalizerFactory)</FieldLabel> <Field>
<DateEdit TValue="DateTime?" <FieldLabel>@PropertyInfo.GetLocalizedDisplayName(StringLocalizerFactory)</FieldLabel>
InputMode="@(PropertyInfo.IsDate() ? DateInputMode.Date : DateInputMode.DateTime)" <DateEdit TValue="DateTime?"
Pattern="@PropertyInfo.GetDateEditInputFormatOrNull()" InputMode="@(PropertyInfo.IsDate() ? DateInputMode.Date : DateInputMode.DateTime)"
@bind-Date="@Value"> Pattern="@PropertyInfo.GetDateEditInputFormatOrNull()"
</DateEdit> @bind-Date="@Value">
</Field> <Feedback>
<ValidationError/>
</Feedback>
</DateEdit>
</Field>
</Validation>
} }

13
framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/DateTimeExtensionProperty.razor.cs

@ -5,23 +5,16 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Blazorise;
using Volo.Abp.AspNetCore.Components.Web;
using Volo.Abp.Data; using Volo.Abp.Data;
using Volo.Abp.ObjectExtending; using Volo.Abp.ObjectExtending;
namespace Volo.Abp.BlazoriseUI.Components.ObjectExtending; namespace Volo.Abp.BlazoriseUI.Components.ObjectExtending;
public partial class DateTimeExtensionProperty<TEntity, TResourceType> : ComponentBase public partial class DateTimeExtensionProperty<TEntity, TResourceType>
where TEntity : IHasExtraProperties where TEntity : IHasExtraProperties
{ {
[Inject]
public IStringLocalizerFactory StringLocalizerFactory { get; set; }
[Parameter]
public TEntity Entity { get; set; }
[Parameter]
public ObjectExtensionPropertyInfo PropertyInfo { get; set; }
protected DateTime? Value { protected DateTime? Value {
get { get {
return PropertyInfo.GetInputValueOrDefault<DateTime?>(Entity.GetProperty(PropertyInfo.Name)); return PropertyInfo.GetInputValueOrDefault<DateTime?>(Entity.GetProperty(PropertyInfo.Name));

6
framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/ExtensionProperties.razor

@ -1,7 +1,6 @@
@typeparam TEntityType @typeparam TEntityType
@typeparam TResourceType @typeparam TResourceType
@using Volo.Abp.ObjectExtending @using Volo.Abp.ObjectExtending
@using Volo.Abp.Localization
@using Volo.Abp.Data @using Volo.Abp.Data
@{ @{
@ -13,11 +12,11 @@
{ {
if (propertyInfo.Type.IsEnum) if (propertyInfo.Type.IsEnum)
{ {
<SelectExtensionProperty PropertyInfo="@propertyInfo" Entity="@Entity" TEntity="TEntityType" TResourceType="TResourceType" /> <SelectExtensionProperty PropertyInfo="@propertyInfo" Entity="@Entity" TEntity="TEntityType" TResourceType="TResourceType" LH="@LH" />
} }
else if (!propertyInfo.Lookup.Url.IsNullOrEmpty()) else if (!propertyInfo.Lookup.Url.IsNullOrEmpty())
{ {
<LookupExtensionProperty PropertyInfo="@propertyInfo" Entity="@Entity" TEntity="TEntityType" TResourceType="TResourceType" /> <LookupExtensionProperty PropertyInfo="@propertyInfo" Entity="@Entity" TEntity="TEntityType" TResourceType="TResourceType" LH="@LH" />
} }
else else
{ {
@ -25,6 +24,7 @@
__builder.OpenComponent(0, inputType.MakeGenericType(new[] { typeof(TEntityType), typeof(TResourceType) })); __builder.OpenComponent(0, inputType.MakeGenericType(new[] { typeof(TEntityType), typeof(TResourceType) }));
__builder.AddAttribute(1, "PropertyInfo", propertyInfo); __builder.AddAttribute(1, "PropertyInfo", propertyInfo);
__builder.AddAttribute(2, "Entity", Entity); __builder.AddAttribute(2, "Entity", Entity);
__builder.AddAttribute(3, "LH", LH);
__builder.CloseComponent(); __builder.CloseComponent();
} }
} }

39
framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/ExtensionPropertyComponentBase.cs

@ -0,0 +1,39 @@
using System.Linq;
using Blazorise;
using Microsoft.AspNetCore.Components;
using Microsoft.Extensions.Localization;
using Volo.Abp.AspNetCore.Components.Web;
using Volo.Abp.Data;
using Volo.Abp.ObjectExtending;
namespace Volo.Abp.BlazoriseUI.Components.ObjectExtending;
public abstract class ExtensionPropertyComponentBase<TEntity, TResourceType> : OwningComponentBase
where TEntity : IHasExtraProperties
{
[Inject]
public IStringLocalizerFactory StringLocalizerFactory { get; set; }
[Parameter]
public TEntity Entity { get; set; }
[Parameter]
public ObjectExtensionPropertyInfo PropertyInfo { get; set; }
[Parameter]
public AbpBlazorMessageLocalizerHelper<TResourceType> LH { get; set; }
protected virtual void Validate(ValidatorEventArgs e)
{
e.Status = ValidationStatus.Success;
var result = ExtensibleObjectValidator.GetValidationErrors(Entity, PropertyInfo.Name, e.Value);
if (!result.Any())
{
return;
}
e.Status = ValidationStatus.Error;
e.ErrorText = result.First().ErrorMessage;
}
}

7
framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/LookupExtensionProperty.razor

@ -2,18 +2,19 @@
@typeparam TResourceType @typeparam TResourceType
@using Abp.Localization @using Abp.Localization
@using Blazorise.Components @using Blazorise.Components
@inherits ExtensionPropertyComponentBase<TEntity, TResourceType>
<Field> <Field>
<FieldLabel>@PropertyInfo.GetLocalizedDisplayName(StringLocalizerFactory)</FieldLabel> <FieldLabel>@PropertyInfo.GetLocalizedDisplayName(StringLocalizerFactory)</FieldLabel>
<Autocomplete Data="@lookupItems" <Autocomplete Data="@lookupItems"
TItem="SelectItem<object>" TItem="SelectItem<object>"
TValue="object" TValue="object"
TextField="item=>item.Text" TextField="item => item.Text"
ValueField="item=>item.Value" ValueField="item => item.Value"
SelectedValue="@SelectedValue" SelectedValue="@SelectedValue"
SelectedValueChanged="@SelectedValueChanged" SelectedValueChanged="@SelectedValueChanged"
SearchChanged="@SearchFilterChangedAsync" SearchChanged="@SearchFilterChangedAsync"
Validator="@Validate"
MinLength="0"> MinLength="0">
</Autocomplete> </Autocomplete>
</Field> </Field>

17
framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/LookupExtensionProperty.razor.cs

@ -9,6 +9,8 @@ using System.Net.Http;
using System.Net.Http.Headers; using System.Net.Http.Headers;
using System.Text.Json; using System.Text.Json;
using System.Threading.Tasks; using System.Threading.Tasks;
using Blazorise;
using Volo.Abp.AspNetCore.Components.Web;
using Volo.Abp.AspNetCore.Components.Web.Extensibility; using Volo.Abp.AspNetCore.Components.Web.Extensibility;
using Volo.Abp.Data; using Volo.Abp.Data;
using Volo.Abp.Http; using Volo.Abp.Http;
@ -18,18 +20,11 @@ using Volo.Abp.ObjectExtending;
namespace Volo.Abp.BlazoriseUI.Components.ObjectExtending; namespace Volo.Abp.BlazoriseUI.Components.ObjectExtending;
public partial class LookupExtensionProperty<TEntity, TResourceType> : ComponentBase public partial class LookupExtensionProperty<TEntity, TResourceType>
where TEntity : IHasExtraProperties where TEntity : IHasExtraProperties
{ {
protected List<SelectItem<object>> lookupItems; protected List<SelectItem<object>> lookupItems;
[Inject] public IStringLocalizerFactory StringLocalizerFactory { get; set; }
[Parameter] public TEntity Entity { get; set; }
[Parameter] public ObjectExtensionPropertyInfo PropertyInfo { get; set; }
[Inject] public ILookupApiRequestService LookupApiService { get; set; } [Inject] public ILookupApiRequestService LookupApiService { get; set; }
public string TextPropertyName => PropertyInfo.Name + "_Text"; public string TextPropertyName => PropertyInfo.Name + "_Text";
@ -63,7 +58,7 @@ public partial class LookupExtensionProperty<TEntity, TResourceType> : Component
protected virtual void UpdateLookupTextProperty(object value) protected virtual void UpdateLookupTextProperty(object value)
{ {
var selectedItemText = lookupItems.SingleOrDefault(t => t.Value.Equals(value)).Text; var selectedItemText = lookupItems.SingleOrDefault(t => t.Value.Equals(value))?.Text;
Entity.SetProperty(TextPropertyName, selectedItemText); Entity.SetProperty(TextPropertyName, selectedItemText);
} }
@ -101,12 +96,12 @@ public partial class LookupExtensionProperty<TEntity, TResourceType> : Component
return Task.CompletedTask; return Task.CompletedTask;
} }
protected async Task SearchFilterChangedAsync(string filter) protected virtual async Task SearchFilterChangedAsync(string filter)
{ {
lookupItems = await GetLookupItemsAsync(filter); lookupItems = await GetLookupItemsAsync(filter);
} }
protected override async Task OnAfterRenderAsync(bool firstRender) protected async override Task OnAfterRenderAsync(bool firstRender)
{ {
await base.OnAfterRenderAsync(firstRender); await base.OnAfterRenderAsync(firstRender);

26
framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/SelectExtensionProperty.razor

@ -1,13 +1,21 @@
@typeparam TEntity @typeparam TEntity
@typeparam TResourceType @typeparam TResourceType
@using Abp.Localization @using Abp.Localization
@inherits ExtensionPropertyComponentBase<TEntity, TResourceType>
<Field> <Validation Validator="@Validate" MessageLocalizer="@LH.Localize">
<FieldLabel>@PropertyInfo.GetLocalizedDisplayName(StringLocalizerFactory)</FieldLabel> <Field>
<Select @bind-SelectedValue="@SelectedValue" > <FieldLabel>@PropertyInfo.GetLocalizedDisplayName(StringLocalizerFactory)</FieldLabel>
@foreach (var item in SelectItems) <Select @bind-SelectedValue="@SelectedValue">
{ <ChildContent>
<SelectItem Value="@item.Value">@item.Text</SelectItem> @foreach (var item in SelectItems)
} {
</Select> <SelectItem Value="@item.Value">@item.Text</SelectItem>
</Field> }
</ChildContent>
<Feedback>
<ValidationError/>
</Feedback>
</Select>
</Field>
</Validation>

11
framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/SelectExtensionProperty.razor.cs

@ -2,23 +2,20 @@
using Microsoft.Extensions.Localization; using Microsoft.Extensions.Localization;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using Blazorise;
using Volo.Abp.AspNetCore.Components.Web;
using Volo.Abp.Data; using Volo.Abp.Data;
using Volo.Abp.Localization; using Volo.Abp.Localization;
using Volo.Abp.ObjectExtending; using Volo.Abp.ObjectExtending;
namespace Volo.Abp.BlazoriseUI.Components.ObjectExtending; namespace Volo.Abp.BlazoriseUI.Components.ObjectExtending;
public partial class SelectExtensionProperty<TEntity, TResourceType> : ComponentBase public partial class SelectExtensionProperty<TEntity, TResourceType>
where TEntity : IHasExtraProperties where TEntity : IHasExtraProperties
{ {
protected List<SelectItem<int>> SelectItems = new(); protected List<SelectItem<int>> SelectItems = new();
[Inject] public IStringLocalizerFactory StringLocalizerFactory { get; set; }
[Parameter] public TEntity Entity { get; set; }
[Parameter] public ObjectExtensionPropertyInfo PropertyInfo { get; set; }
public int SelectedValue { public int SelectedValue {
get { return Entity.GetProperty<int>(PropertyInfo.Name); } get { return Entity.GetProperty<int>(PropertyInfo.Name); }
set { Entity.SetProperty(PropertyInfo.Name, value, false); } set { Entity.SetProperty(PropertyInfo.Name, value, false); }

19
framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/TextExtensionProperty.razor

@ -2,13 +2,18 @@
@typeparam TResourceType @typeparam TResourceType
@using Volo.Abp.BlazoriseUI @using Volo.Abp.BlazoriseUI
@using Volo.Abp.Localization @using Volo.Abp.Localization
@inherits ExtensionPropertyComponentBase<TEntity, TResourceType>
@if (PropertyInfo != null && Entity != null) @if (PropertyInfo != null && Entity != null)
{ {
<Field> <Validation Validator="@Validate" MessageLocalizer="@LH.Localize">
<FieldLabel>@PropertyInfo.GetLocalizedDisplayName(StringLocalizerFactory)</FieldLabel> <Field>
<TextEdit @bind-Text="@Value" Role="@PropertyInfo.GetTextRole()" InputMode="@PropertyInfo.GetTextInputMode()"> <FieldLabel>@PropertyInfo.GetLocalizedDisplayName(StringLocalizerFactory)</FieldLabel>
<TextEdit @bind-Text="@Value" Role="@PropertyInfo.GetTextRole()" InputMode="@PropertyInfo.GetTextInputMode()">
</TextEdit> <Feedback>
</Field> <ValidationError/>
} </Feedback>
</TextEdit>
</Field>
</Validation>
}

17
framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/TextExtensionProperty.razor.cs

@ -1,23 +1,10 @@
using Microsoft.AspNetCore.Components; using Volo.Abp.Data;
using Microsoft.Extensions.Localization;
using Volo.Abp.Data;
using Volo.Abp.ObjectExtending;
namespace Volo.Abp.BlazoriseUI.Components.ObjectExtending; namespace Volo.Abp.BlazoriseUI.Components.ObjectExtending;
public partial class TextExtensionProperty<TEntity, TResourceType> : ComponentBase public partial class TextExtensionProperty<TEntity, TResourceType>
where TEntity : IHasExtraProperties where TEntity : IHasExtraProperties
{ {
[Inject]
public IStringLocalizerFactory StringLocalizerFactory { get; set; }
[Parameter]
public TEntity Entity { get; set; }
[Parameter]
public ObjectExtensionPropertyInfo PropertyInfo { get; set; }
protected string Value { protected string Value {
get { get {
return PropertyInfo.GetTextInputValueOrNull(Entity.GetProperty(PropertyInfo.Name)); return PropertyInfo.GetTextInputValueOrNull(Entity.GetProperty(PropertyInfo.Name));

18
framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/TimeExtensionProperty.razor

@ -2,12 +2,18 @@
@typeparam TResourceType @typeparam TResourceType
@using Volo.Abp.BlazoriseUI @using Volo.Abp.BlazoriseUI
@using Volo.Abp.Localization @using Volo.Abp.Localization
@inherits ExtensionPropertyComponentBase<TEntity, TResourceType>
@if (PropertyInfo != null && Entity != null) @if (PropertyInfo != null && Entity != null)
{ {
<Field> <Validation Validator="@Validate" MessageLocalizer="@LH.Localize">
<FieldLabel>@PropertyInfo.GetLocalizedDisplayName(StringLocalizerFactory)</FieldLabel>--> <Field>
<TimeEdit TValue="TimeSpan?" @bind-Time="@Value"> <FieldLabel>@PropertyInfo.GetLocalizedDisplayName(StringLocalizerFactory)</FieldLabel>-->
</TimeEdit> <TimeEdit TValue="TimeSpan?" @bind-Time="@Value">
</Field> <Feedback>
} <ValidationError/>
</Feedback>
</TimeEdit>
</Field>
</Validation>
}

13
framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/TimeExtensionProperty.razor.cs

@ -5,23 +5,16 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Blazorise;
using Volo.Abp.AspNetCore.Components.Web;
using Volo.Abp.Data; using Volo.Abp.Data;
using Volo.Abp.ObjectExtending; using Volo.Abp.ObjectExtending;
namespace Volo.Abp.BlazoriseUI.Components.ObjectExtending; namespace Volo.Abp.BlazoriseUI.Components.ObjectExtending;
public partial class TimeExtensionProperty<TEntity, TResourceType> : ComponentBase public partial class TimeExtensionProperty<TEntity, TResourceType>
where TEntity : IHasExtraProperties where TEntity : IHasExtraProperties
{ {
[Inject]
public IStringLocalizerFactory StringLocalizerFactory { get; set; }
[Parameter]
public TEntity Entity { get; set; }
[Parameter]
public ObjectExtensionPropertyInfo PropertyInfo { get; set; }
protected TimeSpan? Value { protected TimeSpan? Value {
get { get {
return PropertyInfo.GetInputValueOrDefault<TimeSpan?>(Entity.GetProperty(PropertyInfo.Name)); return PropertyInfo.GetInputValueOrDefault<TimeSpan?>(Entity.GetProperty(PropertyInfo.Name));

Loading…
Cancel
Save