microsoft / fluentui-blazor

Microsoft Fluent UI Blazor components library. For use with ASP.NET Core Blazor applications
https://www.fluentui-blazor.net
MIT License
3.3k stars 305 forks source link

[DataGrid] Make SelectColumn work when using ItemsProvider #2060

Closed vnbaaij closed 1 week ago

vnbaaij commented 2 weeks ago

Some changes needed in SelectColumn logic and the DataGrid itself (by storing items and total item count in the internal gri context).

IssueTester page can be used to test the changes

do not auto-merge this. Want to clean out IssueTester before merging

github-actions[bot] commented 2 weeks ago

✅ All tests passed successfully

Details on your Workflow / Core Tests page.

github-actions[bot] commented 2 weeks ago

Summary - Unit Tests Code Coverage

Summary ||| |:---|:---| | Generated on: | 5/23/2024 - 9:10:44 AM | | Coverage date: | 5/23/2024 - 9:10:34 AM | | Parser: | Cobertura | | Assemblies: | 1 | | Classes: | 231 | | Files: | 327 | | **Line coverage:** | 58.6% (4689 of 7989) | | Covered lines: | 4689 | | Uncovered lines: | 3300 | | Coverable lines: | 7989 | | Total lines: | 27315 | | **Branch coverage:** | 49.9% (2182 of 4371) | | Covered branches: | 2182 | | Total branches: | 4371 | | **Method coverage:** | [Feature is only available for sponsors](https://reportgenerator.io/pro) | | Tag: | 476_9205296962 |

Coverage

Microsoft.FluentUI.AspNetCore.Components - 58.6% |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Microsoft.FluentUI.AspNetCore.Components**|**58.6%**|**49.9%**| |Microsoft.FluentUI.AspNetCore.Components.AccordionChangeEventArgs|0%|| |Microsoft.FluentUI.AspNetCore.Components.ActionButton`1|50%|| |Microsoft.FluentUI.AspNetCore.Components.ActionLink`1|0%|| |Microsoft.FluentUI.AspNetCore.Components.CalendarExtended|95%|86.6%| |Microsoft.FluentUI.AspNetCore.Components.CalendarTitles|87%|76.6%| |Microsoft.FluentUI.AspNetCore.Components.CheckboxChangeEventArgs|50%|| |Microsoft.FluentUI.AspNetCore.Components.ColumnBase`1|59.5%|21%| |Microsoft.FluentUI.AspNetCore.Components.CommunicationToast|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.CommunicationToastContent|0%|| |Microsoft.FluentUI.AspNetCore.Components.ComponentParameters|16.6%|0%| |Microsoft.FluentUI.AspNetCore.Components.Components.Dialog.ContentComponent
s.RenderFragmentDialog|100%|| |Microsoft.FluentUI.AspNetCore.Components.Components.Tooltip.TooltipGlobalOp
tions|0%|| |Microsoft.FluentUI.AspNetCore.Components.Components.Tooltip.TooltipOptions|0%|| |Microsoft.FluentUI.AspNetCore.Components.Components.Tooltip.TooltipService|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.CountdownTimer|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.DataGrid.Infrastructure.AsyncQuery
ExecutorSupplier|72.7%|71.4%| |Microsoft.FluentUI.AspNetCore.Components.DataGrid.Infrastructure.ColumnsCol
lectedNotifier`1|87.5%|50%| |Microsoft.FluentUI.AspNetCore.Components.DataGrid.Infrastructure.Defer|100%|| |Microsoft.FluentUI.AspNetCore.Components.DataGrid.Infrastructure.DisplayAtt
ributeExtensions|66.6%|50%| |Microsoft.FluentUI.AspNetCore.Components.DataGrid.Infrastructure.InternalGr
idContext`1|95.2%|100%| |Microsoft.FluentUI.AspNetCore.Components.DataGridCellFocusEventArgs|0%|| |Microsoft.FluentUI.AspNetCore.Components.DataGridRowFocusEventArgs|0%|| |Microsoft.FluentUI.AspNetCore.Components.DialogEventArgs|0%|| |Microsoft.FluentUI.AspNetCore.Components.DialogInstance|92.3%|75%| |Microsoft.FluentUI.AspNetCore.Components.DialogParameters|92.3%|| |Microsoft.FluentUI.AspNetCore.Components.DialogParameters`1|0%|| |Microsoft.FluentUI.AspNetCore.Components.DialogReference|33.3%|0%| |Microsoft.FluentUI.AspNetCore.Components.DialogResult|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.DialogService|3%|3.3%| |Microsoft.FluentUI.AspNetCore.Components.Emoji|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.EmojiCompress|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.EmojiInfo|0%|| |Microsoft.FluentUI.AspNetCore.Components.Extensions.AdditionalAttributesExt
ensions|100%|100%| |Microsoft.FluentUI.AspNetCore.Components.Extensions.BooleanExtensions|100%|100%| |Microsoft.FluentUI.AspNetCore.Components.Extensions.DateTimeExtensions|83.8%|85%| |Microsoft.FluentUI.AspNetCore.Components.Extensions.EnumExtensions|84.6%|75%| |Microsoft.FluentUI.AspNetCore.Components.Extensions.FluentInputExtensions|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.FluentAccessibilityStatus|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.FluentAccordion|60%|0%| |Microsoft.FluentUI.AspNetCore.Components.FluentAccordionItem|76%|35.7%| |Microsoft.FluentUI.AspNetCore.Components.FluentAnchor|89.7%|67.8%| |Microsoft.FluentUI.AspNetCore.Components.FluentAnchoredRegion|87.2%|60%| |Microsoft.FluentUI.AspNetCore.Components.FluentAppBar|57.1%|41.1%| |Microsoft.FluentUI.AspNetCore.Components.FluentAppBarItem|83.3%|66.6%| |Microsoft.FluentUI.AspNetCore.Components.FluentAutocomplete`1|81.5%|66.6%| |Microsoft.FluentUI.AspNetCore.Components.FluentBadge|100%|100%| |Microsoft.FluentUI.AspNetCore.Components.FluentBodyContent|100%|| |Microsoft.FluentUI.AspNetCore.Components.FluentBreadcrumb|100%|| |Microsoft.FluentUI.AspNetCore.Components.FluentBreadcrumbItem|100%|100%| |Microsoft.FluentUI.AspNetCore.Components.FluentButton|84.4%|64%| |Microsoft.FluentUI.AspNetCore.Components.FluentCalendar|90.2%|83.3%| |Microsoft.FluentUI.AspNetCore.Components.FluentCalendarBase|94.4%|83.3%| |Microsoft.FluentUI.AspNetCore.Components.FluentCalendarDay|100%|100%| |Microsoft.FluentUI.AspNetCore.Components.FluentCalendarMonth|100%|66.6%| |Microsoft.FluentUI.AspNetCore.Components.FluentCalendarYear|90.9%|60%| |Microsoft.FluentUI.AspNetCore.Components.FluentCard|100%|100%| |Microsoft.FluentUI.AspNetCore.Components.FluentCheckbox|95.8%|90.3%| |Microsoft.FluentUI.AspNetCore.Components.FluentCollapsibleRegion|100%|100%| |Microsoft.FluentUI.AspNetCore.Components.FluentCombobox`1|54.3%|30.5%| |Microsoft.FluentUI.AspNetCore.Components.FluentComponentBase|90.9%|50%| |Microsoft.FluentUI.AspNetCore.Components.FluentCounterBadge|93.1%|86.5%| |Microsoft.FluentUI.AspNetCore.Components.FluentDataGrid`1|57.4%|44.1%| |Microsoft.FluentUI.AspNetCore.Components.FluentDataGridCell`1|92.8%|| |Microsoft.FluentUI.AspNetCore.Components.FluentDataGridRow`1|56.6%|30%| |Microsoft.FluentUI.AspNetCore.Components.FluentDatePicker|74.3%|50%| |Microsoft.FluentUI.AspNetCore.Components.FluentDesignSystemProvider|100%|| |Microsoft.FluentUI.AspNetCore.Components.FluentDesignTheme|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.FluentDialog|62.5%|71%| |Microsoft.FluentUI.AspNetCore.Components.FluentDialogBody|100%|| |Microsoft.FluentUI.AspNetCore.Components.FluentDialogFooter|62.5%|43.3%| |Microsoft.FluentUI.AspNetCore.Components.FluentDialogHeader|80.9%|81.8%| |Microsoft.FluentUI.AspNetCore.Components.FluentDialogProvider|37.3%|18.7%| |Microsoft.FluentUI.AspNetCore.Components.FluentDivider|85.7%|100%| |Microsoft.FluentUI.AspNetCore.Components.FluentDragContainer`1|66.6%|| |Microsoft.FluentUI.AspNetCore.Components.FluentDragEventArgs`1|0%|| |Microsoft.FluentUI.AspNetCore.Components.FluentDropZone`1|20.9%|0%| |Microsoft.FluentUI.AspNetCore.Components.FluentEditForm|100%|100%| |Microsoft.FluentUI.AspNetCore.Components.FluentEmoji`1|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.FluentFlipper|100%|| |Microsoft.FluentUI.AspNetCore.Components.FluentFooter|100%|| |Microsoft.FluentUI.AspNetCore.Components.FluentGrid|70.5%|50%| |Microsoft.FluentUI.AspNetCore.Components.FluentGridItem|87.2%|82.5%| |Microsoft.FluentUI.AspNetCore.Components.FluentHeader|100%|| |Microsoft.FluentUI.AspNetCore.Components.FluentHighlighter|92.3%|20%| |Microsoft.FluentUI.AspNetCore.Components.FluentHorizontalScroll|58%|20%| |Microsoft.FluentUI.AspNetCore.Components.FluentIcon`1|85%|77.7%| |Microsoft.FluentUI.AspNetCore.Components.FluentInputBase`1|69.3%|60.5%| |Microsoft.FluentUI.AspNetCore.Components.FluentInputFile|88.3%|76.6%| |Microsoft.FluentUI.AspNetCore.Components.FluentInputFileBuffer|100%|| |Microsoft.FluentUI.AspNetCore.Components.FluentInputFileEventArgs|91.6%|| |Microsoft.FluentUI.AspNetCore.Components.FluentInputLabel|100%|95%| |Microsoft.FluentUI.AspNetCore.Components.FluentKeyCode|90.3%|84.6%| |Microsoft.FluentUI.AspNetCore.Components.FluentKeyCodeEventArgs|100%|83.3%| |Microsoft.FluentUI.AspNetCore.Components.FluentKeyCodeProvider|57.1%|0%| |Microsoft.FluentUI.AspNetCore.Components.FluentLabel|72.7%|21.4%| |Microsoft.FluentUI.AspNetCore.Components.FluentLayout|100%|| |Microsoft.FluentUI.AspNetCore.Components.FluentListbox`1|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.FluentMain|100%|| |Microsoft.FluentUI.AspNetCore.Components.FluentMainLayout|100%|100%| |Microsoft.FluentUI.AspNetCore.Components.FluentMenu|35%|41.6%| |Microsoft.FluentUI.AspNetCore.Components.FluentMenuButton|70.2%|8.3%| |Microsoft.FluentUI.AspNetCore.Components.FluentMenuItem|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.FluentMessageBar|54.1%|25%| |Microsoft.FluentUI.AspNetCore.Components.FluentMessageBarProvider|82.3%|66.6%| |Microsoft.FluentUI.AspNetCore.Components.FluentMultiSplitter|81.6%|66.6%| |Microsoft.FluentUI.AspNetCore.Components.FluentMultiSplitterEventArgs|100%|| |Microsoft.FluentUI.AspNetCore.Components.FluentMultiSplitterPane|95.7%|87.5%| |Microsoft.FluentUI.AspNetCore.Components.FluentMultiSplitterResizeEventArgs|100%|| |Microsoft.FluentUI.AspNetCore.Components.FluentNavBase|50%|0%| |Microsoft.FluentUI.AspNetCore.Components.FluentNavGroup|63%|36.6%| |Microsoft.FluentUI.AspNetCore.Components.FluentNavLink|86.3%|50%| |Microsoft.FluentUI.AspNetCore.Components.FluentNavMenu|58.8%|33.3%| |Microsoft.FluentUI.AspNetCore.Components.FluentNavMenuGroup|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.FluentNavMenuItemBase|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.FluentNavMenuLink|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.FluentNavMenuTree|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.FluentNumberField`1|63.8%|47.2%| |Microsoft.FluentUI.AspNetCore.Components.FluentOption`1|60.5%|33.3%| |Microsoft.FluentUI.AspNetCore.Components.FluentOverflow|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.FluentOverflowItem|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.FluentOverlay|70%|50%| |Microsoft.FluentUI.AspNetCore.Components.FluentPageScript|100%|| |Microsoft.FluentUI.AspNetCore.Components.FluentPaginator|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.FluentPersona|100%|78.1%| |Microsoft.FluentUI.AspNetCore.Components.FluentPopover|77%|65.9%| |Microsoft.FluentUI.AspNetCore.Components.FluentPresenceBadge|60.3%|29.1%| |Microsoft.FluentUI.AspNetCore.Components.FluentProfileMenu|100%|100%| |Microsoft.FluentUI.AspNetCore.Components.FluentProgress|85.7%|68.1%| |Microsoft.FluentUI.AspNetCore.Components.FluentProgressRing|97.4%|92.8%| |Microsoft.FluentUI.AspNetCore.Components.FluentPullToRefresh|93.9%|89.2%| |Microsoft.FluentUI.AspNetCore.Components.FluentRadio`1|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.FluentRadioContext|70%|0%| |Microsoft.FluentUI.AspNetCore.Components.FluentRadioGroup`1|83.3%|28.5%| |Microsoft.FluentUI.AspNetCore.Components.FluentSearch|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.FluentSelect`1|0%|| |Microsoft.FluentUI.AspNetCore.Components.FluentSkeleton|42.8%|50%| |Microsoft.FluentUI.AspNetCore.Components.FluentSlider`1|59.3%|38.6%| |Microsoft.FluentUI.AspNetCore.Components.FluentSliderLabel`1|62.1%|30%| |Microsoft.FluentUI.AspNetCore.Components.FluentSortableList`1|70.4%|50%| |Microsoft.FluentUI.AspNetCore.Components.FluentSortableListEventArgs|0%|| |Microsoft.FluentUI.AspNetCore.Components.FluentSpacer|100%|50%| |Microsoft.FluentUI.AspNetCore.Components.FluentSplashScreen|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.FluentSplitter|68.4%|40%| |Microsoft.FluentUI.AspNetCore.Components.FluentStack|90.2%|60%| |Microsoft.FluentUI.AspNetCore.Components.FluentSwitch|88.8%|50%| |Microsoft.FluentUI.AspNetCore.Components.FluentTab|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.FluentTabs|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.FluentTextArea|84.2%|| |Microsoft.FluentUI.AspNetCore.Components.FluentTextField|88.2%|60%| |Microsoft.FluentUI.AspNetCore.Components.FluentTimePicker|100%|75%| |Microsoft.FluentUI.AspNetCore.Components.FluentToast|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.FluentToastProvider|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.FluentToolbar|100%|| |Microsoft.FluentUI.AspNetCore.Components.FluentTooltip|62.9%|47.6%| |Microsoft.FluentUI.AspNetCore.Components.FluentTooltipProvider|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.FluentTreeItem|85.2%|75%| |Microsoft.FluentUI.AspNetCore.Components.FluentTreeView|91.3%|84.3%| |Microsoft.FluentUI.AspNetCore.Components.FluentValidationMessage`1|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.FluentValidationSummary|100%|87.5%| |Microsoft.FluentUI.AspNetCore.Components.FluentWizard|94.5%|82.3%| |Microsoft.FluentUI.AspNetCore.Components.FluentWizardStep|97%|88.3%| |Microsoft.FluentUI.AspNetCore.Components.FluentWizardStepArgs|100%|| |Microsoft.FluentUI.AspNetCore.Components.FluentWizardStepChangeEventArgs|100%|| |Microsoft.FluentUI.AspNetCore.Components.GlobalState|33.3%|50%| |Microsoft.FluentUI.AspNetCore.Components.GridItemsProviderRequest`1|92.3%|25%| |Microsoft.FluentUI.AspNetCore.Components.GridItemsProviderResult|100%|| |Microsoft.FluentUI.AspNetCore.Components.GridItemsProviderResult`1|100%|| |Microsoft.FluentUI.AspNetCore.Components.GridSort`1|35.1%|25.9%| |Microsoft.FluentUI.AspNetCore.Components.HorizontalScrollEventArgs|0%|| |Microsoft.FluentUI.AspNetCore.Components.Icon|81.3%|82.3%| |Microsoft.FluentUI.AspNetCore.Components.IconFromImage|100%|| |Microsoft.FluentUI.AspNetCore.Components.IconInfo|100%|| |Microsoft.FluentUI.AspNetCore.Components.Identifier|66.6%|62.5%| |Microsoft.FluentUI.AspNetCore.Components.IdentifierContext|66.6%|41.6%| |Microsoft.FluentUI.AspNetCore.Components.INavMenuItemsOwner|0%|| |Microsoft.FluentUI.AspNetCore.Components.Infrastructure.EventCallbackSubscr
ibable`1|83.3%|100%| |Microsoft.FluentUI.AspNetCore.Components.Infrastructure.EventCallbackSubscr
iber`1|90%|75%| |Microsoft.FluentUI.AspNetCore.Components.InputHelpers`1|38.8%|31.6%| |Microsoft.FluentUI.AspNetCore.Components.InternalDialogContext|80%|| |Microsoft.FluentUI.AspNetCore.Components.InternalListContext`1|80%|66.6%| |Microsoft.FluentUI.AspNetCore.Components.InternalToastContext|0%|| |Microsoft.FluentUI.AspNetCore.Components.KeyCodeService|84.6%|50%| |Microsoft.FluentUI.AspNetCore.Components.LibraryConfiguration|100%|| |Microsoft.FluentUI.AspNetCore.Components.ListComponentBase`1|51.7%|43.9%| |Microsoft.FluentUI.AspNetCore.Components.LoadedEventArgs|0%|| |Microsoft.FluentUI.AspNetCore.Components.LuminanceChangedEventArgs|0%|| |Microsoft.FluentUI.AspNetCore.Components.MenuChangeEventArgs|0%|| |Microsoft.FluentUI.AspNetCore.Components.Message|50%|0%| |Microsoft.FluentUI.AspNetCore.Components.MessageBox|66.6%|0%| |Microsoft.FluentUI.AspNetCore.Components.MessageBoxContent|0%|| |Microsoft.FluentUI.AspNetCore.Components.MessageOptions|76.9%|| |Microsoft.FluentUI.AspNetCore.Components.MessageService|33%|26.9%| |Microsoft.FluentUI.AspNetCore.Components.NavMenuActionArgs|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.OfficeColorUtilities|0%|| |Microsoft.FluentUI.AspNetCore.Components.Option`1|0%|| |Microsoft.FluentUI.AspNetCore.Components.OptionsSearchEventArgs`1|100%|| |Microsoft.FluentUI.AspNetCore.Components.OverflowItem|100%|| |Microsoft.FluentUI.AspNetCore.Components.PaginationState|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.ProgressFileDetails|100%|| |Microsoft.FluentUI.AspNetCore.Components.ProgressToast|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.ProgressToastContent|0%|| |Microsoft.FluentUI.AspNetCore.Components.PropertyColumn`2|71.4%|46.6%| |Microsoft.FluentUI.AspNetCore.Components.Resources.TimeAgoResource|76.1%|100%| |Microsoft.FluentUI.AspNetCore.Components.SelectColumn`1|92.8%|87.2%| |Microsoft.FluentUI.AspNetCore.Components.ServiceCollectionExtensions|78.5%|100%| |Microsoft.FluentUI.AspNetCore.Components.SortedProperty|0%|| |Microsoft.FluentUI.AspNetCore.Components.SplashScreenContent|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.SplitterCollapsedEventArgs|0%|| |Microsoft.FluentUI.AspNetCore.Components.SplitterResizedEventArgs|0%|| |Microsoft.FluentUI.AspNetCore.Components.StandardLuminanceExtensions|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.StaticAssetServiceConfiguration|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.TabChangeEventArgs|0%|| |Microsoft.FluentUI.AspNetCore.Components.TemplateColumn`1|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.TimeAgoOptions|92.3%|| |Microsoft.FluentUI.AspNetCore.Components.ToastInstance|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.ToastParameters|0%|| |Microsoft.FluentUI.AspNetCore.Components.ToastParameters`1|0%|| |Microsoft.FluentUI.AspNetCore.Components.ToastResult|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.ToastService|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.TreeChangeEventArgs|100%|| |Microsoft.FluentUI.AspNetCore.Components.TreeViewItem|100%|| |Microsoft.FluentUI.AspNetCore.Components.TreeViewItemExpandedEventArgs|100%|| |Microsoft.FluentUI.AspNetCore.Components.UploadedFileDetails|0%|| |Microsoft.FluentUI.AspNetCore.Components.Utilities.CssBuilder|100%|91.6%| |Microsoft.FluentUI.AspNetCore.Components.Utilities.Debouncer|94.8%|37.5%| |Microsoft.FluentUI.AspNetCore.Components.Utilities.InlineStyleBuilder|96.4%|87.5%| |Microsoft.FluentUI.AspNetCore.Components.Utilities.JSModule|0%|0%| |Microsoft.FluentUI.AspNetCore.Components.Utilities.Splitter|82.8%|81.8%| |Microsoft.FluentUI.AspNetCore.Components.Utilities.StyleBuilder|100%|91.6%| |Microsoft.FluentUI.AspNetCore.Components.ZIndex|100%|| |System.Text.RegularExpressions.Generated|72.5%|42.1%|
dvoituron commented 2 weeks ago

I think the problem (and the solution) is not so complex :-) The problem is due to the Grid.ItemsProvider which not detected.

I can create a PR with that, the code is already on my machine :-)

image

vnbaaij commented 2 weeks ago

I think with your code you can't do 'select all' when using an itemsprovider

dvoituron commented 2 weeks ago

Applying these changes on the code from the linked issue, solve the problem. What do you you want to do in addition ? The property selection is made by the "dev" code, not by the component.

dvoituron commented 2 weeks ago

Maybe to display the AllSelected icon and not the Intermediate icon only ?