mirror of
https://gitee.com/ant-design-blazor/ant-design-blazor.git
synced 2024-12-04 21:17:36 +08:00
123 lines
4.7 KiB
C#
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 => { };
|
|
}
|
|
|
|
}
|