diff --git a/src/TailBlazor.Tabs/ITab.cs b/src/TailBlazor.Tabs/ITab.cs index 98d3182..4fd430c 100644 --- a/src/TailBlazor.Tabs/ITab.cs +++ b/src/TailBlazor.Tabs/ITab.cs @@ -1,17 +1,15 @@ -using System; using Microsoft.AspNetCore.Components; -namespace TailBlazor.Tabs +namespace TailBlazor.Tabs; + +public interface ITab { - public interface ITab - { - RenderFragment ChildContent { get; } - RenderFragment TitleContent { get; } - RenderFragment TabContent { get; } - int Id { get; } - string Title { get; } - string ActiveClass { get; set; } - string Class { get; set; } - void Activate(); - } + RenderFragment? ChildContent { get; } + RenderFragment? TitleContent { get; } + RenderFragment? TabContent { get; } + int Id { get; } + string? Title { get; } + string? ActiveClass { get; set; } + string? Class { get; set; } + void Activate(); } \ No newline at end of file diff --git a/src/TailBlazor.Tabs/TailBlazor.Tabs.csproj b/src/TailBlazor.Tabs/TailBlazor.Tabs.csproj index 7689d8c..4422df3 100644 --- a/src/TailBlazor.Tabs/TailBlazor.Tabs.csproj +++ b/src/TailBlazor.Tabs/TailBlazor.Tabs.csproj @@ -1,9 +1,9 @@ - - - - net5.0 - TailBlazor.Tabs - TailBlazor.Tabs + + + + net9.0 + TailBlazor.Tabs + TailBlazor.Tabs 1.1.5 Taylor Watson true @@ -24,13 +24,9 @@ MIT - - - - - - - + + + diff --git a/src/TailBlazor.Tabs/TailBlazorTab.razor b/src/TailBlazor.Tabs/TailBlazorTab.razor index 3b8bd1b..921409d 100644 --- a/src/TailBlazor.Tabs/TailBlazorTab.razor +++ b/src/TailBlazor.Tabs/TailBlazorTab.razor @@ -1,7 +1,7 @@ @namespace TailBlazor.Tabs @implements ITab - @if (TitleContent != null) { @TitleContent @@ -10,31 +10,27 @@ } +@code { -@functions { - - [CascadingParameter] public TailBlazorTabs ContainerTabs { get; set; } - [Parameter] public string ActiveClass { get; set; } - [Parameter] public string Class { get; set; } - [Parameter] public string Title { get; set; } - [Parameter] public string AriaLabel { get; set; } - [Parameter] public RenderFragment ChildContent { get; set; } - [Parameter] public RenderFragment TitleContent { get; set; } - [Parameter] public RenderFragment TabContent { get; set; } + [CascadingParameter] public TailBlazorTabs ContainerTabs { get; set; } = default!; + [Parameter] public string? ActiveClass { get; set; } + [Parameter] public string? Class { get; set; } + [Parameter] public string? Title { get; set; } + [Parameter] public string? AriaLabel { get; set; } + [Parameter] public RenderFragment? ChildContent { get; set; } + [Parameter] public RenderFragment? TitleContent { get; set; } + [Parameter] public RenderFragment? TabContent { get; set; } [Parameter] public EventCallback OnClickCallback { get; set; } public int Id { get; private set; } - + protected override void OnInitialized() { - if (String.IsNullOrEmpty(Class)) - Class = ContainerTabs.DefaultTabClass; - if (String.IsNullOrEmpty(ActiveClass)) - ActiveClass = ContainerTabs.DefaultTabActiveClass; - if (String.IsNullOrEmpty(AriaLabel)) - AriaLabel = Title; - - Id = ContainerTabs.Tabs.Count(); + Class ??= ContainerTabs.DefaultTabClass; + ActiveClass ??= ContainerTabs.DefaultTabActiveClass; + AriaLabel ??= Title ?? string.Empty; + + Id = ContainerTabs.Tabs.Count; // make sure at least one tab is active ContainerTabs.AddTab(this); } @@ -42,7 +38,22 @@ public void Activate() { ContainerTabs.SetActivateTab(this); - OnClickCallback.InvokeAsync(this.ContainerTabs.ActiveTab); - StateHasChanged(); + _ = NotifyActivationAsync(); + } + + private async Task ActivateAsync() + { + ContainerTabs.SetActivateTab(this); + await NotifyActivationAsync(); + } + + private async Task NotifyActivationAsync() + { + if (OnClickCallback.HasDelegate) + { + await OnClickCallback.InvokeAsync(ContainerTabs.ActiveTab); + } + + await InvokeAsync(StateHasChanged); } } \ No newline at end of file diff --git a/src/TailBlazor.Tabs/TailBlazorTabs.razor b/src/TailBlazor.Tabs/TailBlazorTabs.razor index ea66a5c..ab3d84c 100644 --- a/src/TailBlazor.Tabs/TailBlazorTabs.razor +++ b/src/TailBlazor.Tabs/TailBlazorTabs.razor @@ -1,26 +1,26 @@ @namespace TailBlazor.Tabs - -
-