Browse Source

Merge pull request #11086 from abpframework/liangshiwei/blazor

Improve Blazor module extensibility feature
pull/11197/head
Berkan Sasmaz 5 years ago
committed by GitHub
parent
commit
b84253fed2
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Layout/PageHeader.razor.cs
  2. 6
      framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs
  3. 18
      framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/CheckExtensionProperty.razor
  4. 16
      framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/CheckExtensionProperty.razor.cs
  5. 22
      framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/DateTimeExtensionProperty.razor
  6. 13
      framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/DateTimeExtensionProperty.razor.cs
  7. 6
      framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/ExtensionProperties.razor
  8. 83
      framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/ExtensionPropertyComponentBase.cs
  9. 8
      framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/LookupExtensionProperty.razor
  10. 45
      framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/LookupExtensionProperty.razor.cs
  11. 26
      framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/SelectExtensionProperty.razor
  12. 11
      framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/SelectExtensionProperty.razor.cs
  13. 19
      framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/TextExtensionProperty.razor
  14. 17
      framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/TextExtensionProperty.razor.cs
  15. 18
      framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/TimeExtensionProperty.razor
  16. 13
      framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/TimeExtensionProperty.razor.cs

4
framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Layout/PageHeader.razor.cs

@ -37,7 +37,7 @@ public partial class PageHeader : ComponentBase
ToolbarItemRenders = new List<RenderFragment>(); ToolbarItemRenders = new List<RenderFragment>();
} }
protected override async Task OnParametersSetAsync() protected async override Task OnParametersSetAsync()
{ {
await base.OnParametersSetAsync(); await base.OnParametersSetAsync();
if (Toolbar != null) if (Toolbar != null)
@ -65,7 +65,7 @@ public partial class PageHeader : ComponentBase
} }
} }
protected override async Task OnInitializedAsync() protected async override Task OnInitializedAsync()
{ {
await base.OnInitializedAsync(); await base.OnInitializedAsync();
} }

6
framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs

@ -212,7 +212,7 @@ public abstract class AbpCrudPageBase<
EntityActions = new EntityActionDictionary(); EntityActions = new EntityActionDictionary();
} }
protected override async Task OnInitializedAsync() protected async override Task OnInitializedAsync()
{ {
await SetPermissionsAsync(); await SetPermissionsAsync();
await SetEntityActionsAsync(); await SetEntityActionsAsync();
@ -220,7 +220,7 @@ public abstract class AbpCrudPageBase<
await InvokeAsync(StateHasChanged); await InvokeAsync(StateHasChanged);
} }
protected override async Task OnAfterRenderAsync(bool firstRender) protected async override Task OnAfterRenderAsync(bool firstRender)
{ {
if (firstRender) if (firstRender)
{ {
@ -350,6 +350,7 @@ public abstract class AbpCrudPageBase<
protected virtual Task CloseCreateModalAsync() protected virtual Task CloseCreateModalAsync()
{ {
NewEntity = new TCreateViewModel();
return InvokeAsync(CreateModal.Hide); return InvokeAsync(CreateModal.Hide);
} }
@ -464,6 +465,7 @@ public abstract class AbpCrudPageBase<
protected virtual async Task OnCreatedEntityAsync() protected virtual async Task OnCreatedEntityAsync()
{ {
NewEntity = new TCreateViewModel();
await GetEntitiesAsync(); await GetEntitiesAsync();
await InvokeAsync(CreateModal.Hide); await InvokeAsync(CreateModal.Hide);

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();
} }
} }

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

@ -0,0 +1,83 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using Blazorise;
using Blazorise.Utilities;
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; }
[Inject]
public IValidationMessageLocalizerAttributeFinder ValidationMessageLocalizerAttributeFinder { 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 validationAttributes = PropertyInfo.GetValidationAttributes();
var validationContext = new ValidationContext(Entity)
{
DisplayName = PropertyInfo.Name,
MemberName = PropertyInfo.Name
};
foreach (var validationAttribute in validationAttributes)
{
var result = validationAttribute.GetValidationResult(e.Value, validationContext);
if (result == ValidationResult.Success || result == null)
{
continue;
}
var errorMessage = result.ErrorMessage;
if (LH != null)
{
var formattedErrorMessage = GetDefaultErrorMessage(validationAttribute);
var errorMessageString = ValidationAttributeHelper.RevertErrorMessagePlaceholders(formattedErrorMessage);
var errorMessageArguments = ValidationMessageLocalizerAttributeFinder.FindAll(errorMessage, errorMessageString)
?.OrderBy(x => x.Index)
?.Select(x => x.Argument);
errorMessage = LH.Localize(errorMessageString, errorMessageArguments);
}
e.MemberNames = result.MemberNames;
e.Status = ValidationStatus.Error;
e.ErrorText = errorMessage;
break;
}
}
private static string GetDefaultErrorMessage(ValidationAttribute validationAttribute)
{
if (validationAttribute is StringLengthAttribute stringLengthAttribute && stringLengthAttribute.MinimumLength != 0)
{
var nullable = ValidationAttributeHelper.ValidationAttributeCustomErrorMessageSetProperty.GetValue((object) validationAttribute) as bool?;
var flag = true;
if (!(nullable.GetValueOrDefault() == flag & nullable.HasValue))
{
return ValidationAttributeHelper.SetErrorMessagePlaceholders("The field {0} must be a string with a minimum length of {2} and a maximum length of {1}.");
}
}
return ValidationAttributeHelper.SetErrorMessagePlaceholders(ValidationAttributeHelper.ValidationAttributeErrorMessageStringProperty.GetValue((object) validationAttribute) as string);
}
}

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

