@@ -36,6 +36,44 @@ public void Items_Ok()
3636 } ) ;
3737 }
3838
39+ [ Fact ]
40+ public async Task IsClearable_Ok ( )
41+ {
42+ var localizer = Context . Services . GetRequiredService < IStringLocalizer < Foo > > ( ) ;
43+ var items = Foo . GenerateFoo ( localizer , 4 ) ;
44+ var cut = Context . RenderComponent < BootstrapBlazorRoot > ( pb =>
45+ {
46+ pb . AddChildContent < SelectTable < Foo > > ( pb =>
47+ {
48+ pb . Add ( a => a . OnQueryAsync , options => OnFilterQueryAsync ( options , items ) ) ;
49+ pb . Add ( a => a . GetTextCallback , foo => foo . Name ) ;
50+ } ) ;
51+ } ) ;
52+ var table = cut . FindComponent < SelectTable < Foo > > ( ) ;
53+ Assert . DoesNotContain ( "clear-icon" , table . Markup ) ;
54+
55+ var isClear = false ;
56+ table . SetParametersAndRender ( pb =>
57+ {
58+ pb . Add ( a => a . IsClearable , true ) ;
59+ pb . Add ( a => a . Value , items [ 0 ] ) ;
60+ pb . Add ( a => a . OnClearAsync , ( ) =>
61+ {
62+ isClear = true ;
63+ return Task . CompletedTask ;
64+ } ) ;
65+ } ) ;
66+ Assert . Contains ( "clear-icon" , table . Markup ) ;
67+ var input = table . Find ( ".form-select" ) ;
68+ Assert . Equal ( "张三 0001" , input . GetAttribute ( "value" ) ) ;
69+
70+ var span = table . Find ( ".clear-icon" ) ;
71+ await table . InvokeAsync ( ( ) => span . Click ( ) ) ;
72+ input = table . Find ( ".form-select" ) ;
73+ Assert . Null ( input . GetAttribute ( "value" ) ) ;
74+ Assert . True ( isClear ) ;
75+ }
76+
3977 [ Fact ]
4078 public void TableMinWidth_Ok ( )
4179 {
@@ -65,9 +103,13 @@ public void Color_Ok()
65103 pb . Add ( a => a . Color , Color . Danger ) ;
66104 pb . Add ( a => a . GetTextCallback , foo => foo . Name ) ;
67105 pb . Add ( a => a . OnQueryAsync , options => OnFilterQueryAsync ( options , items ) ) ;
106+ pb . Add ( a => a . IsClearable , true ) ;
68107 } ) ;
69108 } ) ;
70109 cut . Contains ( "border-danger" ) ;
110+
111+ var span = cut . Find ( ".clear-icon" ) ;
112+ Assert . True ( span . ClassList . Contains ( "text-danger" ) ) ;
71113 }
72114
73115 [ Fact ]
@@ -271,6 +313,7 @@ public async Task Validate_Ok()
271313 builder . Add ( a => a . Model , model ) ;
272314 builder . AddChildContent < SelectTable < Foo > > ( pb =>
273315 {
316+ pb . Add ( a => a . IsClearable , true ) ;
274317 pb . Add ( a => a . Value , model . Foo ) ;
275318 pb . Add ( a => a . ValueExpression , Utility . GenerateValueExpression ( model , "Foo" , typeof ( Foo ) ) ) ;
276319 pb . Add ( a => a . OnValueChanged , v =>
@@ -302,6 +345,9 @@ await cut.InvokeAsync(() =>
302345 } ) ;
303346 Assert . True ( valid ) ;
304347
348+ var span = cut . Find ( ".clear-icon" ) ;
349+ Assert . True ( span . ClassList . Contains ( "text-success" ) ) ;
350+
305351 model . Foo = null ;
306352 var table = cut . FindComponent < SelectTable < Foo > > ( ) ;
307353 table . SetParametersAndRender ( ) ;
@@ -311,6 +357,9 @@ await cut.InvokeAsync(() =>
311357 form . Submit ( ) ;
312358 } ) ;
313359 Assert . True ( invalid ) ;
360+
361+ span = cut . Find ( ".clear-icon" ) ;
362+ Assert . True ( span . ClassList . Contains ( "text-danger" ) ) ;
314363 }
315364
316365 [ Fact ]
0 commit comments