Skip to content

Commit 4ebe802

Browse files
committed
Merge branch 'main' into feat-chat-deepseek
2 parents 504a34d + acb3c9e commit 4ebe802

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+661
-343
lines changed

src/BootstrapBlazor.Server/Components/Samples/AutoFills.razor

Lines changed: 71 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
<section ignore>
1010
@((MarkupString)@Localizer["NormalDesc"].Value)
1111
</section>
12-
<AutoFill @bind-Value="Model1" Items="Items1" IsLikeMatch="true" OnGetDisplayText="OnGetDisplayText" class="mb-3" IsSelectAllTextOnFocus="true">
12+
<AutoFill @bind-Value="Model1" Items="Items1"
13+
IsLikeMatch="true" OnGetDisplayText="OnGetDisplayText" IsSelectAllTextOnFocus="true">
1314
<ItemTemplate>
1415
<div class="d-flex">
1516
<div>
@@ -31,7 +32,7 @@
3132
<DemoBlock Title="@Localizer["CustomFilterTitle"]" Introduction="@Localizer["CustomFilterIntro"]" Name="CustomFilter">
3233
<section ignore>@((MarkupString)Localizer["CustomFilterDesc"].Value)</section>
3334
<AutoFill @bind-Value="Model2" Items="Items2" OnCustomFilter="OnCustomFilter"
34-
OnGetDisplayText="OnGetDisplayText" class="mb-3">
35+
OnGetDisplayText="OnGetDisplayText">
3536
<ItemTemplate>
3637
<div class="d-flex">
3738
<div>
@@ -53,7 +54,7 @@
5354
<section ignore>
5455
@((MarkupString)@Localizer["ShowDropdownListOnFocusDesc"].Value)
5556
</section>
56-
<AutoFill @bind-Value="Model3" Items="Items3" ShowDropdownListOnFocus="false" OnGetDisplayText="OnGetDisplayText" class="mb-3">
57+
<AutoFill @bind-Value="Model3" Items="Items3" ShowDropdownListOnFocus="false" OnGetDisplayText="OnGetDisplayText">
5758
<ItemTemplate>
5859
<div class="d-flex">
5960
<div>
@@ -71,4 +72,71 @@
7172
</section>
7273
</DemoBlock>
7374

75+
<DemoBlock Title="@Localizer["IsVirtualizeTitle"]" Introduction="@Localizer["IsVirtualizeIntro"]" Name="IsVirtualize">
76+
<section ignore>
77+
<p>@((MarkupString)Localizer["IsVirtualizeDescription"].Value)</p>
78+
<div class="row g-3">
79+
<div class="col-12 col-sm-6">
80+
<BootstrapInputGroup>
81+
<BootstrapInputGroupLabel DisplayText="IsClearable" />
82+
<Checkbox @bind-Value="@_isClearable" />
83+
</BootstrapInputGroup>
84+
</div>
85+
</div>
86+
</section>
87+
88+
<p class="code-label">1. 使用 OnQueryAsync 作为数据源</p>
89+
<div class="row mb-3">
90+
<div class="col-6">
91+
<AutoFill @bind-Value="Model4" OnQueryAsync="OnQueryAsync" OnGetDisplayText="OnGetDisplayText"
92+
IsSelectAllTextOnFocus="true" IsVirtualize="true" RowHeight="58f" IsClearable="_isClearable">
93+
<ItemTemplate>
94+
<div class="d-flex">
95+
<div>
96+
<img src="@WebsiteOption.CurrentValue.GetAvatarUrl(context.Id)" class="bb-avatar" />
97+
</div>
98+
<div class="ps-2">
99+
<div>@context.Name</div>
100+
<div class="bb-sub">@Foo.GetTitle(context.Id)</div>
101+
</div>
102+
</div>
103+
</ItemTemplate>
104+
</AutoFill>
105+
</div>
106+
</div>
107+
<section ignore>
108+
@if (Model4 != null)
109+
{
110+
<EditorForm Model="@Model4" RowType="RowType.Inline" ItemsPerRow="2"></EditorForm>
111+
}
112+
</section>
113+
114+
<p class="code-label">2. 使用 Items 作为数据源</p>
115+
<div class="row mb-3">
116+
<div class="col-6">
117+
<AutoFill @bind-Value="Model5" Items="Items5" OnGetDisplayText="OnGetDisplayText"
118+
IsSelectAllTextOnFocus="true" OnCustomFilter="OnCustomVirtulizeFilter"
119+
IsVirtualize="true" RowHeight="58f" IsClearable="_isClearable">
120+
<ItemTemplate>
121+
<div class="d-flex">
122+
<div>
123+
<img src="@WebsiteOption.CurrentValue.GetAvatarUrl(context.Id)" class="bb-avatar" />
124+
</div>
125+
<div class="ps-2">
126+
<div>@context.Name</div>
127+
<div class="bb-sub">@Foo.GetTitle(context.Id)</div>
128+
</div>
129+
</div>
130+
</ItemTemplate>
131+
</AutoFill>
132+
</div>
133+
</div>
134+
<section ignore>
135+
@if (Model5 != null)
136+
{
137+
<EditorForm Model="@Model5" RowType="RowType.Inline" ItemsPerRow="2"></EditorForm>
138+
}
139+
</section>
140+
</DemoBlock>
141+
74142
<AttributeTable Items="@GetAttributes()" />