@ -2,18 +2,20 @@
@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"
SelectedText="@SelectedText"
SelectedValue="@SelectedValue" SelectedValue="@SelectedValue"
SelectedValueChanged="@SelectedValueChanged" SelectedValueChanged="@SelectedValueChanged"
SearchChanged="@SearchFilterChangedAsync" SearchChanged="@SearchFilterChangedAsync"
Validator="@Validate"
MinLength="0"> MinLength="0">
</Autocomplete> </Autocomplete>
</Field> </Field>

45
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";
@ -42,28 +37,22 @@ public partial class LookupExtensionProperty<TEntity, TResourceType> : Component
} }
} }
public string SelectedText => Entity.GetProperty<string>(TextPropertyName);
public LookupExtensionProperty() public LookupExtensionProperty()
{ {
lookupItems = new List<SelectItem<object>>(); lookupItems = new List<SelectItem<object>>();
} }
protected override void OnParametersSet() protected async override Task OnInitializedAsync()
{ {
var value = Entity.GetProperty(PropertyInfo.Name); await base.OnInitializedAsync();
var text = Entity.GetProperty(TextPropertyName); await SearchFilterChangedAsync(string.Empty);
if (value != null && text != null)
{
lookupItems.Add(new SelectItem<object>
{
Text = Entity.GetProperty(TextPropertyName).ToString(),
Value = value
});
}
} }
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);
} }
@ -86,8 +75,7 @@ public partial class LookupExtensionProperty<TEntity, TResourceType> : Component
selectItems.Add(new SelectItem<object> selectItems.Add(new SelectItem<object>
{ {
Text = item.GetProperty(PropertyInfo.Lookup.DisplayPropertyName).GetString(), Text = item.GetProperty(PropertyInfo.Lookup.DisplayPropertyName).GetString(),
Value = JsonSerializer.Deserialize( Value = JsonSerializer.Deserialize(item.GetProperty(PropertyInfo.Lookup.ValuePropertyName).GetRawText(), PropertyInfo.Type)
item.GetProperty(PropertyInfo.Lookup.ValuePropertyName).GetRawText(), PropertyInfo.Type)
}); });
} }
@ -97,22 +85,11 @@ public partial class LookupExtensionProperty<TEntity, TResourceType> : Component
protected virtual Task SelectedValueChanged(object selectedItem) protected virtual Task SelectedValueChanged(object selectedItem)
{ {
SelectedValue = selectedItem; SelectedValue = selectedItem;
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)
{
await base.OnAfterRenderAsync(firstRender);
if (firstRender)
{
await SearchFilterChangedAsync(string.Empty);
}
}
} }

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