mirror of
https://github.com/pelican-dev/panel.git
synced 2025-11-01 19:26:52 +01:00
Refactor: add FilamentServiceProvider & globally make Select native(false) (#1836)
This commit is contained in:
parent
d38075e3cb
commit
e6aa76ef2c
@ -56,8 +56,7 @@ class JavaVersionSchema implements FeatureSchemaInterface
|
|||||||
->default(fn () => $server->image)
|
->default(fn () => $server->image)
|
||||||
->notIn(fn () => $server->image)
|
->notIn(fn () => $server->image)
|
||||||
->required()
|
->required()
|
||||||
->preload()
|
->preload(),
|
||||||
->native(false),
|
|
||||||
])
|
])
|
||||||
->action(function (array $data, DaemonServerRepository $serverRepository) use ($server) {
|
->action(function (array $data, DaemonServerRepository $serverRepository) use ($server) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@ -181,7 +181,6 @@ class Settings extends Page implements HasSchemas
|
|||||||
->schema([
|
->schema([
|
||||||
Select::make('FILAMENT_AVATAR_PROVIDER')
|
Select::make('FILAMENT_AVATAR_PROVIDER')
|
||||||
->label(trans('admin/setting.general.avatar_provider'))
|
->label(trans('admin/setting.general.avatar_provider'))
|
||||||
->native(false)
|
|
||||||
->options($this->avatarService->getMappings())
|
->options($this->avatarService->getMappings())
|
||||||
->selectablePlaceholder(false)
|
->selectablePlaceholder(false)
|
||||||
->default(env('FILAMENT_AVATAR_PROVIDER', config('panel.filament.avatar-provider'))),
|
->default(env('FILAMENT_AVATAR_PROVIDER', config('panel.filament.avatar-provider'))),
|
||||||
@ -217,7 +216,6 @@ class Settings extends Page implements HasSchemas
|
|||||||
->default(env('APP_2FA_REQUIRED', config('panel.auth.2fa_required'))),
|
->default(env('APP_2FA_REQUIRED', config('panel.auth.2fa_required'))),
|
||||||
Select::make('FILAMENT_WIDTH')
|
Select::make('FILAMENT_WIDTH')
|
||||||
->label(trans('admin/setting.general.display_width'))
|
->label(trans('admin/setting.general.display_width'))
|
||||||
->native(false)
|
|
||||||
->options(Width::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'))),
|
||||||
|
|||||||
@ -257,7 +257,6 @@ class CreateEgg extends CreateRecord
|
|||||||
->default('ghcr.io/pelican-eggs/installers:debian'),
|
->default('ghcr.io/pelican-eggs/installers:debian'),
|
||||||
Select::make('script_entry')
|
Select::make('script_entry')
|
||||||
->label(trans('admin/egg.script_entry'))
|
->label(trans('admin/egg.script_entry'))
|
||||||
->native(false)
|
|
||||||
->selectablePlaceholder(false)
|
->selectablePlaceholder(false)
|
||||||
->default('bash')
|
->default('bash')
|
||||||
->options([
|
->options([
|
||||||
|
|||||||
@ -248,7 +248,6 @@ class EditEgg extends EditRecord
|
|||||||
->placeholder('ghcr.io/pelican-eggs/installers:debian'),
|
->placeholder('ghcr.io/pelican-eggs/installers:debian'),
|
||||||
Select::make('script_entry')
|
Select::make('script_entry')
|
||||||
->label(trans('admin/egg.script_entry'))
|
->label(trans('admin/egg.script_entry'))
|
||||||
->native(false)
|
|
||||||
->selectablePlaceholder(false)
|
->selectablePlaceholder(false)
|
||||||
->options([
|
->options([
|
||||||
'bash' => 'bash',
|
'bash' => 'bash',
|
||||||
|
|||||||
@ -236,8 +236,7 @@ class UserResource extends Resource
|
|||||||
->default(fn () => config('app.timezone', 'UTC'))
|
->default(fn () => config('app.timezone', 'UTC'))
|
||||||
->selectablePlaceholder(false)
|
->selectablePlaceholder(false)
|
||||||
->options(fn () => collect(DateTimeZone::listIdentifiers())->mapWithKeys(fn ($tz) => [$tz => $tz]))
|
->options(fn () => collect(DateTimeZone::listIdentifiers())->mapWithKeys(fn ($tz) => [$tz => $tz]))
|
||||||
->searchable()
|
->searchable(),
|
||||||
->native(false),
|
|
||||||
Select::make('language')
|
Select::make('language')
|
||||||
->label(trans('profile.language'))
|
->label(trans('profile.language'))
|
||||||
->columnSpan([
|
->columnSpan([
|
||||||
@ -251,8 +250,7 @@ class UserResource extends Resource
|
|||||||
->default('en')
|
->default('en')
|
||||||
->searchable()
|
->searchable()
|
||||||
->selectablePlaceholder(false)
|
->selectablePlaceholder(false)
|
||||||
->options(fn (LanguageService $languageService) => $languageService->getAvailableLanguages())
|
->options(fn (LanguageService $languageService) => $languageService->getAvailableLanguages()),
|
||||||
->native(false),
|
|
||||||
FileUpload::make('avatar')
|
FileUpload::make('avatar')
|
||||||
->visible(fn (?User $user, FileUpload $fileUpload) => $user ? $fileUpload->getDisk()->exists($fileUpload->getDirectory() . '/' . $user->id . '.png') : false)
|
->visible(fn (?User $user, FileUpload $fileUpload) => $user ? $fileUpload->getDisk()->exists($fileUpload->getDirectory() . '/' . $user->id . '.png') : false)
|
||||||
->avatar()
|
->avatar()
|
||||||
|
|||||||
@ -21,8 +21,6 @@ class CopyFrom extends Select
|
|||||||
|
|
||||||
$this->searchable();
|
$this->searchable();
|
||||||
|
|
||||||
$this->native(false);
|
|
||||||
|
|
||||||
$this->live();
|
$this->live();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -132,8 +132,7 @@ class EditProfile extends BaseEditProfile
|
|||||||
->default(config('app.timezone', 'UTC'))
|
->default(config('app.timezone', 'UTC'))
|
||||||
->selectablePlaceholder(false)
|
->selectablePlaceholder(false)
|
||||||
->options(fn () => collect(DateTimeZone::listIdentifiers())->mapWithKeys(fn ($tz) => [$tz => $tz]))
|
->options(fn () => collect(DateTimeZone::listIdentifiers())->mapWithKeys(fn ($tz) => [$tz => $tz]))
|
||||||
->searchable()
|
->searchable(),
|
||||||
->native(false),
|
|
||||||
Select::make('language')
|
Select::make('language')
|
||||||
->label(trans('profile.language'))
|
->label(trans('profile.language'))
|
||||||
->required()
|
->required()
|
||||||
@ -143,8 +142,7 @@ class EditProfile extends BaseEditProfile
|
|||||||
->selectablePlaceholder(false)
|
->selectablePlaceholder(false)
|
||||||
->helperText(fn ($state, LanguageService $languageService) => new HtmlString($languageService->isLanguageTranslated($state) ? ''
|
->helperText(fn ($state, LanguageService $languageService) => new HtmlString($languageService->isLanguageTranslated($state) ? ''
|
||||||
: trans('profile.language_help', ['state' => $state]) . ' <u><a href="https://crowdin.com/project/pelican-dev/">Update On Crowdin</a></u>'))
|
: trans('profile.language_help', ['state' => $state]) . ' <u><a href="https://crowdin.com/project/pelican-dev/">Update On Crowdin</a></u>'))
|
||||||
->options(fn (LanguageService $languageService) => $languageService->getAvailableLanguages())
|
->options(fn (LanguageService $languageService) => $languageService->getAvailableLanguages()),
|
||||||
->native(false),
|
|
||||||
FileUpload::make('avatar')
|
FileUpload::make('avatar')
|
||||||
->visible(fn () => config('panel.filament.uploadable-avatars'))
|
->visible(fn () => config('panel.filament.uploadable-avatars'))
|
||||||
->avatar()
|
->avatar()
|
||||||
|
|||||||
@ -308,7 +308,6 @@ class ListFiles extends ListRecords
|
|||||||
Select::make('extension')
|
Select::make('extension')
|
||||||
->label(trans('server/file.actions.archive.extension'))
|
->label(trans('server/file.actions.archive.extension'))
|
||||||
->selectablePlaceholder(false)
|
->selectablePlaceholder(false)
|
||||||
->native(false)
|
|
||||||
->options([
|
->options([
|
||||||
'tar.gz' => 'tar.gz',
|
'tar.gz' => 'tar.gz',
|
||||||
'zip' => 'zip',
|
'zip' => 'zip',
|
||||||
@ -417,7 +416,6 @@ class ListFiles extends ListRecords
|
|||||||
Select::make('extension')
|
Select::make('extension')
|
||||||
->label(trans('server/file.actions.archive.extension'))
|
->label(trans('server/file.actions.archive.extension'))
|
||||||
->selectablePlaceholder(false)
|
->selectablePlaceholder(false)
|
||||||
->native(false)
|
|
||||||
->options([
|
->options([
|
||||||
'tar.gz' => 'tar.gz',
|
'tar.gz' => 'tar.gz',
|
||||||
'zip' => 'zip',
|
'zip' => 'zip',
|
||||||
|
|||||||
@ -255,8 +255,7 @@ class ScheduleResource extends Resource
|
|||||||
'6' => trans('server/schedule.time.saturday'),
|
'6' => trans('server/schedule.time.saturday'),
|
||||||
'0' => trans('server/schedule.time.sunday'),
|
'0' => trans('server/schedule.time.sunday'),
|
||||||
])
|
])
|
||||||
->selectablePlaceholder(false)
|
->selectablePlaceholder(false),
|
||||||
->native(false),
|
|
||||||
])
|
])
|
||||||
->action(function (Set $set, $data) {
|
->action(function (Set $set, $data) {
|
||||||
$set('cron_minute', '0');
|
$set('cron_minute', '0');
|
||||||
|
|||||||
@ -117,7 +117,6 @@ class PanelInstaller extends SimplePage implements HasForms
|
|||||||
->selectablePlaceholder(false)
|
->selectablePlaceholder(false)
|
||||||
->options(fn (LanguageService $languageService) => $languageService->getAvailableLanguages())
|
->options(fn (LanguageService $languageService) => $languageService->getAvailableLanguages())
|
||||||
->afterStateUpdated(fn ($state, Application $app) => $app->setLocale($state ?? config('app.locale')))
|
->afterStateUpdated(fn ($state, Application $app) => $app->setLocale($state ?? config('app.locale')))
|
||||||
->native(false)
|
|
||||||
->columnStart(4);
|
->columnStart(4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -26,30 +26,18 @@ use App\Services\Helpers\SoftwareVersionService;
|
|||||||
use Dedoc\Scramble\Scramble;
|
use Dedoc\Scramble\Scramble;
|
||||||
use Dedoc\Scramble\Support\Generator\OpenApi;
|
use Dedoc\Scramble\Support\Generator\OpenApi;
|
||||||
use Dedoc\Scramble\Support\Generator\SecurityScheme;
|
use Dedoc\Scramble\Support\Generator\SecurityScheme;
|
||||||
use Filament\Forms\Components\Field;
|
|
||||||
use Filament\Forms\Components\TextInput\Actions\CopyAction;
|
|
||||||
use Filament\Support\Colors\Color;
|
|
||||||
use Filament\Support\Facades\FilamentColor;
|
|
||||||
use Filament\Support\Facades\FilamentView;
|
|
||||||
use Filament\View\PanelsRenderHook;
|
|
||||||
use Illuminate\Config\Repository;
|
use Illuminate\Config\Repository;
|
||||||
use Illuminate\Database\Eloquent\Relations\Relation;
|
use Illuminate\Database\Eloquent\Relations\Relation;
|
||||||
use Illuminate\Foundation\Application;
|
use Illuminate\Foundation\Application;
|
||||||
use Illuminate\Foundation\Console\AboutCommand;
|
use Illuminate\Foundation\Console\AboutCommand;
|
||||||
use Illuminate\Support\Facades\Blade;
|
|
||||||
use Illuminate\Support\Facades\Gate;
|
use Illuminate\Support\Facades\Gate;
|
||||||
use Illuminate\Support\Facades\Http;
|
use Illuminate\Support\Facades\Http;
|
||||||
use Illuminate\Support\Facades\URL;
|
use Illuminate\Support\Facades\URL;
|
||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
use Laravel\Sanctum\Sanctum;
|
use Laravel\Sanctum\Sanctum;
|
||||||
use Livewire\Component;
|
|
||||||
use Livewire\Livewire;
|
|
||||||
use Spatie\Health\Facades\Health;
|
use Spatie\Health\Facades\Health;
|
||||||
|
|
||||||
use function Livewire\on;
|
|
||||||
use function Livewire\store;
|
|
||||||
|
|
||||||
class AppServiceProvider extends ServiceProvider
|
class AppServiceProvider extends ServiceProvider
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
@ -104,57 +92,6 @@ class AppServiceProvider extends ServiceProvider
|
|||||||
Scramble::registerApi('application', ['api_path' => 'api/application', 'info' => ['version' => '1.0']])->afterOpenApiGenerated($bearerTokens);
|
Scramble::registerApi('application', ['api_path' => 'api/application', 'info' => ['version' => '1.0']])->afterOpenApiGenerated($bearerTokens);
|
||||||
Scramble::registerApi('client', ['api_path' => 'api/client', 'info' => ['version' => '1.0']])->afterOpenApiGenerated($bearerTokens);
|
Scramble::registerApi('client', ['api_path' => 'api/client', 'info' => ['version' => '1.0']])->afterOpenApiGenerated($bearerTokens);
|
||||||
|
|
||||||
FilamentColor::register([
|
|
||||||
'danger' => Color::Red,
|
|
||||||
'gray' => Color::Zinc,
|
|
||||||
'info' => Color::Sky,
|
|
||||||
'primary' => Color::Blue,
|
|
||||||
'success' => Color::Green,
|
|
||||||
'warning' => Color::Amber,
|
|
||||||
'blurple' => Color::hex('#5865F2'),
|
|
||||||
]);
|
|
||||||
|
|
||||||
FilamentView::registerRenderHook(
|
|
||||||
PanelsRenderHook::PAGE_START,
|
|
||||||
fn () => Blade::render('@livewire(\App\Livewire\AlertBannerContainer::class)'),
|
|
||||||
);
|
|
||||||
|
|
||||||
FilamentView::registerRenderHook(
|
|
||||||
PanelsRenderHook::FOOTER,
|
|
||||||
fn () => Blade::render('filament.layouts.footer'),
|
|
||||||
);
|
|
||||||
|
|
||||||
FilamentView::registerRenderHook(
|
|
||||||
PanelsRenderHook::STYLES_BEFORE,
|
|
||||||
fn () => Blade::render("@vite(['resources/css/app.css'])")
|
|
||||||
);
|
|
||||||
|
|
||||||
FilamentView::registerRenderHook(
|
|
||||||
PanelsRenderHook::SCRIPTS_AFTER,
|
|
||||||
fn () => Blade::render("@vite(['resources/js/app.js'])"),
|
|
||||||
);
|
|
||||||
|
|
||||||
on('dehydrate', function (Component $component) {
|
|
||||||
if (!Livewire::isLivewireRequest()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (store($component)->has('redirect')) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (count(session()->get('alert-banners') ?? []) <= 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$component->dispatch('alertBannerSent');
|
|
||||||
});
|
|
||||||
|
|
||||||
Field::macro('hintCopy', function () {
|
|
||||||
/** @var Field $this */
|
|
||||||
return $this->hintAction(CopyAction::make()); // @phpstan-ignore varTag.nativeType
|
|
||||||
});
|
|
||||||
|
|
||||||
// Don't run any health checks during tests
|
// Don't run any health checks during tests
|
||||||
if (!$app->runningUnitTests()) {
|
if (!$app->runningUnitTests()) {
|
||||||
Health::checks([
|
Health::checks([
|
||||||
|
|||||||
82
app/Providers/Filament/FilamentServiceProvider.php
Normal file
82
app/Providers/Filament/FilamentServiceProvider.php
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Providers\Filament;
|
||||||
|
|
||||||
|
use Filament\Forms\Components\Field;
|
||||||
|
use Filament\Forms\Components\Select;
|
||||||
|
use Filament\Forms\Components\TextInput\Actions\CopyAction;
|
||||||
|
use Filament\Support\Colors\Color;
|
||||||
|
use Filament\Support\Facades\FilamentColor;
|
||||||
|
use Filament\Support\Facades\FilamentView;
|
||||||
|
use Filament\View\PanelsRenderHook;
|
||||||
|
use Illuminate\Support\Facades\Blade;
|
||||||
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
use Livewire\Component;
|
||||||
|
use Livewire\Livewire;
|
||||||
|
|
||||||
|
use function Livewire\on;
|
||||||
|
use function Livewire\store;
|
||||||
|
|
||||||
|
class FilamentServiceProvider extends ServiceProvider
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Bootstrap any application services.
|
||||||
|
*/
|
||||||
|
public function boot(): void
|
||||||
|
{
|
||||||
|
FilamentColor::register([
|
||||||
|
'danger' => Color::Red,
|
||||||
|
'gray' => Color::Zinc,
|
||||||
|
'info' => Color::Sky,
|
||||||
|
'primary' => Color::Blue,
|
||||||
|
'success' => Color::Green,
|
||||||
|
'warning' => Color::Amber,
|
||||||
|
'blurple' => Color::hex('#5865F2'),
|
||||||
|
]);
|
||||||
|
|
||||||
|
FilamentView::registerRenderHook(
|
||||||
|
PanelsRenderHook::PAGE_START,
|
||||||
|
fn () => Blade::render('@livewire(\App\Livewire\AlertBannerContainer::class)'),
|
||||||
|
);
|
||||||
|
|
||||||
|
FilamentView::registerRenderHook(
|
||||||
|
PanelsRenderHook::FOOTER,
|
||||||
|
fn () => Blade::render('filament.layouts.footer'),
|
||||||
|
);
|
||||||
|
|
||||||
|
FilamentView::registerRenderHook(
|
||||||
|
PanelsRenderHook::STYLES_BEFORE,
|
||||||
|
fn () => Blade::render("@vite(['resources/css/app.css'])")
|
||||||
|
);
|
||||||
|
|
||||||
|
FilamentView::registerRenderHook(
|
||||||
|
PanelsRenderHook::SCRIPTS_AFTER,
|
||||||
|
fn () => Blade::render("@vite(['resources/js/app.js'])"),
|
||||||
|
);
|
||||||
|
|
||||||
|
on('dehydrate', function (Component $component) {
|
||||||
|
if (!Livewire::isLivewireRequest()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (store($component)->has('redirect')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count(session()->get('alert-banners') ?? []) <= 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$component->dispatch('alertBannerSent');
|
||||||
|
});
|
||||||
|
|
||||||
|
Field::macro('hintCopy', function () {
|
||||||
|
/** @var Field $this */
|
||||||
|
return $this->hintAction(CopyAction::make()); // @phpstan-ignore varTag.nativeType
|
||||||
|
});
|
||||||
|
|
||||||
|
Select::configureUsing(fn (Select $select) => $select->native(false));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function register(): void {}
|
||||||
|
}
|
||||||
@ -5,13 +5,14 @@ return [
|
|||||||
App\Providers\AppServiceProvider::class,
|
App\Providers\AppServiceProvider::class,
|
||||||
App\Providers\BackupsServiceProvider::class,
|
App\Providers\BackupsServiceProvider::class,
|
||||||
App\Providers\EventServiceProvider::class,
|
App\Providers\EventServiceProvider::class,
|
||||||
App\Providers\Filament\AdminPanelProvider::class,
|
|
||||||
App\Providers\Filament\AppPanelProvider::class,
|
|
||||||
App\Providers\Filament\ServerPanelProvider::class,
|
|
||||||
App\Providers\Extensions\AvatarServiceProvider::class,
|
App\Providers\Extensions\AvatarServiceProvider::class,
|
||||||
App\Providers\Extensions\CaptchaServiceProvider::class,
|
App\Providers\Extensions\CaptchaServiceProvider::class,
|
||||||
App\Providers\Extensions\FeatureServiceProvider::class,
|
App\Providers\Extensions\FeatureServiceProvider::class,
|
||||||
App\Providers\Extensions\OAuthServiceProvider::class,
|
App\Providers\Extensions\OAuthServiceProvider::class,
|
||||||
|
App\Providers\Filament\AdminPanelProvider::class,
|
||||||
|
App\Providers\Filament\AppPanelProvider::class,
|
||||||
|
App\Providers\Filament\FilamentServiceProvider::class,
|
||||||
|
App\Providers\Filament\ServerPanelProvider::class,
|
||||||
App\Providers\RouteServiceProvider::class,
|
App\Providers\RouteServiceProvider::class,
|
||||||
SocialiteProviders\Manager\ServiceProvider::class,
|
SocialiteProviders\Manager\ServiceProvider::class,
|
||||||
];
|
];
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user