62 lines
1.3 KiB
Plaintext
62 lines
1.3 KiB
Plaintext
@namespace Nejcraft.Shared
|
|
@using Nejcraft.Shared.Parts.ButtonParts
|
|
@using Nejcraft.Shared.Parts.InputParts
|
|
@using Nejcraft.Shared.Parts
|
|
|
|
@typeparam TItem
|
|
|
|
@inherits NejComponentBase
|
|
|
|
<div class="flex overflow-x-visible">
|
|
|
|
<Nejcraft.Shared.Parts.TableParts.Table Class="@GetCssClass()">
|
|
<thead class="">
|
|
<tr>
|
|
<CascadingValue Value="this">
|
|
@ChildContent
|
|
</CascadingValue>
|
|
</tr>
|
|
</thead>
|
|
<tbody class="">
|
|
@{
|
|
var index = 0;
|
|
foreach (TItem it in Data ?? Array.Empty<TItem>())
|
|
{
|
|
index++;
|
|
<tr @key=@(index + ", " + Key?.Invoke(it)) class="border-t border-secondary/50">
|
|
|
|
@foreach (DataTableCol<TItem> tab in Columns ?? new List<DataTableCol<TItem>>())
|
|
{
|
|
<Nejcraft.Shared.Parts.TableParts.TablePart>
|
|
@tab.ChildContent(it)
|
|
</Nejcraft.Shared.Parts.TableParts.TablePart>
|
|
}
|
|
</tr>
|
|
}
|
|
}
|
|
</tbody>
|
|
|
|
</Nejcraft.Shared.Parts.TableParts.Table>
|
|
</div>
|
|
|
|
|
|
|
|
@code {
|
|
|
|
[Parameter]
|
|
public IEnumerable<TItem>? Data { get; set; }
|
|
|
|
private List<DataTableCol<TItem>> Columns { get; set; } = new List<DataTableCol<TItem>>();
|
|
|
|
[Parameter]
|
|
public RenderFragment? ChildContent { get; set; }
|
|
|
|
[Parameter]
|
|
public Func<TItem, string>? Key { get; set; }
|
|
|
|
public void AddColumn(DataTableCol<TItem> item)
|
|
{
|
|
Columns.Add(item);
|
|
InvokeAsync(StateHasChanged);
|
|
}
|
|
} |