| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 | 
							- <?php
 - 
 - namespace App\Livewire;
 - 
 - use App\Models\User;
 - 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\Http\UploadedFile;
 - use Illuminate\Support\Facades\Blade;
 - use Illuminate\Support\HtmlString;
 - use Livewire\Component;
 - use RuntimeException;
 - use Wallo\FilamentCompanies\FilamentCompanies;
 - 
 - /**
 -  * @property Form $form
 -  */
 - class UpdateProfileInformation 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()->withoutRelations()->toArray();
 - 
 -         $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;
 -         }
 - 
 -         $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\FileUpload::make('profile_photo_path')
 -                     ->label('Photo')
 -                     ->extraAttributes([
 -                         'style' => 'width: 6rem; height: 6rem;',
 -                     ])
 -                     ->panelLayout('compact circle')
 -                     ->removeUploadedFileButtonPosition('center bottom')
 -                     ->uploadButtonPosition('center bottom')
 -                     ->imageResizeMode('cover')
 -                     ->imageResizeUpscale(false)
 -                     ->imageResizeTargetHeight('500')
 -                     ->imageResizeTargetWidth('500')
 -                     ->imageCropAspectRatio('1:1')
 -                     ->uploadProgressIndicatorPosition('center bottom')
 -                     ->loadingIndicatorPosition('center bottom')
 -                     ->placeholder(static function () {
 -                         return new HtmlString('
 -                             <div style="display: inline-block; cursor: pointer;">
 -                                 <div class="flex items-center justify-center bg-gray-50 dark:bg-gray-800" style="
 -                                     border-radius: 50%;
 -                                     width: 50px;
 -                                     height: 50px;">
 -                                    ' . Blade::render('<x-heroicon-o-camera class="w-8 h-8 text-gray-800 dark:text-gray-300" />') . '
 -                                 </div>
 -                             </div>
 -                         ');
 -                     })
 -                     ->disk(FilamentCompanies::profilePhotoDisk())
 -                     ->directory(FilamentCompanies::profilePhotoStoragePath())
 -                     ->saveUploadedFileUsing(function (User $record, UploadedFile $file) {
 -                         $record->updateProfilePhoto($file);
 -                     })
 -                     ->deleteUploadedFileUsing(function (User $record) {
 -                         $record->deleteProfilePhoto();
 -                     })
 -                     ->image()
 -                     ->nullable(),
 -                 Forms\Components\TextInput::make('name')
 -                     ->label(__('Name'))
 -                     ->required()
 -                     ->maxLength(255)
 -                     ->autofocus(),
 -                 Forms\Components\TextInput::make('email')
 -                     ->label(__('Email'))
 -                     ->email()
 -                     ->required()
 -                     ->autocomplete('username')
 -                     ->maxLength(255)
 -                     ->unique(ignoreRecord: true),
 -             ])
 -             ->operation('edit')
 -             ->model($this->getUser())
 -             ->statePath('data');
 -     }
 - 
 -     public function render(): View
 -     {
 -         return view('livewire.update-profile-information');
 -     }
 - }
 
 
  |