From 6b78df5ed2b7786932b52eb60d3199e4df627dd9 Mon Sep 17 00:00:00 2001 From: root Date: Sun, 1 Feb 2026 02:49:54 +0200 Subject: [PATCH] Use Filament tabs for user panel navs --- .gitignore | 1 + VERSION | 2 +- app/Filament/Jabali/Pages/Backups.php | 16 ++++++- app/Filament/Jabali/Pages/Email.php | 20 ++++++++- app/Filament/Jabali/Pages/Logs.php | 24 +++++++++++ app/Filament/Jabali/Pages/PostgreSQL.php | 22 ++++++++++ install.sh | 2 +- .../components/backup-tabs-nav.blade.php | 40 ------------------ .../components/email-tabs-nav.blade.php | 42 ------------------- .../filament/jabali/pages/logs.blade.php | 40 +----------------- .../jabali/pages/postgresql.blade.php | 39 +---------------- 11 files changed, 83 insertions(+), 165 deletions(-) delete mode 100644 resources/views/filament/jabali/components/backup-tabs-nav.blade.php delete mode 100644 resources/views/filament/jabali/components/email-tabs-nav.blade.php diff --git a/.gitignore b/.gitignore index f9f80d8..699f948 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ yarn-error.log CLAUDE.md /jabali-panel_*.deb /jabali-deps_*.deb +.git-credentials diff --git a/VERSION b/VERSION index 6f42e4a..b899d52 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -VERSION=0.9-rc39 +VERSION=0.9-rc40 diff --git a/app/Filament/Jabali/Pages/Backups.php b/app/Filament/Jabali/Pages/Backups.php index b1d0907..0f72c06 100644 --- a/app/Filament/Jabali/Pages/Backups.php +++ b/app/Filament/Jabali/Pages/Backups.php @@ -29,7 +29,8 @@ use Filament\Pages\Page; use Filament\Schemas\Components\Actions as FormActions; use Filament\Schemas\Components\Grid; use Filament\Schemas\Components\Section; -use Filament\Schemas\Components\View; +use Filament\Schemas\Components\Tabs; +use Filament\Schemas\Components\Tabs\Tab; use Filament\Schemas\Schema; use Filament\Tables\Columns\IconColumn; use Filament\Tables\Columns\TextColumn; @@ -115,7 +116,18 @@ class Backups extends Page implements HasActions, HasForms, HasTable ->description(__('Create and manage backups of your account data. Backups include your websites, databases, and mailboxes. You can restore from any backup at any time.')) ->icon('heroicon-o-information-circle') ->iconColor('info'), - View::make('filament.jabali.components.backup-tabs-nav'), + Tabs::make(__('Backup Sections')) + ->livewireProperty('activeTab') + ->tabs([ + 'local' => Tab::make(__('My Backups')) + ->icon('heroicon-o-archive-box'), + 'remote' => Tab::make(__('Server Backups')) + ->icon('heroicon-o-cloud'), + 'destinations' => Tab::make(__('SFTP Destinations')) + ->icon('heroicon-o-server-stack'), + 'history' => Tab::make(__('Restore History')) + ->icon('heroicon-o-arrow-path'), + ]), ]); } diff --git a/app/Filament/Jabali/Pages/Email.php b/app/Filament/Jabali/Pages/Email.php index 0972555..6105b81 100644 --- a/app/Filament/Jabali/Pages/Email.php +++ b/app/Filament/Jabali/Pages/Email.php @@ -29,7 +29,8 @@ use Filament\Infolists\Components\TextEntry; use Filament\Notifications\Notification; use Filament\Pages\Page; use Filament\Schemas\Components\Section; -use Filament\Schemas\Components\View; +use Filament\Schemas\Components\Tabs; +use Filament\Schemas\Components\Tabs\Tab; use Filament\Schemas\Schema; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Concerns\InteractsWithTable; @@ -134,7 +135,22 @@ class Email extends Page implements HasActions, HasForms, HasTable public function emailForm(Schema $schema): Schema { return $schema->schema([ - View::make('filament.jabali.components.email-tabs-nav'), + Tabs::make(__('Email Sections')) + ->livewireProperty('activeTab') + ->tabs([ + 'mailboxes' => Tab::make(__('Mailboxes')) + ->icon('heroicon-o-envelope'), + 'forwarders' => Tab::make(__('Forwarders')) + ->icon('heroicon-o-arrow-right'), + 'autoresponders' => Tab::make(__('Autoresponders')) + ->icon('heroicon-o-clock'), + 'catchall' => Tab::make(__('Catch-All')) + ->icon('heroicon-o-inbox-stack'), + 'logs' => Tab::make(__('Logs')) + ->icon('heroicon-o-document-text'), + 'spam' => Tab::make(__('Spam Settings')) + ->icon('heroicon-o-shield-check'), + ]), ]); } diff --git a/app/Filament/Jabali/Pages/Logs.php b/app/Filament/Jabali/Pages/Logs.php index 89d7f4d..fb8d953 100644 --- a/app/Filament/Jabali/Pages/Logs.php +++ b/app/Filament/Jabali/Pages/Logs.php @@ -14,6 +14,9 @@ use Filament\Forms\Concerns\InteractsWithForms; use Filament\Forms\Contracts\HasForms; use Filament\Notifications\Notification; use Filament\Pages\Page; +use Filament\Schemas\Components\Tabs; +use Filament\Schemas\Components\Tabs\Tab; +use Filament\Schemas\Schema; use Illuminate\Contracts\Support\Htmlable; use Illuminate\Support\Facades\Auth; use Livewire\Attributes\Url; @@ -90,6 +93,27 @@ class Logs extends Page implements HasActions, HasForms $this->activeTab = $this->normalizeTab($tab); } + protected function getForms(): array + { + return ['tabsForm']; + } + + public function tabsForm(Schema $schema): Schema + { + return $schema->schema([ + Tabs::make(__('Log Sections')) + ->livewireProperty('activeTab') + ->tabs([ + 'logs' => Tab::make(__('Logs')) + ->icon('heroicon-o-document-text'), + 'stats' => Tab::make(__('Statistics')) + ->icon('heroicon-o-chart-bar'), + 'activity' => Tab::make(__('Activity Log')) + ->icon('heroicon-o-clipboard-document-list'), + ]), + ]); + } + protected function normalizeTab(?string $tab): string { return match ($tab) { diff --git a/app/Filament/Jabali/Pages/PostgreSQL.php b/app/Filament/Jabali/Pages/PostgreSQL.php index 3b1eb95..b5502d0 100644 --- a/app/Filament/Jabali/Pages/PostgreSQL.php +++ b/app/Filament/Jabali/Pages/PostgreSQL.php @@ -16,6 +16,9 @@ use Filament\Forms\Concerns\InteractsWithForms; use Filament\Forms\Contracts\HasForms; use Filament\Notifications\Notification; use Filament\Pages\Page; +use Filament\Schemas\Components\Tabs; +use Filament\Schemas\Components\Tabs\Tab; +use Filament\Schemas\Schema; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Concerns\InteractsWithTable; use Filament\Tables\Contracts\HasTable; @@ -71,6 +74,25 @@ class PostgreSQL extends Page implements HasActions, HasForms, HasTable $this->resetTable(); } + protected function getForms(): array + { + return ['tabsForm']; + } + + public function tabsForm(Schema $schema): Schema + { + return $schema->schema([ + Tabs::make(__('PostgreSQL Sections')) + ->livewireProperty('activeTab') + ->tabs([ + 'databases' => Tab::make(__('Databases')) + ->icon('heroicon-o-circle-stack'), + 'users' => Tab::make(__('Users')) + ->icon('heroicon-o-users'), + ]), + ]); + } + protected function normalizeTab(string $tab): string { return in_array($tab, ['databases', 'users'], true) ? $tab : 'databases'; diff --git a/install.sh b/install.sh index 5efa05f..0155728 100755 --- a/install.sh +++ b/install.sh @@ -16,7 +16,7 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" if [[ -f "$SCRIPT_DIR/VERSION" ]]; then JABALI_VERSION="$(sed -n 's/^VERSION=//p' "$SCRIPT_DIR/VERSION")" fi -JABALI_VERSION="${JABALI_VERSION:-0.9-rc39}" +JABALI_VERSION="${JABALI_VERSION:-0.9-rc40}" # Colors RED='\033[0;31m' diff --git a/resources/views/filament/jabali/components/backup-tabs-nav.blade.php b/resources/views/filament/jabali/components/backup-tabs-nav.blade.php deleted file mode 100644 index 945849b..0000000 --- a/resources/views/filament/jabali/components/backup-tabs-nav.blade.php +++ /dev/null @@ -1,40 +0,0 @@ -@php - $tabs = [ - 'local' => ['label' => __('My Backups'), 'icon' => 'heroicon-o-archive-box'], - 'remote' => ['label' => __('Server Backups'), 'icon' => 'heroicon-o-cloud'], - 'destinations' => ['label' => __('SFTP Destinations'), 'icon' => 'heroicon-o-server-stack'], - 'history' => ['label' => __('Restore History'), 'icon' => 'heroicon-o-arrow-path'], - ]; -@endphp - - diff --git a/resources/views/filament/jabali/components/email-tabs-nav.blade.php b/resources/views/filament/jabali/components/email-tabs-nav.blade.php deleted file mode 100644 index 5e3d97a..0000000 --- a/resources/views/filament/jabali/components/email-tabs-nav.blade.php +++ /dev/null @@ -1,42 +0,0 @@ -@php - $tabs = [ - 'mailboxes' => ['label' => __('Mailboxes'), 'icon' => 'heroicon-o-envelope'], - 'forwarders' => ['label' => __('Forwarders'), 'icon' => 'heroicon-o-arrow-right'], - 'autoresponders' => ['label' => __('Autoresponders'), 'icon' => 'heroicon-o-clock'], - 'catchall' => ['label' => __('Catch-All'), 'icon' => 'heroicon-o-inbox-stack'], - 'logs' => ['label' => __('Logs'), 'icon' => 'heroicon-o-document-text'], - 'spam' => ['label' => __('Spam Settings'), 'icon' => 'heroicon-o-shield-check'], - ]; -@endphp - - diff --git a/resources/views/filament/jabali/pages/logs.blade.php b/resources/views/filament/jabali/pages/logs.blade.php index 0125145..819382b 100644 --- a/resources/views/filament/jabali/pages/logs.blade.php +++ b/resources/views/filament/jabali/pages/logs.blade.php @@ -1,43 +1,5 @@ - @php - $tabs = [ - 'logs' => ['label' => __('Logs'), 'icon' => 'heroicon-o-document-text'], - 'stats' => ['label' => __('Statistics'), 'icon' => 'heroicon-o-chart-bar'], - 'activity' => ['label' => __('Activity Log'), 'icon' => 'heroicon-o-clipboard-document-list'], - ]; - @endphp - - + {{ $this->tabsForm }} @if(in_array($activeTab, ['logs', 'stats'], true)) @if(count($this->getDomainOptions()) > 0) diff --git a/resources/views/filament/jabali/pages/postgresql.blade.php b/resources/views/filament/jabali/pages/postgresql.blade.php index e96fc64..896e4eb 100644 --- a/resources/views/filament/jabali/pages/postgresql.blade.php +++ b/resources/views/filament/jabali/pages/postgresql.blade.php @@ -1,42 +1,5 @@ - @php - $tabs = [ - 'databases' => ['label' => __('Databases'), 'icon' => 'heroicon-o-circle-stack'], - 'users' => ['label' => __('Users'), 'icon' => 'heroicon-o-users'], - ]; - @endphp - - + {{ $this->tabsForm }}
{{ $this->table }}