Example #1
0
 internal async Task TabRenderCompletedAsync(BTabPanelBase tabPanel)
 {
     if (OnRenderCompleted != null)
     {
         await OnRenderCompleted(tabPanel);
     }
 }
Example #2
0
        internal async Task CloseTabAsync(BTabPanelBase tab)
        {
            if (OnTabClosing.HasDelegate)
            {
                var arg = new BClosingEventArgs <BTabPanelBase>();
                arg.Target = tab;
                await OnTabClosing.InvokeAsync(arg);

                if (arg.Cancel)
                {
                    return;
                }
            }

            ResetActiveTab(tab);
            RequireRender = true;
            if (OnTabClose.HasDelegate)
            {
                _ = OnTabClose.InvokeAsync(tab);
            }
            else
            {
                StateHasChanged();
            }
        }
Example #3
0
        private TabOption ResetActiveTab(BTabPanelBase tab)
        {
            if (DataSource == null)
            {
                return(null);
            }
            if (DataSource.Count <= 0)
            {
                return(null);
            }
            var activeOption = DataSource.FirstOrDefault(x => x.IsActive);

            if (activeOption.Title != tab.Title)
            {
                return(null);
            }
            var activeIndex = DataSource.IndexOf(activeOption);

            DataSource.RemoveAt(activeIndex);
            var newActiveIndex = activeIndex;

            if (newActiveIndex >= DataSource.Count - 1)
            {
                newActiveIndex = DataSource.Count - 1;
            }
            if (newActiveIndex == -1)
            {
                return(null);
            }
            activeOption          = DataSource.ElementAt(newActiveIndex);
            activeOption.IsActive = true;
            return(activeOption);
        }
Example #4
0
 internal void AddTab(BTabPanelBase tab)
 {
     if (Exists(tab.Name))
     {
         return;
     }
     tabPanels.Add(tab);
 }
Example #5
0
        internal async Task UpdateHeaderSizeAsync(BTabPanelBase tabPanel, int barWidth, int barOffsetLeft)
        {
            if (BarWidth == barWidth && barOffsetLeft == BarOffsetLeft)
            {
                await TabRenderCompletedAsync(tabPanel);

                return;
            }
            BarWidth      = barWidth;
            BarOffsetLeft = barOffsetLeft;
            RequireRender = true;
            StateHasChanged();
        }
Example #6
0
        internal async Task <bool> SetActivateTabAsync(BTabPanelBase tab)
        {
            if (OnActiveTabChanging.HasDelegate)
            {
                var arg = new BChangeEventArgs <BTabPanelBase>();
                arg.NewValue = tab;
                arg.OldValue = ActiveTab;
                await OnActiveTabChanging.InvokeAsync(arg);

                if (arg.DisallowChange)
                {
                    return(false);
                }
            }
            if (DataSource == null)
            {
                foreach (var tabPanel in tabPanels)
                {
                    if (tabPanel == tab)
                    {
                        tabPanel.Activate();
                        continue;
                    }
                    tabPanel.DeActivate();
                }
            }
            else
            {
                foreach (var item in DataSource)
                {
                    item.IsActive = item.Name == tab.Name;
                }
            }
            ActiveTab = tab;
            var eventArgs = new BChangeEventArgs <BTabPanelBase>();

            eventArgs.OldValue = ActiveTab;
            eventArgs.NewValue = tab;
            RequireRender      = true;
            if (OnActiveTabChanged.HasDelegate)
            {
                await OnActiveTabChanged.InvokeAsync(eventArgs);
            }
            else
            {
                StateHasChanged();
            }
            return(true);
        }