Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
@namespace MudExtensions.UnitTests.TestComponents
@using MudBlazor.Extensions

<MudGrid>
<MudItem xs="12" sm="8" Class="d-flex flex-column align-center justify-center">
<MudTransferList @ref="_transferList" T="string" @bind-StartCollection="_startCollection" @bind-EndCollection="_endCollection" Vertical="_vertical" Color="_color"
StyleListCommon="background-color: var(--mud-palette-background-gray); width: 200px" MultiSelection="_multiSelection" MaxItems="_maxItems" SelectAllType="_selectAllType"
PreventTransfer="@(new Func<bool, bool>(CheckTransfer))" OrderFunc="@(_orderOnTransfer == false ? null : new Func<ICollection<string>, ICollection<string>>(OrderMethod))" ButtonVariant="_buttonVariant"
AllowDoubleClick="_allowDoubleClick" SearchBoxStart="_searchboxStart" SearchBoxEnd="_searchboxEnd"
StartTitle="@_startTitle" EndTitle="@_endTitle" />
</MudItem>

<MudItem xs="12" sm="4">
<MudStack Spacing="4">
<MudText><b>Start Collection:</b> @string.Join(", ", _startCollection ?? new List<string>())</MudText>
<MudText><b>End Collection:</b> @string.Join(", ", _endCollection ?? new List<string>())</MudText>
<MudSwitchM3 @bind-Value="_vertical" Label="Vertical" Color="Color.Secondary" />
<MudSwitchM3 @bind-Value="_multiSelection" Label="MultiSelection" Color="Color.Secondary" />
<MudSwitchM3 @bind-Value="_preventTurkeyTransfer" Label="Prevent Transfer If Turkey Selected" Color="Color.Secondary" />
<MudSwitchM3 @bind-Value="_orderOnTransfer" Label="Order on Transfer" Color="Color.Secondary" />
<MudSwitchM3 @bind-Value="_allowDoubleClick" Label="Allow Double Click" Color="Color.Secondary" />
<MudSwitchM3 @bind-Value="_searchboxStart" Label="SearchBox Start" Color="Color.Secondary" />
<MudSwitchM3 @bind-Value="_searchboxEnd" Label="SearchBox End" Color="Color.Secondary" />
<MudNumericField @bind-Value="_maxItems" Clearable="true" Label="MaxItems" Variant="Variant.Outlined" Margin="Margin.Dense" />
<MudSelectExtended @bind-Value="_selectAllType" ItemCollection="@(Enum.GetValues<SelectAllType>())" Label="SelectAll Type" Variant="Variant.Outlined" Margin="Margin.Dense" Dense="true" />
<MudSelectExtended @bind-Value="_color" ItemCollection="@(Enum.GetValues<Color>())" Label="Color" Variant="Variant.Outlined" Margin="Margin.Dense" Dense="true" />
<MudSelectExtended @bind-Value="_buttonVariant" ItemCollection="@(Enum.GetValues<Variant>())" Label="Button Variant" Variant="Variant.Outlined" Margin="Margin.Dense" Dense="true" />
<MudTextFieldExtended @bind-Value="_startTitle" Label="Start Title" Variant="Variant.Outlined" Immediate="true" />
<MudTextFieldExtended @bind-Value="_endTitle" Label="End Title" Variant="Variant.Outlined" Immediate="true" />
</MudStack>
</MudItem>
</MudGrid>

