Skip to content

doc(EventTable): remove EventTable component#7603

Merged
ArgoZhang merged 9 commits intomainfrom
doc-xml
Jan 30, 2026
Merged

doc(EventTable): remove EventTable component#7603
ArgoZhang merged 9 commits intomainfrom
doc-xml

Conversation

@ArgoZhang
Copy link
Copy Markdown
Member

@ArgoZhang ArgoZhang commented Jan 30, 2026

Link issues

fixes #7602

Summary By Copilot

Regression?

  • Yes
  • No

Risk

  • High
  • Medium
  • Low

Verification

  • Manual (required)
  • Automated

Packaging changes reviewed?

  • Yes
  • No
  • N/A

☑️ Self Check before Merge

⚠️ Please check all items below before review. ⚠️

  • Doc is updated/provided or not needed
  • Demo is updated/provided or not needed
  • Merge the latest code from the main branch

Summary by Sourcery

Standardize localization service injection names and remove EventTable usage from component samples.

Enhancements:

  • Rename injected IStringLocalizer and related services to more descriptive names across samples and shared components.
  • Remove GetEvents helper methods and associated EventTable usage from demo components, leaving only attribute tables for documentation.
  • Refine component initialization overrides to call base.OnInitialized where missing and use documentation where appropriate.
  • Tighten localization test helper to recognize additional Localizer key usage patterns.
  • Update obsolete extension method annotation with bilingual guidance in the Obsolete message.

Copilot AI review requested due to automatic review settings January 30, 2026 04:52
@bb-auto bb-auto Bot added the documentation Improvements or additions to documentation label Jan 30, 2026
@bb-auto bb-auto Bot added this to the v10.2.0 milestone Jan 30, 2026
@sourcery-ai
Copy link
Copy Markdown
Contributor

sourcery-ai Bot commented Jan 30, 2026

Reviewer's Guide

Refactors localization usage in sample components to use more descriptive localizer names, removes EventTable-based event documentation from demos, and updates supporting infrastructure (tests, attributes, and docs) to align with the new localization and documentation patterns.

Class diagram for updated localization usage in sample components

