Skip to content

Commit 8ef3a3f

Browse files
authored
ListExtended ItemDisabledFunc (#330)
1 parent 82e9e86 commit 8ef3a3f

File tree

3 files changed

+31
-15
lines changed

3 files changed

+31
-15
lines changed

CodeBeam.MudBlazor.Extensions/Components/ListExtended/MudListExtended.razor.cs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,13 @@ public partial class MudListExtended<T> : MudComponentBase, IDisposable
8686
[Category(CategoryTypes.FormComponent.ListBehavior)]
8787
public RenderFragment SelectAllTemplate { get; set; }
8888

89+
/// <summary>
90+
/// Function to be invoked when checking whether an item should be disabled or not. Works both with renderfragment and ItemCollection approach.
91+
/// </summary>
92+
[Parameter]
93+
[Category(CategoryTypes.FormComponent.ListBehavior)]
94+
public Func<T, bool> ItemDisabledFunc { get; set; }
95+
8996
[Parameter]
9097
[Category(CategoryTypes.List.Behavior)]
9198
public DefaultConverter<T> Converter { get; set; } = new DefaultConverter<T>();
@@ -1228,7 +1235,7 @@ protected void DeactiveAllItems(List<MudListItemExtended<T>> items = null)
12281235
public async Task ActiveFirstItem(string startChar = null)
12291236
{
12301237
var items = CollectAllMudListItems(true);
1231-
if (items == null || items.Count == 0 || items[0].Disabled)
1238+
if (items == null || items.Count == 0 || items[0].GetDisabledStatus())
12321239
{
12331240
return;
12341241
}
@@ -1311,7 +1318,7 @@ public async Task ActiveAdjacentItem(int changeCount)
13111318
{
13121319
return;
13131320
}
1314-
if (items[index + changeCount].Disabled)
1321+
if (items[index + changeCount].GetDisabledStatus())
13151322
{
13161323
// Recursive
13171324
await ActiveAdjacentItem(changeCount > 0 ? changeCount + 1 : changeCount - 1);
@@ -1364,7 +1371,7 @@ public async Task ActiveLastItem()
13641371
DeactiveAllItems(items);
13651372
for (int i = 0; i < items.Count; i++)
13661373
{
1367-
if (!items[properLastIndex - i].Disabled)
1374+
if (!items[properLastIndex - i].GetDisabledStatus())
13681375
{
13691376
properLastIndex -= i;
13701377
break;

CodeBeam.MudBlazor.Extensions/Components/ListExtended/MudListItemExtended.razor

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<div tabindex="0" @attributes="UserAttributes" id="@ItemId" class="@Classname" @onclick="@(((MudListExtended?.Clickable == true || NestedList != null) && IsFunctional == false) ? OnClickHandler : OnlyOnClick)" @onclick:stopPropagation="@OnClickStopPropagation" style="@Style">
88

9-
@if (MudListExtended?.ItemDisabledTemplate != null && Disabled == true)
9+
@if (MudListExtended?.ItemDisabledTemplate != null && GetDisabledStatus() == true)
1010
{
1111
@MudListExtended.ItemDisabledTemplate(this)
1212
}
@@ -26,15 +26,15 @@
2626
<div class="@MultiSelectClassName">
2727
@if (OverrideMultiSelectionComponent == null ? MudListExtended?.MultiSelectionComponent == MultiSelectionComponent.CheckBox : OverrideMultiSelectionComponent.Value == MultiSelectionComponent.CheckBox)
2828
{
29-
<MudCheckBox Color="@MudListExtended.Color" Disabled="@Disabled" @bind-Checked="_selected" @onclick="OnClickHandler" Dense="true" />
29+
<MudCheckBox Color="@MudListExtended.Color" Disabled="@GetDisabledStatus()" @bind-Checked="_selected" @onclick="OnClickHandler" Dense="true" />
3030
}
3131
else if (OverrideMultiSelectionComponent == null ? MudListExtended?.MultiSelectionComponent == MultiSelectionComponent.Switch : OverrideMultiSelectionComponent.Value == MultiSelectionComponent.Switch)
3232
{
33-
<MudSwitch Color="@MudListExtended.Color" Disabled="@Disabled" @bind-Checked="_selected" @onclick="OnClickHandler" OnClickStopPropagation="true" />
33+
<MudSwitch Color="@MudListExtended.Color" Disabled="@GetDisabledStatus()" @bind-Checked="_selected" @onclick="OnClickHandler" OnClickStopPropagation="true" />
3434
}
3535
else if (OverrideMultiSelectionComponent == null ? MudListExtended?.MultiSelectionComponent == MultiSelectionComponent.SwitchM3 : OverrideMultiSelectionComponent.Value == MultiSelectionComponent.SwitchM3)
3636
{
37-
<MudSwitchM3 Class="mr-4" Color="@MudListExtended.Color" Disabled="@Disabled" @bind-Checked="_selected" @onclick="OnClickHandler" OnClickStopPropagation="true" />
37+
<MudSwitchM3 Class="mr-4" Color="@MudListExtended.Color" Disabled="@GetDisabledStatus()" @bind-Checked="_selected" @onclick="OnClickHandler" OnClickStopPropagation="true" />
3838
}
3939
</div>
4040
}
@@ -73,15 +73,15 @@
7373
<div class="@MultiSelectClassName">
7474
@if (OverrideMultiSelectionComponent == null ? MudListExtended?.MultiSelectionComponent == MultiSelectionComponent.CheckBox : OverrideMultiSelectionComponent.Value == MultiSelectionComponent.CheckBox)
7575
{
76-
<MudCheckBox Color="@MudListExtended.Color" Disabled="@Disabled" @bind-Checked="_selected" @onclick="OnClickHandler" Dense="true" />
76+
<MudCheckBox Color="@MudListExtended.Color" Disabled="@GetDisabledStatus()" @bind-Checked="_selected" @onclick="OnClickHandler" Dense="true" />
7777
}
7878
else if (OverrideMultiSelectionComponent == null ? MudListExtended?.MultiSelectionComponent == MultiSelectionComponent.Switch : OverrideMultiSelectionComponent.Value == MultiSelectionComponent.Switch)
7979
{
80-
<MudSwitch Color="@MudListExtended.Color" Disabled="@Disabled" @bind-Checked="_selected" @onclick="OnClickHandler" OnClickStopPropagation="true" />
80+
<MudSwitch Color="@MudListExtended.Color" Disabled="@GetDisabledStatus()" @bind-Checked="_selected" @onclick="OnClickHandler" OnClickStopPropagation="true" />
8181
}
8282
else if (OverrideMultiSelectionComponent == null ? MudListExtended?.MultiSelectionComponent == MultiSelectionComponent.SwitchM3 : OverrideMultiSelectionComponent.Value == MultiSelectionComponent.SwitchM3)
8383
{
84-
<MudSwitchM3 Color="@MudListExtended.Color" Disabled="@Disabled" @bind-Checked="_selected" @onclick="OnClickHandler" OnClickStopPropagation="true" />
84+
<MudSwitchM3 Color="@MudListExtended.Color" Disabled="@GetDisabledStatus()" @bind-Checked="_selected" @onclick="OnClickHandler" OnClickStopPropagation="true" />
8585
}
8686
</div>
8787
}
@@ -99,7 +99,7 @@
9999
{
100100
<CascadingValue Value="this" IsFixed="true">
101101
<MudCollapse Expanded="@Expanded" ExpandedChanged="@ExpandedChanged">
102-
<MudListExtended T="T" Clickable="MudListExtended?.Clickable ?? false" Color="MudListExtended?.Color ?? Color.Primary" MultiSelection="MudListExtended?.MultiSelection ?? false" MultiSelectionComponent="MudListExtended?.MultiSelectionComponent ?? MultiSelectionComponent.CheckBox" MultiSelectionAlign="MudListExtended?.MultiSelectionAlign ?? Align.Start" DisablePadding="true" Class="mud-nested-list" Disabled="@Disabled" Dense="@((Dense ?? MudListExtended?.Dense) ?? false)">
102+
<MudListExtended T="T" Clickable="MudListExtended?.Clickable ?? false" Color="MudListExtended?.Color ?? Color.Primary" MultiSelection="MudListExtended?.MultiSelection ?? false" MultiSelectionComponent="MudListExtended?.MultiSelectionComponent ?? MultiSelectionComponent.CheckBox" MultiSelectionAlign="MudListExtended?.MultiSelectionAlign ?? Align.Start" DisablePadding="true" Class="mud-nested-list" Disabled="@GetDisabledStatus()" Dense="@((Dense ?? MudListExtended?.Dense) ?? false)">
103103
<ChildContent>
104104
@NestedList
105105
</ChildContent>

CodeBeam.MudBlazor.Extensions/Components/ListExtended/MudListItemExtended.razor.cs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ public partial class MudListItemExtended<T> : MudComponentBase, IDisposable
2424
.AddClass("mud-list-item-dense-extended", Dense == true || MudListExtended?.Dense == true)
2525
.AddClass("mud-list-item-gutters-extended", !DisableGutters && !(MudListExtended?.DisableGutters == true))
2626
.AddClass("mud-list-item-clickable-extended", MudListExtended?.Clickable)
27-
.AddClass("mud-ripple", MudListExtended?.Clickable == true && !DisableRipple && !Disabled && !IsFunctional)
28-
.AddClass($"mud-selected-item mud-{MudListExtended?.Color.ToDescriptionString()}-text mud-{MudListExtended?.Color.ToDescriptionString()}-hover", _selected && !Disabled && NestedList == null && !MudListExtended.DisableSelectedItemStyle)
29-
.AddClass("mud-list-item-hilight-extended", _active && !Disabled && NestedList == null && !IsFunctional)
30-
.AddClass("mud-list-item-disabled-extended", Disabled)
27+
.AddClass("mud-ripple", MudListExtended?.Clickable == true && !DisableRipple && !GetDisabledStatus() && !IsFunctional)
28+
.AddClass($"mud-selected-item mud-{MudListExtended?.Color.ToDescriptionString()}-text mud-{MudListExtended?.Color.ToDescriptionString()}-hover", _selected && !GetDisabledStatus() && NestedList == null && !MudListExtended.DisableSelectedItemStyle)
29+
.AddClass("mud-list-item-hilight-extended", _active && !GetDisabledStatus() && NestedList == null && !IsFunctional)
30+
.AddClass("mud-list-item-disabled-extended", GetDisabledStatus())
3131
.AddClass("mud-list-item-nested-background-extended", MudListExtended != null && MudListExtended.SecondaryBackgroundForNestedItemHeader && NestedList != null)
3232
.AddClass("mud-list-item-functional", IsFunctional)
3333
.AddClass(Class)
@@ -411,6 +411,15 @@ protected void OnListParametersChanged()
411411
StateHasChanged();
412412
}
413413

414+
protected internal bool GetDisabledStatus()
415+
{
416+
if (MudListExtended?.ItemDisabledFunc != null)
417+
{
418+
return MudListExtended.ItemDisabledFunc(Value);
419+
}
420+
return Disabled;
421+
}
422+
414423
#endregion
415424

416425
}

0 commit comments

Comments
 (0)