Merge branch 'feature/filament' of github.com:pelican-dev/panel into feature/filament

# Conflicts:
#	app/Filament/Resources/ServerResource.php
#	app/Filament/Resources/ServerResource/Pages/CreateServer.php
This commit is contained in:
Lance Pioch 2024-04-13 15:55:29 -04:00
commit 287c657e60
23 changed files with 138 additions and 140 deletions

View File

@ -73,8 +73,7 @@ class ApiKeyResource extends Resource
->default(ApiKey::TYPE_APPLICATION),
Forms\Components\Fieldset::make('Permissions')->schema(
collect(ApiKey::RESOURCES)->map(fn ($resource) =>
Forms\Components\ToggleButtons::make("r_$resource")
collect(ApiKey::RESOURCES)->map(fn ($resource) => Forms\Components\ToggleButtons::make("r_$resource")
->label(str($resource)->replace('_', ' ')->title())
->options([
0 => 'None',

View File

@ -3,7 +3,6 @@
namespace App\Filament\Resources\ApiKeyResource\Pages;
use App\Filament\Resources\ApiKeyResource;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;
class CreateApiKey extends CreateRecord

View File

@ -25,12 +25,10 @@ class ListApiKeys extends ListRecords
return [
'all' => Tab::make('All Keys'),
'application' => Tab::make('Application Keys')
->modifyQueryUsing(fn (Builder $query) =>
$query->where('key_type', ApiKey::TYPE_APPLICATION)
->modifyQueryUsing(fn (Builder $query) => $query->where('key_type', ApiKey::TYPE_APPLICATION)
),
'account' => Tab::make('Account Keys')
->modifyQueryUsing(fn (Builder $query) =>
$query->where('key_type', ApiKey::TYPE_ACCOUNT)
->modifyQueryUsing(fn (Builder $query) => $query->where('key_type', ApiKey::TYPE_ACCOUNT)
),
];
}

View File

@ -3,15 +3,12 @@
namespace App\Filament\Resources;
use App\Filament\Resources\DatabaseHostResource\Pages;
use App\Filament\Resources\DatabaseHostResource\RelationManagers;
use App\Models\DatabaseHost;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
class DatabaseHostResource extends Resource
{
@ -81,12 +78,6 @@ class DatabaseHostResource extends Resource
Tables\Columns\TextColumn::make('node.name')
->numeric()
->sortable(),
Tables\Columns\TextColumn::make('created_at')
->dateTime()
->sortable(),
Tables\Columns\TextColumn::make('updated_at')
->dateTime()
->sortable(),
])
->filters([
//

View File

@ -3,7 +3,6 @@
namespace App\Filament\Resources\DatabaseHostResource\Pages;
use App\Filament\Resources\DatabaseHostResource;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;
class CreateDatabaseHost extends CreateRecord

View File

@ -3,15 +3,12 @@
namespace App\Filament\Resources;
use App\Filament\Resources\DatabaseResource\Pages;
use App\Filament\Resources\DatabaseResource\RelationManagers;
use App\Models\Database;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
class DatabaseResource extends Resource
{

View File

@ -3,7 +3,6 @@
namespace App\Filament\Resources\DatabaseResource\Pages;
use App\Filament\Resources\DatabaseResource;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;
class CreateDatabase extends CreateRecord

View File

@ -20,7 +20,6 @@ class EggResource extends Resource
protected static ?string $recordRouteKeyName = 'id';
public static function form(Form $form): Form
{
return $form
@ -94,7 +93,7 @@ class EggResource extends Resource
Forms\Components\TextInput::make('env_variable')->maxLength(191),
Forms\Components\TextInput::make('default_value')->maxLength(191),
Forms\Components\Textarea::make('rules')->rows(3)->columnSpanFull()->required(),
])
]),
]),
Forms\Components\Tabs\Tab::make('Install Script')
->columns(3)

View File

@ -3,7 +3,6 @@
namespace App\Filament\Resources\EggResource\Pages;
use App\Filament\Resources\EggResource;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;
class CreateEgg extends CreateRecord

View File

@ -53,7 +53,7 @@ class ListEggs extends ListRecords
->send();
redirect()->route('filament.admin.resources.eggs.edit', [$newEgg]);
})
}),
];
}
}