classDiagram
    direction LR

    class Foo {
        +int Id
        +string Name
        +string Address
        +DateTime DateTime
        +int Count
        +bool Complete
        +static List~Foo~ GenerateFoo(IStringLocalizer_Foo_ fooLocalizer)
        +static Foo Generate(IStringLocalizer_Foo_ fooLocalizer)
        +static List~SelectedItem~ GenerateHobbies(IStringLocalizer_Foo_ fooLocalizer)
    }

    class IStringLocalizer_Foo_ {
        <<interface>>
        +string indexer[string name]
        +string indexer[string name, string arg]
    }

    class IStringLocalizer_ValidateForms_ {
        <<interface>>
    }

    class IStringLocalizer_Rows_ {
        <<interface>>
    }

    class IStringLocalizer_FormInlineSwitch_ {
        <<interface>>
    }

    class IStringLocalizer_CustomerFilter_ {
        <<interface>>
    }

    class SelectedItem~T~ {
        +string Text
        +T Value
    }

    class SelectGenerics {
        +IStringLocalizer_Foo_ FooLocalizer
        +List~Foo~ Foos
        +void OnInitialized()
    }

    class Selects {
        +IStringLocalizer_Foo_ FooLocalizer
        +List~Foo~ Foos
        +void OnInitialized()
    }

    class CheckboxLists {
        +IStringLocalizer_Foo_ FooLocalizer
        +Foo Model
        +List~SelectedItem~ FooItems
        +Task OnInitializedAsync()
    }

    class LabelsCodeBehind {
        +IStringLocalizer_Foo_ FooLocalizer
        +IStringLocalizer_ValidateForms_ FormLocalizer
        +Foo Dummy1
        +Foo Dummy2
        +Foo Dummy3
        +Foo Dummy4
        +void OnInitialized()
    }

    class FormInlineSwitch {
        +IStringLocalizer_FormInlineSwitch_ Localizer
        +IEnumerable~SelectedItem~ Items
        +RowType FormRowType
        +void OnInitialized()
    }

    class CustomerFilter {
        +IStringLocalizer_CustomerFilter_ TableFilterLocalizer
        +int? _value
    }

    class ListGroups {
        +IStringLocalizer_Foo_ FooLocalizer
        +List~Foo~ Items
        +Foo Value
        +void OnInitialized()
    }

    class TablesDynamic {
        +IStringLocalizer_Foo_ FooLocalizer
        +DataTable UserData
        +DataTable PageDataTable
        +List~Foo~ PageFoos
        +void CreateContext()
        +void InitDataTable()
        +void InitPageDataTable()
    }

    class TablesEdit {
        +IStringLocalizer_Foo_ FooLocalizer
        +List~Foo~ Items
        +List~Foo~ EditItems
        +List~SelectedItem~ Hobbies
        +FooDataService_Foo_ CustomerDataService
        +List~Foo~ BindItems
        +void OnInitialized()
    }

    class FooDataService_Foo_ {
        +FooDataService_Foo_(IStringLocalizer_Foo_ fooLocalizer)
    }

    class RowsCodeBehind {
        +IStringLocalizer_Foo_ FooLocalizer
        +IEnumerable~SelectedItem~ Hobbies1
        +IEnumerable~SelectedItem~ Hobbies2
        +IEnumerable~SelectedItem~ Hobbies3
        +void OnInitialized()
    }

    class SearchesCodeBehind {
        +IStringLocalizer_Foo_ FooLocalizer
        +Task~IEnumerable~Foo~~ OnSearchFoo(string searchText)
        +Task~IEnumerable~string~~ OnSearchFooString(string v)
    }

    class TablesAutoRefreshCodeBehind {
        +IStringLocalizer_Foo_ FooLocalizer
        +int _id
        +Task~QueryData_Foo_~ GenerateFoos(QueryPageOptions options, List~Foo~ foos)
    }

    class TablesDynamicExcelCodeBehind {
        +IStringLocalizer_Foo_ FooLocalizer
        +DataTable UserData
        +DataTable KeyboardData
        +void InitDataTable()
        +void InitDataTableContext()
        +void InitDataTableKeyboard()
    }

    class ValidateFormsCodeBehind {
        +IStringLocalizer_Foo_ FooLocalizer
        +IEnumerable~SelectedItem~ Hobbies2
        +IEnumerable~SelectedItem~ Hobbies3
        +IEnumerable~SelectedItem~ Hobbies4
        +IEnumerable~SelectedItem~ Hobbies7
        +Task OnInitializedAsync()
    }

    class DemoHobbyTemplate {
        +IStringLocalizer_Foo_ FooLocalizer
        +IEnumerable~SelectedItem~ Hobbies
        +void OnInitialized()
    }

    class ContextMenusCodeBehind {
        +IStringLocalizer_Foo_ FooLocalizer
        +Foo Foo
        +List~Foo~ Items
        +void OnInitialized()
    }

    class DialogsCodeBehind {
        +IStringLocalizer_Foo_ FooLocalizer
        +Task OnSaveDialogClick()
    }

    class Dom2ImagesCodeBehind {
        +IStringLocalizer_Foo_ FooLocalizer
        +List~Foo~ Items
        +void OnInitialized()
    }

    class Html2ImagesCodeBehind {
        +IStringLocalizer_Foo_ FooLocalizer
        +List~Foo~ Items
        +void OnInitialized()
    }

    class Html2PdfsCodeBehind {
        +IStringLocalizer_Foo_ FooLocalizer
        +List~Foo~ Items
        +void OnInitialized()
    }

    class InputGroupsCodeBehind {
        +IStringLocalizer_Foo_ FooLocalizer
        +List~Foo~ AufoFillItems
        +Foo Model
        +void OnInitialized()
    }

    class LayoutsCodeBehind {
        +IStringLocalizer_Menus_ MenuLocalizer
        +IEnumerable~MenuItem~ IconSideMenuItems1
        +IEnumerable~MenuItem~ IconSideMenuItems2
        +Task OnInitializedAsync()
    }

    class IStringLocalizer_Menus_ {
        <<interface>>
    }

    class ListGroupsRazor {
        +IStringLocalizer_Foo_ FooLocalizer
    }

    class SlideButtonsCodeBehind {
        +IStringLocalizer_Foo_ FooLocalizer
        +Placement Placement
        +IEnumerable~SelectedItem~ Items
    }

    class TablesExcelCodeBehind {
        +IStringLocalizer_Foo_ FooLocalizer
        +List~Foo~ Items
        +void OnInitialized()
    }

    class TablesExportCodeBehind {
        +IStringLocalizer_Foo_ FooLocalizer
        +List~Foo~ Items
        +void OnInitialized()
    }

    class TablesFixedColumnCodeBehind {
        +IStringLocalizer_Foo_ FooLocalizer
        +List~Foo~ Items
        +void OnInitialized()
    }

    class TablesFooterCodeBehind {
        +IStringLocalizer_Foo_ FooLocalizer
        +List~Foo~ Items
        +string Left
        +string Center
        +string Right
        +void OnInitialized()
    }

    class TablesHeaderCodeBehind {
        +IStringLocalizer_Foo_ FooLocalizer
        +List~Foo~ Items
        +void OnInitialized()
    }

    class TablesLoadingCodeBehind {
        +IStringLocalizer_Foo_ FooLocalizer
        +List~Foo~ Items
        +IEnumerable~SelectedItem~ Hobbies
        +void OnInitialized()
    }

    class TablesLookupCodeBehind {
        +IStringLocalizer_Foo_ FooLocalizer
        +List~Foo~ Items
        +Task OnInitializedAsync()
    }

    class TablesPagesCodeBehind {
        +IStringLocalizer_Foo_ FooLocalizer
        +List~Foo~ Items
        +void OnInitialized()
    }

    class TablesSelectionCodeBehind {
        +IStringLocalizer_Foo_ FooLocalizer
        +List~Foo~ Items
        +List~Foo~ SelectedItems
        +List~Foo~ _scrollItems
        +void OnInitialized()
    }

    class TablesToolbarCodeBehind {
        +IStringLocalizer_Foo_ FooLocalizer
        +List~Foo~ Items
        +void OnInitialized()
    }

    class TablesTrackingCodeBehind {
        +IStringLocalizer_Foo_ FooLocalizer
        +List~Foo~ Items
        +void OnInitialized()
    }

    class TablesTreeCodeBehind {
        +IStringLocalizer_Foo_ FooLocalizer
        +List~TreeFoo~ TreeItems
        +Task~QueryData_TreeFoo_~ OnQueryAsync(QueryPageOptions options)
        +Task~IEnumerable~TableTreeNode_TreeFoo_~~ OnTreeExpand(TreeFoo foo)
    }

    class TablesVirtualizationCodeBehind {
        +IStringLocalizer_Foo_ FooLocalizer
        +List~Foo~ Items
        +List~SegmentedOption_bool_~ _fixedFooterSegments
        +void OnInitialized()
    }

    class TablesWrapCodeBehind {
        +IStringLocalizer_Foo_ FooLocalizer
        +List~Foo~ CellItems
        +Task~QueryData_Foo_~ OnQueryAsync(QueryPageOptions options)
    }

    class TreeViewsCodeBehind {
        +IStringLocalizer_Foo_ FooLocalizer
        +Foo Model
    }

    class ValidateFormsRazor {
        +IStringLocalizer_Foo_ FooLocalizer
    }

    class WinBoxesRazor {
        +IStringLocalizer_Foo_ FooLocalizer
    }

    class BaseDockView1 {
        +IStringLocalizer_Foo_ FooLocalizer
        +List~Foo~ Items
        +List~TreeFoo~ TreeItems
        +void OnInitialized()
        +Task~IEnumerable~TableTreeNode_TreeFoo_~~ OnTreeExpand(TreeFoo foo)
    }

    class BaseDockView2 {
        +IStringLocalizer_Foo_ FooLocalizer
        +List~Foo~ Items
        +List~TreeFoo~ TreeItems
        +void OnInitialized()
        +Task~IEnumerable~TableTreeNode_TreeFoo_~~ OnTreeExpand(TreeFoo foo)
    }

    Foo ..> IStringLocalizer_Foo_ : uses
    SelectGenerics --> IStringLocalizer_Foo_ : injects
    Selects --> IStringLocalizer_Foo_ : injects
    CheckboxLists --> IStringLocalizer_Foo_ : injects
    LabelsCodeBehind --> IStringLocalizer_Foo_ : injects
    LabelsCodeBehind --> IStringLocalizer_ValidateForms_ : injects
    FormInlineSwitch --> IStringLocalizer_FormInlineSwitch_ : injects
    CustomerFilter --> IStringLocalizer_CustomerFilter_ : injects
    ListGroups --> IStringLocalizer_Foo_ : injects
    TablesDynamic --> IStringLocalizer_Foo_ : injects
    TablesEdit --> IStringLocalizer_Foo_ : injects
    TablesEdit --> FooDataService_Foo_ : creates
    FooDataService_Foo_ --> IStringLocalizer_Foo_ : depends
    RowsCodeBehind --> IStringLocalizer_Foo_ : injects
    SearchesCodeBehind --> IStringLocalizer_Foo_ : injects
    TablesAutoRefreshCodeBehind --> IStringLocalizer_Foo_ : injects
    TablesDynamicExcelCodeBehind --> IStringLocalizer_Foo_ : injects
    ValidateFormsCodeBehind --> IStringLocalizer_Foo_ : injects
    DemoHobbyTemplate --> IStringLocalizer_Foo_ : injects
    ContextMenusCodeBehind --> IStringLocalizer_Foo_ : injects
    DialogsCodeBehind --> IStringLocalizer_Foo_ : injects
    Dom2ImagesCodeBehind --> IStringLocalizer_Foo_ : injects
    Html2ImagesCodeBehind --> IStringLocalizer_Foo_ : injects
    Html2PdfsCodeBehind --> IStringLocalizer_Foo_ : injects
    InputGroupsCodeBehind --> IStringLocalizer_Foo_ : injects
    LayoutsCodeBehind --> IStringLocalizer_Menus_ : injects
    SlideButtonsCodeBehind --> IStringLocalizer_Foo_ : injects
    TablesExcelCodeBehind --> IStringLocalizer_Foo_ : injects
    TablesExportCodeBehind --> IStringLocalizer_Foo_ : injects
    TablesFixedColumnCodeBehind --> IStringLocalizer_Foo_ : injects
    TablesFooterCodeBehind --> IStringLocalizer_Foo_ : injects
    TablesHeaderCodeBehind --> IStringLocalizer_Foo_ : injects
    TablesLoadingCodeBehind --> IStringLocalizer_Foo_ : injects
    TablesLookupCodeBehind --> IStringLocalizer_Foo_ : injects
    TablesPagesCodeBehind --> IStringLocalizer_Foo_ : injects
    TablesSelectionCodeBehind --> IStringLocalizer_Foo_ : injects
    TablesToolbarCodeBehind --> IStringLocalizer_Foo_ : injects
    TablesTrackingCodeBehind --> IStringLocalizer_Foo_ : injects
    TablesTreeCodeBehind --> IStringLocalizer_Foo_ : injects
    TablesVirtualizationCodeBehind --> IStringLocalizer_Foo_ : injects
    TablesWrapCodeBehind --> IStringLocalizer_Foo_ : injects
    TreeViewsCodeBehind --> IStringLocalizer_Foo_ : injects
    BaseDockView1 --> IStringLocalizer_Foo_ : injects
    BaseDockView2 --> IStringLocalizer_Foo_ : injects
    WinBoxesRazor --> IStringLocalizer_Foo_ : injects
    ValidateFormsRazor --> IStringLocalizer_Foo_ : injects
    ListGroupsRazor --> IStringLocalizer_Foo_ : injects
