2020-09-09 22:12:12 +08:00
|
|
|
@using AntDesign.Internal
|
2020-11-27 13:13:26 +08:00
|
|
|
@using AntDesign.Select.Internal
|
|
|
|
@namespace AntDesign
|
2021-09-08 19:00:05 +08:00
|
|
|
@inherits SelectBase<TItemValue, TItem>
|
2020-11-27 13:13:26 +08:00
|
|
|
@typeparam TItemValue
|
|
|
|
@typeparam TItem
|
2020-06-14 18:54:14 +08:00
|
|
|
|
2024-06-30 09:58:55 +08:00
|
|
|
@{
|
|
|
|
base.BuildRenderTree(__builder);
|
|
|
|
}
|
2022-09-01 17:50:27 +08:00
|
|
|
|
|
|
|
@code
|
|
|
|
{
|
2024-01-21 17:47:53 +08:00
|
|
|
static RenderFragment<(Select<TItemValue, TItem> select, RenderFragment<TItem> itemTemplate)> selectOptionsRender = ctx =>
|
2022-09-01 17:50:27 +08:00
|
|
|
@<Template>
|
|
|
|
@{ #if NET5_0_OR_GREATER }
|
|
|
|
@if(ctx.select.EnableVirtualization)
|
|
|
|
{
|
|
|
|
<Microsoft.AspNetCore.Components.Web.Virtualization.Virtualize
|
2024-01-21 17:47:53 +08:00
|
|
|
Items=@ctx.select.SortedSelectOptionItems.Where(x => !x.IsHidden).ToList()
|
2022-09-01 17:50:27 +08:00
|
|
|
ChildContent="optionRender(ctx.itemTemplate)"/>
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
#endif
|
|
|
|
<ForeachLoop
|
2024-01-21 17:47:53 +08:00
|
|
|
Items=@ctx.select.SortedSelectOptionItems
|
2022-09-01 17:50:27 +08:00
|
|
|
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>;
|
2024-02-08 12:58:16 +08:00
|
|
|
|
2024-06-30 09:58:55 +08:00
|
|
|
protected override RenderFragment RenderOptionDropdown()
|
2024-02-08 12:58:16 +08:00
|
|
|
{
|
|
|
|
@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 => { };
|
|
|
|
}
|
|
|
|
|
2022-09-01 17:50:27 +08:00
|
|
|
}
|