fix #1305 - tabpanel loses focus

This commit is contained in:
Shaun Walker 2021-05-03 08:19:25 -04:00
parent 42c4b351f3
commit e836e27a5a
4 changed files with 41 additions and 26 deletions

View File

@ -5,7 +5,7 @@
@inject IThemeService ThemeService @inject IThemeService ThemeService
@inject IStringLocalizer<Add> Localizer @inject IStringLocalizer<Add> Localizer
<TabStrip> <TabStrip Refresh="@_refresh">
<TabPanel Name="Settings" ResourceKey="Settings"> <TabPanel Name="Settings" ResourceKey="Settings">
@if (_themeList != null) @if (_themeList != null)
{ {
@ -190,6 +190,7 @@
private Type _themeSettingsType; private Type _themeSettingsType;
private object _themeSettings; private object _themeSettings;
private RenderFragment ThemeSettingsComponent { get; set; } private RenderFragment ThemeSettingsComponent { get; set; }
private bool _refresh = false;
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
@ -280,6 +281,7 @@
builder.CloseComponent(); builder.CloseComponent();
}; };
} }
_refresh = true;
} }
} }

View File

@ -6,7 +6,7 @@
@inject IThemeService ThemeService @inject IThemeService ThemeService
@inject IStringLocalizer<Edit> Localizer @inject IStringLocalizer<Edit> Localizer
<TabStrip> <TabStrip Refresh="@_refresh">
<TabPanel Name="Settings" ResourceKey="Settings"> <TabPanel Name="Settings" ResourceKey="Settings">
@if (_themeList != null) @if (_themeList != null)
{ {
@ -211,6 +211,7 @@
private Type _themeSettingsType; private Type _themeSettingsType;
private object _themeSettings; private object _themeSettings;
private RenderFragment ThemeSettingsComponent { get; set; } private RenderFragment ThemeSettingsComponent { get; set; }
private bool _refresh = false;
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
@ -354,6 +355,7 @@
builder.CloseComponent(); builder.CloseComponent();
}; };
} }
_refresh = true;
} }
} }

View File

@ -34,7 +34,15 @@ else
protected override async Task OnParametersSetAsync() protected override async Task OnParametersSetAsync()
{ {
_roles = await RoleService.GetRolesAsync(PageState.Site.SiteId); if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host))
{
_roles = await RoleService.GetRolesAsync(PageState.Site.SiteId, true);
_roles = _roles.Where(item => item.Name != RoleNames.Everyone).ToList();
}
else
{
_roles = await RoleService.GetRolesAsync(PageState.Site.SiteId);
}
} }
private async Task DeleteRole(Role role) private async Task DeleteRole(Role role)

View File

@ -7,23 +7,20 @@
<ul class="nav nav-tabs" role="tablist"> <ul class="nav nav-tabs" role="tablist">
@foreach (TabPanel tabPanel in _tabPanels) @foreach (TabPanel tabPanel in _tabPanels)
{ {
@if (IsAuthorized(tabPanel)) <li class="nav-item" @key="tabPanel.Name">
{ @if (tabPanel.Name == ActiveTab)
<li class="nav-item" @key="tabPanel.Name"> {
@if (tabPanel.Name == ActiveTab) <a class="nav-link active" data-toggle="tab" href="#@tabPanel.Name" role="tab" @onclick:preventDefault="true">
{ @tabPanel.DisplayHeading()
<a class="nav-link active" data-toggle="tab" href="#@tabPanel.Name" role="tab" @onclick:preventDefault="true"> </a>
@tabPanel.DisplayHeading() }
</a> else
} {
else <a class="nav-link" data-toggle="tab" href="#@tabPanel.Name" role="tab" @onclick:preventDefault="true">
{ @tabPanel.DisplayHeading()
<a class="nav-link" data-toggle="tab" href="#@tabPanel.Name" role="tab" @onclick:preventDefault="true"> </a>
@tabPanel.DisplayHeading() }
</a> </li>
}
</li>
}
} }
</ul> </ul>
<div class="tab-content"> <div class="tab-content">
@ -43,6 +40,9 @@
[Parameter] [Parameter]
public string ActiveTab { get; set; } // optional - defaults to first TabPanel if not specified. Can also be set using a "tab=" querystring parameter. public string ActiveTab { get; set; } // optional - defaults to first TabPanel if not specified. Can also be set using a "tab=" querystring parameter.
[Parameter]
public bool Refresh { get; set; } // optional - used in scenarios where TabPanels are added/removed dynamically within a parent form. ActiveTab may need to be reset as well when this property is used.
protected override void OnInitialized() protected override void OnInitialized()
{ {
if (PageState.QueryString.ContainsKey("tab")) if (PageState.QueryString.ContainsKey("tab"))
@ -53,20 +53,23 @@
protected override void OnParametersSet() protected override void OnParametersSet()
{ {
_tabPanels = new List<TabPanel>(); if (_tabPanels == null || Refresh)
{
_tabPanels = new List<TabPanel>();
}
} }
internal void AddTabPanel(TabPanel tabPanel) internal void AddTabPanel(TabPanel tabPanel)
{ {
if (!_tabPanels.Exists(item => item.Name == tabPanel.Name)) if (!_tabPanels.Exists(item => item.Name == tabPanel.Name) && IsAuthorized(tabPanel))
{ {
_tabPanels.Add(tabPanel); _tabPanels.Add(tabPanel);
if (string.IsNullOrEmpty(ActiveTab))
{
ActiveTab = tabPanel.Name;
}
StateHasChanged(); StateHasChanged();
} }
if (string.IsNullOrEmpty(ActiveTab))
{
ActiveTab = tabPanel.Name;
}
} }
private bool IsAuthorized(TabPanel tabPanel) private bool IsAuthorized(TabPanel tabPanel)