Skip to content

Commit

Permalink
MudBlazor#4921: Guid is not working with DataGrid Bindings
Browse files Browse the repository at this point in the history
  • Loading branch information
jgoday committed Jul 31, 2022
1 parent 3f70760 commit fd16435
Show file tree
Hide file tree
Showing 6 changed files with 372 additions and 0 deletions.
@@ -0,0 +1,46 @@
@namespace MudBlazor.UnitTests.TestComponents

<MudGrid>
<MudItem xs="12">
<MudDataGrid T="IDictionary<string, object>"
@ref="MudGridRef"
Items="@forecasts"
Filterable="true">
<Columns>
<Column T="IDictionary<string, object>" FieldType="@typeof(Guid)" Field="Id" Title="Id" Sortable="true" />
<Column T="IDictionary<string, object>" FieldType="@typeof(DateTime)" Field="Date" Title="Date" Sortable="true" />
<Column T="IDictionary<string, object>" FieldType="@typeof(int)" Field="TemperatureC" Title="Temp. (C)" Sortable="true" />
<Column T="IDictionary<string, object>" FieldType="@typeof(string)" Field="Summary" Title="Summary" Sortable="true" />
</Columns>
</MudDataGrid>
</MudItem>
</MudGrid>

@code {
public MudDataGrid<IDictionary<string, object>> MudGridRef { get; private set; }
private IEnumerable<IDictionary<string, object>> forecasts = new List<IDictionary<string, object>>();

public string Guid1 => "98ee67d6-0302-40f4-935a-0014e712a9e1";
public string Guid2 => "C3D88136-44AF-4955-B422-5EE13463FDCE";

protected override void OnInitialized()
{
forecasts = new List<IDictionary<string, object>>()
{
new Dictionary<string, object>
{
{ "Id", Guid.Parse(Guid1) },
{ "Date", DateTime.UtcNow },
{ "TemperatureC", 14 },
{ "Summary", "Bracing" },
},
new Dictionary<string, object>()
{
{ "Id", Guid.Parse(Guid2) },
{ "Date", DateTime.UtcNow },
{ "TemperatureC", 14 },
{ "Summary", "Bracing" },
},
};
}
}
@@ -0,0 +1,79 @@
@namespace MudBlazor.UnitTests.TestComponents
@typeparam TItem

<MudGrid>
<MudItem xs="12">
<MudDataGrid T="WeatherForecast"
@ref="MudGridRef"
Elevation="25"
Items="@forecasts"
Hover="true"
Outlined="false"
Filterable="true"
Loading="@_loading"
Height="500px"
Bordered="true"
FixedHeader="true">
<Columns>
<Column T="WeatherForecast" Field="@nameof(WeatherForecast.Id)" Title="Id" Sortable="true" />
<Column T="WeatherForecast" Field="@nameof(WeatherForecast.Date)" Title="Date" Sortable="true" />
<Column T="WeatherForecast" Field="@nameof(WeatherForecast.TemperatureC)" Title="Temp. (C)" Sortable="true" />
<Column T="WeatherForecast" Field="@nameof(WeatherForecast.TemperatureF)" Title="Temp. (F)" Sortable="true" />
<Column T="WeatherForecast" Field="@nameof(WeatherForecast.Summary)" Title="Summary" Sortable="true" />
</Columns>
<PagerContent>
<MudDataGridPager T="WeatherForecast" />
</PagerContent>
</MudDataGrid>
</MudItem>
</MudGrid>

@code {
public MudDataGrid<WeatherForecast> MudGridRef { get; private set; }
private bool _loading;
private IEnumerable<WeatherForecast> forecasts = new List<WeatherForecast>();

public string Guid1 => "98ee67d6-0302-40f4-935a-0014e712a9e1";
public string Guid2 => "C3D88136-44AF-4955-B422-5EE13463FDCE";

protected override void OnInitialized()
{
_loading = true;
forecasts = new List<WeatherForecast>()
{
new WeatherForecast()
{
Id = ParseId(Guid1),
Date = DateTime.UtcNow,
TemperatureC = 14,
Summary = "Bracing"
},
new WeatherForecast()
{
Id = ParseId(Guid2),
Date = DateTime.UtcNow,
TemperatureC = 64,
Summary = "Bracing"
},
};
_loading = false;
}

private TItem ParseId(string id)
{
return Guid.Parse(id) as dynamic;
}

public class WeatherForecast
{
public TItem Id { get; set; }

public DateTime Date { get; set; }

public int TemperatureC { get; set; }

public string Summary { get; set; }

public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
}
}
123 changes: 123 additions & 0 deletions src/MudBlazor.UnitTests/Components/DataGridTests.cs
Expand Up @@ -2612,5 +2612,128 @@ public async Task DataGridCellContextTest()
cell.cellContext.Actions.SetSelectedItem(true);
cell.cellContext.IsSelected.Should().Be(true);
}

