Skip to content

Commit 4505c99

Browse files
authored
feat(SiderMenu): support two-way bingding for OpenKeys (#88)
1 parent 24edc45 commit 4505c99

File tree

8 files changed

+24
-19
lines changed

8 files changed

+24
-19
lines changed

src/layout/example/AntDesign.ProLayout.Wasm/Shared/ProLayout.razor

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
MenuData="MenuData"
66
Theme="MenuTheme.Light"
77
MenuAccordion
8-
@bind-Collapsed="collapsed"
9-
>
8+
@bind-OpenKeys="openKeys"
9+
@bind-Collapsed="collapsed">
1010
<HeaderContentRender>
1111
<Menu Mode="MenuMode.Horizontal" Theme="MenuTheme.Dark">
12-
<MenuItem>Menu 1</MenuItem>
12+
<MenuItem OnClick="ResetMenu">Refresh Menu</MenuItem>
1313
<MenuItem>Menu 2</MenuItem>
1414
</Menu>
1515
</HeaderContentRender>
@@ -46,6 +46,7 @@
4646
private MenuDataItem[] MenuData { get; set; } = {};
4747

4848
private bool collapsed;
49+
private string[] openKeys = [];
4950

5051
protected override async Task OnInitializedAsync()
5152
{
@@ -57,4 +58,9 @@
5758
});
5859
MenuData = data.ToArray();
5960
}
61+
62+
private void ResetMenu()
63+
{
64+
openKeys = [];
65+
}
6066
}

src/layout/src/BasicLayout.razor

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
BaseURL="@BaseURL"
2222
SiderWidth="SiderWidth"
2323
Accordion="MenuAccordion"
24-
OnCollapse="HandleCollapse">
24+
OnCollapse="HandleCollapse"
25+
OpenKeysChanged="OpenKeysChanged">
2526
</SiderMenu>
2627
</CascadingValue>
2728
</CascadingValue>

src/layout/src/BasicLayout.razor.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ public partial class BasicLayout : IBasicLayout
3636

3737
[Obsolete("use CollapsedChanged or @bind-Collapsed instead.")]
3838
[Parameter] public EventCallback<bool> OnCollapse { get; set; }
39-
[Parameter] public string[] OpenKeys { get; set; } = { };
39+
[Parameter] public string[] OpenKeys { get; set; } = [];
40+
[Parameter] public EventCallback<string[]> OpenKeysChanged { get; set; }
4041
[Parameter] public MenuTheme Theme { get; set; }
4142
[Parameter] public OneOf<string, RenderFragment> Logo { get; set; }
4243
[Parameter] public string BaseURL { get; set; } = "/";

src/layout/src/SiderMenu/BaseMenu.razor

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
@inherits AntProComponentBase
44

55
<Menu Mode="Mode"
6-
DefaultOpenKeys="OpenKeys"
6+
OpenKeys="OpenKeys"
77
Theme="NavTheme"
88
Style="@Style"
99
Accordion="@Accordion"
1010
Class="@ClassMapper.Class"
11-
OnOpenChange="SetOpenKeys">
11+
OpenKeysChanged="OpenKeysChanged">
1212
@menuItemTemplate(MenuData, false)
1313
</Menu>
1414

src/layout/src/SiderMenu/BaseMenu.razor.cs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,24 @@ namespace AntDesign.ProLayout
88
internal interface IBaseMenu : IPureSettings
99
{
1010
bool Collapsed { get; }
11-
EventCallback<bool> HandleOpenChange { get; }
1211
bool IsMobile { get; }
1312
MenuDataItem[] MenuData { get; }
1413
MenuMode Mode { get; }
1514
EventCallback<bool> OnCollapse { get; }
1615
string[] OpenKeys { get; }
16+
EventCallback<string[]> OpenKeysChanged { get; set; }
1717
}
1818

