using Microsoft.AspNetCore.Components; using MudBlazor; namespace Lantean.QBTMudBlade.Components { public partial class ExtendedTable : MudTable { [Parameter] public IEnumerable>? ColumnDefinitions { get; set; } [Parameter] public HashSet> SelectedColumns { get; set; } = []; private Func? _sortSelector; private SortDirection _sortDirection; private IEnumerable? _selectedColumns; protected override void OnParametersSet() { if (ColumnDefinitions is not null) { var activeColumns = GetActiveColummns(ColumnDefinitions); ColGroup ??= ColGroupFragment(activeColumns); HeaderContent ??= HeaderContentFragment(activeColumns); RowTemplate ??= RowTemplateFragment(activeColumns); _selectedColumns ??= ColumnDefinitions.Where(c => c.Enabled).Select(c => c.Id).ToList(); _sortSelector ??= ColumnDefinitions.First(c => c.Enabled).SortSelector; Items = GetOrderedItems(Items, _sortSelector); } base.OnParametersSet(); } private IEnumerable? GetOrderedItems(IEnumerable? items, Func sortSelector) { if (items is null) { return null; } return items.OrderByDirection(_sortDirection, sortSelector); } private void SetSort(Func sortSelector, SortDirection sortDirection) { _sortSelector = sortSelector; _sortDirection = sortDirection; } private IEnumerable>? GetColumns() { if (ColumnDefinitions is null) { return null; } return GetActiveColummns(ColumnDefinitions); } private IEnumerable> GetActiveColummns(IEnumerable> columns) { if (_selectedColumns is null) { return columns; } return columns.Where(c => _selectedColumns.Contains(c.Id)); } //private RenderFragment CreateColGroup() //{ // return builder => // { // var selectedColumns = GetColumns(); // if (selectedColumns is null) // { // return; // } // if (MultiSelection) // { // builder.OpenElement(0, "col"); // builder.CloseElement(); // } // int sequence = 1; // foreach (var width in selectedColumns.Select(c => c.Width)) // { // builder.OpenElement(sequence++, "col"); // if (width.HasValue) // { // builder.AddAttribute(sequence++, "style", $"width: {width.Value}px"); // } // builder.CloseElement(); // } // }; //} //private RenderFragment CreateHeaderContent() //{ // return builder => // { // var selectedColumns = GetColumns(); // if (selectedColumns is null) // { // return; // } // int sequence = 0; // foreach (var columnDefinition in selectedColumns) // { // builder.OpenComponent(sequence); // if (columnDefinition.SortSelector is not null) // { // builder.OpenComponent>(sequence++); // builder.AddAttribute(sequence++, "SortDirectionChanged", EventCallback.Factory.Create(this, c => SetSort(columnDefinition.SortSelector, c))); // RenderFragment childContent = b => b.AddContent(0, columnDefinition.Header); // builder.AddAttribute(sequence++, "ChildContent", childContent); // builder.CloseComponent(); // } // else // { // RenderFragment childContent = b => b.AddContent(0, columnDefinition.Header); // builder.AddAttribute(sequence++, "ChildContent", childContent); // } // builder.CloseComponent(); // } // }; //} //private RenderFragment CreateRowTemplate() //{ // return context => builder => // { // var selectedColumns = GetColumns(); // if (selectedColumns is null) // { // return; // } // int sequence = 0; // foreach (var columnDefinition in selectedColumns) // { // builder.OpenComponent(sequence++); // builder.AddAttribute(sequence++, "DataLabel", columnDefinition.Header); // builder.AddAttribute(sequence++, "Class", columnDefinition.Class); // RenderFragment childContent = b => b.AddContent(0, columnDefinition.RowTemplate(columnDefinition.GetRowContext(context))); // builder.AddAttribute(sequence++, "ChildContent", childContent); // builder.CloseComponent(); // } // }; //} } }