ant-design-blazor/components/table/Column.razor.cs
James Yeung bd34858efd feat: support for globalization & localization (#578)
* feat: add locale

* feat: add locale interfaces

* fix: add locale interfaces for components

* fix: use local classes instead of interfaces

* feat: implement the locale provider

* feat: make some components to support localization

* fix: default language

* fix: test

* chore: remove the useless reference
2020-09-07 22:46:50 +08:00

91 lines
2.4 KiB
C#

using System;
using System.Linq.Expressions;
using AntDesign.Core.Reflection;
using AntDesign.TableModels;
using Microsoft.AspNetCore.Components;
namespace AntDesign
{
public partial class Column<TData> : ColumnBase, IFieldColumn
{
[Parameter]
public EventCallback<TData> FieldChanged { get; set; }
[Parameter]
public Expression<Func<TData>> FieldExpression { get; set; }
[Parameter]
public RenderFragment<TData> CellRender { get; set; }
[Parameter]
public TData Field { get; set; }
[Parameter]
public string Format { get; set; }
[Parameter]
public bool Sortable { get; set; }
[Parameter]
public string Sort { get; set; }
[Parameter]
public bool ShowSorterTooltip { get; set; } = true;
private PropertyReflector? _propertyReflector;
public string DisplayName => _propertyReflector?.DisplayName;
public string FieldName => _propertyReflector?.PropertyName;
public ITableSortModel SortModel { get; private set; }
protected override void OnInitialized()
{
base.OnInitialized();
if (FieldExpression != null)
{
_propertyReflector = PropertyReflector.Create(FieldExpression);
if (Sortable)
{
SortModel = new SortModel<TData>(_propertyReflector.Value.PropertyInfo, 1, Sort);
}
}
ClassMapper
.If("ant-table-column-has-sorters", () => Sortable)
.If($"ant-table-column-sort", () => Sortable && SortModel.SortType.IsIn(SortType.Ascending, SortType.Descending));
}
private void HandelHeaderClick()
{
if (Sortable)
{
SortModel.SwitchSortType();
Table.ReloadAndInvokeChange();
}
}
private string SorterTooltip
{
get
{
var next = SortModel.NextType();
if (next == SortType.None)
{
return Table.Locale.CancelSort;
}
else if (next == SortType.Ascending)
{
return Table.Locale.TriggerAsc;
}
else
{
return Table.Locale.TriggerDesc;
}
}
}
}
}