Loading

Class diagram for removal of EventTable-based event documentation

classDiagram
    direction LR

    class EventItem {
        +string Name
        +string Description
        +string Type
    }

    class EventTable {
        +IEnumerable~EventItem~ Items
        +void Render()
    }

    class AttributeTable {
        +Type Type
        +void Render()
    }

    class RadiosSampleBefore {
        +EventItem[] GetEvents()
        +void BuildPage()
    }

    class RadiosSampleAfter {
        +void BuildPage()
    }

    class AlertsSampleBefore {
        +EventItem[] GetEvents()
        +void BuildPage()
    }

    class AlertsSampleAfter {
        +void BuildPage()
    }

    class CalendarsSampleBefore {
        +EventItem[] GetEvents()
        +void BuildPage()
    }

    class CalendarsSampleAfter {
        +void BuildPage()
    }

    class CascadersSampleBefore {
        +EventItem[] GetEvents()
        +void BuildPage()
    }

    class CascadersSampleAfter {
        +void BuildPage()
    }

    class CheckboxListsSampleBefore {
        +EventItem[] GetEvents()
        +void BuildPage()
    }

    class CheckboxListsSampleAfter {
        +void BuildPage()
    }

    class CheckboxsSampleBefore {
        +EventItem[] GetEvents()
        +void BuildPage()
    }

    class CheckboxsSampleAfter {
        +void BuildPage()
    }

    class DateTimePickersSampleBefore {
        +EventItem[] GetEvents()
        +void BuildPage()
    }

    class DateTimePickersSampleAfter {
        +void BuildPage()
    }

    class DateTimeRangesSampleBefore {
        +List~EventItem~ GetEvents()
        +void BuildPage()
    }

    class DateTimeRangesSampleAfter {
        +void BuildPage()
    }

    class DropdownsSampleBefore {
        +EventItem[] GetEvents()
        +void BuildPage()
    }

    class DropdownsSampleAfter {
        +void BuildPage()
    }

    class MultiSelectsSampleBefore {
        +EventItem[] GetEvents()
        +void BuildPage()
    }

    class MultiSelectsSampleAfter {
        +void BuildPage()
    }

    class PopoverConfirmsSampleBefore {
        +EventItem[] GetEvents()
        +void BuildPage()
    }

    class PopoverConfirmsSampleAfter {
        +void BuildPage()
    }

    class RatesSampleBefore {
        +EventItem[] GetEvents()
        +void BuildPage()
    }

    class RatesSampleAfter {
        +void BuildPage()
    }

    class SlidersSampleBefore {
        +EventItem[] GetEvents()
        +void BuildPage()
    }

    class SlidersSampleAfter {
        +void BuildPage()
    }

    class SwitchesSampleBefore {
        +EventItem[] GetEvents()
        +void BuildPage()
    }

    class SwitchesSampleAfter {
        +void BuildPage()
    }

    class TagsSampleBefore {
        +EventItem[] GetEvents()
        +void BuildPage()
    }

    class TagsSampleAfter {
        +void BuildPage()
    }

    class TogglesSampleBefore {
        +EventItem[] GetEvents()
        +void BuildPage()
    }

    class TogglesSampleAfter {
        +void BuildPage()
    }

    class TransfersSampleBefore {
        +EventItem[] GetEvents()
        +void BuildPage()
    }

    class TransfersSampleAfter {
        +void BuildPage()
    }

    class SelectGenericsSampleBefore {
        +EventItem[] GetEvents()
        +void BuildPage()
    }

    class SelectGenericsSampleAfter {
        +void BuildPage()
    }

    class SelectsSampleBefore {
        +EventItem[] GetEvents()
        +void BuildPage()
    }

    class SelectsSampleAfter {
        +void BuildPage()
    }

    class ContextMenusSampleBefore {
        +EventItem[] GetEvents()
        +void BuildPage()
    }

    class ContextMenusSampleAfter {
        +void BuildPage()
    }

    RadiosSampleBefore --> EventItem : creates
    RadiosSampleBefore --> EventTable : passes Items
    RadiosSampleBefore --> AttributeTable : passes Type

    AlertsSampleBefore --> EventItem
    AlertsSampleBefore --> EventTable
    AlertsSampleBefore --> AttributeTable

    CalendarsSampleBefore --> EventItem
    CalendarsSampleBefore --> EventTable
    CalendarsSampleBefore --> AttributeTable

    CascadersSampleBefore --> EventItem
    CascadersSampleBefore --> EventTable
    CascadersSampleBefore --> AttributeTable

    CheckboxListsSampleBefore --> EventItem
    CheckboxListsSampleBefore --> EventTable
    CheckboxListsSampleBefore --> AttributeTable

    CheckboxsSampleBefore --> EventItem
    CheckboxsSampleBefore --> EventTable
    CheckboxsSampleBefore --> AttributeTable

    DateTimePickersSampleBefore --> EventItem
    DateTimePickersSampleBefore --> EventTable
    DateTimePickersSampleBefore --> AttributeTable

    DateTimeRangesSampleBefore --> EventItem
    DateTimeRangesSampleBefore --> EventTable
    DateTimeRangesSampleBefore --> AttributeTable

    DropdownsSampleBefore --> EventItem
    DropdownsSampleBefore --> EventTable
    DropdownsSampleBefore --> AttributeTable

    MultiSelectsSampleBefore --> EventItem
    MultiSelectsSampleBefore --> EventTable
    MultiSelectsSampleBefore --> AttributeTable

    PopoverConfirmsSampleBefore --> EventItem
    PopoverConfirmsSampleBefore --> EventTable
    PopoverConfirmsSampleBefore --> AttributeTable

    RatesSampleBefore --> EventItem
    RatesSampleBefore --> EventTable
    RatesSampleBefore --> AttributeTable

    SlidersSampleBefore --> EventItem
    SlidersSampleBefore --> EventTable
    SlidersSampleBefore --> AttributeTable

    SwitchesSampleBefore --> EventItem
    SwitchesSampleBefore --> EventTable
    SwitchesSampleBefore --> AttributeTable

    TagsSampleBefore --> EventItem
    TagsSampleBefore --> EventTable
    TagsSampleBefore --> AttributeTable

    TogglesSampleBefore --> EventItem
    TogglesSampleBefore --> EventTable
    TogglesSampleBefore --> AttributeTable

    TransfersSampleBefore --> EventItem
    TransfersSampleBefore --> EventTable
    TransfersSampleBefore --> AttributeTable

    SelectGenericsSampleBefore --> EventItem
    SelectGenericsSampleBefore --> EventTable
    SelectGenericsSampleBefore --> AttributeTable

    SelectsSampleBefore --> EventItem
    SelectsSampleBefore --> EventTable
    SelectsSampleBefore --> AttributeTable

    ContextMenusSampleBefore --> EventItem
    ContextMenusSampleBefore --> EventTable
    ContextMenusSampleBefore --> AttributeTable

    RadiosSampleAfter --> AttributeTable : uses only
    AlertsSampleAfter --> AttributeTable
    CalendarsSampleAfter --> AttributeTable
    CascadersSampleAfter --> AttributeTable
    CheckboxListsSampleAfter --> AttributeTable
    CheckboxsSampleAfter --> AttributeTable
    DateTimePickersSampleAfter --> AttributeTable
    DateTimeRangesSampleAfter --> AttributeTable
    DropdownsSampleAfter --> AttributeTable
    MultiSelectsSampleAfter --> AttributeTable
    PopoverConfirmsSampleAfter --> AttributeTable
    RatesSampleAfter --> AttributeTable
    SlidersSampleAfter --> AttributeTable
    SwitchesSampleAfter --> AttributeTable
    TagsSampleAfter --> AttributeTable
    TogglesSampleAfter --> AttributeTable
    TransfersSampleAfter --> AttributeTable
    SelectGenericsSampleAfter --> AttributeTable
    SelectsSampleAfter --> AttributeTable
    ContextMenusSampleAfter --> AttributeTable
