File tree 4 files changed +92
-40
lines changed
4 files changed +92
-40
lines changed Original file line number Diff line number Diff line change @@ -133,4 +133,47 @@ public function it_can_destroy_all_menus()
133
133
$ this ->menu ->destroy ();
134
134
$ this ->assertCount (0 , $ this ->menu ->all ());
135
135
}
136
+
137
+ /** @test */
138
+ public function it_still_generates_empty_menu_after_adding_dropdown ()
139
+ {
140
+ $ this ->menu ->create ('test ' , function (MenuBuilder $ menu ) {
141
+ $ menu ->dropdown ('Test ' , function ($ sub ) {
142
+
143
+ })->hideWhen (function () {
144
+ return true ;
145
+ });
146
+ });
147
+
148
+ $ expected = <<<TEXT
149
+
150
+ <ul class="nav navbar-nav">
151
+
152
+ </ul>
153
+
154
+ TEXT ;
155
+
156
+ self ::assertEquals ($ expected , $ this ->menu ->get ('test ' ));
157
+ }
158
+
159
+ /** @test */
160
+ public function it_still_generates_empty_menu_after_adding_item ()
161
+ {
162
+ $ this ->menu ->create ('test ' , function (MenuBuilder $ menu ) {
163
+ $ menu ->url ('/ ' , 'Test ' )
164
+ ->hideWhen (function () {
165
+ return true ;
166
+ });
167
+ });
168
+
169
+ $ expected = <<<TEXT
170
+
171
+ <ul class="nav navbar-nav">
172
+
173
+ </ul>
174
+
175
+ TEXT ;
176
+
177
+ self ::assertEquals ($ expected , $ this ->menu ->get ('test ' ));
178
+ }
136
179
}
Original file line number Diff line number Diff line change 3
3
namespace Nwidart \Menus ;
4
4
5
5
use Countable ;
6
- use Illuminate \Contracts \Config \Repository ;
7
6
use Illuminate \Support \Arr ;
7
+ use Nwidart \Menus \Traits \CanHide ;
8
+ use Illuminate \Contracts \Config \Repository ;
8
9
use Illuminate \View \Factory as ViewFactory ;
9
10
10
11
class MenuBuilder implements Countable
11
12
{
13
+ use CanHide;
12
14
/**
13
15
* Menu name.
14
16
*
@@ -634,7 +636,7 @@ protected function renderMenu()
634
636
$ menu = $ presenter ->getOpenTagWrapper ();
635
637
636
638
foreach ($ this ->getOrderedItems () as $ item ) {
637
- if ($ item ->hidden ()) {
639
+ if ($ item ->hidden () || $ this -> hidden () ) {
638
640
continue ;
639
641
}
640
642
Original file line number Diff line number Diff line change 2
2
3
3
namespace Nwidart \Menus ;
4
4
5
- use Closure ;
6
- use Collective \Html \HtmlFacade as HTML ;
7
- use Illuminate \Contracts \Support \Arrayable as ArrayableContract ;
8
5
use Illuminate \Support \Arr ;
9
- use Illuminate \Support \Facades \Request ;
10
6
use Illuminate \Support \Str ;
7
+ use Nwidart \Menus \Traits \CanHide ;
8
+ use Collective \Html \HtmlFacade as HTML ;
9
+ use Illuminate \Support \Facades \Request ;
10
+ use Illuminate \Contracts \Support \Arrayable as ArrayableContract ;
11
11
12
12
/**
13
13
* @property string url
22
22
*/
23
23
class MenuItem implements ArrayableContract
24
24
{
25
+ use CanHide;
25
26
/**
26
27
* Array properties.
27
28
*
@@ -54,13 +55,6 @@ class MenuItem implements ArrayableContract
54
55
'hideWhen ' ,
55
56
);
56
57
57
- /**
58
- * The hideWhen callback.
59
- *
60
- * @var Closure
61
- */
62
- protected $ hideWhen ;
63
-
64
58
/**
65
59
* Constructor.
66
60
*
@@ -592,33 +586,6 @@ public function order($order)
592
586
return $ this ;
593
587
}
594
588
595
- /**
596
- * Set hide condition for current menu item.
597
- *
598
- * @param Closure
599
- * @return boolean
600
- */
601
- public function hideWhen (Closure $ callback )
602
- {
603
- $ this ->hideWhen = $ callback ;
604
-
605
- return $ this ;
606
- }
607
-
608
- /**
609
- * Determine whether the menu item is hidden.
610
- *
611
- * @return boolean
612
- */
613
- public function hidden ()
614
- {
615
- if (is_null ($ this ->hideWhen )) {
616
- return false ;
617
- }
618
-
619
- return call_user_func ($ this ->hideWhen ) == true ;
620
- }
621
-
622
589
/**
623
590
* Get the instance as an array.
624
591
*
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ namespace Nwidart \Menus \Traits ;
4
+
5
+ use Closure ;
6
+
7
+ trait CanHide
8
+ {
9
+ /**
10
+ * @var Closure
11
+ */
12
+ protected $ hideWhen ;
13
+
14
+ /**
15
+ * Set hide condition for current menu item.
16
+ *
17
+ * @param Closure
18
+ * @return boolean
19
+ */
20
+ public function hideWhen (Closure $ callback )
21
+ {
22
+ $ this ->hideWhen = $ callback ;
23
+
24
+ return $ this ;
25
+ }
26
+
27
+ /**
28
+ * Determine whether the menu item is hidden.
29
+ *
30
+ * @return boolean
31
+ */
32
+ public function hidden ()
33
+ {
34
+ if (is_null ($ this ->hideWhen )) {
35
+ return false ;
36
+ }
37
+
38
+ return call_user_func ($ this ->hideWhen ) == true ;
39
+ }
40
+ }
You can’t perform that action at this time.
0 commit comments