ant-design-blazor/components/select/Select.razor

123 lines
4.7 KiB
C#

@using AntDesign.Internal
@using AntDesign.Select.Internal
@namespace AntDesign
@inherits SelectBase<TItemValue, TItem>
@typeparam TItemValue
@typeparam TItem
@{
base.BuildRenderTree(__builder);
}
@code
{
static RenderFragment<(Select<TItemValue, TItem> select, RenderFragment<TItem> itemTemplate)> selectOptionsRender = ctx =>
@<Template>
@{ #if NET5_0_OR_GREATER }
@if(ctx.select.EnableVirtualization)
{
<Microsoft.AspNetCore.Components.Web.Virtualization.Virtualize
Items=@ctx.select.SortedSelectOptionItems.Where(x => !x.IsHidden).ToList()
ChildContent="optionRender(ctx.itemTemplate)"/>
}
else
{
#endif
<ForeachLoop
Items=@ctx.select.SortedSelectOptionItems
ChildContent="optionRender(ctx.itemTemplate)"/>
#if NET5_0_OR_GREATER
}
@{ #endif }
</Template>;
static Func<RenderFragment<TItem>, RenderFragment<SelectOptionItem<TItemValue, TItem>>> optionRender =
itemTemplate => option =>
@<CascadingValue Value=@itemTemplate Name="ItemTemplate">
<CascadingValue Value="@option.InternalId" Name="InternalId">
<SelectOption @key="@option.InternalId"
TItemValue="TItemValue"
TItem="TItem">
</SelectOption>
</CascadingValue>
</CascadingValue>;
protected override RenderFragment RenderOptionDropdown()
{
@if (SelectOptions != null)
{
return @<div class="" style="max-height: @PopupContainerMaxHeight; overflow-y: auto;" @ref="_scrollableSelectDiv">
<div>
<div class="" role="listbox" style="@ListboxStyle">
@if (CustomTagSelectOptionItem != null)
{
<CascadingValue Value="@ItemTemplate" Name="ItemTemplate">
<CascadingValue Value="@CustomTagSelectOptionItem" Name="Model">
<SelectOption @key="@CustomTagSelectOptionItem.InternalId"
TItemValue="TItemValue"
TItem="TItem">
</SelectOption>
</CascadingValue>
</CascadingValue>
}
@SelectOptions
@if (AddedTags != null)
{
foreach (var selectOption in AddedTags)
{
<CascadingValue Value="@ItemTemplate" Name="ItemTemplate">
<CascadingValue Value="@selectOption" Name="Model">
<SelectOption @key="@selectOption.InternalId"
TItemValue="TItemValue"
TItem="TItem">
</SelectOption>
</CascadingValue>
</CascadingValue>
}
}
</div>
</div>
</div>
;
}
else if (SelectOptions == null && !AllOptionsHidden())
{
return@<div class="" style="max-height: @PopupContainerMaxHeight; overflow-y: auto;" @ref="_scrollableSelectDiv">
<div>
<div class="" role="listbox" style="@ListboxStyle">
@{
@if (!IsGroupingEnabled)
{
@selectOptionsRender((this, ItemTemplate))
}
else
{
<CascadingValue Value="@ItemTemplate" Name="ItemTemplate">
<SelectOptionGroup TItemValue="TItemValue" TItem="TItem"></SelectOptionGroup>
</CascadingValue>
}
}
</div>
</div>
</div>;
}
@if (AllOptionsHidden())
{
return@<div role="listbox" id="@(Id)_list" class="@ClassPrefix-item-empty">
@if (NotFoundContent != null)
{
@NotFoundContent
}
else
{
<Empty Simple Small />
}
</div>
;
}
return builder => { };
}
}