Skip to content

Commit 5aeee2d

Browse files
committed
SelectedItems support added.
1 parent 91c7257 commit 5aeee2d

File tree

5 files changed

+55
-45
lines changed

5 files changed

+55
-45
lines changed

BlazorBootstrap.Demo.RCL/Components/Pages/Grid/06-selection/Grid_Demo_01_A_Selection.razor

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
Class="table table-hover table-bordered"
33
DataProvider="EmployeesDataProvider"
44
AllowSelection="true"
5-
SelectedItemsChanged="OnSelectedItemsChanged"
5+
@bind-SelectedItems="@selectedEmployees"
66
Responsive="true">
77

88
<GridColumns>
@@ -69,10 +69,4 @@
6969
new Employee1 { Id = 109, Name = "Isha", Designation = "App Maker", DOJ = new DateOnly(1996, 7, 1), IsActive = true },
7070
};
7171
}
72-
73-
private Task OnSelectedItemsChanged(HashSet<Employee1> employees)
74-
{
75-
selectedEmployees = employees is not null && employees.Any() ? employees : new();
76-
return Task.CompletedTask;
77-
}
7872
}

BlazorBootstrap.Demo.RCL/Components/Pages/Grid/06-selection/Grid_Demo_01_B_Default_Selection.razor

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,4 @@
7171
new Employee1 { Id = 109, Name = "Isha", Designation = "App Maker", DOJ = new DateOnly(1996, 7, 1), IsActive = true },
7272
};
7373
}
74-
75-
private Task OnSelectedItemsChanged(HashSet<Employee1> employees)
76-
{
77-
selectedEmployees = employees is not null && employees.Any() ? employees : new();
78-
return Task.CompletedTask;
79-
}
8074
}

BlazorBootstrap.Demo.RCL/Components/Pages/Grid/06-selection/Grid_Demo_02_A_Multiple_Selection.razor

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
<Grid TItem="Employee1"
2-
Class="table table-hover table-bordered"
3-
DataProvider="EmployeesDataProvider"
4-
AllowFiltering="true"
5-
AllowSelection="true"
6-
SelectionMode="GridSelectionMode.Multiple"
7-
SelectedItemsChanged="OnSelectedItemsChanged"
8-
Responsive="true">
2+
Class="table table-hover table-bordered"
3+
DataProvider="EmployeesDataProvider"
4+
AllowFiltering="true"
5+
AllowSelection="true"
6+
SelectionMode="GridSelectionMode.Multiple"
7+
@bind-SelectedItems="@selectedEmployees"
8+
Responsive="true">
99

1010
<GridColumns>
1111
<GridColumn TItem="Employee1" HeaderText="Id" PropertyName="Id">
@@ -44,7 +44,10 @@ Responsive="true">
4444
@code {
4545
private IEnumerable<Employee1> employees = default!;
4646

47-
private HashSet<Employee1> selectedEmployees = new();
47+
private HashSet<Employee1> selectedEmployees = new(){
48+
new Employee1 { Id = 102, Name = "Line", Designation = "Architect", DOJ = new DateOnly(1977, 1, 12), IsActive = true },
49+
new Employee1 { Id = 101, Name = "Daniel", Designation = "Architect", DOJ = new DateOnly(1977, 1, 12), IsActive = true },
50+
};
4851

4952
private async Task<GridDataProviderResult<Employee1>> EmployeesDataProvider(GridDataProviderRequest<Employee1> request)
5053
{
@@ -71,11 +74,4 @@ Responsive="true">
7174
new Employee1 { Id = 109, Name = "Isha", Designation = "App Maker", DOJ = new DateOnly(1996, 7, 1), IsActive = true },
7275
};
7376
}
74-
75-
private Task OnSelectedItemsChanged(HashSet<Employee1> employees)
76-
{
77-
selectedEmployees = employees;
78-
StateHasChanged();
79-
return Task.CompletedTask;
80-
}
8177
}

blazorbootstrap/Components/Grid/Grid.razor.cs

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ public partial class Grid<TItem> : BlazorBootstrapComponentBase
3535

3636
private int pageSize;
3737

38+
private Queue<Func<Task>> queuedTasks = new();
39+
3840
private bool requestInProgress = false;
3941

