From f2295282e482c65c5c56d83761bf1f950c77b8a0 Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Mon, 6 Apr 2026 15:12:19 +0700 Subject: [PATCH] refactor: enhance user creation form with cheerful notification and improved structure --- .../Master/Users/Schemas/UserForm.php | 87 +++++++++++-------- lang/id/notif.php | 4 + 2 files changed, 53 insertions(+), 38 deletions(-) diff --git a/app/Filament/Resources/Master/Users/Schemas/UserForm.php b/app/Filament/Resources/Master/Users/Schemas/UserForm.php index 7201484..429a700 100644 --- a/app/Filament/Resources/Master/Users/Schemas/UserForm.php +++ b/app/Filament/Resources/Master/Users/Schemas/UserForm.php @@ -3,12 +3,15 @@ namespace App\Filament\Resources\Master\Users\Schemas; use App\Enums\RoleEnum; +use App\Filament\Support\CheerfulNotification; use Filament\Forms\Components\Hidden; use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput; use Filament\Schemas\Components\Grid; +use Filament\Schemas\Components\Section; use Filament\Schemas\Schema; use Illuminate\Database\Eloquent\Builder; +use Illuminate\Support\HtmlString; class UserForm { @@ -16,50 +19,58 @@ public static function configure(Schema $schema): Schema { return $schema ->components([ - TextInput::make('name') - ->label('Nama Lengkap') - ->placeholder('John Doe') - ->autocomplete(false) - ->autofocus() - ->required() - ->maxLength(100), - - Grid::make(1) + Section::make() + ->description(function (string $operation) { + return $operation === 'create' + ? new HtmlString(CheerfulNotification::getByKey('user.create_form_desc')) + : null; + }) ->schema([ - TextInput::make('email') - ->label('Alamat Surel') - ->placeholder('johndoe@example.com') + TextInput::make('name') + ->label('Nama Lengkap') + ->placeholder('John Doe') ->autocomplete(false) + ->autofocus() ->required() - ->maxLength(254) - ->email() - ->unique(ignoreRecord: true) - ->prefixIcon('heroicon-o-envelope'), + ->maxLength(100), - TextInput::make('username') - ->label('Nama Pengguna') - ->placeholder('johndoe') - ->autocomplete(false) - ->required() - ->minLength(5) - ->maxLength(20) - ->regex('/^[a-zA-Z0-9_.-]+$/') - ->unique(ignoreRecord: true) - ->prefixIcon('heroicon-o-at-symbol'), + Grid::make(1) + ->schema([ + TextInput::make('email') + ->label('Alamat Surel') + ->placeholder('johndoe@example.com') + ->autocomplete(false) + ->required() + ->maxLength(254) + ->email() + ->unique(ignoreRecord: true) + ->prefixIcon('heroicon-o-envelope'), - Select::make('roles') - ->label('Peran') - ->required() - ->relationship('roles', 'name', function (Builder $query): Builder { - return $query->whereNotIn('name', [RoleEnum::DEVELOPER, RoleEnum::PERUSAHAAN]); - }) - ->multiple() - ->preload() - ->searchable(), + TextInput::make('username') + ->label('Nama Pengguna') + ->placeholder('johndoe') + ->autocomplete(false) + ->required() + ->minLength(5) + ->maxLength(20) + ->regex('/^[a-zA-Z0-9_.-]+$/') + ->unique(ignoreRecord: true) + ->prefixIcon('heroicon-o-at-symbol'), - Hidden::make('password') - ->default(fn (): string => config('auth.password_default')) - ->visibleOn('create'), + Select::make('roles') + ->label('Peran') + ->required() + ->relationship('roles', 'name', function (Builder $query): Builder { + return $query->whereNotIn('name', [RoleEnum::DEVELOPER, RoleEnum::PERUSAHAAN]); + }) + ->multiple() + ->preload() + ->searchable(), + + Hidden::make('password') + ->default(fn (): string => config('auth.password_default')) + ->visibleOn('create'), + ]), ]), ]) ->columns(1); diff --git a/lang/id/notif.php b/lang/id/notif.php index a65519b..f05ba5c 100644 --- a/lang/id/notif.php +++ b/lang/id/notif.php @@ -889,6 +889,10 @@ 'cheerful' => 'Yuk, buat akun baru biar makin lengkap penggunanya! 💪😊', 'formal' => 'Silakan masukkan detail akun pengguna baru di bawah ini.', ], + 'create_form_desc' => [ + 'cheerful' => 'Pake alamat surel dan nama pengguna ini buat masuk ya. Oh iya, kata sandi awalnya '.config('auth.password_default').' 🥳', + 'formal' => 'Gunakan alamat surel dan nama pengguna ini untuk masuk. Kata sandi awalnya adalah '.config('auth.password_default').'.', + ], ], 'theme' => [ 'create_title' => [