MenuBuilder   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 44
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 24
c 2
b 0
f 0
dl 0
loc 44
rs 10
wmc 9

2 Methods

Rating   Name   Duplication   Size   Complexity  
A build() 0 4 1
B processMenu() 0 35 8
1
<?php
2
3
declare(strict_types=1);
4
5
namespace KielD01\LaravelMaterialDashboardPro\Helpers;
6
7
use Illuminate\Support\Facades\Config;
8
use KielD01\LaravelMaterialDashboardPro\Helpers\Icons\FontAwesomeIcon;
9
use KielD01\LaravelMaterialDashboardPro\Helpers\Icons\MaterialIcon;
10
11
class MenuBuilder
12
{
13
	public function build(): array
14
	{
15
		return $this->processMenu(
16
			Config::get('mdp.menu', [])
17
		);
18
	}
19
20
	private function processMenu(array $menuItems, bool $isChild = false): array
21
	{
22
		/** @var MenuVisibilityResolver $menuResolver */
23
		$menuResolver = resolve(Config::get('mdp.core.menu_permission_resolver'));
24
25
		foreach ($menuItems as $index => $menuItem) {
26
			if (!array_key_exists('can', $menuItem) || $menuResolver->resolve($menuItem['can'])) {
27
				$link = array_key_exists('link', $menuItem) ?
28
					$menuItem['link'] :
29
					['type' => MenuItemLinkType::URI, 'uri' => '#'];
30
31
				$hasIcon = array_key_exists('icon', $menuItem);
32
33
				/** @var FontAwesomeIcon|MaterialIcon $iconClass */
34
				$iconClass = null;
35
				$icon = null;
36
37
				if ($hasIcon) {
38
					[$iconClass, $icon] = $menuItem['icon'];
39
				}
40
41
				$menuItems[$index] = new MenuItem(
42
					$menuItem['title'],
43
					$link['type'],
44
					$link[$link['type']],
45
					$isChild && !$hasIcon ? null : new $iconClass($icon),
46
					$this->processMenu($menuItem['children'] ?? [], true),
47
					$isChild
48
				);
49
			} else {
50
				unset($menuItems[$index]);
51
			}
52
		}
53
54
		return $menuItems;
55
	}
56
}
57