@namespace Oqtane.Modules.Controls @inherits ModuleControlBase

@ChildContent
@code { private List _tabPanels; private string _tabpanelid = string.Empty; [Parameter] public RenderFragment ChildContent { get; set; } // contains the TabPanels [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. [Parameter] public string Id { get; set; } // optional - used to uniquely identify an instance of a tab strip component (will be set automatically if no value provided) [Parameter] public string TabContentClass { get; set; } // optional - to extend the TabContent div. protected override void OnInitialized() { if (string.IsNullOrEmpty(Id)) { // create unique id for component Id = "TabStrip_" + Guid.NewGuid().ToString("N") + "_" ; } } protected override void OnParametersSet() { base.OnParametersSet(); if (PageState.QueryString.ContainsKey("tab")) { ActiveTab = PageState.QueryString["tab"]; } if (_tabPanels == null || Refresh) { _tabPanels = new List(); } // 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) { if (!_tabPanels.Exists(item => item.Name == tabPanel.Name) && IsAuthorized(tabPanel)) { _tabPanels.Add(tabPanel); if (string.IsNullOrEmpty(ActiveTab)) { ActiveTab = tabPanel.Name; } UpdateActiveTab(); StateHasChanged(); } } private void SetActiveTab(string tabName) { ActiveTab = tabName; UpdateActiveTab(); StateHasChanged(); } private bool IsAuthorized(TabPanel tabPanel) { var authorized = false; switch (tabPanel.Security) { case null: // security not specified - assume SecurityAccessLevel.Anonymous authorized = true; break; case SecurityAccessLevel.Anonymous: authorized = true; break; case SecurityAccessLevel.View: authorized = UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, ModuleState.PermissionList); break; case SecurityAccessLevel.Edit: authorized = UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, ModuleState.PermissionList); break; case SecurityAccessLevel.Admin: authorized = UserSecurity.IsAuthorized(PageState.User, RoleNames.Admin); break; case SecurityAccessLevel.Host: authorized = UserSecurity.IsAuthorized(PageState.User, RoleNames.Host); break; } return authorized; } }