components([ Section::make(fn () => CheerfulNotification::getMessage('Detail Profil 👤✨', 'Profil Pengguna')) ->description(fn () => CheerfulNotification::getMessage('Yuk, kelola informasi detail profil Anda agar selalu terkini! 👤🚀', 'Kelola informasi profil dasar Anda di bawah ini.')) ->icon(fn () => CheerfulNotification::getUxStyle() === UxStyle::CHEERFUL ? 'heroicon-o-user' : null) ->schema([ TextInput::make('name') ->label('Nama Lengkap') ->placeholder('Masukkan nama lengkap Anda') ->required() ->maxLength(100), Grid::make(2) ->schema([ TextInput::make('email') ->label('Alamat Surel') ->placeholder('contoh@email.com') ->autocomplete(false) ->required() ->maxLength(254) ->unique(ignoreRecord: true) ->email() ->prefixIcon('heroicon-o-envelope') ->live(), TextInput::make('username') ->label('Nama Pengguna') ->placeholder('nama_pengguna') ->autocomplete(false) ->required() ->minLength(5) ->maxLength(20) ->regex('/^[a-zA-Z0-9_.-]+$/') ->unique(ignoreRecord: true) ->prefixIcon('heroicon-o-at-symbol'), Select::make('ux_style') ->label('Gaya Bahasa Aplikasi') ->options(UxStyle::class) ->native(false) ->required() ->prefixIcon('heroicon-o-chat-bubble-bottom-center-text'), ]), ]), Section::make(fn () => CheerfulNotification::getMessage('Keamanan Akun 🔐✨', 'Ubah Kata Sandi')) ->description(fn () => CheerfulNotification::getMessage('Ingin ganti kata sandi? Pastikan pilih yang kuat ya biar makin aman! 🔐💪', 'Silakan masukkan kata sandi baru untuk memperbarui keamanan akun Anda.')) ->icon(fn () => CheerfulNotification::getUxStyle() === UxStyle::CHEERFUL ? 'heroicon-o-lock-closed' : null) ->schema([ Grid::make(2) ->schema([ TextInput::make('password') ->label(__('filament-panels::auth/pages/register.form.password.label')) ->placeholder('********') ->password() ->revealable(filament()->arePasswordsRevealable()) ->required(fn (Get $get) => filled($get('password')) || filled($get('passwordConfirmation'))) ->rule(Password::default()) ->showAllValidationMessages() ->dehydrated(fn ($state) => filled($state)) ->dehydrateStateUsing(fn ($state) => Hash::make($state)) ->same('passwordConfirmation') ->validationAttribute(__('filament-panels::auth/pages/register.form.password.validation_attribute')) ->prefixIcon('heroicon-o-lock-closed'), TextInput::make('passwordConfirmation') ->label(__('filament-panels::auth/pages/register.form.password_confirmation.label')) ->placeholder('********') ->password() ->revealable(filament()->arePasswordsRevealable()) ->required(fn (Get $get) => filled($get('password')) || filled($get('passwordConfirmation'))) ->dehydrated(false) ->prefixIcon('heroicon-o-lock-closed'), ]), ]), ]); } protected function handleRecordUpdate(Model $record, array $data): Model { $record->update($data); return $record; } protected function afterSave(): void { CheerfulNotification::success( CheerfulNotification::getMessage('Profil Diperbarui! ✨', 'Profil Diperbarui'), CheerfulNotification::getMessage('Sip! Detail profil baru Anda sudah tersimpan dengan aman. Terus semangat ya! 💪😊', 'Perubahan pada profil Anda telah berhasil disimpan ke dalam sistem.') )->send(); if (filled($this->form->getState()['password'] ?? null)) { auth()->logout(); session()->invalidate(); session()->regenerateToken(); CheerfulNotification::info( CheerfulNotification::getMessage('Sesi Berakhir 🔐', 'Keamanan Diperbarui'), CheerfulNotification::getMessage('Anda telah mengubah kata sandi. Silakan masuk kembali dengan kata sandi baru Anda ya. 😉👋', 'Kata sandi Anda telah berhasil diubah. Harap lakukan login kembali menggunakan kata sandi yang baru untuk alasan keamanan.') )->send(); $this->redirect(filament()->getLoginUrl()); } } protected function getSavedNotification(): ?Notification { return null; } }