diff --git a/Oqtane.Client/Themes/Controls/TabControl.razor b/Oqtane.Client/Themes/Controls/TabControl.razor new file mode 100644 index 00000000..f7b68b78 --- /dev/null +++ b/Oqtane.Client/Themes/Controls/TabControl.razor @@ -0,0 +1,43 @@ +@namespace Oqtane.Themes.Controls +@inherits ThemeControlBase + + + + @foreach (TabPage tabPage in Pages) + { + ActivatePage(tabPage) )> + @tabPage.Text + + } + + @ChildContent + + +@code { + // Next line is needed so we are able to add components inside + [Parameter] + public RenderFragment ChildContent { get; set; } + + public TabPage ActivePage { get; set; } + List Pages = new List(); + + internal void AddPage(TabPage tabPage) + { + Pages.Add(tabPage); + if (Pages.Count == 1) + ActivePage = tabPage; + StateHasChanged(); + } + + string GetButtonClass(TabPage page) + { + return page == ActivePage ? "btn-primary" : "btn-secondary"; + } + + void ActivatePage(TabPage page) + { + ActivePage = page; + } +} diff --git a/Oqtane.Client/Themes/Controls/TabPage.razor b/Oqtane.Client/Themes/Controls/TabPage.razor new file mode 100644 index 00000000..86e218b7 --- /dev/null +++ b/Oqtane.Client/Themes/Controls/TabPage.razor @@ -0,0 +1,27 @@ +@namespace Oqtane.Themes.Controls +@inherits ThemeControlBase + +@if (Parent.ActivePage == (TabPage)(object)this) +{ + @ChildContent +} + +@code { + [CascadingParameter] + private TabControl Parent { get; set; } + + [Parameter] + public RenderFragment ChildContent { get; set; } + + [Parameter] + public string Text { get; set; } + + protected override void OnInitialized() + { + if (Parent == null) + throw new ArgumentNullException(nameof(Parent), "TabPage must exist within a TabControl"); + + base.OnInitialized(); + Parent.AddPage((TabPage)(object)this); + } +}