using Connected.Annotations; using Connected.Extensions; using Connected.Utilities; using Microsoft.AspNetCore.Components; namespace Connected.Components; public partial class DrawerContainer : UIComponent { protected bool Fixed { get; set; } = false; private List _drawers = new(); protected virtual string Classname => new CssBuilder() .AddClass(GetDrawerClass(FindLeftDrawer())) .AddClass(GetDrawerClass(FindRightDrawer())) .AddClass(Class) .Build(); protected string Stylename => new StyleBuilder() .AddStyle("--mud-drawer-width-left", GetDrawerWidth(FindLeftDrawer()), !string.IsNullOrEmpty(GetDrawerWidth(FindLeftDrawer()))) .AddStyle("--mud-drawer-width-right", GetDrawerWidth(FindRightDrawer()), !string.IsNullOrEmpty(GetDrawerWidth(FindRightDrawer()))) .AddStyle("--mud-drawer-width-mini-left", GetMiniDrawerWidth(FindLeftMiniDrawer()), !string.IsNullOrEmpty(GetMiniDrawerWidth(FindLeftMiniDrawer()))) .AddStyle("--mud-drawer-width-mini-right", GetMiniDrawerWidth(FindRightMiniDrawer()), !string.IsNullOrEmpty(GetMiniDrawerWidth(FindRightMiniDrawer()))) .AddStyle(Style) .Build(); [CascadingParameter(Name = "RightToLeft")] public bool RightToLeft { get; set; } [Parameter] [Category(CategoryTypes.Drawer.Behavior)] public RenderFragment ChildContent { get; set; } internal void FireDrawersChanged() => StateHasChanged(); internal void Add(Drawer drawer) { if (Fixed && !drawer.Fixed) return; _drawers.Add(drawer); StateHasChanged(); } internal void Remove(Drawer drawer) { _drawers.Remove(drawer); StateHasChanged(); } private string GetDrawerClass(Drawer drawer) { if (drawer == null) return string.Empty; var className = $"mud-drawer-{(drawer.Open ? "open" : "close")}-{drawer.Variant.ToDescriptionString()}"; if (drawer.Variant is DrawerVariant.Responsive or DrawerVariant.Mini) { className += $"-{drawer.Breakpoint.ToDescriptionString()}"; } className += $"-{drawer.GetPosition()}"; className += $" mud-drawer-{drawer.GetPosition()}-clipped-{drawer.ClipMode.ToDescriptionString()}"; return className; } private string GetDrawerWidth(Drawer drawer) { if (drawer == null) return string.Empty; return drawer.Width; } private string GetMiniDrawerWidth(Drawer drawer) { if (drawer == null) return string.Empty; return drawer.MiniWidth; } private Drawer FindLeftDrawer() { var anchor = RightToLeft ? Anchor.End : Anchor.Start; return _drawers.FirstOrDefault(d => d.Anchor == anchor || d.Anchor == Anchor.Left); } private Drawer FindRightDrawer() { var anchor = RightToLeft ? Anchor.Start : Anchor.End; return _drawers.FirstOrDefault(d => d.Anchor == anchor || d.Anchor == Anchor.Right); } private Drawer FindLeftMiniDrawer() { var anchor = RightToLeft ? Anchor.End : Anchor.Start; return _drawers.FirstOrDefault(d => d.Variant == DrawerVariant.Mini && (d.Anchor == anchor || d.Anchor == Anchor.Left)); } private Drawer FindRightMiniDrawer() { var anchor = RightToLeft ? Anchor.Start : Anchor.End; return _drawers.FirstOrDefault(d => d.Variant == DrawerVariant.Mini && (d.Anchor == anchor || d.Anchor == Anchor.Right)); } }