@code{
MudTransferList<string> _transferList = new();
ICollection<string> _startCollection = new List<string>() { "Sweden", "Hungary", "Turkey", "England", "Egypt" };
ICollection<string> _endCollection = new List<string>() { "Brazil", "China", "Germany", "USA", "South Africa" };

bool _vertical;
bool _multiSelection;
bool _preventTurkeyTransfer;
bool _orderOnTransfer;
bool _allowDoubleClick;
bool _searchboxStart;
bool _searchboxEnd;
int? _maxItems;
SelectAllType _selectAllType = SelectAllType.Buttons;
Color _color = Color.Primary;
Variant _buttonVariant = Variant.Text;
string _startTitle = "Country Group 1";
string _endTitle = "Country Group 2";

private bool CheckTransfer(bool startToEnd)
{
var valuesStart = _transferList.GetStartListSelectedValues();
var valuesEnd = _transferList.GetEndListSelectedValues();
if (_preventTurkeyTransfer == true && (valuesStart?.Contains("Turkey") == true || valuesEnd?.Contains("Turkey") == true))
{
return true;
}
return false;
}

private ICollection<string> OrderMethod(ICollection<string> e)
{
return e.Order().ToList();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
using Bunit;
using FluentAssertions;
using MudExtensions.UnitTests.TestComponents;

namespace MudExtensions.UnitTests.Components
{
[TestFixture]
public class TransferListTests : BunitTest
{
[Test]
public async Task TransferListTransferAllTest()
{
var comp = Context.RenderComponent<TransferListTest>();
var transferList = comp.FindComponent<MudTransferList<string>>();
transferList.Instance.StartCollection.Should().Contain("Turkey");
transferList.Instance.StartCollection.Should().NotContain("China");
await comp.InvokeAsync(() => transferList.Instance.TransferAll(true));
transferList.Instance.StartCollection.Should().NotContain("Turkey");
transferList.Instance.EndCollection.Should().Contain("Turkey");
await comp.InvokeAsync(() => transferList.Instance.TransferAll(false));
transferList.Instance.StartCollection.Should().Contain("Turkey");
transferList.Instance.EndCollection.Should().NotContain("Turkey");
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -1653,7 +1653,7 @@ protected internal ValueTask ScrollToMiddleAsync(MudListItemExtended<T?>? item)
///
/// </summary>
/// <returns></returns>
protected ICollection<T?>? GetSearchedItems()
protected internal ICollection<T?>? GetSearchedItems()
{
if (!SearchBox || ItemCollection == null || _searchString == null)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -340,24 +340,40 @@
}
if (startToEnd == true)
{
foreach (var item in StartCollection)
var transferredValues = new List<T>();
foreach (var item in _startList.GetSearchedItems() ?? [])
{
EndCollection.Add(item);
if (item != null)
{
transferredValues.Add(item);
}
}

foreach (var item in transferredValues ?? [])
{
EndCollection?.Add(item);
StartCollection?.Remove(item);
}
StartCollection.Clear();
_startList.Clear();
OrderItems();
await EndCollectionChanged.InvokeAsync(EndCollection);
await StartCollectionChanged.InvokeAsync(StartCollection);
}
else if (startToEnd == false)
{
foreach (var item in EndCollection)
var transferredValues = new List<T>();
foreach (var item in _endList.GetSearchedItems() ?? [])
{
if (item != null)
{
transferredValues.Add(item);
}
}

foreach (var item in transferredValues ?? [])
{
StartCollection.Add(item);
StartCollection?.Add(item);
EndCollection?.Remove(item);
}
EndCollection.Clear();
_endList.Clear();
OrderItems();
await StartCollectionChanged.InvokeAsync(StartCollection);
await EndCollectionChanged.InvokeAsync(EndCollection);
Expand Down Expand Up @@ -415,8 +431,8 @@
{
return;
}
StartCollection = OrderFunc.Invoke(StartCollection);

Check warning on line 434 in CodeBeam.MudBlazor.Extensions/Components/TransferList/MudTransferList.razor.cs

View workflow job for this annotation

GitHub Actions / build

Possible null reference argument for parameter 'arg' in 'ICollection<T?> Func<ICollection<T?>, ICollection<T?>>.Invoke(ICollection<T?> arg)'.
EndCollection = OrderFunc.Invoke(EndCollection);

Check warning on line 435 in CodeBeam.MudBlazor.Extensions/Components/TransferList/MudTransferList.razor.cs

View workflow job for this annotation

GitHub Actions / build

Possible null reference argument for parameter 'arg' in 'ICollection<T?> Func<ICollection<T?>, ICollection<T?>>.Invoke(ICollection<T?> arg)'.
}

/// <summary>
Expand Down
Loading