Skip to content

Commit 531733d

Browse files
feat(Transfer): add IsWrapItem/ItemWidth parameter (#6960)
* feat: 增加 IsWrapItem 参数 * test: 增加单元测试 * test: 更新单元测试 * feat: 增加 ItemWidth 参数 * doc: 移除多余箭头 * Revert "doc: 移除多余箭头" This reverts commit fce10f6. * chore: bump version 9.11.3-beta06 Co-Authored-By: 18636609650 <[email protected]> * test: 更新单元测试 --------- Co-authored-by: 18636609650 <[email protected]>
1 parent 2de60c8 commit 531733d

File tree

5 files changed

+75
-7
lines changed

5 files changed

+75
-7
lines changed

src/BootstrapBlazor/BootstrapBlazor.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk.Razor">
22

33
<PropertyGroup>
4-
<Version>9.11.3-beta05</Version>
4+
<Version>9.11.3-beta06</Version>
55
</PropertyGroup>
66

77
<ItemGroup>

src/BootstrapBlazor/Components/Transfer/Transfer.razor.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,17 +191,31 @@ public partial class Transfer<TValue>
191191
[Parameter]
192192
public string? Height { get; set; }
193193

194+
/// <summary>
195+
/// 获得/设置 是否为换行模式 默认 false 不换行
196+
/// </summary>
197+
[Parameter]
198+
public bool IsWrapItem { get; set; }
199+
200+
/// <summary>
201+
/// 获得/设置 候选项宽度 默认 null 未设置
202+
/// </summary>
203+
[Parameter]
204+
public string? ItemWidth { get; set; }
205+
194206
[Inject]
195207
[NotNull]
196208
private IIconTheme? IconTheme { get; set; }
197209

198-
private string? ClassString => CssBuilder.Default("transfer")
210+
private string? ClassString => CssBuilder.Default("bb-transfer")
199211
.AddClass("has-height", !string.IsNullOrEmpty(Height))
212+
.AddClass("wrap-item", IsWrapItem)
200213
.AddClassFromAttributes(AdditionalAttributes)
201214
.Build();
202215

203216
private string? StyleString => CssBuilder.Default()
204217
.AddClass($"--bb-transfer-height: {Height};", !string.IsNullOrEmpty(Height))
218+
.AddClass($"--bb-transfer-panel-item-width: {ItemWidth};", !string.IsNullOrEmpty(ItemWidth))
205219
.AddStyleFromAttributes(AdditionalAttributes)
206220
.Build();
207221

src/BootstrapBlazor/Components/Transfer/Transfer.razor.scss

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
@use "../../wwwroot/scss/variables" as *;
22

3-
.transfer {
3+
.bb-transfer {
44
--bb-transfer-panel-header-height: #{$bb-transfer-panel-header-height};
55
--bb-transfer-panel-header-padding: #{$bb-transfer-panel-header-padding};
66
--bb-transfer-panel-body-padding: #{$bb-transfer-panel-body-padding};
77
--bb-transfer-panel-list-max-height: #{$bb-transfer-panel-list-max-height};
88
--bb-transfer-panel-list-min-height: #{$bb-transfer-panel-list-min-height};
99
--bb-transfer-panel-item-padding: #{$bb-transfer-panel-item-padding};
10-
--bb-transfer-panel-item-margin: #{$bb-transfer-panel-item-margin};
1110
--bb-transfer-panel-item-width: #{$bb-transfer-panel-item-width};
1211
--bb-transfer-buttons-padding: #{$bb-transfer-buttons-padding};
1312
--bb-transfer-filter-focus-border-color: #{$bb-transfer-filter-focus-border-color};
@@ -27,6 +26,14 @@
2726
}
2827
}
2928
}
29+
30+
&.wrap-item {
31+
.transfer-panel-item .form-check-input + .form-check-label {
32+
white-space: normal;
33+
text-overflow: clip;
34+
overflow: visible;
35+
}
36+
}
3037
}
3138

3239
.transfer-panel {
@@ -62,15 +69,20 @@
6269
.transfer-panel-list {
6370
max-height: var(--bb-transfer-panel-list-max-height);
6471
min-height: var(--bb-transfer-panel-list-min-height);
72+
display: flex;
73+
flex-wrap: wrap;
6574
}
6675

6776
.transfer-panel-item {
6877
border-radius: var(--bs-border-radius);
6978
padding: var(--bb-transfer-panel-item-padding);
70-
margin: var(--bb-transfer-panel-item-margin);
7179
width: var(--bb-transfer-panel-item-width);
7280
}
7381

82+
.transfer-panel-item .form-check-input + .form-check-label {
83+
white-space: var(--bb-transfer-panel-item-wrap, nowrap);
84+
}
85+
7486
.transfer-buttons {
7587
display: flex;
7688
align-items: center;

src/BootstrapBlazor/wwwroot/scss/variables.scss

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -672,7 +672,6 @@ $bb-transfer-panel-body-padding: 0;
672672
$bb-transfer-panel-list-max-height: 200px;
673673
$bb-transfer-panel-list-min-height: auto;
674674
$bb-transfer-panel-item-padding: 0.25rem 0.75rem;
675-
$bb-transfer-panel-item-margin: 0 .5rem .25rem 0;
676675
$bb-transfer-panel-item-width: 160px;
677676
$bb-transfer-buttons-padding: 0 30px;
678677
$bb-transfer-filter-focus-border-color: #409eff;

test/UnitTest/Components/TransferTest.cs

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public void Items_Ok()
1212
{
1313
// 未设置 Items 为空
1414
var cut = Context.RenderComponent<Transfer<string>>();
15-
cut.Contains("class=\"transfer\"");
15+
cut.Contains("class=\"bb-transfer\"");
1616

1717
// 设置 Items
1818
cut.SetParametersAndRender(pb =>
@@ -260,4 +260,47 @@ public void Template_Ok()
260260
cut.Contains("Right-ItemTemplate-Test2");
261261
cut.Contains("Right-ItemTemplate-Test4");
262262
}
263+
264+
[Fact]
265+
public void IsWrapItem_Ok()
266+
{
267+
var cut = Context.RenderComponent<Transfer<string>>(pb =>
268+
{
269+
pb.Add(a => a.Value, "2");
270+
pb.Add(a => a.Items, new List<SelectedItem>()
271+
{
272+
new("1", "Test1 with a very long text"),
273+
new("2", "Test2 with a very long text")
274+
});
275+
pb.Add(a => a.IsWrapItem, false);
276+
});
277+
cut.DoesNotContain("wrap-item");
278+
279+
cut.SetParametersAndRender(pb =>
280+
{
281+
pb.Add(a => a.IsWrapItem, true);
282+
});
283+
cut.Contains("wrap-item");
284+
}
285+
286+
[Fact]
287+
public void ItemWidth_Ok()
288+
{
289+
var cut = Context.RenderComponent<Transfer<string>>(pb =>
290+
{
291+
pb.Add(a => a.Value, "2");
292+
pb.Add(a => a.Items, new List<SelectedItem>()
293+
{
294+
new("1", "Test1 with a very long text"),
295+
new("2", "Test2 with a very long text")
296+
});
297+
});
298+
cut.DoesNotContain("--bb-transfer-panel-item-width");
299+
300+
cut.SetParametersAndRender(pb =>
301+
{
302+
pb.Add(a => a.ItemWidth, "160px");
303+
});
304+
cut.Contains("--bb-transfer-panel-item-width: 160px;");
305+
}
263306
}

0 commit comments

Comments
 (0)