From 81178f81b4203a9d38a5161d25fdf8b098023396 Mon Sep 17 00:00:00 2001 From: Boy132 Date: Sun, 28 Sep 2025 19:12:05 +0200 Subject: [PATCH] Redirect to previous page when clicking "cancel" on `EditFiles` page (#1747) --- .../Resources/Files/Pages/EditFiles.php | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/app/Filament/Server/Resources/Files/Pages/EditFiles.php b/app/Filament/Server/Resources/Files/Pages/EditFiles.php index 1eb27dd00..16bd44dca 100644 --- a/app/Filament/Server/Resources/Files/Pages/EditFiles.php +++ b/app/Filament/Server/Resources/Files/Pages/EditFiles.php @@ -27,11 +27,13 @@ use Filament\Schemas\Components\Section; use Filament\Schemas\Components\Utilities\Get; use Filament\Schemas\Schema; use Filament\Support\Enums\Alignment; +use Filament\Support\Facades\FilamentView; use Illuminate\Contracts\Filesystem\FileNotFoundException; use Illuminate\Database\Eloquent\Model; use Illuminate\Http\Client\ConnectionException; use Illuminate\Routing\Route; use Illuminate\Support\Facades\Route as RouteFacade; +use Illuminate\Support\Js; use Livewire\Attributes\Locked; use Throwable; @@ -54,6 +56,8 @@ class EditFiles extends Page #[Locked] public string $path; + public ?string $previousUrl = null; + private DaemonFileRepository $fileRepository; /** @var array|null */ @@ -93,7 +97,8 @@ class EditFiles extends Page ->body(fn () => $this->path) ->send(); - $this->redirect(ListFiles::getUrl(['path' => dirname($this->path)])); + $url = ListFiles::getUrl(['path' => dirname($this->path)]); + $this->redirect($url, FilamentView::hasSpaMode($url)); }), Action::make('save') ->label(trans('server/file.actions.edit.save')) @@ -117,7 +122,13 @@ class EditFiles extends Page ->label(trans('server/file.actions.edit.cancel')) ->color('danger') ->icon('tabler-x') - ->url(fn () => ListFiles::getUrl(['path' => dirname($this->path)])), + ->alpineClickHandler(function () { + $url = $this->previousUrl ?? ListFiles::getUrl(['path' => dirname($this->path)]); + + return FilamentView::hasSpaMode($url) + ? 'document.referrer ? window.history.back() : Livewire.navigate(' . Js::from($url) . ')' + : 'document.referrer ? window.history.back() : (window.location.href = ' . Js::from($url) . ')'; + }), ]) ->footerActionsAlignment(Alignment::End) ->schema([ @@ -168,7 +179,8 @@ class EditFiles extends Page ->closable() ->send(); - $this->redirect(ListFiles::getUrl(['path' => dirname($this->path)])); + $url = ListFiles::getUrl(['path' => dirname($this->path)]); + $this->redirect($url, FilamentView::hasSpaMode($url)); } catch (FileNotFoundException) { AlertBanner::make('file_not_found') ->title(trans('server/file.alerts.file_not_found.title', ['name' => basename($this->path)])) @@ -176,7 +188,8 @@ class EditFiles extends Page ->closable() ->send(); - $this->redirect(ListFiles::getUrl(['path' => dirname($this->path)])); + $url = ListFiles::getUrl(['path' => dirname($this->path)]); + $this->redirect($url, FilamentView::hasSpaMode($url)); } catch (FileNotEditableException) { AlertBanner::make('file_is_directory') ->title(trans('server/file.alerts.file_not_found.title', ['name' => basename($this->path)])) @@ -184,11 +197,13 @@ class EditFiles extends Page ->closable() ->send(); - $this->redirect(ListFiles::getUrl(['path' => dirname($this->path)])); + $url = ListFiles::getUrl(['path' => dirname($this->path)]); + $this->redirect($url, FilamentView::hasSpaMode($url)); } catch (ConnectionException) { // Alert banner for this one will be handled by ListFiles - $this->redirect(ListFiles::getUrl(['path' => dirname($this->path)])); + $url = ListFiles::getUrl(['path' => dirname($this->path)]); + $this->redirect($url, FilamentView::hasSpaMode($url)); } }), ]) @@ -204,6 +219,8 @@ class EditFiles extends Page $this->form->fill(); + $this->previousUrl = url()->previous(); + if (str($path)->endsWith('.pelicanignore')) { AlertBanner::make('.pelicanignore_info') ->title(trans('server/file.alerts.pelicanignore.title'))