From 582cde0bb44fdc17240aedac31a5e8a91ddfe244 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20M?= Date: Tue, 9 Jan 2024 14:32:38 +0100 Subject: [PATCH] Improve component finder (#9) --- src/Auth/Forms/LoginForm.php | 15 +++-- src/Auth/Forms/RegisterForm.php | 25 ++++++--- src/Facades/LivewireUse.php | 13 ----- src/Forms/Components/Form.php | 2 +- src/LivewireUse.php | 75 ++++++++++++++++++++++++- src/LivewireUseServiceProvider.php | 69 +++++++---------------- src/Support/Discover/ComponentScout.php | 11 ++-- 7 files changed, 128 insertions(+), 82 deletions(-) diff --git a/src/Auth/Forms/LoginForm.php b/src/Auth/Forms/LoginForm.php index 70ec8733..18fc5ce7 100644 --- a/src/Auth/Forms/LoginForm.php +++ b/src/Auth/Forms/LoginForm.php @@ -32,14 +32,19 @@ public function rules(): array ]; } - protected function handle() + protected function handle(): void { - if (Auth::attempt($this->only('email', 'password'), $this->remember)) { - session()->regenerate(); + if (! Auth::attempt($this->only('email', 'password'), $this->remember)) { + $this->addError('email', __('These credentials do not match our records')); - return redirect()->intended(); + return; } - $this->addError('email', __('These credentials do not match our records')); + session()->regenerate(); + } + + protected function afterHandle(): mixed + { + return redirect()->intended(); } } diff --git a/src/Auth/Forms/RegisterForm.php b/src/Auth/Forms/RegisterForm.php index 2e7f300d..6754713d 100644 --- a/src/Auth/Forms/RegisterForm.php +++ b/src/Auth/Forms/RegisterForm.php @@ -5,7 +5,6 @@ use Foxws\LivewireUse\Forms\Components\Form; use Illuminate\Auth\Events\Registered; use Illuminate\Foundation\Auth\User; -use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Hash; use Illuminate\Validation\Rules\Password; use Livewire\Attributes\Validate; @@ -39,25 +38,35 @@ public function rules(): array ]; } - protected function handle() + protected function handle(): void { - $data = $this->only('email', 'password'); - - $data['password'] = Hash::make($data['password']); - - $user = $this->getUserModel()::create($data); + $user = $this->getUserModel()::create( + $this->getUserData() + ); request()->session()->regenerate(); auth()->login($user); event(new Registered($user)); + } - redirect()->to('/'); + protected function afterHandle(): mixed + { + return redirect()->to('/'); } protected function getUserModel(): User { return app(config('auth.providers.users.model')); } + + protected function getUserData(): array + { + $data = $this->only('email', 'password'); + + $data['password'] = Hash::make($data['password']); + + return $data; + } } diff --git a/src/Facades/LivewireUse.php b/src/Facades/LivewireUse.php index 5527f66d..5f322cb4 100644 --- a/src/Facades/LivewireUse.php +++ b/src/Facades/LivewireUse.php @@ -2,11 +2,7 @@ namespace Foxws\LivewireUse\Facades; -use Foxws\LivewireUse\Auth\Controllers\LoginController; -use Foxws\LivewireUse\Auth\Controllers\LogoutController; -use Foxws\LivewireUse\Auth\Controllers\RegisterController; use Illuminate\Support\Facades\Facade; -use Illuminate\Support\Facades\Route; /** * @see \Foxws\LivewireUse\LivewireUse @@ -17,13 +13,4 @@ protected static function getFacadeAccessor() { return \Foxws\LivewireUse\LivewireUse::class; } - - public static function routes(): void - { - Route::name('auth.')->group(function () { - Route::get('/login', LoginController::class)->name('login'); - Route::get('/logout', LogoutController::class)->name('logout'); - Route::get('/register', RegisterController::class)->name('register'); - }); - } } diff --git a/src/Forms/Components/Form.php b/src/Forms/Components/Form.php index 37785fe9..6f4ed429 100644 --- a/src/Forms/Components/Form.php +++ b/src/Forms/Components/Form.php @@ -41,7 +41,7 @@ public function submit(): void } } - protected function handle() + protected function handle(): void { // } diff --git a/src/LivewireUse.php b/src/LivewireUse.php index bdb1237b..440a2633 100755 --- a/src/LivewireUse.php +++ b/src/LivewireUse.php @@ -2,7 +2,80 @@ namespace Foxws\LivewireUse; +use Foxws\LivewireUse\Auth\Controllers\LoginController; +use Foxws\LivewireUse\Auth\Controllers\LogoutController; +use Foxws\LivewireUse\Auth\Controllers\RegisterController; +use Foxws\LivewireUse\Support\Discover\ComponentScout; +use Foxws\LivewireUse\Support\Discover\LivewireScout; +use Illuminate\Support\Facades\Blade; +use Illuminate\Support\Facades\Route; +use Illuminate\Support\Stringable; +use Livewire\Livewire; +use Spatie\StructureDiscoverer\Data\DiscoveredClass; + + class LivewireUse { - // + public static function routes(): void + { + Route::name('auth.')->group(function () { + Route::get('/login', LoginController::class)->name('login'); + Route::get('/logout', LogoutController::class)->name('logout'); + Route::get('/register', RegisterController::class)->name('register'); + }); + } + + public static function registerComponents( + string $path, + string $namespace = 'App\\', + ?string $prefix = null + ): void + { + $components = ComponentScout::create() + ->path($path) + ->prefix($prefix) + ->get(); + + collect($components) + ->each(function (DiscoveredClass $class) use ($namespace) { + $name = static::componentName($class, $namespace); + + Blade::component($class->getFcqn(), $name->value()); + }); + } + + public static function registerLivewireComponents( + string $path, + string $namespace = 'App\\', + ?string $prefix = null + ): void + { + $components = LivewireScout::create() + ->path($path) + ->prefix($prefix) + ->get(); + + collect($components) + ->each(function (DiscoveredClass $class) use ($namespace) { + $name = static::componentName($class, $namespace); + + Livewire::component($name->value(), $class->getFcqn()); + }); + } + + public static function componentName(DiscoveredClass $class, string $namespace): Stringable + { + return str($class->name) + ->kebab() + ->prepend(static::componentPrefix($class, $namespace)); + } + + public static function componentPrefix(DiscoveredClass $class, string $namespace): Stringable + { + return str($class->namespace) + ->after($namespace) + ->match('/(.*)\\\\/') + ->kebab() + ->finish('-'); + } } diff --git a/src/LivewireUseServiceProvider.php b/src/LivewireUseServiceProvider.php index c2ae5034..689b6886 100644 --- a/src/LivewireUseServiceProvider.php +++ b/src/LivewireUseServiceProvider.php @@ -2,14 +2,8 @@ namespace Foxws\LivewireUse; -use Foxws\LivewireUse\Support\Discover\ComponentScout; -use Foxws\LivewireUse\Support\Discover\LivewireScout; -use Illuminate\Support\Facades\Blade; -use Illuminate\Support\Stringable; -use Livewire\Livewire; use Spatie\LaravelPackageTools\Package; use Spatie\LaravelPackageTools\PackageServiceProvider; -use Spatie\StructureDiscoverer\Data\DiscoveredClass; class LivewireUseServiceProvider extends PackageServiceProvider { @@ -24,34 +18,11 @@ public function configurePackage(Package $package): void public function bootingPackage(): void { $this - ->registerComponents() ->registerFeatures() + ->registerComponents() ->registerLivewire(); } - protected function registerComponents(): static - { - if (config('livewire-use.components_enabled') === false) { - return $this; - } - - $components = ComponentScout::create() - ->path(__DIR__) - ->prefix('lw-use-blade') - ->get(); - - collect($components) - ->each(function (DiscoveredClass $class) { - $name = str($class->name) - ->kebab() - ->prepend(static::getComponentPrefix($class)); - - Blade::component($class->getFcqn(), $name->value()); - }); - - return $this; - } - protected function registerFeatures(): static { foreach ([ @@ -65,32 +36,30 @@ protected function registerFeatures(): static return $this; } - protected function registerLivewire(): static - { - $components = LivewireScout::create() - ->path(__DIR__) - ->prefix('lw-use-livewire') - ->get(); - collect($components) - ->each(function (DiscoveredClass $class) { - $name = str($class->name) - ->kebab() - ->prepend(static::getComponentPrefix($class)); + protected function registerComponents(): static + { + if (config('livewire-use.components_enabled') === false) { + return $this; + } - Livewire::component($name->value(), $class->getFcqn()); - }); + LivewireUse::registerComponents( + path: __DIR__, + namespace: 'Foxws\\LivewireUse\\', + prefix: 'lw-components' + ); return $this; } - protected static function getComponentPrefix(DiscoveredClass $class): Stringable + protected function registerLivewire(): static { - return str($class->namespace) - ->after('Foxws\\LivewireUse\\') - ->match('/(.*)\\\\/') - ->kebab() - ->prepend(config('livewire-use.components_prefix')) - ->finish('-'); + LivewireUse::registerLivewireComponents( + path: __DIR__, + namespace: 'Foxws\\LivewireUse\\', + prefix: 'lw-livewire' + ); + + return $this; } } diff --git a/src/Support/Discover/ComponentScout.php b/src/Support/Discover/ComponentScout.php index 5b1ca1e8..3b09e4aa 100644 --- a/src/Support/Discover/ComponentScout.php +++ b/src/Support/Discover/ComponentScout.php @@ -2,9 +2,11 @@ namespace Foxws\LivewireUse\Support\Discover; +use Illuminate\Support\Stringable; use Illuminate\View\Component; use Spatie\StructureDiscoverer\Cache\DiscoverCacheDriver; use Spatie\StructureDiscoverer\Cache\LaravelDiscoverCacheDriver; +use Spatie\StructureDiscoverer\Data\DiscoveredClass; use Spatie\StructureDiscoverer\Discover; use Spatie\StructureDiscoverer\StructureScout; @@ -28,16 +30,17 @@ public function cacheDriver(): DiscoverCacheDriver ); } - public function path(string $path): static + + public function prefix(string $prefix): static { - $this->path = $path; + $this->prefix = $prefix; return $this; } - public function prefix(string $prefix): static + public function path(string $path): static { - $this->prefix = $prefix; + $this->path = $path; return $this; }