Skip to content

[dev-v5] Extend DefaultValues with option to set default value on a base class#4999

Open
vnbaaij wants to merge 2 commits into
dev-v5from
users/vnbaaij/extend-default-values
Open

[dev-v5] Extend DefaultValues with option to set default value on a base class#4999
vnbaaij wants to merge 2 commits into
dev-v5from
users/vnbaaij/extend-default-values

Conversation

@vnbaaij

@vnbaaij vnbaaij commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator

This pull request expands and improves the robustness and correctness of setting and retrieving default values for component properties.

The main changes include

  • Allow setting a default value on a base class so to set it for all derived components. This default can be overridden in a derived class. So now this works:
// Add FluentUI services
builder.Services.AddFluentUIComponents(config =>
{
    // Set default values for all charts 
    config.DefaultValues.For<FluentChartBase>().Set(p => p.RoundedCorners, true);

    // But not for DonutCharts
    config.DefaultValues.For<FluentDonutChart>().Set(p => p.RoundedCorners, false);
});

Of course, setting a value on a component itself still takes precedence.

  • enhancing type safety and validation when assigning default values, and updating the logic for property inheritance and merging in the DefaultValues class.

Default value assignment improvements:

  • Added a check to ensure that only writable properties can be assigned default values, throwing an exception for read-only properties.
  • Introduced strict validation to ensure that assigned default values are compatible with the property type, including nullability and type assignability checks.

@vnbaaij vnbaaij requested a review from dvoituron as a code owner July 8, 2026 06:45
Copilot AI review requested due to automatic review settings July 8, 2026 06:45
@vnbaaij vnbaaij added this to the v5.0-RC.5 milestone Jul 8, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR enhances the DefaultValues infrastructure used by Fluent UI Blazor components to support default-value configuration on base classes (with derived types able to override), and adds extra validation when registering defaults to improve robustness.

Changes:

  • Added validation when registering defaults to reject read-only component properties and incompatible default values.
  • Updated default-value retrieval to merge configured defaults across a component’s inheritance chain (base → derived), enabling base-class defaults with derived overrides.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

File Description
src/Core/Infrastructure/DefaultValuesComponentBuilder.cs Adds validation for writable properties and basic type/null compatibility when registering defaults.
src/Core/Infrastructure/DefaultValues.cs Updates retrieval logic to merge defaults across base types to support base-class default registrations.

Comment thread src/Core/Infrastructure/DefaultValuesComponentBuilder.cs
Comment thread src/Core/Infrastructure/DefaultValues.cs Outdated
@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown

✅ All tests passed successfully

Details on your Workflow / Core Tests page.

@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown

Summary - Unit Tests Code Coverage

Summary
Generated on: 07/08/2026 - 08:53:18
Coverage date: 07/08/2026 - 08:52:30 - 07/08/2026 - 08:52:49
Parser: MultiReport (2x Cobertura)
Assemblies: 2
Classes: 282
Files: 389
Line coverage: 98.9% (12173 of 12304)
Covered lines: 12173
Uncovered lines: 131
Coverable lines: 12304
Total lines: 43806
Branch coverage: 93.3% (6174 of 6617)
Covered branches: 6174
Total branches: 6617
Method coverage: Feature is only available for sponsors
Tag: 6809_28929869401

Coverage

