From b40f60d6fee4e276b07cc60fef795b0861d8b865 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Wed, 7 Aug 2019 18:40:51 +0300 Subject: [PATCH] add redirectRoute and redirectAction helpers --- src/Component.php | 7 +----- src/Concerns/PerformsRedirects.php | 23 ++++++++++++++++++ tests/RedirectTest.php | 39 ++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+), 6 deletions(-) create mode 100644 src/Concerns/PerformsRedirects.php diff --git a/src/Component.php b/src/Component.php index a3d2d380a..5943d5cfb 100644 --- a/src/Component.php +++ b/src/Component.php @@ -13,12 +13,12 @@ abstract class Component use Concerns\ValidatesInput, Concerns\DetectsDirtyProperties, Concerns\HandlesActions, + Concerns\PerformsRedirects, Concerns\ReceivesEvents, Concerns\InteractsWithProperties, Concerns\TracksRenderedChildren; public $id; - public $redirectTo; protected $lifecycleHooks = [ 'mount', 'updating', 'updated', ]; @@ -52,11 +52,6 @@ public function render() return view("livewire.{$this->getName()}"); } - public function redirect($url) - { - $this->redirectTo = $url; - } - public function output($errors = null) { $view = $this->render(); diff --git a/src/Concerns/PerformsRedirects.php b/src/Concerns/PerformsRedirects.php new file mode 100644 index 000000000..89992e621 --- /dev/null +++ b/src/Concerns/PerformsRedirects.php @@ -0,0 +1,23 @@ +redirectTo = $url; + } + + public function redirectRoute($name, $parameters = [], $absolute = true) + { + $this->redirectTo = route($name, $parameters, $absolute); + } + + public function redirectAction($name, $parameters = [], $absolute = true) + { + $this->redirectTo = action($name, $parameters, $absolute); + } +} diff --git a/tests/RedirectTest.php b/tests/RedirectTest.php index 1e4c7e63d..48bfd7856 100644 --- a/tests/RedirectTest.php +++ b/tests/RedirectTest.php @@ -19,6 +19,30 @@ public function standard_redirect() $this->assertEquals('/local', $component->redirectTo); } + /** @test */ + public function route_redirect() + { + $this->registerNamedRoute(); + + $component = app(LivewireManager::class)->test(TriggersRedirectStub::class); + + $component->runAction('triggerRedirectRoute'); + + $this->assertEquals('http://localhost/foo', $component->redirectTo); + } + + /** @test */ + public function action_redirect() + { + $this->registerAction(); + + $component = app(LivewireManager::class)->test(TriggersRedirectStub::class); + + $component->runAction('triggerRedirectAction'); + + $this->assertEquals('http://localhost/foo', $component->redirectTo); + } + /** @test */ public function redirect_helper() { @@ -69,6 +93,11 @@ protected function registerNamedRoute() return true; })->name('foo'); } + + protected function registerAction() + { + Route::get('foo', 'HomeController@index')->name('foo'); + } } class TriggersRedirectStub extends Component @@ -78,6 +107,16 @@ public function triggerRedirect() return $this->redirect('/local'); } + public function triggerRedirectRoute() + { + return $this->redirectRoute('foo'); + } + + public function triggerRedirectAction() + { + return $this->redirectAction('HomeController@index'); + } + public function triggerRedirectHelper() { return redirect('foo');