1919
public partial class BaseMenu : IBaseMenu
2020
{
2121
[Parameter] public bool Collapsed { get; set; }
22-
[Parameter] public EventCallback<bool> HandleOpenChange { get; set; }
2322
[Parameter] public bool IsMobile { get; set; }
2423
[Parameter] public MenuDataItem[] MenuData { get; set; } = { };
2524
[Parameter] public MenuMode Mode { get; set; }
2625
[Parameter] public EventCallback<bool> OnCollapse { get; set; }
27-
[Parameter] public string[] OpenKeys { get; set; } = { };
26+
[Parameter] public string[] OpenKeys { get; set; } = [];
27+
[Parameter] public EventCallback<string[]> OpenKeysChanged { get; set; }
28+
2829
[Parameter] public bool Accordion { get; set; }
2930

3031
[Inject] public ILogger<BaseMenu> Logger { get; set; }
@@ -33,9 +34,5 @@ protected override void OnInitialized()
3334
{
3435
Logger.LogInformation("BaseMenu initialized.");
3536
}
36-
37-
public void SetOpenKeys(string[] keys)
38-
{
39-
}
4037
}
4138
}

src/layout/src/SiderMenu/SiderMenu.razor

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
Collapsed="Collapsed"
3636
OpenKeys="OpenKeys"
3737
Accordion="@Accordion"
38+
OpenKeysChanged="OpenKeysChanged"
3839
Style="@("width: '100%'")" />
3940
</div>
4041

src/layout/src/SiderMenu/SiderMenu.razor.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ internal interface ISiderMenu : IBaseMenu
1717
EventCallback<MouseEventArgs> OnMenuHeaderClick { get; }
1818
bool Hide { get; }
1919
List<RenderFragment> Links { get; }
20-
EventCallback<string[]> OnOpenChange { get; }
2120
}
2221

2322
public partial class SiderMenu : ISiderMenu
@@ -34,15 +33,15 @@ public partial class SiderMenu : ISiderMenu
3433
[Parameter] public MenuDataItem[] MenuData { get; set; }
3534
[Parameter] public MenuMode Mode { get; set; } = MenuMode.Inline;
3635
[Parameter] public EventCallback<bool> OnCollapse { get; set; }
37-
[Parameter] public string[] OpenKeys { get; set; } = { };
36+
[Parameter] public string[] OpenKeys { get; set; } = [];
3837
[Parameter] public OneOf<string, RenderFragment> Logo { get; set; }
3938
[Parameter] public string BaseURL { get; set; } = "/";
4039
[Parameter] public int SiderWidth { get; set; } = 208;
4140
[Parameter] public BreakpointType Breakpoint { get; set; } = BreakpointType.Lg;
4241
[Parameter] public bool Hide { get; set; }
4342
[Parameter] public List<RenderFragment> Links { get; set; }
4443
[Parameter] public EventCallback<MouseEventArgs> OnMenuHeaderClick { get; set; }
45-
[Parameter] public EventCallback<string[]> OnOpenChange { get; set; }
44+
[Parameter] public EventCallback<string[]> OpenKeysChanged { get; set; }
4645

4746
[CascadingParameter(Name = nameof(MenuExtraRender))]
4847
public RenderFragment MenuExtraRender { get; set; }

src/layout/src/TopNavHeader/TopNavHeader.razor.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public partial class TopNavHeader : ITopNavHeader
1919
[Parameter] public MenuDataItem[] MenuData { get; set; }
2020
[Parameter] public MenuMode Mode { get; set; }
2121
[Parameter] public EventCallback<bool> OnCollapse { get; set; }
22-
[Parameter] public string[] OpenKeys { get; set; }
22+
[Parameter] public string[] OpenKeys { get; set; } = [];
2323
[Parameter] public MenuTheme Theme { get; set; }
2424
[Parameter] public OneOf<string, RenderFragment> Logo { get; set; }
2525
[Parameter] public int SiderWidth { get; set; }
@@ -29,7 +29,7 @@ public partial class TopNavHeader : ITopNavHeader
2929
[Parameter] public EventCallback<MouseEventArgs> OnMenuHeaderClick { get; set; }
3030
[Parameter] public bool Hide { get; set; }
3131
[Parameter] public List<RenderFragment> Links { get; set; }
32-
[Parameter] public EventCallback<string[]> OnOpenChange { get; set; }
32+
[Parameter] public EventCallback<string[]> OpenKeysChanged { get; set; }
3333

3434
protected override void OnInitialized()
3535
{

0 commit comments

Comments
 (0)