mirror of
https://github.com/vitodeploy/vito.git
synced 2025-07-03 06:56:15 +00:00
Database collations (#489)
* SyncDatabases * Collation on Create inc WordPress * Refactored Enum * Resolve sync issue * Fix for PostgreSQL * pint * reversed enum * style adjustments * add unit tests * style * fix tests * more tests --------- Co-authored-by: Saeed Vaziry <61919774+saeedvaziry@users.noreply.github.com> Co-authored-by: Saeed Vaziry <mr.saeedvaziry@gmail.com>
This commit is contained in:
@ -4,11 +4,15 @@
|
||||
|
||||
use App\Actions\Database\CreateDatabase;
|
||||
use App\Models\Database;
|
||||
use App\Models\Server;
|
||||
use App\Web\Contracts\HasSecondSubNav;
|
||||
use App\Web\Pages\Servers\Page;
|
||||
use Filament\Actions\Action;
|
||||
use Filament\Forms\Components\Checkbox;
|
||||
use Filament\Forms\Components\Select;
|
||||
use Filament\Forms\Components\TextInput;
|
||||
use Filament\Forms\Get;
|
||||
use Filament\Forms\Set;
|
||||
use Filament\Notifications\Notification;
|
||||
use Filament\Support\Enums\MaxWidth;
|
||||
|
||||
@ -25,6 +29,59 @@ public function mount(): void
|
||||
$this->authorize('viewAny', [Database::class, $this->server]);
|
||||
}
|
||||
|
||||
public static function getCharsetInput(Server $server): Select
|
||||
{
|
||||
return Select::make('charset')
|
||||
->label('Charset / Encoding')
|
||||
->native(false)
|
||||
->live()
|
||||
->default(function () use ($server) {
|
||||
$service = $server->defaultService('database');
|
||||
|
||||
return $service->type_data['defaultCharset'] ?? null;
|
||||
})
|
||||
->options(function () use ($server) {
|
||||
$service = $server->defaultService('database');
|
||||
$charsets = $service->type_data['charsets'] ?? [];
|
||||
|
||||
return array_combine(
|
||||
array_keys($charsets),
|
||||
array_keys($charsets)
|
||||
);
|
||||
})
|
||||
->afterStateUpdated(function (Get $get, Set $set, $state) use ($server) {
|
||||
$service = $server->defaultService('database');
|
||||
$charsets = $service->type_data['charsets'] ?? [];
|
||||
$set('collation', $charsets[$state]['default'] ?? null);
|
||||
})
|
||||
->rules(fn (callable $get) => CreateDatabase::rules($server, $get())['charset']);
|
||||
}
|
||||
|
||||
public static function getCollationInput(Server $server): Select
|
||||
{
|
||||
return Select::make('collation')
|
||||
->label('Collation')
|
||||
->native(false)
|
||||
->live()
|
||||
->default(function (Get $get) use ($server) {
|
||||
$service = $server->defaultService('database');
|
||||
$charsets = $service->type_data['charsets'] ?? [];
|
||||
$charset = $get('charset') ?? $service->type_data['default'] ?? 'utf8mb4';
|
||||
|
||||
return $charsets[$charset]['default'] ?? null;
|
||||
})
|
||||
->options(function (Get $get) use ($server) {
|
||||
$service = $server->defaultService('database');
|
||||
$collations = $service->type_data['charsets'][$get('charset')]['list'] ?? [];
|
||||
|
||||
return array_combine(
|
||||
array_values($collations),
|
||||
array_values($collations)
|
||||
);
|
||||
})
|
||||
->rules(fn (callable $get) => CreateDatabase::rules($server, $get())['collation']);
|
||||
}
|
||||
|
||||
protected function getHeaderActions(): array
|
||||
{
|
||||
return [
|
||||
@ -36,6 +93,8 @@ protected function getHeaderActions(): array
|
||||
->form([
|
||||
TextInput::make('name')
|
||||
->rules(fn (callable $get) => CreateDatabase::rules($this->server, $get())['name']),
|
||||
self::getCharsetInput($this->server),
|
||||
self::getCollationInput($this->server),
|
||||
Checkbox::make('user')
|
||||
->label('Create User')
|
||||
->default(false)
|
||||
|
@ -27,6 +27,12 @@ protected function getTableColumns(): array
|
||||
return [
|
||||
TextColumn::make('name')
|
||||
->searchable(),
|
||||
TextColumn::make('charset')
|
||||
->label('Charset / Encoding')
|
||||
->sortable(),
|
||||
TextColumn::make('collation')
|
||||
->label('Collation')
|
||||
->sortable(),
|
||||
TextColumn::make('status')
|
||||
->label('Status')
|
||||
->badge()
|
||||
|
Reference in New Issue
Block a user