View File

@ -3,15 +3,15 @@
namespace App\Filament\Resources;
use App\Filament\Resources\MountResource\Pages;
use App\Filament\Resources\MountResource\RelationManagers;
use App\Models\Mount;
use Filament\Forms;
use Filament\Forms\Components\Group;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\Select;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
class MountResource extends Resource
{
@ -23,10 +23,11 @@ class MountResource extends Resource
{
return $form
->schema([
Section::make()->schema([
Forms\Components\TextInput::make('name')
->required()
->helperText('Unique name used to separate this mount from another.')
->maxLength(191),
->maxLength(64),
Forms\Components\ToggleButtons::make('read_only')
->label('Read only?')
->helperText('Is the mount read only inside the container?')
@ -74,6 +75,26 @@ class MountResource extends Resource
Forms\Components\Textarea::make('description')
->helperText('A longer description for this mount.')
->columnSpanFull(),
])->columnSpan(2)->columns([
'default' => 1,
'lg' => 2,
]),
Group::make()->schema([
Section::make()->schema([
Select::make('eggs')->multiple()
->relationship('eggs', 'name')
->preload(),
Select::make('nodes')->multiple()
->relationship('nodes', 'name')
->searchable(['name', 'fqdn'])
->preload(),
]),
])->columns([
'default' => 1,
]),
])->columns([
'default' => 1,
'lg' => 3,
]);
}
@ -82,8 +103,8 @@ class MountResource extends Resource
return $table
->searchable(false)
->columns([
Tables\Columns\TextColumn::make('uuid')
->label('UUID')
Tables\Columns\TextColumn::make('id')
->label('')
->searchable(),
Tables\Columns\TextColumn::make('name')
->searchable(),
@ -91,11 +112,14 @@ class MountResource extends Resource
->searchable(),
Tables\Columns\TextColumn::make('target')
->searchable(),
Tables\Columns\TextColumn::make('read_only')
->numeric()
Tables\Columns\IconColumn::make('read_only')
->icon(fn (bool $state) => $state ? 'tabler-circle-check-filled' : 'tabler-circle-x-filled')
->color(fn (bool $state) => $state ? 'success' : 'danger')
->sortable(),
Tables\Columns\TextColumn::make('user_mountable')
->numeric()
Tables\Columns\IconColumn::make('user_mountable')
->hidden()
->icon(fn (bool $state) => $state ? 'tabler-circle-check-filled' : 'tabler-circle-x-filled')
->color(fn (bool $state) => $state ? 'success' : 'danger')
->sortable(),
])
->filters([

View File

@ -3,7 +3,6 @@
namespace App\Filament\Resources\MountResource\Pages;
use App\Filament\Resources\MountResource;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;
class CreateMount extends CreateRecord

View File

@ -3,10 +3,7 @@
namespace App\Filament\Resources\NodeResource\Pages;
use App\Filament\Resources\NodeResource;
use App\Models\Node;
use Filament\Actions\Action;
use Filament\Forms;
use Filament\Notifications\Notification;
use Filament\Resources\Pages\CreateRecord;
use Illuminate\Support\HtmlString;
@ -98,11 +95,11 @@ class CreateNode extends CreateRecord
->hintColor('success')
->options([
true => 'Valid',
false => 'Invalid'
false => 'Invalid',
])
->colors([
true => 'success',
false => 'danger'
false => 'danger',
]),
Forms\Components\TextInput::make('daemonListen')
@ -115,8 +112,6 @@ class CreateNode extends CreateRecord
->required()
->integer(),
Forms\Components\TextInput::make('name')
->label('Display Name')
->columnSpan(2)

View File

@ -64,9 +64,9 @@ class EditNode extends EditRecord
->maxValue(65535)
->numeric(),
Forms\Components\Select::make('server_id')->relationship('server', 'name'),
])
]),
])
]),
]),
]);
}

View File

