This commit is contained in:
notCharles 2025-04-24 19:03:34 -04:00
parent fccd7e5e75
commit 61da930909
142 changed files with 1475 additions and 1129 deletions

View File

@ -21,7 +21,7 @@ enum BackupStatus: string implements HasColor, HasIcon, HasLabel
};
}
public function getColor(): string
public function getColor(): ?string
{
return match ($this) {
self::InProgress => 'primary',

View File

@ -40,7 +40,7 @@ enum ContainerStatus: string implements HasColor, HasIcon, HasLabel
};
}
public function getColor(bool $hex = false): string
public function getColor(bool $hex = false): ?string
{
if ($hex) {
return match ($this) {

View File

@ -27,7 +27,7 @@ enum ServerState: string implements HasColor, HasIcon, HasLabel
};
}
public function getColor(): string
public function getColor(): ?string
{
return match ($this) {
self::Normal => 'primary',

View File

@ -39,7 +39,7 @@ abstract class CaptchaProvider
abstract public function getId(): string;
abstract public function getComponent(): Component;
abstract public function getComponent(): \Filament\Schemas\Components\Component;
/**
* @return array<string, string|string[]|bool|null>
@ -55,7 +55,7 @@ abstract class CaptchaProvider
}
/**
* @return Component[]
* @return \Filament\Schemas\Components\Component[]
*/
public function getSettingsForm(): array
{

View File

@ -18,7 +18,7 @@ class TurnstileProvider extends CaptchaProvider
return 'turnstile';
}
public function getComponent(): Component
public function getComponent(): \Filament\Schemas\Components\Component
{
return TurnstileCaptcha::make('turnstile');
}
@ -34,7 +34,7 @@ class TurnstileProvider extends CaptchaProvider
}
/**
* @return Component[]
* @return \Filament\Schemas\Components\Component[]
*/
public function getSettingsForm(): array
{

View File

@ -31,7 +31,7 @@ final class DiscordProvider extends OAuthProvider
public function getSetupSteps(): array
{
return array_merge([
Step::make('Register new Discord OAuth App')
\Filament\Schemas\Components\Wizard\Step::make('Register new Discord OAuth App')
->schema([
Placeholder::make('')
->content(new HtmlString(Blade::render('<p>Visit the <x-filament::link href="https://discord.com/developers/applications" target="_blank">Discord Developer Portal</x-filament::link> and click on <b>New Application</b>. Enter a <b>Name</b> (e.g. your panel name) and click on <b>Create</b>.</p><p>Copy the <b>Client ID</b> and the <b>Client Secret</b> from the OAuth2 tab, you will need them in the final step.</p>'))),

View File

@ -25,7 +25,7 @@ final class GithubProvider extends OAuthProvider
public function getSetupSteps(): array
{
return array_merge([
Step::make('Register new Github OAuth App')
\Filament\Schemas\Components\Wizard\Step::make('Register new Github OAuth App')
->schema([
Placeholder::make('')
->content(new HtmlString(Blade::render('<p>Visit the <x-filament::link href="https://github.com/settings/developers" target="_blank">Github Developer Dashboard</x-filament::link>, go to <b>OAuth Apps</b> and click on <b>New OAuth App</b>.</p><p>Enter an <b>Application name</b> (e.g. your panel name), set <b>Homepage URL</b> to your panel url and enter the below url as <b>Authorization callback URL</b>.</p>'))),
@ -38,7 +38,7 @@ final class GithubProvider extends OAuthProvider
Placeholder::make('')
->content(new HtmlString('<p>When you filled all fields click on <b>Register application</b>.</p>')),
]),
Step::make('Create Client Secret')
\Filament\Schemas\Components\Wizard\Step::make('Create Client Secret')
->schema([
Placeholder::make('')
->content(new HtmlString('<p>Once you registered your app, generate a new <b>Client Secret</b>.</p><p>You will also need the <b>Client ID</b>.</p>')),

View File

@ -45,7 +45,7 @@ final class GitlabProvider extends OAuthProvider
public function getSetupSteps(): array
{
return array_merge([
Step::make('Register new Gitlab OAuth App')
\Filament\Schemas\Components\Wizard\Step::make('Register new Gitlab OAuth App')
->schema([
Placeholder::make('')
->content(new HtmlString(Blade::render('Check out the <x-filament::link href="https://docs.gitlab.com/integration/oauth_provider/" target="_blank">Gitlab docs</x-filament::link> on how to create the oauth app.'))),

View File

@ -67,7 +67,7 @@ abstract class OAuthProvider
}
/**
* @return Component[]
* @return \Filament\Schemas\Components\Component[]
*/
public function getSettingsForm(): array
{
@ -96,12 +96,12 @@ abstract class OAuthProvider
}
/**
* @return Step[]
* @return \Filament\Schemas\Components\Wizard\Step[]
*/
public function getSetupSteps(): array
{
return [
Step::make('OAuth Config')
\Filament\Schemas\Components\Wizard\Step::make('OAuth Config')
->columns(4)
->schema($this->getSettingsForm()),
];

View File

@ -56,7 +56,7 @@ final class SteamProvider extends OAuthProvider
public function getSetupSteps(): array
{
return array_merge([
Step::make('Create API Key')
\Filament\Schemas\Components\Wizard\Step::make('Create API Key')
->schema([
Placeholder::make('')
->content(new HtmlString(Blade::render('Visit <x-filament::link href="https://steamcommunity.com/dev/apikey" target="_blank">https://steamcommunity.com/dev/apikey</x-filament::link> to generate an API key.'))),

View File

@ -7,7 +7,7 @@ use Filament\Pages\Dashboard as BaseDashboard;
class Dashboard extends BaseDashboard
{
protected static ?string $navigationIcon = 'tabler-layout-dashboard';
protected static string | \BackedEnum | null $navigationIcon = 'tabler-layout-dashboard';
private SoftwareVersionService $softwareVersionService;
@ -16,7 +16,7 @@ class Dashboard extends BaseDashboard
$this->softwareVersionService = $softwareVersionService;
}
public function getColumns(): int
public function getColumns(): int|array
{
return 1;
}

View File

@ -13,9 +13,9 @@ use Spatie\Health\ResultStores\ResultStore;
class Health extends Page
{
protected static ?string $navigationIcon = 'tabler-heart';
protected static string | \BackedEnum | null $navigationIcon = 'tabler-heart';
protected static string $view = 'filament.pages.health';
protected string $view = 'filament.pages.health';
/** @var array<string, string> */
protected $listeners = [

View File

@ -10,28 +10,27 @@ use App\Notifications\MailTested;
use App\Traits\EnvironmentWriterTrait;
use Exception;
use Filament\Actions\Action;
use Filament\Forms\Components\Actions;
use Filament\Forms\Components\Actions\Action as FormAction;
use Filament\Forms\Components\Component;
use Filament\Forms\Components\Group;
use Filament\Forms\Components\Hidden;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\Tabs;
use Filament\Forms\Components\Tabs\Tab;
use Filament\Forms\Components\TagsInput;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Toggle;
use Filament\Forms\Components\ToggleButtons;
use Filament\Forms\Concerns\InteractsWithForms;
use Filament\Forms\Contracts\HasForms;
use Filament\Forms\Form;
use Filament\Forms\Get;
use Filament\Forms\Set;
use Filament\Notifications\Notification;
use Filament\Pages\Concerns\InteractsWithHeaderActions;
use Filament\Pages\Page;
use Filament\Support\Enums\MaxWidth;
use Filament\Schemas\Components\Actions;
use Filament\Schemas\Components\Component;
use Filament\Schemas\Components\Form;
use Filament\Schemas\Components\Group;
use Filament\Schemas\Components\Section;
use Filament\Schemas\Components\Tabs;
use Filament\Schemas\Components\Tabs\Tab;
use Filament\Schemas\Components\Utilities\Get;
use Filament\Schemas\Components\Utilities\Set;
use Filament\Support\Enums\Width;
use Illuminate\Http\Client\Factory;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Notification as MailNotification;
@ -46,11 +45,10 @@ class Settings extends Page implements HasForms
use InteractsWithForms;
use InteractsWithHeaderActions;
protected static ?string $navigationIcon = 'tabler-settings';
protected static string | \BackedEnum | null $navigationIcon = 'tabler-settings';
protected static string $view = 'filament.pages.settings';
protected string $view = 'filament.pages.settings';
/** @var array<mixed>|null */
public ?array $data = [];
public function mount(): void
@ -110,7 +108,9 @@ class Settings extends Page implements HasForms
];
}
/** @return Component[] */
/** @return Component[]
* @throws Exception
*/
private function generalSettings(): array
{
return [
@ -204,14 +204,14 @@ class Settings extends Page implements HasForms
->placeholder(trans('admin/setting.general.trusted_proxies_help'))
->default(env('TRUSTED_PROXIES', implode(',', config('trustedproxy.proxies'))))
->hintActions([
FormAction::make('clear')
Action::make('clear')
->label(trans('admin/setting.general.clear'))
->color('danger')
->icon('tabler-trash')
->requiresConfirmation()
->authorize(fn () => auth()->user()->can('update settings'))
->action(fn (Set $set) => $set('TRUSTED_PROXIES', [])),
FormAction::make('cloudflare')
Action::make('cloudflare')
->label(trans('admin/setting.general.set_to_cf'))
->icon('tabler-brand-cloudflare')
->authorize(fn () => auth()->user()->can('update settings'))
@ -240,7 +240,7 @@ class Settings extends Page implements HasForms
Select::make('FILAMENT_WIDTH')
->label(trans('admin/setting.general.display_width'))
->native(false)
->options(MaxWidth::class)
->options(Width::class)
->selectablePlaceholder(false)
->default(env('FILAMENT_WIDTH', config('panel.filament.display-width'))),
];
@ -248,6 +248,8 @@ class Settings extends Page implements HasForms
/**
* @return Component[]
*
* @throws Exception
*/
private function captchaSettings(): array
{
@ -268,14 +270,14 @@ class Settings extends Page implements HasForms
->live()
->default(env("CAPTCHA_{$id}_ENABLED")),
Actions::make([
FormAction::make("disable_captcha_$id")
Action::make("disable_captcha_$id")
->visible(fn (Get $get) => $get("CAPTCHA_{$id}_ENABLED"))
->label(trans('admin/setting.captcha.disable'))
->color('danger')
->action(function (Set $set) use ($id) {
$set("CAPTCHA_{$id}_ENABLED", false);
}),
FormAction::make("enable_captcha_$id")
Action::make("enable_captcha_$id")
->visible(fn (Get $get) => !$get("CAPTCHA_{$id}_ENABLED"))
->label(trans('admin/setting.captcha.enable'))
->color('success')
@ -298,6 +300,8 @@ class Settings extends Page implements HasForms
/**
* @return Component[]
*
* @throws Exception
*/
private function mailSettings(): array
{
@ -317,7 +321,7 @@ class Settings extends Page implements HasForms
->live()
->default(env('MAIL_MAILER', config('mail.default')))
->hintAction(
FormAction::make('test')
Action::make('test')
->label(trans('admin/setting.mail.test_mail'))
->icon('tabler-send')
->hidden(fn (Get $get) => $get('MAIL_MAILER') === 'log')
@ -444,6 +448,8 @@ class Settings extends Page implements HasForms
/**
* @return Component[]
*
* @throws Exception
*/
private function backupSettings(): array
{
@ -517,6 +523,8 @@ class Settings extends Page implements HasForms
/**
* @return Component[]
*
* @throws Exception
*/
private function oauthSettings(): array
{
@ -537,14 +545,14 @@ class Settings extends Page implements HasForms
->live()
->default(env("OAUTH_{$id}_ENABLED")),
Actions::make([
FormAction::make("disable_oauth_$id")
Action::make("disable_oauth_$id")
->visible(fn (Get $get) => $get("OAUTH_{$id}_ENABLED"))
->label(trans('admin/setting.oauth.disable'))
->color('danger')
->action(function (Set $set) use ($id) {
$set("OAUTH_{$id}_ENABLED", false);
}),
FormAction::make("enable_oauth_$id")
Action::make("enable_oauth_$id")
->visible(fn (Get $get) => !$get("OAUTH_{$id}_ENABLED"))
->label(trans('admin/setting.oauth.enable'))
->color('success')
@ -574,6 +582,8 @@ class Settings extends Page implements HasForms
/**
* @return Component[]
*
* @throws Exception
*/
private function miscSettings(): array
{

View File

@ -6,14 +6,14 @@ use App\Filament\Admin\Resources\ApiKeyResource\Pages;
use App\Filament\Admin\Resources\UserResource\Pages\EditUser;
use App\Filament\Components\Tables\Columns\DateTimeColumn;
use App\Models\ApiKey;
use Filament\Forms\Components\Fieldset;
use Filament\Actions\CreateAction;
use Filament\Actions\DeleteAction;
use Filament\Forms\Components\TagsInput;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\ToggleButtons;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables\Actions\CreateAction;
use Filament\Tables\Actions\DeleteAction;
use Filament\Schemas\Components\Fieldset;
use Filament\Schemas\Components\Form;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
@ -22,7 +22,7 @@ class ApiKeyResource extends Resource
{
protected static ?string $model = ApiKey::class;
protected static ?string $navigationIcon = 'tabler-key';
protected static string | \BackedEnum | null $navigationIcon = 'tabler-key';
public static function getNavigationLabel(): string
{
@ -92,9 +92,9 @@ class ApiKeyResource extends Resource
]);
}
public static function form(Form $form): Form
public static function form(Form|\Filament\Schemas\Schema $schema): \Filament\Schemas\Schema
{
return $form
return $schema
->schema([
Fieldset::make('Permissions')
->columns([

View File

@ -4,16 +4,16 @@ namespace App\Filament\Admin\Resources;
use App\Filament\Admin\Resources\DatabaseHostResource\Pages;
use App\Models\DatabaseHost;
use Filament\Forms\Components\Section;
use Filament\Actions\CreateAction;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Actions\ViewAction;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Form;
use Filament\Forms\Set;
use Filament\Resources\Resource;
use Filament\Tables\Actions\CreateAction;
use Filament\Tables\Actions\DeleteBulkAction;
use Filament\Tables\Actions\EditAction;
use Filament\Tables\Actions\ViewAction;
use Filament\Schemas\Components\Form;
use Filament\Schemas\Components\Section;
use Filament\Schemas\Components\Utilities\Set;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
@ -21,7 +21,7 @@ class DatabaseHostResource extends Resource
{
protected static ?string $model = DatabaseHost::class;
protected static ?string $navigationIcon = 'tabler-database';
protected static string | \BackedEnum | null $navigationIcon = 'tabler-database';
protected static ?string $recordTitleAttribute = 'name';
@ -88,9 +88,9 @@ class DatabaseHostResource extends Resource
]);
}
public static function form(Form $form): Form
public static function form(Form|\Filament\Schemas\Schema $schema): \Filament\Schemas\Schema
{
return $form
return $schema
->schema([
Section::make()
->columns([

View File

@ -4,24 +4,25 @@ namespace App\Filament\Admin\Resources\DatabaseHostResource\Pages;
use App\Filament\Admin\Resources\DatabaseHostResource;
use App\Services\Databases\Hosts\HostCreationService;
use Filament\Forms\Components\Fieldset;
use Exception;
use Filament\Schemas\Components\Fieldset;
use Filament\Forms\Components\Hidden;
use Filament\Forms\Components\Placeholder;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Toggle;
use Filament\Forms\Components\Wizard\Step;
use Filament\Forms\Get;
use Filament\Forms\Set;
use Filament\Schemas\Components\Utilities\Get;
use Filament\Schemas\Components\Utilities\Set;
use Filament\Notifications\Notification;
use Filament\Resources\Pages\CreateRecord;
use Filament\Resources\Pages\CreateRecord\Concerns\HasWizard;
use Filament\Schemas\Components\Wizard\Step;
use Filament\Support\Exceptions\Halt;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\HtmlString;
use Illuminate\Support\Str;
use PDOException;
use Webbingbrasil\FilamentCopyActions\Forms\Actions\CopyAction;
use Throwable;
class CreateDatabaseHost extends CreateRecord
{
@ -38,7 +39,9 @@ class CreateDatabaseHost extends CreateRecord
$this->service = $service;
}
/** @return Step[] */
/** @return Step[]
* @throws Exception
*/
public function getSteps(): array
{
return [
@ -87,14 +90,14 @@ class CreateDatabaseHost extends CreateRecord
->default(fn (Get $get) => "CREATE USER '{$get('username')}'@'{$get('panel_ip')}' IDENTIFIED BY '{$get('password')}';")
->disabled()
->dehydrated(false)
->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null)
// TODO ->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null)
->columnSpanFull(),
TextInput::make('assign_permissions')
->label(trans('admin/databasehost.setup.command_assign_permissions'))
->default(fn (Get $get) => "GRANT ALL PRIVILEGES ON *.* TO '{$get('username')}'@'{$get('panel_ip')}' WITH GRANT OPTION;")
->disabled()
->dehydrated(false)
->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null)
// TODO ->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null)
->columnSpanFull(),
Placeholder::make('')
->content(new HtmlString(trans('admin/databasehost.setup.cli_exit')))
@ -150,6 +153,10 @@ class CreateDatabaseHost extends CreateRecord
];
}
/**
* @throws Halt
* @throws Throwable
*/
protected function handleRecordCreation(array $data): Model
{
try {

View File

@ -12,6 +12,7 @@ use Filament\Resources\Pages\EditRecord;
use Filament\Support\Exceptions\Halt;
use Illuminate\Database\Eloquent\Model;
use PDOException;
use Throwable;
class EditDatabaseHost extends EditRecord
{
@ -50,6 +51,10 @@ class EditDatabaseHost extends EditRecord
return [];
}
/**
* @throws Halt
* @throws Throwable
*/
protected function handleRecordUpdate(Model $record, array $data): Model
{
if (!$record instanceof DatabaseHost) {

View File

@ -6,7 +6,7 @@ use App\Filament\Components\Forms\Actions\RotateDatabasePasswordAction;
use App\Filament\Components\Tables\Columns\DateTimeColumn;
use App\Models\Database;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Form;
use Filament\Schemas\Components\Form;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Tables\Actions\DeleteAction;
use Filament\Tables\Actions\ViewAction;
@ -17,9 +17,9 @@ class DatabasesRelationManager extends RelationManager
{
protected static string $relationship = 'databases';
public function form(Form $form): Form
public function form(Form|\Filament\Schemas\Schema $schema): \Filament\Schemas\Schema
{
return $form
return $schema
->schema([
TextInput::make('database')
->columnSpanFull(),
@ -70,9 +70,9 @@ class DatabasesRelationManager extends RelationManager
->label(trans('admin/databasehost.table.created_at')),
])
->actions([
DeleteAction::make()
\Filament\Actions\DeleteAction::make()
->authorize(fn (Database $database) => auth()->user()->can('delete database', $database)),
ViewAction::make()
\Filament\Actions\ViewAction::make()
->color('primary')
->hidden(fn () => !auth()->user()->can('viewList database')),
]);

View File

@ -10,7 +10,7 @@ class EggResource extends Resource
{
protected static ?string $model = Egg::class;
protected static ?string $navigationIcon = 'tabler-eggs';
protected static string | \BackedEnum | null $navigationIcon = 'tabler-eggs';
protected static ?string $recordTitleAttribute = 'name';

View File

@ -2,29 +2,29 @@
namespace App\Filament\Admin\Resources\EggResource\Pages;
use AbdelhamidErrahmouni\FilamentMonacoEditor\MonacoEditor;
use App\Filament\Admin\Resources\EggResource;
use App\Filament\Components\Forms\Fields\CopyFrom;
use App\Models\EggVariable;
use Filament\Forms\Components\Checkbox;
use Filament\Forms\Components\Fieldset;
use Filament\Forms\Components\Hidden;
use Filament\Forms\Components\KeyValue;
use Filament\Forms\Components\Repeater;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\Tabs;
use Filament\Forms\Components\Tabs\Tab;
use Filament\Forms\Components\TagsInput;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Toggle;
use Filament\Forms\Form;
use Filament\Forms\Get;
use Filament\Forms\Set;
use Filament\Resources\Pages\CreateRecord;
use Filament\Schemas\Components\Fieldset;
use Filament\Schemas\Components\Form;
use Filament\Schemas\Components\Tabs;
use Filament\Schemas\Components\Tabs\Tab;
use Filament\Schemas\Components\Utilities\Get;
use Filament\Schemas\Components\Utilities\Set;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;
use Illuminate\Validation\Rules\Unique;
use Filament\Schemas\Schema;
class CreateEgg extends CreateRecord
{
@ -44,9 +44,9 @@ class CreateEgg extends CreateRecord
return [];
}
public function form(Form $form): Form
public function form(Form|Schema $schema): Schema
{
return $form
return $schema
->schema([
Tabs::make()->tabs([
Tab::make(trans('admin/egg.tabs.configuration'))
@ -248,13 +248,13 @@ class CreateEgg extends CreateRecord
->default('bash')
->options(['bash', 'ash', '/bin/bash'])
->required(),
MonacoEditor::make('script_install')
->label(trans('admin/egg.script_install'))
->columnSpanFull()
->fontSize('16px')
->language('shell')
->lazy()
->view('filament.plugins.monaco-editor'),
// MonacoEditor::make('script_install')
// ->label(trans('admin/egg.script_install'))
// ->columnSpanFull()
// ->fontSize('16px')
// ->language('shell')
// ->lazy()
// ->view('filament.plugins.monaco-editor'),
]),
])->columnSpanFull()->persistTabInQueryString(),

View File

@ -2,7 +2,6 @@
namespace App\Filament\Admin\Resources\EggResource\Pages;
use AbdelhamidErrahmouni\FilamentMonacoEditor\MonacoEditor;
use App\Filament\Admin\Resources\EggResource;
use App\Filament\Admin\Resources\EggResource\RelationManagers\ServersRelationManager;
use App\Filament\Components\Actions\ExportEggAction;
@ -12,30 +11,31 @@ use App\Models\Egg;
use App\Models\EggVariable;
use Filament\Actions\DeleteAction;
use Filament\Forms\Components\Checkbox;
use Filament\Forms\Components\Fieldset;
use Filament\Schemas\Components\Fieldset;
use Filament\Forms\Components\Hidden;
use Filament\Forms\Components\KeyValue;
use Filament\Forms\Components\Repeater;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\Tabs;
use Filament\Forms\Components\Tabs\Tab;
use Filament\Forms\Components\TagsInput;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Toggle;
use Filament\Forms\Form;
use Filament\Forms\Get;
use Filament\Forms\Set;
use Filament\Schemas\Components\Form;
use Filament\Schemas\Components\Tabs;
use Filament\Schemas\Components\Tabs\Tab;
use Filament\Schemas\Components\Utilities\Get;
use Filament\Schemas\Components\Utilities\Set;
use Filament\Resources\Pages\EditRecord;
use Illuminate\Validation\Rules\Unique;
use Filament\Schemas\Schema;
class EditEgg extends EditRecord
{
protected static string $resource = EggResource::class;
public function form(Form $form): Form
public function form(Form|Schema $schema): Schema
{
return $form
return $schema
->schema([
Tabs::make()->tabs([
Tab::make(trans('admin/egg.tabs.configuration'))
@ -169,7 +169,7 @@ class EditEgg extends EditRecord
->maxLength(255)
->columnSpanFull()
->afterStateUpdated(fn (Set $set, $state) => $set('env_variable', str($state)->trim()->snake()->upper()->toString()))
->unique(modifyRuleUsing: fn (Unique $rule, Get $get) => $rule->where('egg_id', $get('../../id')), ignoreRecord: true)
->unique(ignoreRecord: true, modifyRuleUsing: fn (Unique $rule, Get $get) => $rule->where('egg_id', $get('../../id')))
->validationMessages([
'unique' => trans('admin/egg.error_unique'),
])
@ -182,7 +182,7 @@ class EditEgg extends EditRecord
->suffix('}}')
->hintIcon('tabler-code')
->hintIconTooltip(fn ($state) => "{{{$state}}}")
->unique(modifyRuleUsing: fn (Unique $rule, Get $get) => $rule->where('egg_id', $get('../../id')), ignoreRecord: true)
->unique(ignoreRecord: true, modifyRuleUsing: fn (Unique $rule, Get $get) => $rule->where('egg_id', $get('../../id')))
->rules(EggVariable::getRulesForField('env_variable'))
->validationMessages([
'unique' => trans('admin/egg.error_unique'),
@ -239,13 +239,13 @@ class EditEgg extends EditRecord
->selectablePlaceholder(false)
->options(['bash', 'ash', '/bin/bash'])
->required(),
MonacoEditor::make('script_install')
->label(trans('admin/egg.script_install'))
->placeholderText('')
->columnSpanFull()
->fontSize('16px')
->language('shell')
->view('filament.plugins.monaco-editor'),
// TODO MonacoEditor::make('script_install')
// ->label(trans('admin/egg.script_install'))
// ->placeholderText('')
// ->columnSpanFull()
// ->fontSize('16px')
// ->language('shell')
// ->view('filament.plugins.monaco-editor'),
]),
])->columnSpanFull()->persistTabInQueryString(),
]);

View File

@ -10,12 +10,12 @@ use App\Filament\Components\Tables\Actions\UpdateEggAction;
use App\Filament\Components\Tables\Actions\UpdateEggBulkAction;
use App\Filament\Components\Tables\Filters\TagsFilter;
use App\Models\Egg;
use Filament\Actions\CreateAction;
use Filament\Actions\CreateAction as CreateHeaderAction;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Actions\ReplicateAction;
use Filament\Resources\Pages\ListRecords;
use Filament\Tables\Actions\CreateAction;
use Filament\Tables\Actions\DeleteBulkAction;
use Filament\Tables\Actions\EditAction;
use Filament\Tables\Actions\ReplicateAction;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Collection;

View File

@ -4,18 +4,18 @@ namespace App\Filament\Admin\Resources;
use App\Filament\Admin\Resources\MountResource\Pages;
use App\Models\Mount;
use Filament\Forms\Components\Group;
use Filament\Forms\Components\Section;
use Filament\Actions\CreateAction;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Actions\ViewAction;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\ToggleButtons;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables\Actions\CreateAction;
use Filament\Tables\Actions\DeleteBulkAction;
use Filament\Tables\Actions\EditAction;
use Filament\Tables\Actions\ViewAction;
use Filament\Schemas\Components\Form;
use Filament\Schemas\Components\Group;
use Filament\Schemas\Components\Section;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
@ -23,7 +23,7 @@ class MountResource extends Resource
{
protected static ?string $model = Mount::class;
protected static ?string $navigationIcon = 'tabler-layers-linked';
protected static string | \BackedEnum | null $navigationIcon = 'tabler-layers-linked';
protected static ?string $recordTitleAttribute = 'name';
@ -93,9 +93,9 @@ class MountResource extends Resource
]);
}
public static function form(Form $form): Form
public static function form(Form|\Filament\Schemas\Schema $schema): \Filament\Schemas\Schema
{
return $form
return $schema
->schema([
Section::make()->schema([
TextInput::make('name')

View File

@ -11,7 +11,7 @@ class NodeResource extends Resource
{
protected static ?string $model = Node::class;
protected static ?string $navigationIcon = 'tabler-server-2';
protected static string | \BackedEnum | null $navigationIcon = 'tabler-server-2';
protected static ?string $recordTitleAttribute = 'name';

View File

@ -4,19 +4,20 @@ namespace App\Filament\Admin\Resources\NodeResource\Pages;
use App\Filament\Admin\Resources\NodeResource;
use App\Models\Node;
use Filament\Forms;
use Filament\Forms\Components\Actions\Action;
use Filament\Forms\Components\Grid;
use Filament\Actions\Action;
use Filament\Schemas\Components\Form;
use Filament\Schemas\Components\Grid;
use Filament\Forms\Components\TagsInput;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\ToggleButtons;
use Filament\Forms\Components\Wizard;
use Filament\Forms\Components\Wizard\Step;
use Filament\Forms\Get;
use Filament\Forms\Set;
use Filament\Schemas\Components\Wizard;
use Filament\Schemas\Components\Wizard\Step;
use Filament\Schemas\Components\Utilities\Get;
use Filament\Schemas\Components\Utilities\Set;
use Filament\Resources\Pages\CreateRecord;
use Illuminate\Support\Facades\Blade;
use Illuminate\Support\HtmlString;
use Filament\Schemas\Schema;
class CreateNode extends CreateRecord
{
@ -24,9 +25,9 @@ class CreateNode extends CreateRecord
protected static bool $canCreateAnother = false;
public function form(Forms\Form $form): Forms\Form
public function form(Form|Schema $schema): Schema
{
return $form
return $schema
->schema([
Wizard::make([
Step::make('basic')

View File

@ -9,27 +9,28 @@ use App\Services\Helpers\SoftwareVersionService;
use App\Services\Nodes\NodeAutoDeployService;
use App\Services\Nodes\NodeUpdateService;
use Exception;
use Filament\Actions;
use Filament\Forms;
use Filament\Forms\Components\Actions as FormActions;
use Filament\Forms\Components\Fieldset;
use Filament\Forms\Components\Grid;
use Filament\Actions\Action;
use Filament\Actions\DeleteAction;
use Filament\Schemas\Components\Actions;
use Filament\Schemas\Components\Fieldset;
use Filament\Forms\Components\Placeholder;
use Filament\Forms\Components\Tabs;
use Filament\Forms\Components\Tabs\Tab;
use Filament\Forms\Components\TagsInput;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\ToggleButtons;
use Filament\Forms\Components\View;
use Filament\Forms\Get;
use Filament\Forms\Set;
use Filament\Schemas\Components\Form;
use Filament\Schemas\Components\Grid;
use Filament\Schemas\Components\Tabs;
use Filament\Schemas\Components\Tabs\Tab;
use Filament\Schemas\Components\Utilities\Get;
use Filament\Schemas\Components\Utilities\Set;
use Filament\Notifications\Notification;
use Filament\Resources\Pages\EditRecord;
use Filament\Schemas\Components\View;
use Filament\Schemas\Schema;
use Filament\Support\Enums\Alignment;
use Illuminate\Http\Client\ConnectionException;
use Illuminate\Support\HtmlString;
use Webbingbrasil\FilamentCopyActions\Forms\Actions\CopyAction;
class EditNode extends EditRecord
{
@ -45,9 +46,9 @@ class EditNode extends EditRecord
$this->nodeUpdateService = $nodeUpdateService;
}
public function form(Forms\Form $form): Forms\Form
public function form(Form|Schema $schema): Schema
{
return $form->schema([
return $schema->schema([
Tabs::make('Tabs')
->columns([
'default' => 2,
@ -255,7 +256,7 @@ class EditNode extends EditRecord
'lg' => 2,
])
->label(trans('admin/node.node_uuid'))
->hintAction(fn () => request()->isSecure() ? CopyAction::make() : null)
// TODO ->hintAction(fn () => request()->isSecure() ? CopyAction::make() : null)
->disabled(),
TagsInput::make('tags')
->label(trans('admin/node.tags'))
@ -508,13 +509,13 @@ class EditNode extends EditRecord
->label('/etc/pelican/config.yml')
->disabled()
->rows(19)
->hintAction(fn () => request()->isSecure() ? CopyAction::make() : null)
//TODO ->hintAction(fn () => request()->isSecure() ? CopyAction::make() : null)
->columnSpanFull(),
Grid::make()
->columns()
->schema([
FormActions::make([
FormActions\Action::make('autoDeploy')
Actions::make([
Action::make('autoDeploy')
->label(trans('admin/node.auto_deploy'))
->color('primary')
->modalHeading(trans('admin/node.auto_deploy'))
@ -522,7 +523,7 @@ class EditNode extends EditRecord
->modalSubmitAction(false)
->modalCancelAction(false)
->modalFooterActionsAlignment(Alignment::Center)
->form([
->schema([
ToggleButtons::make('docker')
->label('Type')
->live()
@ -543,15 +544,15 @@ class EditNode extends EditRecord
->label(trans('admin/node.auto_command'))
->readOnly()
->autosize()
->hintAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null)
//TODO ->hintAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null)
->formatStateUsing(fn (NodeAutoDeployService $service, Node $node, Set $set, Get $get) => $set('generatedToken', $service->handle(request(), $node, $get('docker')))),
])
->mountUsing(function (Forms\Form $form) {
$form->fill();
->mountUsing(function (Form|Schema $schema) {
$schema->fill();
}),
])->fullWidth(),
FormActions::make([
FormActions\Action::make('resetKey')
Actions::make([
Action::make('resetKey')
->label(trans('admin/node.reset_token'))
->color('danger')
->requiresConfirmation()
@ -607,7 +608,7 @@ class EditNode extends EditRecord
protected function getHeaderActions(): array
{
return [
Actions\DeleteAction::make()
DeleteAction::make()
->disabled(fn (Node $node) => $node->servers()->count() > 0)
->label(fn (Node $node) => $node->servers()->count() > 0 ? trans('admin/node.node_has_servers') : trans('filament-actions::delete.single.label')),
$this->getSaveFormAction()->formId('form'),

View File

@ -6,10 +6,9 @@ use App\Filament\Admin\Resources\NodeResource;
use App\Filament\Components\Tables\Columns\NodeHealthColumn;
use App\Filament\Components\Tables\Filters\TagsFilter;
use App\Models\Node;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
use Filament\Tables\Actions\CreateAction;
use Filament\Tables\Actions\EditAction;
use Filament\Actions\CreateAction;
use Filament\Actions\EditAction;
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
@ -76,7 +75,7 @@ class ListNodes extends ListRecords
protected function getHeaderActions(): array
{
return [
Actions\CreateAction::make()
CreateAction::make()
->hidden(fn () => Node::count() <= 0),
];
}

View File

@ -6,15 +6,15 @@ use App\Filament\Admin\Resources\ServerResource\Pages\CreateServer;
use App\Models\Allocation;
use App\Models\Node;
use App\Services\Allocations\AssignmentService;
use Filament\Actions\Action;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TagsInput;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Get;
use Filament\Forms\Set;
use Filament\Schemas\Components\Utilities\Get;
use Filament\Schemas\Components\Utilities\Set;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Tables;
use Filament\Tables\Actions\BulkActionGroup;
use Filament\Tables\Actions\DeleteBulkAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use Filament\Tables\Columns\SelectColumn;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Columns\TextInputColumn;
@ -27,7 +27,7 @@ class AllocationsRelationManager extends RelationManager
{
protected static string $relationship = 'allocations';
protected static ?string $icon = 'tabler-plug-connected';
protected static string | \BackedEnum | null $icon = 'tabler-plug-connected';
public function setTitle(): string
{
@ -72,9 +72,9 @@ class AllocationsRelationManager extends RelationManager
->label(trans('admin/node.table.ip')),
])
->headerActions([
Tables\Actions\Action::make('create new allocation')
Action::make('create new allocation')
->label(trans('admin/node.create_allocation'))
->form(fn () => [
->schema(fn () => [
Select::make('allocation_ip')
->options(collect($this->getOwnerRecord()->ipAddresses())->mapWithKeys(fn (string $ip) => [$ip => $ip]))
->label(trans('admin/node.ip_address'))

View File

@ -12,7 +12,7 @@ class NodesRelationManager extends RelationManager
{
protected static string $relationship = 'servers';
protected static ?string $icon = 'tabler-brand-docker';
protected static string | \BackedEnum | null $icon = 'tabler-brand-docker';
public function setTitle(): string
{

View File

@ -10,9 +10,9 @@ use Illuminate\Support\Number;
class NodeCpuChart extends ChartWidget
{
protected static ?string $pollingInterval = '5s';
protected ?string $pollingInterval = '5s';
protected static ?string $maxHeight = '300px';
protected ?string $maxHeight = '300px';
public Node $node;

View File

@ -10,9 +10,9 @@ use Illuminate\Support\Number;
class NodeMemoryChart extends ChartWidget
{
protected static ?string $pollingInterval = '5s';
protected ?string $pollingInterval = '5s';
protected static ?string $maxHeight = '300px';
protected ?string $maxHeight = '300px';
public Node $node;

View File

@ -7,13 +7,13 @@ use Filament\Widgets\ChartWidget;
class NodeStorageChart extends ChartWidget
{
protected static ?string $pollingInterval = '360s';
protected ?string $pollingInterval = '360s';
protected static ?string $maxHeight = '200px';
protected ?string $maxHeight = '200px';
public Node $node;
protected static ?array $options = [
protected ?array $options = [
'scales' => [
'x' => [
'grid' => [

View File

@ -4,20 +4,19 @@ namespace App\Filament\Admin\Resources;
use App\Filament\Admin\Resources\RoleResource\Pages;
use App\Models\Role;
use Filament\Forms\Components\Actions\Action;
use Filament\Actions\CreateAction;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Actions\ViewAction;
use Filament\Forms\Components\CheckboxList;
use Filament\Forms\Components\Component;
use Filament\Forms\Components\Fieldset;
use Filament\Forms\Components\Placeholder;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Form;
use Filament\Forms\Get;
use Filament\Resources\Resource;
use Filament\Tables\Actions\CreateAction;
use Filament\Tables\Actions\DeleteBulkAction;
use Filament\Tables\Actions\EditAction;
use Filament\Tables\Actions\ViewAction;
use Filament\Schemas\Components\Component;
use Filament\Schemas\Components\Fieldset;
use Filament\Schemas\Components\Form;
use Filament\Schemas\Components\Section;
use Filament\Schemas\Components\Utilities\Get;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
use Illuminate\Support\Str;
@ -27,7 +26,7 @@ class RoleResource extends Resource
{
protected static ?string $model = Role::class;
protected static ?string $navigationIcon = 'tabler-users-group';
protected static string | \BackedEnum | null $navigationIcon = 'tabler-users-group';
protected static ?string $recordTitleAttribute = 'name';
@ -91,7 +90,7 @@ class RoleResource extends Resource
]);
}
public static function form(Form $form): Form
public static function form(Form|\Filament\Schemas\Schema $schema): \Filament\Schemas\Schema
{
$permissionSections = [];
@ -105,7 +104,7 @@ class RoleResource extends Resource
$permissionSections[] = self::makeSection($model, $options);
}
return $form
return $schema
->columns(1)
->schema([
TextInput::make('name')

View File

@ -10,7 +10,7 @@ class ServerResource extends Resource
{
protected static ?string $model = Server::class;
protected static ?string $navigationIcon = 'tabler-brand-docker';
protected static string | \BackedEnum | null $navigationIcon = 'tabler-brand-docker';
protected static ?string $recordTitleAttribute = 'name';

View File

@ -13,29 +13,28 @@ use App\Services\Servers\ServerCreationService;
use App\Services\Users\UserCreationService;
use Closure;
use Exception;
use Filament\Forms;
use Filament\Forms\Components\Actions\Action;
use Filament\Actions\Action;
use Filament\Forms\Components\CheckboxList;
use Filament\Forms\Components\Component;
use Filament\Forms\Components\Fieldset;
use Filament\Forms\Components\Grid;
use Filament\Schemas\Components\Component;
use Filament\Schemas\Components\Fieldset;
use Filament\Forms\Components\Hidden;
use Filament\Forms\Components\KeyValue;
use Filament\Forms\Components\Placeholder;
use Filament\Forms\Components\Repeater;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TagsInput;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\ToggleButtons;
use Filament\Forms\Components\Wizard;
use Filament\Forms\Components\Wizard\Step;
use Filament\Forms\Form;
use Filament\Forms\Get;
use Filament\Forms\Set;
use Filament\Schemas\Components\Form;
use Filament\Schemas\Components\Grid;
use Filament\Schemas\Components\Section;
use Filament\Schemas\Components\Utilities\Get;
use Filament\Schemas\Components\Utilities\Set;
use Filament\Notifications\Notification;
use Filament\Resources\Pages\CreateRecord;
use Filament\Schemas\Components\Wizard;
use Filament\Schemas\Components\Wizard\Step;
use Filament\Support\Exceptions\Halt;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
@ -43,6 +42,7 @@ use Illuminate\Support\Facades\Blade;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\HtmlString;
use LogicException;
use Filament\Schemas\Schema;
class CreateServer extends CreateRecord
{
@ -59,9 +59,9 @@ class CreateServer extends CreateRecord
$this->serverCreationService = $serverCreationService;
}
public function form(Form $form): Form
public function form(Form|Schema $schema): Schema
{
return $form
return $schema
->schema([
Wizard::make([
Step::make('Information')
@ -77,7 +77,7 @@ class CreateServer extends CreateRecord
TextInput::make('name')
->prefixIcon('tabler-server')
->label(trans('admin/server.name'))
->suffixAction(Forms\Components\Actions\Action::make('random')
->suffixAction(Action::make('random')
->icon('tabler-dice-' . random_int(1, 6))
->action(function (Set $set, Get $get) {
$egg = Egg::find($get('egg_id'));

View File

@ -29,28 +29,26 @@ use App\Services\Servers\ToggleInstallService;
use App\Services\Servers\TransferServerService;
use Closure;
use Exception;
use Filament\Actions;
use Filament\Forms;
use Filament\Forms\Components\Actions as FormActions;
use Filament\Forms\Components\Actions\Action;
use Filament\Actions\Action;
use Filament\Forms\Components\CheckboxList;
use Filament\Forms\Components\Component;
use Filament\Forms\Components\Fieldset;
use Filament\Forms\Components\Grid;
use Filament\Schemas\Components\Actions;
use Filament\Schemas\Components\Component;
use Filament\Schemas\Components\Fieldset;
use Filament\Forms\Components\Hidden;
use Filament\Forms\Components\KeyValue;
use Filament\Forms\Components\Repeater;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\Tabs;
use Filament\Forms\Components\Tabs\Tab;
use Filament\Schemas\Components\Grid;
use Filament\Schemas\Components\Tabs;
use Filament\Schemas\Components\Tabs\Tab;
use Filament\Forms\Components\TagsInput;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Toggle;
use Filament\Forms\Components\ToggleButtons;
use Filament\Forms\Form;
use Filament\Forms\Get;
use Filament\Forms\Set;
use Filament\Schemas\Components\Form;
use Filament\Schemas\Components\Utilities\Get;
use Filament\Schemas\Components\Utilities\Set;
use Filament\Notifications\Notification;
use Filament\Resources\Pages\EditRecord;
use Illuminate\Database\Eloquent\Builder;
@ -59,7 +57,7 @@ use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\HtmlString;
use LogicException;
use Webbingbrasil\FilamentCopyActions\Forms\Actions\CopyAction;
use Filament\Schemas\Schema;
class EditServer extends EditRecord
{
@ -72,9 +70,9 @@ class EditServer extends EditRecord
$this->daemonServerRepository = $daemonServerRepository;
}
public function form(Form $form): Form
public function form(Form|Schema $schema): Schema
{
return $form
return $schema
->schema([
Tabs::make('Tabs')
->persistTabInQueryString()
@ -145,7 +143,7 @@ class EditServer extends EditRecord
TextInput::make('uuid')
->label(trans('admin/server.uuid'))
->suffixAction(fn () => request()->isSecure() ? CopyAction::make() : null)
//TODO ->suffixAction(fn () => request()->isSecure() ? CopyAction::make() : null)
->columnSpan([
'default' => 2,
'sm' => 1,
@ -156,7 +154,7 @@ class EditServer extends EditRecord
->dehydrated(false),
TextInput::make('uuid_short')
->label(trans('admin/server.short_uuid'))
->suffixAction(fn () => request()->isSecure() ? CopyAction::make() : null)
//TODO ->suffixAction(fn () => request()->isSecure() ? CopyAction::make() : null)
->columnSpan([
'default' => 2,
'sm' => 1,
@ -525,7 +523,7 @@ class EditServer extends EditRecord
// Use redirect instead of fillForm to prevent server variables from duplicating
$this->redirect($this->getUrl(['record' => $server, 'tab' => '-egg-tab']), true);
})
->form(fn (Server $server) => [
->schema(fn (Server $server) => [
Select::make('egg_id')
->label(trans('admin/server.new_egg'))
->prefixIcon('tabler-egg')
@ -570,7 +568,7 @@ class EditServer extends EditRecord
->hintAction(PreviewStartupAction::make('preview')),
Textarea::make('defaultStartup')
->hintAction(fn () => request()->isSecure() ? CopyAction::make() : null)
//TODO ->hintAction(fn () => request()->isSecure() ? CopyAction::make() : null)
->label(trans('admin/server.default_startup'))
->disabled()
->autosize()
@ -675,13 +673,13 @@ class EditServer extends EditRecord
->label(trans('admin/databasehost.table.host'))
->disabled()
->formatStateUsing(fn ($record) => $record->address())
->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null)
//TODO ->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null)
->columnSpan(1),
TextInput::make('database')
->label(trans('admin/databasehost.table.database'))
->disabled()
->formatStateUsing(fn ($record) => $record->database)
->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null)
//TODO ->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null)
->hintAction(
Action::make('Delete')
->label(trans('filament-actions::delete.single.modal.actions.delete.label'))
@ -702,7 +700,7 @@ class EditServer extends EditRecord
->label(trans('admin/databasehost.table.username'))
->disabled()
->formatStateUsing(fn ($record) => $record->username)
->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null)
//TODO ->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null)
->columnSpan(1),
TextInput::make('password')
->label(trans('admin/databasehost.table.password'))
@ -711,7 +709,7 @@ class EditServer extends EditRecord
->revealable()
->columnSpan(1)
->hintAction(RotateDatabasePasswordAction::make())
->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null)
//TODO ->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null)
->formatStateUsing(fn (Database $database) => $database->password),
TextInput::make('remote')
->disabled()
@ -729,14 +727,14 @@ class EditServer extends EditRecord
->revealable()
->label(trans('admin/databasehost.table.connection_string'))
->columnSpan(2)
->formatStateUsing(fn (Database $record) => $record->jdbc)
->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null),
->formatStateUsing(fn (Database $record) => $record->jdbc),
//TODO ->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null),
])
->relationship('databases')
->deletable(false)
->addable(false)
->columnSpan(4),
FormActions::make([
Actions::make([
Action::make('createDatabase')
->authorize(fn () => auth()->user()->can('create database'))
->disabled(fn () => DatabaseHost::query()->count() < 1)
@ -764,7 +762,7 @@ class EditServer extends EditRecord
}
$this->fillForm();
})
->form([
->schema([
Select::make('database_host_id')
->label(trans('admin/databasehost.table.name'))
->required()
@ -804,7 +802,7 @@ class EditServer extends EditRecord
Grid::make()
->columnSpan(3)
->schema([
FormActions::make([
Actions::make([
Action::make('toggleInstall')
->label(trans('admin/server.toggle_install'))
->disabled(fn (Server $server) => $server->isSuspended())
@ -856,7 +854,7 @@ class EditServer extends EditRecord
Grid::make()
->columnSpan(3)
->schema([
FormActions::make([
Actions::make([
Action::make('toggleSuspend')
->label(trans('admin/server.suspend'))
->color('warning')
@ -912,12 +910,12 @@ class EditServer extends EditRecord
Grid::make()
->columnSpan(3)
->schema([
FormActions::make([
Actions::make([
Action::make('transfer')
->label(trans('admin/server.transfer'))
->disabled(fn (Server $server) => Node::count() <= 1 || $server->isInConflictState())
->modalheading(trans('admin/server.transfer'))
->form($this->transferServer())
->schema($this->transferServer())
->action(function (TransferServerService $transfer, Server $server, $data) {
try {
$transfer->handle($server, Arr::get($data, 'node_id'), Arr::get($data, 'allocation_id'), Arr::get($data, 'allocation_additional', []));
@ -941,7 +939,7 @@ class EditServer extends EditRecord
Grid::make()
->columnSpan(3)
->schema([
FormActions::make([
Actions::make([
Action::make('reinstall')
->label(trans('admin/server.reinstall'))
->color('danger')
@ -977,7 +975,9 @@ class EditServer extends EditRecord
]);
}
/** @return Component[] */
/** @return Component[]
* @throws Exception
*/
protected function transferServer(): array
{
return [
@ -1016,7 +1016,7 @@ class EditServer extends EditRecord
$canForceDelete = cache()->get("servers.$server->uuid.canForceDelete", false);
return [
Actions\Action::make('Delete')
Action::make('Delete')
->color('danger')
->label(trans('filament-actions::delete.single.label'))
->modalHeading(trans('filament-actions::delete.single.modal.heading', ['label' => $this->getRecordTitle()]))
@ -1030,7 +1030,7 @@ class EditServer extends EditRecord
} catch (ConnectionException) {
cache()->put("servers.$server->uuid.canForceDelete", true, now()->addMinutes(5));
Notification::make()
return Notification::make()
->title(trans('admin/server.notifications.error_server_delete'))
->body(trans('admin/server.notifications.error_server_delete_body'))
->color('warning')
@ -1041,7 +1041,7 @@ class EditServer extends EditRecord
})
->hidden(fn () => $canForceDelete)
->authorize(fn (Server $server) => auth()->user()->can('delete server', $server)),
Actions\Action::make('ForceDelete')
Action::make('ForceDelete')
->color('danger')
->label(trans('filament-actions::force-delete.single.label'))
->modalHeading(trans('filament-actions::force-delete.single.modal.heading', ['label' => $this->getRecordTitle()]))
@ -1053,12 +1053,12 @@ class EditServer extends EditRecord
return redirect(ListServers::getUrl(panel: 'admin'));
} catch (ConnectionException) {
cache()->forget("servers.$server->uuid.canForceDelete");
return cache()->forget("servers.$server->uuid.canForceDelete");
}
})
->visible(fn () => $canForceDelete)
->authorize(fn (Server $server) => auth()->user()->can('delete server', $server)),
Actions\Action::make('console')
Action::make('console')
->label(trans('admin/server.console'))
->icon('tabler-terminal')
->url(fn (Server $server) => Console::getUrl(panel: 'server', tenant: $server)),
@ -1118,7 +1118,7 @@ class EditServer extends EditRecord
];
}
private function shouldHideComponent(ServerVariable $serverVariable, Forms\Components\Component $component): bool
private function shouldHideComponent(ServerVariable $serverVariable, Component $component): bool
{
$containsRuleIn = array_first($serverVariable->variable->rules, fn ($value) => str($value)->startsWith('in:'), false);

View File

@ -7,9 +7,9 @@ use App\Filament\Admin\Resources\ServerResource;
use App\Models\Server;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
use Filament\Tables\Actions\Action;
use Filament\Tables\Actions\CreateAction;
use Filament\Tables\Actions\EditAction;
use Filament\Actions\Action;
use Filament\Actions\CreateAction;
use Filament\Actions\EditAction;
use Filament\Tables\Columns\SelectColumn;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Grouping\Group;

View File

@ -9,14 +9,14 @@ use App\Services\Allocations\AssignmentService;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TagsInput;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Get;
use Filament\Forms\Set;
use Filament\Schemas\Components\Utilities\Get;
use Filament\Schemas\Components\Utilities\Set;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Support\Exceptions\Halt;
use Filament\Tables\Actions\Action;
use Filament\Tables\Actions\AssociateAction;
use Filament\Tables\Actions\CreateAction;
use Filament\Tables\Actions\DissociateBulkAction;
use Filament\Actions\Action;
use Filament\Actions\AssociateAction;
use Filament\Actions\CreateAction;
use Filament\Actions\DissociateBulkAction;
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Columns\TextInputColumn;
@ -64,7 +64,7 @@ class AllocationsRelationManager extends RelationManager
->headerActions([
CreateAction::make()->label(trans('admin/server.create_allocation'))
->createAnother(false)
->form(fn () => [
->schema(fn () => [
Select::make('allocation_ip')
->options(collect($this->getOwnerRecord()->node->ipAddresses())->mapWithKeys(fn (string $ip) => [$ip => $ip]))
->label(trans('admin/server.ip_address'))

View File

@ -9,22 +9,23 @@ use App\Models\User;
use Filament\Facades\Filament;
use Filament\Forms\Components\CheckboxList;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Form;
use Filament\Schemas\Components\Form;
use Filament\Resources\Resource;
use Filament\Tables\Actions\DeleteBulkAction;
use Filament\Tables\Actions\EditAction;
use Filament\Tables\Actions\ViewAction;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Actions\ViewAction;
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\ImageColumn;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Filament\Schemas\Schema;
class UserResource extends Resource
{
protected static ?string $model = User::class;
protected static ?string $navigationIcon = 'tabler-users';
protected static string | \BackedEnum | null $navigationIcon = 'tabler-users';
protected static ?string $recordTitleAttribute = 'username';
@ -99,9 +100,9 @@ class UserResource extends Resource
]);
}
public static function form(Form $form): Form
public static function form(Form|Schema $schema): Schema
{
return $form
return $schema
->columns(['default' => 1, 'lg' => 3])
->schema([
TextInput::make('username')

View File

@ -7,8 +7,8 @@ use App\Enums\SuspendAction;
use App\Models\Server;
use App\Models\User;
use App\Services\Servers\SuspensionService;
use Filament\Actions\Action;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Tables\Actions;
use Filament\Tables\Columns\SelectColumn;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
@ -26,7 +26,7 @@ class ServersRelationManager extends RelationManager
->searchable(false)
->heading(trans('admin/user.servers'))
->headerActions([
Actions\Action::make('toggleSuspend')
Action::make('toggleSuspend')
->hidden(fn () => $user->servers()
->whereNot('status', ServerState::Suspended)
->orWhereNull('status')
@ -38,7 +38,7 @@ class ServersRelationManager extends RelationManager
collect($user->servers)->filter(fn ($server) => !$server->isSuspended())
->each(fn ($server) => $suspensionService->handle($server, SuspendAction::Suspend));
}),
Actions\Action::make('toggleUnsuspend')
Action::make('toggleUnsuspend')
->hidden(fn () => $user->servers()->where('status', ServerState::Suspended)->count() === 0)
->label(trans('admin/server.unsuspend_all'))
->color('primary')

View File

@ -4,23 +4,24 @@ namespace App\Filament\Admin\Resources;
use App\Filament\Admin\Resources\WebhookResource\Pages;
use App\Models\WebhookConfiguration;
use Filament\Actions\CreateAction;
use Filament\Actions\DeleteBulkAction;
use Filament\Forms\Components\CheckboxList;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Form;
use Filament\Schemas\Components\Form;
use Filament\Resources\Resource;
use Filament\Tables\Actions\CreateAction;
use Filament\Tables\Actions\DeleteAction;
use Filament\Tables\Actions\DeleteBulkAction;
use Filament\Tables\Actions\EditAction;
use Filament\Tables\Actions\ViewAction;
use Filament\Actions\DeleteAction;
use Filament\Actions\EditAction;
use Filament\Actions\ViewAction;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
use Filament\Schemas\Schema;
class WebhookResource extends Resource
{
protected static ?string $model = WebhookConfiguration::class;
protected static ?string $navigationIcon = 'tabler-webhook';
protected static string | \BackedEnum | null $navigationIcon = 'tabler-webhook';
protected static ?string $recordTitleAttribute = 'description';
@ -75,9 +76,9 @@ class WebhookResource extends Resource
]);
}
public static function form(Form $form): Form
public static function form(Form|Schema $schema): Schema
{
return $form
return $schema
->schema([
TextInput::make('endpoint')
->label(trans('admin/webhook.endpoint'))

View File

@ -7,7 +7,7 @@ use Filament\Widgets\Widget;
class CanaryWidget extends Widget
{
protected static string $view = 'filament.admin.widgets.canary-widget';
protected string $view = 'filament.admin.widgets.canary-widget';
protected static bool $isLazy = false;

View File

@ -7,7 +7,7 @@ use Filament\Widgets\Widget;
class HelpWidget extends Widget
{
protected static string $view = 'filament.admin.widgets.help-widget';
protected string $view = 'filament.admin.widgets.help-widget';
protected static bool $isLazy = false;

View File

@ -9,7 +9,7 @@ use Filament\Widgets\Widget;
class NoNodesWidget extends Widget
{
protected static string $view = 'filament.admin.widgets.no-nodes-widget';
protected string $view = 'filament.admin.widgets.no-nodes-widget';
protected static bool $isLazy = false;

View File

@ -7,7 +7,7 @@ use Filament\Widgets\Widget;
class SupportWidget extends Widget
{
protected static string $view = 'filament.admin.widgets.support-widget';
protected string $view = 'filament.admin.widgets.support-widget';
protected static bool $isLazy = false;

View File

@ -8,7 +8,7 @@ use Filament\Widgets\Widget;
class UpdateWidget extends Widget
{
protected static string $view = 'filament.admin.widgets.update-widget';
protected string $view = 'filament.admin.widgets.update-widget';
protected static bool $isLazy = false;

View File

@ -7,8 +7,8 @@ use App\Filament\App\Resources\ServerResource;
use App\Filament\Components\Tables\Columns\ServerEntryColumn;
use App\Filament\Server\Pages\Console;
use App\Models\Server;
use Filament\Resources\Components\Tab;
use Filament\Resources\Pages\ListRecords;
use Filament\Schemas\Components\Tabs\Tab;
use Filament\Tables\Columns\ColumnGroup;
use Filament\Tables\Columns\Layout\Stack;
use Filament\Tables\Columns\TextColumn;
@ -45,7 +45,7 @@ class ListServers extends ListRecords
->label('')
->size('md')
->searchable(),
TextColumn::make('')
TextColumn::make('iNeedAName')
->label('')
->badge()
->copyable(request()->isSecure())

View File

@ -9,10 +9,10 @@ use Exception;
use Filament\Actions\Action;
use Filament\Forms\Components\FileUpload;
use Filament\Forms\Components\Repeater;
use Filament\Forms\Components\Tabs;
use Filament\Forms\Components\Tabs\Tab;
use Filament\Forms\Components\TextInput;
use Filament\Notifications\Notification;
use Filament\Schemas\Components\Tabs;
use Filament\Schemas\Components\Tabs\Tab;
use Illuminate\Support\Arr;
use Livewire\Features\SupportFileUploads\TemporaryUploadedFile;
@ -78,7 +78,7 @@ class ImportEggAction extends Action
public function multiple(bool|Closure $condition = true): static
{
$isMultiple = (bool) $this->evaluate($condition);
$this->form([
$this->schema([
Tabs::make('Tabs')
->contained(false)
->tabs([

View File

@ -4,9 +4,9 @@ namespace App\Filament\Components\Forms\Actions;
use App\Models\Server;
use App\Services\Servers\StartupCommandService;
use Filament\Forms\Components\Actions\Action;
use Filament\Forms\Get;
use Filament\Forms\Set;
use Filament\Actions\Action;
use Filament\Schemas\Components\Utilities\Get;
use Filament\Schemas\Components\Utilities\Set;
class PreviewStartupAction extends Action
{

View File

@ -6,9 +6,8 @@ use App\Facades\Activity;
use App\Models\Database;
use App\Services\Databases\DatabasePasswordService;
use Exception;
use Filament\Actions\StaticAction;
use Filament\Forms\Components\Actions\Action;
use Filament\Forms\Set;
use Filament\Actions\Action;
use Filament\Schemas\Components\Utilities\Set;
use Filament\Notifications\Notification;
class RotateDatabasePasswordAction extends Action
@ -32,7 +31,7 @@ class RotateDatabasePasswordAction extends Action
$this->modalIconColor('warning');
$this->modalSubmitAction(fn (StaticAction $action) => $action->color('warning'));
$this->modalSubmitAction(fn (Action $action) => $action->color('warning'));
$this->requiresConfirmation();

View File

@ -4,7 +4,7 @@ namespace App\Filament\Components\Forms\Fields;
use App\Models\Egg;
use Filament\Forms\Components\Select;
use Filament\Forms\Set;
use Filament\Schemas\Components\Utilities\Set;
use Livewire\Component;
class CopyFrom extends Select

View File

@ -4,7 +4,7 @@ namespace App\Filament\Components\Tables\Actions;
use App\Models\Egg;
use App\Services\Eggs\Sharing\EggExporterService;
use Filament\Tables\Actions\Action;
use Filament\Actions\Action;
class ExportEggAction extends Action
{

View File

@ -8,11 +8,11 @@ use Closure;
use Exception;
use Filament\Forms\Components\FileUpload;
use Filament\Forms\Components\Repeater;
use Filament\Forms\Components\Tabs;
use Filament\Forms\Components\Tabs\Tab;
use Filament\Schemas\Components\Tabs;
use Filament\Schemas\Components\Tabs\Tab;
use Filament\Forms\Components\TextInput;
use Filament\Notifications\Notification;
use Filament\Tables\Actions\Action;
use Filament\Actions\Action;
use Illuminate\Support\Arr;
use Livewire\Features\SupportFileUploads\TemporaryUploadedFile;
@ -78,7 +78,7 @@ class ImportEggAction extends Action
public function multiple(bool|Closure $condition = true): static
{
$isMultiple = (bool) $this->evaluate($condition);
$this->form([
$this->schema([
Tabs::make('Tabs')
->contained(false)
->tabs([

View File

@ -5,9 +5,8 @@ namespace App\Filament\Components\Tables\Actions;
use App\Models\Egg;
use App\Services\Eggs\Sharing\EggImporterService;
use Exception;
use Filament\Actions\StaticAction;
use Filament\Notifications\Notification;
use Filament\Tables\Actions\Action;
use Filament\Actions\Action;
class UpdateEggAction extends Action
{
@ -34,7 +33,7 @@ class UpdateEggAction extends Action
$this->modalIconColor('danger');
$this->modalSubmitAction(fn (StaticAction $action) => $action->color('danger'));
$this->modalSubmitAction(fn (Action $action) => $action->color('danger'));
$this->action(function (Egg $egg, EggImporterService $eggImporterService) {
try {

View File

@ -5,9 +5,9 @@ namespace App\Filament\Components\Tables\Actions;
use App\Models\Egg;
use App\Services\Eggs\Sharing\EggImporterService;
use Exception;
use Filament\Actions\StaticAction;
use Filament\Actions\Action;
use Filament\Notifications\Notification;
use Filament\Tables\Actions\BulkAction;
use Filament\Actions\BulkAction;
use Illuminate\Database\Eloquent\Collection;
class UpdateEggBulkAction extends BulkAction
@ -35,7 +35,7 @@ class UpdateEggBulkAction extends BulkAction
$this->modalIconColor('danger');
$this->modalSubmitAction(fn (StaticAction $action) => $action->color('danger'));
$this->modalSubmitAction(fn (Action $action) => $action->color('danger'));
$this->action(function (Collection $records, EggImporterService $eggImporterService) {
if ($records->count() === 0) {

View File

@ -17,25 +17,24 @@ use chillerlan\QRCode\Common\Version;
use chillerlan\QRCode\QRCode;
use chillerlan\QRCode\QROptions;
use DateTimeZone;
use Filament\Forms\Components\Actions;
use Filament\Forms\Components\Actions\Action;
use Filament\Actions;
use Filament\Actions\Action;
use Filament\Forms\Components\FileUpload;
use Filament\Forms\Components\Grid;
use Filament\Schemas\Components\Grid;
use Filament\Forms\Components\Placeholder;
use Filament\Forms\Components\Repeater;
use Filament\Forms\Components\Section;
use Filament\Schemas\Components\Section;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\Tabs;
use Filament\Forms\Components\Tabs\Tab;
use Filament\Schemas\Components\Tabs;
use Filament\Schemas\Components\Tabs\Tab;
use Filament\Forms\Components\TagsInput;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\ToggleButtons;
use Filament\Forms\Get;
use Filament\Schemas\Components\Utilities\Get;
use Filament\Notifications\Notification;
use Filament\Pages\Auth\EditProfile as BaseEditProfile;
use Filament\Support\Colors\Color;
use Filament\Support\Enums\MaxWidth;
use Filament\Support\Enums\Width;
use Filament\Support\Exceptions\Halt;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
@ -47,7 +46,7 @@ use Laravel\Socialite\Facades\Socialite;
/**
* @method User getUser()
*/
class EditProfile extends BaseEditProfile
class EditProfile extends \Filament\Auth\Pages\EditProfile
{
private ToggleTwoFactorService $toggleTwoFactorService;
@ -56,7 +55,7 @@ class EditProfile extends BaseEditProfile
$this->toggleTwoFactorService = $toggleTwoFactorService;
}
public function getMaxWidth(): MaxWidth|string
public function getMaxWidth(): Width|string
{
return config('panel.filament.display-width', 'screen-2xl');
}

View File

@ -5,21 +5,20 @@ namespace App\Filament\Pages\Auth;
use App\Extensions\Captcha\Providers\CaptchaProvider;
use App\Extensions\OAuth\Providers\OAuthProvider;
use App\Models\User;
use Filament\Auth\Http\Responses\LoginResponse;
use Filament\Facades\Filament;
use Filament\Forms\Components\Actions;
use Filament\Forms\Components\Actions\Action;
use Filament\Forms\Components\Component;
use Filament\Actions\Action;
use Filament\Forms\Components\TextInput;
use Filament\Http\Responses\Auth\Contracts\LoginResponse;
use Filament\Notifications\Notification;
use Filament\Pages\Auth\Login as BaseLogin;
use Filament\Schemas\Components\Actions;
use Filament\Schemas\Components\Component;
use Filament\Support\Colors\Color;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Sleep;
use Illuminate\Validation\ValidationException;
use PragmaRX\Google2FA\Google2FA;
class Login extends BaseLogin
class Login extends \Filament\Auth\Pages\Login
{
private Google2FA $google2FA;
@ -156,7 +155,7 @@ class Login extends BaseLogin
$actions[] = Action::make("oauth_$id")
->label($oauthProvider->getName())
->icon($oauthProvider->getIcon())
->color(Color::hex($oauthProvider->getHexColor()))
//TODO ->color(Color::hex($oauthProvider->getHexColor()))
->url(route('auth.oauth.redirect', ['driver' => $id], false));
}

View File

@ -8,7 +8,7 @@ use Illuminate\Contracts\View\View;
class SmallStatBlock extends Stat
{
protected string|Htmlable $label;
protected string|\Closure|Htmlable|null $label;
protected $value;
@ -31,7 +31,7 @@ class SmallStatBlock extends Stat
return $this->label;
}
public function getValue()
public function getValue(): mixed
{
return value($this->value);
}

View File

@ -8,7 +8,7 @@ use Illuminate\Contracts\View\View;
class StatBlock extends Stat
{
protected string|Htmlable $label;
protected string|\Closure|Htmlable|null $label;
protected $value;
@ -31,7 +31,7 @@ class StatBlock extends Stat
return $this->label;
}
public function getValue()
public function getValue(): mixed
{
return value($this->value);
}

View File

@ -16,18 +16,18 @@ use App\Models\Server;
use Filament\Actions\Action;
use Filament\Facades\Filament;
use Filament\Pages\Page;
use Filament\Support\Enums\ActionSize;
use Filament\Support\Enums\Size;
use Filament\Widgets\Widget;
use Filament\Widgets\WidgetConfiguration;
use Livewire\Attributes\On;
class Console extends Page
{
protected static ?string $navigationIcon = 'tabler-brand-tabler';
protected static string | \BackedEnum | null $navigationIcon = 'tabler-brand-tabler';
protected static ?int $navigationSort = 1;
protected static string $view = 'filament.server.pages.console';
protected string $view = 'filament.server.pages.console';
public ContainerStatus $status = ContainerStatus::Offline;
@ -125,21 +125,21 @@ class Console extends Page
return [
Action::make('start')
->color('primary')
->size(ActionSize::ExtraLarge)
->size(Size::ExtraLarge)
->action(fn () => $this->dispatch('setServerState', state: 'start', uuid: $server->uuid))
->authorize(fn () => auth()->user()->can(Permission::ACTION_CONTROL_START, $server))
->disabled(fn () => $server->isInConflictState() || !$this->status->isStartable())
->icon('tabler-player-play-filled'),
Action::make('restart')
->color('gray')
->size(ActionSize::ExtraLarge)
->size(Size::ExtraLarge)
->action(fn () => $this->dispatch('setServerState', state: 'restart', uuid: $server->uuid))
->authorize(fn () => auth()->user()->can(Permission::ACTION_CONTROL_RESTART, $server))
->disabled(fn () => $server->isInConflictState() || !$this->status->isRestartable())
->icon('tabler-reload'),
Action::make('stop')
->color('danger')
->size(ActionSize::ExtraLarge)
->size(Size::ExtraLarge)
->action(fn () => $this->dispatch('setServerState', state: 'stop', uuid: $server->uuid))
->authorize(fn () => auth()->user()->can(Permission::ACTION_CONTROL_STOP, $server))
->hidden(fn () => $this->status->isStartingOrStopping() || $this->status->isKillable())
@ -151,7 +151,7 @@ class Console extends Page
->modalHeading('Do you wish to kill this server?')
->modalDescription('This can result in data corruption and/or data loss!')
->modalSubmitActionLabel('Kill Server')
->size(ActionSize::ExtraLarge)
->size(Size::ExtraLarge)
->action(fn () => $this->dispatch('setServerState', state: 'kill', uuid: $server->uuid))
->authorize(fn () => auth()->user()->can(Permission::ACTION_CONTROL_STOP, $server))
->hidden(fn () => $server->isInConflictState() || !$this->status->isKillable())

View File

@ -5,7 +5,7 @@ namespace App\Filament\Server\Pages;
use App\Models\Server;
use Filament\Facades\Filament;
use Filament\Forms\Concerns\InteractsWithForms;
use Filament\Forms\Form;
use Filament\Schemas\Components\Form;
use Filament\Pages\Concerns\InteractsWithFormActions;
use Filament\Pages\Page;
@ -17,9 +17,8 @@ abstract class ServerFormPage extends Page
use InteractsWithFormActions;
use InteractsWithForms;
protected static string $view = 'filament.server.pages.server-form-page';
protected string $view = 'filament.server.pages.server-form-page';
/** @var ?array<mixed> */
public ?array $data = [];
public function mount(): void

View File

@ -7,31 +7,31 @@ use App\Models\Permission;
use App\Models\Server;
use App\Services\Servers\ReinstallServerService;
use Exception;
use Filament\Actions\Action;
use Filament\Facades\Filament;
use Filament\Forms\Components\Actions\Action;
use Filament\Forms\Components\Fieldset;
use Filament\Schemas\Components\Fieldset;
use Filament\Forms\Components\Placeholder;
use Filament\Forms\Components\Section;
use Filament\Schemas\Components\Section;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Form;
use Filament\Schemas\Components\Form;
use Filament\Notifications\Notification;
use Filament\Schemas\Schema;
use Filament\Support\Enums\Alignment;
use Illuminate\Support\Number;
use Webbingbrasil\FilamentCopyActions\Forms\Actions\CopyAction;
class Settings extends ServerFormPage
{
protected static ?string $navigationIcon = 'tabler-settings';
protected static string | \BackedEnum | null $navigationIcon = 'tabler-settings';
protected static ?int $navigationSort = 10;
public function form(Form $form): Form
public function form(Form|Schema $schema): Schema
{
/** @var Server $server */
$server = Filament::getTenant();
return $form
return $schema
->columns([
'default' => 1,
'sm' => 2,
@ -162,7 +162,7 @@ class Settings extends ServerFormPage
->label('Connection')
->columnSpan(1)
->disabled()
->suffixAction(fn () => request()->isSecure() ? CopyAction::make() : null)
//TODO ->suffixAction(fn () => request()->isSecure() ? CopyAction::make() : null)
->hintAction(
Action::make('connect_sftp')
->label('Connect to SFTP')
@ -182,7 +182,7 @@ class Settings extends ServerFormPage
TextInput::make('username')
->label('Username')
->columnSpan(1)
->suffixAction(fn () => request()->isSecure() ? CopyAction::make() : null)
//TODO ->suffixAction(fn () => request()->isSecure() ? CopyAction::make() : null)
->disabled()
->formatStateUsing(fn (Server $server) => auth()->user()->username . '.' . $server->uuid_short),
Placeholder::make('password')

View File

@ -9,30 +9,30 @@ use App\Models\Server;
use App\Models\ServerVariable;
use Closure;
use Filament\Facades\Filament;
use Filament\Forms\Components\Component;
use Filament\Schemas\Components\Component;
use Filament\Forms\Components\Hidden;
use Filament\Forms\Components\Repeater;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Form;
use Filament\Schemas\Components\Form;
use Filament\Notifications\Notification;
use Filament\Schemas\Schema;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\Validator;
class Startup extends ServerFormPage
{
protected static ?string $navigationIcon = 'tabler-player-play';
protected static string | \BackedEnum | null $navigationIcon = 'tabler-player-play';
protected static ?int $navigationSort = 9;
public function form(Form $form): Form
public function form(Form|Schema $schema): Schema
{
/** @var Server $server */
$server = Filament::getTenant();
return $form
return $schema
->columns([
'default' => 1,
'sm' => 1,

View File

@ -23,7 +23,7 @@ class ActivityResource extends Resource
protected static ?int $navigationSort = 8;
protected static ?string $navigationIcon = 'tabler-stack';
protected static string | \BackedEnum | null $navigationIcon = 'tabler-stack';
public static function getEloquentQuery(): Builder
{

View File

@ -9,13 +9,13 @@ use App\Filament\Components\Tables\Columns\DateTimeColumn;
use App\Models\Server;
use App\Models\User;
use Filament\Facades\Filament;
use Filament\Forms\Components\Actions\Action;
use Filament\Actions\Action;
use Filament\Forms\Components\DateTimePicker;
use Filament\Forms\Components\KeyValue;
use Filament\Forms\Components\Placeholder;
use Filament\Forms\Components\TextInput;
use Filament\Resources\Pages\ListRecords;
use Filament\Tables\Actions\ViewAction;
use Filament\Actions\ViewAction;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Filters\SelectFilter;
use Filament\Tables\Table;
@ -67,7 +67,7 @@ class ListActivities extends ListRecords
->actions([
ViewAction::make()
//->visible(fn (ActivityLog $activityLog) => $activityLog->hasAdditionalMetadata())
->form([
->schema([
Placeholder::make('event')
->content(fn (ActivityLog $activityLog) => new HtmlString($activityLog->getLabel())),
TextInput::make('user')

View File

@ -20,7 +20,7 @@ class AllocationResource extends Resource
protected static ?int $navigationSort = 7;
protected static ?string $navigationIcon = 'tabler-network';
protected static string | \BackedEnum | null $navigationIcon = 'tabler-network';
// TODO: find better way handle server conflict state
public static function canAccess(): bool

View File

@ -11,7 +11,7 @@ use App\Services\Allocations\FindAssignableAllocationService;
use Filament\Actions;
use Filament\Facades\Filament;
use Filament\Resources\Pages\ListRecords;
use Filament\Tables\Actions\DetachAction;
use Filament\Actions\DetachAction;
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Columns\TextInputColumn;

View File

@ -16,7 +16,7 @@ class BackupResource extends Resource
protected static ?int $navigationSort = 3;
protected static ?string $navigationIcon = 'tabler-file-zip';
protected static string | \BackedEnum | null $navigationIcon = 'tabler-file-zip';
protected static bool $canCreateAnother = false;

View File

@ -22,17 +22,18 @@ use Filament\Forms\Components\Placeholder;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Toggle;
use Filament\Forms\Form;
use Filament\Schemas\Components\Form;
use Filament\Notifications\Notification;
use Filament\Resources\Pages\ListRecords;
use Filament\Tables\Actions\Action;
use Filament\Tables\Actions\ActionGroup;
use Filament\Tables\Actions\DeleteAction;
use Filament\Actions\Action;
use Filament\Actions\ActionGroup;
use Filament\Actions\DeleteAction;
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
use Illuminate\Http\Request;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Filament\Schemas\Schema;
class ListBackups extends ListRecords
{
@ -40,9 +41,9 @@ class ListBackups extends ListRecords
protected static bool $canCreateAnother = false;
public function form(Form $form): Form
public function form(Form|Schema $schema): Schema
{
return $form
return $schema
->schema([
TextInput::make('name')
->label('Name')
@ -98,7 +99,7 @@ class ListBackups extends ListRecords
->color('success')
->icon('tabler-folder-up')
->authorize(fn () => auth()->user()->can(Permission::ACTION_BACKUP_RESTORE, $server))
->form([
->schema([
Placeholder::make('')
->helperText('Your server will be stopped. You will not be able to control the power state, access the file manager, or create additional backups until this process is completed.'),
Checkbox::make('truncate')

View File

@ -16,7 +16,7 @@ class DatabaseResource extends Resource
protected static ?int $navigationSort = 6;
protected static ?string $navigationIcon = 'tabler-database';
protected static string | \BackedEnum | null $navigationIcon = 'tabler-database';
public const WARNING_THRESHOLD = 0.7;

View File

@ -13,35 +13,35 @@ use App\Models\Server;
use App\Services\Databases\DatabaseManagementService;
use Filament\Actions\CreateAction;
use Filament\Facades\Filament;
use Filament\Forms\Components\Grid;
use Filament\Schemas\Components\Grid;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Form;
use Filament\Schemas\Components\Form;
use Filament\Resources\Pages\ListRecords;
use Filament\Tables\Actions\DeleteAction;
use Filament\Tables\Actions\ViewAction;
use Filament\Actions\DeleteAction;
use Filament\Actions\ViewAction;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
use Webbingbrasil\FilamentCopyActions\Forms\Actions\CopyAction;
use Filament\Schemas\Schema;
class ListDatabases extends ListRecords
{
protected static string $resource = DatabaseResource::class;
public function form(Form $form): Form
public function form(Form|Schema $schema): Schema
{
/** @var Server $server */
$server = Filament::getTenant();
return $form
return $schema
->schema([
TextInput::make('host')
->formatStateUsing(fn (Database $database) => $database->address())
->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null),
TextInput::make('database')
->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null),
TextInput::make('username')
->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null),
->formatStateUsing(fn (Database $database) => $database->address()),
//TODO ->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null),
TextInput::make('database'),
//TODO ->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null),
TextInput::make('username'),
//TODO->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null),
TextInput::make('password')
->password()->revealable()
->hidden(fn () => !auth()->user()->can(Permission::ACTION_DATABASE_VIEW_PASSWORD, $server))
@ -49,7 +49,7 @@ class ListDatabases extends ListRecords
RotateDatabasePasswordAction::make()
->authorize(fn () => auth()->user()->can(Permission::ACTION_DATABASE_UPDATE, $server))
)
->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null)
//TODO ->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null)
->formatStateUsing(fn (Database $database) => $database->password),
TextInput::make('remote')
->label('Connections From'),
@ -59,7 +59,7 @@ class ListDatabases extends ListRecords
->label('JDBC Connection String')
->password()->revealable()
->hidden(!auth()->user()->can(Permission::ACTION_DATABASE_VIEW_PASSWORD, $server))
->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null)
//TODO ->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null)
->columnSpanFull()
->formatStateUsing(fn (Database $database) => $database->jdbc),
]);
@ -102,7 +102,7 @@ class ListDatabases extends ListRecords
->disabled(fn () => $server->databases()->count() >= $server->database_limit)
->color(fn () => $server->databases()->count() >= $server->database_limit ? 'danger' : 'primary')
->createAnother(false)
->form([
->schema([
Grid::make()
->columns(2)
->schema([

View File

@ -16,7 +16,7 @@ class FileResource extends Resource
protected static ?int $navigationSort = 2;
protected static ?string $navigationIcon = 'tabler-files';
protected static string | \BackedEnum | null $navigationIcon = 'tabler-files';
// TODO: find better way handle server conflict state
public static function canAccess(): bool

View File

@ -2,10 +2,7 @@
namespace App\Filament\Server\Resources\FileResource\Pages;
use AbdelhamidErrahmouni\FilamentMonacoEditor\MonacoEditor;
use App\Enums\EditorLanguages;
use App\Exceptions\Http\Server\FileSizeTooLargeException;
use App\Exceptions\Repository\FileNotEditableException;
use App\Facades\Activity;
use App\Filament\Server\Resources\FileResource;
use App\Livewire\AlertBanner;
@ -13,19 +10,18 @@ use App\Models\Permission;
use App\Models\Server;
use App\Repositories\Daemon\DaemonFileRepository;
use Filament\Facades\Filament;
use Filament\Forms\Components\Actions\Action;
use Filament\Forms\Components\Section;
use Filament\Actions\Action;
use Filament\Forms\Components\Select;
use Filament\Forms\Concerns\InteractsWithForms;
use Filament\Forms\Form;
use Filament\Forms\Get;
use Filament\Schemas\Components\Form;
use Filament\Schemas\Components\Section;
use Filament\Notifications\Notification;
use Filament\Pages\Concerns\InteractsWithFormActions;
use Filament\Panel;
use Filament\Resources\Pages\Page;
use Filament\Resources\Pages\PageRegistration;
use Filament\Schemas\Schema;
use Filament\Support\Enums\Alignment;
use Illuminate\Contracts\Filesystem\FileNotFoundException;
use Illuminate\Routing\Route;
use Illuminate\Support\Facades\Route as RouteFacade;
use Livewire\Attributes\Locked;
@ -40,7 +36,7 @@ class EditFiles extends Page
protected static string $resource = FileResource::class;
protected static string $view = 'filament.server.pages.edit-file';
protected string $view = 'filament.server.pages.edit-file';
protected static ?string $title = '';
@ -49,10 +45,9 @@ class EditFiles extends Page
private DaemonFileRepository $fileRepository;
/** @var array<mixed> */
public ?array $data = [];
public function form(Form $form): Form
public function form(Form|Schema $schema): Schema
{
/** @var Server $server */
$server = Filament::getTenant();
@ -61,7 +56,7 @@ class EditFiles extends Page
->property('file', $this->path)
->log();
return $form
return $schema
->schema([
Section::make('Editing: ' . $this->path)
->footerActions([
@ -120,43 +115,43 @@ class EditFiles extends Page
->selectablePlaceholder(false)
->afterStateUpdated(fn ($state) => $this->dispatch('setLanguage', lang: $state))
->default(fn () => EditorLanguages::fromWithAlias(pathinfo($this->path, PATHINFO_EXTENSION))),
MonacoEditor::make('editor')
->hiddenLabel()
->showPlaceholder(false)
->default(function () {
try {
return $this->getDaemonFileRepository()->getContent($this->path, config('panel.files.max_edit_size'));
} catch (FileSizeTooLargeException) {
AlertBanner::make()
->title('File too large!')
->body('<code>' . $this->path . '</code> Max is ' . convert_bytes_to_readable(config('panel.files.max_edit_size')))
->danger()
->closable()
->send();
$this->redirect(ListFiles::getUrl());
} catch (FileNotFoundException) {
AlertBanner::make()
->title('File Not found!')
->body('<code>' . $this->path . '</code>')
->danger()
->closable()
->send();
$this->redirect(ListFiles::getUrl());
} catch (FileNotEditableException) {
AlertBanner::make()
->title('Could not edit directory!')
->body('<code>' . $this->path . '</code>')
->danger()
->closable()
->send();
$this->redirect(ListFiles::getUrl());
}
})
->language(fn (Get $get) => $get('lang'))
->view('filament.plugins.monaco-editor'),
// TODO MonacoEditor::make('editor')
// ->hiddenLabel()
// ->showPlaceholder(false)
// ->default(function () {
// try {
// return $this->getDaemonFileRepository()->getContent($this->path, config('panel.files.max_edit_size'));
// } catch (FileSizeTooLargeException) {
// AlertBanner::make()
// ->title('File too large!')
// ->body('<code>' . $this->path . '</code> Max is ' . convert_bytes_to_readable(config('panel.files.max_edit_size')))
// ->danger()
// ->closable()
// ->send();
//
// $this->redirect(ListFiles::getUrl());
// } catch (FileNotFoundException) {
// AlertBanner::make()
// ->title('File Not found!')
// ->body('<code>' . $this->path . '</code>')
// ->danger()
// ->closable()
// ->send();
//
// $this->redirect(ListFiles::getUrl());
// } catch (FileNotEditableException) {
// AlertBanner::make()
// ->title('Could not edit directory!')
// ->body('<code>' . $this->path . '</code>')
// ->danger()
// ->closable()
// ->send();
//
// $this->redirect(ListFiles::getUrl());
// }
// })
// ->language(fn (Get $get) => $get('lang'))
// ->view('filament.plugins.monaco-editor'),
]),
]);
}

View File

@ -2,7 +2,6 @@
namespace App\Filament\Server\Resources\FileResource\Pages;
use AbdelhamidErrahmouni\FilamentMonacoEditor\MonacoEditor;
use App\Enums\EditorLanguages;
use App\Facades\Activity;
use App\Filament\Server\Resources\FileResource;
@ -19,21 +18,21 @@ use Filament\Forms\Components\CheckboxList;
use Filament\Forms\Components\FileUpload;
use Filament\Forms\Components\Placeholder;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\Tabs;
use Filament\Forms\Components\Tabs\Tab;
use Filament\Schemas\Components\Tabs;
use Filament\Schemas\Components\Tabs\Tab;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Get;
use Filament\Schemas\Components\Utilities\Get;
use Filament\Notifications\Notification;
use Filament\Panel;
use Filament\Resources\Pages\ListRecords;
use Filament\Resources\Pages\PageRegistration;
use Filament\Tables\Actions\Action;
use Filament\Tables\Actions\ActionGroup;
use Filament\Tables\Actions\BulkAction;
use Filament\Tables\Actions\BulkActionGroup;
use Filament\Tables\Actions\DeleteAction;
use Filament\Tables\Actions\DeleteBulkAction;
use Filament\Tables\Actions\EditAction;
use Filament\Actions\Action;
use Filament\Actions\ActionGroup;
use Filament\Actions\BulkAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteAction;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Collection;
@ -147,7 +146,7 @@ class ListFiles extends ListRecords
->disabled($this->isDisabled)
->label('Rename')
->icon('tabler-forms')
->form([
->schema([
TextInput::make('name')
->label('File name')
->default(fn (File $file) => $file->name)
@ -203,7 +202,7 @@ class ListFiles extends ListRecords
->disabled($this->isDisabled)
->label('Move')
->icon('tabler-replace')
->form([
->schema([
TextInput::make('location')
->label('New location')
->hint('Enter the location of this file or folder, relative to the current directory.')
@ -239,7 +238,7 @@ class ListFiles extends ListRecords
->disabled($this->isDisabled)
->label('Permissions')
->icon('tabler-license')
->form([
->schema([
CheckboxList::make('owner')
->bulkToggleable()
->options([
@ -296,7 +295,7 @@ class ListFiles extends ListRecords
->disabled($this->isDisabled)
->label('Archive')
->icon('tabler-archive')
->form([
->schema([
TextInput::make('name')
->label('Archive name')
->placeholder(fn () => 'archive-' . str(Carbon::now()->toRfc3339String())->replace(':', '')->before('+0000') . 'Z')
@ -363,7 +362,7 @@ class ListFiles extends ListRecords
BulkAction::make('move')
->authorize(fn () => auth()->user()->can(Permission::ACTION_FILE_UPDATE, $server))
->disabled($this->isDisabled)
->form([
->schema([
TextInput::make('location')
->label('Directory')
->hint('Enter the new directory, relative to the current directory.')
@ -392,7 +391,7 @@ class ListFiles extends ListRecords
BulkAction::make('archive')
->authorize(fn () => auth()->user()->can(Permission::ACTION_FILE_ARCHIVE, $server))
->disabled($this->isDisabled)
->form([
->schema([
TextInput::make('name')
->label('Archive name')
->placeholder(fn () => 'archive-' . str(Carbon::now()->toRfc3339String())->replace(':', '')->before('+0000') . 'Z')
@ -458,7 +457,7 @@ class ListFiles extends ListRecords
->property('file', join_paths($this->path, $data['name']))
->log();
})
->form([
->schema([
TextInput::make('name')
->label('File Name')
->required(),
@ -488,7 +487,7 @@ class ListFiles extends ListRecords
->property(['directory' => $this->path, 'name' => $data['name']])
->log();
})
->form([
->schema([
TextInput::make('name')
->label('Folder Name')
->required(),
@ -519,7 +518,7 @@ class ListFiles extends ListRecords
return redirect(ListFiles::getUrl(['path' => $this->path]));
})
->form([
->schema([
Tabs::make()
->contained(false)
->schema([
@ -548,7 +547,7 @@ class ListFiles extends ListRecords
->disabled($this->isDisabled)
->label('Global Search')
->modalSubmitActionLabel('Search')
->form([
->schema([
TextInput::make('searchTerm')
->placeholder('Enter a search term, e.g. *.txt')
->regex('/^[^*]*\*?[^*]*$/')

View File

@ -10,20 +10,21 @@ use App\Models\Schedule;
use App\Models\Server;
use Carbon\Carbon;
use Exception;
use Filament\Actions\Action;
use Filament\Facades\Filament;
use Filament\Forms\Components\Actions;
use Filament\Forms\Components\Actions\Action;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Toggle;
use Filament\Forms\Components\ToggleButtons;
use Filament\Forms\Form;
use Filament\Forms\Set;
use Filament\Schemas\Components\Actions;
use Filament\Schemas\Components\Form;
use Filament\Schemas\Components\Section;
use Filament\Schemas\Components\Utilities\Set;
use Filament\Notifications\Notification;
use Filament\Resources\Resource;
use Filament\Support\Exceptions\Halt;
use Illuminate\Database\Eloquent\Model;
use Filament\Schemas\Schema;
class ScheduleResource extends Resource
{
@ -31,7 +32,7 @@ class ScheduleResource extends Resource
protected static ?int $navigationSort = 4;
protected static ?string $navigationIcon = 'tabler-clock';
protected static string | \BackedEnum | null $navigationIcon = 'tabler-clock';
// TODO: find better way handle server conflict state
public static function canAccess(): bool
@ -66,9 +67,9 @@ class ScheduleResource extends Resource
return auth()->user()->can(Permission::ACTION_SCHEDULE_DELETE, Filament::getTenant());
}
public static function form(Form $form): Form
public static function form(Form|Schema $schema): Schema
{
return $form
return $schema
->columns([
'default' => 4,
'lg' => 5,
@ -203,7 +204,7 @@ class ScheduleResource extends Resource
}),
Action::make('every_x_minutes')
->disabled(fn (string $operation) => $operation === 'view')
->form([
->schema([
TextInput::make('x')
->label('')
->numeric()
@ -221,7 +222,7 @@ class ScheduleResource extends Resource
}),
Action::make('every_x_hours')
->disabled(fn (string $operation) => $operation === 'view')
->form([
->schema([
TextInput::make('x')
->label('')
->numeric()
@ -239,7 +240,7 @@ class ScheduleResource extends Resource
}),
Action::make('every_x_days')
->disabled(fn (string $operation) => $operation === 'view')
->form([
->schema([
TextInput::make('x')
->label('')
->numeric()
@ -257,7 +258,7 @@ class ScheduleResource extends Resource
}),
Action::make('every_x_months')
->disabled(fn (string $operation) => $operation === 'view')
->form([
->schema([
TextInput::make('x')
->label('')
->numeric()
@ -275,7 +276,7 @@ class ScheduleResource extends Resource
}),
Action::make('every_x_day_of_week')
->disabled(fn (string $operation) => $operation === 'view')
->form([
->schema([
Select::make('x')
->label('')
->prefix('Every')

View File

@ -5,7 +5,7 @@ namespace App\Filament\Server\Resources\ScheduleResource\Pages;
use App\Facades\Activity;
use App\Filament\Server\Resources\ScheduleResource;
use App\Models\Schedule;
use Filament\Actions;
use Filament\Actions\DeleteAction;
use Filament\Resources\Pages\EditRecord;
class EditSchedule extends EditRecord
@ -38,7 +38,7 @@ class EditSchedule extends EditRecord
protected function getHeaderActions(): array
{
return [
Actions\DeleteAction::make()
DeleteAction::make()
->after(function ($record) {
Activity::event('server:schedule.delete')
->property('name', $record->name)

View File

@ -8,9 +8,9 @@ use App\Models\Schedule;
use App\Filament\Components\Tables\Columns\DateTimeColumn;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
use Filament\Tables\Actions\DeleteAction;
use Filament\Tables\Actions\EditAction;
use Filament\Tables\Actions\ViewAction;
use Filament\Actions\DeleteAction;
use Filament\Actions\EditAction;
use Filament\Actions\ViewAction;
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;

View File

@ -7,7 +7,8 @@ use App\Filament\Server\Resources\ScheduleResource;
use App\Models\Permission;
use App\Models\Schedule;
use App\Services\Schedules\ProcessScheduleService;
use Filament\Actions;
use Filament\Actions\Action;
use Filament\Actions\EditAction;
use Filament\Facades\Filament;
use Filament\Resources\Pages\ViewRecord;
@ -18,7 +19,7 @@ class ViewSchedule extends ViewRecord
protected function getHeaderActions(): array
{
return [
Actions\Action::make('runNow')
Action::make('runNow')
->authorize(fn () => auth()->user()->can(Permission::ACTION_SCHEDULE_UPDATE, Filament::getTenant()))
->label(fn (Schedule $schedule) => $schedule->tasks->count() === 0 ? 'No tasks' : ($schedule->is_processing ? 'Processing' : 'Run now'))
->color(fn (Schedule $schedule) => $schedule->tasks->count() === 0 || $schedule->is_processing ? 'warning' : 'primary')
@ -33,7 +34,7 @@ class ViewSchedule extends ViewRecord
$this->fillForm();
}),
Actions\EditAction::make(),
EditAction::make(),
];
}

View File

@ -6,16 +6,16 @@ use App\Facades\Activity;
use App\Models\Schedule;
use App\Models\Task;
use Filament\Forms\Components\Field;
use Filament\Tables\Actions\DeleteAction;
use Filament\Actions\DeleteAction;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Toggle;
use Filament\Forms\Get;
use Filament\Tables\Actions\EditAction;
use Filament\Schemas\Components\Utilities\Get;
use Filament\Actions\EditAction;
use Filament\Tables\Table;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Tables\Actions\CreateAction;
use Filament\Actions\CreateAction;
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\TextColumn;
@ -99,8 +99,8 @@ class TasksRelationManager extends RelationManager
])
->actions([
EditAction::make()
->form($this->getTaskForm($schedule))
->mutateFormDataUsing(function ($data) {
->schema($this->getTaskForm($schedule))
->mutateDataUsing(function ($data) {
$data['payload'] ??= '';
return $data;
@ -132,7 +132,7 @@ class TasksRelationManager extends RelationManager
->createAnother(false)
->label(fn () => $schedule->tasks()->count() >= config('panel.client_features.schedules.per_schedule_task_limit', 10) ? 'Task Limit Reached' : 'Create Task')
->disabled(fn () => $schedule->tasks()->count() >= config('panel.client_features.schedules.per_schedule_task_limit', 10))
->form($this->getTaskForm($schedule))
->schema($this->getTaskForm($schedule))
->action(function ($data) use ($schedule) {
$sequenceId = ($schedule->tasks()->orderByDesc('sequence_id')->first()->sequence_id ?? 0) + 1;

View File

@ -9,19 +9,19 @@ use App\Models\User;
use App\Services\Subusers\SubuserDeletionService;
use App\Services\Subusers\SubuserUpdateService;
use Filament\Facades\Filament;
use Filament\Forms\Components\Actions;
use Filament\Forms\Components\Actions\Action;
use Filament\Actions;
use Filament\Actions\Action;
use Filament\Forms\Components\CheckboxList;
use Filament\Forms\Components\Grid;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\Tabs;
use Filament\Forms\Components\Tabs\Tab;
use Filament\Schemas\Components\Grid;
use Filament\Schemas\Components\Section;
use Filament\Schemas\Components\Tabs;
use Filament\Schemas\Components\Tabs\Tab;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Set;
use Filament\Schemas\Components\Utilities\Set;
use Filament\Notifications\Notification;
use Filament\Tables\Actions\DeleteAction;
use Filament\Actions\DeleteAction;
use Filament\Resources\Resource;
use Filament\Tables\Actions\EditAction;
use Filament\Actions\EditAction;
use Filament\Tables\Columns\ImageColumn;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
@ -33,7 +33,7 @@ class UserResource extends Resource
protected static ?int $navigationSort = 5;
protected static ?string $navigationIcon = 'tabler-users';
protected static string | \BackedEnum | null $navigationIcon = 'tabler-users';
protected static ?string $tenantOwnershipRelationshipName = 'subServers';
@ -136,7 +136,7 @@ class UserResource extends Resource
return redirect(self::getUrl(tenant: $server));
})
->form([
->schema([
Grid::make()
->columnSpanFull()
->columns([

View File

@ -10,16 +10,15 @@ use App\Services\Subusers\SubuserCreationService;
use Exception;
use Filament\Actions;
use Filament\Facades\Filament;
use Filament\Forms\Components\Actions as assignAll;
use Filament\Forms\Components\Actions\Action;
use Filament\Actions\Action;
use Filament\Forms\Components\CheckboxList;
use Filament\Forms\Components\Grid;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\Tabs;
use Filament\Forms\Components\Tabs\Tab;
use Filament\Schemas\Components\Grid;
use Filament\Schemas\Components\Section;
use Filament\Schemas\Components\Tabs;
use Filament\Schemas\Components\Tabs\Tab;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Get;
use Filament\Forms\Set;
use Filament\Schemas\Components\Utilities\Get;
use Filament\Schemas\Components\Utilities\Set;
use Filament\Notifications\Notification;
use Filament\Resources\Pages\ListRecords;
@ -37,7 +36,7 @@ class ListUsers extends ListRecords
->label('Invite User')
->createAnother(false)
->authorize(fn () => auth()->user()->can(Permission::ACTION_USER_CREATE, $server))
->form([
->schema([
Grid::make()
->columnSpanFull()
->columns([
@ -57,7 +56,7 @@ class ListUsers extends ListRecords
'lg' => 5,
])
->required(),
assignAll::make([
Actions::make([
Action::make('assignAll')
->label('Assign All')
->action(function (Set $set, Get $get) {

View File

@ -16,7 +16,7 @@ use Livewire\Attributes\On;
class ServerConsole extends Widget
{
protected static string $view = 'filament.components.server-console';
protected string $view = 'filament.components.server-console';
protected int|string|array $columnSpan = 'full';

View File

@ -10,9 +10,9 @@ use Illuminate\Support\Number;
class ServerCpuChart extends ChartWidget
{
protected static ?string $pollingInterval = '1s';
protected ?string $pollingInterval = '1s';
protected static ?string $maxHeight = '200px';
protected ?string $maxHeight = '200px';
public ?Server $server = null;

View File

@ -10,9 +10,9 @@ use Illuminate\Support\Number;
class ServerMemoryChart extends ChartWidget
{
protected static ?string $pollingInterval = '1s';
protected ?string $pollingInterval = '1s';
protected static ?string $maxHeight = '200px';
protected ?string $maxHeight = '200px';
public ?Server $server = null;

View File

@ -9,11 +9,11 @@ use Filament\Widgets\ChartWidget;
class ServerNetworkChart extends ChartWidget
{
protected static ?string $heading = 'Network';
protected ?string $heading = 'Network';
protected static ?string $pollingInterval = '1s';
protected ?string $pollingInterval = '1s';
protected static ?string $maxHeight = '300px';
protected ?string $maxHeight = '300px';
public ?Server $server = null;

View File

@ -11,7 +11,7 @@ use Illuminate\Support\Number;
class ServerOverview extends StatsOverviewWidget
{
protected static ?string $pollingInterval = '1s';
protected ?string $pollingInterval = '1s';
public ?Server $server = null;

View File

@ -19,7 +19,7 @@ class ServerInstalledListener
->title('Server ' . ($event->initialInstall ? 'Installation' : 'Reinstallation') . ' ' . ($event->successful ? 'completed' : 'failed'))
->body('Server Name: ' . $event->server->name)
->actions([
Action::make('view')
\Filament\Actions\Action::make('view')
->button()
->label('Open Server')
->markAsRead()

View File

@ -19,7 +19,7 @@ class SubUserAddedListener
->title('Added to Server')
->body('You have been added as a subuser to ' . $event->subuser->server->name . '.')
->actions([
Action::make('view')
\Filament\Actions\Action::make('view')
->button()
->label('Open Server')
->markAsRead()

View File

@ -14,14 +14,14 @@ use App\Services\Users\UserCreationService;
use App\Traits\CheckMigrationsTrait;
use App\Traits\EnvironmentWriterTrait;
use Exception;
use Filament\Forms\Components\Actions\Action;
use Filament\Forms\Components\Wizard;
use Filament\Actions\Action;
use Filament\Schemas\Components\Wizard;
use Filament\Forms\Concerns\InteractsWithForms;
use Filament\Forms\Contracts\HasForms;
use Filament\Forms\Form;
use Filament\Schemas\Components\Form;
use Filament\Notifications\Notification;
use Filament\Pages\SimplePage;
use Filament\Support\Enums\MaxWidth;
use Filament\Support\Enums\Width;
use Filament\Support\Exceptions\Halt;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Blade;
@ -36,14 +36,13 @@ class PanelInstaller extends SimplePage implements HasForms
use EnvironmentWriterTrait;
use InteractsWithForms;
/** @var array<mixed> */
public array $data = [];
protected static string $view = 'filament.pages.installer';
protected string $view = 'filament.pages.installer';
public function getMaxWidth(): MaxWidth|string
public function getMaxWidth(): Width|string
{
return MaxWidth::SevenExtraLarge;
return Width::SevenExtraLarge;
}
public static function isInstalled(): bool

View File

@ -7,8 +7,8 @@ use Exception;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\ToggleButtons;
use Filament\Forms\Components\Wizard\Step;
use Filament\Forms\Get;
use Filament\Forms\Set;
use Filament\Schemas\Components\Utilities\Get;
use Filament\Schemas\Components\Utilities\Set;
use Filament\Notifications\Notification;
use Filament\Support\Exceptions\Halt;
use Illuminate\Foundation\Application;
@ -21,9 +21,9 @@ class CacheStep
'redis' => 'Redis',
];
public static function make(PanelInstaller $installer): Step
public static function make(PanelInstaller $installer): \Filament\Schemas\Components\Wizard\Step
{
return Step::make('cache')
return \Filament\Schemas\Components\Wizard\Step::make('cache')
->label('Cache')
->columns()
->schema([

View File

@ -7,8 +7,8 @@ use Exception;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\ToggleButtons;
use Filament\Forms\Components\Wizard\Step;
use Filament\Forms\Get;
use Filament\Forms\Set;
use Filament\Schemas\Components\Utilities\Get;
use Filament\Schemas\Components\Utilities\Set;
use Filament\Notifications\Notification;
use Filament\Support\Exceptions\Halt;
use Illuminate\Support\Facades\DB;
@ -22,9 +22,9 @@ class DatabaseStep
'pgsql' => 'PostgreSQL',
];
public static function make(PanelInstaller $installer): Step
public static function make(PanelInstaller $installer): \Filament\Schemas\Components\Wizard\Step
{
return Step::make('database')
return \Filament\Schemas\Components\Wizard\Step::make('database')
->label('Database')
->columns()
->schema([

View File

@ -3,15 +3,15 @@
namespace App\Livewire\Installer\Steps;
use App\Livewire\Installer\PanelInstaller;
use Filament\Forms\Components\Fieldset;
use Filament\Schemas\Components\Fieldset;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Wizard\Step;
class EnvironmentStep
{
public static function make(PanelInstaller $installer): Step
public static function make(PanelInstaller $installer): \Filament\Schemas\Components\Wizard\Step
{
return Step::make('environment')
return \Filament\Schemas\Components\Wizard\Step::make('environment')
->label('Environment')
->columns()
->schema([

View File

@ -7,7 +7,7 @@ use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Toggle;
use Filament\Forms\Components\ToggleButtons;
use Filament\Forms\Components\Wizard\Step;
use Filament\Forms\Get;
use Filament\Schemas\Components\Utilities\Get;
use Illuminate\Support\HtmlString;
use Webbingbrasil\FilamentCopyActions\Forms\Actions\CopyAction;
@ -19,9 +19,9 @@ class QueueStep
'sync' => 'Sync',
];
public static function make(PanelInstaller $installer): Step
public static function make(PanelInstaller $installer): \Filament\Schemas\Components\Wizard\Step
{
return Step::make('queue')
return \Filament\Schemas\Components\Wizard\Step::make('queue')
->label('Queue')
->columns()
->schema([

View File

@ -3,7 +3,6 @@
namespace App\Livewire\Installer\Steps;
use Filament\Forms\Components\Placeholder;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\Wizard\Step;
use Filament\Notifications\Notification;
use Filament\Support\Exceptions\Halt;
@ -12,7 +11,7 @@ class RequirementsStep
{
public const MIN_PHP_VERSION = '8.2';
public static function make(): Step
public static function make(): \Filament\Schemas\Components\Wizard\Step
{
$compare = version_compare(phpversion(), self::MIN_PHP_VERSION);
$correctPhpVersion = $compare >= 0;
@ -73,7 +72,7 @@ class RequirementsStep
->visible(!$correctFolderPermissions),
]);
return Step::make('requirements')
return \Filament\Schemas\Components\Wizard\Step::make('requirements')
->label('Server Requirements')
->schema($fields)
->afterValidation(function () use ($correctPhpVersion, $allExtensionsInstalled, $correctFolderPermissions) {

View File

@ -5,7 +5,7 @@ namespace App\Livewire\Installer\Steps;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\ToggleButtons;
use Filament\Forms\Components\Wizard\Step;
use Filament\Forms\Get;
use Filament\Schemas\Components\Utilities\Get;
class SessionStep
{
@ -16,9 +16,9 @@ class SessionStep
'redis' => 'Redis',
];
public static function make(): Step
public static function make(): \Filament\Schemas\Components\Wizard\Step
{
return Step::make('session')
return \Filament\Schemas\Components\Wizard\Step::make('session')
->label('Session')
->schema([
ToggleButtons::make('env_session.SESSION_DRIVER')

View File

@ -39,7 +39,7 @@ class AdminPanelProvider extends PanelProvider
->favicon(config('app.favicon', '/pelican.ico'))
->topNavigation(config('panel.filament.top-navigation', false))
->maxContentWidth(config('panel.filament.display-width', 'screen-2xl'))
->login(Login::class)
//->login(Login::class)
->passwordReset()
->userMenuItems([
'profile' => MenuItem::make()

View File

@ -38,7 +38,7 @@ class AppPanelProvider extends PanelProvider
->maxContentWidth(config('panel.filament.display-width', 'screen-2xl'))
->navigation(false)
->profile(EditProfile::class, false)
->login(Login::class)
//->login(Login::class)
->passwordReset()
->userMenuItems([
MenuItem::make()

View File

@ -43,7 +43,7 @@ class ServerPanelProvider extends PanelProvider
->favicon(config('app.favicon', '/pelican.ico'))
->topNavigation(config('panel.filament.top-navigation', false))
->maxContentWidth(config('panel.filament.display-width', 'screen-2xl'))
->login(Login::class)
//->login(Login::class)
->passwordReset()
->userMenuItems([
'profile' => MenuItem::make()

View File

@ -8,13 +8,13 @@
"ext-mbstring": "*",
"ext-pdo": "*",
"ext-zip": "*",
"abdelhamiderrahmouni/filament-monaco-editor": "^0.2.5",
"aws/aws-sdk-php": "^3.342",
"calebporzio/sushi": "^2.5",
"chillerlan/php-qrcode": "^5.0.2",
"dedoc/scramble": "^0.12.10",
"doctrine/dbal": "~3.6.0",
"filament/filament": "^3.3",
"filament/filament": "4.0",
"filament/upgrade": "^4.0@alpha",
"guzzlehttp/guzzle": "^7.9",
"laravel/framework": "^12.10",
"laravel/helpers": "^1.7",
@ -43,7 +43,6 @@
"symfony/mailgun-mailer": "^7.2",
"symfony/postmark-mailer": "^7.2",
"symfony/yaml": "^7.2",
"webbingbrasil/filament-copyactions": "^3.0.1",
"webmozart/assert": "~1.11.0"
},
"require-dev": {
@ -99,6 +98,6 @@
"php": "8.2"
}
},
"minimum-stability": "stable",
"minimum-stability": "alpha",
"prefer-stable": true
}

1072
composer.lock generated

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More