Loading

Flow diagram for documentation rendering before and after removing EventTable

flowchart LR
    A[SampleComponent page load] --> B[Render demo content]
    B --> C[Render AttributeTable]

    subgraph BeforeChange
        C --> D[Call GetEvents on sample code behind]
        D --> E[Create EventItem collection]
        E --> F[Render EventTable with Items]
    end

    subgraph AfterChange
        C --> G[No event metadata rendering]
    end

    style BeforeChange fill:#fdf5e6,stroke:#e0c080,stroke-width:1px
    style AfterChange fill:#e6f7ff,stroke:#80b5e0,stroke-width:1px
Loading

File-Level Changes

Change Details Files
Standardize localization field names for Foo and related resources across samples and components.
  • Rename injected IStringLocalizer fields from LocalizerFoo to FooLocalizer in sample .razor and .razor.cs files and update all call sites.
  • Rename other injected localizers to be component-specific (e.g., LocalizerForm to FormLocalizer, LocalizerMenu to MenuLocalizer) and adjust usages.
  • Propagate new localizer names into Foo.GenerateFoo / Foo.Generate / Foo.GenerateHobbies calls and inline localization lookups.
src/BootstrapBlazor.Server/Components/Samples/SelectGenerics.razor.cs
src/BootstrapBlazor.Server/Components/Samples/SelectGenerics.razor
src/BootstrapBlazor.Server/Components/Samples/Selects.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Selects.razor
src/BootstrapBlazor.Server/Components/Samples/CheckboxLists.razor.cs
src/BootstrapBlazor.Server/Components/Samples/CheckboxLists.razor
src/BootstrapBlazor.Server/Components/Samples/Checkboxs.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Checkboxs.razor
src/BootstrapBlazor.Server/Components/Samples/DateTimeRanges.razor.cs
src/BootstrapBlazor.Server/Components/Samples/DateTimeRanges.razor
src/BootstrapBlazor.Server/Components/Samples/Labels.razor
src/BootstrapBlazor.Server/Components/Samples/Labels.razor.cs
src/BootstrapBlazor.Server/Components/Samples/MultiSelects.razor.cs
src/BootstrapBlazor.Server/Components/Samples/MultiSelects.razor
src/BootstrapBlazor.Server/Components/Samples/DateTimePickers.razor.cs
src/BootstrapBlazor.Server/Components/Samples/DateTimePickers.razor
src/BootstrapBlazor.Server/Components/Samples/Dropdowns.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Dropdowns.razor
src/BootstrapBlazor.Server/Components/Samples/PopoverConfirms.razor.cs
src/BootstrapBlazor.Server/Components/Samples/PopoverConfirms.razor
src/BootstrapBlazor.Server/Components/Samples/Radios.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Radios.razor
src/BootstrapBlazor.Server/Components/Samples/Transfers.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Transfers.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesDynamic.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Table/TablesDynamic.razor
src/BootstrapBlazor.Server/Components/Samples/Alerts.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Alerts.razor
src/BootstrapBlazor.Server/Components/Samples/AutoFills.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Calendars.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Calendars.razor
src/BootstrapBlazor.Server/Components/Samples/Sliders.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Sliders.razor
src/BootstrapBlazor.Server/Components/Samples/Switches.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Switches.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesTree.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Table/TablesTree.razor
src/BootstrapBlazor.Server/Components/Samples/Tags.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Tags.razor
src/BootstrapBlazor.Server/Components/Samples/Toggles.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Toggles.razor
src/BootstrapBlazor.Server/Components/Samples/Cascaders.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Cascaders.razor
src/BootstrapBlazor.Server/Components/Samples/Rows.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Rows.razor
src/BootstrapBlazor.Server/Components/Samples/Searches.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Searches.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesAutoRefresh.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Table/TablesAutoRefresh.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesDynamicExcel.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Table/TablesDynamicExcel.razor
src/BootstrapBlazor.Server/Components/Samples/ValidateForms.razor.cs
src/BootstrapBlazor.Server/Components/Samples/ValidateForms.razor
src/BootstrapBlazor.Server/Components/Samples/ContextMenus.razor.cs
src/BootstrapBlazor.Server/Components/Samples/ContextMenus.razor
src/BootstrapBlazor.Server/Components/Samples/Dialogs.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Dom2Images.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Html2Images.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Html2Pdfs.razor.cs
src/BootstrapBlazor.Server/Components/Samples/InputGroups.razor
src/BootstrapBlazor.Server/Components/Samples/InputGroups.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Layouts.razor
src/BootstrapBlazor.Server/Components/Samples/Layouts.razor.cs
src/BootstrapBlazor.Server/Components/Samples/ListGroups.razor.cs
src/BootstrapBlazor.Server/Components/Samples/SlideButtons.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Table/TablesDialog.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Table/TablesDialog.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesLoading.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Table/TablesLoading.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesSelection.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Table/TablesSelection.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesWrap.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Table/TablesWrap.razor
src/BootstrapBlazor.Server/Components/Samples/Searches.razor
src/BootstrapBlazor.Server/Components/Samples/TreeViews.razor
src/BootstrapBlazor.Server/Components/Samples/TreeViews.razor.cs
src/BootstrapBlazor.Server/Components/Samples/WinBoxes.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesExcel.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Table/TablesExcel.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesExport.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Table/TablesExport.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesFixedColumn.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Table/TablesFixedColumn.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesFooter.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Table/TablesFooter.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesHeader.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Table/TablesHeader.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesLoading.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesLookup.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Table/TablesLookup.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesPages.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Table/TablesPages.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesToolbar.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Table/TablesToolbar.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesTracking.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Table/TablesTracking.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesTree.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Table/TablesTree.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesVirtualization.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Table/TablesVirtualization.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesWrap.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Table/TablesWrap.razor
src/BootstrapBlazor.Server/Components/Samples/Rows.razor
src/BootstrapBlazor.Server/Components/Samples/Searches.razor
src/BootstrapBlazor.Server/Components/Samples/ValidateForms.razor
src/BootstrapBlazor.Server/Components/Samples/WinBoxes.razor
Remove EventTable-based event documentation from sample components in favor of a simplified docs experience.
  • Delete private GetEvents() helpers returning EventItem[] or List from many sample .razor.cs files.
  • Remove corresponding usages from the related .razor files so event docs are no longer rendered in those demos.
