MudBlazor
@@ -45,18 +42,27 @@
Templates
-
Blazor templates loaded with MudBlazor
+
Blazor templates with MudBlazor
-
- Community
-
+
+
+ Icon Pack
+
+ Extra Material icons and symbols
+
+
+
+ Translations
+
+ Support for additional locales
+
- Community Extensions
+ Extensions
- Links and Github Repositories
+ Community Extensions
diff --git a/src/MudBlazor.Docs/wwwroot/CommunityExtensions.json b/src/MudBlazor.Docs/wwwroot/CommunityExtensions.json
index 8a23b315c92c..fa95b888a41b 100644
--- a/src/MudBlazor.Docs/wwwroot/CommunityExtensions.json
+++ b/src/MudBlazor.Docs/wwwroot/CommunityExtensions.json
@@ -1,8 +1,7 @@
[
{
- "CategoryComment": "// Valid Categories are Parent, Components, Utility, Style, Other,",
- "AvatarImageSrc": "a link to an image file for the Avatar area",
- "Category": "Invalid selections are ignored, Valid options are: Parent, Components, Utility, Style, or Other",
+ "CategoryComment": "// Valid Categories are Components, Utility, Style, Other,",
+ "Category": "Invalid selections are ignored, Valid options are: Components, Utility, Style, or Other",
"Name": "The name of your extension, avoid super long names if possible.",
"Description": "A brief description of what the extension does for MudBlazor users",
"Link": "Your preferred landing page, users will have this link and a link to github automatically generated",
@@ -10,34 +9,6 @@
"GitHubRepoPath": "Your github repo"
},
{
- "AvatarImageSrc": "https://mudblazor.com/_content/MudBlazor.Docs/images/logo.png",
- "Category": "Parent",
- "Name": "MudBlazor",
- "Description": "With millions of downloads, from hobby developers to large enterprises, MudBlazor enables you to rapidly build amazing web applications without leaving your beloved C# language and toolchain.",
- "Link": "https://mudblazor.com",
- "GitHubUserPath": "MudBlazor",
- "GitHubRepoPath": "MudBlazor"
- },
- {
- "AvatarImageSrc": "https://mudblazor.com/_content/MudBlazor.Docs/images/logo.png",
- "Category": "Parent",
- "Name": "MudBlazor Translations",
- "Description": "Crowdsourced translations for the MudBlazor component library.",
- "Link": "https://github.com/MudBlazor/Translations",
- "GitHubUserPath": "MudBlazor",
- "GitHubRepoPath": "Translations"
- },
- {
- "AvatarImageSrc": "https://mudblazor.com/_content/MudBlazor.Docs/images/logo.png",
- "Category": "Parent",
- "Name": "MudBlazor Icons",
- "Description": "Official Material Icon & Symbols pack for MudBlazor.",
- "Link": "https://github.com/MudBlazor/MudBlazor.Icons",
- "GitHubUserPath": "MudBlazor",
- "GitHubRepoPath": "MudBlazor.Icons"
- },
- {
- "AvatarImageSrc": "https://themes.arctechonline.tech/ThemeCreator.png",
"Category": "Style",
"Name": "Theme Creator",
"Description": "Blazor Theme Creator site for MudBlazor library. This app is designed to be used to create and manage themes for MudBlazor, not as part of your application.",
@@ -46,7 +17,6 @@
"GitHubRepoPath": "ThemeCreatorMudBlazor"
},
{
- "AvatarImageSrc": "https://avatars.githubusercontent.com/u/65362616?s=48&v=4",
"Category": "Components",
"Name": "MudBlazor Markdown",
"Description": "A Markdown Component for MudBlazor.",
@@ -55,7 +25,6 @@
"GitHubRepoPath": "MudBlazor.Markdown"
},
{
- "AvatarImageSrc": "https://avatars.githubusercontent.com/u/105243816?s=48&v=4",
"Category": "Components",
"Name": "CodeBeam MudBlazor Extensions",
"Description": "MudExtensions has 30+ components and utilities from the core library contributors. There are both unique and extended components that add additional features on current Mud components.",
@@ -64,7 +33,6 @@
"GitHubRepoPath": "CodeBeam.MudBlazor.Extensions"
},
{
- "AvatarImageSrc": "https://raw.githubusercontent.com/fgilde/MudBlazor.Extensions/main/MudExtension.png",
"Category": "Components",
"Name": "Fgilde MudBlazor Extensions",
"Description": "MudBlazor.Extensions is a convenient package that extends the capabilities of the MudBlazor component library. There are both unique and extended components and utilities that add additional features on current Mud components.",
@@ -73,7 +41,6 @@
"GitHubRepoPath": "MudBlazor.Extensions"
},
{
- "AvatarImageSrc": "https://raw.githubusercontent.com/fgilde/MudBlazor.Extensions/main/MudExtension.png",
"Category": "Components",
"Name": "Fgilde MudEx RichTextEditor",
"Description": "MudExRichTextEditor is a custom reusable control that allows us to easily consume Quill combining in a MudBlazor project Features with MudBlazor Theme Support. This compnent also works without a MudBlazor Project.",
@@ -82,7 +49,6 @@
"GitHubRepoPath": "MudExRichTextEditor"
},
{
- "AvatarImageSrc": "https://avatars.githubusercontent.com/u/88168386?s=48&v=4",
"Category": "Components",
"Name": "Static Input (for SSR)",
"Description": "Tailored specifically for Static Server-Side Rendered (static SSR) pages. It offers seamless integration for some of MudBlazor's Component design into your static application pages. Focusing particularly on components designed for forms and edit forms, in situations where interactive components are not feasible.",
@@ -91,7 +57,6 @@
"GitHubRepoPath": "MudBlazor.StaticInput"
},
{
- "AvatarImageSrc": "https://avatars.githubusercontent.com/u/51314385?s=48&v=4",
"Category": "Components",
"Name": "Heron MudCalendar",
"Description": "A simple but powerful calendar component for MudBlazor. Calendar includes multiple views (month, week, work week, and day), customizable events, and easy integration with your existing MudBlazor project.",
@@ -100,7 +65,6 @@
"GitHubRepoPath": "Heron.MudCalendar"
},
{
- "AvatarImageSrc": "https://mudblocks.cc/assets/images/logo/favicon-512.png",
"Category": "Style",
"Name": "MudBlocks",
"Description": "A collection of MudBlazor blocks. Predefined, reusable UI elements or layouts designed to simplify development by combining multiple components into cohesive sections; such as headers, footers, forms, cards, or dashboards.",
@@ -109,7 +73,6 @@
"GitHubRepoPath": "mudblocks"
},
{
- "AvatarImageSrc": "https://avatars.githubusercontent.com/u/5263228?s=48&v=4",
"Category": "Components",
"Name": "MudBlazor PdfViewer",
"Description": "A component for displaying and manipulating PDF documents.",
@@ -118,7 +81,6 @@
"GitHubRepoPath": "MudBlazor.PdfViewer"
},
{
- "AvatarImageSrc": "https://raw.githubusercontent.com/phmatray/FormCraft/refs/heads/main/FormCraft/icon.png",
"Category": "Utility",
"Name": "FormCraft",
"Description": "A powerful, type-safe dynamic form library for Blazor applications with fluent API design. Provides seamless integration with MudBlazor components, enabling developers to build complex forms with minimal code.",
diff --git a/src/MudBlazor.Docs/wwwroot/images/extensions/0phois.MudBlazor.StaticInput.webp b/src/MudBlazor.Docs/wwwroot/images/extensions/0phois.MudBlazor.StaticInput.webp
new file mode 100644
index 000000000000..258cf0999edc
Binary files /dev/null and b/src/MudBlazor.Docs/wwwroot/images/extensions/0phois.MudBlazor.StaticInput.webp differ
diff --git a/src/MudBlazor.Docs/wwwroot/images/extensions/CodeBeamOrg.CodeBeam.MudBlazor.Extensions.webp b/src/MudBlazor.Docs/wwwroot/images/extensions/CodeBeamOrg.CodeBeam.MudBlazor.Extensions.webp
new file mode 100644
index 000000000000..72d32d238d9a
Binary files /dev/null and b/src/MudBlazor.Docs/wwwroot/images/extensions/CodeBeamOrg.CodeBeam.MudBlazor.Extensions.webp differ
diff --git a/src/MudBlazor.Docs/wwwroot/images/extensions/MyNihongo.MudBlazor.Markdown.webp b/src/MudBlazor.Docs/wwwroot/images/extensions/MyNihongo.MudBlazor.Markdown.webp
new file mode 100644
index 000000000000..c127ae916cf9
Binary files /dev/null and b/src/MudBlazor.Docs/wwwroot/images/extensions/MyNihongo.MudBlazor.Markdown.webp differ
diff --git a/src/MudBlazor.Docs/wwwroot/images/extensions/danheron.Heron.MudCalendar.webp b/src/MudBlazor.Docs/wwwroot/images/extensions/danheron.Heron.MudCalendar.webp
new file mode 100644
index 000000000000..b3e7d7ac4131
Binary files /dev/null and b/src/MudBlazor.Docs/wwwroot/images/extensions/danheron.Heron.MudCalendar.webp differ
diff --git a/src/MudBlazor.Docs/wwwroot/images/extensions/fgilde.MudBlazor.Extensions.webp b/src/MudBlazor.Docs/wwwroot/images/extensions/fgilde.MudBlazor.Extensions.webp
new file mode 100644
index 000000000000..fbf2689e3dbc
Binary files /dev/null and b/src/MudBlazor.Docs/wwwroot/images/extensions/fgilde.MudBlazor.Extensions.webp differ
diff --git a/src/MudBlazor.Docs/wwwroot/images/extensions/fgilde.MudExRichTextEditor.webp b/src/MudBlazor.Docs/wwwroot/images/extensions/fgilde.MudExRichTextEditor.webp
new file mode 100644
index 000000000000..fbf2689e3dbc
Binary files /dev/null and b/src/MudBlazor.Docs/wwwroot/images/extensions/fgilde.MudExRichTextEditor.webp differ
diff --git a/src/MudBlazor.Docs/wwwroot/images/extensions/mouse0270.mudblocks.webp b/src/MudBlazor.Docs/wwwroot/images/extensions/mouse0270.mudblocks.webp
new file mode 100644
index 000000000000..a52676c903ed
Binary files /dev/null and b/src/MudBlazor.Docs/wwwroot/images/extensions/mouse0270.mudblocks.webp differ
diff --git a/src/MudBlazor.Docs/wwwroot/images/extensions/phmatray.FormCraft.webp b/src/MudBlazor.Docs/wwwroot/images/extensions/phmatray.FormCraft.webp
new file mode 100644
index 000000000000..c5f06991ffb8
Binary files /dev/null and b/src/MudBlazor.Docs/wwwroot/images/extensions/phmatray.FormCraft.webp differ
diff --git a/src/MudBlazor.Docs/wwwroot/images/extensions/tgothorp.MudBlazor.PdfViewer.webp b/src/MudBlazor.Docs/wwwroot/images/extensions/tgothorp.MudBlazor.PdfViewer.webp
new file mode 100644
index 000000000000..cf3dfa6563ee
Binary files /dev/null and b/src/MudBlazor.Docs/wwwroot/images/extensions/tgothorp.MudBlazor.PdfViewer.webp differ
diff --git a/src/MudBlazor.Docs/wwwroot/images/extensions/versile2.ThemeCreatorMudBlazor.webp b/src/MudBlazor.Docs/wwwroot/images/extensions/versile2.ThemeCreatorMudBlazor.webp
new file mode 100644
index 000000000000..1b266ad5d7d0
Binary files /dev/null and b/src/MudBlazor.Docs/wwwroot/images/extensions/versile2.ThemeCreatorMudBlazor.webp differ
diff --git a/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridDateOnlyFilterTest.razor b/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridDateOnlyFilterTest.razor
index 8b0b73eca422..f65e39d80afb 100644
--- a/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridDateOnlyFilterTest.razor
+++ b/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridDateOnlyFilterTest.razor
@@ -1,4 +1,13 @@
-
+
+ Filter Mode:
+
+
+
+
+
+
+
+
@@ -7,9 +16,11 @@
@code {
- public static string __description__ = @"Test DateOnly filtering in DataGrid";
+ public static string __description__ = @"Test DateOnly filtering in DataGrid with all filter modes";
public record Model(string Name, int? Age, DateOnly? HiredOn);
+ private DataGridFilterMode _filterMode = DataGridFilterMode.ColumnFilterRow;
+
private readonly IEnumerable _people =
[
new("Sam", 56, new DateOnly(2020, 3, 10)),
diff --git a/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridFiltersTest.razor b/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridFiltersTest.razor
index 1a19992b8c45..b6cecb85a232 100644
--- a/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridFiltersTest.razor
+++ b/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridFiltersTest.razor
@@ -8,6 +8,7 @@
+
@@ -15,11 +16,11 @@
@code {
private IEnumerable
_items = new List()
{
- new Model("Sam", 56, Severity.Normal, false, null, null),
- new Model("Alicia", 54, Severity.Info, null, null, new Guid("b7accfd5-928d-48ad-8a0c-9448ae37bf96")),
- new Model("Ira", 27, Severity.Success, true, new DateTime(2011, 1, 2), null),
- new Model("John", 32, Severity.Warning, false, null, null)
+ new Model("Sam", 56, Severity.Normal, false, null, new DateOnly(2020, 3, 10), null),
+ new Model("Alicia", 54, Severity.Info, null, null, null, new Guid("b7accfd5-928d-48ad-8a0c-9448ae37bf96")),
+ new Model("Ira", 27, Severity.Success, true, new DateTime(2011, 1, 2), new DateOnly(2011, 1, 2), null),
+ new Model("John", 32, Severity.Warning, false, null, new DateOnly(2022, 6, 15), null)
};
- public record Model (string Name, int? Age, Severity? Status, bool? Hired, DateTime? HiredOn, Guid? ApplicationId);
+ public record Model (string Name, int? Age, Severity? Status, bool? Hired, DateTime? HiredOn, DateOnly? StartDate, Guid? ApplicationId);
}
diff --git a/src/MudBlazor.UnitTests.Viewer/TestComponents/Dialog/DialogOkCancel.razor b/src/MudBlazor.UnitTests.Viewer/TestComponents/Dialog/DialogOkCancel.razor
index f92d8e475e57..fac8419e7df8 100644
--- a/src/MudBlazor.UnitTests.Viewer/TestComponents/Dialog/DialogOkCancel.razor
+++ b/src/MudBlazor.UnitTests.Viewer/TestComponents/Dialog/DialogOkCancel.razor
@@ -1,4 +1,4 @@
-
+
Wabalabadubdub!
diff --git a/src/MudBlazor.UnitTests.Viewer/TestComponents/Dialog/TestInlineDialog.razor b/src/MudBlazor.UnitTests.Viewer/TestComponents/Dialog/TestInlineDialog.razor
index ae069a06b536..950f7394f0fa 100644
--- a/src/MudBlazor.UnitTests.Viewer/TestComponents/Dialog/TestInlineDialog.razor
+++ b/src/MudBlazor.UnitTests.Viewer/TestComponents/Dialog/TestInlineDialog.razor
@@ -2,7 +2,7 @@
Open
-
+
Wabalabadubdub!
@@ -26,4 +26,4 @@
return DialogService.ShowMessageBox(title: "hello from inline", message: "BUG4871", yesText: "BUG4871");
}
-}
\ No newline at end of file
+}
diff --git a/src/MudBlazor.UnitTests.Viewer/TestComponents/FileUpload/FileUploadWithDragAndDropActivatorTest.razor b/src/MudBlazor.UnitTests.Viewer/TestComponents/FileUpload/FileUploadWithDragAndDropActivatorTest.razor
index 0e9c0f8b2202..2693d6a56733 100644
--- a/src/MudBlazor.UnitTests.Viewer/TestComponents/FileUpload/FileUploadWithDragAndDropActivatorTest.razor
+++ b/src/MudBlazor.UnitTests.Viewer/TestComponents/FileUpload/FileUploadWithDragAndDropActivatorTest.razor
@@ -1,13 +1,22 @@
@using System.IO
+
+
$"data:{contentType};base64,{Convert.ToBase64String(buffer)}";
-}
\ No newline at end of file
+}
diff --git a/src/MudBlazor.UnitTests.Viewer/TestComponents/Form/FormWithFileUploadAndDragAndDropActivatorTest.razor b/src/MudBlazor.UnitTests.Viewer/TestComponents/Form/FormWithFileUploadAndDragAndDropActivatorTest.razor
index 4002736dbca9..7afd0d127565 100644
--- a/src/MudBlazor.UnitTests.Viewer/TestComponents/Form/FormWithFileUploadAndDragAndDropActivatorTest.razor
+++ b/src/MudBlazor.UnitTests.Viewer/TestComponents/Form/FormWithFileUploadAndDragAndDropActivatorTest.razor
@@ -1,6 +1,17 @@
@using System.IO
@using System.Text
+
+
new MemoryStream(Content);
}
-}
\ No newline at end of file
+}
diff --git a/src/MudBlazor.UnitTests.Viewer/TestComponents/Tabs/ActivatePanelDragAndDropTest.razor b/src/MudBlazor.UnitTests.Viewer/TestComponents/Tabs/ActivatePanelDragAndDropTest.razor
new file mode 100644
index 000000000000..3ae9a0c0f54d
--- /dev/null
+++ b/src/MudBlazor.UnitTests.Viewer/TestComponents/Tabs/ActivatePanelDragAndDropTest.razor
@@ -0,0 +1,28 @@
+
+
+ Tab One
+
+
+ Tab Two
+
+
+ Tab Three
+
+
+ Tab Four
+
+
+
+
+ Enable Drag & Drop
+
+
+@code {
+ private bool _dragDrop { get; set; }
+ private int _activePanelIndex { get; set; } = 1;
+
+ [Parameter]
+ public string? ActiveTabClass { get; set; }
+}
diff --git a/src/MudBlazor.UnitTests.Viewer/TestComponents/Tabs/LabelSortTest.razor b/src/MudBlazor.UnitTests.Viewer/TestComponents/Tabs/LabelSortTest.razor
index 7f1182259166..b3d977fa2e7e 100644
--- a/src/MudBlazor.UnitTests.Viewer/TestComponents/Tabs/LabelSortTest.razor
+++ b/src/MudBlazor.UnitTests.Viewer/TestComponents/Tabs/LabelSortTest.razor
@@ -42,9 +42,19 @@ else if (SortKeys is not null)
}
}
+else if (SortComparer is not null && SortDirection.HasValue)
+{
+ @* custom comparer - SortDirection is ignored for custom comparer *@
+
+
+
+
+
+}
else if (SortComparer is not null)
{
-
+ @* custom comparer - SortDirection is not used with custom comparer and can be unspecified *@
+
diff --git a/src/MudBlazor.UnitTests.Viewer/TestComponents/Tabs/SimpleDynamicTabsTest.razor b/src/MudBlazor.UnitTests.Viewer/TestComponents/Tabs/SimpleDynamicTabsTest.razor
index fd34c6d85a02..27d007d5df64 100644
--- a/src/MudBlazor.UnitTests.Viewer/TestComponents/Tabs/SimpleDynamicTabsTest.razor
+++ b/src/MudBlazor.UnitTests.Viewer/TestComponents/Tabs/SimpleDynamicTabsTest.razor
@@ -1,5 +1,5 @@
-
+
Content A
diff --git a/src/MudBlazor.UnitTests.Viewer/TestComponents/Tabs/SimpleDynamicTabsTestWithToolTips.razor b/src/MudBlazor.UnitTests.Viewer/TestComponents/Tabs/SimpleDynamicTabsTestWithToolTips.razor
index bb6d63323992..153177b378c7 100644
--- a/src/MudBlazor.UnitTests.Viewer/TestComponents/Tabs/SimpleDynamicTabsTestWithToolTips.razor
+++ b/src/MudBlazor.UnitTests.Viewer/TestComponents/Tabs/SimpleDynamicTabsTestWithToolTips.razor
@@ -1,7 +1,7 @@
-
+
Content A
@@ -11,4 +11,4 @@
Content A
-
\ No newline at end of file
+
diff --git a/src/MudBlazor.UnitTests.Viewer/TestComponents/Tabs/TabsDragAndDropTest.razor b/src/MudBlazor.UnitTests.Viewer/TestComponents/Tabs/TabsDragAndDropTest.razor
index 298962142a1c..cb20da4cb896 100644
--- a/src/MudBlazor.UnitTests.Viewer/TestComponents/Tabs/TabsDragAndDropTest.razor
+++ b/src/MudBlazor.UnitTests.Viewer/TestComponents/Tabs/TabsDragAndDropTest.razor
@@ -1,4 +1,5 @@
-
+
Content One
@@ -15,4 +16,7 @@
@code {
public static string __description__ = "Viewer for MudTabs. Drag and drop tabs to reorder them.";
+
+ [Parameter]
+ public EventCallback> ItemDroppedFired { get; set; }
}
diff --git a/src/MudBlazor.UnitTests/Components/DataGridTests.cs b/src/MudBlazor.UnitTests/Components/DataGridTests.cs
index bf05dd6ba7e3..e9be98ec3c71 100644
--- a/src/MudBlazor.UnitTests/Components/DataGridTests.cs
+++ b/src/MudBlazor.UnitTests/Components/DataGridTests.cs
@@ -145,8 +145,8 @@ public async Task DataGridSortableTest()
await comp.InvokeAsync(() => headerCell.Instance.SortChangedAsync(new Microsoft.AspNetCore.Components.Web.MouseEventArgs()));
//await comp.InvokeAsync(() => headerCell.Instance.GetDataType());
await comp.InvokeAsync(() => headerCell.Instance.RemoveSortAsync());
- await comp.InvokeAsync(() => headerCell.Instance.AddFilter());
- await comp.InvokeAsync(() => headerCell.Instance.OpenFilters());
+ await comp.InvokeAsync(() => headerCell.Instance.AddFilter(new MouseEventArgs()));
+ await comp.InvokeAsync(() => headerCell.Instance.OpenFilters(new MouseEventArgs()));
await comp.InvokeAsync(() => dataGrid.Instance.SortMode = SortMode.None);
dataGrid.Render();
@@ -262,8 +262,8 @@ public async Task DataGridSortableVirtualizeServerDataTest()
await comp.InvokeAsync(() => headerCell.Instance.SortChangedAsync(new Microsoft.AspNetCore.Components.Web.MouseEventArgs()));
//await comp.InvokeAsync(() => headerCell.Instance.GetDataType());
await comp.InvokeAsync(() => headerCell.Instance.RemoveSortAsync());
- await comp.InvokeAsync(() => headerCell.Instance.AddFilter());
- await comp.InvokeAsync(() => headerCell.Instance.OpenFilters());
+ await comp.InvokeAsync(() => headerCell.Instance.AddFilter(new MouseEventArgs()));
+ await comp.InvokeAsync(() => headerCell.Instance.OpenFilters(new MouseEventArgs()));
await comp.InvokeAsync(() => dataGrid.Instance.SortMode = SortMode.None);
dataGrid.Render();
@@ -1393,10 +1393,10 @@ public void FilterDefinitionStringTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Does not contain", 45, null, null, null, null)).Should().BeFalse();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new("joe", 45, null, null, null, null)).Should().BeFalse();
- func.Invoke(new(null, 45, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Does not contain", 45, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("joe", 45, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new(null, 45, null, null, null, null, null)).Should().BeFalse();
//case insensitive
filterDefinition = new FilterDefinition
@@ -1410,10 +1410,10 @@ public void FilterDefinitionStringTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Does not contain", 45, null, null, null, null)).Should().BeFalse();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new("joe", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new(null, 45, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Does not contain", 45, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("joe", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new(null, 45, null, null, null, null, null)).Should().BeFalse();
// null value default case sensitivity
filterDefinition = new FilterDefinition
@@ -1427,9 +1427,9 @@ public void FilterDefinitionStringTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Does not contain", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new(null, 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Does not contain", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new(null, 45, null, null, null, null, null)).Should().BeTrue();
// null value default case insensitive
filterDefinition = new FilterDefinition
@@ -1443,9 +1443,9 @@ public void FilterDefinitionStringTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Does not contain", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new(null, 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Does not contain", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new(null, 45, null, null, null, null, null)).Should().BeTrue();
#endregion
@@ -1463,10 +1463,10 @@ public void FilterDefinitionStringTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Does not contain", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeFalse();
- func.Invoke(new("joe", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new(null, 45, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Does not contain", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("joe", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new(null, 45, null, null, null, null, null)).Should().BeFalse();
// case insensitive
filterDefinition = new FilterDefinition
@@ -1480,10 +1480,10 @@ public void FilterDefinitionStringTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Does not contain", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new("joe", 45, null, null, null, null)).Should().BeFalse();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeFalse();
- func.Invoke(new(null, 45, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Does not contain", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("joe", 45, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new(null, 45, null, null, null, null, null)).Should().BeFalse();
// null value
filterDefinition = new FilterDefinition
@@ -1497,9 +1497,9 @@ public void FilterDefinitionStringTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Does not contain", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new(null, 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Does not contain", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new(null, 45, null, null, null, null, null)).Should().BeTrue();
#endregion
@@ -1516,10 +1516,10 @@ public void FilterDefinitionStringTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Not Joe", 45, null, null, null, null)).Should().BeFalse();
- func.Invoke(new(null, 45, null, null, null, null)).Should().BeFalse();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new("joe", 45, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Not Joe", 45, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new(null, 45, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("joe", 45, null, null, null, null, null)).Should().BeFalse();
//case insensitive
filterDefinition = new FilterDefinition
@@ -1533,10 +1533,10 @@ public void FilterDefinitionStringTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Not Joe", 45, null, null, null, null)).Should().BeFalse();
- func.Invoke(new(null, 45, null, null, null, null)).Should().BeFalse();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new("joe", 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Not Joe", 45, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new(null, 45, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("joe", 45, null, null, null, null, null)).Should().BeTrue();
// null value default case sensitivity
filterDefinition = new FilterDefinition
@@ -1550,9 +1550,9 @@ public void FilterDefinitionStringTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Joe Not", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new(null, 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe Not", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new(null, 45, null, null, null, null, null)).Should().BeTrue();
// null value case insensitive
filterDefinition = new FilterDefinition
@@ -1566,10 +1566,10 @@ public void FilterDefinitionStringTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Joe Not", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new("joe", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new(null, 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe Not", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("joe", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new(null, 45, null, null, null, null, null)).Should().BeTrue();
#endregion
@@ -1587,10 +1587,10 @@ public void FilterDefinitionStringTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Not Joe", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new(null, 45, null, null, null, null)).Should().BeFalse();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeFalse();
- func.Invoke(new("joe", 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Not Joe", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new(null, 45, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("joe", 45, null, null, null, null, null)).Should().BeTrue();
//case insensitive
filterDefinition = new FilterDefinition
@@ -1604,10 +1604,10 @@ public void FilterDefinitionStringTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Not Joe", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new(null, 45, null, null, null, null)).Should().BeFalse();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeFalse();
- func.Invoke(new("joe", 45, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Not Joe", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new(null, 45, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("joe", 45, null, null, null, null, null)).Should().BeFalse();
// null value
filterDefinition = new FilterDefinition
@@ -1621,9 +1621,9 @@ public void FilterDefinitionStringTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Joe Not", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new(null, 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe Not", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new(null, 45, null, null, null, null, null)).Should().BeTrue();
#endregion
@@ -1640,10 +1640,10 @@ public void FilterDefinitionStringTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Not Joe", 45, null, null, null, null)).Should().BeFalse();
- func.Invoke(new(null, 45, null, null, null, null)).Should().BeFalse();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new("joe", 45, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Not Joe", 45, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new(null, 45, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("joe", 45, null, null, null, null, null)).Should().BeFalse();
//case insensitive
filterDefinition = new FilterDefinition
@@ -1657,10 +1657,10 @@ public void FilterDefinitionStringTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Not Joe", 45, null, null, null, null)).Should().BeFalse();
- func.Invoke(new(null, 45, null, null, null, null)).Should().BeFalse();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new("joe", 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Not Joe", 45, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new(null, 45, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("joe", 45, null, null, null, null, null)).Should().BeTrue();
// null value
filterDefinition = new FilterDefinition
@@ -1674,9 +1674,9 @@ public void FilterDefinitionStringTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Not Joe", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new(null, 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Not Joe", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new(null, 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
#endregion
@@ -1693,10 +1693,10 @@ public void FilterDefinitionStringTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Joe Not", 45, null, null, null, null)).Should().BeFalse();
- func.Invoke(new(null, 45, null, null, null, null)).Should().BeFalse();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new("joe", 45, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Joe Not", 45, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new(null, 45, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("joe", 45, null, null, null, null, null)).Should().BeFalse();
//case insensitive
filterDefinition = new FilterDefinition
@@ -1710,10 +1710,10 @@ public void FilterDefinitionStringTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Joe Not", 45, null, null, null, null)).Should().BeFalse();
- func.Invoke(new(null, 45, null, null, null, null)).Should().BeFalse();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new("joe", 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe Not", 45, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new(null, 45, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("joe", 45, null, null, null, null, null)).Should().BeTrue();
// null value
filterDefinition = new FilterDefinition
@@ -1727,9 +1727,9 @@ public void FilterDefinitionStringTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Joe Not", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new(null, 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe Not", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new(null, 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
#endregion
@@ -1745,10 +1745,10 @@ public void FilterDefinitionStringTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Joe Not", 45, null, null, null, null)).Should().BeFalse();
- func.Invoke(new("", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new(null, 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new(string.Empty, 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe Not", 45, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new(null, 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new(string.Empty, 45, null, null, null, null, null)).Should().BeTrue();
// null value
filterDefinition = new FilterDefinition
@@ -1761,10 +1761,10 @@ public void FilterDefinitionStringTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Joe Not", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new("", 45, null, null, null, null)).Should().BeFalse();
- func.Invoke(new(null, 45, null, null, null, null)).Should().BeFalse();
- func.Invoke(new(string.Empty, 45, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Joe Not", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("", 45, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new(null, 45, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new(string.Empty, 45, null, null, null, null, null)).Should().BeFalse();
#endregion
@@ -1780,10 +1780,10 @@ public void FilterDefinitionStringTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Joe Not", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new("", 45, null, null, null, null)).Should().BeFalse();
- func.Invoke(new(null, 45, null, null, null, null)).Should().BeFalse();
- func.Invoke(new(string.Empty, 45, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Joe Not", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("", 45, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new(null, 45, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new(string.Empty, 45, null, null, null, null, null)).Should().BeFalse();
// null value
filterDefinition = new FilterDefinition
@@ -1796,10 +1796,10 @@ public void FilterDefinitionStringTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Joe Not", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new("", 45, null, null, null, null)).Should().BeFalse();
- func.Invoke(new(null, 45, null, null, null, null)).Should().BeFalse();
- func.Invoke(new(string.Empty, 45, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Joe Not", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("", 45, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new(null, 45, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new(string.Empty, 45, null, null, null, null, null)).Should().BeFalse();
#endregion
@@ -1814,9 +1814,9 @@ public void FilterDefinitionStringTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Joe Not", 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new(null, 45, null, null, null, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe Not", 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new(null, 45, null, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
}
[Test]
@@ -1838,9 +1838,9 @@ public void FilterDefinitionBoolTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Sam", 45, null, false, null, null)).Should().BeFalse();
- func.Invoke(new("Joe", 45, null, true, null, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Sam", 45, null, false, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Joe", 45, null, true, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeFalse();
// null value
filterDefinition = new FilterDefinition
@@ -1853,9 +1853,9 @@ public void FilterDefinitionBoolTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Sam", 45, null, false, null, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, true, null, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Sam", 45, null, false, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, true, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
#endregion
@@ -1870,9 +1870,9 @@ public void FilterDefinitionBoolTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Sam", 45, null, false, null, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, true, null, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Sam", 45, null, false, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, true, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
}
[Test]
@@ -1894,9 +1894,9 @@ public void FilterDefinitionEnumTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Sam", 456, Severity.Info, null, null, null)).Should().BeFalse();
- func.Invoke(new("Joe", 45, Severity.Normal, null, null, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Sam", 456, Severity.Info, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Joe", 45, Severity.Normal, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeFalse();
// null value
filterDefinition = new FilterDefinition
@@ -1909,9 +1909,9 @@ public void FilterDefinitionEnumTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Sam", 456, Severity.Info, null, null, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, Severity.Normal, null, null, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Sam", 456, Severity.Info, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, Severity.Normal, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
#endregion
@@ -1927,9 +1927,9 @@ public void FilterDefinitionEnumTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Sam", 456, Severity.Normal, null, null, null)).Should().BeFalse();
- func.Invoke(new("Joe", 45, Severity.Info, null, null, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Sam", 456, Severity.Normal, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Joe", 45, Severity.Info, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
// null value
filterDefinition = new FilterDefinition
@@ -1942,9 +1942,9 @@ public void FilterDefinitionEnumTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Sam", 456, Severity.Normal, null, null, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, Severity.Info, null, null, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Sam", 456, Severity.Normal, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, Severity.Info, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
#endregion
@@ -1959,9 +1959,9 @@ public void FilterDefinitionEnumTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Sam", 456, Severity.Normal, null, null, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, Severity.Info, null, null, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Sam", 456, Severity.Normal, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, Severity.Info, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
}
[Test]
@@ -1984,8 +1984,8 @@ public void FilterDefinitionDateTimeTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Sam", 45, null, null, utcnow, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Sam", 45, null, null, utcnow, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeFalse();
// null value
filterDefinition = new FilterDefinition
@@ -1998,8 +1998,8 @@ public void FilterDefinitionDateTimeTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Sam", 45, null, null, utcnow, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Sam", 45, null, null, utcnow, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
#endregion
@@ -2015,8 +2015,8 @@ public void FilterDefinitionDateTimeTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Sam", 45, null, null, utcnow, null)).Should().BeFalse();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Sam", 45, null, null, utcnow, null, null)).Should().BeFalse();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
// null value
filterDefinition = new FilterDefinition
@@ -2029,8 +2029,8 @@ public void FilterDefinitionDateTimeTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Sam", 45, null, null, utcnow, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Sam", 45, null, null, utcnow, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
#endregion
@@ -2046,8 +2046,8 @@ public void FilterDefinitionDateTimeTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Sam", 45, null, null, utcnow, null)).Should().BeFalse();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Sam", 45, null, null, utcnow, null, null)).Should().BeFalse();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeFalse();
// null value
filterDefinition = new FilterDefinition
@@ -2060,8 +2060,8 @@ public void FilterDefinitionDateTimeTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Sam", 45, null, null, utcnow, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Sam", 45, null, null, utcnow, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
#endregion
@@ -2077,8 +2077,8 @@ public void FilterDefinitionDateTimeTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Sam", 45, null, null, utcnow, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Sam", 45, null, null, utcnow, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeFalse();
// null value
filterDefinition = new FilterDefinition
@@ -2091,8 +2091,8 @@ public void FilterDefinitionDateTimeTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Sam", 45, null, null, utcnow, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Sam", 45, null, null, utcnow, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
#endregion
@@ -2108,8 +2108,8 @@ public void FilterDefinitionDateTimeTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Sam", 45, null, null, utcnow, null)).Should().BeFalse();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Sam", 45, null, null, utcnow, null, null)).Should().BeFalse();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeFalse();
// null value
filterDefinition = new FilterDefinition
@@ -2122,8 +2122,8 @@ public void FilterDefinitionDateTimeTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Sam", 45, null, null, utcnow, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Sam", 45, null, null, utcnow, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
#endregion
@@ -2139,8 +2139,8 @@ public void FilterDefinitionDateTimeTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Sam", 45, null, null, utcnow, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Sam", 45, null, null, utcnow, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeFalse();
// null value
filterDefinition = new FilterDefinition
@@ -2153,8 +2153,8 @@ public void FilterDefinitionDateTimeTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Sam", 45, null, null, utcnow, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Sam", 45, null, null, utcnow, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
#endregion
@@ -2170,8 +2170,8 @@ public void FilterDefinitionDateTimeTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Sam", 45, null, null, utcnow, null)).Should().BeFalse();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Sam", 45, null, null, utcnow, null, null)).Should().BeFalse();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
// null value
filterDefinition = new FilterDefinition
@@ -2184,8 +2184,8 @@ public void FilterDefinitionDateTimeTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Sam", 45, null, null, utcnow, null)).Should().BeFalse();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Sam", 45, null, null, utcnow, null, null)).Should().BeFalse();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
#endregion
@@ -2201,8 +2201,8 @@ public void FilterDefinitionDateTimeTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Sam", 45, null, null, utcnow, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Sam", 45, null, null, utcnow, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeFalse();
// null value
filterDefinition = new FilterDefinition
@@ -2215,8 +2215,8 @@ public void FilterDefinitionDateTimeTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Sam", 45, null, null, utcnow, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Sam", 45, null, null, utcnow, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeFalse();
#endregion
@@ -2231,8 +2231,8 @@ public void FilterDefinitionDateTimeTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Sam", 45, null, null, utcnow, null)).Should().BeTrue();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Sam", 45, null, null, utcnow, null, null)).Should().BeTrue();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
}
[Test]
@@ -2533,9 +2533,9 @@ public void FilterDefinitionNumberTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func.Invoke(new("Sam", 456, null, null, null, null)).Should().BeFalse();
- func.Invoke(new("Sam", null, null, null, null, null)).Should().BeFalse();
- func.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
+ func.Invoke(new("Sam", 456, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Sam", null, null, null, null, null, null)).Should().BeFalse();
+ func.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
// null value
filterDefinition = new FilterDefinition
@@ -2549,9 +2549,9 @@ public void FilterDefinitionNumberTest()
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
// data type is an int
- func2.Invoke(new("Sam", 456, null, null, null, null)).Should().BeTrue();
- func2.Invoke(new("Sam", null, null, null, null, null)).Should().BeTrue();
- func2.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
+ func2.Invoke(new("Sam", 456, null, null, null, null, null)).Should().BeTrue();
+ func2.Invoke(new("Sam", null, null, null, null, null, null)).Should().BeTrue();
+ func2.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
#endregion
@@ -2567,9 +2567,9 @@ public void FilterDefinitionNumberTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func3.Invoke(new("Sam", 456, null, null, null, null)).Should().BeTrue();
- func3.Invoke(new("Sam", null, null, null, null, null)).Should().BeTrue();
- func3.Invoke(new("Joe", 45, null, null, null, null)).Should().BeFalse();
+ func3.Invoke(new("Sam", 456, null, null, null, null, null)).Should().BeTrue();
+ func3.Invoke(new("Sam", null, null, null, null, null, null)).Should().BeTrue();
+ func3.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeFalse();
// null value
filterDefinition = new FilterDefinition
@@ -2582,9 +2582,9 @@ public void FilterDefinitionNumberTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func4.Invoke(new("Sam", 456, null, null, null, null)).Should().BeTrue();
- func4.Invoke(new("Sam", null, null, null, null, null)).Should().BeTrue();
- func4.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
+ func4.Invoke(new("Sam", 456, null, null, null, null, null)).Should().BeTrue();
+ func4.Invoke(new("Sam", null, null, null, null, null, null)).Should().BeTrue();
+ func4.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
#endregion
@@ -2600,9 +2600,9 @@ public void FilterDefinitionNumberTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func5.Invoke(new("Sam", 456, null, null, null, null)).Should().BeTrue();
- func5.Invoke(new("Joe", 45, null, null, null, null)).Should().BeFalse();
- func5.Invoke(new("Joe", null, null, null, null, null)).Should().BeFalse();
+ func5.Invoke(new("Sam", 456, null, null, null, null, null)).Should().BeTrue();
+ func5.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeFalse();
+ func5.Invoke(new("Joe", null, null, null, null, null, null)).Should().BeFalse();
// null value
filterDefinition = new FilterDefinition
@@ -2615,9 +2615,9 @@ public void FilterDefinitionNumberTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func6.Invoke(new("Sam", 456, null, null, null, null)).Should().BeTrue();
- func6.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
- func6.Invoke(new("Joe", null, null, null, null, null)).Should().BeTrue();
+ func6.Invoke(new("Sam", 456, null, null, null, null, null)).Should().BeTrue();
+ func6.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
+ func6.Invoke(new("Joe", null, null, null, null, null, null)).Should().BeTrue();
#endregion
@@ -2633,9 +2633,9 @@ public void FilterDefinitionNumberTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func7.Invoke(new("Sam", 4, null, null, null, null)).Should().BeTrue();
- func7.Invoke(new("Joe", 45, null, null, null, null)).Should().BeFalse();
- func7.Invoke(new("Joe", null, null, null, null, null)).Should().BeFalse();
+ func7.Invoke(new("Sam", 4, null, null, null, null, null)).Should().BeTrue();
+ func7.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeFalse();
+ func7.Invoke(new("Joe", null, null, null, null, null, null)).Should().BeFalse();
// null value
filterDefinition = new FilterDefinition
@@ -2648,9 +2648,9 @@ public void FilterDefinitionNumberTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func8.Invoke(new("Sam", 4, null, null, null, null)).Should().BeTrue();
- func8.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
- func8.Invoke(new("Joe", null, null, null, null, null)).Should().BeTrue();
+ func8.Invoke(new("Sam", 4, null, null, null, null, null)).Should().BeTrue();
+ func8.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
+ func8.Invoke(new("Joe", null, null, null, null, null, null)).Should().BeTrue();
#endregion
@@ -2666,9 +2666,9 @@ public void FilterDefinitionNumberTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func9.Invoke(new("Sam", 4, null, null, null, null)).Should().BeFalse();
- func9.Invoke(new("Sam", null, null, null, null, null)).Should().BeFalse();
- func9.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
+ func9.Invoke(new("Sam", 4, null, null, null, null, null)).Should().BeFalse();
+ func9.Invoke(new("Sam", null, null, null, null, null, null)).Should().BeFalse();
+ func9.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
// null value
filterDefinition = new FilterDefinition
@@ -2681,9 +2681,9 @@ public void FilterDefinitionNumberTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func10.Invoke(new("Sam", 4, null, null, null, null)).Should().BeTrue();
- func10.Invoke(new("Sam", null, null, null, null, null)).Should().BeTrue();
- func10.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
+ func10.Invoke(new("Sam", 4, null, null, null, null, null)).Should().BeTrue();
+ func10.Invoke(new("Sam", null, null, null, null, null, null)).Should().BeTrue();
+ func10.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
#endregion
@@ -2699,9 +2699,9 @@ public void FilterDefinitionNumberTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func11.Invoke(new("Sam", 46, null, null, null, null)).Should().BeFalse();
- func11.Invoke(new("Sam", null, null, null, null, null)).Should().BeFalse();
- func11.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
+ func11.Invoke(new("Sam", 46, null, null, null, null, null)).Should().BeFalse();
+ func11.Invoke(new("Sam", null, null, null, null, null, null)).Should().BeFalse();
+ func11.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
// null value
filterDefinition = new FilterDefinition
@@ -2714,9 +2714,9 @@ public void FilterDefinitionNumberTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func12.Invoke(new("Sam", 46, null, null, null, null)).Should().BeTrue();
- func12.Invoke(new("Sam", null, null, null, null, null)).Should().BeTrue();
- func12.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
+ func12.Invoke(new("Sam", 46, null, null, null, null, null)).Should().BeTrue();
+ func12.Invoke(new("Sam", null, null, null, null, null, null)).Should().BeTrue();
+ func12.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
#endregion
@@ -2731,9 +2731,9 @@ public void FilterDefinitionNumberTest()
{
FilterCaseSensitivity = dataGrid.Instance.FilterCaseSensitivity
});
- func13.Invoke(new("Sam", 456, null, null, null, null)).Should().BeTrue();
- func13.Invoke(new("Sam", null, null, null, null, null)).Should().BeTrue();
- func13.Invoke(new("Joe", 45, null, null, null, null)).Should().BeTrue();
+ func13.Invoke(new("Sam", 456, null, null, null, null, null)).Should().BeTrue();
+ func13.Invoke(new("Sam", null, null, null, null, null, null)).Should().BeTrue();
+ func13.Invoke(new("Joe", 45, null, null, null, null, null)).Should().BeTrue();
}
[Test]
@@ -2898,70 +2898,105 @@ public async Task DataGridFiltersTest()
var dataGrid = comp.FindComponent>();
// test filter definition on the Name property (string contains)
- var filterDefinition = new FilterDefinition
+ var stringFilterDefinition = new FilterDefinition
{
Column = dataGrid.Instance.GetColumnByPropertyName("Name"),
Operator = "contains",
Value = "John"
};
+
// test filter definition on the Age property (int >)
- var filterDefinition2 = new FilterDefinition
+ var intFilterDefinition = new FilterDefinition
{
Column = dataGrid.Instance.GetColumnByPropertyName("Age"),
Operator = ">",
Value = 30
};
+
// test filter definition on the Status property (Enum is)
- var filterDefinition3 = new FilterDefinition
+ var enumFilterDefinition = new FilterDefinition
{
Column = dataGrid.Instance.GetColumnByPropertyName("Status"),
Operator = "is",
Value = Severity.Normal
};
+
// test filter definition on the Hired property (Bool is)
- var filterDefinition4 = new FilterDefinition
+ var boolFilterDefinition = new FilterDefinition
{
Column = dataGrid.Instance.GetColumnByPropertyName("Hired"),
Operator = "is",
Value = true
};
+
+ // test filter definition on the Hired property (Bool null)
+ var boolFilterDefinitionWithNull = new FilterDefinition
+ {
+ Column = dataGrid.Instance.GetColumnByPropertyName("Hired"),
+ Value = null
+ };
+
// test filter definition on the HiredOn property (DateTime is)
- var filterDefinition5 = new FilterDefinition
+ var dateTimeFilterDefinition = new FilterDefinition
{
Column = dataGrid.Instance.GetColumnByPropertyName("HiredOn"),
Operator = "is",
Value = DateTime.UtcNow.Date
};
+
+ // test filter definition on the HiredOn property (DateTime null)
+ var dateTimeFilterDefinitionWithNull = new FilterDefinition
+ {
+ Column = dataGrid.Instance.GetColumnByPropertyName("HiredOn"),
+ Value = null
+ };
+
+ // test filter definition on the StartDate property (DateOnly is)
+ var dateOnlyFilterDefinition = new FilterDefinition
+ {
+ Column = dataGrid.Instance.GetColumnByPropertyName("StartDate"),
+ Operator = "is",
+ Value = new DateOnly(2020, 3, 10)
+ };
+
+ // test filter definition on the StartDate property (DateOnly null)
+ var dateOnlyFilterDefinitionWithNull = new FilterDefinition
+ {
+ Column = dataGrid.Instance.GetColumnByPropertyName("StartDate"),
+ Value = null
+ };
+
// test filter definition on the ApplicationId property (Guid equals)
- var filterDefinition6 = new FilterDefinition
+ var guidFilterDefinition = new FilterDefinition
{
Column = dataGrid.Instance.GetColumnByPropertyName("ApplicationId"),
Operator = "equals",
Value = Guid.NewGuid()
};
- await comp.InvokeAsync(() => dataGrid.Instance.AddFilterAsync(filterDefinition));
- await comp.InvokeAsync(() => dataGrid.Instance.AddFilterAsync(filterDefinition2));
- await comp.InvokeAsync(() => dataGrid.Instance.AddFilterAsync(filterDefinition3));
- await comp.InvokeAsync(() => dataGrid.Instance.AddFilterAsync(filterDefinition4));
- await comp.InvokeAsync(() => dataGrid.Instance.AddFilterAsync(filterDefinition5));
- await comp.InvokeAsync(() => dataGrid.Instance.AddFilterAsync(filterDefinition6));
+ await comp.InvokeAsync(() => dataGrid.Instance.AddFilterAsync(stringFilterDefinition));
+ await comp.InvokeAsync(() => dataGrid.Instance.AddFilterAsync(intFilterDefinition));
+ await comp.InvokeAsync(() => dataGrid.Instance.AddFilterAsync(enumFilterDefinition));
+ await comp.InvokeAsync(() => dataGrid.Instance.AddFilterAsync(boolFilterDefinition));
+ await comp.InvokeAsync(() => dataGrid.Instance.AddFilterAsync(dateTimeFilterDefinition));
+ await comp.InvokeAsync(() => dataGrid.Instance.AddFilterAsync(dateOnlyFilterDefinition));
+ await comp.InvokeAsync(() => dataGrid.Instance.AddFilterAsync(guidFilterDefinition));
await comp.InvokeAsync(() => dataGrid.Instance.OpenFilters());
// check the number of filters displayed in the filters panel
- comp.FindAll(".filters-panel .mud-grid-item.d-flex").Count.Should().Be(6);
+ comp.FindAll(".filters-panel .mud-grid-item.d-flex").Count.Should().Be(7);
// click the Add Filter button in the filters panel to add a filter
comp.FindAll(".filters-panel > button")[0].Click();
// check the number of filters displayed in the filters panel is 1 more because we added a filter
- comp.FindAll(".filters-panel .mud-grid-item.d-flex").Count.Should().Be(7);
+ comp.FindAll(".filters-panel .mud-grid-item.d-flex").Count.Should().Be(8);
// add a filter via the AddFilter method
await comp.InvokeAsync(() => dataGrid.Instance.AddFilter());
// check the number of filters displayed in the filters panel is 1 more because we added a filter
- comp.FindAll(".filters-panel .mud-grid-item.d-flex").Count.Should().Be(8);
+ comp.FindAll(".filters-panel .mud-grid-item.d-flex").Count.Should().Be(9);
// add a filter via the AddFilter method
//await comp.InvokeAsync(() => dataGrid.Instance.AddFilter(Guid.NewGuid(), "Status"));
@@ -2971,47 +3006,124 @@ await comp.InvokeAsync(() => dataGrid.Instance.AddFilterAsync(new FilterDefiniti
}));
// check the number of filters displayed in the filters panel is 1 more because we added a filter
- comp.FindAll(".filters-panel .mud-grid-item.d-flex").Count.Should().Be(9);
+ comp.FindAll(".filters-panel .mud-grid-item.d-flex").Count.Should().Be(10);
// toggle the filters menu (should be closed after this)
await comp.InvokeAsync(() => dataGrid.Instance.ToggleFiltersMenu());
comp.FindAll(".filters-panel").Count.Should().Be(0);
// test internal filter class for string data type.
- var internalFilter = new Filter(dataGrid.Instance, filterDefinition, null);
- filterDefinition.Column.dataType.Should().Be(typeof(string));
+ var internalFilter = new Filter(dataGrid.Instance, stringFilterDefinition, null);
+ stringFilterDefinition.Column.dataType.Should().Be(typeof(string));
await comp.InvokeAsync(() => internalFilter.StringValueChanged("J"));
- filterDefinition.Value.Should().Be("J");
+ stringFilterDefinition.Value.Should().Be("J");
+
// test internal filter class for number data type.
- internalFilter = new Filter(dataGrid.Instance, filterDefinition2, null);
- filterDefinition2.Column.dataType.Should().Be(typeof(int?));
+ internalFilter = new Filter(dataGrid.Instance, intFilterDefinition, null);
+ intFilterDefinition.Column.dataType.Should().Be(typeof(int?));
await comp.InvokeAsync(() => internalFilter.NumberValueChanged(35));
- filterDefinition2.Value.Should().Be(35);
+ intFilterDefinition.Value.Should().Be(35);
+
// test internal filter class for enum data type.
- internalFilter = new Filter(dataGrid.Instance, filterDefinition3, null);
- filterDefinition3.Column.dataType.Should().Be(typeof(Severity?));
- await comp.InvokeAsync(() => internalFilter.NumberValueChanged(35));
- filterDefinition3.Value.Should().Be(35);
- filterDefinition3.FieldType.IsEnum.Should().Be(true);
+ internalFilter = new Filter(dataGrid.Instance, enumFilterDefinition, null);
+ enumFilterDefinition.Column.dataType.Should().Be(typeof(Severity?));
+ await comp.InvokeAsync(() => internalFilter.EnumValueChanged(Severity.Warning));
+ enumFilterDefinition.Value.Should().Be(Severity.Warning);
+ enumFilterDefinition.FieldType.IsEnum.Should().Be(true);
+
// test internal filter class for bool data type.
- internalFilter = new Filter(dataGrid.Instance, filterDefinition4, null);
- filterDefinition4.Column.dataType.Should().Be(typeof(bool?));
+ internalFilter = new Filter(dataGrid.Instance, boolFilterDefinition, null);
+ boolFilterDefinition.Column.dataType.Should().Be(typeof(bool?));
await comp.InvokeAsync(() => internalFilter.BoolValueChanged(false));
- filterDefinition4.Value.Should().Be(false);
- // test internal filter class for datetime data type.
+ boolFilterDefinition.Value.Should().Be(false);
+
+ await comp.InvokeAsync(() => dataGrid.Instance.AddFilterAsync(boolFilterDefinitionWithNull)); // Test adding Bool filter with null value
+ boolFilterDefinitionWithNull.Value.Should().BeNull();
+
+ // test internal filter class for datetime data type
var date = DateTime.UtcNow;
- internalFilter = new Filter(dataGrid.Instance, filterDefinition5, null);
- filterDefinition5.Column.dataType.Should().Be(typeof(DateTime?));
+ internalFilter = new Filter(dataGrid.Instance, dateTimeFilterDefinition, null);
+ dateTimeFilterDefinition.Column.dataType.Should().Be(typeof(DateTime?));
+
await comp.InvokeAsync(() => internalFilter.DateValueChanged(date));
- filterDefinition5.Value.Should().Be(date.Date);
+ dateTimeFilterDefinition.Value.Should().Be(date.Date);
+
await comp.InvokeAsync(() => internalFilter.TimeValueChanged(date.TimeOfDay));
- filterDefinition5.Value.Should().Be(date);
+ dateTimeFilterDefinition.Value.Should().Be(date);
+
+ await comp.InvokeAsync(() => internalFilter.TimeValueChanged(null));
+ dateTimeFilterDefinition.Value.Should().Be(date.Date);
+
+ await comp.InvokeAsync(() => internalFilter.DateValueChanged(null));
+ dateTimeFilterDefinition.Value.Should().BeNull();
+
+ await comp.InvokeAsync(() => dataGrid.Instance.AddFilterAsync(dateTimeFilterDefinitionWithNull)); // Test adding DateTime filter with null value
+ dateTimeFilterDefinitionWithNull.Value.Should().BeNull();
+
+ // test internal filter class for dateonly data type.
+ var dateOnlyDateTimeInput = DateTime.UtcNow;
+ internalFilter = new Filter(dataGrid.Instance, dateOnlyFilterDefinition, null);
+ dateOnlyFilterDefinition.Column.dataType.Should().Be(typeof(DateOnly?));
+
+ await comp.InvokeAsync(() => internalFilter.DateOnlyValueChanged(dateOnlyDateTimeInput));
+ dateOnlyFilterDefinition.Value.Should().Be(DateOnly.FromDateTime(dateOnlyDateTimeInput));
+
+ await comp.InvokeAsync(() => internalFilter.DateOnlyValueChanged(null));
+ dateOnlyFilterDefinition.Value.Should().BeNull();
+
+ await comp.InvokeAsync(() => dataGrid.Instance.AddFilterAsync(dateOnlyFilterDefinitionWithNull)); // Test Adding DateOnly filter with null value
+ dateOnlyFilterDefinitionWithNull.Value.Should().BeNull();
+
// test internal filter class for guid data type.
var guid = Guid.NewGuid();
- internalFilter = new Filter(dataGrid.Instance, filterDefinition6, null);
- filterDefinition6.Column.dataType.Should().Be(typeof(Guid?));
+ internalFilter = new Filter(dataGrid.Instance, guidFilterDefinition, null);
+ guidFilterDefinition.Column.dataType.Should().Be(typeof(Guid?));
await comp.InvokeAsync(() => internalFilter.GuidValueChanged(guid));
- filterDefinition6.Value.Should().Be(guid);
+ guidFilterDefinition.Value.Should().Be(guid);
+ }
+
+ [Test]
+ public async Task DataGridFilterRemoveAsyncTest()
+ {
+ var comp = Context.RenderComponent();
+ var dataGrid = comp.FindComponent>();
+
+ var filterDefinition = new FilterDefinition
+ {
+ Column = dataGrid.Instance.GetColumnByPropertyName("Name"),
+ Operator = "contains",
+ Value = "Test"
+ };
+
+ await comp.InvokeAsync(() => dataGrid.Instance.AddFilterAsync(filterDefinition));
+ comp.WaitForAssertion(() => dataGrid.Instance.FilterDefinitions.Should().Contain(filterDefinition));
+
+ var filter = new Filter(dataGrid.Instance, filterDefinition, null);
+ await comp.InvokeAsync(() => filter.RemoveFilterAsync());
+
+ comp.WaitForAssertion(() => dataGrid.Instance.FilterDefinitions.Should().NotContain(filterDefinition));
+ }
+
+ [Test]
+ public void DataGridFilterFieldChangedTest()
+ {
+ var comp = Context.RenderComponent();
+ var dataGrid = comp.FindComponent>();
+
+ var filterDefinition = new FilterDefinition
+ {
+ Column = dataGrid.Instance.GetColumnByPropertyName("Name")
+ };
+
+ var filter = new Filter(dataGrid.Instance, filterDefinition, null);
+ var newBoolColumn = dataGrid.Instance.GetColumnByPropertyName("Hired");
+
+ filter.FieldChanged(newBoolColumn!);
+
+ filterDefinition.Column.Should().Be(newBoolColumn);
+ filterDefinition.Operator.Should().Be(FilterOperator.Boolean.Is);
+ filterDefinition.Title.Should().Be(newBoolColumn.Title);
+ filterDefinition.Value.Should().BeNull();
}
[Test]
@@ -3858,6 +3970,25 @@ public async Task DataGridServerDataColumnFilterMenuTest()
dataGrid.FindAll(".mud-table-body .mud-table-row").Count.Should().Be(4);
}
+ [Test]
+ public void DataGrid_ColumnFilterMenu_OpensAtCursorPosition()
+ {
+ // https://github.com/MudBlazor/MudBlazor/issues/11518
+ var comp = Context.RenderComponent();
+ var dataGrid = comp.FindComponent>();
+
+ dataGrid.FindAll(".mud-table-body .mud-table-row").Count.Should().Be(4);
+
+ (double Top, double Left) openPosition = (50, 50);
+ var mouseArgs = new MouseEventArgs
+ {
+ PageY = openPosition.Top,
+ PageX = openPosition.Left
+ };
+ comp.Find(".filter-button").Click(mouseArgs);
+ comp.WaitForAssertion(() => dataGrid.Instance._openPosition.Should().Be(openPosition));
+ }
+
[Test]
public async Task DataGridServerDataColumnFilterMenuApplyTwiceTest()
{
@@ -4462,9 +4593,9 @@ public async Task DataGridFilteredItemsCacheTest()
//await comp.InvokeAsync(() => headerCell.Instance.GetDataType());
await comp.InvokeAsync(() => headerCell.Instance.RemoveSortAsync());
dataGrid.Instance.FilteringRunCount.Should().Be(initialFilterCount + 7);
- await comp.InvokeAsync(() => headerCell.Instance.AddFilter());
+ await comp.InvokeAsync(() => headerCell.Instance.AddFilter(new MouseEventArgs()));
dataGrid.Instance.FilteringRunCount.Should().Be(initialFilterCount + 8);
- await comp.InvokeAsync(() => headerCell.Instance.OpenFilters());
+ await comp.InvokeAsync(() => headerCell.Instance.OpenFilters(new MouseEventArgs()));
dataGrid.Instance.FilteringRunCount.Should().Be(initialFilterCount + 9);
await comp.InvokeAsync(() => dataGrid.Instance.SortMode = SortMode.None);
diff --git a/src/MudBlazor.UnitTests/Components/DialogTests.cs b/src/MudBlazor.UnitTests/Components/DialogTests.cs
index 545083f7c278..7e9c16b61ef8 100644
--- a/src/MudBlazor.UnitTests/Components/DialogTests.cs
+++ b/src/MudBlazor.UnitTests/Components/DialogTests.cs
@@ -218,33 +218,6 @@ await ImproveChanceOfSuccess(() =>
});
}
- ///
- /// Based on bug report #3128
- /// Dialog Class and Style parameters should be honored for inline dialog
- ///
- [Test]
- [Obsolete]
- public async Task InlineDialogShouldHonorClassAndStyle()
- {
- var comp = Context.RenderComponent();
- comp.Markup.Trim().Should().BeEmpty();
- var service = Context.Services.GetRequiredService();
- service.Should().NotBe(null);
- IDialogReference dialogReference = null;
- // open simple test dialog
- await comp.InvokeAsync(() => dialogReference = service?.Show());
- comp.WaitForAssertion(() => dialogReference.Should().NotBe(null));
- comp.Find("button").Click();
- comp.WaitForAssertion(() => comp.Find("div.mud-dialog").ClassList.Should().Contain("test-class"));
- comp.Find("div.mud-dialog").Attributes["style"].Value.Should().Be("color: red;");
- comp.Find("div.mud-dialog-content").Attributes["style"].Value.Should().Be("color: blue;");
- comp.Find("div.mud-dialog-content").ClassList.Should().NotContain("test-class");
- comp.Find("div.mud-dialog-content").ClassList.Should().Contain("content-class");
- // check if tag is ok
- var dialogInstance = comp.FindComponent().Instance;
- dialogInstance.Tag.Should().Be("test-tag");
- }
-
///
/// Based on bug report #3701 #3687
/// Dialog inline should not be closed after any event inside
@@ -329,29 +302,6 @@ public async Task DialogShouldNotOverwriteParameters()
textField.Text.Should().Be("new_test");
}
- ///
- /// Based on bug report #1385
- /// Dialog Class and Style parameters should be honored
- ///
- [Test]
- [Obsolete]
- public async Task DialogShouldHonorClassAndStyle()
- {
- var comp = Context.RenderComponent();
- comp.Markup.Trim().Should().BeEmpty();
- var service = Context.Services.GetRequiredService();
- service.Should().NotBe(null);
- IDialogReference dialogReference = null;
- // open simple test dialog
- await comp.InvokeAsync(() => dialogReference = service.Show());
- dialogReference.Should().NotBe(null);
- comp.Find("div.mud-dialog").ClassList.Should().Contain("test-class");
- comp.Find("div.mud-dialog").Attributes["style"].Value.Should().Be("color: red;");
- comp.Find("div.mud-dialog-content").Attributes["style"].Value.Should().Be("color: blue;");
- comp.Find("div.mud-dialog-content").ClassList.Should().NotContain("test-class");
- comp.Find("div.mud-dialog-content").ClassList.Should().Contain("content-class");
- }
-
[Test]
public void PassingEventCallbackToDialogViaParameters()
{
@@ -660,10 +610,10 @@ public async Task AsyncSimpleTest()
///
/// Based on bug report #3128
- /// Dialog Class and Style parameters should be honored for inline dialog
+ /// Dialog Class parameters should be honored for inline dialog
///
[Test]
- public async Task InlineAsyncDialogShouldHonorClassAndStyle()
+ public async Task InlineAsyncDialogShouldHonorClass()
{
var comp = Context.RenderComponent();
comp.Markup.Trim().Should().BeEmpty();
@@ -676,8 +626,6 @@ public async Task InlineAsyncDialogShouldHonorClassAndStyle()
comp.WaitForAssertion(() => dialogReference.Should().NotBe(null));
comp.Find("button").Click();
comp.WaitForAssertion(() => comp.Find("div.mud-dialog").ClassList.Should().Contain("test-class"));
- comp.Find("div.mud-dialog").Attributes["style"].Value.Should().Be("color: red;");
- comp.Find("div.mud-dialog-content").Attributes["style"].Value.Should().Be("color: blue;");
comp.Find("div.mud-dialog-content").ClassList.Should().NotContain("test-class");
comp.Find("div.mud-dialog-content").ClassList.Should().Contain("content-class");
// check if tag is ok
@@ -750,10 +698,10 @@ public async Task AsyncDialogShouldNotOverwriteParameters()
///
/// Based on bug report #1385
- /// Dialog Class and Style parameters should be honored
+ /// Dialog Class parameters should be honored
///
[Test]
- public async Task AsyncDialogShouldHonorClassAndStyle()
+ public async Task AsyncDialogShouldHonorClass()
{
var comp = Context.RenderComponent();
comp.Markup.Trim().Should().BeEmpty();
@@ -765,8 +713,6 @@ public async Task AsyncDialogShouldHonorClassAndStyle()
var dialogReference = await dialogReferenceLazy.Value;
dialogReference.Should().NotBe(null);
comp.Find("div.mud-dialog").ClassList.Should().Contain("test-class");
- comp.Find("div.mud-dialog").Attributes["style"].Value.Should().Be("color: red;");
- comp.Find("div.mud-dialog-content").Attributes["style"].Value.Should().Be("color: blue;");
comp.Find("div.mud-dialog-content").ClassList.Should().NotContain("test-class");
comp.Find("div.mud-dialog-content").ClassList.Should().Contain("content-class");
}
diff --git a/src/MudBlazor.UnitTests/Components/DynamicTabsTests.cs b/src/MudBlazor.UnitTests/Components/DynamicTabsTests.cs
index 6069573b0287..d989700ad7e1 100644
--- a/src/MudBlazor.UnitTests/Components/DynamicTabsTests.cs
+++ b/src/MudBlazor.UnitTests/Components/DynamicTabsTests.cs
@@ -59,7 +59,6 @@ public void BasicParameters()
foreach (var item in closeButtons)
{
- item.GetAttribute("style").Should().Be("propertyA: 4px");
item.ClassList.Should().StartWith(new string[] { "mud-button-root" });
var actual = XElement.Parse($"{item.Children[0].Children[0].InnerHtml}");
@@ -73,7 +72,6 @@ public void BasicParameters()
addButtons.Should().HaveCount(1);
foreach (var item in addButtons)
{
- item.GetAttribute("style").Should().Be("propertyB: 6px");
item.ClassList.Should().StartWith(new string[] { "mud-button-root" });
var actual = XElement.Parse($"{item.Children[0].Children[0].InnerHtml}");
@@ -95,7 +93,6 @@ public async Task BasicParameters_WithToolTips()
foreach (var item in closeButtons)
{
- item.GetAttribute("style").Should().Be("propertyA: 4px");
item.ClassList.Should().StartWith(["mud-button-root"]);
var actual = XElement.Parse($"{item.Children[0].Children[0].InnerHtml}");
@@ -124,7 +121,6 @@ public async Task BasicParameters_WithToolTips()
addButtons.Should().HaveCount(1);
foreach (var item in addButtons)
{
- item.GetAttribute("style").Should().Be("propertyB: 6px");
item.ClassList.Should().StartWith(["mud-button-root"]);
var actual = XElement.Parse($"{item.Children[0].Children[0].InnerHtml}");
diff --git a/src/MudBlazor.UnitTests/Components/SelectTests.cs b/src/MudBlazor.UnitTests/Components/SelectTests.cs
index 5c08a3884050..dbf80844bf33 100644
--- a/src/MudBlazor.UnitTests/Components/SelectTests.cs
+++ b/src/MudBlazor.UnitTests/Components/SelectTests.cs
@@ -1626,6 +1626,7 @@ public void SelectMultiSelectFieldChangedTest()
comp.WaitForAssertion(() => comp.FindAll("div.mud-list-item").Count.Should().BeGreaterThan(0));
comp.Find(".mud-list-item").Click();
+ comp.WaitForAssertion(() => comp.Instance.FormFieldChangedEventArgs.Should().NotBeNull());
comp.Instance.FormFieldChangedEventArgs.NewValue.Should().BeEquivalentTo(comp.Instance.States.Take(2).Reverse());
}
#nullable disable
diff --git a/src/MudBlazor.UnitTests/Components/TabsTests.cs b/src/MudBlazor.UnitTests/Components/TabsTests.cs
index 393ea81ada53..11943a87e228 100644
--- a/src/MudBlazor.UnitTests/Components/TabsTests.cs
+++ b/src/MudBlazor.UnitTests/Components/TabsTests.cs
@@ -96,7 +96,7 @@ public void KeepTabsAliveTest()
comp.FindAll("div.mud-tabs-panels > div")[0].GetAttribute("style").Should().Be("display:none;");
comp.FindAll("div.mud-tabs-panels > div")[1].GetAttribute("style").Should().Be("display:contents;");
comp.FindAll("div.mud-tabs-panels > div")[2].GetAttribute("style").Should().Be("display:none;");
- // click second button twice and show button click counters. the click of the first button should still be evident
+ // click second button twice and show button click counters. the click of the first button should still be evident
comp.FindAll("button")[1].Click();
comp.FindAll("button")[1].Click();
comp.FindAll("button")[0].TrimmedText().Should().Be("Panel 1=1");
@@ -1336,17 +1336,20 @@ public void TabPanel_Hidden_Class(bool visible)
}
}
+#nullable enable
[Test]
- public void TabsDragAndDrop()
+ public void TabsDragAndDrop_With_FiresOnItemDropped()
{
- var comp = Context.RenderComponent();
- var tabs = comp.FindComponent().Instance;
-
- tabs.Should().NotBeNull();
+ bool onItemDroppedCalled = false;
+ MudItemDropInfo? finalDropInfo = null;
- var tab = tabs._panels[0];
- tab.Should().NotBeNull();
- var tabText = tab.Text;
+ var comp = Context.RenderComponent(
+ parameters => parameters.Add(p => p.ItemDroppedFired, (MudItemDropInfo info) =>
+ {
+ onItemDroppedCalled = true;
+ finalDropInfo = info;
+ })
+ );
// should be 3 draggable tabs
var droptabs = comp.FindAll("div[draggable='false']");
@@ -1356,11 +1359,21 @@ public void TabsDragAndDrop()
// should be 1 draggable "drop zone" to allow reordering
var dropzone = comp.FindAll("div.mud-drop-zone");
dropzone.Count.Should().Be(1);
- // simulate dragging a tab? moving tab at index 0 to index 2
- var dropInfo = new MudItemDropInfo(tab, "mud-drop-zone", 2);
+
+ // Find the first draggable tab and the drop zone
+ var tabs = comp.FindComponent().Instance;
+ var draggableTab = tabs._panels[0];
+ var dropZone = comp.Find("div.mud-drop-zone");
+
+ // simulate dragging a tab to index 2
+ var dropInfo = new MudItemDropInfo(draggableTab, "mud-drop-zone", 2);
tabs.ItemUpdated(dropInfo);
- comp.WaitForAssertion(() => tabs._panels[2].Text.Should().Be(tabText));
+
+ // Assert that OnItemDropped was called
+ comp.WaitForAssertion(() => onItemDroppedCalled.Should().BeTrue());
+ finalDropInfo.Should().Be(dropInfo);
}
+#nullable disable
[Test]
public void LabelSorting_NaturalOrderIfSortingUnspecified()
@@ -1462,21 +1475,118 @@ public void LabelSorting_SpecifiedDirectionWithKeysAndDefaultComparer()
}
[Test]
- public void LabelSorting_CustomSortComparer()
+ public void LabelSorting_CustomSortComparerIgnoresSortDirection()
{
/* ***
* All labels should be present and in Tag order, ignoring SortDirection and Keys.
- * For this test the Tabs.SortDirection is set to Descending in markup, and the SortKeys
+ * For this test the Tabs.SortDirection is set to Descending, and the SortKeys
+ * are set to Apple=3, Banana=2, Cherry=1, so there is no combination of SortKey, Label
+ * or SortDirection that could ellicit the same sort order as we get from TestComparer.
+ */
+ var comp = Context.RenderComponent(
+ ComponentParameter.CreateParameter("SortComparer", new LabelSortTest.TestComparer()),
+ ComponentParameter.CreateParameter("SortDirection", SortDirection.Descending)
+ );
+ comp.FindAll("div.mud-tabs-tabbar-wrapper div.mud-tab").Count.Should().Be(3);
+ comp.FindAll("div.mud-tabs-tabbar-wrapper div.mud-tab")[0].InnerHtml.Should().Be("Cherry");
+ comp.FindAll("div.mud-tabs-tabbar-wrapper div.mud-tab")[1].InnerHtml.Should().Be("Apple");
+ comp.FindAll("div.mud-tabs-tabbar-wrapper div.mud-tab")[2].InnerHtml.Should().Be("Banana");
+ }
+
+ [Test]
+ public void LabelSorting_CustomSortComparerWorksWithoutSortDirection()
+ {
+ /* ***
+ * All labels should be present and in Tag order, SortDirection and Keys are unspecified.
+ * For this test the Tabs.SortDirection is left unset, and the SortKeys
* are set to Apple=3, Banana=2, Cherry=1, so there is no combination of SortKey, Label
* or SortDirection that could ellicit the same sort order as we get from TestComparer.
*/
var comp = Context.RenderComponent(
- ComponentParameter.CreateParameter("SortComparer", new LabelSortTest.TestComparer())
+ ComponentParameter.CreateParameter("SortComparer", new LabelSortTest.TestComparer()),
+ ComponentParameter.CreateParameter("SortDirection", null)
);
comp.FindAll("div.mud-tabs-tabbar-wrapper div.mud-tab").Count.Should().Be(3);
comp.FindAll("div.mud-tabs-tabbar-wrapper div.mud-tab")[0].InnerHtml.Should().Be("Cherry");
comp.FindAll("div.mud-tabs-tabbar-wrapper div.mud-tab")[1].InnerHtml.Should().Be("Apple");
comp.FindAll("div.mud-tabs-tabbar-wrapper div.mud-tab")[2].InnerHtml.Should().Be("Banana");
}
+
+ [Test]
+ public void Tab_DragAndDrop_ActiveIndexShouldNotChangeDisplay()
+ {
+ // defaulting the ActiveIndex to something other than 0 caused a display issue where it tried to make
+ // that tab the FIRST tab putting any leading tabs underneath an arrow to "go left" (or right if rtl)
+ // https://github.com/MudBlazor/MudBlazor/issues/11519
+ var comp = Context.RenderComponent();
+ var divs = comp.FindAll("div.mud-tabs-tabbar-wrapper div.mud-tab");
+ // no drop container
+ comp.FindAll("div.mud-drop-container").Count().Should().Be(0);
+ // all tabs should show
+ divs.Count.Should().Be(4);
+ divs[0].InnerHtml.Should().Be("One");
+ divs[1].InnerHtml.Should().Be("Two");
+ divs[2].InnerHtml.Should().Be("Three");
+ divs[3].InnerHtml.Should().Be("Four");
+ // no scroll bar should show
+ comp.FindAll(".mud-tabs-scroll-button").Should().BeEmpty();
+ // enable drag and drop
+ var cbox = comp.Find("div.drag-drop-class input");
+ cbox.Change(true);
+ comp.SetParametersAndRender();
+ // drop container
+ comp.WaitForAssertion(() => comp.FindAll("div.mud-drop-container").Count.Should().Be(1));
+ divs = comp.FindAll("div.mud-tabs-tabbar-wrapper div.mud-tab");
+ // all tabs should show
+ divs.Count.Should().Be(4);
+ divs[0].InnerHtml.Should().Be("One");
+ divs[1].InnerHtml.Should().Be("Two");
+ divs[2].InnerHtml.Should().Be("Three");
+ divs[3].InnerHtml.Should().Be("Four");
+ }
+
+ [Test]
+ public void Tab_DragAndDrop_ActivatePanel()
+ {
+ // ensures that the active tab class and custom class is updated when the index is updated regardless
+ // of drag and drop. When enabled Drag and Drop was not properly updating state when a new item was clicked.
+ // This was a bug caused by the Drag and Drop feature not updating it's display and fixed by creating a ref
+ // and calling .Refresh() on ActivatePanel (clicking, drag and drop, etc). Basically the changes were too deep
+ // for blazor to know it should update state
+ // https://github.com/MudBlazor/MudBlazor/issues/11549
+ var comp = Context.RenderComponent();
+ var divs = comp.FindAll("div.mud-tabs-tabbar-wrapper div.mud-tab");
+ // no drop container
+ comp.FindAll("div.mud-drop-container").Count().Should().Be(0);
+ // all tabs should show
+ divs.Count.Should().Be(4);
+ divs[0].InnerHtml.Should().Be("One");
+ divs[1].InnerHtml.Should().Be("Two");
+ divs[2].InnerHtml.Should().Be("Three");
+ divs[3].InnerHtml.Should().Be("Four");
+ // no scroll bar should show
+ comp.FindAll(".mud-tabs-scroll-button").Should().BeEmpty();
+ // clicking a tab should activate it and update the class
+ divs[2].Click(); // activate Three
+ divs = comp.FindAll("div.mud-tabs-tabbar-wrapper div.mud-tab");
+ comp.WaitForAssertion(() => divs[2].ClassList.Contains("mud-tab-active").Should().BeTrue());
+ // enable drag and drop
+ var cbox = comp.Find("div.drag-drop-class input");
+ cbox.Change(true);
+ comp.SetParametersAndRender(p => p.Add(p => p.ActiveTabClass, "test-active"));
+ // drop container
+ comp.WaitForAssertion(() => comp.FindAll("div.mud-drop-container").Count.Should().Be(1));
+ divs = comp.FindAll("div.mud-tabs-tabbar-wrapper div.mud-tab");
+ // all tabs should show
+ divs.Count.Should().Be(4);
+ divs[0].InnerHtml.Should().Be("One");
+ divs[1].InnerHtml.Should().Be("Two");
+ divs[2].InnerHtml.Should().Be("Three");
+ divs[3].InnerHtml.Should().Be("Four");
+ divs[3].Click();
+ divs = comp.FindAll("div.mud-tabs-tabbar-wrapper div.mud-tab");
+ comp.WaitForAssertion(() => divs[3].ClassList.Contains("mud-tab-active").Should().BeTrue());
+ comp.WaitForAssertion(() => divs[3].ClassList.Contains("test-active").Should().BeTrue());
+ }
}
}
diff --git a/src/MudBlazor/Components/DataGrid/Filter.cs b/src/MudBlazor/Components/DataGrid/Filter.cs
index 60acf694f4ab..730bf1571175 100644
--- a/src/MudBlazor/Components/DataGrid/Filter.cs
+++ b/src/MudBlazor/Components/DataGrid/Filter.cs
@@ -20,7 +20,8 @@ internal class Filter<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes
internal double? _valueNumber;
internal Enum? _valueEnum;
internal bool? _valueBool;
- internal DateTime? _valueDate;
+ internal DateTime? _valueDateOnlyForPicker;
+ internal DateTime? _valueDateTimeForPicker;
internal TimeSpan? _valueTime;
internal Guid? _valueGuid;
@@ -46,9 +47,13 @@ public Filter(MudDataGrid dataGrid, IFilterDefinition filterDefinition, Co
else if (fieldType.IsDateTime)
{
var dateTime = Convert.ToDateTime(_filterDefinition.Value);
- _valueDate = _filterDefinition.Value == null ? null : dateTime;
+ _valueDateTimeForPicker = _filterDefinition.Value == null ? null : dateTime;
_valueTime = _filterDefinition.Value == null ? null : dateTime.TimeOfDay;
}
+ else if (fieldType.IsDateOnly)
+ {
+ _valueDateOnlyForPicker = ((DateOnly?)_filterDefinition.Value)?.ToDateTime(TimeOnly.MinValue);
+ }
else if (fieldType.IsGuid)
_valueGuid = _filterDefinition.Value as Guid?;
}
@@ -97,7 +102,7 @@ internal void BoolValueChanged(bool? value)
internal void DateValueChanged(DateTime? value)
{
- _valueDate = value;
+ _valueDateTimeForPicker = value;
if (value is not null)
{
@@ -121,9 +126,9 @@ internal void TimeValueChanged(TimeSpan? value)
{
_valueTime = value;
- if (_valueDate is not null)
+ if (_valueDateTimeForPicker is not null)
{
- var date = _valueDate.Value.Date;
+ var date = _valueDateTimeForPicker.Value.Date;
// get the time component and add it to the date.
if (_valueTime is not null)
@@ -137,6 +142,20 @@ internal void TimeValueChanged(TimeSpan? value)
_dataGrid.GroupItems();
}
+ internal void DateOnlyValueChanged(DateTime? value)
+ {
+ _valueDateOnlyForPicker = value;
+
+ if (value is not null)
+ {
+ _filterDefinition.Value = DateOnly.FromDateTime(value.Value);
+ }
+ else
+ _filterDefinition.Value = null;
+
+ _dataGrid.GroupItems();
+ }
+
internal void GuidValueChanged(Guid? value)
{
_valueGuid = value;
diff --git a/src/MudBlazor/Components/DataGrid/HeaderCell.razor.cs b/src/MudBlazor/Components/DataGrid/HeaderCell.razor.cs
index 9d392712cd61..ef23cc8ee613 100644
--- a/src/MudBlazor/Components/DataGrid/HeaderCell.razor.cs
+++ b/src/MudBlazor/Components/DataGrid/HeaderCell.razor.cs
@@ -403,7 +403,7 @@ internal async Task RemoveSortAsync()
DataGrid.DropContainerHasChanged();
}
- internal void AddFilter(MouseEventArgs args = null)
+ internal void AddFilter(MouseEventArgs args)
{
var filterDefinition = Column?.FilterContext.FilterDefinition;
if (DataGrid.FilterMode == DataGridFilterMode.Simple && filterDefinition != null)
@@ -412,38 +412,31 @@ internal void AddFilter(MouseEventArgs args = null)
{
DataGrid.FilterDefinitions.Add(filterDefinition.Clone());
}
- if (args != null)
- {
- DataGrid._openPosition.Top = args.PageY;
- DataGrid._openPosition.Left = args.PageX;
- }
+ DataGrid._openPosition.Top = args.PageY;
+ DataGrid._openPosition.Left = args.PageX;
DataGrid.OpenFilters();
}
else if (DataGrid.FilterMode == DataGridFilterMode.ColumnFilterMenu)
{
+ DataGrid._openPosition.Top = args.PageY;
+ DataGrid._openPosition.Left = args.PageX;
_filtersMenuVisible = true;
DataGrid.DropContainerHasChanged();
}
}
- internal void OpenFilters(MouseEventArgs args = null)
+ internal void OpenFilters(MouseEventArgs args)
{
if (DataGrid.FilterMode == DataGridFilterMode.Simple)
{
- if (args != null)
- {
- DataGrid._openPosition.Top = args.PageY;
- DataGrid._openPosition.Left = args.PageX;
- }
+ DataGrid._openPosition.Top = args.PageY;
+ DataGrid._openPosition.Left = args.PageX;
DataGrid.OpenFilters();
}
else if (DataGrid.FilterMode == DataGridFilterMode.ColumnFilterMenu)
{
- if (args != null)
- {
- DataGrid._openPosition.Top = args.PageY;
- DataGrid._openPosition.Left = args.PageX;
- }
+ DataGrid._openPosition.Top = args.PageY;
+ DataGrid._openPosition.Left = args.PageX;
_filtersMenuVisible = true;
DataGrid.DropContainerHasChanged();
}
diff --git a/src/MudBlazor/Components/DataGrid/MudDataGrid.razor b/src/MudBlazor/Components/DataGrid/MudDataGrid.razor
index 58678aaa714c..1f7d8ed79dce 100644
--- a/src/MudBlazor/Components/DataGrid/MudDataGrid.razor
+++ b/src/MudBlazor/Components/DataGrid/MudDataGrid.razor
@@ -154,11 +154,11 @@
@if (context.HeaderCell.hasFilter)
{
-
+
}
else
{
-
+
}
@if (ColumnsPanelReordering)
@@ -485,11 +485,15 @@
@Localizer[LanguageResource.MudDataGrid_False]
}
+ else if (fieldType.IsDateOnly && !(filterDefinition.Operator ?? "").EndsWith("empty"))
+ {
+
+ }
else if (fieldType.IsDateTime && !(filterDefinition.Operator ?? "").EndsWith("empty"))
{
-
+
@@ -547,11 +551,15 @@
@Localizer[LanguageResource.MudDataGrid_False]
}
+ else if (fieldType.IsDateOnly && !(filterDefinition.Operator ?? "").EndsWith("empty"))
+ {
+
+ }
else if (fieldType.IsDateTime && !(filterDefinition.Operator ?? "").EndsWith("empty"))
{
-
+
diff --git a/src/MudBlazor/Components/DataGrid/MudDataGrid.razor.cs b/src/MudBlazor/Components/DataGrid/MudDataGrid.razor.cs
index 7ffd277efd98..8b4fe95d83c4 100644
--- a/src/MudBlazor/Components/DataGrid/MudDataGrid.razor.cs
+++ b/src/MudBlazor/Components/DataGrid/MudDataGrid.razor.cs
@@ -1102,13 +1102,15 @@ public bool Groupable
#endregion
///
- /// Allows a sort direction of in addition to and .
+ /// Determines whether an unsorted state () is allowed when toggling sort directions.
///
///
- /// Defaults to true. When false, the sort mode will only toggle between and .
+ /// Defaults to false. When false, the sort direction toggles only between
+ /// and .
+ /// When true, a third toggle state, , is included.
///
[Parameter]
- public bool AllowUnsorted { get; set; } = true;
+ public bool AllowUnsorted { get; set; } = false;
#region Properties
diff --git a/src/MudBlazor/Components/FocusTrap/MudFocusTrap.razor.cs b/src/MudBlazor/Components/FocusTrap/MudFocusTrap.razor.cs
index a5343ce18a94..04edc0cc7f0a 100644
--- a/src/MudBlazor/Components/FocusTrap/MudFocusTrap.razor.cs
+++ b/src/MudBlazor/Components/FocusTrap/MudFocusTrap.razor.cs
@@ -18,6 +18,7 @@ public partial class MudFocusTrap : IDisposable
{
private bool _shiftDown;
private bool _disabled;
+ private bool _disposed;
private bool _initialized;
private bool _shouldRender = true;
@@ -76,6 +77,7 @@ protected override async Task OnAfterRenderAsync(bool firstRender)
{
await base.OnAfterRenderAsync(firstRender);
+ if (_disposed) return;
if (firstRender)
{
await SaveFocusAsync();
@@ -184,6 +186,7 @@ protected override bool ShouldRender()
///
public void Dispose()
{
+ _disposed = true;
if (!_disabled)
{
RestoreFocusAsync().CatchAndLog(ignoreExceptions: true);
diff --git a/src/MudBlazor/Components/Overlay/MudOverlay.razor.cs b/src/MudBlazor/Components/Overlay/MudOverlay.razor.cs
index 9e63db1c21bf..2b3c176a1783 100644
--- a/src/MudBlazor/Components/Overlay/MudOverlay.razor.cs
+++ b/src/MudBlazor/Components/Overlay/MudOverlay.razor.cs
@@ -12,7 +12,7 @@ namespace MudBlazor;
#nullable enable
///
-/// A layer which darkens a window, often as part of showing a .
+/// A layer that can be used for various purposes such as displaying loading indicators, modals, or blocking user interaction with underlying content.
///
public partial class MudOverlay : MudComponentBase, IPointerEventsNoneObserver, IAsyncDisposable
{
diff --git a/src/MudBlazor/Components/Stepper/MudStep.cs b/src/MudBlazor/Components/Stepper/MudStep.cs
index cd74edc76230..0234f00a0f50 100644
--- a/src/MudBlazor/Components/Stepper/MudStep.cs
+++ b/src/MudBlazor/Components/Stepper/MudStep.cs
@@ -35,7 +35,6 @@ public MudStep()
internal ParameterState HasErrorState { get; private set; }
internal string Styles => new StyleBuilder()
- .AddStyle(Parent?.StepStyle)
.AddStyle(Style)
.Build();
@@ -56,7 +55,8 @@ public MudStep()
.AddClass($"mud-{(ErrorStepColor.HasValue ? ErrorStepColor.Value.ToDescriptionString() : Parent?.ErrorStepColor.ToDescriptionString())}-text", HasErrorState)
.Build();
- internal string Classname => new CssBuilder(Parent?.StepClassname)
+ internal string Classname => new CssBuilder()
+ .AddClass(Parent?.StepClassname)
.AddClass(Class)
.Build();
diff --git a/src/MudBlazor/Components/Stepper/MudStepper.razor b/src/MudBlazor/Components/Stepper/MudStepper.razor
index 03b908b09b04..197a09231de6 100644
--- a/src/MudBlazor/Components/Stepper/MudStepper.razor
+++ b/src/MudBlazor/Components/Stepper/MudStepper.razor
@@ -1,4 +1,4 @@
-@namespace MudBlazor
+@namespace MudBlazor
@using MudBlazor.Resources
@using MudBlazor.Utilities
@inherits MudComponentBase
@@ -47,7 +47,7 @@
@if (IsCompleted && CompletedContent is not null)
{
-
+
@CompletedContent
}
diff --git a/src/MudBlazor/Components/Stepper/MudStepper.razor.cs b/src/MudBlazor/Components/Stepper/MudStepper.razor.cs
index 1f6687f0d6e9..5abed217ae2a 100644
--- a/src/MudBlazor/Components/Stepper/MudStepper.razor.cs
+++ b/src/MudBlazor/Components/Stepper/MudStepper.razor.cs
@@ -218,16 +218,6 @@ public MudStepper()
[Category(CategoryTypes.List.Appearance)]
public string? StepClass { get; set; }
- ///
- /// The CSS styles applied to all steps.
- ///
- ///
- /// Defaults to null.
- ///
- [Parameter]
- [Category(CategoryTypes.List.Appearance)]
- public string? StepStyle { get; set; }
-
///
/// Centers the labels for each step below the circle.
///
diff --git a/src/MudBlazor/Components/Tabs/MudTabPanel.razor.cs b/src/MudBlazor/Components/Tabs/MudTabPanel.razor.cs
index f8269f98d460..815c5e295d08 100644
--- a/src/MudBlazor/Components/Tabs/MudTabPanel.razor.cs
+++ b/src/MudBlazor/Components/Tabs/MudTabPanel.razor.cs
@@ -15,7 +15,7 @@ namespace MudBlazor;
///
public partial class MudTabPanel
{
- private Boolean _disposed;
+ private bool _disposed;
protected string Stylename =>
new StyleBuilder()
diff --git a/src/MudBlazor/Components/Tabs/MudTabs.razor b/src/MudBlazor/Components/Tabs/MudTabs.razor
index d5e7b0a13c1d..6ee606e1c5c6 100644
--- a/src/MudBlazor/Components/Tabs/MudTabs.razor
+++ b/src/MudBlazor/Components/Tabs/MudTabs.razor
@@ -21,7 +21,7 @@
@if (EnableDragAndDrop)
{
-
@@ -34,7 +34,7 @@
@RenderTab(context)
-
+
}
else
{
@@ -100,7 +100,7 @@
}
;
- RenderFragment RenderTab(MudTabPanel panel) => @
ActivatePanel(panel, e, false) )>
+ RenderFragment RenderTab(MudTabPanel panel) => @
ActivatePanel(panel, e, false) )">
@if (TabPanelHeaderPosition == TabHeaderPosition.Before && TabPanelHeader != null)
{