Skip to content
This repository has been archived by the owner on Nov 15, 2023. It is now read-only.

Integration with Livewire added #71

Merged
merged 1 commit into from
Nov 12, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,11 @@ The format is based on [Keep a Changelog][keepachangelog] and this project adher

### Added

- Listener `FlushTranslatorCacheListener` for memory leak fixing on `Translator` implementation [#69]
- Listener `FlushTranslatorCacheListener` for memory leak fixing on `Translator` implementation [#70]
- Integration with [Livewire](https://github.com/livewire/livewire) is supported now [#71]

[#69]:https://github.com/spiral/roadrunner-laravel/pull/69
[#70]:https://github.com/spiral/roadrunner-laravel/pull/70
[#71]:https://github.com/spiral/roadrunner-laravel/pull/71

## v5.4.0

Expand Down
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,8 @@
"laravel/telescope": "^4.5",
"mockery/mockery": "^1.3.2",
"phpstan/phpstan": "~0.12.80",
"phpunit/phpunit": "^8.0 || ^9.3"
"phpunit/phpunit": "^8.0 || ^9.3",
"livewire/livewire": "^2.7"
},
"autoload": {
"psr-4": {
Expand Down
1 change: 1 addition & 0 deletions src/Defaults.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ public static function beforeLoopIteration(): array
Listeners\ResetLaravelSocialiteListener::class, // for <https://github.com/laravel/socialite>
Listeners\ResetInertiaListener::class, // for <https://github.com/inertiajs/inertia-laravel>
Listeners\ResetZiggyListener::class, // for <https://github.com/tighten/ziggy>
Listeners\ResetLivewireListener::class, // for <https://github.com/livewire/livewire>
];
}

Expand Down
39 changes: 39 additions & 0 deletions src/Listeners/ResetLivewireListener.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<?php

declare(strict_types=1);

namespace Spiral\RoadRunnerLaravel\Listeners;

use Livewire\LivewireManager;
use Spiral\RoadRunnerLaravel\Events\Contracts\WithApplication;

/**
* Target package: <https://github.com/livewire/livewire>.
*/
class ResetLivewireListener implements ListenerInterface
{
/**
* {@inheritdoc}
*/
public function handle($event): void
{
if (!\class_exists(LivewireManager::class)) {
return;
}

if ($event instanceof WithApplication) {
$app = $event->application();

if (!$app->resolved($manager_abstract = LivewireManager::class)) {
return;
}

/** @var LivewireManager $manager */
$manager = $app->make($manager_abstract);

if (\method_exists($manager, 'flushState')) {
$manager->flushState();
}
}
}
}
50 changes: 50 additions & 0 deletions tests/Unit/Listeners/ResetLivewireListenerTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<?php

declare(strict_types=1);

namespace Spiral\RoadRunnerLaravel\Tests\Unit\Listeners;

use Mockery as m;
use Livewire\LivewireManager;
use Spiral\RoadRunnerLaravel\Listeners\ResetLivewireListener;
use Spiral\RoadRunnerLaravel\Events\Contracts\WithApplication;

/**
* @covers \Spiral\RoadRunnerLaravel\Listeners\ResetLivewireListener
*/
class ResetLivewireListenerTest extends AbstractListenerTestCase
{
/**
* {@inheritdoc}
*/
public function testHandle(): void
{
/** @var LivewireManager $manager */
$manager = $this->app->make($manager_abstract = LivewireManager::class);

$manager_mock = m::mock($manager)
->makePartial()
->expects('flushState')
->withNoArgs()
->getMock();

$this->app->instance($manager_abstract, $manager_mock);

/** @var m\MockInterface|WithApplication $event_mock */
$event_mock = m::mock(WithApplication::class)
->makePartial()
->expects('application')
->andReturn($this->app)
->getMock();

$this->listenerFactory()->handle($event_mock);
}

/**
* @return ResetLivewireListener
*/
protected function listenerFactory(): ResetLivewireListener
{
return new ResetLivewireListener();
}
}