src/BootstrapBlazor.Server/Components/Samples/SelectGenerics.razor.cs
src/BootstrapBlazor.Server/Components/Samples/SelectGenerics.razor
src/BootstrapBlazor.Server/Components/Samples/Selects.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Selects.razor
src/BootstrapBlazor.Server/Components/Samples/CheckboxLists.razor.cs
src/BootstrapBlazor.Server/Components/Samples/CheckboxLists.razor
src/BootstrapBlazor.Server/Components/Samples/DateTimeRanges.razor.cs
src/BootstrapBlazor.Server/Components/Samples/DateTimeRanges.razor
src/BootstrapBlazor.Server/Components/Samples/MultiSelects.razor.cs
src/BootstrapBlazor.Server/Components/Samples/MultiSelects.razor
src/BootstrapBlazor.Server/Components/Samples/Checkboxs.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Checkboxs.razor
src/BootstrapBlazor.Server/Components/Samples/DateTimePickers.razor.cs
src/BootstrapBlazor.Server/Components/Samples/DateTimePickers.razor
src/BootstrapBlazor.Server/Components/Samples/Dropdowns.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Dropdowns.razor
src/BootstrapBlazor.Server/Components/Samples/PopoverConfirms.razor.cs
src/BootstrapBlazor.Server/Components/Samples/PopoverConfirms.razor
src/BootstrapBlazor.Server/Components/Samples/Radios.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Radios.razor
src/BootstrapBlazor.Server/Components/Samples/Transfers.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Transfers.razor
src/BootstrapBlazor.Server/Components/Samples/Alerts.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Alerts.razor
src/BootstrapBlazor.Server/Components/Samples/Calendars.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Calendars.razor
src/BootstrapBlazor.Server/Components/Samples/Sliders.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Sliders.razor
src/BootstrapBlazor.Server/Components/Samples/Switches.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Switches.razor
src/BootstrapBlazor.Server/Components/Samples/Tags.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Tags.razor
src/BootstrapBlazor.Server/Components/Samples/Toggles.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Toggles.razor
src/BootstrapBlazor.Server/Components/Samples/Cascaders.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Cascaders.razor
src/BootstrapBlazor.Server/Components/Samples/PopoverConfirms.razor
src/BootstrapBlazor.Server/Components/Samples/Rates.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Rates.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesAutoRefresh.razor
src/BootstrapBlazor.Server/Components/Samples/MultiSelects.razor
Align component-specific infrastructure and documentation with new patterns.
  • Change FormInlineSwitch and CustomerFilter components to inject localizers typed to themselves instead of unrelated sample components, and update usages accordingly.
  • Update Block.BuildRenderTree XML doc comments to use .
  • Broaden JsonTest localization key search to also treat Localizer["Key", ...] and Localizer[nameof(Key), ...] usages as valid.
  • Adjust obsolete attribute message on ConfigureIPLocatorOption for bilingual guidance and clearer deprecation message.
  • Apply small formatting cleanups (BOM removal, spacing fixes, page directive formatting) in several Razor and C# files.
