add extension property support to the data grid.

pull/7686/head
Ilkay Ilknur 5 years ago
parent 9b01d7a36f
commit f2669db2da

@ -15,9 +15,10 @@ using Volo.Abp.Application.Services;
using Volo.Abp.AspNetCore.Components;
using Volo.Abp.AspNetCore.Components.Extensibility.EntityActions;
using Volo.Abp.AspNetCore.Components.Extensibility.TableColumns;
using Volo.Abp.AspNetCore.Components.WebAssembly;
using Volo.Abp.Localization;
using Volo.Abp.Authorization;
using Volo.Abp.BlazoriseUI.Components;
using Volo.Abp.ObjectExtending.Modularity;
namespace Volo.Abp.BlazoriseUI
{
@ -478,10 +479,39 @@ namespace Volo.Abp.BlazoriseUI
{
return ValueTask.CompletedTask;
}
protected virtual ValueTask SetToolbarItemsAsync()
{
return ValueTask.CompletedTask;
}
protected virtual IEnumerable<TableColumn> GetExtensionTableColumns(string moduleName, string entityType)
{
var properties = ModuleExtensionConfigurationHelper.GetPropertyConfigurations(moduleName, entityType);
foreach (var propertyInfo in properties)
{
if (propertyInfo.IsAvailableToClients && propertyInfo.UI.OnTable.IsVisible)
{
if (propertyInfo.Name.EndsWith("_Text"))
{
var lookupPropertyName = propertyInfo.Name.RemovePostFix("_Text");
var lookupPropertyDefinition = properties.SingleOrDefault(t => t.Name == lookupPropertyName);
yield return new TableColumn
{
Title = lookupPropertyDefinition.GetLocalizedDisplayName(StringLocalizerFactory),
Data = $"ExtraProperties[{propertyInfo.Name}]"
};
}
else
{
yield return new TableColumn
{
Title = propertyInfo.GetLocalizedDisplayName(StringLocalizerFactory),
Data = $"ExtraProperties[{propertyInfo.Name}]"
};
}
}
}
}
}
}

@ -1,7 +1,7 @@
@typeparam TItem
@using Blazorise.DataGrid;
@using Volo.Abp.AspNetCore.Components.Extensibility
@using Volo.Abp.Data
@using Volo.Abp.BlazoriseUI.Components.ObjectExtending
<DataGrid TItem="TItem"
Data="@Data"
@ -47,7 +47,7 @@
{
@if (column.Component != null)
{
<DataGridColumn TItem="TItem" Field="@column.Data" Caption="@column.Title">
<DataGridColumn TItem="TItem" Field="@typeof(TItem).GetProperties().First().Name" Caption="@column.Title">
<DisplayTemplate>
@RenderCustomTableColumnComponent(column.Component, context)
</DisplayTemplate>
@ -55,7 +55,24 @@
}
else
{
<DataGridColumn TItem="TItem" Field="@column.Data" Caption="@column.Title"/>
if (!ExtensionPropertiesRegex.IsMatch(column.Data))
{
<DataGridColumn TItem="TItem" Field="@column.Data" Caption="@column.Title" />
}
else
{
<DataGridColumn TItem="TItem" Field="@nameof(IHasExtraProperties.ExtraProperties)" Caption="@column.Title">
<DisplayTemplate>
@{
var entity = context as IHasExtraProperties;
var propertyName = ExtensionPropertiesRegex.Match(column.Data).Groups[1].Value;
var propertyValue = entity.GetProperty(propertyName);
@(propertyValue)
}
</DisplayTemplate>
</DataGridColumn>
}
}
}
}

@ -5,6 +5,8 @@ using Microsoft.AspNetCore.Components;
using System.Collections.Generic;
using JetBrains.Annotations;
using Volo.Abp.AspNetCore.Components.Extensibility.TableColumns;
using System.Linq;
using System.Text.RegularExpressions;
namespace Volo.Abp.BlazoriseUI.Components
{
@ -15,6 +17,8 @@ namespace Volo.Abp.BlazoriseUI.Components
protected Dictionary<string, DataGridEntityActionsColumn<TItem>> ActionColumns =
new Dictionary<string, DataGridEntityActionsColumn<TItem>>();
protected Regex ExtensionPropertiesRegex = new Regex(@"ExtraProperties\[(.*?)\]");
[Parameter] public IEnumerable<TItem> Data { get; set; }
[Parameter] public EventCallback<DataGridReadDataEventArgs<TItem>> ReadData { get; set; }

Loading…
Cancel
Save