Aller au contenu principal

LgSideTabContainer

LgSideTabContainer propose une navigation par onglets avec une colonne latérale redimensionnable. LgSideTab décrit chaque entrée du panneau latéral et peut afficher un bouton personnalisé via ButtonContent.

<LgSideTabContainer>
<LgSideTab Key="summary" Title="#Summary" />
</LgSideTabContainer>
  • Espace de noms : Lagoon.UI.Components
  • Hérite de : LgCustomTabContainer → LgAriaComponentBase → LgComponentBase
  • Interfaces : IDisposable, IPageTitleHandler, IPageCloser, IPageReloader, IPageDefaultLayoutProvider, ICommandListener
  • Package NuGet : Lagoon.UI
Panneau latéral persistant

Utilisez StoreKey pour mémoriser la largeur du panneau latéral dans le navigateur et retrouver la même disposition d'une session à l'autre.

Utilisation​

Démonstration​

Essayez ce composant dans le showcase Lagoon.

Construire une navigation latérale redimensionnable​

StoreKey mémorise la largeur du panneau dans le navigateur. HeadMinSize, HeadMaxSize, Locked et Collapsable pilotent le redimensionnement et la réduction du panneau.

SideTabsPage.razor
@inherits LgPage

<LgSideTabContainer @bind-ActiveTabKey="_activeTabKey"
Collapsable="true"
HeadMinSize="220px"
HeadMaxSize="360px"
HeadCssClass="app-side-tabs"
MainCssClass="app-side-tabs-content"
StoreKey="orders-side-tabs"
DefaultActiveTabKey="summary"
OnActivateTab="OnActivateTabAsync"
OnClosingTab="OnClosingTabAsync"
OnCloseTab="OnCloseTabAsync">
<LgSideTab Key="summary"
Title="#Summary"
IconName="@IconNames.All.ListUl"
Uri="orders/summary" />

<LgSideTab Key="history"
Title="#History"
IconName="@IconNames.All.ClockHistory"
Uri="orders/history"
PreloadContent="true" />

<LgSideTab Key="documents"
Title="#Documents"
AriaLabel="#Documents"
Uri="orders/documents">
<ButtonContent>
<LgIcon IconName="@IconNames.All.Paperclip" />
</ButtonContent>
</LgSideTab>
</LgSideTabContainer>
SideTabsPage.razor.cs
public partial class SideTabsPage : LgPage
{
// Clé active liée au conteneur : permet de synchroniser la navigation latérale avec le code.
private string _activeTabKey = "summary";

// Déclenché après activation : utile pour mémoriser le dernier panneau consulté.
private Task OnActivateTabAsync(ActivateTabEventArgs args)
{
_activeTabKey = args.Tab.Key;
return Task.CompletedTask;
}

// Déclenché avant fermeture : annulez si le panneau contient des modifications à conserver.
private Task OnClosingTabAsync(ClosingTabEventArgs args)
{
args.Cancel = false;
return Task.CompletedTask;
}

// Déclenché après fermeture effective : nettoyez ici un état local associé au panneau.
private Task OnCloseTabAsync(CloseTabEventArgs args)
{
string closedTabKey = args.Key;
return Task.CompletedTask;
}
}

Charger le contenu dès l'ouverture​

PreloadTabContent précharge tous les panneaux. PreloadContent surcharge ce comportement pour un onglet précis.

PreloadedSideTabsPage.razor
@inherits LgPage

<LgSideTabContainer PreloadTabContent="true" Locked="true" HeadMinSize="240px" HeadMaxSize="320px">
<LgSideTab Key="summary" Title="#Summary" Uri="orders/summary" />
<LgSideTab Key="statistics" Title="#Statistics" Uri="orders/statistics" PreloadContent="false" />
</LgSideTabContainer>

Grouper les onglets ou mixer d'autres composants​

Le contenu du panneau latéral est un RenderFragment : vous pouvez organiser les LgSideTab dans un LgFrame, un LgAccordion ou ajouter un bouton de navigation complémentaire.