src/BootstrapBlazor.Server/Components/Components/FormInlineSwitch.razor.cs
src/BootstrapBlazor.Server/Components/Components/CustomerFilter.razor.cs
src/BootstrapBlazor/Components/Block/Block.cs
test/UnitTest.Localization/JsonTest.cs
src/BootstrapBlazor/Extensions/BootstrapBlazorServiceCollectionExtensions.cs
src/BootstrapBlazor.Server/Components/Samples/DemoHobbyTemplate.razor
src/BootstrapBlazor.Server/Components/Samples/DockViews/BaseDockView.cs
src/BootstrapBlazor.Server/Components/Samples/DockViews2/BaseDockView.cs
src/BootstrapBlazor.Server/Components/Samples/Table/TablesAutoRefresh.razor.cs
src/BootstrapBlazor.Server/Components/Samples/SelectGenerics.razor.cs
src/BootstrapBlazor.Server/Components/Samples/CheckboxLists.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Checkboxs.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Alerts.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Calendars.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Sliders.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Switches.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Tags.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Toggles.razor.cs
src/BootstrapBlazor.Server/Components/Samples/Cascaders.razor.cs
src/BootstrapBlazor.Server/Components/Samples/WinBoxes.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesAutoRefresh.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesDialog.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesDynamic.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesDynamicExcel.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesExcel.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesExport.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesFixedColumn.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesFooter.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesHeader.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesLoading.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesLookup.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesPages.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesSelection.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesToolbar.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesTracking.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesTree.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesVirtualization.razor
src/BootstrapBlazor.Server/Components/Samples/Table/TablesWrap.razor
src/BootstrapBlazor.Server/Components/Samples/Alerts.razor
src/BootstrapBlazor.Server/Components/Samples/Calendars.razor
src/BootstrapBlazor.Server/Components/Samples/CheckboxLists.razor
src/BootstrapBlazor.Server/Components/Samples/Checkboxs.razor
src/BootstrapBlazor.Server/Components/Samples/DateTimePickers.razor
src/BootstrapBlazor.Server/Components/Samples/DateTimeRanges.razor
src/BootstrapBlazor.Server/Components/Samples/Dropdowns.razor
src/BootstrapBlazor.Server/Components/Samples/MultiSelects.razor
src/BootstrapBlazor.Server/Components/Samples/PopoverConfirms.razor
src/BootstrapBlazor.Server/Components/Samples/Radios.razor
src/BootstrapBlazor.Server/Components/Samples/Tags.razor
src/BootstrapBlazor.Server/Components/Samples/Toggles.razor
src/BootstrapBlazor.Server/Components/Samples/Transfers.razor
src/BootstrapBlazor.Server/Components/Samples/Rates.razor
src/BootstrapBlazor.Server/Components/Samples/Layouts.razor
src/BootstrapBlazor.Server/Components/Samples/InputGroups.razor

