Skip to content

Commit d74e649

Browse files
committed
fix handling sub-menu
1 parent 2e17aa7 commit d74e649

File tree

7 files changed

+345
-178
lines changed

7 files changed

+345
-178
lines changed

helpers.php

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,26 @@
1010
*
1111
* @return \Kfn\Menu\Contracts\GroupedMenu
1212
*/
13-
function menus(?string $name = null): \Kfn\Menu\Contracts\GroupedMenu
13+
function menus(string|null $name = null): \Kfn\Menu\Contracts\GroupedMenu
1414
{
1515
return new \Kfn\Menu\Factory(name: $name);
1616
}
1717
}
1818

19+
if (! function_exists('subMenus')) {
20+
/**
21+
* Menu instance.
22+
*
23+
* @param string|null $name
24+
*
25+
* @return \Kfn\Menu\Contracts\SubMenu
26+
*/
27+
function subMenus(string|null $name = null): \Kfn\Menu\Contracts\SubMenu
28+
{
29+
return new \Kfn\Menu\SubMenu(name: $name);
30+
}
31+
}
32+
1933
if (! function_exists('menuType')) {
2034
/**
2135
* Menu Type Enum.

src/Contracts/GroupItem.php

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use Closure;
66
use Kfn\Menu\Enum\MenuType;
7+
use Kfn\Menu\MenuCollection;
78

89
interface GroupItem
910
{
@@ -15,18 +16,20 @@ interface GroupItem
1516
* @param int $sort
1617
* @param string|null $activeRoute
1718
* @param array|null $activeRouteParam
18-
* @param \Closure|bool $resolver
19+
* @param MenuCollection|null $items
20+
* @param Closure|bool $resolver
1921
*
20-
* @return static
22+
* @return $this
2123
*/
2224
public function route(
2325
string $name,
2426
string $title,
2527
array $param = [],
2628
array $attribute = [],
2729
int $sort = 0,
28-
?string $activeRoute = null,
29-
?array $activeRouteParam = null,
30+
string|null $activeRoute = null,
31+
array|null $activeRouteParam = null,
32+
MenuCollection|null $items = null,
3033
Closure|bool $resolver = true
3134
): static;
3235

@@ -38,7 +41,8 @@ public function route(
3841
* @param int $sort
3942
* @param string|null $activeUrl
4043
* @param array|null $activeUrlParam
41-
* @param \Closure|bool $resolver
44+
* @param MenuCollection|null $items
45+
* @param Closure|bool $resolver
4246
*
4347
* @return $this
4448
*/
@@ -48,23 +52,25 @@ public function url(
4852
array $param = [],
4953
array $attribute = [],
5054
int $sort = 0,
51-
?string $activeUrl = null,
52-
?array $activeUrlParam = null,
55+
string|null $activeUrl = null,
56+
array|null $activeUrlParam = null,
57+
MenuCollection|null $items = null,
5358
Closure|bool $resolver = true
5459
): static;
5560

5661
/**
57-
* @param \Kfn\Menu\Enum\MenuType $type
62+
* @param MenuType $type
5863
* @param string $name
5964
* @param string $title
6065
* @param array $param
6166
* @param array $attribute
6267
* @param int $sort
6368
* @param string|null $activeName
6469
* @param array|null $activeParam
65-
* @param \Closure|bool $resolver
70+
* @param MenuCollection|null $items
71+
* @param Closure|bool $resolver
6672
*
67-
* @return static
73+
* @return $this
6874
*/
6975
public function add(
7076
MenuType $type,
@@ -73,8 +79,9 @@ public function add(
7379
array $param = [],
7480
array $attribute = [],
7581
int $sort = 0,
76-
?string $activeName = null,
77-
?array $activeParam = null,
82+
string|null $activeName = null,
83+
array|null $activeParam = null,
84+
MenuCollection|null $items = null,
7885
Closure|bool $resolver = true
7986
): static;
8087
}

src/Contracts/SubMenu.php

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
<?php
2+
3+
namespace Kfn\Menu\Contracts;
4+
5+
use Closure;
6+
use Kfn\Menu\Enum\MenuType;
7+
use Kfn\Menu\MenuCollection;
8+
9+
interface SubMenu
10+
{
11+
/**
12+
* @param string $name
13+
* @param string $title
14+
* @param array $param
15+
* @param array $attribute
16+
* @param int $sort
17+
* @param string|null $activeRoute
18+
* @param array|null $activeRouteParam
19+
* @param MenuCollection|null $items
20+
* @param Closure|bool $resolver
21+
*
22+
* @return $this
23+
*/
24+
public function route(
25+
string $name,
26+
string $title,
27+
array $param = [],
28+
array $attribute = [],
29+
int $sort = 0,
30+
string|null $activeRoute = null,
31+
array|null $activeRouteParam = null,
32+
MenuCollection|null $items = null,
33+
Closure|bool $resolver = true
34+
): static;
35+
36+
/**
37+
* @param string $name
38+
* @param string $title
39+
* @param array $param
40+
* @param array $attribute
41+
* @param int $sort
42+
* @param string|null $activeUrl
43+
* @param array|null $activeUrlParam
44+
* @param MenuCollection|null $items
45+
* @param Closure|bool $resolver
46+
*
47+
* @return $this
48+
*/
49+
public function url(
50+
string $name,
51+
string $title,
52+
array $param = [],
53+
array $attribute = [],
54+
int $sort = 0,
55+
string|null $activeUrl = null,
56+
array|null $activeUrlParam = null,
57+
MenuCollection|null $items = null,
58+
Closure|bool $resolver = true
59+
): static;
60+
61+
/**
62+
* @param MenuType $type
63+
* @param string $name
64+
* @param string $title
65+
* @param array $param
66+
* @param array $attribute
67+
* @param int $sort
68+
* @param string|null $activeName
69+
* @param array|null $activeParam
70+
* @param MenuCollection|null $items
71+
* @param Closure|bool $resolver
72+
*
73+
* @return $this
74+
*/
75+
public function add(
76+
MenuType $type,
77+
string $name,
78+
string $title,
79+
array $param = [],
80+
array $attribute = [],
81+
int $sort = 0,
82+
string|null $activeName = null,
83+
array|null $activeParam = null,
84+
MenuCollection|null $items = null,
85+
Closure|bool $resolver = true
86+
): static;
87+
}

src/Factory.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public function add(
7272
* @throws \Throwable
7373
*/
7474
public function get(
75-
?string $groupName = null,
75+
string|null $groupName = null,
7676
bool $resolvedOnly = true,
7777
): GroupedMenu|GroupItem {
7878
try {
@@ -95,8 +95,7 @@ public function get(
9595
if ($groupedMenu instanceof GroupedMenu && $resolvedOnly && $groupedMenu->isNotEmpty()) {
9696
$groupedMenu = $groupedMenu->each(function (GroupItem $group) {
9797
if ($group->items->isNotEmpty()) {
98-
$groupItems = $group->items->filter(fn (MenuItem $it) => $it->resolve());
99-
$group->items = $groupItems;
98+
$group->items = $group->items->filter(fn (MenuItem $it) => $it->resolve());
10099
}
101100

102101
return $group;

0 commit comments

Comments
 (0)