@ -16,7 +16,6 @@ use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\HtmlString;
class ServerResource extends Resource
{
@ -64,7 +63,7 @@ class ServerResource extends Resource
Forms\Components\Select::make('node_id')
->disabledOn('edit')
->prefixIcon('tabler-server-2')
->default(fn () => Node::query()->latest()->first()->id)
->default(fn () => Node::query()->latest()->first()?->id)
->columnSpan(2)
->live()
->relationship('node', 'name')
@ -80,7 +79,8 @@ class ServerResource extends Resource
->columnSpan(3)
->disabled(fn (Forms\Get $get) => $get('node_id') === null)
->searchable(['ip', 'port', 'ip_alias'])
->getOptionLabelFromRecordUsing(fn (Allocation $allocation) => "$allocation->ip:$allocation->port" .
->getOptionLabelFromRecordUsing(
fn (Allocation $allocation) => "$allocation->ip:$allocation->port" .
($allocation->ip_alias ? " ($allocation->ip_alias)" : '')
)
->placeholder(function (Forms\Get $get) {
@ -340,8 +340,10 @@ class ServerResource extends Resource
->required()
->live()
->rows(function ($state) {
return str($state)->explode("\n")->reduce(fn (int $carry, $line) => $carry + floor(strlen($line) / 125),
0);
return str($state)->explode("\n")->reduce(
fn (int $carry, $line) => $carry + floor(strlen($line) / 125),
0
);
})
->columnSpanFull(),
@ -386,7 +388,7 @@ class ServerResource extends Resource
->helperText(fn (Forms\Get $get) => empty($get('description')) ? '—' : $get('description'))
->maxLength(191),
Forms\Components\Hidden::make('variable_id')->default(0)
Forms\Components\Hidden::make('variable_id')->default(0),
])
->columnSpanFull(),
]),

View File

@ -3,9 +3,7 @@
namespace App\Filament\Resources\ServerResource\Pages;
use App\Filament\Resources\ServerResource;
use App\Models\Allocation;
use Filament\Actions;
use Filament\Forms;
use Filament\Resources\Pages\EditRecord;
class EditServer extends EditRecord

View File

@ -3,15 +3,12 @@
namespace App\Filament\Resources;
use App\Filament\Resources\UserResource\Pages;
use App\Filament\Resources\UserResource\RelationManagers;
use App\Models\User;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Illuminate\Support\Facades\Hash;
class UserResource extends Resource

View File

@ -3,7 +3,6 @@
namespace App\Filament\Resources\UserResource\Pages;
use App\Filament\Resources\UserResource;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;
class CreateUser extends CreateRecord

View File

@ -8,7 +8,6 @@ use Filament\Forms\Components\Repeater;
use Filament\Forms\Components\Tabs;
use Filament\Forms\Components\Tabs\Tab;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Form;
use Filament\Forms\Get;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\HtmlString;
@ -85,7 +84,7 @@ class EditProfile extends \Filament\Pages\Auth\EditProfile
->schema([
Placeholder::make('activity!')->label('')->content(fn (ActivityLog $log) => new HtmlString($log->htmlable())),
])
]),
]),
]),
])

View File

@ -115,4 +115,9 @@ class Mount extends Model
{
return $this->belongsToMany(Server::class);
}
public function getRouteKeyName(): string
{
return 'id';
}
}

View File

@ -126,7 +126,6 @@ class Node extends Model
return 'id';
}
protected static function booted(): void
{
static::creating(function (self $node) {

View File

@ -83,7 +83,7 @@ use App\Notifications\SendPasswordReset as ResetPasswordNotification;
*
* @mixin \Eloquent
*/
class User extends Model implements AuthenticatableContract, AuthorizableContract, CanResetPasswordContract, FilamentUser, HasName, HasAvatar
class User extends Model implements AuthenticatableContract, AuthorizableContract, CanResetPasswordContract, FilamentUser, HasAvatar, HasName
{
use Authenticatable;
use Authorizable {can as protected canned; }

View File

@ -25,6 +25,7 @@ class EggParserService
$parsed = json_decode($file->getContent(), true, 512, JSON_THROW_ON_ERROR);
$version = $parsed['meta']['version'] ?? '';
return match ($version) {
'PTDL_v1' => $this->convertToV2($parsed),
'PTDL_v2' => $parsed,