diff --git a/app/Config/ViewComponents.php b/app/Config/ViewComponents.php new file mode 100644 index 0000000000000000000000000000000000000000..25afea847f7394eb97d1d29f87816e6f31f80771 --- /dev/null +++ b/app/Config/ViewComponents.php @@ -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/', + ]; +} diff --git a/app/Libraries/ViewComponents/ComponentRenderer.php b/app/Libraries/ViewComponents/ComponentRenderer.php index c20d9d44bb83ffc724c4cb1d58a5597848bdc3a3..38a8e9ecc43bf01bd96355edc530f96da366061c 100644 --- a/app/Libraries/ViewComponents/ComponentRenderer.php +++ b/app/Libraries/ViewComponents/ComponentRenderer.php @@ -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); diff --git a/app/Libraries/ViewComponents/Config/ViewComponents.php b/app/Libraries/ViewComponents/Config/ViewComponents.php index efd459958c5fa292d5314b0cb315ee1806c56697..56c041fb1e5dcb41fc9c6f3ccbdc41067ea4d777 100644 --- a/app/Libraries/ViewComponents/Config/ViewComponents.php +++ b/app/Libraries/ViewComponents/Config/ViewComponents.php @@ -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; }