add filter for side menu
This commit is contained in:
parent
dde61d31f4
commit
30e4c7d28a
|
|
@ -4,6 +4,7 @@ namespace App\Http\View\Composers;
|
||||||
|
|
||||||
use App\Events;
|
use App\Events;
|
||||||
use App\Services\PluginManager;
|
use App\Services\PluginManager;
|
||||||
|
use Blessing\Filter;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Arr;
|
use Illuminate\Support\Arr;
|
||||||
use Illuminate\View\View;
|
use Illuminate\View\View;
|
||||||
|
|
@ -13,9 +14,13 @@ class SideMenuComposer
|
||||||
/** @var Request */
|
/** @var Request */
|
||||||
protected $request;
|
protected $request;
|
||||||
|
|
||||||
public function __construct(Request $request)
|
/** @var Filter */
|
||||||
|
protected $filter;
|
||||||
|
|
||||||
|
public function __construct(Request $request, Filter $filter)
|
||||||
{
|
{
|
||||||
$this->request = $request;
|
$this->request = $request;
|
||||||
|
$this->filter = $filter;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function compose(View $view)
|
public function compose(View $view)
|
||||||
|
|
@ -36,9 +41,12 @@ class SideMenuComposer
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$menu = $menu[$type];
|
||||||
|
$menu = $this->filter->apply('side_menu', $menu, [$type]);
|
||||||
|
|
||||||
$view->with('items', array_map(function ($item) {
|
$view->with('items', array_map(function ($item) {
|
||||||
return $this->transform($item);
|
return $this->transform($item);
|
||||||
}, $menu[$type]));
|
}, $menu));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function transform(array $item): array
|
public function transform(array $item): array
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
namespace Tests\Fakes;
|
namespace Tests\Fakes;
|
||||||
|
|
||||||
use Blessing\Filter as BaseFilter;
|
use Blessing\Filter as BaseFilter;
|
||||||
|
use Illuminate\Support\Arr;
|
||||||
use PHPUnit\Framework\Assert;
|
use PHPUnit\Framework\Assert;
|
||||||
|
|
||||||
class Filter extends BaseFilter
|
class Filter extends BaseFilter
|
||||||
|
|
@ -11,7 +12,10 @@ class Filter extends BaseFilter
|
||||||
|
|
||||||
public function apply(string $hook, $init, $args = [])
|
public function apply(string $hook, $init, $args = [])
|
||||||
{
|
{
|
||||||
$this->applied[$hook] = array_merge([$init], $args);
|
if (!Arr::has($this->applied, $hook)) {
|
||||||
|
$this->applied[$hook] = [];
|
||||||
|
}
|
||||||
|
$this->applied[$hook][] = array_merge([$init], $args);
|
||||||
|
|
||||||
return parent::apply($hook, $init, $args);
|
return parent::apply($hook, $init, $args);
|
||||||
}
|
}
|
||||||
|
|
@ -34,9 +38,31 @@ class Filter extends BaseFilter
|
||||||
|
|
||||||
if (!empty($predicate)) {
|
if (!empty($predicate)) {
|
||||||
Assert::assertTrue(
|
Assert::assertTrue(
|
||||||
call_user_func_array($predicate, $this->applied[$hook]),
|
call_user_func_array(
|
||||||
|
$predicate,
|
||||||
|
Arr::last($this->applied[$hook])
|
||||||
|
),
|
||||||
"Arguments of Filter '$hook' does not satisfies the predicate."
|
"Arguments of Filter '$hook' does not satisfies the predicate."
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function assertHaveBeenApplied(string $hook, $predicate = null)
|
||||||
|
{
|
||||||
|
Assert::assertArrayHasKey(
|
||||||
|
$hook, $this->applied,
|
||||||
|
"Expected Filter '$hook' was not applied."
|
||||||
|
);
|
||||||
|
|
||||||
|
$result = Arr::first(
|
||||||
|
$this->applied[$hook],
|
||||||
|
function ($arguments) use ($predicate) {
|
||||||
|
return call_user_func_array($predicate, $arguments);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
Assert::assertNotNull(
|
||||||
|
$result,
|
||||||
|
"None of applies of Filter '$hook' satisfy the predicate."
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,26 @@ class SideMenuComposerTest extends TestCase
|
||||||
Event::assertDispatched(Events\ConfigureAdminMenu::class);
|
Event::assertDispatched(Events\ConfigureAdminMenu::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testFilter()
|
||||||
|
{
|
||||||
|
$filter = Fakes\Filter::fake();
|
||||||
|
|
||||||
|
$user = factory(User::class)->create();
|
||||||
|
$this->actingAs($user)->get('/user');
|
||||||
|
$filter->assertHaveBeenApplied('side_menu', function ($menu, $type) {
|
||||||
|
$this->assertCount(count(config('menu.user')), $menu);
|
||||||
|
$this->assertEquals('user', $type);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
$filter->assertApplied('side_menu', function ($menu, $type) {
|
||||||
|
$this->assertCount(count(config('menu.explore')), $menu);
|
||||||
|
$this->assertEquals('explore', $type);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public function testTransform()
|
public function testTransform()
|
||||||
{
|
{
|
||||||
$user = factory(User::class)->create();
|
$user = factory(User::class)->create();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user