diff --git a/app/Filament/Server/Pages/Console.php b/app/Filament/Server/Pages/Console.php index d6b15bce3..a133afa3d 100644 --- a/app/Filament/Server/Pages/Console.php +++ b/app/Filament/Server/Pages/Console.php @@ -3,11 +3,13 @@ namespace App\Filament\Server\Pages; use App\Enums\ContainerStatus; +use App\Exceptions\Http\Server\ServerStateConflictException; use App\Filament\Server\Widgets\ServerConsole; use App\Filament\Server\Widgets\ServerCpuChart; use App\Filament\Server\Widgets\ServerMemoryChart; // use App\Filament\Server\Widgets\ServerNetworkChart; use App\Filament\Server\Widgets\ServerOverview; +use App\Livewire\AlertBanner; use App\Models\Server; use Filament\Actions\Action; use Filament\Facades\Filament; @@ -25,6 +27,22 @@ class Console extends Page public ContainerStatus $status = ContainerStatus::Offline; + public function mount(): void + { + /** @var Server $server */ + $server = Filament::getTenant(); + + try { + $server->validateCurrentState(); + } catch (ServerStateConflictException $exception) { + AlertBanner::make() + ->warning() + ->title('Warning') + ->body($exception->getMessage()) + ->send(); + } + } + public function getWidgetData(): array { return [ diff --git a/app/Filament/Server/Resources/FileResource/Pages/ListFiles.php b/app/Filament/Server/Resources/FileResource/Pages/ListFiles.php index 9700af26c..7bafed8ca 100644 --- a/app/Filament/Server/Resources/FileResource/Pages/ListFiles.php +++ b/app/Filament/Server/Resources/FileResource/Pages/ListFiles.php @@ -96,7 +96,6 @@ class ListFiles extends ListRecords ->sortable(), ]) ->recordUrl(function (File $file) use ($server) { - if ($file->is_directory) { return self::getUrl(['path' => join_paths($this->path, $file->name)]); } diff --git a/app/Livewire/AlertBanner.php b/app/Livewire/AlertBanner.php new file mode 100644 index 000000000..068593a0b --- /dev/null +++ b/app/Livewire/AlertBanner.php @@ -0,0 +1,41 @@ + $this->getTitle(), + 'body' => $this->getBody(), + 'status' => $this->getStatus(), + 'icon' => $this->getIcon(), + ]; + } + + public function send(): static + { + $alerts = session()->get('alert-banners', []); + $alerts[] = $this->toArray(); + + session()->flash('alert-banners', $alerts); + + return $this; + } +} diff --git a/app/Livewire/ServerConflictBanner.php b/app/Livewire/ServerConflictBanner.php deleted file mode 100644 index a67901b71..000000000 --- a/app/Livewire/ServerConflictBanner.php +++ /dev/null @@ -1,34 +0,0 @@ -server = $server; - } - - #[On('console-install-completed')] - #[On('console-install-started')] - #[On('console-status')] - public function refresh(?string $state = null): void - { - $this->server->fresh(); - } - - public function render(): View - { - return view('livewire.server-conflict-banner'); - } -} diff --git a/app/Models/File.php b/app/Models/File.php index 9f9f6f2aa..e4f96bef2 100644 --- a/app/Models/File.php +++ b/app/Models/File.php @@ -2,10 +2,10 @@ namespace App\Models; +use App\Livewire\AlertBanner; use App\Repositories\Daemon\DaemonFileRepository; use Carbon\Carbon; use Exception; -use Filament\Notifications\Notification; use Illuminate\Database\Eloquent\Builder; use Sushi\Sushi; @@ -160,9 +160,14 @@ class File extends Model } catch (Exception $exception) { report($exception); - Notification::make() - ->title('Error loading files') - ->body($exception->getMessage()) + $message = str($exception->getMessage()); + if ($message->startsWith('cURL error 7: ')) { + $message = $message->after('cURL error 7: ')->before(' after '); + } + + AlertBanner::make() + ->title('Could not load files') + ->body($message->toString()) ->danger() ->send(); diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 8e4c456d6..d54a449eb 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -5,7 +5,6 @@ namespace App\Providers; use App\Checks\NodeVersionsCheck; use App\Checks\PanelVersionCheck; use App\Checks\UsedDiskSpaceCheck; -use App\Filament\Server\Pages\Console; use App\Models; use App\Models\ApiKey; use App\Models\Node; @@ -117,8 +116,7 @@ class AppServiceProvider extends ServiceProvider FilamentView::registerRenderHook( PanelsRenderHook::CONTENT_START, - fn () => view('filament.server-conflict-banner'), - scopes: Console::class, + fn () => view('filament.alerts.alert-banner-container'), ); FilamentView::registerRenderHook( diff --git a/resources/views/filament/alerts/alert-banner-container.blade.php b/resources/views/filament/alerts/alert-banner-container.blade.php new file mode 100644 index 000000000..e224a6836 --- /dev/null +++ b/resources/views/filament/alerts/alert-banner-container.blade.php @@ -0,0 +1,11 @@ +@php + $alertBanners = session()->get('alert-banners', []); +@endphp + +@if (isset($alertBanners)) +
{{str($title)->sanitizeHtml()->toHtmlString()}}
+ @endif + + @if (filled($body)) +{{str($body)->sanitizeHtml()->toHtmlString()}}
+ @endif +