mirror of
https://github.com/radzenhq/radzen-blazor.git
synced 2026-02-04 05:35:44 +00:00
199 lines
5.8 KiB
C#
199 lines
5.8 KiB
C#
using Microsoft.AspNetCore.Components;
|
|
using Microsoft.AspNetCore.Components.Web;
|
|
using Radzen.Blazor.Rendering;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Radzen.Blazor
|
|
{
|
|
/// <summary>
|
|
/// RadzenTabsItem component.
|
|
/// </summary>
|
|
public partial class RadzenTabsItem : IDisposable
|
|
{
|
|
/// <summary>
|
|
/// Gets or sets the arbitrary attributes.
|
|
/// </summary>
|
|
/// <value>The arbitrary attributes.</value>
|
|
[Parameter(CaptureUnmatchedValues = true)]
|
|
public IDictionary<string, object>? Attributes { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets the style.
|
|
/// </summary>
|
|
/// <value>The style.</value>
|
|
[Parameter]
|
|
public string? Style { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets a value indicating whether this <see cref="RadzenTabsItem"/> is visible.
|
|
/// </summary>
|
|
/// <value><c>true</c> if visible; otherwise, <c>false</c>.</value>
|
|
[Parameter]
|
|
public bool Visible { get; set; } = true;
|
|
|
|
/// <summary>
|
|
/// Gets or sets the text.
|
|
/// </summary>
|
|
/// <value>The text.</value>
|
|
[Parameter]
|
|
public string? Text { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets the template.
|
|
/// </summary>
|
|
/// <value>The template.</value>
|
|
[Parameter]
|
|
public RenderFragment<RadzenTabsItem>? Template { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets the icon.
|
|
/// </summary>
|
|
/// <value>The icon.</value>
|
|
[Parameter]
|
|
public string? Icon { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets the icon color.
|
|
/// </summary>
|
|
/// <value>The icon color.</value>
|
|
[Parameter]
|
|
public string? IconColor { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets a value indicating whether this <see cref="RadzenTabsItem"/> is selected.
|
|
/// </summary>
|
|
/// <value><c>true</c> if selected; otherwise, <c>false</c>.</value>
|
|
[Parameter]
|
|
public bool Selected { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets a value indicating whether this <see cref="RadzenTabsItem"/> is disabled.
|
|
/// </summary>
|
|
/// <value><c>true</c> if disabled; otherwise, <c>false</c>.</value>
|
|
[Parameter]
|
|
public bool Disabled { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets the class list.
|
|
/// </summary>
|
|
/// <value>The class list.</value>
|
|
string Class => ClassList.Create()
|
|
.Add("rz-tabview-selected", IsSelected)
|
|
.Add("rz-state-focused", Tabs?.IsFocused(this) == true)
|
|
.AddDisabled(Disabled)
|
|
.Add(Attributes)
|
|
.ToString();
|
|
|
|
/// <summary>
|
|
/// Gets the index.
|
|
/// </summary>
|
|
/// <value>The index.</value>
|
|
public int Index
|
|
{
|
|
get
|
|
{
|
|
return Tabs?.IndexOf(this) ?? -1;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets a value indicating whether this instance is selected.
|
|
/// </summary>
|
|
/// <value><c>true</c> if this instance is selected; otherwise, <c>false</c>.</value>
|
|
public bool IsSelected
|
|
{
|
|
get
|
|
{
|
|
return Tabs?.IsSelected(this) == true;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets the child content.
|
|
/// </summary>
|
|
/// <value>The child content.</value>
|
|
[Parameter]
|
|
public RenderFragment? ChildContent { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets the tabs.
|
|
/// </summary>
|
|
/// <value>The tabs.</value>
|
|
[CascadingParameter]
|
|
public RadzenTabs? Tabs { get; set; }
|
|
|
|
/// <summary>
|
|
/// On initialized as an asynchronous operation.
|
|
/// </summary>
|
|
/// <returns>A Task representing the asynchronous operation.</returns>
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
if (Tabs != null)
|
|
{
|
|
await Tabs.AddTab(this);
|
|
}
|
|
}
|
|
|
|
internal async Task OnClick()
|
|
{
|
|
if (!Disabled && Tabs != null)
|
|
{
|
|
await SelectTab(this);
|
|
}
|
|
}
|
|
|
|
async Task SelectTab(RadzenTabsItem item)
|
|
{
|
|
if (Tabs == null) return;
|
|
if (Tabs.RenderMode == TabRenderMode.Server)
|
|
{
|
|
await Tabs.SelectTab(this, true);
|
|
}
|
|
else
|
|
{
|
|
await Tabs.SelectTabOnClient(this);
|
|
}
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public override async Task SetParametersAsync(ParameterView parameters)
|
|
{
|
|
var selectedChanged = parameters.DidParameterChange(nameof(Selected), Selected);
|
|
var visibleChanged = parameters.DidParameterChange(nameof(Visible), Visible);
|
|
|
|
await base.SetParametersAsync(parameters);
|
|
|
|
if (selectedChanged)
|
|
{
|
|
if (Selected)
|
|
{
|
|
Tabs?.SelectTab(this);
|
|
}
|
|
}
|
|
|
|
if (visibleChanged && IsSelected)
|
|
{
|
|
var firstTab = Tabs?.FirstVisibleTab();
|
|
if (firstTab != null)
|
|
{
|
|
await SelectTab(firstTab);
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public void Dispose()
|
|
{
|
|
Tabs?.RemoveItem(this);
|
|
GC.SuppressFinalize(this);
|
|
}
|
|
|
|
string getStyle()
|
|
{
|
|
return $"{(!Visible ? $"display:none;" : null)}{(!string.IsNullOrEmpty(Style) ? Style : null)}";
|
|
}
|
|
}
|
|
}
|