src/BootstrapBlazor.Server/Components/Samples/AutoFills.razor.cs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,16 @@ partial class AutoFills
1515

1616
[NotNull]
1717
private Foo Model2 { get; set; } = new();
18+
1819
[NotNull]
1920
private Foo Model3 { get; set; } = new();
2021

22+
[NotNull]
23+
private Foo Model4 { get; set; } = new();
24+
25+
[NotNull]
26+
private Foo Model5 { get; set; } = new();
27+
2128
private static string? OnGetDisplayText(Foo? foo) => foo?.Name;
2229

2330
[NotNull]
@@ -29,10 +36,18 @@ partial class AutoFills
2936
[NotNull]
3037
private IEnumerable<Foo>? Items3 { get; set; }
3138

39+
[NotNull]
40+
private IEnumerable<Foo>? Items4 { get; set; }
41+
42+
[NotNull]
43+
private IEnumerable<Foo>? Items5 { get; set; }
44+
3245
[Inject]
3346
[NotNull]
3447
private IStringLocalizer<Foo>? LocalizerFoo { get; set; }
3548

49+
private bool _isClearable = true;
50+
3651
/// <inheritdoc/>
3752
protected override void OnInitialized()
3853
{
@@ -46,6 +61,12 @@ protected override void OnInitialized()
4661

4762
Items3 = Foo.GenerateFoo(LocalizerFoo);
4863
Model3 = Items3.First();
64+
65+
Items4 = Foo.GenerateFoo(LocalizerFoo);
66+
Model4 = Items3.First();
67+
68+
Items5 = Foo.GenerateFoo(LocalizerFoo);
69+
Model5 = Items3.First();
4970
}
5071

5172
private Task<IEnumerable<Foo>> OnCustomFilter(string searchText)
@@ -54,6 +75,27 @@ private Task<IEnumerable<Foo>> OnCustomFilter(string searchText)
5475
return Task.FromResult(items);
5576
}
5677

78+
private Task<IEnumerable<Foo>> OnCustomVirtulizeFilter(string searchText)
79+
{
80+
var items = string.IsNullOrEmpty(searchText) ? Items5 : Items5.Where(i => i.Name!.Contains(searchText));
81+
return Task.FromResult(items);
82+
}
83+
84+
private async Task<QueryData<Foo>> OnQueryAsync(VirtualizeQueryOption option)
85+
{
86+
await Task.Delay(200);
87+
var items = Foo.GenerateFoo(LocalizerFoo);
88+
if (!string.IsNullOrEmpty(option.SearchText))
89+
{
90+
items = [.. items.Where(i => i.Name!.Contains(option.SearchText, StringComparison.OrdinalIgnoreCase))];
91+
}
92+
return new QueryData<Foo>
93+
{
94+
Items = items.Skip(option.StartIndex).Take(option.Count),
95+
TotalCount = items.Count
96+
};
97+
}
98+
5799
/// <summary>
58100
/// Get property method
59101
/// </summary>
@@ -163,6 +205,14 @@ private AttributeItem[] GetAttributes() =>
163205
Type = "bool",
164206
ValueList = "true/false",
165207
DefaultValue = "false"
208+
},
209+
new()
210+
{
211+
Name = nameof(AutoFill<string>.IsVirtualize),
212+
Description = Localizer["AttrIsVirtualize"],
213+
Type = "bool",
214+
ValueList = "true/false",
215+
DefaultValue = "false"
166216
}
167217
];
168218
}