[Test]
public async Task TableFilterGuid()
{
var comp = Context.RenderComponent<DataGridFilterGuid<Guid>>();
var grid = comp.Instance.MudGridRef;

grid.Items.Count().Should().Be(2);
grid.FilteredItems.Count().Should().Be(2);

grid.FilterDefinitions.Add(new FilterDefinition<DataGridFilterGuid<Guid>.WeatherForecast>()
{
Field = "Id",
Operator = "equals",
Value = "invalid guid",
FieldType = typeof(Guid),
});
grid.FilteredItems.Count().Should().Be(0);

grid.FilterDefinitions.Clear();
grid.FilterDefinitions.Add(new FilterDefinition<DataGridFilterGuid<Guid>.WeatherForecast>()
{
Field = "Id",
Operator = "equals",
Value = comp.Instance.Guid1,
FieldType = typeof(Guid),
});
grid.FilteredItems.Count().Should().Be(1);
grid.FilteredItems.FirstOrDefault()?.Id.Should().Be(comp.Instance.Guid1);

grid.FilterDefinitions.Clear();
grid.FilterDefinitions.Add(new FilterDefinition<DataGridFilterGuid<Guid>.WeatherForecast>()
{
Field = "Id",
Operator = "not equals",
Value = comp.Instance.Guid1,
FieldType = typeof(Guid),
});
grid.FilteredItems.Count().Should().Be(1);
grid.FilteredItems.FirstOrDefault()?.Id.Should().Be(comp.Instance.Guid2);
}

[Test]
public async Task TableFilterNullableGuid()
{
var comp = Context.RenderComponent<DataGridFilterGuid<Nullable<Guid>>>();
var grid = comp.Instance.MudGridRef;

grid.Items.Count().Should().Be(2);
grid.FilteredItems.Count().Should().Be(2);

grid.FilterDefinitions.Add(new FilterDefinition<DataGridFilterGuid<Nullable<Guid>>.WeatherForecast>()
{
Field = "Id",
Operator = "equals",
Value = "invalid guid",
FieldType = typeof(Nullable<Guid>),
});
grid.FilteredItems.Count().Should().Be(0);

grid.FilterDefinitions.Clear();
grid.FilterDefinitions.Add(new FilterDefinition<DataGridFilterGuid<Nullable<Guid>>.WeatherForecast>()
{
Field = "Id",
Operator = "equals",
Value = comp.Instance.Guid1,
FieldType = typeof(Nullable<Guid>),
});
grid.FilteredItems.Count().Should().Be(1);
grid.FilteredItems.FirstOrDefault()?.Id.Should().Be(comp.Instance.Guid1);

grid.FilterDefinitions.Clear();
grid.FilterDefinitions.Add(new FilterDefinition<DataGridFilterGuid<Nullable<Guid>>.WeatherForecast>()
{
Field = "Id",
Operator = "not equals",
Value = comp.Instance.Guid1,
FieldType = typeof(Nullable<Guid>),
});
grid.FilteredItems.Count().Should().Be(1);
grid.FilteredItems.FirstOrDefault()?.Id.Should().Be(comp.Instance.Guid2);
}

[Test]
public async Task TableFilterGuidInDictionary()
{
var comp = Context.RenderComponent<DataGridFilterDictionaryGuid>();
var grid = comp.Instance.MudGridRef;

grid.Items.Count().Should().Be(2);
grid.FilteredItems.Count().Should().Be(2);

grid.FilterDefinitions.Add(new FilterDefinition<IDictionary<string, object>>()
{
Field = "Id",
Operator = "equals",
Value = "invalid guid",
FieldType = typeof(Nullable<Guid>),
});
grid.FilteredItems.Count().Should().Be(0);

grid.FilterDefinitions.Clear();
grid.FilterDefinitions.Add(new FilterDefinition<IDictionary<string, object>>()
{
Field = "Id",
Operator = "equals",
Value = comp.Instance.Guid1,
FieldType = typeof(Nullable<Guid>),
});
grid.FilteredItems.Count().Should().Be(1);
grid.FilteredItems.FirstOrDefault()["Id"].Should().Be(Guid.Parse(comp.Instance.Guid1));

grid.FilterDefinitions.Clear();
grid.FilterDefinitions.Add(new FilterDefinition<IDictionary<string, object>>()
{
Field = "Id",
Operator = "not equals",
Value = comp.Instance.Guid1,
FieldType = typeof(Nullable<Guid>),
});
grid.FilteredItems.Count().Should().Be(1);
grid.FilteredItems.FirstOrDefault()["Id"].Should().Be(Guid.Parse(comp.Instance.Guid2));
}
}
}
10 changes: 10 additions & 0 deletions src/MudBlazor/Components/DataGrid/Filter.razor
Expand Up @@ -66,6 +66,11 @@
</MudItem>
</MudGrid>
}
else if (dataType == typeof(Guid))
{
<MudTextField T="string" Value="@_valueString" ValueChanged="@StringValueChanged" FullWidth="true" Label="Value" Placeholder="Filter value" Margin="@Margin.Dense"
Immediate="true" Class="filter-input" />
}
</MudItem>
}
else
Expand Down Expand Up @@ -121,6 +126,11 @@ else
</MudItem>
</MudGrid>
}
else if (dataType == typeof(Guid))
{
<MudTextField T="string" Value="@_valueString" ValueChanged="@StringValueChanged" FullWidth="true" Label="Value" Placeholder="Filter value" Margin="@Margin.Dense"
Immediate="true" Class="filter-input" />
}
</MudItem>

}

0 comments on commit fd16435

Please sign in to comment.