Assessment against linked issues

Issue Objective Addressed Explanation
#7602 Remove the EventTable component from the documentation and sample components, including its usages (e.g., <EventTable ...>) and associated helper methods.

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Copy link
Copy Markdown
Contributor

@sourcery-ai sourcery-ai Bot left a comment

Choose a reason for hiding this comment

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

Hey - I've found 1 issue

Prompt for AI Agents
Please address the comments from this code review:

## Individual Comments

### Comment 1
<location> `src/BootstrapBlazor.Server/Components/Samples/AutoFills.razor.cs:65-68` </location>
<code_context>
         Model3 = Items3.First();

-        Items4 = Foo.GenerateFoo(LocalizerFoo);
+        Items4 = Foo.GenerateFoo(FooLocalizer);
         Model4 = Items3.First();

-        Items5 = Foo.GenerateFoo(LocalizerFoo);
+        Items5 = Foo.GenerateFoo(FooLocalizer);
         Model5 = Items3.First();
     }
</code_context>

<issue_to_address>
**issue (bug_risk):** Models 4 and 5 are initialized from Items3 instead of their corresponding item collections.

`Items4`/`Items5` are generated, but `Model4`/`Model5` are still set from `Items3.First()`, so the models don’t match their collections. This can cause confusing behavior if `Items3` differs from `Items4`/`Items5`. Please initialize `Model4` from `Items4` and `Model5` from `Items5` instead.
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Comment thread src/BootstrapBlazor.Server/Components/Samples/AutoFills.razor.cs
@ArgoZhang ArgoZhang merged commit beee938 into main Jan 30, 2026
4 checks passed
@ArgoZhang ArgoZhang deleted the doc-xml branch January 30, 2026 04:55
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This pull request removes the EventTable component and related event documentation, while also improving naming consistency for localizers throughout the codebase.

