diff --git a/examples/Demo/Shared/Pages/Lab/IssueTester.razor b/examples/Demo/Shared/Pages/Lab/IssueTester.razor index 2589c2a7da..0e8d03c85c 100644 --- a/examples/Demo/Shared/Pages/Lab/IssueTester.razor +++ b/examples/Demo/Shared/Pages/Lab/IssueTester.razor @@ -1,46 +1 @@ @page "/issue-tester" -@using System.ComponentModel.DataAnnotations - - - - - - - - -@code { - - public enum Positions - { - employee, - [Display(Name = "HR Manager (DA)")] - HrManager, - [Display(Name = "Project Manager (DA)")] - ProjectManager, - [Display(Name = "Administrator (DA)")] - Administrator - } - - public class Employee - { - [Display(Name = "Id")] - public int Id { get; set; } - [Required, Display(Name = "Full Name")] - public string FullName { get; set; } - [Required, Display(Name = "Subdivision")] - public string Subdivision { get; set; } - [Required, Display(Name = "Position")] - public Positions Position { get; set; } - - } - - private List employees = new List - { - new Employee { Id = 1, FullName = "John Doe", Subdivision = "IT", Position = Positions.employee }, - new Employee { Id = 2, FullName = "Jane Doe", Subdivision = "HR", Position = Positions.HrManager }, - new Employee { Id = 3, FullName = "John Smith", Subdivision = "IT", Position = Positions.ProjectManager }, - new Employee { Id = 4, FullName = "Jane Smith", Subdivision = "HR", Position = Positions.Administrator } - }; - - -} diff --git a/src/Core/Components/List/FluentCombobox.razor b/src/Core/Components/List/FluentCombobox.razor index 86e8aceb11..3d6d90297a 100644 --- a/src/Core/Components/List/FluentCombobox.razor +++ b/src/Core/Components/List/FluentCombobox.razor @@ -22,6 +22,7 @@ required="@Required" @onchange="@ChangeHandlerAsync" autofocus="@Autofocus" + name="@Name" @attributes="AdditionalAttributes"> @_renderOptions diff --git a/src/Core/Components/List/FluentListbox.razor b/src/Core/Components/List/FluentListbox.razor index 639b317798..0a7d6ecee6 100644 --- a/src/Core/Components/List/FluentListbox.razor +++ b/src/Core/Components/List/FluentListbox.razor @@ -18,6 +18,7 @@ size="@Size" multiple="@Multiple" required="@Required" + name="@Name" selectedOptions="@(SelectedOptions != null && SelectedOptions.Any() ? string.Join(',', SelectedOptions.Select(i => GetOptionValue(i))) : null)" @onchange="@ChangeHandlerAsync" @onkeydown="@OnKeydownHandlerAsync" diff --git a/src/Core/Components/List/FluentSelect.razor b/src/Core/Components/List/FluentSelect.razor index 653d2d95ee..3ec4f2187e 100644 --- a/src/Core/Components/List/FluentSelect.razor +++ b/src/Core/Components/List/FluentSelect.razor @@ -15,6 +15,7 @@ appearance="@Appearance.ToAttributeValue()" current-value="@Value" required="@Required" + name="@Name" @onchange="@ChangeHandlerAsync" @onkeydown="@OnKeydownHandlerAsync" @attributes="AdditionalAttributes"> diff --git a/tests/Core/List/FluentAutocompleteTests.FluentAutocomplete_Name.verified.razor.html b/tests/Core/List/FluentAutocompleteTests.FluentAutocomplete_Name.verified.razor.html new file mode 100644 index 0000000000..9ea7d9ff3e --- /dev/null +++ b/tests/Core/List/FluentAutocompleteTests.FluentAutocomplete_Name.verified.razor.html @@ -0,0 +1,9 @@ + +
+ +
\ No newline at end of file diff --git a/tests/Core/List/FluentAutocompleteTests.razor b/tests/Core/List/FluentAutocompleteTests.razor index bf2733fccc..013d1277b9 100644 --- a/tests/Core/List/FluentAutocompleteTests.razor +++ b/tests/Core/List/FluentAutocompleteTests.razor @@ -18,10 +18,10 @@ { // Arrange var cut = RenderComponent>(parameters => - { - parameters.Add(p => p.Id, "myComponent"); - parameters.Add(p => p.Items, Customers.Get()); - }); + { + parameters.Add(p => p.Id, "myComponent"); + parameters.Add(p => p.Items, Customers.Get()); + }); // Assert cut.Verify(); @@ -32,11 +32,11 @@ { // Arrange var cut = RenderComponent>(parameters => - { - parameters.Add(p => p.Id, "myComponent"); - parameters.Add(p => p.Items, Customers.Get()); - parameters.Add(p => p.Width, string.Empty); - }); + { + parameters.Add(p => p.Id, "myComponent"); + parameters.Add(p => p.Items, Customers.Get()); + parameters.Add(p => p.Width, string.Empty); + }); // Assert Assert.Contains("width: 250px", cut.Markup); @@ -48,10 +48,10 @@ { // Arrange var cut = RenderComponent>(parameters => - { - parameters.Add(p => p.Id, "myComponent"); - parameters.Add(p => p.Items, Customers.Get()); - }); + { + parameters.Add(p => p.Id, "myComponent"); + parameters.Add(p => p.Items, Customers.Get()); + }); // Act cut.Find("fluent-text-field").Click(); @@ -78,11 +78,11 @@ // Arrange var cut = RenderComponent>(parameters => - { - parameters.Add(p => p.Id, "myComponent"); - parameters.Add(p => p.Items, Customers.Get()); - parameters.Add(p => p.SelectedOptions, Customers.Get().Take(2)); - }); + { + parameters.Add(p => p.Id, "myComponent"); + parameters.Add(p => p.Items, Customers.Get()); + parameters.Add(p => p.SelectedOptions, Customers.Get().Take(2)); + }); // Act var input = cut.Find("fluent-text-field"); @@ -106,7 +106,7 @@ SelectValueOnTab="true" @bind-SelectedOptions="@SelectedItems" OnOptionsSearch="@OnSearchAsync" /> - ); + ); // Act: click to open -> Tab to select var input = cut.Find("fluent-text-field"); @@ -124,13 +124,13 @@ { // Arrange & Act var ex = Assert.Throws(() => - { - var cut = RenderComponent>(parameters => + { + var cut = RenderComponent>(parameters => { parameters.Add(p => p.Id, "myComponent"); parameters.Add(p => p.Multiple, false); }); - }); + }); // Assert Assert.Equal("For FluentAutocomplete, this property must be True. Set the MaximumSelectedOptions property to 1 to select just one item.", ex.InnerException?.Message); @@ -141,30 +141,30 @@ { // Arrange var cut = RenderComponent>(parameters => - { - parameters.Add(p => p.Id, "myComponent"); - parameters.Add(p => p.OptionValue, context => context.Id.ToString()); + { + parameters.Add(p => p.Id, "myComponent"); + parameters.Add(p => p.OptionValue, context => context.Id.ToString()); - // Add a HeaderContent template - parameters.Add(p => p.HeaderContent, context => + // Add a HeaderContent template + parameters.Add(p => p.HeaderContent, context => { return $"
Please, select an item
"; }); - // Add an Item template - parameters.Add(p => p.OptionTemplate, context => + // Add an Item template + parameters.Add(p => p.OptionTemplate, context => { return $"
{context?.Id} {context?.Name}
"; }); - // Add a FooterContent template - parameters.Add(p => p.FooterContent, context => + // Add a FooterContent template + parameters.Add(p => p.FooterContent, context => { return $"
{context.Count()} items found
"; }); - parameters.Add(p => p.Items, Customers.Get()); - }); + parameters.Add(p => p.Items, Customers.Get()); + }); // Act cut.Find("fluent-text-field").Click(); @@ -178,13 +178,13 @@ { // Arrange var cut = RenderComponent>(parameters => - { - parameters.Add(p => p.Id, "myComponent"); - parameters.Add(p => p.OptionValue, context => context.Id.ToString()); - parameters.Add(p => p.OptionText, context => context.Name); - parameters.Add(p => p.Items, Customers.Get()); - parameters.Add(p => p.SelectedOptions, Customers.Get().Take(2)); - }); + { + parameters.Add(p => p.Id, "myComponent"); + parameters.Add(p => p.OptionValue, context => context.Id.ToString()); + parameters.Add(p => p.OptionText, context => context.Name); + parameters.Add(p => p.Items, Customers.Get()); + parameters.Add(p => p.SelectedOptions, Customers.Get().Take(2)); + }); // Act cut.Find("fluent-text-field").Click(); @@ -198,19 +198,19 @@ { // Arrange var cut = RenderComponent>(parameters => - { - parameters.Add(p => p.Id, "myComponent"); - parameters.Add(p => p.OptionValue, context => context.Id.ToString()); - parameters.Add(p => p.OptionText, context => context.Name); - parameters.Add(p => p.Items, Customers.Get()); - parameters.Add(p => p.SelectedOptions, Customers.Get().Take(2)); + { + parameters.Add(p => p.Id, "myComponent"); + parameters.Add(p => p.OptionValue, context => context.Id.ToString()); + parameters.Add(p => p.OptionText, context => context.Name); + parameters.Add(p => p.Items, Customers.Get()); + parameters.Add(p => p.SelectedOptions, Customers.Get().Take(2)); - // Add an Item template - parameters.Add(p => p.OptionTemplate, context => + // Add an Item template + parameters.Add(p => p.OptionTemplate, context => { return $"
{context?.Id} {context?.Name}
"; }); - }); + }); // Act cut.Find("fluent-text-field").Click(); @@ -224,13 +224,13 @@ { // Arrange var cut = RenderComponent>(parameters => - { - parameters.Add(p => p.Id, "myComponent"); - parameters.Add(p => p.OptionValue, context => context.Id.ToString()); - parameters.Add(p => p.OptionText, context => context.Name); - parameters.Add(p => p.Items, Customers.Get()); - parameters.Add(p => p.SelectedOptions, Customers.Get().Take(2)); - }); + { + parameters.Add(p => p.Id, "myComponent"); + parameters.Add(p => p.OptionValue, context => context.Id.ToString()); + parameters.Add(p => p.OptionText, context => context.Name); + parameters.Add(p => p.Items, Customers.Get()); + parameters.Add(p => p.SelectedOptions, Customers.Get().Take(2)); + }); // Act (click on the Dismiss button) // The first SelectedOption is removed @@ -245,10 +245,10 @@ { // Arrange & Act var cut = RenderComponent>(parameters => - { - parameters.Add(p => p.Id, "myComponent"); - parameters.Add(p => p.ValueText, "Preselected value"); - }); + { + parameters.Add(p => p.Id, "myComponent"); + parameters.Add(p => p.ValueText, "Preselected value"); + }); // Assert var textField = cut.Find("fluent-text-field"); @@ -271,10 +271,10 @@ // Arrange var valueText = "Preselected value"; var cut = RenderComponent>(parameters => - { - parameters.Add(p => p.Id, "myComponent"); - parameters.Bind(p => p.ValueText, valueText, x => valueText = x); - }); + { + parameters.Add(p => p.Id, "myComponent"); + parameters.Bind(p => p.ValueText, valueText, x => valueText = x); + }); valueText.Should().NotBeNullOrEmpty(); @@ -292,10 +292,10 @@ { // Arrange var cut = RenderComponent>(parameters => - { - parameters.Add(p => p.Id, "myComponent"); - parameters.Add(p => p.ValueText, "Some text here"); - }); + { + parameters.Add(p => p.Id, "myComponent"); + parameters.Add(p => p.ValueText, "Some text here"); + }); // Act cut.Find("svg").Click(); // Clear button @@ -310,11 +310,11 @@ { // Arrange var cut = RenderComponent>(parameters => - { - parameters.Add(p => p.Id, "myComponent"); - parameters.Add(p => p.ValueText, "Some text here"); - parameters.Add(p => p.ShowOverlayOnEmptyResults, false); - }); + { + parameters.Add(p => p.Id, "myComponent"); + parameters.Add(p => p.ValueText, "Some text here"); + parameters.Add(p => p.ShowOverlayOnEmptyResults, false); + }); // Act cut.Find("svg").Click(); // Clear button @@ -329,10 +329,10 @@ { // Arrange && Act var cut = RenderComponent>(parameters => - { - parameters.Add(p => p.Id, "myComponent"); - parameters.Add(p => p.Autofocus, true); - }); + { + parameters.Add(p => p.Id, "myComponent"); + parameters.Add(p => p.Autofocus, true); + }); // Assert cut.Verify(); @@ -343,11 +343,11 @@ { // Arrange var cut = RenderComponent>(parameters => - { - parameters.Add(p => p.Id, "myComponent"); - parameters.Add(p => p.MaxAutoHeight, "200px"); - parameters.Add(p => p.SelectedOptions, Customers.Get().Take(2)); - }); + { + parameters.Add(p => p.Id, "myComponent"); + parameters.Add(p => p.MaxAutoHeight, "200px"); + parameters.Add(p => p.SelectedOptions, Customers.Get().Take(2)); + }); // Act cut.Find("fluent-text-field").Click(); @@ -370,7 +370,7 @@ SelectValueOnTab="true" @bind-SelectedOptions="@SelectedItems" OnOptionsSearch="@OnSearchAsync" /> - ); + ); // Act: click to open -> KeyDow + Enter to select var input = cut.Find("fluent-text-field"); @@ -412,6 +412,21 @@ Assert.Equal(2, SelectedItems.First().Id); } + [Fact] + public void FluentAutocomplete_Name() + { + // Arrange + var cut = RenderComponent>(parameters => + { + parameters.Add(p => p.Id, "myComponent"); + parameters.Add(p => p.Name, "myName"); + parameters.Add(p => p.Items, Customers.Get()); + }); + + // Assert + cut.Verify(); + } + // Send a key code private async Task PressKeyAsync(IRenderedComponent> cut, KeyCode key, bool popoverOpened = false) { diff --git a/tests/Core/List/FluentComboboxTests.FluentCombobox_NameAttribute.verified.html b/tests/Core/List/FluentComboboxTests.FluentCombobox_NameAttribute.verified.html new file mode 100644 index 0000000000..6193a3b5c1 --- /dev/null +++ b/tests/Core/List/FluentComboboxTests.FluentCombobox_NameAttribute.verified.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/tests/Core/List/FluentComboboxTests.cs b/tests/Core/List/FluentComboboxTests.cs index da1e341c9b..716f6e6713 100644 --- a/tests/Core/List/FluentComboboxTests.cs +++ b/tests/Core/List/FluentComboboxTests.cs @@ -34,5 +34,20 @@ public void FluentCombobox_AutofocusAttribute() cut.Verify(); } + [Fact] + public void FluentCombobox_NameAttribute() + { + // Arrange && Act + var cut = TestContext.RenderComponent>(parameters => + { + parameters.Add(p => p.Id, "myComponent"); + parameters.Add(p => p.Name, "myComponentName"); + parameters.Add(p => p.Autofocus, true); + }); + + // Assert + cut.Verify(); + } + private record Customer(int Id, string Name); } diff --git a/tests/Core/List/FluentListboxTests.FluentListbox_NameAttribute.verified.razor.html b/tests/Core/List/FluentListboxTests.FluentListbox_NameAttribute.verified.razor.html new file mode 100644 index 0000000000..fdd8f8de4f --- /dev/null +++ b/tests/Core/List/FluentListboxTests.FluentListbox_NameAttribute.verified.razor.html @@ -0,0 +1,8 @@ + +
+ + 1-Denis Voituron + 2-Vincent Baaij + 3-Bill Gates + +
\ No newline at end of file diff --git a/tests/Core/List/FluentListboxTests.razor b/tests/Core/List/FluentListboxTests.razor index a5f1aa515a..26eea62ba3 100644 --- a/tests/Core/List/FluentListboxTests.razor +++ b/tests/Core/List/FluentListboxTests.razor @@ -28,6 +28,21 @@ cut.Verify(); } + [Fact] + public void FluentListbox_NameAttribute() + { + // Arrange + var cut = RenderComponent>(parameters => + { + parameters.Add(p => p.Id, "mylistbox"); + parameters.Add(p => p.Name, "mylistboxName"); + parameters.Add(p => p.Items, Customers.Get()); + }); + + // Assert + cut.Verify(); + } + [Fact] public void FluentListbox_OptionValue() { diff --git a/tests/Core/List/FluentSelectTests.FluentSelect_NameAttribute.verified.razor.html b/tests/Core/List/FluentSelectTests.FluentSelect_NameAttribute.verified.razor.html new file mode 100644 index 0000000000..b3182b9bfb --- /dev/null +++ b/tests/Core/List/FluentSelectTests.FluentSelect_NameAttribute.verified.razor.html @@ -0,0 +1,11 @@ + + + + 1-Denis Voituron + 2-Vincent Baaij + 3-Bill Gates + \ No newline at end of file diff --git a/tests/Core/List/FluentSelectTests.razor b/tests/Core/List/FluentSelectTests.razor index aa14a67db8..9d0bdc05bf 100644 --- a/tests/Core/List/FluentSelectTests.razor +++ b/tests/Core/List/FluentSelectTests.razor @@ -28,6 +28,21 @@ cut.Verify(); } + [Fact] + public void FluentSelect_NameAttribute() + { + // Arrange + var cut = RenderComponent>(parameters => + { + parameters.Add(p => p.Id, "myselect"); + parameters.Add(p => p.Name, "myselectName"); + parameters.Add(p => p.Items, Customers.Get()); + }); + + // Assert + cut.Verify(); + } + [Theory] [InlineData(Appearance.Filled)] [InlineData(Appearance.Stealth)] @@ -153,7 +168,7 @@ var cut = Render(@ - @(context.Name) + @(context.Name) ); diff --git a/tests/Core/Slider/FluentSliderTests.FluentSlider_Double.verified.razor.html b/tests/Core/Slider/FluentSliderTests.FluentSlider_Double.verified.razor.html index c1529246eb..8dde00ee7a 100644 --- a/tests/Core/Slider/FluentSliderTests.FluentSlider_Double.verified.razor.html +++ b/tests/Core/Slider/FluentSliderTests.FluentSlider_Double.verified.razor.html @@ -1,2 +1,2 @@ - +