@* * dbMango * * Copyright 2025 Deutsche Bank AG * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *@ 
@if (ShowHeaders) {
} @ChildContent
@code { // Next line is needed so we are able to add components inside [Parameter] public RenderFragment? ChildContent { get; set; } [Parameter] public string Class { get; set; } = ""; [Parameter] public string TabGroupClass { get; set; } = ""; [Parameter] public bool ShowHeaders { get; set; } = true; [Parameter] public bool Vertical { get; set; } [Parameter] public bool PersistAllTabs { get; set; } [Parameter] public string ActivePage { get => _activePage?.Text ?? ""; set { if (value == null) return; if (_activePage?.Text == value) return; var page = _pages.FirstOrDefault(x => x.Text == value); if ( page?.IsSelectable != true) return; _activePage = page; ActivePageChanged.InvokeAsync(_activePage?.Text); } } [Parameter] public EventCallback ActivePageChanged { get; set; } private List _pages = []; private TabPage? _activePage; private string TabControlClass => $"{Class}"; private string TabPanelClass => Vertical ? "nav nav-tabs flex-column" : "nav nav-tabs"; protected override void OnInitialized() { base.OnInitialized(); _pages = []; } private int IndexOf(TabPage tabPage) { for( var i = 0; i < _pages.Count; i+=1 ) { if (_pages[i].Text == tabPage.Text) return i; } return -1; } internal void AddPage(TabPage tabPage) { if (string.IsNullOrWhiteSpace(tabPage?.Text)) throw new ApplicationException("TabPage must have Text field filled in"); var oldPage = IndexOf(tabPage); if ( oldPage < 0 ) { _pages.Add(tabPage); StateHasChanged(); } else if (_pages[oldPage] != tabPage) { _pages[oldPage] = tabPage; StateHasChanged(); } if (_pages.Count == 1) ActivePage = tabPage.Text; } bool IsSelected(TabPage page) => ActivePage == page.Text; string GetButtonClass(TabPage page) => page.Text == ActivePage ? "active show" : ""; void ActivatePage(TabPage page) { ActivePage = page.Text; } }