From e01db29354cbb7f6bc00cf2ce59985dbca4f4a3c Mon Sep 17 00:00:00 2001 From: Emanuele Filardo Date: Sat, 19 Oct 2019 22:33:12 +0200 Subject: [PATCH] Add TabControl & TabPage --- .../Themes/Controls/TabControl.razor | 43 +++++++++++++++++++ Oqtane.Client/Themes/Controls/TabPage.razor | 27 ++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 Oqtane.Client/Themes/Controls/TabControl.razor create mode 100644 Oqtane.Client/Themes/Controls/TabPage.razor 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) + { + + } +
+ @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); + } +}