Skip to content

Commit

Permalink
🐛 (DataTable): failed to update the selection by Selected parameter (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
capdiem authored Sep 4, 2024
1 parent 0d4de39 commit d5c9eff
Showing 1 changed file with 17 additions and 11 deletions.
28 changes: 17 additions & 11 deletions src/Masa.Blazor/Components/DataIterator/MDataIterator.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -80,11 +80,7 @@ public partial class MDataIterator<TItem> : MData<TItem>
/// Gets or sets the selected items.
/// </summary>
[Parameter, Obsolete("Use Selected instead.")]
public IEnumerable<TItem>? Value
{
get => GetValue<IEnumerable<TItem>>();
set => SetValue(value);
}
public IEnumerable<TItem>? Value { get; set; }

[Parameter, Obsolete("Use SelectedChanged instead.")]
public EventCallback<IEnumerable<TItem>> ValueChanged { get; set; }
Expand Down Expand Up @@ -112,6 +108,9 @@ public IEnumerable<TItem>? Value
[Parameter]
public EventCallback<(IEnumerable<TItem>, bool)> OnToggleSelectAll { get; set; }

private IEnumerable<TItem>? _prevValue;
private IEnumerable<string>? _prevSelected;

public bool EveryItem => SelectableItems.Any() && SelectableItems.All(IsSelected);

public bool SomeItems => SelectableItems.Any(IsSelected);
Expand All @@ -130,7 +129,7 @@ protected override void OnInitialized()
{
base.OnInitialized();

UpdateSelection();
UpdateSelection(init: true);
}

public override Task SetParametersAsync(ParameterView parameters)
Expand All @@ -142,16 +141,23 @@ public override Task SetParametersAsync(ParameterView parameters)
return base.SetParametersAsync(parameters);
}

protected override void RegisterWatchers(PropertyWatcher watcher)
protected override void OnParametersSet()
{
base.RegisterWatchers(watcher);
base.OnParametersSet();

watcher.Watch<IEnumerable<TItem>>(nameof(Value), UpdateSelection)
.Watch<IEnumerable<string>>(nameof(Selected), UpdateSelection);
UpdateSelection();
}

private void UpdateSelection()
private void UpdateSelection(bool init = false)
{
if (!init && ReferenceEquals(_prevSelected, Selected) && ReferenceEquals(_prevValue, Value))
{
return;
}

_prevSelected = Selected;
_prevValue = Value;

List<string>? keys = null;

if (Value is not null)
Expand Down

0 comments on commit d5c9eff

Please sign in to comment.