LaravelMenu::getMenu()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 14
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 6
nc 2
nop 1
dl 0
loc 14
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Adelf\LaravelMenu;
4
5
use Adelf\LaravelMenu\ItemProcessors\ActiveMenuItemProcessor;
6
7
final class LaravelMenu
8
{
9
    /**
10
     * @var LaravelMenuFilterFactory
11
     */
12
    private $filterFactory;
13
14
    /**
15
     * @var LaravelMenuRenderFactory
16
     */
17
    private $renderFactory;
18
19
    /**
20
     * @var ActiveMenuItemProcessor
21
     */
22
    private $activeMenuItemProcessor;
23
24
    /**
25
     * @var FilteredMenu[]
26
     */
27
    private $filterResults = [];
28
29
    public function __construct(LaravelMenuFilterFactory $filterFactory,
30
                                LaravelMenuRenderFactory $rendererFactory,
31
                                ActiveMenuItemProcessor $activeMenuItemProcessor)
32
    {
33
        $this->filterFactory = $filterFactory;
34
        $this->renderFactory = $rendererFactory;
35
        $this->activeMenuItemProcessor = $activeMenuItemProcessor;
36
    }
37
38
    /**
39
     * @param string $menuName
40
     * @return string
41
     * @throws \Throwable
42
     */
43
    public function render($menuName = 'default'): string
44
    {
45
        $result = $this->getMenu($menuName);
46
47
        return $this->renderFactory
48
            ->create(array_get($result->getMenuConfig(), 'renderer', 'blade'))
49
            ->render($result);
50
    }
51
52
    /**
53
     * @param string $menuName
54
     * @return array
55
     */
56
    public function getLastActiveItem($menuName = 'default'): array
57
    {
58
        $result = $this->getMenu($menuName);
59
60
        return $result->getLastActiveItem() ?? [];
61
    }
62
63
    /**
64
     * @param string $menuName
65
     * @return FilteredMenu
66
     */
67
    public function getMenu(string $menuName): FilteredMenu
68
    {
69
        if(array_key_exists($menuName, $this->filterResults))
70
        {
71
            return $this->filterResults[$menuName];
72
        }
73
74
        $menuConfig = include base_path('resources/menu/' . $menuName . '.php');
75
76
        $filter = $this->filterFactory->create(array_get($menuConfig, 'filter', 'two-level'));
77
78
        $items = $filter->filter($menuConfig['items']);
79
80
        return $this->filterResults[$menuName] = new FilteredMenu($items, $menuConfig, $this->activeMenuItemProcessor->getLastActiveItem());
81
    }
82
}