Microsoft.FluentUI.AspNetCore.Components - 98.9%
Name Line Branch
Microsoft.FluentUI.AspNetCore.Components 98.9% 93.1%
Microsoft.FluentUI.AspNetCore.Components.AccordionItemEventArgs 100%
Microsoft.FluentUI.AspNetCore.Components.AdditionalAttributesExtensions 100% 100%
Microsoft.FluentUI.AspNetCore.Components.AutocompleteHeaderFooterContent`1 100% 50%
Microsoft.FluentUI.AspNetCore.Components.CachedServices 100% 100%
Microsoft.FluentUI.AspNetCore.Components.Calendar.CalendarExtended 100% 100%
Microsoft.FluentUI.AspNetCore.Components.Calendar.CalendarTitles`1 100% 100%
Microsoft.FluentUI.AspNetCore.Components.Calendar.CalendarTValue 100% 100%
Microsoft.FluentUI.AspNetCore.Components.ColorPicker.ColorHelper 100% 100%
Microsoft.FluentUI.AspNetCore.Components.ColorPicker.DefaultColors 100%
Microsoft.FluentUI.AspNetCore.Components.ColorPicker.HsvColor 100% 100%
Microsoft.FluentUI.AspNetCore.Components.ColorPicker.WheelColor 100% 100%
Microsoft.FluentUI.AspNetCore.Components.ColumnBase`1 92.8% 84.4%
Microsoft.FluentUI.AspNetCore.Components.ColumnHeaderCapabilities 100% 100%
Microsoft.FluentUI.AspNetCore.Components.ColumnKeyGridSort`1 94.4% 75%
Microsoft.FluentUI.AspNetCore.Components.ColumnMenuSettings 100%
Microsoft.FluentUI.AspNetCore.Components.ColumnReorderOptions`1 100%
Microsoft.FluentUI.AspNetCore.Components.ColumnResizeOptions`1 100% 100%
Microsoft.FluentUI.AspNetCore.Components.CustomEmoji 100% 100%
Microsoft.FluentUI.AspNetCore.Components.CustomIcon 100%
Microsoft.FluentUI.AspNetCore.Components.DataGrid.Infrastructure.Defer 100%
Microsoft.FluentUI.AspNetCore.Components.DataGrid.Infrastructure.InternalGr
idContext`1
100% 100%
Microsoft.FluentUI.AspNetCore.Components.DataGridSortEventArgs`1 100%
Microsoft.FluentUI.AspNetCore.Components.DateTimeProvider 100% 100%
Microsoft.FluentUI.AspNetCore.Components.DateTimeProviderContext 100% 92.8%
Microsoft.FluentUI.AspNetCore.Components.DefaultStyles 100%
Microsoft.FluentUI.AspNetCore.Components.Dialog.MessageBox.FluentMessageBox 100% 75%
Microsoft.FluentUI.AspNetCore.Components.DialogEventArgs 100% 92.8%
Microsoft.FluentUI.AspNetCore.Components.DialogInstance 100% 100%
Microsoft.FluentUI.AspNetCore.Components.DialogOptions 100%
Microsoft.FluentUI.AspNetCore.Components.DialogOptionsFooter 100% 100%
Microsoft.FluentUI.AspNetCore.Components.DialogOptionsFooterAction 100% 100%
Microsoft.FluentUI.AspNetCore.Components.DialogOptionsHeader 100% 100%
Microsoft.FluentUI.AspNetCore.Components.DialogOptionsHeaderAction 100% 100%
Microsoft.FluentUI.AspNetCore.Components.DialogResult 100% 100%
Microsoft.FluentUI.AspNetCore.Components.DialogResult`1 100%
Microsoft.FluentUI.AspNetCore.Components.DialogService 100% 85.2%
Microsoft.FluentUI.AspNetCore.Components.DialogToggleEventArgs 100%
Microsoft.FluentUI.AspNetCore.Components.DropdownEventArgs 100%
Microsoft.FluentUI.AspNetCore.Components.Emoji 100% 100%
Microsoft.FluentUI.AspNetCore.Components.EmojiCompress 100% 100%
Microsoft.FluentUI.AspNetCore.Components.EmojiExtensions 100% 50%
Microsoft.FluentUI.AspNetCore.Components.EmojiInfo 100%
Microsoft.FluentUI.AspNetCore.Components.Extensions.DateTimeExtensions 98.4% 90.3%
Microsoft.FluentUI.AspNetCore.Components.Extensions.DisplayAttributeExtensi
ons
100% 100%
Microsoft.FluentUI.AspNetCore.Components.Extensions.EnumExtensions 100% 100%
Microsoft.FluentUI.AspNetCore.Components.Extensions.FieldSizeExtensions 100% 100%
Microsoft.FluentUI.AspNetCore.Components.Extensions.FluentInputExtensions 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FileSizeConverter 100%
Microsoft.FluentUI.AspNetCore.Components.FluentAccordion 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentAccordionItem 100% 95.8%
Microsoft.FluentUI.AspNetCore.Components.FluentAnchorButton 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentAppBar 97.4% 97.6%
Microsoft.FluentUI.AspNetCore.Components.FluentAppBarItem 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentAutocomplete`2 96% 92.1%
Microsoft.FluentUI.AspNetCore.Components.FluentAvatar 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentBadge 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentButton 98.4% 90.6%
Microsoft.FluentUI.AspNetCore.Components.FluentCalendar`1 96.7% 84.8%
Microsoft.FluentUI.AspNetCore.Components.FluentCalendarBase`1 100% 94.4%
Microsoft.FluentUI.AspNetCore.Components.FluentCalendarDay`1 100% 95.8%
Microsoft.FluentUI.AspNetCore.Components.FluentCalendarMonth`1 100% 85.7%
Microsoft.FluentUI.AspNetCore.Components.FluentCalendarYear`1 100% 91.6%
Microsoft.FluentUI.AspNetCore.Components.FluentCard 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentCheckbox 100% 97.3%
Microsoft.FluentUI.AspNetCore.Components.FluentColorPicker 97.4% 96%
Microsoft.FluentUI.AspNetCore.Components.FluentColorPickerInput 98.7% 95.6%
Microsoft.FluentUI.AspNetCore.Components.FluentCombobox`2 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentComponentBase 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentCompoundButton 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentCounterBadge 100% 95%
Microsoft.FluentUI.AspNetCore.Components.FluentDataGrid`1 99.1% 95.9%
Microsoft.FluentUI.AspNetCore.Components.FluentDataGridCell`1 100% 95.5%
Microsoft.FluentUI.AspNetCore.Components.FluentDataGridRow`1 98.5% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentDatePicker`1 97.5% 85.8%
Microsoft.FluentUI.AspNetCore.Components.FluentDialog 97.7% 90%
Microsoft.FluentUI.AspNetCore.Components.FluentDialogBody 97.7% 94.4%
Microsoft.FluentUI.AspNetCore.Components.FluentDialogInstance 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentDialogProvider 100% 75%
Microsoft.FluentUI.AspNetCore.Components.FluentDivider 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentDragContainer`1 100%
Microsoft.FluentUI.AspNetCore.Components.FluentDragEventArgs`1 100%
Microsoft.FluentUI.AspNetCore.Components.FluentDropZone`1 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentEmoji`1 100% 95%
Microsoft.FluentUI.AspNetCore.Components.FluentErrorBoundary 95.3% 93.7%
Microsoft.FluentUI.AspNetCore.Components.FluentField 99.1% 97.6%
Microsoft.FluentUI.AspNetCore.Components.FluentFieldCondition 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentFieldConditionItem 100%
Microsoft.FluentUI.AspNetCore.Components.FluentFieldConditionOptions 100%
Microsoft.FluentUI.AspNetCore.Components.FluentFieldExtensions 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentFieldParameterSelector 97.6% 94.4%
Microsoft.FluentUI.AspNetCore.Components.FluentGrid 100% 90%
Microsoft.FluentUI.AspNetCore.Components.FluentGridItem 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentHighlighter 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentIcon`1 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentImage 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentInputBase`1 88.4% 58.3%
Microsoft.FluentUI.AspNetCore.Components.FluentInputFile 100% 93.3%
Microsoft.FluentUI.AspNetCore.Components.FluentInputFileBuffer 100%
Microsoft.FluentUI.AspNetCore.Components.FluentInputFileErrorEventArgs 100%
Microsoft.FluentUI.AspNetCore.Components.FluentInputFileEventArgs 100%
Microsoft.FluentUI.AspNetCore.Components.FluentInputImmediateBase`1 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentJSModule 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentKeyCode 100% 92.8%
Microsoft.FluentUI.AspNetCore.Components.FluentKeyCodeEventArgs 100% 75%
Microsoft.FluentUI.AspNetCore.Components.FluentKeyCodeProvider 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentKeyPressEventArgs 100%
Microsoft.FluentUI.AspNetCore.Components.FluentLabel 100%
Microsoft.FluentUI.AspNetCore.Components.FluentLabelInfo 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentLayout 100% 91.6%
Microsoft.FluentUI.AspNetCore.Components.FluentLayoutHamburger 100% 96.8%
Microsoft.FluentUI.AspNetCore.Components.FluentLayoutItem 100% 91%
Microsoft.FluentUI.AspNetCore.Components.FluentLink 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentListBase`2 94.2% 88.6%
Microsoft.FluentUI.AspNetCore.Components.FluentListbox`2 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentLocalizerExtensions 100%
Microsoft.FluentUI.AspNetCore.Components.FluentLocalizerInternal 100%
Microsoft.FluentUI.AspNetCore.Components.FluentMenu 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentMenuButton 100% 71.4%
Microsoft.FluentUI.AspNetCore.Components.FluentMenuItem 100% 90.4%
Microsoft.FluentUI.AspNetCore.Components.FluentMenuList 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentMessageBar 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentMessageBarProvider 100% 90%
Microsoft.FluentUI.AspNetCore.Components.FluentMultiSplitter 100% 93.4%
Microsoft.FluentUI.AspNetCore.Components.FluentMultiSplitterEventArgs 100%
Microsoft.FluentUI.AspNetCore.Components.FluentMultiSplitterPane 100% 87.5%
Microsoft.FluentUI.AspNetCore.Components.FluentMultiSplitterResizeEventArgs 100%
Microsoft.FluentUI.AspNetCore.Components.FluentNav 100% 95.4%
Microsoft.FluentUI.AspNetCore.Components.FluentNavBase 100%
Microsoft.FluentUI.AspNetCore.Components.FluentNavCategory 97.8% 93%
Microsoft.FluentUI.AspNetCore.Components.FluentNavItem 100% 91.2%
Microsoft.FluentUI.AspNetCore.Components.FluentNavSectionHeader 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentNumberInput`1 99.3% 91.4%
Microsoft.FluentUI.AspNetCore.Components.FluentNumberInputCultureInfo 100%
Microsoft.FluentUI.AspNetCore.Components.FluentOption`1 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentOptionString 100%
Microsoft.FluentUI.AspNetCore.Components.FluentOverflow 100% 95.8%
Microsoft.FluentUI.AspNetCore.Components.FluentOverflowItem 100% 80%
Microsoft.FluentUI.AspNetCore.Components.FluentOverlay 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentPaginator 100% 95.4%
Microsoft.FluentUI.AspNetCore.Components.FluentPopover 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentPresenceBadge 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentProgress 100%
Microsoft.FluentUI.AspNetCore.Components.FluentProgressBar 100% 87.5%
Microsoft.FluentUI.AspNetCore.Components.FluentProgressRing 100%
Microsoft.FluentUI.AspNetCore.Components.FluentProviders 100%
Microsoft.FluentUI.AspNetCore.Components.FluentPullToRefresh 100% 96.7%
Microsoft.FluentUI.AspNetCore.Components.FluentRadio`1 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentRadioGroup`1 100% 88.8%
Microsoft.FluentUI.AspNetCore.Components.FluentRatingDisplay 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentSelect`2 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentServiceBase`1 100%
Microsoft.FluentUI.AspNetCore.Components.FluentServiceProviderException`1 100%
Microsoft.FluentUI.AspNetCore.Components.FluentSkeleton 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentSlider`1 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentSortableList`1 95.8% 92.3%
Microsoft.FluentUI.AspNetCore.Components.FluentSortableListEventArgs 100%
Microsoft.FluentUI.AspNetCore.Components.FluentSpacer 100%
Microsoft.FluentUI.AspNetCore.Components.FluentSpinner 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentSplitButton 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentStack 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentStatus 100%
Microsoft.FluentUI.AspNetCore.Components.FluentSwitch 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentTab 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentTabs 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentText 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentTextArea 98.6% 66.6%
Microsoft.FluentUI.AspNetCore.Components.FluentTextInput 100% 87.5%
Microsoft.FluentUI.AspNetCore.Components.FluentTimePicker`1 98% 74.6%
Microsoft.FluentUI.AspNetCore.Components.FluentToast 100% 93.8%
Microsoft.FluentUI.AspNetCore.Components.FluentToastProvider 100% 96.6%
Microsoft.FluentUI.AspNetCore.Components.FluentToggleButton 100% 91.6%
Microsoft.FluentUI.AspNetCore.Components.FluentTooltip 100% 95%
Microsoft.FluentUI.AspNetCore.Components.FluentTooltipProvider 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentTreeItem 100% 95.3%
Microsoft.FluentUI.AspNetCore.Components.FluentTreeView 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentValidationMessage`1 98% 88.8%
Microsoft.FluentUI.AspNetCore.Components.FluentValidationSummary 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentWizard 98.5% 91.8%
Microsoft.FluentUI.AspNetCore.Components.FluentWizardStep 98% 92.9%
Microsoft.FluentUI.AspNetCore.Components.FluentWizardStepArgs 100%
Microsoft.FluentUI.AspNetCore.Components.FluentWizardStepChangeEventArgs 100%
Microsoft.FluentUI.AspNetCore.Components.FluentWizardStepValidator 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FreeOptionOutput 100%
Microsoft.FluentUI.AspNetCore.Components.GridItemsProviderRequest`1 100% 100%
Microsoft.FluentUI.AspNetCore.Components.GridItemsProviderResult 100%
Microsoft.FluentUI.AspNetCore.Components.GridItemsProviderResult`1 100%
Microsoft.FluentUI.AspNetCore.Components.GridSort`1 96.2% 93.7%
Microsoft.FluentUI.AspNetCore.Components.HierarchicalGridItem`2 100% 100%
Microsoft.FluentUI.AspNetCore.Components.HierarchicalGridUtilities 100% 100%
Microsoft.FluentUI.AspNetCore.Components.HierarchicalSelectColumn`1 98.8% 95.5%
Microsoft.FluentUI.AspNetCore.Components.HighlighterSplitter 100% 100%
Microsoft.FluentUI.AspNetCore.Components.Icon 100% 95%
Microsoft.FluentUI.AspNetCore.Components.IconFromImage 100%
Microsoft.FluentUI.AspNetCore.Components.IconInfo 100%
Microsoft.FluentUI.AspNetCore.Components.IconsExtensions 100% 50%
Microsoft.FluentUI.AspNetCore.Components.IFluentComponentChangeAfterKeyPres
s
100% 100%
Microsoft.FluentUI.AspNetCore.Components.IFluentLocalizer 100% 100%
Microsoft.FluentUI.AspNetCore.Components.Infrastructure.EventCallbackSubscr
ibable`1
100% 100%
Microsoft.FluentUI.AspNetCore.Components.Infrastructure.EventCallbackSubscr
iber`1
100% 87.5%
Microsoft.FluentUI.AspNetCore.Components.InputFileInstance 100% 100%
Microsoft.FluentUI.AspNetCore.Components.InputFileOptions 100%
Microsoft.FluentUI.AspNetCore.Components.InternalAppBarContext 100% 100%
Microsoft.FluentUI.AspNetCore.Components.InternalListContext`1 100%
Microsoft.FluentUI.AspNetCore.Components.KeyCodeService 100% 85.7%
Microsoft.FluentUI.AspNetCore.Components.KeyPress 100%
Microsoft.FluentUI.AspNetCore.Components.LabelInfo 100%
Microsoft.FluentUI.AspNetCore.Components.LayoutHamburgerEventArgs 100%
Microsoft.FluentUI.AspNetCore.Components.LibraryToastOptions 100%
Microsoft.FluentUI.AspNetCore.Components.LibraryTooltipOptions 100%
Microsoft.FluentUI.AspNetCore.Components.Localization.LanguageResource 100% 100%
Microsoft.FluentUI.AspNetCore.Components.MarkupSanitizedOptions 100%
Microsoft.FluentUI.AspNetCore.Components.MenuItemEventArgs 100%
Microsoft.FluentUI.AspNetCore.Components.MessageBarEventArgs 100%
Microsoft.FluentUI.AspNetCore.Components.MessageBarInstance 94.4% 100%
Microsoft.FluentUI.AspNetCore.Components.MessageBarOptions 100%
Microsoft.FluentUI.AspNetCore.Components.MessageBarResult 100%
Microsoft.FluentUI.AspNetCore.Components.MessageBoxOptions 100%
Microsoft.FluentUI.AspNetCore.Components.Migration.AppearanceExtensions 100% 100%
Microsoft.FluentUI.AspNetCore.Components.Migration.FluentInputAppearanceExt
ensions
100% 100%
Microsoft.FluentUI.AspNetCore.Components.Migration.TooltipPositionExtension 100% 100%
Microsoft.FluentUI.AspNetCore.Components.NotificationService 96.3% 97.4%
Microsoft.FluentUI.AspNetCore.Components.OptionsSearchEventArgs`1 100%
Microsoft.FluentUI.AspNetCore.Components.OverlayOptions 100%
Microsoft.FluentUI.AspNetCore.Components.PaginationState 100% 81.2%
Microsoft.FluentUI.AspNetCore.Components.ProgressFileDetails 100%
Microsoft.FluentUI.AspNetCore.Components.PropertyColumn`2 100% 81.8%
Microsoft.FluentUI.AspNetCore.Components.RadioEventArgs 100%
Microsoft.FluentUI.AspNetCore.Components.RangeOfDates 96.5% 86.1%
Microsoft.FluentUI.AspNetCore.Components.SelectAllTemplateArgs 100%
Microsoft.FluentUI.AspNetCore.Components.SelectColumn`1 93.1% 88.9%
Microsoft.FluentUI.AspNetCore.Components.ServiceProviderExtensions 100%
Microsoft.FluentUI.AspNetCore.Components.SetValueEventArgs`2 100%
Microsoft.FluentUI.AspNetCore.Components.SortedProperty 100%
Microsoft.FluentUI.AspNetCore.Components.SpacingExtensions 100% 97.2%
Microsoft.FluentUI.AspNetCore.Components.TabChangeEventArgs 100%
Microsoft.FluentUI.AspNetCore.Components.TemplateColumn`1 100% 25%
Microsoft.FluentUI.AspNetCore.Components.Theme 100% 80%
Microsoft.FluentUI.AspNetCore.Components.ThemeExtensions 94.7% 87.5%
Microsoft.FluentUI.AspNetCore.Components.ThemeService 100% 88.8%
Microsoft.FluentUI.AspNetCore.Components.ThemeSettings 100%
Microsoft.FluentUI.AspNetCore.Components.ToastEventArgs 100%
Microsoft.FluentUI.AspNetCore.Components.ToastInstance 100% 100%
Microsoft.FluentUI.AspNetCore.Components.ToastOptions 100%
Microsoft.FluentUI.AspNetCore.Components.ToastOptionsAction 100%
Microsoft.FluentUI.AspNetCore.Components.ToastResult 100%
Microsoft.FluentUI.AspNetCore.Components.TooltipEventArgs 100%
Microsoft.FluentUI.AspNetCore.Components.TotalItemCountChangedEventArgs 100%
Microsoft.FluentUI.AspNetCore.Components.TreeItemChangedEventArgs 100%
Microsoft.FluentUI.AspNetCore.Components.TreeViewItem 100% 100%
Microsoft.FluentUI.AspNetCore.Components.TreeViewItemExpandedEventArgs 100%
Microsoft.FluentUI.AspNetCore.Components.UploadedFileDetails 100%
Microsoft.FluentUI.AspNetCore.Components.Utilities.AddTag 100% 100%
Microsoft.FluentUI.AspNetCore.Components.Utilities.CssBuilder 100% 100%
Microsoft.FluentUI.AspNetCore.Components.Utilities.Debounce 100% 100%
Microsoft.FluentUI.AspNetCore.Components.Utilities.Identifier 100% 100%
Microsoft.FluentUI.AspNetCore.Components.Utilities.IdentifierContext 100% 75%
Microsoft.FluentUI.AspNetCore.Components.Utilities.InlineStyleBuilder 100% 91.6%
Microsoft.FluentUI.AspNetCore.Components.Utilities.MarkupStringSanitized 100% 92.5%
Microsoft.FluentUI.AspNetCore.Components.Utilities.RangeOf`1 96.7% 97.2%
Microsoft.FluentUI.AspNetCore.Components.Utilities.StyleBuilder 100% 100%
Microsoft.FluentUI.AspNetCore.Components.ZIndex 100%
Microsoft.FluentUI.AspNetCore.Components.Charts - 100%
Name Line Branch
Microsoft.FluentUI.AspNetCore.Components.Charts 100% 97.5%
Microsoft.FluentUI.AspNetCore.Components.Charts.CalloutAccessibilityData 100%
Microsoft.FluentUI.AspNetCore.Components.Charts.CartesianTooltipContext 100%
Microsoft.FluentUI.AspNetCore.Components.Charts.ChartAxisValue 100% 90%
Microsoft.FluentUI.AspNetCore.Components.Charts.ChartAxisValueJsonConverter 100% 100%
Microsoft.FluentUI.AspNetCore.Components.Charts.DataVizPaletteExtensions 100% 100%
Microsoft.FluentUI.AspNetCore.Components.Charts.DonutDataPoint 100% 100%
Microsoft.FluentUI.AspNetCore.Components.Charts.FluentCartesianChartBase 100% 87.5%
Microsoft.FluentUI.AspNetCore.Components.Charts.FluentChartBase 100% 100%
Microsoft.FluentUI.AspNetCore.Components.Charts.FluentDonutChart 100% 100%
Microsoft.FluentUI.AspNetCore.Components.Charts.FluentFunnelChart 100% 100%
Microsoft.FluentUI.AspNetCore.Components.Charts.FluentGanttChart 100% 97.2%
Microsoft.FluentUI.AspNetCore.Components.Charts.FluentHorizontalBarChart 100% 95.4%
Microsoft.FluentUI.AspNetCore.Components.Charts.FluentHorizontalBarChartWit
hAxis
100% 97%
Microsoft.FluentUI.AspNetCore.Components.Charts.FunnelDataPoint 100% 100%
Microsoft.FluentUI.AspNetCore.Components.Charts.FunnelSubValue 100% 100%
Microsoft.FluentUI.AspNetCore.Components.Charts.GanttChartDataPoint 100% 100%
Microsoft.FluentUI.AspNetCore.Components.Charts.GanttChartXRange 100%
Microsoft.FluentUI.AspNetCore.Components.Charts.HorizontalBarChartDataPoint 100% 100%
Microsoft.FluentUI.AspNetCore.Components.Charts.HorizontalBarChartSeries 100%
Microsoft.FluentUI.AspNetCore.Components.Charts.HorizontalBarChartWithAxisD
ataPoint
100% 100%
Microsoft.FluentUI.AspNetCore.Components.Charts.TooltipContext 100%

throw new ArgumentException($"The property '{propertyName}' on component '{typeof(TComponent)}' is read-only and cannot be used for default values.", nameof(parameterSelector));
}

ValidateValueCompatibility(propertyInfo, value, propertyName);

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we need to check the value's type? It takes time, especially when using reflection, and I don't really see the advantage: without this check, the code will crash anyway, right? Keep in mind that these methods are executed thousands of times since they're in the constructor of every component; they therefore need to be very efficie

if (!_componentCache.TryGetValue(componentType, out var properties))
var inheritanceChain = new List<Type>();

for (var currentType = componentType; currentType is not null && currentType != typeof(object); currentType = currentType.BaseType)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's going to be a performance issue here: you can't keep recalculating the BaseType parents all the time. You need to cache the type just once and then retrieve it without having to run through that loop again.

The logic must be different

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants