Skip to content

Commit f97ca6b

Browse files
Add Livewire v4 compatibility (#544)
1 parent cf7eb0e commit f97ca6b

4 files changed

Lines changed: 25 additions & 5 deletions

File tree

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
},
3131
"require": {
3232
"php": "^8.1",
33-
"livewire/livewire": "^3.2.3",
33+
"livewire/livewire": "^3.2.3|^4.0",
3434
"spatie/laravel-package-tools": "^1.9"
3535
},
3636
"autoload": {

src/LivewireModalServiceProvider.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ public function configurePackage(Package $package): void
1919

2020
public function registeringPackage()
2121
{
22-
UpgradeCommand::addThirdPartyUpgradeStep(WireElementsModalUpgrade::class);
22+
if (class_exists(\Livewire\Features\SupportConsoleCommands\Commands\UpgradeCommand::class)) {
23+
\Livewire\Features\SupportConsoleCommands\Commands\UpgradeCommand::addThirdPartyUpgradeStep(WireElementsModalUpgrade::class);
24+
}
2325
}
2426

2527
public function bootingPackage(): void

src/Modal.php

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public function resetState(): void
2727
public function openModal($component, $arguments = [], $modalAttributes = []): void
2828
{
2929
$requiredInterface = \LivewireUI\Modal\Contracts\ModalComponent::class;
30-
$componentClass = app(ComponentRegistry::class)->getClass($component);
30+
$componentClass = $this->resolveComponentClass($component);
3131
$reflect = new ReflectionClass($componentClass);
3232

3333
if ($reflect->implementsInterface($requiredInterface) === false) {
@@ -82,7 +82,7 @@ protected function resolveParameter($attributes, $parameterName, $parameterClass
8282

8383
if(enum_exists($parameterClassName)){
8484
$enum = $parameterClassName::tryFrom($parameterValue);
85-
85+
8686
if($enum !== null){
8787
return $enum;
8888
}
@@ -111,6 +111,15 @@ public function destroyComponent($id): void
111111
unset($this->components[$id]);
112112
}
113113

114+
protected function resolveComponentClass(string $component): string
115+
{
116+
if (class_exists(\Livewire\Mechanisms\ComponentRegistry::class)) {
117+
return app(\Livewire\Mechanisms\ComponentRegistry::class)->getClass($component);
118+
}
119+
120+
return app('livewire.finder')->resolveClassComponentClassName($component);
121+
}
122+
114123
public function getListeners(): array
115124
{
116125
return [

tests/LivewireModalComponentTest.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,15 @@
88

99
class LivewireModalComponentTest extends TestCase
1010
{
11+
protected function getComponentName(string $class): string
12+
{
13+
if (class_exists(\Livewire\Mechanisms\ComponentRegistry::class)) {
14+
return app(\Livewire\Mechanisms\ComponentRegistry::class)->getName($class);
15+
}
16+
17+
return app('livewire.finder')->normalizeName($class);
18+
}
19+
1120
public function testCloseModal(): void
1221
{
1322
Livewire::test(DemoModal::class)
@@ -50,7 +59,7 @@ public function testModalEventEmitting(): void
5059
])
5160
->assertDispatched('someEvent');
5261

53-
$name = app(ComponentRegistry::class)->getName(DemoModal::class);
62+
$name = $this->getComponentName(DemoModal::class);
5463

5564
Livewire::test(DemoModal::class)
5665
->call('closeModalWithEvents', [

0 commit comments

Comments
 (0)