mirror of
https://github.com/pelican-dev/panel.git
synced 2025-05-29 16:44:44 +02:00
wip
This commit is contained in:
parent
fccd7e5e75
commit
61da930909
@ -21,7 +21,7 @@ enum BackupStatus: string implements HasColor, HasIcon, HasLabel
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getColor(): string
|
public function getColor(): ?string
|
||||||
{
|
{
|
||||||
return match ($this) {
|
return match ($this) {
|
||||||
self::InProgress => 'primary',
|
self::InProgress => 'primary',
|
||||||
|
@ -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) {
|
if ($hex) {
|
||||||
return match ($this) {
|
return match ($this) {
|
||||||
|
@ -27,7 +27,7 @@ enum ServerState: string implements HasColor, HasIcon, HasLabel
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getColor(): string
|
public function getColor(): ?string
|
||||||
{
|
{
|
||||||
return match ($this) {
|
return match ($this) {
|
||||||
self::Normal => 'primary',
|
self::Normal => 'primary',
|
||||||
|
@ -39,7 +39,7 @@ abstract class CaptchaProvider
|
|||||||
|
|
||||||
abstract public function getId(): string;
|
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>
|
* @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
|
public function getSettingsForm(): array
|
||||||
{
|
{
|
||||||
|
@ -18,7 +18,7 @@ class TurnstileProvider extends CaptchaProvider
|
|||||||
return 'turnstile';
|
return 'turnstile';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getComponent(): Component
|
public function getComponent(): \Filament\Schemas\Components\Component
|
||||||
{
|
{
|
||||||
return TurnstileCaptcha::make('turnstile');
|
return TurnstileCaptcha::make('turnstile');
|
||||||
}
|
}
|
||||||
@ -34,7 +34,7 @@ class TurnstileProvider extends CaptchaProvider
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Component[]
|
* @return \Filament\Schemas\Components\Component[]
|
||||||
*/
|
*/
|
||||||
public function getSettingsForm(): array
|
public function getSettingsForm(): array
|
||||||
{
|
{
|
||||||
|
@ -31,7 +31,7 @@ final class DiscordProvider extends OAuthProvider
|
|||||||
public function getSetupSteps(): array
|
public function getSetupSteps(): array
|
||||||
{
|
{
|
||||||
return array_merge([
|
return array_merge([
|
||||||
Step::make('Register new Discord OAuth App')
|
\Filament\Schemas\Components\Wizard\Step::make('Register new Discord OAuth App')
|
||||||
->schema([
|
->schema([
|
||||||
Placeholder::make('')
|
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>'))),
|
->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>'))),
|
||||||
|
@ -25,7 +25,7 @@ final class GithubProvider extends OAuthProvider
|
|||||||
public function getSetupSteps(): array
|
public function getSetupSteps(): array
|
||||||
{
|
{
|
||||||
return array_merge([
|
return array_merge([
|
||||||
Step::make('Register new Github OAuth App')
|
\Filament\Schemas\Components\Wizard\Step::make('Register new Github OAuth App')
|
||||||
->schema([
|
->schema([
|
||||||
Placeholder::make('')
|
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>'))),
|
->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('')
|
Placeholder::make('')
|
||||||
->content(new HtmlString('<p>When you filled all fields click on <b>Register application</b>.</p>')),
|
->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([
|
->schema([
|
||||||
Placeholder::make('')
|
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>')),
|
->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>')),
|
||||||
|
@ -45,7 +45,7 @@ final class GitlabProvider extends OAuthProvider
|
|||||||
public function getSetupSteps(): array
|
public function getSetupSteps(): array
|
||||||
{
|
{
|
||||||
return array_merge([
|
return array_merge([
|
||||||
Step::make('Register new Gitlab OAuth App')
|
\Filament\Schemas\Components\Wizard\Step::make('Register new Gitlab OAuth App')
|
||||||
->schema([
|
->schema([
|
||||||
Placeholder::make('')
|
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.'))),
|
->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.'))),
|
||||||
|
@ -67,7 +67,7 @@ abstract class OAuthProvider
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Component[]
|
* @return \Filament\Schemas\Components\Component[]
|
||||||
*/
|
*/
|
||||||
public function getSettingsForm(): array
|
public function getSettingsForm(): array
|
||||||
{
|
{
|
||||||
@ -96,12 +96,12 @@ abstract class OAuthProvider
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Step[]
|
* @return \Filament\Schemas\Components\Wizard\Step[]
|
||||||
*/
|
*/
|
||||||
public function getSetupSteps(): array
|
public function getSetupSteps(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
Step::make('OAuth Config')
|
\Filament\Schemas\Components\Wizard\Step::make('OAuth Config')
|
||||||
->columns(4)
|
->columns(4)
|
||||||
->schema($this->getSettingsForm()),
|
->schema($this->getSettingsForm()),
|
||||||
];
|
];
|
||||||
|
@ -56,7 +56,7 @@ final class SteamProvider extends OAuthProvider
|
|||||||
public function getSetupSteps(): array
|
public function getSetupSteps(): array
|
||||||
{
|
{
|
||||||
return array_merge([
|
return array_merge([
|
||||||
Step::make('Create API Key')
|
\Filament\Schemas\Components\Wizard\Step::make('Create API Key')
|
||||||
->schema([
|
->schema([
|
||||||
Placeholder::make('')
|
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.'))),
|
->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.'))),
|
||||||
|
@ -7,7 +7,7 @@ use Filament\Pages\Dashboard as BaseDashboard;
|
|||||||
|
|
||||||
class Dashboard extends BaseDashboard
|
class Dashboard extends BaseDashboard
|
||||||
{
|
{
|
||||||
protected static ?string $navigationIcon = 'tabler-layout-dashboard';
|
protected static string | \BackedEnum | null $navigationIcon = 'tabler-layout-dashboard';
|
||||||
|
|
||||||
private SoftwareVersionService $softwareVersionService;
|
private SoftwareVersionService $softwareVersionService;
|
||||||
|
|
||||||
@ -16,7 +16,7 @@ class Dashboard extends BaseDashboard
|
|||||||
$this->softwareVersionService = $softwareVersionService;
|
$this->softwareVersionService = $softwareVersionService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getColumns(): int
|
public function getColumns(): int|array
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -13,9 +13,9 @@ use Spatie\Health\ResultStores\ResultStore;
|
|||||||
|
|
||||||
class Health extends Page
|
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> */
|
/** @var array<string, string> */
|
||||||
protected $listeners = [
|
protected $listeners = [
|
||||||
|
@ -10,28 +10,27 @@ use App\Notifications\MailTested;
|
|||||||
use App\Traits\EnvironmentWriterTrait;
|
use App\Traits\EnvironmentWriterTrait;
|
||||||
use Exception;
|
use Exception;
|
||||||
use Filament\Actions\Action;
|
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\Hidden;
|
||||||
use Filament\Forms\Components\Section;
|
|
||||||
use Filament\Forms\Components\Select;
|
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\TagsInput;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Components\Toggle;
|
use Filament\Forms\Components\Toggle;
|
||||||
use Filament\Forms\Components\ToggleButtons;
|
use Filament\Forms\Components\ToggleButtons;
|
||||||
use Filament\Forms\Concerns\InteractsWithForms;
|
use Filament\Forms\Concerns\InteractsWithForms;
|
||||||
use Filament\Forms\Contracts\HasForms;
|
use Filament\Forms\Contracts\HasForms;
|
||||||
use Filament\Forms\Form;
|
|
||||||
use Filament\Forms\Get;
|
|
||||||
use Filament\Forms\Set;
|
|
||||||
use Filament\Notifications\Notification;
|
use Filament\Notifications\Notification;
|
||||||
use Filament\Pages\Concerns\InteractsWithHeaderActions;
|
use Filament\Pages\Concerns\InteractsWithHeaderActions;
|
||||||
use Filament\Pages\Page;
|
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\Http\Client\Factory;
|
||||||
use Illuminate\Support\Facades\Artisan;
|
use Illuminate\Support\Facades\Artisan;
|
||||||
use Illuminate\Support\Facades\Notification as MailNotification;
|
use Illuminate\Support\Facades\Notification as MailNotification;
|
||||||
@ -46,11 +45,10 @@ class Settings extends Page implements HasForms
|
|||||||
use InteractsWithForms;
|
use InteractsWithForms;
|
||||||
use InteractsWithHeaderActions;
|
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 ?array $data = [];
|
||||||
|
|
||||||
public function mount(): void
|
public function mount(): void
|
||||||
@ -110,7 +108,9 @@ class Settings extends Page implements HasForms
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return Component[] */
|
/** @return Component[]
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
private function generalSettings(): array
|
private function generalSettings(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
@ -204,14 +204,14 @@ class Settings extends Page implements HasForms
|
|||||||
->placeholder(trans('admin/setting.general.trusted_proxies_help'))
|
->placeholder(trans('admin/setting.general.trusted_proxies_help'))
|
||||||
->default(env('TRUSTED_PROXIES', implode(',', config('trustedproxy.proxies'))))
|
->default(env('TRUSTED_PROXIES', implode(',', config('trustedproxy.proxies'))))
|
||||||
->hintActions([
|
->hintActions([
|
||||||
FormAction::make('clear')
|
Action::make('clear')
|
||||||
->label(trans('admin/setting.general.clear'))
|
->label(trans('admin/setting.general.clear'))
|
||||||
->color('danger')
|
->color('danger')
|
||||||
->icon('tabler-trash')
|
->icon('tabler-trash')
|
||||||
->requiresConfirmation()
|
->requiresConfirmation()
|
||||||
->authorize(fn () => auth()->user()->can('update settings'))
|
->authorize(fn () => auth()->user()->can('update settings'))
|
||||||
->action(fn (Set $set) => $set('TRUSTED_PROXIES', [])),
|
->action(fn (Set $set) => $set('TRUSTED_PROXIES', [])),
|
||||||
FormAction::make('cloudflare')
|
Action::make('cloudflare')
|
||||||
->label(trans('admin/setting.general.set_to_cf'))
|
->label(trans('admin/setting.general.set_to_cf'))
|
||||||
->icon('tabler-brand-cloudflare')
|
->icon('tabler-brand-cloudflare')
|
||||||
->authorize(fn () => auth()->user()->can('update settings'))
|
->authorize(fn () => auth()->user()->can('update settings'))
|
||||||
@ -240,7 +240,7 @@ class Settings extends Page implements HasForms
|
|||||||
Select::make('FILAMENT_WIDTH')
|
Select::make('FILAMENT_WIDTH')
|
||||||
->label(trans('admin/setting.general.display_width'))
|
->label(trans('admin/setting.general.display_width'))
|
||||||
->native(false)
|
->native(false)
|
||||||
->options(MaxWidth::class)
|
->options(Width::class)
|
||||||
->selectablePlaceholder(false)
|
->selectablePlaceholder(false)
|
||||||
->default(env('FILAMENT_WIDTH', config('panel.filament.display-width'))),
|
->default(env('FILAMENT_WIDTH', config('panel.filament.display-width'))),
|
||||||
];
|
];
|
||||||
@ -248,6 +248,8 @@ class Settings extends Page implements HasForms
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Component[]
|
* @return Component[]
|
||||||
|
*
|
||||||
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
private function captchaSettings(): array
|
private function captchaSettings(): array
|
||||||
{
|
{
|
||||||
@ -268,14 +270,14 @@ class Settings extends Page implements HasForms
|
|||||||
->live()
|
->live()
|
||||||
->default(env("CAPTCHA_{$id}_ENABLED")),
|
->default(env("CAPTCHA_{$id}_ENABLED")),
|
||||||
Actions::make([
|
Actions::make([
|
||||||
FormAction::make("disable_captcha_$id")
|
Action::make("disable_captcha_$id")
|
||||||
->visible(fn (Get $get) => $get("CAPTCHA_{$id}_ENABLED"))
|
->visible(fn (Get $get) => $get("CAPTCHA_{$id}_ENABLED"))
|
||||||
->label(trans('admin/setting.captcha.disable'))
|
->label(trans('admin/setting.captcha.disable'))
|
||||||
->color('danger')
|
->color('danger')
|
||||||
->action(function (Set $set) use ($id) {
|
->action(function (Set $set) use ($id) {
|
||||||
$set("CAPTCHA_{$id}_ENABLED", false);
|
$set("CAPTCHA_{$id}_ENABLED", false);
|
||||||
}),
|
}),
|
||||||
FormAction::make("enable_captcha_$id")
|
Action::make("enable_captcha_$id")
|
||||||
->visible(fn (Get $get) => !$get("CAPTCHA_{$id}_ENABLED"))
|
->visible(fn (Get $get) => !$get("CAPTCHA_{$id}_ENABLED"))
|
||||||
->label(trans('admin/setting.captcha.enable'))
|
->label(trans('admin/setting.captcha.enable'))
|
||||||
->color('success')
|
->color('success')
|
||||||
@ -298,6 +300,8 @@ class Settings extends Page implements HasForms
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Component[]
|
* @return Component[]
|
||||||
|
*
|
||||||
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
private function mailSettings(): array
|
private function mailSettings(): array
|
||||||
{
|
{
|
||||||
@ -317,7 +321,7 @@ class Settings extends Page implements HasForms
|
|||||||
->live()
|
->live()
|
||||||
->default(env('MAIL_MAILER', config('mail.default')))
|
->default(env('MAIL_MAILER', config('mail.default')))
|
||||||
->hintAction(
|
->hintAction(
|
||||||
FormAction::make('test')
|
Action::make('test')
|
||||||
->label(trans('admin/setting.mail.test_mail'))
|
->label(trans('admin/setting.mail.test_mail'))
|
||||||
->icon('tabler-send')
|
->icon('tabler-send')
|
||||||
->hidden(fn (Get $get) => $get('MAIL_MAILER') === 'log')
|
->hidden(fn (Get $get) => $get('MAIL_MAILER') === 'log')
|
||||||
@ -444,6 +448,8 @@ class Settings extends Page implements HasForms
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Component[]
|
* @return Component[]
|
||||||
|
*
|
||||||
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
private function backupSettings(): array
|
private function backupSettings(): array
|
||||||
{
|
{
|
||||||
@ -517,6 +523,8 @@ class Settings extends Page implements HasForms
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Component[]
|
* @return Component[]
|
||||||
|
*
|
||||||
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
private function oauthSettings(): array
|
private function oauthSettings(): array
|
||||||
{
|
{
|
||||||
@ -537,14 +545,14 @@ class Settings extends Page implements HasForms
|
|||||||
->live()
|
->live()
|
||||||
->default(env("OAUTH_{$id}_ENABLED")),
|
->default(env("OAUTH_{$id}_ENABLED")),
|
||||||
Actions::make([
|
Actions::make([
|
||||||
FormAction::make("disable_oauth_$id")
|
Action::make("disable_oauth_$id")
|
||||||
->visible(fn (Get $get) => $get("OAUTH_{$id}_ENABLED"))
|
->visible(fn (Get $get) => $get("OAUTH_{$id}_ENABLED"))
|
||||||
->label(trans('admin/setting.oauth.disable'))
|
->label(trans('admin/setting.oauth.disable'))
|
||||||
->color('danger')
|
->color('danger')
|
||||||
->action(function (Set $set) use ($id) {
|
->action(function (Set $set) use ($id) {
|
||||||
$set("OAUTH_{$id}_ENABLED", false);
|
$set("OAUTH_{$id}_ENABLED", false);
|
||||||
}),
|
}),
|
||||||
FormAction::make("enable_oauth_$id")
|
Action::make("enable_oauth_$id")
|
||||||
->visible(fn (Get $get) => !$get("OAUTH_{$id}_ENABLED"))
|
->visible(fn (Get $get) => !$get("OAUTH_{$id}_ENABLED"))
|
||||||
->label(trans('admin/setting.oauth.enable'))
|
->label(trans('admin/setting.oauth.enable'))
|
||||||
->color('success')
|
->color('success')
|
||||||
@ -574,6 +582,8 @@ class Settings extends Page implements HasForms
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Component[]
|
* @return Component[]
|
||||||
|
*
|
||||||
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
private function miscSettings(): array
|
private function miscSettings(): array
|
||||||
{
|
{
|
||||||
|
@ -6,14 +6,14 @@ use App\Filament\Admin\Resources\ApiKeyResource\Pages;
|
|||||||
use App\Filament\Admin\Resources\UserResource\Pages\EditUser;
|
use App\Filament\Admin\Resources\UserResource\Pages\EditUser;
|
||||||
use App\Filament\Components\Tables\Columns\DateTimeColumn;
|
use App\Filament\Components\Tables\Columns\DateTimeColumn;
|
||||||
use App\Models\ApiKey;
|
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\TagsInput;
|
||||||
use Filament\Forms\Components\Textarea;
|
use Filament\Forms\Components\Textarea;
|
||||||
use Filament\Forms\Components\ToggleButtons;
|
use Filament\Forms\Components\ToggleButtons;
|
||||||
use Filament\Forms\Form;
|
|
||||||
use Filament\Resources\Resource;
|
use Filament\Resources\Resource;
|
||||||
use Filament\Tables\Actions\CreateAction;
|
use Filament\Schemas\Components\Fieldset;
|
||||||
use Filament\Tables\Actions\DeleteAction;
|
use Filament\Schemas\Components\Form;
|
||||||
use Filament\Tables\Columns\TextColumn;
|
use Filament\Tables\Columns\TextColumn;
|
||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
@ -22,7 +22,7 @@ class ApiKeyResource extends Resource
|
|||||||
{
|
{
|
||||||
protected static ?string $model = ApiKey::class;
|
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
|
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([
|
->schema([
|
||||||
Fieldset::make('Permissions')
|
Fieldset::make('Permissions')
|
||||||
->columns([
|
->columns([
|
||||||
|
@ -4,16 +4,16 @@ namespace App\Filament\Admin\Resources;
|
|||||||
|
|
||||||
use App\Filament\Admin\Resources\DatabaseHostResource\Pages;
|
use App\Filament\Admin\Resources\DatabaseHostResource\Pages;
|
||||||
use App\Models\DatabaseHost;
|
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\Select;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Form;
|
|
||||||
use Filament\Forms\Set;
|
|
||||||
use Filament\Resources\Resource;
|
use Filament\Resources\Resource;
|
||||||
use Filament\Tables\Actions\CreateAction;
|
use Filament\Schemas\Components\Form;
|
||||||
use Filament\Tables\Actions\DeleteBulkAction;
|
use Filament\Schemas\Components\Section;
|
||||||
use Filament\Tables\Actions\EditAction;
|
use Filament\Schemas\Components\Utilities\Set;
|
||||||
use Filament\Tables\Actions\ViewAction;
|
|
||||||
use Filament\Tables\Columns\TextColumn;
|
use Filament\Tables\Columns\TextColumn;
|
||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
|
|
||||||
@ -21,7 +21,7 @@ class DatabaseHostResource extends Resource
|
|||||||
{
|
{
|
||||||
protected static ?string $model = DatabaseHost::class;
|
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';
|
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([
|
->schema([
|
||||||
Section::make()
|
Section::make()
|
||||||
->columns([
|
->columns([
|
||||||
|
@ -4,24 +4,25 @@ namespace App\Filament\Admin\Resources\DatabaseHostResource\Pages;
|
|||||||
|
|
||||||
use App\Filament\Admin\Resources\DatabaseHostResource;
|
use App\Filament\Admin\Resources\DatabaseHostResource;
|
||||||
use App\Services\Databases\Hosts\HostCreationService;
|
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\Hidden;
|
||||||
use Filament\Forms\Components\Placeholder;
|
use Filament\Forms\Components\Placeholder;
|
||||||
use Filament\Forms\Components\Select;
|
use Filament\Forms\Components\Select;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Components\Toggle;
|
use Filament\Forms\Components\Toggle;
|
||||||
use Filament\Forms\Components\Wizard\Step;
|
use Filament\Schemas\Components\Utilities\Get;
|
||||||
use Filament\Forms\Get;
|
use Filament\Schemas\Components\Utilities\Set;
|
||||||
use Filament\Forms\Set;
|
|
||||||
use Filament\Notifications\Notification;
|
use Filament\Notifications\Notification;
|
||||||
use Filament\Resources\Pages\CreateRecord;
|
use Filament\Resources\Pages\CreateRecord;
|
||||||
use Filament\Resources\Pages\CreateRecord\Concerns\HasWizard;
|
use Filament\Resources\Pages\CreateRecord\Concerns\HasWizard;
|
||||||
|
use Filament\Schemas\Components\Wizard\Step;
|
||||||
use Filament\Support\Exceptions\Halt;
|
use Filament\Support\Exceptions\Halt;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Support\HtmlString;
|
use Illuminate\Support\HtmlString;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
use PDOException;
|
use PDOException;
|
||||||
use Webbingbrasil\FilamentCopyActions\Forms\Actions\CopyAction;
|
use Throwable;
|
||||||
|
|
||||||
class CreateDatabaseHost extends CreateRecord
|
class CreateDatabaseHost extends CreateRecord
|
||||||
{
|
{
|
||||||
@ -38,7 +39,9 @@ class CreateDatabaseHost extends CreateRecord
|
|||||||
$this->service = $service;
|
$this->service = $service;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return Step[] */
|
/** @return Step[]
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
public function getSteps(): array
|
public function getSteps(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
@ -87,14 +90,14 @@ class CreateDatabaseHost extends CreateRecord
|
|||||||
->default(fn (Get $get) => "CREATE USER '{$get('username')}'@'{$get('panel_ip')}' IDENTIFIED BY '{$get('password')}';")
|
->default(fn (Get $get) => "CREATE USER '{$get('username')}'@'{$get('panel_ip')}' IDENTIFIED BY '{$get('password')}';")
|
||||||
->disabled()
|
->disabled()
|
||||||
->dehydrated(false)
|
->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(),
|
->columnSpanFull(),
|
||||||
TextInput::make('assign_permissions')
|
TextInput::make('assign_permissions')
|
||||||
->label(trans('admin/databasehost.setup.command_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;")
|
->default(fn (Get $get) => "GRANT ALL PRIVILEGES ON *.* TO '{$get('username')}'@'{$get('panel_ip')}' WITH GRANT OPTION;")
|
||||||
->disabled()
|
->disabled()
|
||||||
->dehydrated(false)
|
->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(),
|
->columnSpanFull(),
|
||||||
Placeholder::make('')
|
Placeholder::make('')
|
||||||
->content(new HtmlString(trans('admin/databasehost.setup.cli_exit')))
|
->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
|
protected function handleRecordCreation(array $data): Model
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
@ -12,6 +12,7 @@ use Filament\Resources\Pages\EditRecord;
|
|||||||
use Filament\Support\Exceptions\Halt;
|
use Filament\Support\Exceptions\Halt;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use PDOException;
|
use PDOException;
|
||||||
|
use Throwable;
|
||||||
|
|
||||||
class EditDatabaseHost extends EditRecord
|
class EditDatabaseHost extends EditRecord
|
||||||
{
|
{
|
||||||
@ -50,6 +51,10 @@ class EditDatabaseHost extends EditRecord
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws Halt
|
||||||
|
* @throws Throwable
|
||||||
|
*/
|
||||||
protected function handleRecordUpdate(Model $record, array $data): Model
|
protected function handleRecordUpdate(Model $record, array $data): Model
|
||||||
{
|
{
|
||||||
if (!$record instanceof DatabaseHost) {
|
if (!$record instanceof DatabaseHost) {
|
||||||
|
@ -6,7 +6,7 @@ use App\Filament\Components\Forms\Actions\RotateDatabasePasswordAction;
|
|||||||
use App\Filament\Components\Tables\Columns\DateTimeColumn;
|
use App\Filament\Components\Tables\Columns\DateTimeColumn;
|
||||||
use App\Models\Database;
|
use App\Models\Database;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Form;
|
use Filament\Schemas\Components\Form;
|
||||||
use Filament\Resources\RelationManagers\RelationManager;
|
use Filament\Resources\RelationManagers\RelationManager;
|
||||||
use Filament\Tables\Actions\DeleteAction;
|
use Filament\Tables\Actions\DeleteAction;
|
||||||
use Filament\Tables\Actions\ViewAction;
|
use Filament\Tables\Actions\ViewAction;
|
||||||
@ -17,9 +17,9 @@ class DatabasesRelationManager extends RelationManager
|
|||||||
{
|
{
|
||||||
protected static string $relationship = 'databases';
|
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([
|
->schema([
|
||||||
TextInput::make('database')
|
TextInput::make('database')
|
||||||
->columnSpanFull(),
|
->columnSpanFull(),
|
||||||
@ -70,9 +70,9 @@ class DatabasesRelationManager extends RelationManager
|
|||||||
->label(trans('admin/databasehost.table.created_at')),
|
->label(trans('admin/databasehost.table.created_at')),
|
||||||
])
|
])
|
||||||
->actions([
|
->actions([
|
||||||
DeleteAction::make()
|
\Filament\Actions\DeleteAction::make()
|
||||||
->authorize(fn (Database $database) => auth()->user()->can('delete database', $database)),
|
->authorize(fn (Database $database) => auth()->user()->can('delete database', $database)),
|
||||||
ViewAction::make()
|
\Filament\Actions\ViewAction::make()
|
||||||
->color('primary')
|
->color('primary')
|
||||||
->hidden(fn () => !auth()->user()->can('viewList database')),
|
->hidden(fn () => !auth()->user()->can('viewList database')),
|
||||||
]);
|
]);
|
||||||
|
@ -10,7 +10,7 @@ class EggResource extends Resource
|
|||||||
{
|
{
|
||||||
protected static ?string $model = Egg::class;
|
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';
|
protected static ?string $recordTitleAttribute = 'name';
|
||||||
|
|
||||||
|
@ -2,29 +2,29 @@
|
|||||||
|
|
||||||
namespace App\Filament\Admin\Resources\EggResource\Pages;
|
namespace App\Filament\Admin\Resources\EggResource\Pages;
|
||||||
|
|
||||||
use AbdelhamidErrahmouni\FilamentMonacoEditor\MonacoEditor;
|
|
||||||
use App\Filament\Admin\Resources\EggResource;
|
use App\Filament\Admin\Resources\EggResource;
|
||||||
use App\Filament\Components\Forms\Fields\CopyFrom;
|
use App\Filament\Components\Forms\Fields\CopyFrom;
|
||||||
use App\Models\EggVariable;
|
use App\Models\EggVariable;
|
||||||
use Filament\Forms\Components\Checkbox;
|
use Filament\Forms\Components\Checkbox;
|
||||||
use Filament\Forms\Components\Fieldset;
|
|
||||||
use Filament\Forms\Components\Hidden;
|
use Filament\Forms\Components\Hidden;
|
||||||
use Filament\Forms\Components\KeyValue;
|
use Filament\Forms\Components\KeyValue;
|
||||||
use Filament\Forms\Components\Repeater;
|
use Filament\Forms\Components\Repeater;
|
||||||
use Filament\Forms\Components\Select;
|
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\TagsInput;
|
||||||
use Filament\Forms\Components\Textarea;
|
use Filament\Forms\Components\Textarea;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Components\Toggle;
|
use Filament\Forms\Components\Toggle;
|
||||||
use Filament\Forms\Form;
|
|
||||||
use Filament\Forms\Get;
|
|
||||||
use Filament\Forms\Set;
|
|
||||||
use Filament\Resources\Pages\CreateRecord;
|
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\Database\Eloquent\Model;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
use Illuminate\Validation\Rules\Unique;
|
use Illuminate\Validation\Rules\Unique;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
|
|
||||||
class CreateEgg extends CreateRecord
|
class CreateEgg extends CreateRecord
|
||||||
{
|
{
|
||||||
@ -44,9 +44,9 @@ class CreateEgg extends CreateRecord
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function form(Form $form): Form
|
public function form(Form|Schema $schema): Schema
|
||||||
{
|
{
|
||||||
return $form
|
return $schema
|
||||||
->schema([
|
->schema([
|
||||||
Tabs::make()->tabs([
|
Tabs::make()->tabs([
|
||||||
Tab::make(trans('admin/egg.tabs.configuration'))
|
Tab::make(trans('admin/egg.tabs.configuration'))
|
||||||
@ -248,13 +248,13 @@ class CreateEgg extends CreateRecord
|
|||||||
->default('bash')
|
->default('bash')
|
||||||
->options(['bash', 'ash', '/bin/bash'])
|
->options(['bash', 'ash', '/bin/bash'])
|
||||||
->required(),
|
->required(),
|
||||||
MonacoEditor::make('script_install')
|
// MonacoEditor::make('script_install')
|
||||||
->label(trans('admin/egg.script_install'))
|
// ->label(trans('admin/egg.script_install'))
|
||||||
->columnSpanFull()
|
// ->columnSpanFull()
|
||||||
->fontSize('16px')
|
// ->fontSize('16px')
|
||||||
->language('shell')
|
// ->language('shell')
|
||||||
->lazy()
|
// ->lazy()
|
||||||
->view('filament.plugins.monaco-editor'),
|
// ->view('filament.plugins.monaco-editor'),
|
||||||
]),
|
]),
|
||||||
|
|
||||||
])->columnSpanFull()->persistTabInQueryString(),
|
])->columnSpanFull()->persistTabInQueryString(),
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
namespace App\Filament\Admin\Resources\EggResource\Pages;
|
namespace App\Filament\Admin\Resources\EggResource\Pages;
|
||||||
|
|
||||||
use AbdelhamidErrahmouni\FilamentMonacoEditor\MonacoEditor;
|
|
||||||
use App\Filament\Admin\Resources\EggResource;
|
use App\Filament\Admin\Resources\EggResource;
|
||||||
use App\Filament\Admin\Resources\EggResource\RelationManagers\ServersRelationManager;
|
use App\Filament\Admin\Resources\EggResource\RelationManagers\ServersRelationManager;
|
||||||
use App\Filament\Components\Actions\ExportEggAction;
|
use App\Filament\Components\Actions\ExportEggAction;
|
||||||
@ -12,30 +11,31 @@ use App\Models\Egg;
|
|||||||
use App\Models\EggVariable;
|
use App\Models\EggVariable;
|
||||||
use Filament\Actions\DeleteAction;
|
use Filament\Actions\DeleteAction;
|
||||||
use Filament\Forms\Components\Checkbox;
|
use Filament\Forms\Components\Checkbox;
|
||||||
use Filament\Forms\Components\Fieldset;
|
use Filament\Schemas\Components\Fieldset;
|
||||||
use Filament\Forms\Components\Hidden;
|
use Filament\Forms\Components\Hidden;
|
||||||
use Filament\Forms\Components\KeyValue;
|
use Filament\Forms\Components\KeyValue;
|
||||||
use Filament\Forms\Components\Repeater;
|
use Filament\Forms\Components\Repeater;
|
||||||
use Filament\Forms\Components\Select;
|
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\TagsInput;
|
||||||
use Filament\Forms\Components\Textarea;
|
use Filament\Forms\Components\Textarea;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Components\Toggle;
|
use Filament\Forms\Components\Toggle;
|
||||||
use Filament\Forms\Form;
|
use Filament\Schemas\Components\Form;
|
||||||
use Filament\Forms\Get;
|
use Filament\Schemas\Components\Tabs;
|
||||||
use Filament\Forms\Set;
|
use Filament\Schemas\Components\Tabs\Tab;
|
||||||
|
use Filament\Schemas\Components\Utilities\Get;
|
||||||
|
use Filament\Schemas\Components\Utilities\Set;
|
||||||
use Filament\Resources\Pages\EditRecord;
|
use Filament\Resources\Pages\EditRecord;
|
||||||
use Illuminate\Validation\Rules\Unique;
|
use Illuminate\Validation\Rules\Unique;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
|
|
||||||
class EditEgg extends EditRecord
|
class EditEgg extends EditRecord
|
||||||
{
|
{
|
||||||
protected static string $resource = EggResource::class;
|
protected static string $resource = EggResource::class;
|
||||||
|
|
||||||
public function form(Form $form): Form
|
public function form(Form|Schema $schema): Schema
|
||||||
{
|
{
|
||||||
return $form
|
return $schema
|
||||||
->schema([
|
->schema([
|
||||||
Tabs::make()->tabs([
|
Tabs::make()->tabs([
|
||||||
Tab::make(trans('admin/egg.tabs.configuration'))
|
Tab::make(trans('admin/egg.tabs.configuration'))
|
||||||
@ -169,7 +169,7 @@ class EditEgg extends EditRecord
|
|||||||
->maxLength(255)
|
->maxLength(255)
|
||||||
->columnSpanFull()
|
->columnSpanFull()
|
||||||
->afterStateUpdated(fn (Set $set, $state) => $set('env_variable', str($state)->trim()->snake()->upper()->toString()))
|
->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([
|
->validationMessages([
|
||||||
'unique' => trans('admin/egg.error_unique'),
|
'unique' => trans('admin/egg.error_unique'),
|
||||||
])
|
])
|
||||||
@ -182,7 +182,7 @@ class EditEgg extends EditRecord
|
|||||||
->suffix('}}')
|
->suffix('}}')
|
||||||
->hintIcon('tabler-code')
|
->hintIcon('tabler-code')
|
||||||
->hintIconTooltip(fn ($state) => "{{{$state}}}")
|
->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'))
|
->rules(EggVariable::getRulesForField('env_variable'))
|
||||||
->validationMessages([
|
->validationMessages([
|
||||||
'unique' => trans('admin/egg.error_unique'),
|
'unique' => trans('admin/egg.error_unique'),
|
||||||
@ -239,13 +239,13 @@ class EditEgg extends EditRecord
|
|||||||
->selectablePlaceholder(false)
|
->selectablePlaceholder(false)
|
||||||
->options(['bash', 'ash', '/bin/bash'])
|
->options(['bash', 'ash', '/bin/bash'])
|
||||||
->required(),
|
->required(),
|
||||||
MonacoEditor::make('script_install')
|
// TODO MonacoEditor::make('script_install')
|
||||||
->label(trans('admin/egg.script_install'))
|
// ->label(trans('admin/egg.script_install'))
|
||||||
->placeholderText('')
|
// ->placeholderText('')
|
||||||
->columnSpanFull()
|
// ->columnSpanFull()
|
||||||
->fontSize('16px')
|
// ->fontSize('16px')
|
||||||
->language('shell')
|
// ->language('shell')
|
||||||
->view('filament.plugins.monaco-editor'),
|
// ->view('filament.plugins.monaco-editor'),
|
||||||
]),
|
]),
|
||||||
])->columnSpanFull()->persistTabInQueryString(),
|
])->columnSpanFull()->persistTabInQueryString(),
|
||||||
]);
|
]);
|
||||||
|
@ -10,12 +10,12 @@ use App\Filament\Components\Tables\Actions\UpdateEggAction;
|
|||||||
use App\Filament\Components\Tables\Actions\UpdateEggBulkAction;
|
use App\Filament\Components\Tables\Actions\UpdateEggBulkAction;
|
||||||
use App\Filament\Components\Tables\Filters\TagsFilter;
|
use App\Filament\Components\Tables\Filters\TagsFilter;
|
||||||
use App\Models\Egg;
|
use App\Models\Egg;
|
||||||
|
use Filament\Actions\CreateAction;
|
||||||
use Filament\Actions\CreateAction as CreateHeaderAction;
|
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\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\Columns\TextColumn;
|
||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
use Illuminate\Database\Eloquent\Collection;
|
use Illuminate\Database\Eloquent\Collection;
|
||||||
|
@ -4,18 +4,18 @@ namespace App\Filament\Admin\Resources;
|
|||||||
|
|
||||||
use App\Filament\Admin\Resources\MountResource\Pages;
|
use App\Filament\Admin\Resources\MountResource\Pages;
|
||||||
use App\Models\Mount;
|
use App\Models\Mount;
|
||||||
use Filament\Forms\Components\Group;
|
use Filament\Actions\CreateAction;
|
||||||
use Filament\Forms\Components\Section;
|
use Filament\Actions\DeleteBulkAction;
|
||||||
|
use Filament\Actions\EditAction;
|
||||||
|
use Filament\Actions\ViewAction;
|
||||||
use Filament\Forms\Components\Select;
|
use Filament\Forms\Components\Select;
|
||||||
use Filament\Forms\Components\Textarea;
|
use Filament\Forms\Components\Textarea;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Components\ToggleButtons;
|
use Filament\Forms\Components\ToggleButtons;
|
||||||
use Filament\Forms\Form;
|
|
||||||
use Filament\Resources\Resource;
|
use Filament\Resources\Resource;
|
||||||
use Filament\Tables\Actions\CreateAction;
|
use Filament\Schemas\Components\Form;
|
||||||
use Filament\Tables\Actions\DeleteBulkAction;
|
use Filament\Schemas\Components\Group;
|
||||||
use Filament\Tables\Actions\EditAction;
|
use Filament\Schemas\Components\Section;
|
||||||
use Filament\Tables\Actions\ViewAction;
|
|
||||||
use Filament\Tables\Columns\TextColumn;
|
use Filament\Tables\Columns\TextColumn;
|
||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
|
|
||||||
@ -23,7 +23,7 @@ class MountResource extends Resource
|
|||||||
{
|
{
|
||||||
protected static ?string $model = Mount::class;
|
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';
|
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([
|
->schema([
|
||||||
Section::make()->schema([
|
Section::make()->schema([
|
||||||
TextInput::make('name')
|
TextInput::make('name')
|
||||||
|
@ -11,7 +11,7 @@ class NodeResource extends Resource
|
|||||||
{
|
{
|
||||||
protected static ?string $model = Node::class;
|
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';
|
protected static ?string $recordTitleAttribute = 'name';
|
||||||
|
|
||||||
|
@ -4,19 +4,20 @@ namespace App\Filament\Admin\Resources\NodeResource\Pages;
|
|||||||
|
|
||||||
use App\Filament\Admin\Resources\NodeResource;
|
use App\Filament\Admin\Resources\NodeResource;
|
||||||
use App\Models\Node;
|
use App\Models\Node;
|
||||||
use Filament\Forms;
|
use Filament\Actions\Action;
|
||||||
use Filament\Forms\Components\Actions\Action;
|
use Filament\Schemas\Components\Form;
|
||||||
use Filament\Forms\Components\Grid;
|
use Filament\Schemas\Components\Grid;
|
||||||
use Filament\Forms\Components\TagsInput;
|
use Filament\Forms\Components\TagsInput;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Components\ToggleButtons;
|
use Filament\Forms\Components\ToggleButtons;
|
||||||
use Filament\Forms\Components\Wizard;
|
use Filament\Schemas\Components\Wizard;
|
||||||
use Filament\Forms\Components\Wizard\Step;
|
use Filament\Schemas\Components\Wizard\Step;
|
||||||
use Filament\Forms\Get;
|
use Filament\Schemas\Components\Utilities\Get;
|
||||||
use Filament\Forms\Set;
|
use Filament\Schemas\Components\Utilities\Set;
|
||||||
use Filament\Resources\Pages\CreateRecord;
|
use Filament\Resources\Pages\CreateRecord;
|
||||||
use Illuminate\Support\Facades\Blade;
|
use Illuminate\Support\Facades\Blade;
|
||||||
use Illuminate\Support\HtmlString;
|
use Illuminate\Support\HtmlString;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
|
|
||||||
class CreateNode extends CreateRecord
|
class CreateNode extends CreateRecord
|
||||||
{
|
{
|
||||||
@ -24,9 +25,9 @@ class CreateNode extends CreateRecord
|
|||||||
|
|
||||||
protected static bool $canCreateAnother = false;
|
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([
|
->schema([
|
||||||
Wizard::make([
|
Wizard::make([
|
||||||
Step::make('basic')
|
Step::make('basic')
|
||||||
|
@ -9,27 +9,28 @@ use App\Services\Helpers\SoftwareVersionService;
|
|||||||
use App\Services\Nodes\NodeAutoDeployService;
|
use App\Services\Nodes\NodeAutoDeployService;
|
||||||
use App\Services\Nodes\NodeUpdateService;
|
use App\Services\Nodes\NodeUpdateService;
|
||||||
use Exception;
|
use Exception;
|
||||||
use Filament\Actions;
|
use Filament\Actions\Action;
|
||||||
use Filament\Forms;
|
use Filament\Actions\DeleteAction;
|
||||||
use Filament\Forms\Components\Actions as FormActions;
|
use Filament\Schemas\Components\Actions;
|
||||||
use Filament\Forms\Components\Fieldset;
|
use Filament\Schemas\Components\Fieldset;
|
||||||
use Filament\Forms\Components\Grid;
|
|
||||||
use Filament\Forms\Components\Placeholder;
|
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\TagsInput;
|
||||||
use Filament\Forms\Components\Textarea;
|
use Filament\Forms\Components\Textarea;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Components\ToggleButtons;
|
use Filament\Forms\Components\ToggleButtons;
|
||||||
use Filament\Forms\Components\View;
|
use Filament\Schemas\Components\Form;
|
||||||
use Filament\Forms\Get;
|
use Filament\Schemas\Components\Grid;
|
||||||
use Filament\Forms\Set;
|
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\Notifications\Notification;
|
||||||
use Filament\Resources\Pages\EditRecord;
|
use Filament\Resources\Pages\EditRecord;
|
||||||
|
use Filament\Schemas\Components\View;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
use Filament\Support\Enums\Alignment;
|
use Filament\Support\Enums\Alignment;
|
||||||
use Illuminate\Http\Client\ConnectionException;
|
use Illuminate\Http\Client\ConnectionException;
|
||||||
use Illuminate\Support\HtmlString;
|
use Illuminate\Support\HtmlString;
|
||||||
use Webbingbrasil\FilamentCopyActions\Forms\Actions\CopyAction;
|
|
||||||
|
|
||||||
class EditNode extends EditRecord
|
class EditNode extends EditRecord
|
||||||
{
|
{
|
||||||
@ -45,9 +46,9 @@ class EditNode extends EditRecord
|
|||||||
$this->nodeUpdateService = $nodeUpdateService;
|
$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')
|
Tabs::make('Tabs')
|
||||||
->columns([
|
->columns([
|
||||||
'default' => 2,
|
'default' => 2,
|
||||||
@ -255,7 +256,7 @@ class EditNode extends EditRecord
|
|||||||
'lg' => 2,
|
'lg' => 2,
|
||||||
])
|
])
|
||||||
->label(trans('admin/node.node_uuid'))
|
->label(trans('admin/node.node_uuid'))
|
||||||
->hintAction(fn () => request()->isSecure() ? CopyAction::make() : null)
|
// TODO ->hintAction(fn () => request()->isSecure() ? CopyAction::make() : null)
|
||||||
->disabled(),
|
->disabled(),
|
||||||
TagsInput::make('tags')
|
TagsInput::make('tags')
|
||||||
->label(trans('admin/node.tags'))
|
->label(trans('admin/node.tags'))
|
||||||
@ -508,13 +509,13 @@ class EditNode extends EditRecord
|
|||||||
->label('/etc/pelican/config.yml')
|
->label('/etc/pelican/config.yml')
|
||||||
->disabled()
|
->disabled()
|
||||||
->rows(19)
|
->rows(19)
|
||||||
->hintAction(fn () => request()->isSecure() ? CopyAction::make() : null)
|
//TODO ->hintAction(fn () => request()->isSecure() ? CopyAction::make() : null)
|
||||||
->columnSpanFull(),
|
->columnSpanFull(),
|
||||||
Grid::make()
|
Grid::make()
|
||||||
->columns()
|
->columns()
|
||||||
->schema([
|
->schema([
|
||||||
FormActions::make([
|
Actions::make([
|
||||||
FormActions\Action::make('autoDeploy')
|
Action::make('autoDeploy')
|
||||||
->label(trans('admin/node.auto_deploy'))
|
->label(trans('admin/node.auto_deploy'))
|
||||||
->color('primary')
|
->color('primary')
|
||||||
->modalHeading(trans('admin/node.auto_deploy'))
|
->modalHeading(trans('admin/node.auto_deploy'))
|
||||||
@ -522,7 +523,7 @@ class EditNode extends EditRecord
|
|||||||
->modalSubmitAction(false)
|
->modalSubmitAction(false)
|
||||||
->modalCancelAction(false)
|
->modalCancelAction(false)
|
||||||
->modalFooterActionsAlignment(Alignment::Center)
|
->modalFooterActionsAlignment(Alignment::Center)
|
||||||
->form([
|
->schema([
|
||||||
ToggleButtons::make('docker')
|
ToggleButtons::make('docker')
|
||||||
->label('Type')
|
->label('Type')
|
||||||
->live()
|
->live()
|
||||||
@ -543,15 +544,15 @@ class EditNode extends EditRecord
|
|||||||
->label(trans('admin/node.auto_command'))
|
->label(trans('admin/node.auto_command'))
|
||||||
->readOnly()
|
->readOnly()
|
||||||
->autosize()
|
->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')))),
|
->formatStateUsing(fn (NodeAutoDeployService $service, Node $node, Set $set, Get $get) => $set('generatedToken', $service->handle(request(), $node, $get('docker')))),
|
||||||
])
|
])
|
||||||
->mountUsing(function (Forms\Form $form) {
|
->mountUsing(function (Form|Schema $schema) {
|
||||||
$form->fill();
|
$schema->fill();
|
||||||
}),
|
}),
|
||||||
])->fullWidth(),
|
])->fullWidth(),
|
||||||
FormActions::make([
|
Actions::make([
|
||||||
FormActions\Action::make('resetKey')
|
Action::make('resetKey')
|
||||||
->label(trans('admin/node.reset_token'))
|
->label(trans('admin/node.reset_token'))
|
||||||
->color('danger')
|
->color('danger')
|
||||||
->requiresConfirmation()
|
->requiresConfirmation()
|
||||||
@ -607,7 +608,7 @@ class EditNode extends EditRecord
|
|||||||
protected function getHeaderActions(): array
|
protected function getHeaderActions(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
Actions\DeleteAction::make()
|
DeleteAction::make()
|
||||||
->disabled(fn (Node $node) => $node->servers()->count() > 0)
|
->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')),
|
->label(fn (Node $node) => $node->servers()->count() > 0 ? trans('admin/node.node_has_servers') : trans('filament-actions::delete.single.label')),
|
||||||
$this->getSaveFormAction()->formId('form'),
|
$this->getSaveFormAction()->formId('form'),
|
||||||
|
@ -6,10 +6,9 @@ use App\Filament\Admin\Resources\NodeResource;
|
|||||||
use App\Filament\Components\Tables\Columns\NodeHealthColumn;
|
use App\Filament\Components\Tables\Columns\NodeHealthColumn;
|
||||||
use App\Filament\Components\Tables\Filters\TagsFilter;
|
use App\Filament\Components\Tables\Filters\TagsFilter;
|
||||||
use App\Models\Node;
|
use App\Models\Node;
|
||||||
use Filament\Actions;
|
|
||||||
use Filament\Resources\Pages\ListRecords;
|
use Filament\Resources\Pages\ListRecords;
|
||||||
use Filament\Tables\Actions\CreateAction;
|
use Filament\Actions\CreateAction;
|
||||||
use Filament\Tables\Actions\EditAction;
|
use Filament\Actions\EditAction;
|
||||||
use Filament\Tables\Columns\IconColumn;
|
use Filament\Tables\Columns\IconColumn;
|
||||||
use Filament\Tables\Columns\TextColumn;
|
use Filament\Tables\Columns\TextColumn;
|
||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
@ -76,7 +75,7 @@ class ListNodes extends ListRecords
|
|||||||
protected function getHeaderActions(): array
|
protected function getHeaderActions(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
Actions\CreateAction::make()
|
CreateAction::make()
|
||||||
->hidden(fn () => Node::count() <= 0),
|
->hidden(fn () => Node::count() <= 0),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@ -6,15 +6,15 @@ use App\Filament\Admin\Resources\ServerResource\Pages\CreateServer;
|
|||||||
use App\Models\Allocation;
|
use App\Models\Allocation;
|
||||||
use App\Models\Node;
|
use App\Models\Node;
|
||||||
use App\Services\Allocations\AssignmentService;
|
use App\Services\Allocations\AssignmentService;
|
||||||
|
use Filament\Actions\Action;
|
||||||
use Filament\Forms\Components\Select;
|
use Filament\Forms\Components\Select;
|
||||||
use Filament\Forms\Components\TagsInput;
|
use Filament\Forms\Components\TagsInput;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Get;
|
use Filament\Schemas\Components\Utilities\Get;
|
||||||
use Filament\Forms\Set;
|
use Filament\Schemas\Components\Utilities\Set;
|
||||||
use Filament\Resources\RelationManagers\RelationManager;
|
use Filament\Resources\RelationManagers\RelationManager;
|
||||||
use Filament\Tables;
|
use Filament\Actions\BulkActionGroup;
|
||||||
use Filament\Tables\Actions\BulkActionGroup;
|
use Filament\Actions\DeleteBulkAction;
|
||||||
use Filament\Tables\Actions\DeleteBulkAction;
|
|
||||||
use Filament\Tables\Columns\SelectColumn;
|
use Filament\Tables\Columns\SelectColumn;
|
||||||
use Filament\Tables\Columns\TextColumn;
|
use Filament\Tables\Columns\TextColumn;
|
||||||
use Filament\Tables\Columns\TextInputColumn;
|
use Filament\Tables\Columns\TextInputColumn;
|
||||||
@ -27,7 +27,7 @@ class AllocationsRelationManager extends RelationManager
|
|||||||
{
|
{
|
||||||
protected static string $relationship = 'allocations';
|
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
|
public function setTitle(): string
|
||||||
{
|
{
|
||||||
@ -72,9 +72,9 @@ class AllocationsRelationManager extends RelationManager
|
|||||||
->label(trans('admin/node.table.ip')),
|
->label(trans('admin/node.table.ip')),
|
||||||
])
|
])
|
||||||
->headerActions([
|
->headerActions([
|
||||||
Tables\Actions\Action::make('create new allocation')
|
Action::make('create new allocation')
|
||||||
->label(trans('admin/node.create_allocation'))
|
->label(trans('admin/node.create_allocation'))
|
||||||
->form(fn () => [
|
->schema(fn () => [
|
||||||
Select::make('allocation_ip')
|
Select::make('allocation_ip')
|
||||||
->options(collect($this->getOwnerRecord()->ipAddresses())->mapWithKeys(fn (string $ip) => [$ip => $ip]))
|
->options(collect($this->getOwnerRecord()->ipAddresses())->mapWithKeys(fn (string $ip) => [$ip => $ip]))
|
||||||
->label(trans('admin/node.ip_address'))
|
->label(trans('admin/node.ip_address'))
|
||||||
|
@ -12,7 +12,7 @@ class NodesRelationManager extends RelationManager
|
|||||||
{
|
{
|
||||||
protected static string $relationship = 'servers';
|
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
|
public function setTitle(): string
|
||||||
{
|
{
|
||||||
|
@ -10,9 +10,9 @@ use Illuminate\Support\Number;
|
|||||||
|
|
||||||
class NodeCpuChart extends ChartWidget
|
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;
|
public Node $node;
|
||||||
|
|
||||||
|
@ -10,9 +10,9 @@ use Illuminate\Support\Number;
|
|||||||
|
|
||||||
class NodeMemoryChart extends ChartWidget
|
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;
|
public Node $node;
|
||||||
|
|
||||||
|
@ -7,13 +7,13 @@ use Filament\Widgets\ChartWidget;
|
|||||||
|
|
||||||
class NodeStorageChart extends 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;
|
public Node $node;
|
||||||
|
|
||||||
protected static ?array $options = [
|
protected ?array $options = [
|
||||||
'scales' => [
|
'scales' => [
|
||||||
'x' => [
|
'x' => [
|
||||||
'grid' => [
|
'grid' => [
|
||||||
|
@ -4,20 +4,19 @@ namespace App\Filament\Admin\Resources;
|
|||||||
|
|
||||||
use App\Filament\Admin\Resources\RoleResource\Pages;
|
use App\Filament\Admin\Resources\RoleResource\Pages;
|
||||||
use App\Models\Role;
|
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\CheckboxList;
|
||||||
use Filament\Forms\Components\Component;
|
|
||||||
use Filament\Forms\Components\Fieldset;
|
|
||||||
use Filament\Forms\Components\Placeholder;
|
use Filament\Forms\Components\Placeholder;
|
||||||
use Filament\Forms\Components\Section;
|
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Form;
|
|
||||||
use Filament\Forms\Get;
|
|
||||||
use Filament\Resources\Resource;
|
use Filament\Resources\Resource;
|
||||||
use Filament\Tables\Actions\CreateAction;
|
use Filament\Schemas\Components\Component;
|
||||||
use Filament\Tables\Actions\DeleteBulkAction;
|
use Filament\Schemas\Components\Fieldset;
|
||||||
use Filament\Tables\Actions\EditAction;
|
use Filament\Schemas\Components\Form;
|
||||||
use Filament\Tables\Actions\ViewAction;
|
use Filament\Schemas\Components\Section;
|
||||||
|
use Filament\Schemas\Components\Utilities\Get;
|
||||||
use Filament\Tables\Columns\TextColumn;
|
use Filament\Tables\Columns\TextColumn;
|
||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
@ -27,7 +26,7 @@ class RoleResource extends Resource
|
|||||||
{
|
{
|
||||||
protected static ?string $model = Role::class;
|
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';
|
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 = [];
|
$permissionSections = [];
|
||||||
|
|
||||||
@ -105,7 +104,7 @@ class RoleResource extends Resource
|
|||||||
$permissionSections[] = self::makeSection($model, $options);
|
$permissionSections[] = self::makeSection($model, $options);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $form
|
return $schema
|
||||||
->columns(1)
|
->columns(1)
|
||||||
->schema([
|
->schema([
|
||||||
TextInput::make('name')
|
TextInput::make('name')
|
||||||
|
@ -10,7 +10,7 @@ class ServerResource extends Resource
|
|||||||
{
|
{
|
||||||
protected static ?string $model = Server::class;
|
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';
|
protected static ?string $recordTitleAttribute = 'name';
|
||||||
|
|
||||||
|
@ -13,29 +13,28 @@ use App\Services\Servers\ServerCreationService;
|
|||||||
use App\Services\Users\UserCreationService;
|
use App\Services\Users\UserCreationService;
|
||||||
use Closure;
|
use Closure;
|
||||||
use Exception;
|
use Exception;
|
||||||
use Filament\Forms;
|
use Filament\Actions\Action;
|
||||||
use Filament\Forms\Components\Actions\Action;
|
|
||||||
use Filament\Forms\Components\CheckboxList;
|
use Filament\Forms\Components\CheckboxList;
|
||||||
use Filament\Forms\Components\Component;
|
use Filament\Schemas\Components\Component;
|
||||||
use Filament\Forms\Components\Fieldset;
|
use Filament\Schemas\Components\Fieldset;
|
||||||
use Filament\Forms\Components\Grid;
|
|
||||||
use Filament\Forms\Components\Hidden;
|
use Filament\Forms\Components\Hidden;
|
||||||
use Filament\Forms\Components\KeyValue;
|
use Filament\Forms\Components\KeyValue;
|
||||||
use Filament\Forms\Components\Placeholder;
|
use Filament\Forms\Components\Placeholder;
|
||||||
use Filament\Forms\Components\Repeater;
|
use Filament\Forms\Components\Repeater;
|
||||||
use Filament\Forms\Components\Section;
|
|
||||||
use Filament\Forms\Components\Select;
|
use Filament\Forms\Components\Select;
|
||||||
use Filament\Forms\Components\TagsInput;
|
use Filament\Forms\Components\TagsInput;
|
||||||
use Filament\Forms\Components\Textarea;
|
use Filament\Forms\Components\Textarea;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Components\ToggleButtons;
|
use Filament\Forms\Components\ToggleButtons;
|
||||||
use Filament\Forms\Components\Wizard;
|
use Filament\Schemas\Components\Form;
|
||||||
use Filament\Forms\Components\Wizard\Step;
|
use Filament\Schemas\Components\Grid;
|
||||||
use Filament\Forms\Form;
|
use Filament\Schemas\Components\Section;
|
||||||
use Filament\Forms\Get;
|
use Filament\Schemas\Components\Utilities\Get;
|
||||||
use Filament\Forms\Set;
|
use Filament\Schemas\Components\Utilities\Set;
|
||||||
use Filament\Notifications\Notification;
|
use Filament\Notifications\Notification;
|
||||||
use Filament\Resources\Pages\CreateRecord;
|
use Filament\Resources\Pages\CreateRecord;
|
||||||
|
use Filament\Schemas\Components\Wizard;
|
||||||
|
use Filament\Schemas\Components\Wizard\Step;
|
||||||
use Filament\Support\Exceptions\Halt;
|
use Filament\Support\Exceptions\Halt;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
@ -43,6 +42,7 @@ use Illuminate\Support\Facades\Blade;
|
|||||||
use Illuminate\Support\Facades\Validator;
|
use Illuminate\Support\Facades\Validator;
|
||||||
use Illuminate\Support\HtmlString;
|
use Illuminate\Support\HtmlString;
|
||||||
use LogicException;
|
use LogicException;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
|
|
||||||
class CreateServer extends CreateRecord
|
class CreateServer extends CreateRecord
|
||||||
{
|
{
|
||||||
@ -59,9 +59,9 @@ class CreateServer extends CreateRecord
|
|||||||
$this->serverCreationService = $serverCreationService;
|
$this->serverCreationService = $serverCreationService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function form(Form $form): Form
|
public function form(Form|Schema $schema): Schema
|
||||||
{
|
{
|
||||||
return $form
|
return $schema
|
||||||
->schema([
|
->schema([
|
||||||
Wizard::make([
|
Wizard::make([
|
||||||
Step::make('Information')
|
Step::make('Information')
|
||||||
@ -77,7 +77,7 @@ class CreateServer extends CreateRecord
|
|||||||
TextInput::make('name')
|
TextInput::make('name')
|
||||||
->prefixIcon('tabler-server')
|
->prefixIcon('tabler-server')
|
||||||
->label(trans('admin/server.name'))
|
->label(trans('admin/server.name'))
|
||||||
->suffixAction(Forms\Components\Actions\Action::make('random')
|
->suffixAction(Action::make('random')
|
||||||
->icon('tabler-dice-' . random_int(1, 6))
|
->icon('tabler-dice-' . random_int(1, 6))
|
||||||
->action(function (Set $set, Get $get) {
|
->action(function (Set $set, Get $get) {
|
||||||
$egg = Egg::find($get('egg_id'));
|
$egg = Egg::find($get('egg_id'));
|
||||||
|
@ -29,28 +29,26 @@ use App\Services\Servers\ToggleInstallService;
|
|||||||
use App\Services\Servers\TransferServerService;
|
use App\Services\Servers\TransferServerService;
|
||||||
use Closure;
|
use Closure;
|
||||||
use Exception;
|
use Exception;
|
||||||
use Filament\Actions;
|
use Filament\Actions\Action;
|
||||||
use Filament\Forms;
|
|
||||||
use Filament\Forms\Components\Actions as FormActions;
|
|
||||||
use Filament\Forms\Components\Actions\Action;
|
|
||||||
use Filament\Forms\Components\CheckboxList;
|
use Filament\Forms\Components\CheckboxList;
|
||||||
use Filament\Forms\Components\Component;
|
use Filament\Schemas\Components\Actions;
|
||||||
use Filament\Forms\Components\Fieldset;
|
use Filament\Schemas\Components\Component;
|
||||||
use Filament\Forms\Components\Grid;
|
use Filament\Schemas\Components\Fieldset;
|
||||||
use Filament\Forms\Components\Hidden;
|
use Filament\Forms\Components\Hidden;
|
||||||
use Filament\Forms\Components\KeyValue;
|
use Filament\Forms\Components\KeyValue;
|
||||||
use Filament\Forms\Components\Repeater;
|
use Filament\Forms\Components\Repeater;
|
||||||
use Filament\Forms\Components\Select;
|
use Filament\Forms\Components\Select;
|
||||||
use Filament\Forms\Components\Tabs;
|
use Filament\Schemas\Components\Grid;
|
||||||
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\TagsInput;
|
||||||
use Filament\Forms\Components\Textarea;
|
use Filament\Forms\Components\Textarea;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Components\Toggle;
|
use Filament\Forms\Components\Toggle;
|
||||||
use Filament\Forms\Components\ToggleButtons;
|
use Filament\Forms\Components\ToggleButtons;
|
||||||
use Filament\Forms\Form;
|
use Filament\Schemas\Components\Form;
|
||||||
use Filament\Forms\Get;
|
use Filament\Schemas\Components\Utilities\Get;
|
||||||
use Filament\Forms\Set;
|
use Filament\Schemas\Components\Utilities\Set;
|
||||||
use Filament\Notifications\Notification;
|
use Filament\Notifications\Notification;
|
||||||
use Filament\Resources\Pages\EditRecord;
|
use Filament\Resources\Pages\EditRecord;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
@ -59,7 +57,7 @@ use Illuminate\Support\Arr;
|
|||||||
use Illuminate\Support\Facades\Validator;
|
use Illuminate\Support\Facades\Validator;
|
||||||
use Illuminate\Support\HtmlString;
|
use Illuminate\Support\HtmlString;
|
||||||
use LogicException;
|
use LogicException;
|
||||||
use Webbingbrasil\FilamentCopyActions\Forms\Actions\CopyAction;
|
use Filament\Schemas\Schema;
|
||||||
|
|
||||||
class EditServer extends EditRecord
|
class EditServer extends EditRecord
|
||||||
{
|
{
|
||||||
@ -72,9 +70,9 @@ class EditServer extends EditRecord
|
|||||||
$this->daemonServerRepository = $daemonServerRepository;
|
$this->daemonServerRepository = $daemonServerRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function form(Form $form): Form
|
public function form(Form|Schema $schema): Schema
|
||||||
{
|
{
|
||||||
return $form
|
return $schema
|
||||||
->schema([
|
->schema([
|
||||||
Tabs::make('Tabs')
|
Tabs::make('Tabs')
|
||||||
->persistTabInQueryString()
|
->persistTabInQueryString()
|
||||||
@ -145,7 +143,7 @@ class EditServer extends EditRecord
|
|||||||
|
|
||||||
TextInput::make('uuid')
|
TextInput::make('uuid')
|
||||||
->label(trans('admin/server.uuid'))
|
->label(trans('admin/server.uuid'))
|
||||||
->suffixAction(fn () => request()->isSecure() ? CopyAction::make() : null)
|
//TODO ->suffixAction(fn () => request()->isSecure() ? CopyAction::make() : null)
|
||||||
->columnSpan([
|
->columnSpan([
|
||||||
'default' => 2,
|
'default' => 2,
|
||||||
'sm' => 1,
|
'sm' => 1,
|
||||||
@ -156,7 +154,7 @@ class EditServer extends EditRecord
|
|||||||
->dehydrated(false),
|
->dehydrated(false),
|
||||||
TextInput::make('uuid_short')
|
TextInput::make('uuid_short')
|
||||||
->label(trans('admin/server.short_uuid'))
|
->label(trans('admin/server.short_uuid'))
|
||||||
->suffixAction(fn () => request()->isSecure() ? CopyAction::make() : null)
|
//TODO ->suffixAction(fn () => request()->isSecure() ? CopyAction::make() : null)
|
||||||
->columnSpan([
|
->columnSpan([
|
||||||
'default' => 2,
|
'default' => 2,
|
||||||
'sm' => 1,
|
'sm' => 1,
|
||||||
@ -525,7 +523,7 @@ class EditServer extends EditRecord
|
|||||||
// Use redirect instead of fillForm to prevent server variables from duplicating
|
// Use redirect instead of fillForm to prevent server variables from duplicating
|
||||||
$this->redirect($this->getUrl(['record' => $server, 'tab' => '-egg-tab']), true);
|
$this->redirect($this->getUrl(['record' => $server, 'tab' => '-egg-tab']), true);
|
||||||
})
|
})
|
||||||
->form(fn (Server $server) => [
|
->schema(fn (Server $server) => [
|
||||||
Select::make('egg_id')
|
Select::make('egg_id')
|
||||||
->label(trans('admin/server.new_egg'))
|
->label(trans('admin/server.new_egg'))
|
||||||
->prefixIcon('tabler-egg')
|
->prefixIcon('tabler-egg')
|
||||||
@ -570,7 +568,7 @@ class EditServer extends EditRecord
|
|||||||
->hintAction(PreviewStartupAction::make('preview')),
|
->hintAction(PreviewStartupAction::make('preview')),
|
||||||
|
|
||||||
Textarea::make('defaultStartup')
|
Textarea::make('defaultStartup')
|
||||||
->hintAction(fn () => request()->isSecure() ? CopyAction::make() : null)
|
//TODO ->hintAction(fn () => request()->isSecure() ? CopyAction::make() : null)
|
||||||
->label(trans('admin/server.default_startup'))
|
->label(trans('admin/server.default_startup'))
|
||||||
->disabled()
|
->disabled()
|
||||||
->autosize()
|
->autosize()
|
||||||
@ -675,13 +673,13 @@ class EditServer extends EditRecord
|
|||||||
->label(trans('admin/databasehost.table.host'))
|
->label(trans('admin/databasehost.table.host'))
|
||||||
->disabled()
|
->disabled()
|
||||||
->formatStateUsing(fn ($record) => $record->address())
|
->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),
|
->columnSpan(1),
|
||||||
TextInput::make('database')
|
TextInput::make('database')
|
||||||
->label(trans('admin/databasehost.table.database'))
|
->label(trans('admin/databasehost.table.database'))
|
||||||
->disabled()
|
->disabled()
|
||||||
->formatStateUsing(fn ($record) => $record->database)
|
->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(
|
->hintAction(
|
||||||
Action::make('Delete')
|
Action::make('Delete')
|
||||||
->label(trans('filament-actions::delete.single.modal.actions.delete.label'))
|
->label(trans('filament-actions::delete.single.modal.actions.delete.label'))
|
||||||
@ -702,7 +700,7 @@ class EditServer extends EditRecord
|
|||||||
->label(trans('admin/databasehost.table.username'))
|
->label(trans('admin/databasehost.table.username'))
|
||||||
->disabled()
|
->disabled()
|
||||||
->formatStateUsing(fn ($record) => $record->username)
|
->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),
|
->columnSpan(1),
|
||||||
TextInput::make('password')
|
TextInput::make('password')
|
||||||
->label(trans('admin/databasehost.table.password'))
|
->label(trans('admin/databasehost.table.password'))
|
||||||
@ -711,7 +709,7 @@ class EditServer extends EditRecord
|
|||||||
->revealable()
|
->revealable()
|
||||||
->columnSpan(1)
|
->columnSpan(1)
|
||||||
->hintAction(RotateDatabasePasswordAction::make())
|
->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),
|
->formatStateUsing(fn (Database $database) => $database->password),
|
||||||
TextInput::make('remote')
|
TextInput::make('remote')
|
||||||
->disabled()
|
->disabled()
|
||||||
@ -729,14 +727,14 @@ class EditServer extends EditRecord
|
|||||||
->revealable()
|
->revealable()
|
||||||
->label(trans('admin/databasehost.table.connection_string'))
|
->label(trans('admin/databasehost.table.connection_string'))
|
||||||
->columnSpan(2)
|
->columnSpan(2)
|
||||||
->formatStateUsing(fn (Database $record) => $record->jdbc)
|
->formatStateUsing(fn (Database $record) => $record->jdbc),
|
||||||
->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null),
|
//TODO ->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null),
|
||||||
])
|
])
|
||||||
->relationship('databases')
|
->relationship('databases')
|
||||||
->deletable(false)
|
->deletable(false)
|
||||||
->addable(false)
|
->addable(false)
|
||||||
->columnSpan(4),
|
->columnSpan(4),
|
||||||
FormActions::make([
|
Actions::make([
|
||||||
Action::make('createDatabase')
|
Action::make('createDatabase')
|
||||||
->authorize(fn () => auth()->user()->can('create database'))
|
->authorize(fn () => auth()->user()->can('create database'))
|
||||||
->disabled(fn () => DatabaseHost::query()->count() < 1)
|
->disabled(fn () => DatabaseHost::query()->count() < 1)
|
||||||
@ -764,7 +762,7 @@ class EditServer extends EditRecord
|
|||||||
}
|
}
|
||||||
$this->fillForm();
|
$this->fillForm();
|
||||||
})
|
})
|
||||||
->form([
|
->schema([
|
||||||
Select::make('database_host_id')
|
Select::make('database_host_id')
|
||||||
->label(trans('admin/databasehost.table.name'))
|
->label(trans('admin/databasehost.table.name'))
|
||||||
->required()
|
->required()
|
||||||
@ -804,7 +802,7 @@ class EditServer extends EditRecord
|
|||||||
Grid::make()
|
Grid::make()
|
||||||
->columnSpan(3)
|
->columnSpan(3)
|
||||||
->schema([
|
->schema([
|
||||||
FormActions::make([
|
Actions::make([
|
||||||
Action::make('toggleInstall')
|
Action::make('toggleInstall')
|
||||||
->label(trans('admin/server.toggle_install'))
|
->label(trans('admin/server.toggle_install'))
|
||||||
->disabled(fn (Server $server) => $server->isSuspended())
|
->disabled(fn (Server $server) => $server->isSuspended())
|
||||||
@ -856,7 +854,7 @@ class EditServer extends EditRecord
|
|||||||
Grid::make()
|
Grid::make()
|
||||||
->columnSpan(3)
|
->columnSpan(3)
|
||||||
->schema([
|
->schema([
|
||||||
FormActions::make([
|
Actions::make([
|
||||||
Action::make('toggleSuspend')
|
Action::make('toggleSuspend')
|
||||||
->label(trans('admin/server.suspend'))
|
->label(trans('admin/server.suspend'))
|
||||||
->color('warning')
|
->color('warning')
|
||||||
@ -912,12 +910,12 @@ class EditServer extends EditRecord
|
|||||||
Grid::make()
|
Grid::make()
|
||||||
->columnSpan(3)
|
->columnSpan(3)
|
||||||
->schema([
|
->schema([
|
||||||
FormActions::make([
|
Actions::make([
|
||||||
Action::make('transfer')
|
Action::make('transfer')
|
||||||
->label(trans('admin/server.transfer'))
|
->label(trans('admin/server.transfer'))
|
||||||
->disabled(fn (Server $server) => Node::count() <= 1 || $server->isInConflictState())
|
->disabled(fn (Server $server) => Node::count() <= 1 || $server->isInConflictState())
|
||||||
->modalheading(trans('admin/server.transfer'))
|
->modalheading(trans('admin/server.transfer'))
|
||||||
->form($this->transferServer())
|
->schema($this->transferServer())
|
||||||
->action(function (TransferServerService $transfer, Server $server, $data) {
|
->action(function (TransferServerService $transfer, Server $server, $data) {
|
||||||
try {
|
try {
|
||||||
$transfer->handle($server, Arr::get($data, 'node_id'), Arr::get($data, 'allocation_id'), Arr::get($data, 'allocation_additional', []));
|
$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()
|
Grid::make()
|
||||||
->columnSpan(3)
|
->columnSpan(3)
|
||||||
->schema([
|
->schema([
|
||||||
FormActions::make([
|
Actions::make([
|
||||||
Action::make('reinstall')
|
Action::make('reinstall')
|
||||||
->label(trans('admin/server.reinstall'))
|
->label(trans('admin/server.reinstall'))
|
||||||
->color('danger')
|
->color('danger')
|
||||||
@ -977,7 +975,9 @@ class EditServer extends EditRecord
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return Component[] */
|
/** @return Component[]
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
protected function transferServer(): array
|
protected function transferServer(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
@ -1016,7 +1016,7 @@ class EditServer extends EditRecord
|
|||||||
$canForceDelete = cache()->get("servers.$server->uuid.canForceDelete", false);
|
$canForceDelete = cache()->get("servers.$server->uuid.canForceDelete", false);
|
||||||
|
|
||||||
return [
|
return [
|
||||||
Actions\Action::make('Delete')
|
Action::make('Delete')
|
||||||
->color('danger')
|
->color('danger')
|
||||||
->label(trans('filament-actions::delete.single.label'))
|
->label(trans('filament-actions::delete.single.label'))
|
||||||
->modalHeading(trans('filament-actions::delete.single.modal.heading', ['label' => $this->getRecordTitle()]))
|
->modalHeading(trans('filament-actions::delete.single.modal.heading', ['label' => $this->getRecordTitle()]))
|
||||||
@ -1030,7 +1030,7 @@ class EditServer extends EditRecord
|
|||||||
} catch (ConnectionException) {
|
} catch (ConnectionException) {
|
||||||
cache()->put("servers.$server->uuid.canForceDelete", true, now()->addMinutes(5));
|
cache()->put("servers.$server->uuid.canForceDelete", true, now()->addMinutes(5));
|
||||||
|
|
||||||
Notification::make()
|
return Notification::make()
|
||||||
->title(trans('admin/server.notifications.error_server_delete'))
|
->title(trans('admin/server.notifications.error_server_delete'))
|
||||||
->body(trans('admin/server.notifications.error_server_delete_body'))
|
->body(trans('admin/server.notifications.error_server_delete_body'))
|
||||||
->color('warning')
|
->color('warning')
|
||||||
@ -1041,7 +1041,7 @@ class EditServer extends EditRecord
|
|||||||
})
|
})
|
||||||
->hidden(fn () => $canForceDelete)
|
->hidden(fn () => $canForceDelete)
|
||||||
->authorize(fn (Server $server) => auth()->user()->can('delete server', $server)),
|
->authorize(fn (Server $server) => auth()->user()->can('delete server', $server)),
|
||||||
Actions\Action::make('ForceDelete')
|
Action::make('ForceDelete')
|
||||||
->color('danger')
|
->color('danger')
|
||||||
->label(trans('filament-actions::force-delete.single.label'))
|
->label(trans('filament-actions::force-delete.single.label'))
|
||||||
->modalHeading(trans('filament-actions::force-delete.single.modal.heading', ['label' => $this->getRecordTitle()]))
|
->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'));
|
return redirect(ListServers::getUrl(panel: 'admin'));
|
||||||
} catch (ConnectionException) {
|
} catch (ConnectionException) {
|
||||||
cache()->forget("servers.$server->uuid.canForceDelete");
|
return cache()->forget("servers.$server->uuid.canForceDelete");
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
->visible(fn () => $canForceDelete)
|
->visible(fn () => $canForceDelete)
|
||||||
->authorize(fn (Server $server) => auth()->user()->can('delete server', $server)),
|
->authorize(fn (Server $server) => auth()->user()->can('delete server', $server)),
|
||||||
Actions\Action::make('console')
|
Action::make('console')
|
||||||
->label(trans('admin/server.console'))
|
->label(trans('admin/server.console'))
|
||||||
->icon('tabler-terminal')
|
->icon('tabler-terminal')
|
||||||
->url(fn (Server $server) => Console::getUrl(panel: 'server', tenant: $server)),
|
->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);
|
$containsRuleIn = array_first($serverVariable->variable->rules, fn ($value) => str($value)->startsWith('in:'), false);
|
||||||
|
|
||||||
|
@ -7,9 +7,9 @@ use App\Filament\Admin\Resources\ServerResource;
|
|||||||
use App\Models\Server;
|
use App\Models\Server;
|
||||||
use Filament\Actions;
|
use Filament\Actions;
|
||||||
use Filament\Resources\Pages\ListRecords;
|
use Filament\Resources\Pages\ListRecords;
|
||||||
use Filament\Tables\Actions\Action;
|
use Filament\Actions\Action;
|
||||||
use Filament\Tables\Actions\CreateAction;
|
use Filament\Actions\CreateAction;
|
||||||
use Filament\Tables\Actions\EditAction;
|
use Filament\Actions\EditAction;
|
||||||
use Filament\Tables\Columns\SelectColumn;
|
use Filament\Tables\Columns\SelectColumn;
|
||||||
use Filament\Tables\Columns\TextColumn;
|
use Filament\Tables\Columns\TextColumn;
|
||||||
use Filament\Tables\Grouping\Group;
|
use Filament\Tables\Grouping\Group;
|
||||||
|
@ -9,14 +9,14 @@ use App\Services\Allocations\AssignmentService;
|
|||||||
use Filament\Forms\Components\Select;
|
use Filament\Forms\Components\Select;
|
||||||
use Filament\Forms\Components\TagsInput;
|
use Filament\Forms\Components\TagsInput;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Get;
|
use Filament\Schemas\Components\Utilities\Get;
|
||||||
use Filament\Forms\Set;
|
use Filament\Schemas\Components\Utilities\Set;
|
||||||
use Filament\Resources\RelationManagers\RelationManager;
|
use Filament\Resources\RelationManagers\RelationManager;
|
||||||
use Filament\Support\Exceptions\Halt;
|
use Filament\Support\Exceptions\Halt;
|
||||||
use Filament\Tables\Actions\Action;
|
use Filament\Actions\Action;
|
||||||
use Filament\Tables\Actions\AssociateAction;
|
use Filament\Actions\AssociateAction;
|
||||||
use Filament\Tables\Actions\CreateAction;
|
use Filament\Actions\CreateAction;
|
||||||
use Filament\Tables\Actions\DissociateBulkAction;
|
use Filament\Actions\DissociateBulkAction;
|
||||||
use Filament\Tables\Columns\IconColumn;
|
use Filament\Tables\Columns\IconColumn;
|
||||||
use Filament\Tables\Columns\TextColumn;
|
use Filament\Tables\Columns\TextColumn;
|
||||||
use Filament\Tables\Columns\TextInputColumn;
|
use Filament\Tables\Columns\TextInputColumn;
|
||||||
@ -64,7 +64,7 @@ class AllocationsRelationManager extends RelationManager
|
|||||||
->headerActions([
|
->headerActions([
|
||||||
CreateAction::make()->label(trans('admin/server.create_allocation'))
|
CreateAction::make()->label(trans('admin/server.create_allocation'))
|
||||||
->createAnother(false)
|
->createAnother(false)
|
||||||
->form(fn () => [
|
->schema(fn () => [
|
||||||
Select::make('allocation_ip')
|
Select::make('allocation_ip')
|
||||||
->options(collect($this->getOwnerRecord()->node->ipAddresses())->mapWithKeys(fn (string $ip) => [$ip => $ip]))
|
->options(collect($this->getOwnerRecord()->node->ipAddresses())->mapWithKeys(fn (string $ip) => [$ip => $ip]))
|
||||||
->label(trans('admin/server.ip_address'))
|
->label(trans('admin/server.ip_address'))
|
||||||
|
@ -9,22 +9,23 @@ use App\Models\User;
|
|||||||
use Filament\Facades\Filament;
|
use Filament\Facades\Filament;
|
||||||
use Filament\Forms\Components\CheckboxList;
|
use Filament\Forms\Components\CheckboxList;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Form;
|
use Filament\Schemas\Components\Form;
|
||||||
use Filament\Resources\Resource;
|
use Filament\Resources\Resource;
|
||||||
use Filament\Tables\Actions\DeleteBulkAction;
|
use Filament\Actions\DeleteBulkAction;
|
||||||
use Filament\Tables\Actions\EditAction;
|
use Filament\Actions\EditAction;
|
||||||
use Filament\Tables\Actions\ViewAction;
|
use Filament\Actions\ViewAction;
|
||||||
use Filament\Tables\Columns\IconColumn;
|
use Filament\Tables\Columns\IconColumn;
|
||||||
use Filament\Tables\Columns\ImageColumn;
|
use Filament\Tables\Columns\ImageColumn;
|
||||||
use Filament\Tables\Columns\TextColumn;
|
use Filament\Tables\Columns\TextColumn;
|
||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
|
|
||||||
class UserResource extends Resource
|
class UserResource extends Resource
|
||||||
{
|
{
|
||||||
protected static ?string $model = User::class;
|
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';
|
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])
|
->columns(['default' => 1, 'lg' => 3])
|
||||||
->schema([
|
->schema([
|
||||||
TextInput::make('username')
|
TextInput::make('username')
|
||||||
|
@ -7,8 +7,8 @@ use App\Enums\SuspendAction;
|
|||||||
use App\Models\Server;
|
use App\Models\Server;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use App\Services\Servers\SuspensionService;
|
use App\Services\Servers\SuspensionService;
|
||||||
|
use Filament\Actions\Action;
|
||||||
use Filament\Resources\RelationManagers\RelationManager;
|
use Filament\Resources\RelationManagers\RelationManager;
|
||||||
use Filament\Tables\Actions;
|
|
||||||
use Filament\Tables\Columns\SelectColumn;
|
use Filament\Tables\Columns\SelectColumn;
|
||||||
use Filament\Tables\Columns\TextColumn;
|
use Filament\Tables\Columns\TextColumn;
|
||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
@ -26,7 +26,7 @@ class ServersRelationManager extends RelationManager
|
|||||||
->searchable(false)
|
->searchable(false)
|
||||||
->heading(trans('admin/user.servers'))
|
->heading(trans('admin/user.servers'))
|
||||||
->headerActions([
|
->headerActions([
|
||||||
Actions\Action::make('toggleSuspend')
|
Action::make('toggleSuspend')
|
||||||
->hidden(fn () => $user->servers()
|
->hidden(fn () => $user->servers()
|
||||||
->whereNot('status', ServerState::Suspended)
|
->whereNot('status', ServerState::Suspended)
|
||||||
->orWhereNull('status')
|
->orWhereNull('status')
|
||||||
@ -38,7 +38,7 @@ class ServersRelationManager extends RelationManager
|
|||||||
collect($user->servers)->filter(fn ($server) => !$server->isSuspended())
|
collect($user->servers)->filter(fn ($server) => !$server->isSuspended())
|
||||||
->each(fn ($server) => $suspensionService->handle($server, SuspendAction::Suspend));
|
->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)
|
->hidden(fn () => $user->servers()->where('status', ServerState::Suspended)->count() === 0)
|
||||||
->label(trans('admin/server.unsuspend_all'))
|
->label(trans('admin/server.unsuspend_all'))
|
||||||
->color('primary')
|
->color('primary')
|
||||||
|
@ -4,23 +4,24 @@ namespace App\Filament\Admin\Resources;
|
|||||||
|
|
||||||
use App\Filament\Admin\Resources\WebhookResource\Pages;
|
use App\Filament\Admin\Resources\WebhookResource\Pages;
|
||||||
use App\Models\WebhookConfiguration;
|
use App\Models\WebhookConfiguration;
|
||||||
|
use Filament\Actions\CreateAction;
|
||||||
|
use Filament\Actions\DeleteBulkAction;
|
||||||
use Filament\Forms\Components\CheckboxList;
|
use Filament\Forms\Components\CheckboxList;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Form;
|
use Filament\Schemas\Components\Form;
|
||||||
use Filament\Resources\Resource;
|
use Filament\Resources\Resource;
|
||||||
use Filament\Tables\Actions\CreateAction;
|
use Filament\Actions\DeleteAction;
|
||||||
use Filament\Tables\Actions\DeleteAction;
|
use Filament\Actions\EditAction;
|
||||||
use Filament\Tables\Actions\DeleteBulkAction;
|
use Filament\Actions\ViewAction;
|
||||||
use Filament\Tables\Actions\EditAction;
|
|
||||||
use Filament\Tables\Actions\ViewAction;
|
|
||||||
use Filament\Tables\Columns\TextColumn;
|
use Filament\Tables\Columns\TextColumn;
|
||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
|
|
||||||
class WebhookResource extends Resource
|
class WebhookResource extends Resource
|
||||||
{
|
{
|
||||||
protected static ?string $model = WebhookConfiguration::class;
|
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';
|
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([
|
->schema([
|
||||||
TextInput::make('endpoint')
|
TextInput::make('endpoint')
|
||||||
->label(trans('admin/webhook.endpoint'))
|
->label(trans('admin/webhook.endpoint'))
|
||||||
|
@ -7,7 +7,7 @@ use Filament\Widgets\Widget;
|
|||||||
|
|
||||||
class CanaryWidget extends 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;
|
protected static bool $isLazy = false;
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ use Filament\Widgets\Widget;
|
|||||||
|
|
||||||
class HelpWidget extends 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;
|
protected static bool $isLazy = false;
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ use Filament\Widgets\Widget;
|
|||||||
|
|
||||||
class NoNodesWidget extends 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;
|
protected static bool $isLazy = false;
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ use Filament\Widgets\Widget;
|
|||||||
|
|
||||||
class SupportWidget extends 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;
|
protected static bool $isLazy = false;
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ use Filament\Widgets\Widget;
|
|||||||
|
|
||||||
class UpdateWidget extends 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;
|
protected static bool $isLazy = false;
|
||||||
|
|
||||||
|
@ -7,8 +7,8 @@ use App\Filament\App\Resources\ServerResource;
|
|||||||
use App\Filament\Components\Tables\Columns\ServerEntryColumn;
|
use App\Filament\Components\Tables\Columns\ServerEntryColumn;
|
||||||
use App\Filament\Server\Pages\Console;
|
use App\Filament\Server\Pages\Console;
|
||||||
use App\Models\Server;
|
use App\Models\Server;
|
||||||
use Filament\Resources\Components\Tab;
|
|
||||||
use Filament\Resources\Pages\ListRecords;
|
use Filament\Resources\Pages\ListRecords;
|
||||||
|
use Filament\Schemas\Components\Tabs\Tab;
|
||||||
use Filament\Tables\Columns\ColumnGroup;
|
use Filament\Tables\Columns\ColumnGroup;
|
||||||
use Filament\Tables\Columns\Layout\Stack;
|
use Filament\Tables\Columns\Layout\Stack;
|
||||||
use Filament\Tables\Columns\TextColumn;
|
use Filament\Tables\Columns\TextColumn;
|
||||||
@ -45,7 +45,7 @@ class ListServers extends ListRecords
|
|||||||
->label('')
|
->label('')
|
||||||
->size('md')
|
->size('md')
|
||||||
->searchable(),
|
->searchable(),
|
||||||
TextColumn::make('')
|
TextColumn::make('iNeedAName')
|
||||||
->label('')
|
->label('')
|
||||||
->badge()
|
->badge()
|
||||||
->copyable(request()->isSecure())
|
->copyable(request()->isSecure())
|
||||||
|
@ -9,10 +9,10 @@ use Exception;
|
|||||||
use Filament\Actions\Action;
|
use Filament\Actions\Action;
|
||||||
use Filament\Forms\Components\FileUpload;
|
use Filament\Forms\Components\FileUpload;
|
||||||
use Filament\Forms\Components\Repeater;
|
use Filament\Forms\Components\Repeater;
|
||||||
use Filament\Forms\Components\Tabs;
|
|
||||||
use Filament\Forms\Components\Tabs\Tab;
|
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Notifications\Notification;
|
use Filament\Notifications\Notification;
|
||||||
|
use Filament\Schemas\Components\Tabs;
|
||||||
|
use Filament\Schemas\Components\Tabs\Tab;
|
||||||
use Illuminate\Support\Arr;
|
use Illuminate\Support\Arr;
|
||||||
use Livewire\Features\SupportFileUploads\TemporaryUploadedFile;
|
use Livewire\Features\SupportFileUploads\TemporaryUploadedFile;
|
||||||
|
|
||||||
@ -78,7 +78,7 @@ class ImportEggAction extends Action
|
|||||||
public function multiple(bool|Closure $condition = true): static
|
public function multiple(bool|Closure $condition = true): static
|
||||||
{
|
{
|
||||||
$isMultiple = (bool) $this->evaluate($condition);
|
$isMultiple = (bool) $this->evaluate($condition);
|
||||||
$this->form([
|
$this->schema([
|
||||||
Tabs::make('Tabs')
|
Tabs::make('Tabs')
|
||||||
->contained(false)
|
->contained(false)
|
||||||
->tabs([
|
->tabs([
|
||||||
|
@ -4,9 +4,9 @@ namespace App\Filament\Components\Forms\Actions;
|
|||||||
|
|
||||||
use App\Models\Server;
|
use App\Models\Server;
|
||||||
use App\Services\Servers\StartupCommandService;
|
use App\Services\Servers\StartupCommandService;
|
||||||
use Filament\Forms\Components\Actions\Action;
|
use Filament\Actions\Action;
|
||||||
use Filament\Forms\Get;
|
use Filament\Schemas\Components\Utilities\Get;
|
||||||
use Filament\Forms\Set;
|
use Filament\Schemas\Components\Utilities\Set;
|
||||||
|
|
||||||
class PreviewStartupAction extends Action
|
class PreviewStartupAction extends Action
|
||||||
{
|
{
|
||||||
|
@ -6,9 +6,8 @@ use App\Facades\Activity;
|
|||||||
use App\Models\Database;
|
use App\Models\Database;
|
||||||
use App\Services\Databases\DatabasePasswordService;
|
use App\Services\Databases\DatabasePasswordService;
|
||||||
use Exception;
|
use Exception;
|
||||||
use Filament\Actions\StaticAction;
|
use Filament\Actions\Action;
|
||||||
use Filament\Forms\Components\Actions\Action;
|
use Filament\Schemas\Components\Utilities\Set;
|
||||||
use Filament\Forms\Set;
|
|
||||||
use Filament\Notifications\Notification;
|
use Filament\Notifications\Notification;
|
||||||
|
|
||||||
class RotateDatabasePasswordAction extends Action
|
class RotateDatabasePasswordAction extends Action
|
||||||
@ -32,7 +31,7 @@ class RotateDatabasePasswordAction extends Action
|
|||||||
|
|
||||||
$this->modalIconColor('warning');
|
$this->modalIconColor('warning');
|
||||||
|
|
||||||
$this->modalSubmitAction(fn (StaticAction $action) => $action->color('warning'));
|
$this->modalSubmitAction(fn (Action $action) => $action->color('warning'));
|
||||||
|
|
||||||
$this->requiresConfirmation();
|
$this->requiresConfirmation();
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ namespace App\Filament\Components\Forms\Fields;
|
|||||||
|
|
||||||
use App\Models\Egg;
|
use App\Models\Egg;
|
||||||
use Filament\Forms\Components\Select;
|
use Filament\Forms\Components\Select;
|
||||||
use Filament\Forms\Set;
|
use Filament\Schemas\Components\Utilities\Set;
|
||||||
use Livewire\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
class CopyFrom extends Select
|
class CopyFrom extends Select
|
||||||
|
@ -4,7 +4,7 @@ namespace App\Filament\Components\Tables\Actions;
|
|||||||
|
|
||||||
use App\Models\Egg;
|
use App\Models\Egg;
|
||||||
use App\Services\Eggs\Sharing\EggExporterService;
|
use App\Services\Eggs\Sharing\EggExporterService;
|
||||||
use Filament\Tables\Actions\Action;
|
use Filament\Actions\Action;
|
||||||
|
|
||||||
class ExportEggAction extends Action
|
class ExportEggAction extends Action
|
||||||
{
|
{
|
||||||
|
@ -8,11 +8,11 @@ use Closure;
|
|||||||
use Exception;
|
use Exception;
|
||||||
use Filament\Forms\Components\FileUpload;
|
use Filament\Forms\Components\FileUpload;
|
||||||
use Filament\Forms\Components\Repeater;
|
use Filament\Forms\Components\Repeater;
|
||||||
use Filament\Forms\Components\Tabs;
|
use Filament\Schemas\Components\Tabs;
|
||||||
use Filament\Forms\Components\Tabs\Tab;
|
use Filament\Schemas\Components\Tabs\Tab;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Notifications\Notification;
|
use Filament\Notifications\Notification;
|
||||||
use Filament\Tables\Actions\Action;
|
use Filament\Actions\Action;
|
||||||
use Illuminate\Support\Arr;
|
use Illuminate\Support\Arr;
|
||||||
use Livewire\Features\SupportFileUploads\TemporaryUploadedFile;
|
use Livewire\Features\SupportFileUploads\TemporaryUploadedFile;
|
||||||
|
|
||||||
@ -78,7 +78,7 @@ class ImportEggAction extends Action
|
|||||||
public function multiple(bool|Closure $condition = true): static
|
public function multiple(bool|Closure $condition = true): static
|
||||||
{
|
{
|
||||||
$isMultiple = (bool) $this->evaluate($condition);
|
$isMultiple = (bool) $this->evaluate($condition);
|
||||||
$this->form([
|
$this->schema([
|
||||||
Tabs::make('Tabs')
|
Tabs::make('Tabs')
|
||||||
->contained(false)
|
->contained(false)
|
||||||
->tabs([
|
->tabs([
|
||||||
|
@ -5,9 +5,8 @@ namespace App\Filament\Components\Tables\Actions;
|
|||||||
use App\Models\Egg;
|
use App\Models\Egg;
|
||||||
use App\Services\Eggs\Sharing\EggImporterService;
|
use App\Services\Eggs\Sharing\EggImporterService;
|
||||||
use Exception;
|
use Exception;
|
||||||
use Filament\Actions\StaticAction;
|
|
||||||
use Filament\Notifications\Notification;
|
use Filament\Notifications\Notification;
|
||||||
use Filament\Tables\Actions\Action;
|
use Filament\Actions\Action;
|
||||||
|
|
||||||
class UpdateEggAction extends Action
|
class UpdateEggAction extends Action
|
||||||
{
|
{
|
||||||
@ -34,7 +33,7 @@ class UpdateEggAction extends Action
|
|||||||
|
|
||||||
$this->modalIconColor('danger');
|
$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) {
|
$this->action(function (Egg $egg, EggImporterService $eggImporterService) {
|
||||||
try {
|
try {
|
||||||
|
@ -5,9 +5,9 @@ namespace App\Filament\Components\Tables\Actions;
|
|||||||
use App\Models\Egg;
|
use App\Models\Egg;
|
||||||
use App\Services\Eggs\Sharing\EggImporterService;
|
use App\Services\Eggs\Sharing\EggImporterService;
|
||||||
use Exception;
|
use Exception;
|
||||||
use Filament\Actions\StaticAction;
|
use Filament\Actions\Action;
|
||||||
use Filament\Notifications\Notification;
|
use Filament\Notifications\Notification;
|
||||||
use Filament\Tables\Actions\BulkAction;
|
use Filament\Actions\BulkAction;
|
||||||
use Illuminate\Database\Eloquent\Collection;
|
use Illuminate\Database\Eloquent\Collection;
|
||||||
|
|
||||||
class UpdateEggBulkAction extends BulkAction
|
class UpdateEggBulkAction extends BulkAction
|
||||||
@ -35,7 +35,7 @@ class UpdateEggBulkAction extends BulkAction
|
|||||||
|
|
||||||
$this->modalIconColor('danger');
|
$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) {
|
$this->action(function (Collection $records, EggImporterService $eggImporterService) {
|
||||||
if ($records->count() === 0) {
|
if ($records->count() === 0) {
|
||||||
|
@ -17,25 +17,24 @@ use chillerlan\QRCode\Common\Version;
|
|||||||
use chillerlan\QRCode\QRCode;
|
use chillerlan\QRCode\QRCode;
|
||||||
use chillerlan\QRCode\QROptions;
|
use chillerlan\QRCode\QROptions;
|
||||||
use DateTimeZone;
|
use DateTimeZone;
|
||||||
use Filament\Forms\Components\Actions;
|
use Filament\Actions;
|
||||||
use Filament\Forms\Components\Actions\Action;
|
use Filament\Actions\Action;
|
||||||
use Filament\Forms\Components\FileUpload;
|
use Filament\Forms\Components\FileUpload;
|
||||||
use Filament\Forms\Components\Grid;
|
use Filament\Schemas\Components\Grid;
|
||||||
use Filament\Forms\Components\Placeholder;
|
use Filament\Forms\Components\Placeholder;
|
||||||
use Filament\Forms\Components\Repeater;
|
use Filament\Forms\Components\Repeater;
|
||||||
use Filament\Forms\Components\Section;
|
use Filament\Schemas\Components\Section;
|
||||||
use Filament\Forms\Components\Select;
|
use Filament\Forms\Components\Select;
|
||||||
use Filament\Forms\Components\Tabs;
|
use Filament\Schemas\Components\Tabs;
|
||||||
use Filament\Forms\Components\Tabs\Tab;
|
use Filament\Schemas\Components\Tabs\Tab;
|
||||||
use Filament\Forms\Components\TagsInput;
|
use Filament\Forms\Components\TagsInput;
|
||||||
use Filament\Forms\Components\Textarea;
|
use Filament\Forms\Components\Textarea;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Components\ToggleButtons;
|
use Filament\Forms\Components\ToggleButtons;
|
||||||
use Filament\Forms\Get;
|
use Filament\Schemas\Components\Utilities\Get;
|
||||||
use Filament\Notifications\Notification;
|
use Filament\Notifications\Notification;
|
||||||
use Filament\Pages\Auth\EditProfile as BaseEditProfile;
|
|
||||||
use Filament\Support\Colors\Color;
|
use Filament\Support\Colors\Color;
|
||||||
use Filament\Support\Enums\MaxWidth;
|
use Filament\Support\Enums\Width;
|
||||||
use Filament\Support\Exceptions\Halt;
|
use Filament\Support\Exceptions\Halt;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
@ -47,7 +46,7 @@ use Laravel\Socialite\Facades\Socialite;
|
|||||||
/**
|
/**
|
||||||
* @method User getUser()
|
* @method User getUser()
|
||||||
*/
|
*/
|
||||||
class EditProfile extends BaseEditProfile
|
class EditProfile extends \Filament\Auth\Pages\EditProfile
|
||||||
{
|
{
|
||||||
private ToggleTwoFactorService $toggleTwoFactorService;
|
private ToggleTwoFactorService $toggleTwoFactorService;
|
||||||
|
|
||||||
@ -56,7 +55,7 @@ class EditProfile extends BaseEditProfile
|
|||||||
$this->toggleTwoFactorService = $toggleTwoFactorService;
|
$this->toggleTwoFactorService = $toggleTwoFactorService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getMaxWidth(): MaxWidth|string
|
public function getMaxWidth(): Width|string
|
||||||
{
|
{
|
||||||
return config('panel.filament.display-width', 'screen-2xl');
|
return config('panel.filament.display-width', 'screen-2xl');
|
||||||
}
|
}
|
||||||
|
@ -5,21 +5,20 @@ namespace App\Filament\Pages\Auth;
|
|||||||
use App\Extensions\Captcha\Providers\CaptchaProvider;
|
use App\Extensions\Captcha\Providers\CaptchaProvider;
|
||||||
use App\Extensions\OAuth\Providers\OAuthProvider;
|
use App\Extensions\OAuth\Providers\OAuthProvider;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
|
use Filament\Auth\Http\Responses\LoginResponse;
|
||||||
use Filament\Facades\Filament;
|
use Filament\Facades\Filament;
|
||||||
use Filament\Forms\Components\Actions;
|
use Filament\Actions\Action;
|
||||||
use Filament\Forms\Components\Actions\Action;
|
|
||||||
use Filament\Forms\Components\Component;
|
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Http\Responses\Auth\Contracts\LoginResponse;
|
|
||||||
use Filament\Notifications\Notification;
|
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 Filament\Support\Colors\Color;
|
||||||
use Illuminate\Support\Facades\Config;
|
use Illuminate\Support\Facades\Config;
|
||||||
use Illuminate\Support\Sleep;
|
use Illuminate\Support\Sleep;
|
||||||
use Illuminate\Validation\ValidationException;
|
use Illuminate\Validation\ValidationException;
|
||||||
use PragmaRX\Google2FA\Google2FA;
|
use PragmaRX\Google2FA\Google2FA;
|
||||||
|
|
||||||
class Login extends BaseLogin
|
class Login extends \Filament\Auth\Pages\Login
|
||||||
{
|
{
|
||||||
private Google2FA $google2FA;
|
private Google2FA $google2FA;
|
||||||
|
|
||||||
@ -156,7 +155,7 @@ class Login extends BaseLogin
|
|||||||
$actions[] = Action::make("oauth_$id")
|
$actions[] = Action::make("oauth_$id")
|
||||||
->label($oauthProvider->getName())
|
->label($oauthProvider->getName())
|
||||||
->icon($oauthProvider->getIcon())
|
->icon($oauthProvider->getIcon())
|
||||||
->color(Color::hex($oauthProvider->getHexColor()))
|
//TODO ->color(Color::hex($oauthProvider->getHexColor()))
|
||||||
->url(route('auth.oauth.redirect', ['driver' => $id], false));
|
->url(route('auth.oauth.redirect', ['driver' => $id], false));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ use Illuminate\Contracts\View\View;
|
|||||||
|
|
||||||
class SmallStatBlock extends Stat
|
class SmallStatBlock extends Stat
|
||||||
{
|
{
|
||||||
protected string|Htmlable $label;
|
protected string|\Closure|Htmlable|null $label;
|
||||||
|
|
||||||
protected $value;
|
protected $value;
|
||||||
|
|
||||||
@ -31,7 +31,7 @@ class SmallStatBlock extends Stat
|
|||||||
return $this->label;
|
return $this->label;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getValue()
|
public function getValue(): mixed
|
||||||
{
|
{
|
||||||
return value($this->value);
|
return value($this->value);
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ use Illuminate\Contracts\View\View;
|
|||||||
|
|
||||||
class StatBlock extends Stat
|
class StatBlock extends Stat
|
||||||
{
|
{
|
||||||
protected string|Htmlable $label;
|
protected string|\Closure|Htmlable|null $label;
|
||||||
|
|
||||||
protected $value;
|
protected $value;
|
||||||
|
|
||||||
@ -31,7 +31,7 @@ class StatBlock extends Stat
|
|||||||
return $this->label;
|
return $this->label;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getValue()
|
public function getValue(): mixed
|
||||||
{
|
{
|
||||||
return value($this->value);
|
return value($this->value);
|
||||||
}
|
}
|
||||||
|
@ -16,18 +16,18 @@ use App\Models\Server;
|
|||||||
use Filament\Actions\Action;
|
use Filament\Actions\Action;
|
||||||
use Filament\Facades\Filament;
|
use Filament\Facades\Filament;
|
||||||
use Filament\Pages\Page;
|
use Filament\Pages\Page;
|
||||||
use Filament\Support\Enums\ActionSize;
|
use Filament\Support\Enums\Size;
|
||||||
use Filament\Widgets\Widget;
|
use Filament\Widgets\Widget;
|
||||||
use Filament\Widgets\WidgetConfiguration;
|
use Filament\Widgets\WidgetConfiguration;
|
||||||
use Livewire\Attributes\On;
|
use Livewire\Attributes\On;
|
||||||
|
|
||||||
class Console extends Page
|
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 ?int $navigationSort = 1;
|
||||||
|
|
||||||
protected static string $view = 'filament.server.pages.console';
|
protected string $view = 'filament.server.pages.console';
|
||||||
|
|
||||||
public ContainerStatus $status = ContainerStatus::Offline;
|
public ContainerStatus $status = ContainerStatus::Offline;
|
||||||
|
|
||||||
@ -125,21 +125,21 @@ class Console extends Page
|
|||||||
return [
|
return [
|
||||||
Action::make('start')
|
Action::make('start')
|
||||||
->color('primary')
|
->color('primary')
|
||||||
->size(ActionSize::ExtraLarge)
|
->size(Size::ExtraLarge)
|
||||||
->action(fn () => $this->dispatch('setServerState', state: 'start', uuid: $server->uuid))
|
->action(fn () => $this->dispatch('setServerState', state: 'start', uuid: $server->uuid))
|
||||||
->authorize(fn () => auth()->user()->can(Permission::ACTION_CONTROL_START, $server))
|
->authorize(fn () => auth()->user()->can(Permission::ACTION_CONTROL_START, $server))
|
||||||
->disabled(fn () => $server->isInConflictState() || !$this->status->isStartable())
|
->disabled(fn () => $server->isInConflictState() || !$this->status->isStartable())
|
||||||
->icon('tabler-player-play-filled'),
|
->icon('tabler-player-play-filled'),
|
||||||
Action::make('restart')
|
Action::make('restart')
|
||||||
->color('gray')
|
->color('gray')
|
||||||
->size(ActionSize::ExtraLarge)
|
->size(Size::ExtraLarge)
|
||||||
->action(fn () => $this->dispatch('setServerState', state: 'restart', uuid: $server->uuid))
|
->action(fn () => $this->dispatch('setServerState', state: 'restart', uuid: $server->uuid))
|
||||||
->authorize(fn () => auth()->user()->can(Permission::ACTION_CONTROL_RESTART, $server))
|
->authorize(fn () => auth()->user()->can(Permission::ACTION_CONTROL_RESTART, $server))
|
||||||
->disabled(fn () => $server->isInConflictState() || !$this->status->isRestartable())
|
->disabled(fn () => $server->isInConflictState() || !$this->status->isRestartable())
|
||||||
->icon('tabler-reload'),
|
->icon('tabler-reload'),
|
||||||
Action::make('stop')
|
Action::make('stop')
|
||||||
->color('danger')
|
->color('danger')
|
||||||
->size(ActionSize::ExtraLarge)
|
->size(Size::ExtraLarge)
|
||||||
->action(fn () => $this->dispatch('setServerState', state: 'stop', uuid: $server->uuid))
|
->action(fn () => $this->dispatch('setServerState', state: 'stop', uuid: $server->uuid))
|
||||||
->authorize(fn () => auth()->user()->can(Permission::ACTION_CONTROL_STOP, $server))
|
->authorize(fn () => auth()->user()->can(Permission::ACTION_CONTROL_STOP, $server))
|
||||||
->hidden(fn () => $this->status->isStartingOrStopping() || $this->status->isKillable())
|
->hidden(fn () => $this->status->isStartingOrStopping() || $this->status->isKillable())
|
||||||
@ -151,7 +151,7 @@ class Console extends Page
|
|||||||
->modalHeading('Do you wish to kill this server?')
|
->modalHeading('Do you wish to kill this server?')
|
||||||
->modalDescription('This can result in data corruption and/or data loss!')
|
->modalDescription('This can result in data corruption and/or data loss!')
|
||||||
->modalSubmitActionLabel('Kill Server')
|
->modalSubmitActionLabel('Kill Server')
|
||||||
->size(ActionSize::ExtraLarge)
|
->size(Size::ExtraLarge)
|
||||||
->action(fn () => $this->dispatch('setServerState', state: 'kill', uuid: $server->uuid))
|
->action(fn () => $this->dispatch('setServerState', state: 'kill', uuid: $server->uuid))
|
||||||
->authorize(fn () => auth()->user()->can(Permission::ACTION_CONTROL_STOP, $server))
|
->authorize(fn () => auth()->user()->can(Permission::ACTION_CONTROL_STOP, $server))
|
||||||
->hidden(fn () => $server->isInConflictState() || !$this->status->isKillable())
|
->hidden(fn () => $server->isInConflictState() || !$this->status->isKillable())
|
||||||
|
@ -5,7 +5,7 @@ namespace App\Filament\Server\Pages;
|
|||||||
use App\Models\Server;
|
use App\Models\Server;
|
||||||
use Filament\Facades\Filament;
|
use Filament\Facades\Filament;
|
||||||
use Filament\Forms\Concerns\InteractsWithForms;
|
use Filament\Forms\Concerns\InteractsWithForms;
|
||||||
use Filament\Forms\Form;
|
use Filament\Schemas\Components\Form;
|
||||||
use Filament\Pages\Concerns\InteractsWithFormActions;
|
use Filament\Pages\Concerns\InteractsWithFormActions;
|
||||||
use Filament\Pages\Page;
|
use Filament\Pages\Page;
|
||||||
|
|
||||||
@ -17,9 +17,8 @@ abstract class ServerFormPage extends Page
|
|||||||
use InteractsWithFormActions;
|
use InteractsWithFormActions;
|
||||||
use InteractsWithForms;
|
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 ?array $data = [];
|
||||||
|
|
||||||
public function mount(): void
|
public function mount(): void
|
||||||
|
@ -7,31 +7,31 @@ use App\Models\Permission;
|
|||||||
use App\Models\Server;
|
use App\Models\Server;
|
||||||
use App\Services\Servers\ReinstallServerService;
|
use App\Services\Servers\ReinstallServerService;
|
||||||
use Exception;
|
use Exception;
|
||||||
|
use Filament\Actions\Action;
|
||||||
use Filament\Facades\Filament;
|
use Filament\Facades\Filament;
|
||||||
use Filament\Forms\Components\Actions\Action;
|
use Filament\Schemas\Components\Fieldset;
|
||||||
use Filament\Forms\Components\Fieldset;
|
|
||||||
use Filament\Forms\Components\Placeholder;
|
use Filament\Forms\Components\Placeholder;
|
||||||
use Filament\Forms\Components\Section;
|
use Filament\Schemas\Components\Section;
|
||||||
use Filament\Forms\Components\Textarea;
|
use Filament\Forms\Components\Textarea;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Form;
|
use Filament\Schemas\Components\Form;
|
||||||
use Filament\Notifications\Notification;
|
use Filament\Notifications\Notification;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
use Filament\Support\Enums\Alignment;
|
use Filament\Support\Enums\Alignment;
|
||||||
use Illuminate\Support\Number;
|
use Illuminate\Support\Number;
|
||||||
use Webbingbrasil\FilamentCopyActions\Forms\Actions\CopyAction;
|
|
||||||
|
|
||||||
class Settings extends ServerFormPage
|
class Settings extends ServerFormPage
|
||||||
{
|
{
|
||||||
protected static ?string $navigationIcon = 'tabler-settings';
|
protected static string | \BackedEnum | null $navigationIcon = 'tabler-settings';
|
||||||
|
|
||||||
protected static ?int $navigationSort = 10;
|
protected static ?int $navigationSort = 10;
|
||||||
|
|
||||||
public function form(Form $form): Form
|
public function form(Form|Schema $schema): Schema
|
||||||
{
|
{
|
||||||
/** @var Server $server */
|
/** @var Server $server */
|
||||||
$server = Filament::getTenant();
|
$server = Filament::getTenant();
|
||||||
|
|
||||||
return $form
|
return $schema
|
||||||
->columns([
|
->columns([
|
||||||
'default' => 1,
|
'default' => 1,
|
||||||
'sm' => 2,
|
'sm' => 2,
|
||||||
@ -162,7 +162,7 @@ class Settings extends ServerFormPage
|
|||||||
->label('Connection')
|
->label('Connection')
|
||||||
->columnSpan(1)
|
->columnSpan(1)
|
||||||
->disabled()
|
->disabled()
|
||||||
->suffixAction(fn () => request()->isSecure() ? CopyAction::make() : null)
|
//TODO ->suffixAction(fn () => request()->isSecure() ? CopyAction::make() : null)
|
||||||
->hintAction(
|
->hintAction(
|
||||||
Action::make('connect_sftp')
|
Action::make('connect_sftp')
|
||||||
->label('Connect to SFTP')
|
->label('Connect to SFTP')
|
||||||
@ -182,7 +182,7 @@ class Settings extends ServerFormPage
|
|||||||
TextInput::make('username')
|
TextInput::make('username')
|
||||||
->label('Username')
|
->label('Username')
|
||||||
->columnSpan(1)
|
->columnSpan(1)
|
||||||
->suffixAction(fn () => request()->isSecure() ? CopyAction::make() : null)
|
//TODO ->suffixAction(fn () => request()->isSecure() ? CopyAction::make() : null)
|
||||||
->disabled()
|
->disabled()
|
||||||
->formatStateUsing(fn (Server $server) => auth()->user()->username . '.' . $server->uuid_short),
|
->formatStateUsing(fn (Server $server) => auth()->user()->username . '.' . $server->uuid_short),
|
||||||
Placeholder::make('password')
|
Placeholder::make('password')
|
||||||
|
@ -9,30 +9,30 @@ use App\Models\Server;
|
|||||||
use App\Models\ServerVariable;
|
use App\Models\ServerVariable;
|
||||||
use Closure;
|
use Closure;
|
||||||
use Filament\Facades\Filament;
|
use Filament\Facades\Filament;
|
||||||
use Filament\Forms\Components\Component;
|
use Filament\Schemas\Components\Component;
|
||||||
use Filament\Forms\Components\Hidden;
|
use Filament\Forms\Components\Hidden;
|
||||||
use Filament\Forms\Components\Repeater;
|
use Filament\Forms\Components\Repeater;
|
||||||
use Filament\Forms\Components\Section;
|
|
||||||
use Filament\Forms\Components\Select;
|
use Filament\Forms\Components\Select;
|
||||||
use Filament\Forms\Components\Textarea;
|
use Filament\Forms\Components\Textarea;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Form;
|
use Filament\Schemas\Components\Form;
|
||||||
use Filament\Notifications\Notification;
|
use Filament\Notifications\Notification;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Support\Facades\Validator;
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
|
||||||
class Startup extends ServerFormPage
|
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;
|
protected static ?int $navigationSort = 9;
|
||||||
|
|
||||||
public function form(Form $form): Form
|
public function form(Form|Schema $schema): Schema
|
||||||
{
|
{
|
||||||
/** @var Server $server */
|
/** @var Server $server */
|
||||||
$server = Filament::getTenant();
|
$server = Filament::getTenant();
|
||||||
|
|
||||||
return $form
|
return $schema
|
||||||
->columns([
|
->columns([
|
||||||
'default' => 1,
|
'default' => 1,
|
||||||
'sm' => 1,
|
'sm' => 1,
|
||||||
|
@ -23,7 +23,7 @@ class ActivityResource extends Resource
|
|||||||
|
|
||||||
protected static ?int $navigationSort = 8;
|
protected static ?int $navigationSort = 8;
|
||||||
|
|
||||||
protected static ?string $navigationIcon = 'tabler-stack';
|
protected static string | \BackedEnum | null $navigationIcon = 'tabler-stack';
|
||||||
|
|
||||||
public static function getEloquentQuery(): Builder
|
public static function getEloquentQuery(): Builder
|
||||||
{
|
{
|
||||||
|
@ -9,13 +9,13 @@ use App\Filament\Components\Tables\Columns\DateTimeColumn;
|
|||||||
use App\Models\Server;
|
use App\Models\Server;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use Filament\Facades\Filament;
|
use Filament\Facades\Filament;
|
||||||
use Filament\Forms\Components\Actions\Action;
|
use Filament\Actions\Action;
|
||||||
use Filament\Forms\Components\DateTimePicker;
|
use Filament\Forms\Components\DateTimePicker;
|
||||||
use Filament\Forms\Components\KeyValue;
|
use Filament\Forms\Components\KeyValue;
|
||||||
use Filament\Forms\Components\Placeholder;
|
use Filament\Forms\Components\Placeholder;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Resources\Pages\ListRecords;
|
use Filament\Resources\Pages\ListRecords;
|
||||||
use Filament\Tables\Actions\ViewAction;
|
use Filament\Actions\ViewAction;
|
||||||
use Filament\Tables\Columns\TextColumn;
|
use Filament\Tables\Columns\TextColumn;
|
||||||
use Filament\Tables\Filters\SelectFilter;
|
use Filament\Tables\Filters\SelectFilter;
|
||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
@ -67,7 +67,7 @@ class ListActivities extends ListRecords
|
|||||||
->actions([
|
->actions([
|
||||||
ViewAction::make()
|
ViewAction::make()
|
||||||
//->visible(fn (ActivityLog $activityLog) => $activityLog->hasAdditionalMetadata())
|
//->visible(fn (ActivityLog $activityLog) => $activityLog->hasAdditionalMetadata())
|
||||||
->form([
|
->schema([
|
||||||
Placeholder::make('event')
|
Placeholder::make('event')
|
||||||
->content(fn (ActivityLog $activityLog) => new HtmlString($activityLog->getLabel())),
|
->content(fn (ActivityLog $activityLog) => new HtmlString($activityLog->getLabel())),
|
||||||
TextInput::make('user')
|
TextInput::make('user')
|
||||||
|
@ -20,7 +20,7 @@ class AllocationResource extends Resource
|
|||||||
|
|
||||||
protected static ?int $navigationSort = 7;
|
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
|
// TODO: find better way handle server conflict state
|
||||||
public static function canAccess(): bool
|
public static function canAccess(): bool
|
||||||
|
@ -11,7 +11,7 @@ use App\Services\Allocations\FindAssignableAllocationService;
|
|||||||
use Filament\Actions;
|
use Filament\Actions;
|
||||||
use Filament\Facades\Filament;
|
use Filament\Facades\Filament;
|
||||||
use Filament\Resources\Pages\ListRecords;
|
use Filament\Resources\Pages\ListRecords;
|
||||||
use Filament\Tables\Actions\DetachAction;
|
use Filament\Actions\DetachAction;
|
||||||
use Filament\Tables\Columns\IconColumn;
|
use Filament\Tables\Columns\IconColumn;
|
||||||
use Filament\Tables\Columns\TextColumn;
|
use Filament\Tables\Columns\TextColumn;
|
||||||
use Filament\Tables\Columns\TextInputColumn;
|
use Filament\Tables\Columns\TextInputColumn;
|
||||||
|
@ -16,7 +16,7 @@ class BackupResource extends Resource
|
|||||||
|
|
||||||
protected static ?int $navigationSort = 3;
|
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;
|
protected static bool $canCreateAnother = false;
|
||||||
|
|
||||||
|
@ -22,17 +22,18 @@ use Filament\Forms\Components\Placeholder;
|
|||||||
use Filament\Forms\Components\Textarea;
|
use Filament\Forms\Components\Textarea;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Components\Toggle;
|
use Filament\Forms\Components\Toggle;
|
||||||
use Filament\Forms\Form;
|
use Filament\Schemas\Components\Form;
|
||||||
use Filament\Notifications\Notification;
|
use Filament\Notifications\Notification;
|
||||||
use Filament\Resources\Pages\ListRecords;
|
use Filament\Resources\Pages\ListRecords;
|
||||||
use Filament\Tables\Actions\Action;
|
use Filament\Actions\Action;
|
||||||
use Filament\Tables\Actions\ActionGroup;
|
use Filament\Actions\ActionGroup;
|
||||||
use Filament\Tables\Actions\DeleteAction;
|
use Filament\Actions\DeleteAction;
|
||||||
use Filament\Tables\Columns\IconColumn;
|
use Filament\Tables\Columns\IconColumn;
|
||||||
use Filament\Tables\Columns\TextColumn;
|
use Filament\Tables\Columns\TextColumn;
|
||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Symfony\Component\HttpKernel\Exception\HttpException;
|
use Symfony\Component\HttpKernel\Exception\HttpException;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
|
|
||||||
class ListBackups extends ListRecords
|
class ListBackups extends ListRecords
|
||||||
{
|
{
|
||||||
@ -40,9 +41,9 @@ class ListBackups extends ListRecords
|
|||||||
|
|
||||||
protected static bool $canCreateAnother = false;
|
protected static bool $canCreateAnother = false;
|
||||||
|
|
||||||
public function form(Form $form): Form
|
public function form(Form|Schema $schema): Schema
|
||||||
{
|
{
|
||||||
return $form
|
return $schema
|
||||||
->schema([
|
->schema([
|
||||||
TextInput::make('name')
|
TextInput::make('name')
|
||||||
->label('Name')
|
->label('Name')
|
||||||
@ -98,7 +99,7 @@ class ListBackups extends ListRecords
|
|||||||
->color('success')
|
->color('success')
|
||||||
->icon('tabler-folder-up')
|
->icon('tabler-folder-up')
|
||||||
->authorize(fn () => auth()->user()->can(Permission::ACTION_BACKUP_RESTORE, $server))
|
->authorize(fn () => auth()->user()->can(Permission::ACTION_BACKUP_RESTORE, $server))
|
||||||
->form([
|
->schema([
|
||||||
Placeholder::make('')
|
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.'),
|
->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')
|
Checkbox::make('truncate')
|
||||||
|
@ -16,7 +16,7 @@ class DatabaseResource extends Resource
|
|||||||
|
|
||||||
protected static ?int $navigationSort = 6;
|
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;
|
public const WARNING_THRESHOLD = 0.7;
|
||||||
|
|
||||||
|
@ -13,35 +13,35 @@ use App\Models\Server;
|
|||||||
use App\Services\Databases\DatabaseManagementService;
|
use App\Services\Databases\DatabaseManagementService;
|
||||||
use Filament\Actions\CreateAction;
|
use Filament\Actions\CreateAction;
|
||||||
use Filament\Facades\Filament;
|
use Filament\Facades\Filament;
|
||||||
use Filament\Forms\Components\Grid;
|
use Filament\Schemas\Components\Grid;
|
||||||
use Filament\Forms\Components\Select;
|
use Filament\Forms\Components\Select;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Form;
|
use Filament\Schemas\Components\Form;
|
||||||
use Filament\Resources\Pages\ListRecords;
|
use Filament\Resources\Pages\ListRecords;
|
||||||
use Filament\Tables\Actions\DeleteAction;
|
use Filament\Actions\DeleteAction;
|
||||||
use Filament\Tables\Actions\ViewAction;
|
use Filament\Actions\ViewAction;
|
||||||
use Filament\Tables\Columns\TextColumn;
|
use Filament\Tables\Columns\TextColumn;
|
||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
use Webbingbrasil\FilamentCopyActions\Forms\Actions\CopyAction;
|
use Filament\Schemas\Schema;
|
||||||
|
|
||||||
class ListDatabases extends ListRecords
|
class ListDatabases extends ListRecords
|
||||||
{
|
{
|
||||||
protected static string $resource = DatabaseResource::class;
|
protected static string $resource = DatabaseResource::class;
|
||||||
|
|
||||||
public function form(Form $form): Form
|
public function form(Form|Schema $schema): Schema
|
||||||
{
|
{
|
||||||
/** @var Server $server */
|
/** @var Server $server */
|
||||||
$server = Filament::getTenant();
|
$server = Filament::getTenant();
|
||||||
|
|
||||||
return $form
|
return $schema
|
||||||
->schema([
|
->schema([
|
||||||
TextInput::make('host')
|
TextInput::make('host')
|
||||||
->formatStateUsing(fn (Database $database) => $database->address())
|
->formatStateUsing(fn (Database $database) => $database->address()),
|
||||||
->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null),
|
//TODO ->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null),
|
||||||
TextInput::make('database')
|
TextInput::make('database'),
|
||||||
->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null),
|
//TODO ->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null),
|
||||||
TextInput::make('username')
|
TextInput::make('username'),
|
||||||
->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null),
|
//TODO->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null),
|
||||||
TextInput::make('password')
|
TextInput::make('password')
|
||||||
->password()->revealable()
|
->password()->revealable()
|
||||||
->hidden(fn () => !auth()->user()->can(Permission::ACTION_DATABASE_VIEW_PASSWORD, $server))
|
->hidden(fn () => !auth()->user()->can(Permission::ACTION_DATABASE_VIEW_PASSWORD, $server))
|
||||||
@ -49,7 +49,7 @@ class ListDatabases extends ListRecords
|
|||||||
RotateDatabasePasswordAction::make()
|
RotateDatabasePasswordAction::make()
|
||||||
->authorize(fn () => auth()->user()->can(Permission::ACTION_DATABASE_UPDATE, $server))
|
->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),
|
->formatStateUsing(fn (Database $database) => $database->password),
|
||||||
TextInput::make('remote')
|
TextInput::make('remote')
|
||||||
->label('Connections From'),
|
->label('Connections From'),
|
||||||
@ -59,7 +59,7 @@ class ListDatabases extends ListRecords
|
|||||||
->label('JDBC Connection String')
|
->label('JDBC Connection String')
|
||||||
->password()->revealable()
|
->password()->revealable()
|
||||||
->hidden(!auth()->user()->can(Permission::ACTION_DATABASE_VIEW_PASSWORD, $server))
|
->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()
|
->columnSpanFull()
|
||||||
->formatStateUsing(fn (Database $database) => $database->jdbc),
|
->formatStateUsing(fn (Database $database) => $database->jdbc),
|
||||||
]);
|
]);
|
||||||
@ -102,7 +102,7 @@ class ListDatabases extends ListRecords
|
|||||||
->disabled(fn () => $server->databases()->count() >= $server->database_limit)
|
->disabled(fn () => $server->databases()->count() >= $server->database_limit)
|
||||||
->color(fn () => $server->databases()->count() >= $server->database_limit ? 'danger' : 'primary')
|
->color(fn () => $server->databases()->count() >= $server->database_limit ? 'danger' : 'primary')
|
||||||
->createAnother(false)
|
->createAnother(false)
|
||||||
->form([
|
->schema([
|
||||||
Grid::make()
|
Grid::make()
|
||||||
->columns(2)
|
->columns(2)
|
||||||
->schema([
|
->schema([
|
||||||
|
@ -16,7 +16,7 @@ class FileResource extends Resource
|
|||||||
|
|
||||||
protected static ?int $navigationSort = 2;
|
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
|
// TODO: find better way handle server conflict state
|
||||||
public static function canAccess(): bool
|
public static function canAccess(): bool
|
||||||
|
@ -2,10 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Filament\Server\Resources\FileResource\Pages;
|
namespace App\Filament\Server\Resources\FileResource\Pages;
|
||||||
|
|
||||||
use AbdelhamidErrahmouni\FilamentMonacoEditor\MonacoEditor;
|
|
||||||
use App\Enums\EditorLanguages;
|
use App\Enums\EditorLanguages;
|
||||||
use App\Exceptions\Http\Server\FileSizeTooLargeException;
|
|
||||||
use App\Exceptions\Repository\FileNotEditableException;
|
|
||||||
use App\Facades\Activity;
|
use App\Facades\Activity;
|
||||||
use App\Filament\Server\Resources\FileResource;
|
use App\Filament\Server\Resources\FileResource;
|
||||||
use App\Livewire\AlertBanner;
|
use App\Livewire\AlertBanner;
|
||||||
@ -13,19 +10,18 @@ use App\Models\Permission;
|
|||||||
use App\Models\Server;
|
use App\Models\Server;
|
||||||
use App\Repositories\Daemon\DaemonFileRepository;
|
use App\Repositories\Daemon\DaemonFileRepository;
|
||||||
use Filament\Facades\Filament;
|
use Filament\Facades\Filament;
|
||||||
use Filament\Forms\Components\Actions\Action;
|
use Filament\Actions\Action;
|
||||||
use Filament\Forms\Components\Section;
|
|
||||||
use Filament\Forms\Components\Select;
|
use Filament\Forms\Components\Select;
|
||||||
use Filament\Forms\Concerns\InteractsWithForms;
|
use Filament\Forms\Concerns\InteractsWithForms;
|
||||||
use Filament\Forms\Form;
|
use Filament\Schemas\Components\Form;
|
||||||
use Filament\Forms\Get;
|
use Filament\Schemas\Components\Section;
|
||||||
use Filament\Notifications\Notification;
|
use Filament\Notifications\Notification;
|
||||||
use Filament\Pages\Concerns\InteractsWithFormActions;
|
use Filament\Pages\Concerns\InteractsWithFormActions;
|
||||||
use Filament\Panel;
|
use Filament\Panel;
|
||||||
use Filament\Resources\Pages\Page;
|
use Filament\Resources\Pages\Page;
|
||||||
use Filament\Resources\Pages\PageRegistration;
|
use Filament\Resources\Pages\PageRegistration;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
use Filament\Support\Enums\Alignment;
|
use Filament\Support\Enums\Alignment;
|
||||||
use Illuminate\Contracts\Filesystem\FileNotFoundException;
|
|
||||||
use Illuminate\Routing\Route;
|
use Illuminate\Routing\Route;
|
||||||
use Illuminate\Support\Facades\Route as RouteFacade;
|
use Illuminate\Support\Facades\Route as RouteFacade;
|
||||||
use Livewire\Attributes\Locked;
|
use Livewire\Attributes\Locked;
|
||||||
@ -40,7 +36,7 @@ class EditFiles extends Page
|
|||||||
|
|
||||||
protected static string $resource = FileResource::class;
|
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 = '';
|
protected static ?string $title = '';
|
||||||
|
|
||||||
@ -49,10 +45,9 @@ class EditFiles extends Page
|
|||||||
|
|
||||||
private DaemonFileRepository $fileRepository;
|
private DaemonFileRepository $fileRepository;
|
||||||
|
|
||||||
/** @var array<mixed> */
|
|
||||||
public ?array $data = [];
|
public ?array $data = [];
|
||||||
|
|
||||||
public function form(Form $form): Form
|
public function form(Form|Schema $schema): Schema
|
||||||
{
|
{
|
||||||
/** @var Server $server */
|
/** @var Server $server */
|
||||||
$server = Filament::getTenant();
|
$server = Filament::getTenant();
|
||||||
@ -61,7 +56,7 @@ class EditFiles extends Page
|
|||||||
->property('file', $this->path)
|
->property('file', $this->path)
|
||||||
->log();
|
->log();
|
||||||
|
|
||||||
return $form
|
return $schema
|
||||||
->schema([
|
->schema([
|
||||||
Section::make('Editing: ' . $this->path)
|
Section::make('Editing: ' . $this->path)
|
||||||
->footerActions([
|
->footerActions([
|
||||||
@ -120,43 +115,43 @@ class EditFiles extends Page
|
|||||||
->selectablePlaceholder(false)
|
->selectablePlaceholder(false)
|
||||||
->afterStateUpdated(fn ($state) => $this->dispatch('setLanguage', lang: $state))
|
->afterStateUpdated(fn ($state) => $this->dispatch('setLanguage', lang: $state))
|
||||||
->default(fn () => EditorLanguages::fromWithAlias(pathinfo($this->path, PATHINFO_EXTENSION))),
|
->default(fn () => EditorLanguages::fromWithAlias(pathinfo($this->path, PATHINFO_EXTENSION))),
|
||||||
MonacoEditor::make('editor')
|
// TODO MonacoEditor::make('editor')
|
||||||
->hiddenLabel()
|
// ->hiddenLabel()
|
||||||
->showPlaceholder(false)
|
// ->showPlaceholder(false)
|
||||||
->default(function () {
|
// ->default(function () {
|
||||||
try {
|
// try {
|
||||||
return $this->getDaemonFileRepository()->getContent($this->path, config('panel.files.max_edit_size'));
|
// return $this->getDaemonFileRepository()->getContent($this->path, config('panel.files.max_edit_size'));
|
||||||
} catch (FileSizeTooLargeException) {
|
// } catch (FileSizeTooLargeException) {
|
||||||
AlertBanner::make()
|
// AlertBanner::make()
|
||||||
->title('File too large!')
|
// ->title('File too large!')
|
||||||
->body('<code>' . $this->path . '</code> Max is ' . convert_bytes_to_readable(config('panel.files.max_edit_size')))
|
// ->body('<code>' . $this->path . '</code> Max is ' . convert_bytes_to_readable(config('panel.files.max_edit_size')))
|
||||||
->danger()
|
// ->danger()
|
||||||
->closable()
|
// ->closable()
|
||||||
->send();
|
// ->send();
|
||||||
|
//
|
||||||
$this->redirect(ListFiles::getUrl());
|
// $this->redirect(ListFiles::getUrl());
|
||||||
} catch (FileNotFoundException) {
|
// } catch (FileNotFoundException) {
|
||||||
AlertBanner::make()
|
// AlertBanner::make()
|
||||||
->title('File Not found!')
|
// ->title('File Not found!')
|
||||||
->body('<code>' . $this->path . '</code>')
|
// ->body('<code>' . $this->path . '</code>')
|
||||||
->danger()
|
// ->danger()
|
||||||
->closable()
|
// ->closable()
|
||||||
->send();
|
// ->send();
|
||||||
|
//
|
||||||
$this->redirect(ListFiles::getUrl());
|
// $this->redirect(ListFiles::getUrl());
|
||||||
} catch (FileNotEditableException) {
|
// } catch (FileNotEditableException) {
|
||||||
AlertBanner::make()
|
// AlertBanner::make()
|
||||||
->title('Could not edit directory!')
|
// ->title('Could not edit directory!')
|
||||||
->body('<code>' . $this->path . '</code>')
|
// ->body('<code>' . $this->path . '</code>')
|
||||||
->danger()
|
// ->danger()
|
||||||
->closable()
|
// ->closable()
|
||||||
->send();
|
// ->send();
|
||||||
|
//
|
||||||
$this->redirect(ListFiles::getUrl());
|
// $this->redirect(ListFiles::getUrl());
|
||||||
}
|
// }
|
||||||
})
|
// })
|
||||||
->language(fn (Get $get) => $get('lang'))
|
// ->language(fn (Get $get) => $get('lang'))
|
||||||
->view('filament.plugins.monaco-editor'),
|
// ->view('filament.plugins.monaco-editor'),
|
||||||
]),
|
]),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
namespace App\Filament\Server\Resources\FileResource\Pages;
|
namespace App\Filament\Server\Resources\FileResource\Pages;
|
||||||
|
|
||||||
use AbdelhamidErrahmouni\FilamentMonacoEditor\MonacoEditor;
|
|
||||||
use App\Enums\EditorLanguages;
|
use App\Enums\EditorLanguages;
|
||||||
use App\Facades\Activity;
|
use App\Facades\Activity;
|
||||||
use App\Filament\Server\Resources\FileResource;
|
use App\Filament\Server\Resources\FileResource;
|
||||||
@ -19,21 +18,21 @@ use Filament\Forms\Components\CheckboxList;
|
|||||||
use Filament\Forms\Components\FileUpload;
|
use Filament\Forms\Components\FileUpload;
|
||||||
use Filament\Forms\Components\Placeholder;
|
use Filament\Forms\Components\Placeholder;
|
||||||
use Filament\Forms\Components\Select;
|
use Filament\Forms\Components\Select;
|
||||||
use Filament\Forms\Components\Tabs;
|
use Filament\Schemas\Components\Tabs;
|
||||||
use Filament\Forms\Components\Tabs\Tab;
|
use Filament\Schemas\Components\Tabs\Tab;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Get;
|
use Filament\Schemas\Components\Utilities\Get;
|
||||||
use Filament\Notifications\Notification;
|
use Filament\Notifications\Notification;
|
||||||
use Filament\Panel;
|
use Filament\Panel;
|
||||||
use Filament\Resources\Pages\ListRecords;
|
use Filament\Resources\Pages\ListRecords;
|
||||||
use Filament\Resources\Pages\PageRegistration;
|
use Filament\Resources\Pages\PageRegistration;
|
||||||
use Filament\Tables\Actions\Action;
|
use Filament\Actions\Action;
|
||||||
use Filament\Tables\Actions\ActionGroup;
|
use Filament\Actions\ActionGroup;
|
||||||
use Filament\Tables\Actions\BulkAction;
|
use Filament\Actions\BulkAction;
|
||||||
use Filament\Tables\Actions\BulkActionGroup;
|
use Filament\Actions\BulkActionGroup;
|
||||||
use Filament\Tables\Actions\DeleteAction;
|
use Filament\Actions\DeleteAction;
|
||||||
use Filament\Tables\Actions\DeleteBulkAction;
|
use Filament\Actions\DeleteBulkAction;
|
||||||
use Filament\Tables\Actions\EditAction;
|
use Filament\Actions\EditAction;
|
||||||
use Filament\Tables\Columns\TextColumn;
|
use Filament\Tables\Columns\TextColumn;
|
||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
use Illuminate\Database\Eloquent\Collection;
|
use Illuminate\Database\Eloquent\Collection;
|
||||||
@ -147,7 +146,7 @@ class ListFiles extends ListRecords
|
|||||||
->disabled($this->isDisabled)
|
->disabled($this->isDisabled)
|
||||||
->label('Rename')
|
->label('Rename')
|
||||||
->icon('tabler-forms')
|
->icon('tabler-forms')
|
||||||
->form([
|
->schema([
|
||||||
TextInput::make('name')
|
TextInput::make('name')
|
||||||
->label('File name')
|
->label('File name')
|
||||||
->default(fn (File $file) => $file->name)
|
->default(fn (File $file) => $file->name)
|
||||||
@ -203,7 +202,7 @@ class ListFiles extends ListRecords
|
|||||||
->disabled($this->isDisabled)
|
->disabled($this->isDisabled)
|
||||||
->label('Move')
|
->label('Move')
|
||||||
->icon('tabler-replace')
|
->icon('tabler-replace')
|
||||||
->form([
|
->schema([
|
||||||
TextInput::make('location')
|
TextInput::make('location')
|
||||||
->label('New location')
|
->label('New location')
|
||||||
->hint('Enter the location of this file or folder, relative to the current directory.')
|
->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)
|
->disabled($this->isDisabled)
|
||||||
->label('Permissions')
|
->label('Permissions')
|
||||||
->icon('tabler-license')
|
->icon('tabler-license')
|
||||||
->form([
|
->schema([
|
||||||
CheckboxList::make('owner')
|
CheckboxList::make('owner')
|
||||||
->bulkToggleable()
|
->bulkToggleable()
|
||||||
->options([
|
->options([
|
||||||
@ -296,7 +295,7 @@ class ListFiles extends ListRecords
|
|||||||
->disabled($this->isDisabled)
|
->disabled($this->isDisabled)
|
||||||
->label('Archive')
|
->label('Archive')
|
||||||
->icon('tabler-archive')
|
->icon('tabler-archive')
|
||||||
->form([
|
->schema([
|
||||||
TextInput::make('name')
|
TextInput::make('name')
|
||||||
->label('Archive name')
|
->label('Archive name')
|
||||||
->placeholder(fn () => 'archive-' . str(Carbon::now()->toRfc3339String())->replace(':', '')->before('+0000') . 'Z')
|
->placeholder(fn () => 'archive-' . str(Carbon::now()->toRfc3339String())->replace(':', '')->before('+0000') . 'Z')
|
||||||
@ -363,7 +362,7 @@ class ListFiles extends ListRecords
|
|||||||
BulkAction::make('move')
|
BulkAction::make('move')
|
||||||
->authorize(fn () => auth()->user()->can(Permission::ACTION_FILE_UPDATE, $server))
|
->authorize(fn () => auth()->user()->can(Permission::ACTION_FILE_UPDATE, $server))
|
||||||
->disabled($this->isDisabled)
|
->disabled($this->isDisabled)
|
||||||
->form([
|
->schema([
|
||||||
TextInput::make('location')
|
TextInput::make('location')
|
||||||
->label('Directory')
|
->label('Directory')
|
||||||
->hint('Enter the new directory, relative to the current directory.')
|
->hint('Enter the new directory, relative to the current directory.')
|
||||||
@ -392,7 +391,7 @@ class ListFiles extends ListRecords
|
|||||||
BulkAction::make('archive')
|
BulkAction::make('archive')
|
||||||
->authorize(fn () => auth()->user()->can(Permission::ACTION_FILE_ARCHIVE, $server))
|
->authorize(fn () => auth()->user()->can(Permission::ACTION_FILE_ARCHIVE, $server))
|
||||||
->disabled($this->isDisabled)
|
->disabled($this->isDisabled)
|
||||||
->form([
|
->schema([
|
||||||
TextInput::make('name')
|
TextInput::make('name')
|
||||||
->label('Archive name')
|
->label('Archive name')
|
||||||
->placeholder(fn () => 'archive-' . str(Carbon::now()->toRfc3339String())->replace(':', '')->before('+0000') . 'Z')
|
->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']))
|
->property('file', join_paths($this->path, $data['name']))
|
||||||
->log();
|
->log();
|
||||||
})
|
})
|
||||||
->form([
|
->schema([
|
||||||
TextInput::make('name')
|
TextInput::make('name')
|
||||||
->label('File Name')
|
->label('File Name')
|
||||||
->required(),
|
->required(),
|
||||||
@ -488,7 +487,7 @@ class ListFiles extends ListRecords
|
|||||||
->property(['directory' => $this->path, 'name' => $data['name']])
|
->property(['directory' => $this->path, 'name' => $data['name']])
|
||||||
->log();
|
->log();
|
||||||
})
|
})
|
||||||
->form([
|
->schema([
|
||||||
TextInput::make('name')
|
TextInput::make('name')
|
||||||
->label('Folder Name')
|
->label('Folder Name')
|
||||||
->required(),
|
->required(),
|
||||||
@ -519,7 +518,7 @@ class ListFiles extends ListRecords
|
|||||||
|
|
||||||
return redirect(ListFiles::getUrl(['path' => $this->path]));
|
return redirect(ListFiles::getUrl(['path' => $this->path]));
|
||||||
})
|
})
|
||||||
->form([
|
->schema([
|
||||||
Tabs::make()
|
Tabs::make()
|
||||||
->contained(false)
|
->contained(false)
|
||||||
->schema([
|
->schema([
|
||||||
@ -548,7 +547,7 @@ class ListFiles extends ListRecords
|
|||||||
->disabled($this->isDisabled)
|
->disabled($this->isDisabled)
|
||||||
->label('Global Search')
|
->label('Global Search')
|
||||||
->modalSubmitActionLabel('Search')
|
->modalSubmitActionLabel('Search')
|
||||||
->form([
|
->schema([
|
||||||
TextInput::make('searchTerm')
|
TextInput::make('searchTerm')
|
||||||
->placeholder('Enter a search term, e.g. *.txt')
|
->placeholder('Enter a search term, e.g. *.txt')
|
||||||
->regex('/^[^*]*\*?[^*]*$/')
|
->regex('/^[^*]*\*?[^*]*$/')
|
||||||
|
@ -10,20 +10,21 @@ use App\Models\Schedule;
|
|||||||
use App\Models\Server;
|
use App\Models\Server;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Exception;
|
use Exception;
|
||||||
|
use Filament\Actions\Action;
|
||||||
use Filament\Facades\Filament;
|
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\Select;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Components\Toggle;
|
use Filament\Forms\Components\Toggle;
|
||||||
use Filament\Forms\Components\ToggleButtons;
|
use Filament\Forms\Components\ToggleButtons;
|
||||||
use Filament\Forms\Form;
|
use Filament\Schemas\Components\Actions;
|
||||||
use Filament\Forms\Set;
|
use Filament\Schemas\Components\Form;
|
||||||
|
use Filament\Schemas\Components\Section;
|
||||||
|
use Filament\Schemas\Components\Utilities\Set;
|
||||||
use Filament\Notifications\Notification;
|
use Filament\Notifications\Notification;
|
||||||
use Filament\Resources\Resource;
|
use Filament\Resources\Resource;
|
||||||
use Filament\Support\Exceptions\Halt;
|
use Filament\Support\Exceptions\Halt;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
|
|
||||||
class ScheduleResource extends Resource
|
class ScheduleResource extends Resource
|
||||||
{
|
{
|
||||||
@ -31,7 +32,7 @@ class ScheduleResource extends Resource
|
|||||||
|
|
||||||
protected static ?int $navigationSort = 4;
|
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
|
// TODO: find better way handle server conflict state
|
||||||
public static function canAccess(): bool
|
public static function canAccess(): bool
|
||||||
@ -66,9 +67,9 @@ class ScheduleResource extends Resource
|
|||||||
return auth()->user()->can(Permission::ACTION_SCHEDULE_DELETE, Filament::getTenant());
|
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([
|
->columns([
|
||||||
'default' => 4,
|
'default' => 4,
|
||||||
'lg' => 5,
|
'lg' => 5,
|
||||||
@ -203,7 +204,7 @@ class ScheduleResource extends Resource
|
|||||||
}),
|
}),
|
||||||
Action::make('every_x_minutes')
|
Action::make('every_x_minutes')
|
||||||
->disabled(fn (string $operation) => $operation === 'view')
|
->disabled(fn (string $operation) => $operation === 'view')
|
||||||
->form([
|
->schema([
|
||||||
TextInput::make('x')
|
TextInput::make('x')
|
||||||
->label('')
|
->label('')
|
||||||
->numeric()
|
->numeric()
|
||||||
@ -221,7 +222,7 @@ class ScheduleResource extends Resource
|
|||||||
}),
|
}),
|
||||||
Action::make('every_x_hours')
|
Action::make('every_x_hours')
|
||||||
->disabled(fn (string $operation) => $operation === 'view')
|
->disabled(fn (string $operation) => $operation === 'view')
|
||||||
->form([
|
->schema([
|
||||||
TextInput::make('x')
|
TextInput::make('x')
|
||||||
->label('')
|
->label('')
|
||||||
->numeric()
|
->numeric()
|
||||||
@ -239,7 +240,7 @@ class ScheduleResource extends Resource
|
|||||||
}),
|
}),
|
||||||
Action::make('every_x_days')
|
Action::make('every_x_days')
|
||||||
->disabled(fn (string $operation) => $operation === 'view')
|
->disabled(fn (string $operation) => $operation === 'view')
|
||||||
->form([
|
->schema([
|
||||||
TextInput::make('x')
|
TextInput::make('x')
|
||||||
->label('')
|
->label('')
|
||||||
->numeric()
|
->numeric()
|
||||||
@ -257,7 +258,7 @@ class ScheduleResource extends Resource
|
|||||||
}),
|
}),
|
||||||
Action::make('every_x_months')
|
Action::make('every_x_months')
|
||||||
->disabled(fn (string $operation) => $operation === 'view')
|
->disabled(fn (string $operation) => $operation === 'view')
|
||||||
->form([
|
->schema([
|
||||||
TextInput::make('x')
|
TextInput::make('x')
|
||||||
->label('')
|
->label('')
|
||||||
->numeric()
|
->numeric()
|
||||||
@ -275,7 +276,7 @@ class ScheduleResource extends Resource
|
|||||||
}),
|
}),
|
||||||
Action::make('every_x_day_of_week')
|
Action::make('every_x_day_of_week')
|
||||||
->disabled(fn (string $operation) => $operation === 'view')
|
->disabled(fn (string $operation) => $operation === 'view')
|
||||||
->form([
|
->schema([
|
||||||
Select::make('x')
|
Select::make('x')
|
||||||
->label('')
|
->label('')
|
||||||
->prefix('Every')
|
->prefix('Every')
|
||||||
|
@ -5,7 +5,7 @@ namespace App\Filament\Server\Resources\ScheduleResource\Pages;
|
|||||||
use App\Facades\Activity;
|
use App\Facades\Activity;
|
||||||
use App\Filament\Server\Resources\ScheduleResource;
|
use App\Filament\Server\Resources\ScheduleResource;
|
||||||
use App\Models\Schedule;
|
use App\Models\Schedule;
|
||||||
use Filament\Actions;
|
use Filament\Actions\DeleteAction;
|
||||||
use Filament\Resources\Pages\EditRecord;
|
use Filament\Resources\Pages\EditRecord;
|
||||||
|
|
||||||
class EditSchedule extends EditRecord
|
class EditSchedule extends EditRecord
|
||||||
@ -38,7 +38,7 @@ class EditSchedule extends EditRecord
|
|||||||
protected function getHeaderActions(): array
|
protected function getHeaderActions(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
Actions\DeleteAction::make()
|
DeleteAction::make()
|
||||||
->after(function ($record) {
|
->after(function ($record) {
|
||||||
Activity::event('server:schedule.delete')
|
Activity::event('server:schedule.delete')
|
||||||
->property('name', $record->name)
|
->property('name', $record->name)
|
||||||
|
@ -8,9 +8,9 @@ use App\Models\Schedule;
|
|||||||
use App\Filament\Components\Tables\Columns\DateTimeColumn;
|
use App\Filament\Components\Tables\Columns\DateTimeColumn;
|
||||||
use Filament\Actions;
|
use Filament\Actions;
|
||||||
use Filament\Resources\Pages\ListRecords;
|
use Filament\Resources\Pages\ListRecords;
|
||||||
use Filament\Tables\Actions\DeleteAction;
|
use Filament\Actions\DeleteAction;
|
||||||
use Filament\Tables\Actions\EditAction;
|
use Filament\Actions\EditAction;
|
||||||
use Filament\Tables\Actions\ViewAction;
|
use Filament\Actions\ViewAction;
|
||||||
use Filament\Tables\Columns\IconColumn;
|
use Filament\Tables\Columns\IconColumn;
|
||||||
use Filament\Tables\Columns\TextColumn;
|
use Filament\Tables\Columns\TextColumn;
|
||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
|
@ -7,7 +7,8 @@ use App\Filament\Server\Resources\ScheduleResource;
|
|||||||
use App\Models\Permission;
|
use App\Models\Permission;
|
||||||
use App\Models\Schedule;
|
use App\Models\Schedule;
|
||||||
use App\Services\Schedules\ProcessScheduleService;
|
use App\Services\Schedules\ProcessScheduleService;
|
||||||
use Filament\Actions;
|
use Filament\Actions\Action;
|
||||||
|
use Filament\Actions\EditAction;
|
||||||
use Filament\Facades\Filament;
|
use Filament\Facades\Filament;
|
||||||
use Filament\Resources\Pages\ViewRecord;
|
use Filament\Resources\Pages\ViewRecord;
|
||||||
|
|
||||||
@ -18,7 +19,7 @@ class ViewSchedule extends ViewRecord
|
|||||||
protected function getHeaderActions(): array
|
protected function getHeaderActions(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
Actions\Action::make('runNow')
|
Action::make('runNow')
|
||||||
->authorize(fn () => auth()->user()->can(Permission::ACTION_SCHEDULE_UPDATE, Filament::getTenant()))
|
->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'))
|
->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')
|
->color(fn (Schedule $schedule) => $schedule->tasks->count() === 0 || $schedule->is_processing ? 'warning' : 'primary')
|
||||||
@ -33,7 +34,7 @@ class ViewSchedule extends ViewRecord
|
|||||||
|
|
||||||
$this->fillForm();
|
$this->fillForm();
|
||||||
}),
|
}),
|
||||||
Actions\EditAction::make(),
|
EditAction::make(),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,16 +6,16 @@ use App\Facades\Activity;
|
|||||||
use App\Models\Schedule;
|
use App\Models\Schedule;
|
||||||
use App\Models\Task;
|
use App\Models\Task;
|
||||||
use Filament\Forms\Components\Field;
|
use Filament\Forms\Components\Field;
|
||||||
use Filament\Tables\Actions\DeleteAction;
|
use Filament\Actions\DeleteAction;
|
||||||
use Filament\Forms\Components\Select;
|
use Filament\Forms\Components\Select;
|
||||||
use Filament\Forms\Components\Textarea;
|
use Filament\Forms\Components\Textarea;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Components\Toggle;
|
use Filament\Forms\Components\Toggle;
|
||||||
use Filament\Forms\Get;
|
use Filament\Schemas\Components\Utilities\Get;
|
||||||
use Filament\Tables\Actions\EditAction;
|
use Filament\Actions\EditAction;
|
||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
use Filament\Resources\RelationManagers\RelationManager;
|
use Filament\Resources\RelationManagers\RelationManager;
|
||||||
use Filament\Tables\Actions\CreateAction;
|
use Filament\Actions\CreateAction;
|
||||||
use Filament\Tables\Columns\IconColumn;
|
use Filament\Tables\Columns\IconColumn;
|
||||||
use Filament\Tables\Columns\TextColumn;
|
use Filament\Tables\Columns\TextColumn;
|
||||||
|
|
||||||
@ -99,8 +99,8 @@ class TasksRelationManager extends RelationManager
|
|||||||
])
|
])
|
||||||
->actions([
|
->actions([
|
||||||
EditAction::make()
|
EditAction::make()
|
||||||
->form($this->getTaskForm($schedule))
|
->schema($this->getTaskForm($schedule))
|
||||||
->mutateFormDataUsing(function ($data) {
|
->mutateDataUsing(function ($data) {
|
||||||
$data['payload'] ??= '';
|
$data['payload'] ??= '';
|
||||||
|
|
||||||
return $data;
|
return $data;
|
||||||
@ -132,7 +132,7 @@ class TasksRelationManager extends RelationManager
|
|||||||
->createAnother(false)
|
->createAnother(false)
|
||||||
->label(fn () => $schedule->tasks()->count() >= config('panel.client_features.schedules.per_schedule_task_limit', 10) ? 'Task Limit Reached' : 'Create Task')
|
->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))
|
->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) {
|
->action(function ($data) use ($schedule) {
|
||||||
$sequenceId = ($schedule->tasks()->orderByDesc('sequence_id')->first()->sequence_id ?? 0) + 1;
|
$sequenceId = ($schedule->tasks()->orderByDesc('sequence_id')->first()->sequence_id ?? 0) + 1;
|
||||||
|
|
||||||
|
@ -9,19 +9,19 @@ use App\Models\User;
|
|||||||
use App\Services\Subusers\SubuserDeletionService;
|
use App\Services\Subusers\SubuserDeletionService;
|
||||||
use App\Services\Subusers\SubuserUpdateService;
|
use App\Services\Subusers\SubuserUpdateService;
|
||||||
use Filament\Facades\Filament;
|
use Filament\Facades\Filament;
|
||||||
use Filament\Forms\Components\Actions;
|
use Filament\Actions;
|
||||||
use Filament\Forms\Components\Actions\Action;
|
use Filament\Actions\Action;
|
||||||
use Filament\Forms\Components\CheckboxList;
|
use Filament\Forms\Components\CheckboxList;
|
||||||
use Filament\Forms\Components\Grid;
|
use Filament\Schemas\Components\Grid;
|
||||||
use Filament\Forms\Components\Section;
|
use Filament\Schemas\Components\Section;
|
||||||
use Filament\Forms\Components\Tabs;
|
use Filament\Schemas\Components\Tabs;
|
||||||
use Filament\Forms\Components\Tabs\Tab;
|
use Filament\Schemas\Components\Tabs\Tab;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Set;
|
use Filament\Schemas\Components\Utilities\Set;
|
||||||
use Filament\Notifications\Notification;
|
use Filament\Notifications\Notification;
|
||||||
use Filament\Tables\Actions\DeleteAction;
|
use Filament\Actions\DeleteAction;
|
||||||
use Filament\Resources\Resource;
|
use Filament\Resources\Resource;
|
||||||
use Filament\Tables\Actions\EditAction;
|
use Filament\Actions\EditAction;
|
||||||
use Filament\Tables\Columns\ImageColumn;
|
use Filament\Tables\Columns\ImageColumn;
|
||||||
use Filament\Tables\Columns\TextColumn;
|
use Filament\Tables\Columns\TextColumn;
|
||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
@ -33,7 +33,7 @@ class UserResource extends Resource
|
|||||||
|
|
||||||
protected static ?int $navigationSort = 5;
|
protected static ?int $navigationSort = 5;
|
||||||
|
|
||||||
protected static ?string $navigationIcon = 'tabler-users';
|
protected static string | \BackedEnum | null $navigationIcon = 'tabler-users';
|
||||||
|
|
||||||
protected static ?string $tenantOwnershipRelationshipName = 'subServers';
|
protected static ?string $tenantOwnershipRelationshipName = 'subServers';
|
||||||
|
|
||||||
@ -136,7 +136,7 @@ class UserResource extends Resource
|
|||||||
|
|
||||||
return redirect(self::getUrl(tenant: $server));
|
return redirect(self::getUrl(tenant: $server));
|
||||||
})
|
})
|
||||||
->form([
|
->schema([
|
||||||
Grid::make()
|
Grid::make()
|
||||||
->columnSpanFull()
|
->columnSpanFull()
|
||||||
->columns([
|
->columns([
|
||||||
|
@ -10,16 +10,15 @@ use App\Services\Subusers\SubuserCreationService;
|
|||||||
use Exception;
|
use Exception;
|
||||||
use Filament\Actions;
|
use Filament\Actions;
|
||||||
use Filament\Facades\Filament;
|
use Filament\Facades\Filament;
|
||||||
use Filament\Forms\Components\Actions as assignAll;
|
use Filament\Actions\Action;
|
||||||
use Filament\Forms\Components\Actions\Action;
|
|
||||||
use Filament\Forms\Components\CheckboxList;
|
use Filament\Forms\Components\CheckboxList;
|
||||||
use Filament\Forms\Components\Grid;
|
use Filament\Schemas\Components\Grid;
|
||||||
use Filament\Forms\Components\Section;
|
use Filament\Schemas\Components\Section;
|
||||||
use Filament\Forms\Components\Tabs;
|
use Filament\Schemas\Components\Tabs;
|
||||||
use Filament\Forms\Components\Tabs\Tab;
|
use Filament\Schemas\Components\Tabs\Tab;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Get;
|
use Filament\Schemas\Components\Utilities\Get;
|
||||||
use Filament\Forms\Set;
|
use Filament\Schemas\Components\Utilities\Set;
|
||||||
use Filament\Notifications\Notification;
|
use Filament\Notifications\Notification;
|
||||||
use Filament\Resources\Pages\ListRecords;
|
use Filament\Resources\Pages\ListRecords;
|
||||||
|
|
||||||
@ -37,7 +36,7 @@ class ListUsers extends ListRecords
|
|||||||
->label('Invite User')
|
->label('Invite User')
|
||||||
->createAnother(false)
|
->createAnother(false)
|
||||||
->authorize(fn () => auth()->user()->can(Permission::ACTION_USER_CREATE, $server))
|
->authorize(fn () => auth()->user()->can(Permission::ACTION_USER_CREATE, $server))
|
||||||
->form([
|
->schema([
|
||||||
Grid::make()
|
Grid::make()
|
||||||
->columnSpanFull()
|
->columnSpanFull()
|
||||||
->columns([
|
->columns([
|
||||||
@ -57,7 +56,7 @@ class ListUsers extends ListRecords
|
|||||||
'lg' => 5,
|
'lg' => 5,
|
||||||
])
|
])
|
||||||
->required(),
|
->required(),
|
||||||
assignAll::make([
|
Actions::make([
|
||||||
Action::make('assignAll')
|
Action::make('assignAll')
|
||||||
->label('Assign All')
|
->label('Assign All')
|
||||||
->action(function (Set $set, Get $get) {
|
->action(function (Set $set, Get $get) {
|
||||||
|
@ -16,7 +16,7 @@ use Livewire\Attributes\On;
|
|||||||
|
|
||||||
class ServerConsole extends Widget
|
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';
|
protected int|string|array $columnSpan = 'full';
|
||||||
|
|
||||||
|
@ -10,9 +10,9 @@ use Illuminate\Support\Number;
|
|||||||
|
|
||||||
class ServerCpuChart extends ChartWidget
|
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;
|
public ?Server $server = null;
|
||||||
|
|
||||||
|
@ -10,9 +10,9 @@ use Illuminate\Support\Number;
|
|||||||
|
|
||||||
class ServerMemoryChart extends ChartWidget
|
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;
|
public ?Server $server = null;
|
||||||
|
|
||||||
|
@ -9,11 +9,11 @@ use Filament\Widgets\ChartWidget;
|
|||||||
|
|
||||||
class ServerNetworkChart extends 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;
|
public ?Server $server = null;
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ use Illuminate\Support\Number;
|
|||||||
|
|
||||||
class ServerOverview extends StatsOverviewWidget
|
class ServerOverview extends StatsOverviewWidget
|
||||||
{
|
{
|
||||||
protected static ?string $pollingInterval = '1s';
|
protected ?string $pollingInterval = '1s';
|
||||||
|
|
||||||
public ?Server $server = null;
|
public ?Server $server = null;
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ class ServerInstalledListener
|
|||||||
->title('Server ' . ($event->initialInstall ? 'Installation' : 'Reinstallation') . ' ' . ($event->successful ? 'completed' : 'failed'))
|
->title('Server ' . ($event->initialInstall ? 'Installation' : 'Reinstallation') . ' ' . ($event->successful ? 'completed' : 'failed'))
|
||||||
->body('Server Name: ' . $event->server->name)
|
->body('Server Name: ' . $event->server->name)
|
||||||
->actions([
|
->actions([
|
||||||
Action::make('view')
|
\Filament\Actions\Action::make('view')
|
||||||
->button()
|
->button()
|
||||||
->label('Open Server')
|
->label('Open Server')
|
||||||
->markAsRead()
|
->markAsRead()
|
||||||
|
@ -19,7 +19,7 @@ class SubUserAddedListener
|
|||||||
->title('Added to Server')
|
->title('Added to Server')
|
||||||
->body('You have been added as a subuser to ' . $event->subuser->server->name . '.')
|
->body('You have been added as a subuser to ' . $event->subuser->server->name . '.')
|
||||||
->actions([
|
->actions([
|
||||||
Action::make('view')
|
\Filament\Actions\Action::make('view')
|
||||||
->button()
|
->button()
|
||||||
->label('Open Server')
|
->label('Open Server')
|
||||||
->markAsRead()
|
->markAsRead()
|
||||||
|
@ -14,14 +14,14 @@ use App\Services\Users\UserCreationService;
|
|||||||
use App\Traits\CheckMigrationsTrait;
|
use App\Traits\CheckMigrationsTrait;
|
||||||
use App\Traits\EnvironmentWriterTrait;
|
use App\Traits\EnvironmentWriterTrait;
|
||||||
use Exception;
|
use Exception;
|
||||||
use Filament\Forms\Components\Actions\Action;
|
use Filament\Actions\Action;
|
||||||
use Filament\Forms\Components\Wizard;
|
use Filament\Schemas\Components\Wizard;
|
||||||
use Filament\Forms\Concerns\InteractsWithForms;
|
use Filament\Forms\Concerns\InteractsWithForms;
|
||||||
use Filament\Forms\Contracts\HasForms;
|
use Filament\Forms\Contracts\HasForms;
|
||||||
use Filament\Forms\Form;
|
use Filament\Schemas\Components\Form;
|
||||||
use Filament\Notifications\Notification;
|
use Filament\Notifications\Notification;
|
||||||
use Filament\Pages\SimplePage;
|
use Filament\Pages\SimplePage;
|
||||||
use Filament\Support\Enums\MaxWidth;
|
use Filament\Support\Enums\Width;
|
||||||
use Filament\Support\Exceptions\Halt;
|
use Filament\Support\Exceptions\Halt;
|
||||||
use Illuminate\Support\Facades\Artisan;
|
use Illuminate\Support\Facades\Artisan;
|
||||||
use Illuminate\Support\Facades\Blade;
|
use Illuminate\Support\Facades\Blade;
|
||||||
@ -36,14 +36,13 @@ class PanelInstaller extends SimplePage implements HasForms
|
|||||||
use EnvironmentWriterTrait;
|
use EnvironmentWriterTrait;
|
||||||
use InteractsWithForms;
|
use InteractsWithForms;
|
||||||
|
|
||||||
/** @var array<mixed> */
|
|
||||||
public array $data = [];
|
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
|
public static function isInstalled(): bool
|
||||||
|
@ -7,8 +7,8 @@ use Exception;
|
|||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Components\ToggleButtons;
|
use Filament\Forms\Components\ToggleButtons;
|
||||||
use Filament\Forms\Components\Wizard\Step;
|
use Filament\Forms\Components\Wizard\Step;
|
||||||
use Filament\Forms\Get;
|
use Filament\Schemas\Components\Utilities\Get;
|
||||||
use Filament\Forms\Set;
|
use Filament\Schemas\Components\Utilities\Set;
|
||||||
use Filament\Notifications\Notification;
|
use Filament\Notifications\Notification;
|
||||||
use Filament\Support\Exceptions\Halt;
|
use Filament\Support\Exceptions\Halt;
|
||||||
use Illuminate\Foundation\Application;
|
use Illuminate\Foundation\Application;
|
||||||
@ -21,9 +21,9 @@ class CacheStep
|
|||||||
'redis' => 'Redis',
|
'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')
|
->label('Cache')
|
||||||
->columns()
|
->columns()
|
||||||
->schema([
|
->schema([
|
||||||
|
@ -7,8 +7,8 @@ use Exception;
|
|||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Components\ToggleButtons;
|
use Filament\Forms\Components\ToggleButtons;
|
||||||
use Filament\Forms\Components\Wizard\Step;
|
use Filament\Forms\Components\Wizard\Step;
|
||||||
use Filament\Forms\Get;
|
use Filament\Schemas\Components\Utilities\Get;
|
||||||
use Filament\Forms\Set;
|
use Filament\Schemas\Components\Utilities\Set;
|
||||||
use Filament\Notifications\Notification;
|
use Filament\Notifications\Notification;
|
||||||
use Filament\Support\Exceptions\Halt;
|
use Filament\Support\Exceptions\Halt;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
@ -22,9 +22,9 @@ class DatabaseStep
|
|||||||
'pgsql' => 'PostgreSQL',
|
'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')
|
->label('Database')
|
||||||
->columns()
|
->columns()
|
||||||
->schema([
|
->schema([
|
||||||
|
@ -3,15 +3,15 @@
|
|||||||
namespace App\Livewire\Installer\Steps;
|
namespace App\Livewire\Installer\Steps;
|
||||||
|
|
||||||
use App\Livewire\Installer\PanelInstaller;
|
use App\Livewire\Installer\PanelInstaller;
|
||||||
use Filament\Forms\Components\Fieldset;
|
use Filament\Schemas\Components\Fieldset;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Components\Wizard\Step;
|
use Filament\Forms\Components\Wizard\Step;
|
||||||
|
|
||||||
class EnvironmentStep
|
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')
|
->label('Environment')
|
||||||
->columns()
|
->columns()
|
||||||
->schema([
|
->schema([
|
||||||
|
@ -7,7 +7,7 @@ use Filament\Forms\Components\TextInput;
|
|||||||
use Filament\Forms\Components\Toggle;
|
use Filament\Forms\Components\Toggle;
|
||||||
use Filament\Forms\Components\ToggleButtons;
|
use Filament\Forms\Components\ToggleButtons;
|
||||||
use Filament\Forms\Components\Wizard\Step;
|
use Filament\Forms\Components\Wizard\Step;
|
||||||
use Filament\Forms\Get;
|
use Filament\Schemas\Components\Utilities\Get;
|
||||||
use Illuminate\Support\HtmlString;
|
use Illuminate\Support\HtmlString;
|
||||||
use Webbingbrasil\FilamentCopyActions\Forms\Actions\CopyAction;
|
use Webbingbrasil\FilamentCopyActions\Forms\Actions\CopyAction;
|
||||||
|
|
||||||
@ -19,9 +19,9 @@ class QueueStep
|
|||||||
'sync' => 'Sync',
|
'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')
|
->label('Queue')
|
||||||
->columns()
|
->columns()
|
||||||
->schema([
|
->schema([
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
namespace App\Livewire\Installer\Steps;
|
namespace App\Livewire\Installer\Steps;
|
||||||
|
|
||||||
use Filament\Forms\Components\Placeholder;
|
use Filament\Forms\Components\Placeholder;
|
||||||
use Filament\Forms\Components\Section;
|
|
||||||
use Filament\Forms\Components\Wizard\Step;
|
use Filament\Forms\Components\Wizard\Step;
|
||||||
use Filament\Notifications\Notification;
|
use Filament\Notifications\Notification;
|
||||||
use Filament\Support\Exceptions\Halt;
|
use Filament\Support\Exceptions\Halt;
|
||||||
@ -12,7 +11,7 @@ class RequirementsStep
|
|||||||
{
|
{
|
||||||
public const MIN_PHP_VERSION = '8.2';
|
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);
|
$compare = version_compare(phpversion(), self::MIN_PHP_VERSION);
|
||||||
$correctPhpVersion = $compare >= 0;
|
$correctPhpVersion = $compare >= 0;
|
||||||
@ -73,7 +72,7 @@ class RequirementsStep
|
|||||||
->visible(!$correctFolderPermissions),
|
->visible(!$correctFolderPermissions),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
return Step::make('requirements')
|
return \Filament\Schemas\Components\Wizard\Step::make('requirements')
|
||||||
->label('Server Requirements')
|
->label('Server Requirements')
|
||||||
->schema($fields)
|
->schema($fields)
|
||||||
->afterValidation(function () use ($correctPhpVersion, $allExtensionsInstalled, $correctFolderPermissions) {
|
->afterValidation(function () use ($correctPhpVersion, $allExtensionsInstalled, $correctFolderPermissions) {
|
||||||
|
@ -5,7 +5,7 @@ namespace App\Livewire\Installer\Steps;
|
|||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Components\ToggleButtons;
|
use Filament\Forms\Components\ToggleButtons;
|
||||||
use Filament\Forms\Components\Wizard\Step;
|
use Filament\Forms\Components\Wizard\Step;
|
||||||
use Filament\Forms\Get;
|
use Filament\Schemas\Components\Utilities\Get;
|
||||||
|
|
||||||
class SessionStep
|
class SessionStep
|
||||||
{
|
{
|
||||||
@ -16,9 +16,9 @@ class SessionStep
|
|||||||
'redis' => 'Redis',
|
'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')
|
->label('Session')
|
||||||
->schema([
|
->schema([
|
||||||
ToggleButtons::make('env_session.SESSION_DRIVER')
|
ToggleButtons::make('env_session.SESSION_DRIVER')
|
||||||
|
@ -39,7 +39,7 @@ class AdminPanelProvider extends PanelProvider
|
|||||||
->favicon(config('app.favicon', '/pelican.ico'))
|
->favicon(config('app.favicon', '/pelican.ico'))
|
||||||
->topNavigation(config('panel.filament.top-navigation', false))
|
->topNavigation(config('panel.filament.top-navigation', false))
|
||||||
->maxContentWidth(config('panel.filament.display-width', 'screen-2xl'))
|
->maxContentWidth(config('panel.filament.display-width', 'screen-2xl'))
|
||||||
->login(Login::class)
|
//->login(Login::class)
|
||||||
->passwordReset()
|
->passwordReset()
|
||||||
->userMenuItems([
|
->userMenuItems([
|
||||||
'profile' => MenuItem::make()
|
'profile' => MenuItem::make()
|
||||||
|
@ -38,7 +38,7 @@ class AppPanelProvider extends PanelProvider
|
|||||||
->maxContentWidth(config('panel.filament.display-width', 'screen-2xl'))
|
->maxContentWidth(config('panel.filament.display-width', 'screen-2xl'))
|
||||||
->navigation(false)
|
->navigation(false)
|
||||||
->profile(EditProfile::class, false)
|
->profile(EditProfile::class, false)
|
||||||
->login(Login::class)
|
//->login(Login::class)
|
||||||
->passwordReset()
|
->passwordReset()
|
||||||
->userMenuItems([
|
->userMenuItems([
|
||||||
MenuItem::make()
|
MenuItem::make()
|
||||||
|
@ -43,7 +43,7 @@ class ServerPanelProvider extends PanelProvider
|
|||||||
->favicon(config('app.favicon', '/pelican.ico'))
|
->favicon(config('app.favicon', '/pelican.ico'))
|
||||||
->topNavigation(config('panel.filament.top-navigation', false))
|
->topNavigation(config('panel.filament.top-navigation', false))
|
||||||
->maxContentWidth(config('panel.filament.display-width', 'screen-2xl'))
|
->maxContentWidth(config('panel.filament.display-width', 'screen-2xl'))
|
||||||
->login(Login::class)
|
//->login(Login::class)
|
||||||
->passwordReset()
|
->passwordReset()
|
||||||
->userMenuItems([
|
->userMenuItems([
|
||||||
'profile' => MenuItem::make()
|
'profile' => MenuItem::make()
|
||||||
|
@ -8,13 +8,13 @@
|
|||||||
"ext-mbstring": "*",
|
"ext-mbstring": "*",
|
||||||
"ext-pdo": "*",
|
"ext-pdo": "*",
|
||||||
"ext-zip": "*",
|
"ext-zip": "*",
|
||||||
"abdelhamiderrahmouni/filament-monaco-editor": "^0.2.5",
|
|
||||||
"aws/aws-sdk-php": "^3.342",
|
"aws/aws-sdk-php": "^3.342",
|
||||||
"calebporzio/sushi": "^2.5",
|
"calebporzio/sushi": "^2.5",
|
||||||
"chillerlan/php-qrcode": "^5.0.2",
|
"chillerlan/php-qrcode": "^5.0.2",
|
||||||
"dedoc/scramble": "^0.12.10",
|
"dedoc/scramble": "^0.12.10",
|
||||||
"doctrine/dbal": "~3.6.0",
|
"doctrine/dbal": "~3.6.0",
|
||||||
"filament/filament": "^3.3",
|
"filament/filament": "4.0",
|
||||||
|
"filament/upgrade": "^4.0@alpha",
|
||||||
"guzzlehttp/guzzle": "^7.9",
|
"guzzlehttp/guzzle": "^7.9",
|
||||||
"laravel/framework": "^12.10",
|
"laravel/framework": "^12.10",
|
||||||
"laravel/helpers": "^1.7",
|
"laravel/helpers": "^1.7",
|
||||||
@ -43,7 +43,6 @@
|
|||||||
"symfony/mailgun-mailer": "^7.2",
|
"symfony/mailgun-mailer": "^7.2",
|
||||||
"symfony/postmark-mailer": "^7.2",
|
"symfony/postmark-mailer": "^7.2",
|
||||||
"symfony/yaml": "^7.2",
|
"symfony/yaml": "^7.2",
|
||||||
"webbingbrasil/filament-copyactions": "^3.0.1",
|
|
||||||
"webmozart/assert": "~1.11.0"
|
"webmozart/assert": "~1.11.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
@ -99,6 +98,6 @@
|
|||||||
"php": "8.2"
|
"php": "8.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"minimum-stability": "stable",
|
"minimum-stability": "alpha",
|
||||||
"prefer-stable": true
|
"prefer-stable": true
|
||||||
}
|
}
|
||||||
|
1072
composer.lock
generated
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
Loading…
x
Reference in New Issue
Block a user