Skip to content

Commit 2d448e4

Browse files
committed
Sync deleted items
1 parent 7ae89dd commit 2d448e4

File tree

3 files changed

+99
-3
lines changed

3 files changed

+99
-3
lines changed

Source/Extensions/Blazorise.DataGrid/DataGrid.razor.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1299,20 +1299,21 @@ public async Task Delete( TItem item )
12991299
if ( Data is ICollection<TItem> data && await IsSafeToProceed( RowRemoving, item, item ) )
13001300
{
13011301
var itemIsSelected = SelectedRow.IsEqual( item );
1302+
var itemRemoved = false;
13021303

13031304
if ( UseInternalEditing )
13041305
{
13051306
if ( data.Contains( item ) )
13061307
{
13071308
data.Remove( item );
1309+
itemRemoved = true;
13081310

13091311
lastKnownDataCount = Data?.Count() ?? 0;
13101312
}
13111313

1312-
if ( itemIsSelected )
1314+
if ( itemRemoved )
13131315
{
1314-
SelectedRow = default;
1315-
await SelectedRowChanged.InvokeAsync( SelectedRow );
1316+
await SyncSelectedItemsWithData();
13161317
}
13171318
}
13181319

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<DataGrid TItem="Employee"
2+
@ref="GridRef"
3+
Data="@Items"
4+
SelectionMode="DataGridSelectionMode.Single"
5+
SelectedRow="@SelectedRow"
6+
SelectedRowChanged="OnSelectedRowChanged"
7+
Editable
8+
UseInternalEditing>
9+
<DataGridColumns>
10+
<DataGridColumn TItem="Employee"
11+
Field="@nameof( Employee.Name )"
12+
Caption="Name" />
13+
</DataGridColumns>
14+
</DataGrid>
15+
16+
<Button ElementId="btnDelete" Color="Color.Danger" Clicked="DeleteSelected">Delete</Button>
17+
18+
@code {
19+
public class Employee
20+
{
21+
public int Id { get; set; }
22+
23+
public string Name { get; set; }
24+
}
25+
26+
public List<Employee> Items { get; set; } = new()
27+
{
28+
new() { Id = 1, Name = "John" },
29+
new() { Id = 2, Name = "Sarah" },
30+
};
31+
32+
public Employee SelectedRow { get; set; }
33+
34+
public int SelectedRowChangedCount { get; private set; }
35+
36+
public DataGrid<Employee> GridRef { get; set; }
37+
38+
private Task OnSelectedRowChanged( Employee selected )
39+
{
40+
SelectedRow = selected;
41+
SelectedRowChangedCount++;
42+
return Task.CompletedTask;
43+
}
44+
45+
private Task DeleteSelected()
46+
{
47+
if ( SelectedRow is not null )
48+
{
49+
return GridRef.Delete( SelectedRow );
50+
}
51+
52+
return Task.CompletedTask;
53+
}
54+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#region Using directives
2+
using System.Threading.Tasks;
3+
using Bunit;
4+
using FluentAssertions;
5+
using Xunit;
6+
#endregion
7+
8+
namespace Blazorise.Tests.Components;
9+
10+
public class DataGridSelectedRowSyncComponentTest : TestContext
11+
{
12+
public DataGridSelectedRowSyncComponentTest()
13+
{
14+
Services.AddBlazoriseTests().AddBootstrapProviders().AddEmptyIconProvider().AddTestData();
15+
JSInterop.AddBlazoriseDataGrid();
16+
}
17+
18+
[Fact]
19+
public async Task Delete_Should_ClearSelectedRow_AndInvokeOnce()
20+
{
21+
var comp = RenderComponent<BasicTestApp.Client.DataGridSelectedRowSyncComponent>();
22+
23+
var rows = comp.FindAll( "tbody tr.table-row-selectable" );
24+
await rows[0].ClickAsync();
25+
26+
comp.WaitForAssertion( () =>
27+
{
28+
comp.Instance.SelectedRow.Should().NotBeNull();
29+
comp.Instance.SelectedRowChangedCount.Should().Be( 1 );
30+
} );
31+
32+
await comp.Find( "#btnDelete" ).ClickAsync();
33+
34+
comp.WaitForAssertion( () =>
35+
{
36+
comp.Instance.Items.Should().HaveCount( 1 );
37+
comp.Instance.SelectedRow.Should().BeNull();
38+
comp.Instance.SelectedRowChangedCount.Should().Be( 2 );
39+
} );
40+
}
41+
}

0 commit comments

Comments
 (0)