GroupedSideTabsPage.razor
@inherits LgPage

<LgSideTabContainer StoreKey="grouped-orders-side-tabs">
<LgFrame Title="#OrdersGroup" Collapsable="true" DefaultCollapsed="false">
<LgSideTab Key="orders-open" Title="#OpenOrders" IconName="@IconNames.All.Cart3" Uri="orders/open" />
<LgSideTab Key="orders-closed" Title="#ClosedOrders" IconName="@IconNames.All.Archive" Uri="orders/closed" />
</LgFrame>

<LgAccordion>
<LgAccordionPane Title="#SupportGroup">
<LgSideTab Key="faq" Title="#Faq" IconName="@IconNames.Question" Uri="help/faq" />
<LgButton Text="#OpenDocumentation" Kind="ButtonKind.Link" Uri="help/documentation" />
</LgAccordionPane>
</LgAccordion>
</LgSideTabContainer>

Ajoutez une route avec une clé d'onglet, puis liez cette valeur à ActiveTabKey. La page extérieure peut utiliser le LgPageLink exposé par la page d'onglets.

OrdersSideTabsPage.razor
@inherits LgPage

<LgSideTabContainer @bind-ActiveTabKey="_activeTabKey" DefaultActiveTabKey="summary">
<LgSideTab Key="summary" Title="#Summary" IconName="@IconNames.All.ListUl" Uri="orders/summary" />
<LgSideTab Key="history" Title="#History" IconName="@IconNames.All.ClockHistory" Uri="orders/history" />
<LgSideTab Key="documents" Title="#Documents" IconName="@IconNames.All.Paperclip" Uri="orders/documents" />
</LgSideTabContainer>
OrdersSideTabsPage.razor.cs
[Route(ROUTE)]
[Route(ROUTE + "/{RequestedTabKey}")]
public partial class OrdersSideTabsPage : LgPage
{
// Route de la page d'onglets : réutilisée pour créer des liens vers un panneau précis.
private const string ROUTE = "orders-tabs";

// Paramètre de route optionnel : porte la clé de l'onglet à activer à l'arrivée.
[Parameter]
public string RequestedTabKey { get; set; }

// Clé active liée au conteneur ; initialisée depuis la route ou sur le panneau résumé.
private string _activeTabKey = "summary";

// Crée un lien vers la page en ciblant directement l'onglet demandé.
public static LgPageLink Link(string tabKey)
{
return LgPageLink.Create($"{ROUTE}/{tabKey}", "#OrdersTabs", IconNames.All.ListUl);
}

// Synchronise le paramètre de route avec le binding du conteneur à chaque navigation.
protected override void OnParametersSet()
{
base.OnParametersSet();
_activeTabKey = string.IsNullOrEmpty(RequestedTabKey) ? "summary" : RequestedTabKey;
}
}
OrdersOverviewPage.razor
@inherits LgPage

<LgButton Text="#OpenHistory" Kind="ButtonKind.Link" Link='@OrdersSideTabsPage.Link("history")' />
URI des onglets

Comme pour LgTabContainer, utilisez des URI relatives sans / initial (Uri="orders/history" plutôt que Uri="/orders/history").

Propriétés​

Toutes les propriétés [Parameter] de LgSideTabContainer, y compris celles héritées.

