diff --git a/src/Component.php b/src/Component.php index b68cbea..8dd9235 100644 --- a/src/Component.php +++ b/src/Component.php @@ -82,8 +82,16 @@ public function voltComponentName(): string */ public function getAlias(): string { - return $this->__alias ??= array_search(static::class, (fn () => $this->aliases)->call( - app(ComponentRegistry::class), + // Livewire 3.x alias registry... + if (app()->has(ComponentRegistry::class)) { + return $this->__alias ??= array_search(static::class, (fn () => $this->aliases)->call( + app(ComponentRegistry::class), + )); + } + + // Livewire 4.x alias registry... + return $this->__alias ??= array_search(static::class, (fn () => $this->resolvedComponentCache)->call( + app('livewire.factory'), )); } diff --git a/tests/Feature/FunctionalComponentTest.php b/tests/Feature/FunctionalComponentTest.php index 6480be2..aa3f63f 100644 --- a/tests/Feature/FunctionalComponentTest.php +++ b/tests/Feature/FunctionalComponentTest.php @@ -25,6 +25,22 @@ Volt::mount([__DIR__.'/resources/views/functional-api-pages', __DIR__.'/resources/views/functional-api'], [GlobalTrait::class]); }); +/** + * Reset the resolved component names cache to simulate a new request. + */ +function resetResolvedComponentNames(): void +{ + // Livewire 3.x alias registry... + if (app()->has(ComponentRegistry::class)) { + (fn () => $this->aliases = [])->call(app(ComponentRegistry::class)); + + return; + } + + // Livewire 4.x alias registry... + (fn () => $this->resolvedComponentCache = [])->call(app('livewire.factory')); +} + it('can be rendered', function () { Livewire::test('basic-component') ->assertSee('Hello World'); @@ -419,7 +435,7 @@ public function render() $componentA->assertSee('Hello Taylor'); $componentAClass = get_class($componentA->instance()); - (fn () => $this->aliases = [])->call(app(ComponentRegistry::class)); + resetResolvedComponentNames(); $componentB = Livewire::test('basic-component', ['name' => 'Nuno']); $componentB->assertSee('Hello Nuno'); @@ -443,7 +459,7 @@ public function render() $componentA->assertSee('Hello Taylor'); $componentAClass = get_class($componentA->instance()); - (fn () => $this->aliases = [])->call(app(ComponentRegistry::class)); + resetResolvedComponentNames(); // Clear the views cache... Artisan::call('view:clear'); @@ -471,7 +487,7 @@ public function render() $componentA->assertSee('Hello Taylor'); $componentAClass = get_class($componentA->instance()); - (fn () => $this->aliases = [])->call(app(ComponentRegistry::class)); + resetResolvedComponentNames(); touch($original); // Simulate a change to the component file... clearstatcache(); @@ -674,16 +690,16 @@ public function render() Volt::test('first-fragment-component', ['name' => 'Taylor']) ->assertSee('First - Hello Taylor'); - (fn () => $this->aliases = [])->call(app(ComponentRegistry::class)); + resetResolvedComponentNames(); Volt::test('first-fragment-component', ['name' => 'Taylor']) ->assertSee('First - Hello Taylor'); - (fn () => $this->aliases = [])->call(app(ComponentRegistry::class)); + resetResolvedComponentNames(); view()->file(__DIR__.'/resources/views/functional-api-pages/page-with-multiple-fragments.blade.php')->render(); - (fn () => $this->aliases = [])->call(app(ComponentRegistry::class)); + resetResolvedComponentNames(); view()->file(__DIR__.'/resources/views/functional-api-pages/page-with-multiple-fragments.blade.php')->render(); @@ -710,22 +726,22 @@ public function render() Volt::test('first-fragment-component', ['name' => 'Taylor']) ->assertSee('First - Hello Taylor'); - (fn () => $this->aliases = [])->call(app(ComponentRegistry::class)); + resetResolvedComponentNames(); Volt::test('first-fragment-component', ['name' => 'Taylor']) ->assertSee('First - Hello Taylor'); - (fn () => $this->aliases = [])->call(app(ComponentRegistry::class)); + resetResolvedComponentNames(); Volt::test('first-fragment-component', ['name' => 'Taylor']) ->assertSee('First - Hello Taylor'); - (fn () => $this->aliases = [])->call(app(ComponentRegistry::class)); + resetResolvedComponentNames(); Volt::test('first-fragment-component', ['name' => 'Taylor']) ->assertSee('First - Hello Taylor'); - (fn () => $this->aliases = [])->call(app(ComponentRegistry::class)); + resetResolvedComponentNames(); Volt::test('first-fragment-component', ['name' => 'Taylor']) ->assertSee('First - Hello Taylor'); @@ -749,7 +765,7 @@ public function render() File::partialMock(); - (fn () => $this->aliases = [])->call(app(ComponentRegistry::class)); + resetResolvedComponentNames(); Artisan::call('view:clear'); Volt::test('first-fragment-component', ['name' => 'Taylor']) @@ -765,7 +781,7 @@ public function render() ]); }); - (fn () => $this->aliases = [])->call(app(ComponentRegistry::class)); + resetResolvedComponentNames(); Artisan::call('view:clear'); Volt::test('first-fragment-component', ['name' => 'Taylor'])