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

This commit is contained in:
Yassine Doghri 2021-09-02 10:01:20 +00:00
parent a95de8bab0
commit 58c8839902
3 changed files with 39 additions and 6 deletions

View File

@ -0,0 +1,22 @@
<?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/',
];
}

View File

@ -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);

View File

@ -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;
}