src/BootstrapBlazor.Server/Components/Samples/MultiSelects.razor

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -117,12 +117,6 @@ private enum MultiSelectEnumFoo
117117
<section ignore>
118118
<p>@((MarkupString)Localizer["MultiSelectSearchDescription"].Value)</p>
119119
<div class="row g-3">
120-
<div class="col-12 col-sm-6">
121-
<BootstrapInputGroup>
122-
<BootstrapInputGroupLabel DisplayText="IsFixedSearch" />
123-
<Checkbox @bind-Value="@_isFixedSearch" />
124-
</BootstrapInputGroup>
125-
</div>
126120
<div class="col-12 col-sm-6">
127121
<BootstrapInputGroup>
128122
<BootstrapInputGroupLabel DisplayText="IsClearable" />
@@ -135,12 +129,12 @@ private enum MultiSelectEnumFoo
135129
<div class="row g-3">
136130
<div class="col-12 col-sm-6">
137131
<MultiSelect Items="@Items" @bind-Value="@SelectedSearchItemsValue"
138-
ShowSearch="true" IsFixedSearch="_isFixedSearch" IsClearable="_isClearable" OnSearchTextChanged="@OnSearch">
132+
ShowSearch="true" IsClearable="_isClearable" OnSearchTextChanged="@OnSearch">
139133
</MultiSelect>
140134
</div>
141135
<div class="col-12 col-sm-6">
142136
<MultiSelect Items="@LongItems" @bind-Value="@SelectedMaxItemsValue"
143-
ShowSearch="true" IsFixedSearch="_isFixedSearch" IsClearable="_isClearable">
137+
ShowSearch="true" IsClearable="_isClearable">
144138
</MultiSelect>
145139
</div>
146140
</div>
@@ -313,12 +307,6 @@ private enum MultiSelectEnumFoo
313307
<Checkbox @bind-Value="@_showSearch" />
314308
</BootstrapInputGroup>
315309
</div>
316-
<div class="col-12 col-sm-6">
317-
<BootstrapInputGroup>
318-
<BootstrapInputGroupLabel DisplayText="IsFixedSearch" />
319-
<Checkbox @bind-Value="@_isFixedSearch" />
320-
</BootstrapInputGroup>
321-
</div>
322310
<div class="col-12 col-sm-6">
323311
<BootstrapInputGroup>
324312
<BootstrapInputGroupLabel DisplayText="ShowToolbar" />
@@ -339,7 +327,7 @@ private enum MultiSelectEnumFoo
339327
<div class="col-6">
340328
<MultiSelect IsVirtualize="true" @bind-Value="_virtualItemString1" OnQueryAsync="OnQueryAsync"
341329
ShowSearch="_showSearch" ShowToolbar="_showToolbar"
342-
IsFixedSearch="_isFixedSearch" IsClearable="_isClearable">
330+
IsClearable="_isClearable">
343331
</MultiSelect>
344332
</div>
345333
<div class="col-6">
@@ -352,7 +340,7 @@ private enum MultiSelectEnumFoo
352340
<div class="col-6">
353341
<MultiSelect IsVirtualize="true" @bind-Value="_virtualItemString2" Items="VirtualItems"
354342
ShowSearch="_showSearch" ShowToolbar="_showToolbar"
355-
IsFixedSearch="_isFixedSearch" IsClearable="_isClearable">
343+
IsClearable="_isClearable">
356344
</MultiSelect>
357345
</div>
358346
<div class="col-6">

src/BootstrapBlazor.Server/Components/Samples/MultiSelects.razor.cs

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,6 @@ private enum MultiSelectEnumFoo
120120
private IEnumerable<SelectedItem> VirtualItems => Foos.Select(i => new SelectedItem(i.Name!, i.Name!)).ToList();
121121

122122
private string? _editString;
123-
124-
private bool _isFixedSearch = true;
125123
private bool _isClearable = true;
126124
private bool _showToolbar = true;
127125
private bool _showSearch = true;
@@ -382,14 +380,6 @@ private AttributeItem[] GetAttributes() =>
382380
DefaultValue = "false"
383381
},
384382
new()
385-
{
386-
Name = "IsFixedSearch",
387-
Description = Localizer["MultiSelectsAttribute_IsFixedSearch"],
388-
Type = "bool",
389-
ValueList = "true|false",
390-
DefaultValue = "false"
391-
},
392-
new()
393383
{
394384
Name = "ShowToolbar",
395385
Description = Localizer["MultiSelectsAttribute_ShowToolbar"],
@@ -484,6 +474,14 @@ private AttributeItem[] GetAttributes() =>
484474
Type = "bool",
485475
ValueList = "true|false",
486476
DefaultValue = "false"
477+
},
478+
new()
479+
{
480+
Name = nameof(MultiSelect<string>.IsVirtualize),
481+
Description = Localizer["MultiSelectsAttribute_IsVirtualize"],
482+
Type = "bool",
483+
ValueList = "true|false",
484+
DefaultValue = "false"
487485
}
488486
];
489487
}

