Merge pull request #4828 from leigh-pointer/TabChange
Fix for Tabpanel is not updating the UI. #4778
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