Skip to content

Commit fe5cd47

Browse files
committed
Merge branch 'refactor-tab' into tab_table
# Conflicts: # src/BootstrapBlazor/Components/Tab/Tab.razor
2 parents 65f5d92 + 8348871 commit fe5cd47

File tree

4 files changed

+104
-69
lines changed

4 files changed

+104
-69
lines changed

src/BootstrapBlazor/Components/Layout/Layout.razor.scss

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,6 @@
4949

5050
.layout-main {
5151
min-height: calc(var(--bb-layout-height) - var(--bb-layout-header-height) - var(--bb-layout-footer-height));
52-
53-
> .tabs,
54-
> .bb-cm-zone > .tabs {
55-
margin: -1rem;
56-
border: none;
57-
border-radius: unset;
58-
min-height: calc(100% + 2rem);
59-
}
6052
}
6153
}
6254

src/BootstrapBlazor/Components/Tab/Tab.razor

Lines changed: 21 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,7 @@ else
4545
<div class="@WrapClassString">
4646
@if (BeforeNavigatorTemplate != null)
4747
{
48-
<CascadingValue Value="this" IsFixed="true">
49-
@BeforeNavigatorTemplate(this)
50-
</CascadingValue>
48+
@BeforeNavigatorTemplate(this)
5149
}
5250
@if (ShowNavigatorButtons)
5351
{
@@ -65,36 +63,7 @@ else
6563
@ChildContent
6664
</CascadingValue>
6765
<RenderTemplate>
68-
@if (!Items.Any() && !string.IsNullOrEmpty(DefaultUrl))
69-
{
70-
if (ClickTabToNavigation)
71-
{
72-
Navigator.NavigateTo(DefaultUrl);
73-
}
74-
else
75-
{
76-
AddTabItem(DefaultUrl);
77-
}
78-
}
79-
@if (FirstRender)
80-
{
81-
if (!Items.Any(t => t.IsActive))
82-
{
83-
Items.FirstOrDefault(i => i.IsDisabled == false)?.SetActive(true);
84-
}
85-
}
86-
@if (ShowContextMenu)
87-
{
88-
@RenderTabItemListContextMenu
89-
}
90-
else
91-
{
92-
@RenderTabItemList
93-
}
94-
@if (IsCard || IsBorderCard)
95-
{
96-
<div class="tabs-item-fix"></div>
97-
}
66+
@RenderTabList()
9867
</RenderTemplate>
9968
@if (!IsCard && !IsBorderCard && ShowActiveBar)
10069
{
@@ -160,31 +129,27 @@ else
160129
</div>
161130
</div>;
162131

163-
RenderFragment RenderTabItemListContextMenu =>
164-
@<div>
165-
@RenderTabItemList
166-
</div>;
167-
168-
RenderFragment RenderTabItemList =>
169-
@<div>
170-
@foreach (var item in Items)
132+
RenderFragment RenderContextMenu =>
133+
@<ContextMenu>
134+
@if (BeforeContextMenuTemplate != null)
171135
{
172-
@if (item.HeaderTemplate != null)
173-
{
174-
<div @key="@item" class="@GetItemWrapClassString(item)" draggable="@DraggableString">
175-
@item.HeaderTemplate(item)
176-
</div>
177-
}
178-
else if (item.IsDisabled)
179-
{
180-
@RenderDisabledHeaderItem(item)
181-
}
182-
else
183-
{
184-
@RenderHeaderItem(item)
185-
}
136+
@BeforeContextMenuTemplate(this)
186137
}
187-
</div>;
138+
<ContextMenuItem Icon="@ContextMenuRefreshIcon" Text="@Localizer["ContextRefresh"]" OnClick="OnRefresh"></ContextMenuItem>
139+
<ContextMenuDivider></ContextMenuDivider>
140+
<ContextMenuItem Icon="@ContextMenuCloseIcon" Text="@Localizer["ContextClose"]" OnClick="OnClose"></ContextMenuItem>
141+
<ContextMenuItem Icon="@ContextMenuCloseOtherIcon" Text="@Localizer["ContextCloseOther"]" OnClick="OnCloseOther"></ContextMenuItem>
142+
<ContextMenuItem Icon="@ContextMenuCloseAllIcon" Text="@Localizer["ContextCloseAll"]" OnClick="OnCloseAll"></ContextMenuItem>
143+
@if (ShowContextMenuFullScreen)
144+
{
145+
<ContextMenuDivider></ContextMenuDivider>
146+
<ContextMenuItem Icon="@ContextMenuFullScreenIcon" Text="@Localizer["ContextFullScreen"]" OnClick="OnFullScreen"></ContextMenuItem>
147+
}
148+
@if (ContextMenuTemplate != null)
149+
{
150+
@ContextMenuTemplate(this)
151+
}
152+
</ContextMenu>;
188153

189154
RenderFragment<TabItem> RenderTabItem => item =>
190155
@<CascadingValue Value="item" IsFixed="true">

src/BootstrapBlazor/Components/Tab/Tab.razor.cs

Lines changed: 77 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -580,7 +580,9 @@ protected override async Task OnAfterRenderAsync(bool firstRender)
580580
/// <inheritdoc/>
581581
/// </summary>
582582
/// <returns></returns>
583-
protected override Task InvokeInitAsync() => InvokeVoidAsync("init", Id, Interop, nameof(DragItemCallback), Layout?.Id);
583+
protected override Task InvokeInitAsync() => InvokeVoidAsync("init", Id, Interop, nameof(DragItemCallback), LayoutId);
584+
585+
private string? LayoutId => Layout is { ShowTabInHeader: true } ? Layout.Id : null;
584586

585587
private void RemoveLocationChanged()
586588
{
@@ -1132,6 +1134,80 @@ private async Task OnContextMenu(MouseEventArgs e, TabItem item)
11321134
}
11331135
}
11341136

1137+
private RenderFragment RenderTabList() => builder =>
1138+
{
1139+
if (!Items.Any() && !string.IsNullOrEmpty(DefaultUrl))
1140+
{
1141+
if (ClickTabToNavigation)
1142+
{
1143+
Navigator.NavigateTo(DefaultUrl);
1144+
}
1145+
else
1146+
{
1147+
AddTabItem(DefaultUrl);
1148+
}
1149+
}
1150+
1151+
if (FirstRender)
1152+
{
1153+
if (!Items.Any(t => t.IsActive))
1154+
{
1155+
Items.FirstOrDefault(i => i.IsDisabled == false)?.SetActive(true);
1156+
}
1157+
}
1158+
1159+
if (ShowContextMenu)
1160+
{
1161+
builder.OpenComponent<ContextMenuZone>(0);
1162+
builder.AddAttribute(10, nameof(ContextMenuZone.ChildContent), RenderContextMenuZoneContent());
1163+
builder.AddComponentReferenceCapture(20, instance => _contextMenuZone = (ContextMenuZone)instance);
1164+
builder.CloseComponent();
1165+
}
1166+
else
1167+
{
1168+
builder.AddContent(150, RenderTabItems());
1169+
}
1170+
1171+
if (TabStyle == TabStyle.Default && (IsCard || IsBorderCard))
1172+
{
1173+
builder.OpenElement(200, "div");
1174+
builder.AddAttribute(210, "class", "tabs-item-fix");
1175+
builder.CloseElement();
1176+
}
1177+
};
1178+
1179+
private RenderFragment RenderContextMenuZoneContent() => builder =>
1180+
{
1181+
builder.AddContent(0, RenderTabItems());
1182+
builder.AddContent(10, RenderContextMenu);
1183+
};
1184+
1185+
private RenderFragment RenderTabItems() => builder =>
1186+
{
1187+
for (var index = 0; index < _items.Count; index++)
1188+
{
1189+
var item = _items[index];
1190+
var sequence = (index + 1) * 100;
1191+
if (item.HeaderTemplate != null)
1192+
{
1193+
builder.OpenElement(sequence, "div");
1194+
builder.SetKey(item);
1195+
builder.AddAttribute(sequence + 10, "class", GetItemWrapClassString(item));
1196+
builder.AddAttribute(sequence + 20, "draggable", DraggableString);
1197+
builder.AddContent(sequence + 30, item.HeaderTemplate(item));
1198+
builder.CloseElement();
1199+
}
1200+
else if (item.IsDisabled)
1201+
{
1202+
builder.AddContent(sequence + 40, RenderDisabledHeaderItem(item));
1203+
}
1204+
else
1205+
{
1206+
builder.AddContent(sequence + 50, RenderHeaderItem(item));
1207+
}
1208+
}
1209+
};
1210+
11351211
/// <summary>
11361212
/// <inheritdoc/>
11371213
/// </summary>

src/BootstrapBlazor/Components/Tab/Tab.razor.scss

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,11 @@
8282
position: relative;
8383
display: flex;
8484
height: 100%;
85+
86+
.bb-cm-zone {
87+
display: flex;
88+
flex-wrap: nowrap;
89+
}
8590
}
8691

8792
.tabs-nav-wrap {
@@ -501,10 +506,6 @@
501506
--bb-tabs-item-text-padding: 0 .5rem;
502507
background-color: var(--bb-tabs-header-bg-color);
503508

504-
.tabs-item-fix {
505-
border: none;
506-
}
507-
508509
.tabs-item-wrap {
509510
&:not(.active) {
510511
.tabs-item:not(.disabled) .tabs-item-body {
@@ -557,6 +558,7 @@
557558
display: flex;
558559
align-items: center;
559560
border-radius: var(--bs-border-radius);
561+
user-select: none;
560562

561563
&:hover {
562564
background-color: var(--bb-tabs-item-hover-bg-color);

0 commit comments

Comments
 (0)