src/BootstrapBlazor.Server/Components/Samples/Selects.razor

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -323,23 +323,17 @@
323323
<Checkbox @bind-Value="@_isShowSearchClearable" />
324324
</BootstrapInputGroup>
325325
</div>
326-
<div class="col-12 col-sm-6">
327-
<BootstrapInputGroup>
328-
<BootstrapInputGroupLabel DisplayText="IsFixedSearch" />
329-
<Checkbox @bind-Value="@_isFixedSearch" />
330-
</BootstrapInputGroup>
331-
</div>
332326
</div>
333327
</section>
334328
<div class="row g-3">
335329
<div class="col-12 col-sm-6">
336330
<Select TValue="string" Items="Items" ShowSearch="true"
337-
IsClearable="_isShowSearchClearable" IsFixedSearch="_isFixedSearch">
331+
IsClearable="_isShowSearchClearable">
338332
</Select>
339333
</div>
340334
<div class="col-12 col-sm-6">
341335
<Select TValue="string" Items="StringItems" ShowSearch="true"
342-
IsClearable="_isShowSearchClearable" IsFixedSearch="_isFixedSearch">
336+
IsClearable="_isShowSearchClearable">
343337
</Select>
344338
</div>
345339
</div>
@@ -440,12 +434,6 @@
440434
<Checkbox @bind-Value="@_showSearch" />
441435
</BootstrapInputGroup>
442436
</div>
443-
<div class="col-12 col-sm-6">
444-
<BootstrapInputGroup>
445-
<BootstrapInputGroupLabel DisplayText="IsFixedSearch" />
446-
<Checkbox @bind-Value="@_isFixedSearch" />
447-
</BootstrapInputGroup>
448-
</div>
449437
<div class="col-12 col-sm-6">
450438
<BootstrapInputGroup>
451439
<BootstrapInputGroupLabel DisplayText="IsClearable" />
@@ -459,7 +447,7 @@
459447
<div class="row mb-3">
460448
<div class="col-6">
461449
<Select IsVirtualize="true" OnQueryAsync="OnQueryAsync" @bind-Value="VirtualItem1"
462-
ShowSearch="_showSearch" IsFixedSearch="_isFixedSearch" IsClearable="_isClearable"></Select>
450+
ShowSearch="_showSearch" IsClearable="_isClearable"></Select>
463451
</div>
464452
<div class="col-6">
465453
<Display TValue="string" Value="@VirtualItem1?.Text"></Display>
@@ -470,7 +458,7 @@
470458
<div class="row">
471459
<div class="col-6">
472460
<Select IsVirtualize="true" Items="VirtualItems" @bind-Value="VirtualItem2"
473-
ShowSearch="_showSearch" IsFixedSearch="_isFixedSearch" IsClearable="_isClearable"></Select>
461+
ShowSearch="_showSearch" IsClearable="_isClearable"></Select>
474462
</div>
475463
<div class="col-6">
476464
<Display TValue="string" Value="@VirtualItem2?.Text"></Display>

src/BootstrapBlazor.Server/Components/Samples/Selects.razor.cs

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,10 @@ public sealed partial class Selects
4141
[NotNull]
4242
private IStringLocalizer<Foo>? LocalizerFoo { get; set; }
4343

44-
private bool _showSearch;
45-
44+
private bool _showSearch = true;
4645
private bool _showPopoverSearch = true;
47-
48-
private bool _isShowSearchClearable;
49-
50-
private bool _isFixedSearch;
51-
52-
private bool _isClearable;
53-
46+
private bool _isShowSearchClearable = true;
47+
private bool _isClearable = true;
5448
private string? _fooName;
5549

5650
private readonly List<SelectedItem> _enumValueDemoItems = [
@@ -359,14 +353,6 @@ private AttributeItem[] GetAttributes() =>
359353
DefaultValue = "false"
360354
},
361355
new()
362-
{
363-
Name = "IsFixedSearch",
364-
Description = Localizer["SelectsIsFixedSearch"],
365-
Type = "boolean",
366-
ValueList = "true / false",
367-
DefaultValue = "false"
368-
},
369-
new()
370356
{
371357
Name = "IsDisabled",
372358
Description = Localizer["SelectsIsDisabled"],
@@ -429,6 +415,14 @@ private AttributeItem[] GetAttributes() =>
429415
Type = "bool",
430416
ValueList = "true|false",
431417
DefaultValue = "false"
418+
},
419+
new()
420+
{
421+
Name = nameof(Select<string>.IsVirtualize),
422+
Description = Localizer["SelectsIsVirtualize"],
423+
Type = "bool",
424+
ValueList = "true|false",
425+
DefaultValue = "false"
432426
}
433427
];
434428
}

0 commit comments

Comments
 (0)