diff --git a/app/Filament/Server/Pages/Console.php b/app/Filament/Server/Pages/Console.php
index 855da8585..938c7b409 100644
--- a/app/Filament/Server/Pages/Console.php
+++ b/app/Filament/Server/Pages/Console.php
@@ -38,10 +38,10 @@ class Console extends Page
try {
$server->validateCurrentState();
} catch (ServerStateConflictException $exception) {
- AlertBanner::make()
- ->warning()
+ AlertBanner::make('server_conflict')
->title('Warning')
->body($exception->getMessage())
+ ->warning()
->send();
}
}
diff --git a/app/Filament/Server/Resources/FileResource/Pages/EditFiles.php b/app/Filament/Server/Resources/FileResource/Pages/EditFiles.php
index 21821f9f3..b9ea5c3d9 100644
--- a/app/Filament/Server/Resources/FileResource/Pages/EditFiles.php
+++ b/app/Filament/Server/Resources/FileResource/Pages/EditFiles.php
@@ -149,7 +149,7 @@ class EditFiles extends Page
$this->form->fill();
if (str($path)->endsWith('.pelicanignore')) {
- AlertBanner::make()
+ AlertBanner::make('.pelicanignore_info')
->title('You\'re editing a .pelicanignore
file!')
->body('Any files or directories listed in here will be excluded from backups. Wildcards are supported by using an asterisk (*
).
You can negate a prior rule by prepending an exclamation point (!
).')
->info()
diff --git a/app/Filament/Server/Resources/FileResource/Pages/ListFiles.php b/app/Filament/Server/Resources/FileResource/Pages/ListFiles.php
index 49ce60224..21ae6a00d 100644
--- a/app/Filament/Server/Resources/FileResource/Pages/ListFiles.php
+++ b/app/Filament/Server/Resources/FileResource/Pages/ListFiles.php
@@ -57,13 +57,18 @@ class ListFiles extends ListRecords
public function mount(?string $path = null): void
{
parent::mount();
+
$this->path = $path ?? '/';
try {
$this->getDaemonFileRepository()->getDirectory('/');
} catch (ConnectionException) {
$this->isDisabled = true;
- $this->getFailureNotification();
+
+ AlertBanner::make('node_connection_error')
+ ->title('Could not connect to the node!')
+ ->danger()
+ ->send();
}
}
@@ -563,14 +568,6 @@ class ListFiles extends ListRecords
return $this->fileRepository;
}
- public function getFailureNotification(): AlertBanner
- {
- return AlertBanner::make()
- ->title('Could not connect to the node!')
- ->danger()
- ->send();
- }
-
public static function route(string $path): PageRegistration
{
return new PageRegistration(
diff --git a/app/Filament/Server/Widgets/ServerConsole.php b/app/Filament/Server/Widgets/ServerConsole.php
index fab490942..9560bf2e7 100644
--- a/app/Filament/Server/Widgets/ServerConsole.php
+++ b/app/Filament/Server/Widgets/ServerConsole.php
@@ -130,7 +130,7 @@ class ServerConsole extends Widget
#[On('websocket-error')]
public function websocketError(): void
{
- AlertBanner::make()
+ AlertBanner::make('websocket_error')
->title('Could not connect to websocket!')
->body('Check your browser console for more details.')
->danger()
diff --git a/app/Livewire/AlertBanner.php b/app/Livewire/AlertBanner.php
index a35ebae8f..773046081 100644
--- a/app/Livewire/AlertBanner.php
+++ b/app/Livewire/AlertBanner.php
@@ -44,9 +44,8 @@ final class AlertBanner implements Wireable
public static function fromLivewire(mixed $value): AlertBanner
{
- $static = AlertBanner::make();
+ $static = AlertBanner::make($value['id']);
- $static->id($value['id']);
$static->title($value['title']);
$static->body($value['body']);
$static->status($value['status']);
diff --git a/app/Livewire/AlertBannerContainer.php b/app/Livewire/AlertBannerContainer.php
index 8f2c03f3c..d5d7bf60c 100644
--- a/app/Livewire/AlertBannerContainer.php
+++ b/app/Livewire/AlertBannerContainer.php
@@ -3,6 +3,7 @@
namespace App\Livewire;
use Illuminate\Contracts\View\View;
+use Livewire\Attributes\On;
use Livewire\Component;
class AlertBannerContainer extends Component
@@ -16,6 +17,7 @@ class AlertBannerContainer extends Component
$this->pullFromSession();
}
+ #[On('alertBannerSent')]
public function pullFromSession(): void
{
foreach (session()->pull('alert-banners', []) as $alertBanner) {
diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php
index 843169eff..acddc618e 100644
--- a/app/Providers/AppServiceProvider.php
+++ b/app/Providers/AppServiceProvider.php
@@ -37,8 +37,13 @@ use Illuminate\Support\Facades\URL;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Str;
use Laravel\Sanctum\Sanctum;
+use Livewire\Component;
+use Livewire\Livewire;
use Spatie\Health\Facades\Health;
+use function Livewire\on;
+use function Livewire\store;
+
class AppServiceProvider extends ServiceProvider
{
/**
@@ -139,6 +144,22 @@ class AppServiceProvider extends ServiceProvider
fn () => Blade::render('filament.layouts.footer'),
);
+ on('dehydrate', function (Component $component) {
+ if (!Livewire::isLivewireRequest()) {
+ return;
+ }
+
+ if (store($component)->has('redirect')) {
+ return;
+ }
+
+ if (count(session()->get('alert-banners') ?? []) <= 0) {
+ return;
+ }
+
+ $component->dispatch('alertBannerSent');
+ });
+
// Don't run any health checks during tests
if (!$app->runningUnitTests()) {
Health::checks([
diff --git a/resources/views/livewire/alerts/alert-banner-container.blade.php b/resources/views/livewire/alerts/alert-banner-container.blade.php
index b8a8402d5..3d1f34d3f 100644
--- a/resources/views/livewire/alerts/alert-banner-container.blade.php
+++ b/resources/views/livewire/alerts/alert-banner-container.blade.php
@@ -1,4 +1,4 @@
-