NomTypeDéfautDéclaré dansDescription
CollapsableboolfalseLgSideTabContainerAutorise la réduction du panneau latéral.
HeadCssClassstringnullLgSideTabContainerClasses CSS du panneau latéral.
HeadMaxSizestringnullLgSideTabContainerTaille maximale du panneau latéral (ex. "360px").
HeadMinSizestringnullLgSideTabContainerTaille minimale du panneau latéral.
LockedboolfalseLgSideTabContainerVerrouille le redimensionnement du panneau.
MainCssClassstringnullLgSideTabContainerClasses CSS de la zone de contenu principale.
StoreKeystringnullLgSideTabContainerClé localStorage utilisée pour mémoriser la largeur du panneau.
ChildContentRenderFragmentnullLgCustomTabContainerDéclaration des LgSideTab contenus dans le composant.
ActiveTabKeystringnullLgCustomTabContainerClé de l'onglet actif. Utilisable avec @bind-ActiveTabKey.
ActiveTabKeyChangedEventCallback<string>—LgCustomTabContainerCallback du binding sur ActiveTabKey.
CssClassstringnullLgCustomTabContainerClasses CSS additionnelles du conteneur.
DefaultActiveTabKeystringnullLgCustomTabContainerClé de l'onglet activé par défaut.
DefaultLayoutTypenullLgCustomTabContainerLayout appliqué aux pages ouvertes si elles n'en déclarent pas.
GetTabKeyFromUriFunc<string, string>nullLgCustomTabContainerFonction personnalisant la génération de clé depuis l'URI.
PreloadTabContentboolfalseLgCustomTabContainerPrécharge le contenu des onglets dès leur création.
OnActivateTabEventCallback<ActivateTabEventArgs>—LgCustomTabContainerDéclenché après activation d'un onglet.
OnClosingTabEventCallback<ClosingTabEventArgs>—LgCustomTabContainerDéclenché avant fermeture d'un onglet.
OnCloseTabEventCallback<CloseTabEventArgs>—LgCustomTabContainerDéclenché après fermeture effective d'un onglet.
ReloadDisabledboolfalseLgCustomTabContainerDésactive le rechargement de l'onglet actif.
AriaLabelstringnullLgAriaComponentBaseValeur de l'attribut aria-label.
AriaLabelledBystringnullLgAriaComponentBaseValeur de l'attribut aria-labelledby.

Onglet associé : LgSideTab​

NomTypeDéfautDéclaré dansDescription
ButtonContentRenderFragmentnullLgSideTabContenu personnalisé du bouton d'onglet latéral.
ChildContentRenderFragmentnullLgCustomTabContenu statique du panneau.
CssClassstringnullLgCustomTabClasses CSS additionnelles.
DisabledboolfalseLgCustomTabDésactive l'onglet.
IconNamestringnullLgCustomTabIcône affichée. Si absente, Link.IconName est utilisé.
KeystringnullLgCustomTabIdentifiant unique de l'onglet. Si absent, Lagoon génère la clé depuis Uri ou depuis un identifiant interne.
LinkLgPageLinknullLgCustomTabLien typé vers une page Lagoon.
OnReloadEventCallback—LgCustomTabCallback déclenché lors d'un rechargement.
PreloadContentbool?nullLgCustomTabPréchargement spécifique à cet onglet.
TitlestringnullLgCustomTabTitre du bouton d'onglet.
TooltipstringnullLgCustomTabTooltip du bouton d'onglet.
TooltipIsHtmlboolfalseLgCustomTabIndique si le tooltip est au format HTML.
UristringnullLgCustomTabURI Blazor ou externe chargée dans le panneau.
UseIFrameboolfalseLgCustomTabCharge le contenu via une IFrame.
AriaLabelstringnullLgAriaComponentBaseValeur de l'attribut aria-label.
AriaLabelledBystringnullLgAriaComponentBaseValeur de l'attribut aria-labelledby.

Événements​

ÉvénementTypeDescription
OnActivateTabEventCallback<ActivateTabEventArgs>Déclenché après activation ; args.Tab.Key et args.Tab.Uri identifient l'onglet actif.
OnClosingTabEventCallback<ClosingTabEventArgs>Déclenché avant fermeture ; permet d'annuler via Cancel.
OnCloseTabEventCallback<CloseTabEventArgs>Déclenché après fermeture effective.
OnReloadEventCallbackDéclenché sur le LgSideTab concerné lors d'un rechargement.

Accessibilité​

  • Donnez toujours un Title ou un AriaLabel aux LgSideTab, surtout si ButtonContent ne contient qu'une icône.
  • Vérifiez que le panneau reste exploitable lorsqu'il est réduit (Collapsable="true").
  • Évitez les contenus trop denses dans ButtonContent pour conserver une navigation latérale lisible.

Composants liés​