Changes:

  • Removed all EventTable component usages and GetEvents() method implementations from sample components
  • Removed event and method documentation entries from zh-CN.json and en-US.json localization files
  • Renamed localizer properties for consistency (e.g., LocalizerFooFooLocalizer, LocalizerMenuMenuLocalizer, LocalizerRowsLocalizer)
  • Added new localization entries for CustomerFilter and FormInlineSwitch components
  • Updated FormInlineSwitch and CustomerFilter to use their own localizers instead of relying on other component localizers
  • Updated Obsolete attribute to include English translation
  • Enhanced localization tests to support additional localizer usage patterns
  • Minor code quality improvements (BOM removal, spacing fixes, documentation improvements)

Reviewed changes

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

Show a summary per file
File Description
test/UnitTest.Localization/JsonTest.cs Added test patterns to detect localizer usage with format parameters
src/BootstrapBlazor/Extensions/BootstrapBlazorServiceCollectionExtensions.cs Updated Obsolete attribute with English translation
src/BootstrapBlazor/Components/Block/Block.cs Changed documentation to use inheritdoc for BuildRenderTree method
src/BootstrapBlazor.Server/Locales/zh-CN.json Removed event/method documentation entries; added CustomerFilter and FormInlineSwitch localizations; updated "Row布局组件" to "Row 布局组件"
src/BootstrapBlazor.Server/Locales/en-US.json Removed event/method documentation entries; added CustomerFilter and FormInlineSwitch localizations
Multiple .razor and .razor.cs files Removed EventTable usages and GetEvents() methods; renamed localizer injections from LocalizerFoo to FooLocalizer
src/BootstrapBlazor.Server/Components/Components/FormInlineSwitch.razor.cs Changed from using Rows localizer to its own localizer; removed unused import
src/BootstrapBlazor.Server/Components/Components/CustomerFilter.razor.cs Changed from using TablesFilter localizer to its own localizer; removed unused import
src/BootstrapBlazor.Server/Components/Components/DemoHobbyTemplate.razor Updated localizer name from LocalizerFoo to FooLocalizer

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@codecov
Copy link
Copy Markdown

codecov Bot commented Jan 30, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (1f79baf) to head (fd54f88).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##              main     #7603   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files          749       749           
  Lines        32988     32988           
  Branches      4578      4578           
=========================================
  Hits         32988     32988           
Flag Coverage Δ
BB 100.00% <ø> (?)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

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

Labels

documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

doc(EventTable): remove EventTable component

2 participants