Fix for TabPanel is not updating the UI. #4778
Modified that TabStrip and TabPane, now when the ActiveTab is changed the TabPanel is selected
This commit is contained in:
		| @ -30,6 +30,8 @@ else | ||||
|     [Parameter] | ||||
|     public SecurityAccessLevel? Security { get; set; } // optional - can be used to specify SecurityAccessLevel | ||||
|  | ||||
|     public bool IsActive { get; set; } | ||||
|  | ||||
|     protected override void OnParametersSet() | ||||
|     { | ||||
|         base.OnParametersSet(); | ||||
|  | ||||
| @ -8,18 +8,9 @@ | ||||
|                 @foreach (TabPanel tabPanel in _tabPanels) | ||||
|                 { | ||||
|                     <li class="nav-item" @key="tabPanel.Name"> | ||||
|                         @if (tabPanel.Name.ToLower() == ActiveTab.ToLower()) | ||||
|                         { | ||||
|                             <a class="nav-link active" data-bs-toggle="tab" href="#@(Id + tabPanel.Name)" role="tab" @onclick:preventDefault="true"> | ||||
|                                 @tabPanel.DisplayHeading() | ||||
|                             </a> | ||||
|                         } | ||||
|                         else | ||||
|                         { | ||||
| 							<a class="nav-link" data-bs-toggle="tab" href="#@(Id + tabPanel.Name)" role="tab" @onclick:preventDefault="true"> | ||||
|                                 @tabPanel.DisplayHeading() | ||||
|                             </a> | ||||
|                         } | ||||
|                         <a class="nav-link @(tabPanel.IsActive ? "active" : "")" data-bs-toggle="tab" href="#@(Id + tabPanel.Name)" role="tab" @onclick:preventDefault="true" @onclick="() => SetActiveTab(tabPanel.Name)"> | ||||
|                             @tabPanel.DisplayHeading() | ||||
|                         </a> | ||||
|                     </li> | ||||
|                 } | ||||
|             </ul> | ||||
| @ -59,16 +50,43 @@ | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	protected override void OnParametersSet() | ||||
|     protected override void OnParametersSet() | ||||
|     { | ||||
|         base.OnParametersSet(); | ||||
|  | ||||
|         if (PageState.QueryString.ContainsKey("tab")) | ||||
|         { | ||||
|             ActiveTab = PageState.QueryString["tab"]; | ||||
|         } | ||||
|  | ||||
|         if (_tabPanels == null || Refresh) | ||||
|         { | ||||
|             _tabPanels = new List<TabPanel>(); | ||||
|         } | ||||
|  | ||||
|         // Ensure the active tab is valid and exists | ||||
|         if (!string.IsNullOrEmpty(ActiveTab) && _tabPanels.Any()) | ||||
|         { | ||||
|             var activeTabExists = _tabPanels.Any(tp => tp.Name.Equals(ActiveTab, StringComparison.OrdinalIgnoreCase)); | ||||
|             if (!activeTabExists) | ||||
|             { | ||||
|                 ActiveTab = _tabPanels[0].Name; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         // Update the active tab in the UI | ||||
|         UpdateActiveTab(); | ||||
|     } | ||||
|  | ||||
|     private void UpdateActiveTab() | ||||
|     { | ||||
|         if (!string.IsNullOrEmpty(ActiveTab) && _tabPanels != null) | ||||
|         { | ||||
|             foreach (var tabPanel in _tabPanels) | ||||
|             { | ||||
|                 tabPanel.IsActive = tabPanel.Name.Equals(ActiveTab, StringComparison.OrdinalIgnoreCase); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     internal void AddTabPanel(TabPanel tabPanel) | ||||
| @ -76,12 +94,20 @@ | ||||
|         if (!_tabPanels.Exists(item => item.Name == tabPanel.Name) && IsAuthorized(tabPanel)) | ||||
|         { | ||||
|             _tabPanels.Add(tabPanel); | ||||
|             if (string.IsNullOrEmpty(ActiveTab)) | ||||
|             { | ||||
|                 ActiveTab = tabPanel.Name; | ||||
|             } | ||||
|             UpdateActiveTab(); | ||||
|             StateHasChanged(); | ||||
|         } | ||||
|         if (string.IsNullOrEmpty(ActiveTab)) | ||||
|         { | ||||
|             ActiveTab = tabPanel.Name; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void SetActiveTab(string tabName) | ||||
|     { | ||||
|         ActiveTab = tabName; | ||||
|         UpdateActiveTab(); | ||||
|         StateHasChanged(); | ||||
|     } | ||||
|  | ||||
|     private bool IsAuthorized(TabPanel tabPanel) | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Leigh Pointer
					Leigh Pointer