4042
private HashSet<TItem> selectedItems = new();
@@ -54,6 +56,18 @@ protected override async Task OnAfterRenderAsync(bool firstRender)
5456
}
5557

5658
await base.OnAfterRenderAsync(firstRender);
59+
60+
// process queued tasks
61+
while (true)
62+
{
63+
if (queuedTasks.Count == 0)
64+
break;
65+
66+
var taskToExecute = queuedTasks.Dequeue();
67+
68+
if (taskToExecute is not null)
69+
await taskToExecute.Invoke();
70+
}
5771
}
5872

5973
protected override void OnInitialized()
@@ -92,11 +106,11 @@ protected override Task OnParametersSetAsync()
92106
SaveGridSettingsAsync();
93107
}
94108

95-
if (!mustRefreshData && selectedItems != SelectedItems)
96-
{
97-
mustRefreshData = true;
98-
SelectedItems = selectedItems;
99-
}
109+
//if (!mustRefreshData && selectedItems != SelectedItems)
110+
//{
111+
// mustRefreshData = true;
112+
// SelectedItems = selectedItems;
113+
//}
100114

101115
// We want to trigger the first data load when we've collected the initial set of columns
102116
// because they might perform some action, like setting the default sort order.
@@ -168,13 +182,13 @@ internal async Task RefreshDataAsync(bool firstRender = false, CancellationToken
168182
await LoadGridSettingsAsync();
169183

170184
var request = new GridDataProviderRequest<TItem>
171-
{
172-
PageNumber = AllowPaging ? gridCurrentState.PageIndex : 0,
173-
PageSize = AllowPaging ? pageSize : 0,
174-
Sorting = AllowSorting ? gridCurrentState.Sorting ?? GetDefaultSorting()! : null!,
175-
Filters = AllowFiltering ? GetFilters()! : null!,
176-
CancellationToken = cancellationToken
177-
};
185+
{
186+
PageNumber = AllowPaging ? gridCurrentState.PageIndex : 0,
187+
PageSize = AllowPaging ? pageSize : 0,
188+
Sorting = AllowSorting ? gridCurrentState.Sorting ?? GetDefaultSorting()! : null!,
189+
Filters = AllowFiltering ? GetFilters()! : null!,
190+
CancellationToken = cancellationToken
191+
};
178192

179193
GridDataProviderResult<TItem> result = default!;
180194

@@ -507,7 +521,7 @@ private Task SaveGridSettingsAsync()
507521

508522
private async Task SelectAllItemsInternalAsync(bool selectAll)
509523
{
510-
if(SelectionMode != GridSelectionMode.Multiple)
524+
if (SelectionMode != GridSelectionMode.Multiple)
511525
return;
512526

513527
allItemsSelected = selectAll;
@@ -526,7 +540,12 @@ private async Task SelectAllItemsInternalAsync(bool selectAll)
526540
SelectedItems = selectedItems;
527541
}
528542

529-
private async Task SetCheckboxStateAsync(string id, CheckboxState checkboxState) => await JSRuntime.InvokeVoidAsync("window.blazorBootstrap.grid.setSelectAllCheckboxState", id, (int)checkboxState);
543+
private Task SetCheckboxStateAsync(string id, CheckboxState checkboxState)
544+
{
545+
queuedTasks.Enqueue(async () => await JSRuntime.InvokeVoidAsync("window.blazorBootstrap.grid.setSelectAllCheckboxState", id, (int)checkboxState));
546+
547+
return Task.CompletedTask;
548+
}
530549

531550
/// <summary>
532551
/// Set filters.

blazorbootstrap/Components/ThemeSwitcher/ThemeSwitcherJsInterop.cs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,17 @@ public ThemeSwitcherJsInterop(IJSRuntime jsRuntime)
2121

2222
public async ValueTask DisposeAsync()
2323
{
24-
if (moduleTask.IsValueCreated)
24+
try
2525
{
26-
var module = await moduleTask.Value;
27-
await module.DisposeAsync();
26+
if (moduleTask.IsValueCreated)
27+
{
28+
var module = await moduleTask.Value;
29+
await module.DisposeAsync();
30+
}
31+
}
32+
catch (JSDisconnectedException)
33+
{
34+
// do nothing
2835
}
2936
}
3037

0 commit comments

Comments
 (0)