ant-design-blazor/components/select/Select.razor
Andrzej Bakun ea061850ec fix(module: select): multiple fixes and optimizations (#1087)
* fix(module:select): multiple select & tags & tokenization fix

performance optimizations
add PrefixIcon
keep focus on selected item

* fix(module:select): on clear button make first active

* docs(module:select): reflect changes
2021-02-04 23:40:47 +08:00

143 lines
8.6 KiB
C#

@using AntDesign.Internal
@using AntDesign.Select.Internal
@namespace AntDesign
@inherits AntInputComponentBase<TItemValue>
@typeparam TItemValue
@typeparam TItem
<CascadingValue Value="this" IsFixed="true">
<CascadingValue Value=@("ant-select-dropdown") Name="PrefixCls">
<div class="@ClassMapper.Class" style="@Style" id="@Id" tabindex="-1" @ref="Ref">
<OverlayTrigger @ref="@_dropDown"
Visible="Open"
Disabled="Disabled"
Trigger="new[] { TriggerType.Click }"
HiddenMode
OnMouseEnter="@(() => { OnMouseEnter?.Invoke(); })"
OnMouseLeave="@(() => { OnMouseLeave?.Invoke(); })"
OnVisibleChange="@OnOverlayVisibleChangeAsync"
PopupContainerSelector="@PopupContainerSelector"
OverlayEnterCls="slide-up-enter slide-up-enter-active slide-up"
OverlayLeaveCls="slide-up-leave slide-up-leave-active slide-up">
<Overlay>
<div style="@_dropdownStyle">
@if (SelectOptions != null)
{
<div class="" style="max-height: @PopupContainerMaxHeight; overflow-y: auto;">
<div>
<div class="" role="listbox" style="display: flex; flex-direction: column;">
@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)
{
<div class="" style="max-height: @PopupContainerMaxHeight; overflow-y: auto;">
<div>
<div class="" role="listbox" style="display: flex; flex-direction: column;">
@{
@if (!IsGroupingEnabled)
{
foreach (var selectOption in SortedSelectOptionItems)
{
<CascadingValue Value="@ItemTemplate" Name="ItemTemplate">
<CascadingValue Value="@selectOption.InternalId" Name="InternalId">
<SelectOption
@key="@selectOption.InternalId"
TItemValue="TItemValue"
TItem="TItem">
</SelectOption>
</CascadingValue>
</CascadingValue>
}
}
else
{
<CascadingValue Value="@ItemTemplate" Name="ItemTemplate">
<SelectOptionGroup TItemValue="TItemValue" TItem="TItem"></SelectOptionGroup>
</CascadingValue>
}
}
</div>
</div>
</div>
}
@if (AllOptionsHidden())
{
<div role="listbox" id="@(Id)_list" class="@ClassPrefix-item-empty">
@if (NotFoundContent != null)
{
@NotFoundContent
}
else
{
<Empty Simple Small/>
}
</div>
}
@if (DropdownRender != null)
{
@DropdownRender(default)
}
</div>
</Overlay>
<Unbound>
<CascadingValue Value="this" Name=@("ParentSelect") IsFixed="true">
<CascadingValue Value="@LabelTemplate" Name="ParentLabelTemplate">
<CascadingValue Value="@ShowSearchIcon" Name="ShowSearchIcon">
<CascadingValue Value="@ShowArrowIcon" Name="ShowArrowIcon">
<SelectContent Prefix="@ClassPrefix"
RefBack="@context"
@ref="_selectContent"
TItemValue="TItemValue"
TItem="TItem"
SearchValue="@_searchValue"
IsOverlayShow="@_dropDown.IsOverlayShow()"
OnInput="@OnInputAsync"
OnKeyUp="@OnKeyUpAsync"
OnKeyDown="@OnKeyDownAsync"
OnFocus="@OnInputFocusAsync"
OnBlur="@OnInputBlurAsync"
OnClearClick="@OnInputClearClickAsync"
OnRemoveSelected="@OnRemoveSelectedAsync"
Placeholder="@Placeholder"
ShowPlaceholder="@ShowPlaceholder"/>
</CascadingValue>
</CascadingValue>
</CascadingValue>
</CascadingValue>
</Unbound>
</OverlayTrigger>
</div>
</CascadingValue>
</CascadingValue>