LANCommander/LANCommander.UI/Components/DataList/DataListItem.razor
2025-11-11 01:09:18 -06:00

50 lines
No EOL
1.6 KiB
Text

@namespace LANCommander.UI.Components
@typeparam TItem
<CascadingValue Value="Item" Name="Item">
<div class="data-list-item" @onclick="ToggleSelection">
<Flex Align="Align" Justify="Justify" Gap="Gap">
@if (InputPosition == DataListInputPosition.Left)
{
<DataListItemInput TItem="TItem"/>
}
@ItemTemplate(Item)
@if (InputPosition == DataListInputPosition.Right)
{
<DataListItemInput TItem="TItem"/>
}
</Flex>
</div>
</CascadingValue>
@code {
[CascadingParameter(Name = "Selected")]
public bool Selected { get; set; }
[CascadingParameter(Name = "Radio")]
public bool Radio { get; set; }
[CascadingParameter(Name = "Checkbox")]
public bool Checkbox { get; set; }
[CascadingParameter(Name = "InputPosition")]
public DataListInputPosition InputPosition { get; set; }
[CascadingParameter(Name = "SelectionTemplate")]
public RenderFragment<TItem> SelectionTemplate { get; set; }
[Parameter] public TItem Item { get; set; }
[Parameter] public RenderFragment<TItem> ItemTemplate { get; set; }
[Parameter] public EventCallback<bool> OnSelectedChanged { get; set; }
[Parameter] public FlexAlign Align { get; set; } = FlexAlign.Center;
[Parameter] public FlexJustify Justify { get; set; } = FlexJustify.Center;
[Parameter] public FlexGap Gap { get; set; } = FlexGap.Middle;
private async Task ToggleSelection()
{
if (OnSelectedChanged.HasDelegate)
await OnSelectedChanged.InvokeAsync(!Selected);
}
}