Skip to content
Snippets Groups Projects
Commit 58c88399 authored by Yassine Doghri's avatar Yassine Doghri
Browse files

refactor(componentrenderer): update locateView using a lookupModules property in config

parent a95de8ba
No related branches found
No related tags found
No related merge requests found
<?php
declare(strict_types=1);
namespace Config;
use ViewComponents\Config\ViewComponents as ViewComponentsConfig;
class ViewComponents extends ViewComponentsConfig
{
/**
* @var array<string, string>
*/
public array $lookupModules = [
APP_NAMESPACE => APPPATH,
'Modules\Admin' => ROOTPATH . 'modules/Admin/',
'Modules\Auth' => ROOTPATH . 'modules/Auth/',
'Modules\Analytics' => ROOTPATH . 'modules/Analytics/',
'Modules\Install' => ROOTPATH . 'modules/Install/',
'Modules\Fediverse' => ROOTPATH . 'modules/Fediverse/',
];
}
......@@ -137,12 +137,13 @@ class ComponentRenderer
private function locateView(string $name): string
{
// TODO: Is there a better way to locate components local to current module?
$modulesToDiscover = [APPPATH];
foreach (config('Autoload')->psr4 as $namespace => $path) {
if (str_starts_with($this->currentView, $namespace)) {
array_unshift($modulesToDiscover, $path);
}
}
$modulesToDiscover = [];
$lookupModules = $this->config->lookupModules;
$modulesToDiscover = array_filter($lookupModules, function ($namespace): bool {
return str_starts_with($this->currentView, $namespace);
}, ARRAY_FILTER_USE_KEY);
$modulesToDiscover = array_values($modulesToDiscover);
$modulesToDiscover[] = $this->config->defaultLookupPath;
$namePath = str_replace('.', '/', $name);
......
......@@ -11,4 +11,14 @@ class ViewComponents extends BaseConfig
public string $classComponentsPath = 'View/Components';
public string $viewFileComponentsPath = 'Views/components';
/**
* Modules to look into for local components. Associative array with the module namespace as key and the module path
* as value.
*
* @var array<string, string>
*/
public array $lookupModules = [];
public string $defaultLookupPath = APPPATH;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment