38 lines
1.3 KiB
PHP
38 lines
1.3 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Shared\Infrastructure\ApiPlatform\State;
|
|
|
|
use ApiPlatform\Metadata\Operation;
|
|
use ApiPlatform\State\ProviderInterface;
|
|
use App\Shared\Domain\Module\ModuleRegistry;
|
|
use App\Shared\Domain\Sidebar\SidebarFilter;
|
|
use App\Shared\Infrastructure\ApiPlatform\Resource\SidebarResource;
|
|
use Symfony\Component\DependencyInjection\Attribute\Autowire;
|
|
|
|
final readonly class SidebarProvider implements ProviderInterface
|
|
{
|
|
public function __construct(
|
|
#[Autowire('%kernel.project_dir%')]
|
|
private string $projectDir,
|
|
) {}
|
|
|
|
public function provide(Operation $operation, array $uriVariables = [], array $context = []): SidebarResource
|
|
{
|
|
/** @var list<class-string> $moduleClasses */
|
|
$moduleClasses = require $this->projectDir.'/config/modules.php';
|
|
|
|
/** @var list<array{label:string, icon:string, items: list<array{label:string, to:string, icon:string, module?:string}>}> $sidebar */
|
|
$sidebar = require $this->projectDir.'/config/sidebar.php';
|
|
|
|
$filtered = SidebarFilter::filter($sidebar, ModuleRegistry::ids($moduleClasses));
|
|
|
|
$dto = new SidebarResource();
|
|
$dto->sections = $filtered['sections'];
|
|
$dto->disabledRoutes = $filtered['disabledRoutes'];
|
|
|
|
return $dto;
|
|
}
|
|
}
|