| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 | 
							- <?php
 - 
 - namespace App\Livewire;
 - 
 - use Filament\Facades\Filament;
 - use Filament\Forms;
 - use Filament\Forms\Concerns\InteractsWithForms;
 - use Filament\Forms\Contracts\HasForms;
 - use Filament\Forms\Form;
 - use Filament\Notifications\Notification;
 - use Filament\Support\Exceptions\Halt;
 - use Illuminate\Contracts\Auth\Authenticatable;
 - use Illuminate\Contracts\View\View;
 - use Illuminate\Database\Eloquent\Model;
 - use Illuminate\Support\Facades\Hash;
 - use Illuminate\Validation\Rules\Password;
 - use Livewire\Component;
 - use RuntimeException;
 - 
 - /**
 -  * @property Form $form
 -  */
 - class UpdatePassword extends Component implements HasForms
 - {
 -     use InteractsWithForms;
 - 
 -     /**
 -      * @var array<string, mixed> | null
 -      */
 -     public ?array $data = [];
 - 
 -     public function mount(): void
 -     {
 -         $this->fillForm();
 -     }
 - 
 -     public function getUser(): Authenticatable | Model
 -     {
 -         $user = Filament::auth()->user();
 - 
 -         if (! $user instanceof Model) {
 -             throw new RuntimeException('The authenticated user object must be an Eloquent model to allow profile information to be updated.');
 -         }
 - 
 -         return $user;
 -     }
 - 
 -     public function fillForm(): void
 -     {
 -         $data = $this->getUser()->attributesToArray();
 - 
 -         $data = $this->mutateFormDataBeforeFill($data);
 - 
 -         $this->form->fill($data);
 -     }
 - 
 -     /**
 -      * @param  array<string, mixed>  $data
 -      * @return array<string, mixed>
 -      */
 -     protected function mutateFormDataBeforeFill(array $data): array
 -     {
 -         return $data;
 -     }
 - 
 -     /**
 -      * @param  array<string, mixed>  $data
 -      * @return array<string, mixed>
 -      */
 -     protected function mutateFormDataBeforeSave(array $data): array
 -     {
 -         return $data;
 -     }
 - 
 -     public function save(): void
 -     {
 -         try {
 -             $data = $this->form->getState();
 - 
 -             $data = $this->mutateFormDataBeforeSave($data);
 - 
 -             $this->handleRecordUpdate($this->getUser(), $data);
 -         } catch (Halt $exception) {
 -             return;
 -         }
 - 
 -         if (session() !== null) {
 -             session()->put([
 -                 'password_hash_' . Filament::getAuthGuard() => Filament::auth()->user()?->getAuthPassword(),
 -             ]);
 -         }
 - 
 -         $this->getSavedNotification()?->send();
 - 
 -         $this->fillForm();
 -     }
 - 
 -     /**
 -      * @param  array<string, mixed>  $data
 -      */
 -     protected function handleRecordUpdate(Model $record, array $data): Model
 -     {
 -         $record->update($data);
 - 
 -         return $record;
 -     }
 - 
 -     protected function getSavedNotification(): ?Notification
 -     {
 -         $title = $this->getSavedNotificationTitle();
 - 
 -         if (blank($title)) {
 -             return null;
 -         }
 - 
 -         return Notification::make()
 -             ->success()
 -             ->title($this->getSavedNotificationTitle())
 -             ->body($this->getSavedNotificationBody());
 -     }
 - 
 -     protected function getSavedNotificationTitle(): ?string
 -     {
 -         return __('filament-companies::default.notifications.profile_information_updated.title');
 -     }
 - 
 -     protected function getSavedNotificationBody(): ?string
 -     {
 -         return __('filament-companies::default.notifications.profile_information_updated.body');
 -     }
 - 
 -     public function form(Form $form): Form
 -     {
 -         return $form
 -             ->schema([
 -                 Forms\Components\TextInput::make('current_password')
 -                     ->label(__('filament-companies::default.fields.current_password'))
 -                     ->password()
 -                     ->currentPassword()
 -                     ->revealable()
 -                     ->validationMessages([
 -                         'current_password' => __('filament-companies::default.errors.password_does_not_match'),
 -                     ])
 -                     ->autocomplete('current-password')
 -                     ->required(),
 -                 Forms\Components\TextInput::make('password')
 -                     ->label(__('filament-companies::default.labels.new_password'))
 -                     ->password()
 -                     ->revealable()
 -                     ->autocomplete('new-password')
 -                     ->rule(Password::default())
 -                     ->required()
 -                     ->dehydrated(static fn ($state): bool => filled($state))
 -                     ->dehydrateStateUsing(static fn ($state): string => Hash::make($state))
 -                     ->same('password_confirmation'),
 -                 Forms\Components\TextInput::make('password_confirmation')
 -                     ->label(__('filament-companies::default.labels.password_confirmation'))
 -                     ->password()
 -                     ->revealable()
 -                     ->autocomplete('new-password')
 -                     ->required()
 -                     ->dehydrated(false),
 -             ])
 -             ->operation('edit')
 -             ->model($this->getUser())
 -             ->statePath('data');
 -     }
 - 
 -     public function render(): View
 -     {
 -         return view('livewire.update-password-form');
 -     }
 - }
 
 
  |