apiService = $apiService; } public function mount() { if (Session::get('isRegistered')) { return redirect()->route('login'); } } public function register() { $this->isSubmitting = true; $this->status = 'loading'; $this->errors = []; try { $this->validate([ 'email' => ['required', 'email'], 'password' => ['required'], 'confirm_password' => ['required', Rule::in([$this->password])], 'first_name' => ['required'], 'middle_name' => ['required'], 'last_name' => ['required'], 'website' => ['required'], ], [ 'email.required' => 'Email is required.', 'email.email' => 'Invalid Email address.', 'password.required' => 'Password is required.', 'confirm_password.required' => 'Confirm password is required.', 'confirm_password.in' => 'Passwords do not match.', 'first_name.required' => 'First name is required.', 'middle_name.required' => 'Middle name is required.', 'last_name.required' => 'Last name is required.', 'website.required' => 'Website is required.', ]); $data = [ 'email' => $this->email, 'password' => $this->password, 'first_name' => $this->first_name, 'middle_name' => $this->middle_name, 'last_name' => $this->last_name, 'website' => $this->website, ]; $response = $this->apiService->post('/register', $data); if ($response && isset($response['status']) && $response['status'] === 201) { $this->status = 'success'; $this->isRegistered = true; Session::put('isRegistered', true); Session::flash('success', 'Registration successful.'); return redirect()->route('login'); } } catch (\Illuminate\Validation\ValidationException $e) { $this->status = 'error'; $this->errors = $e->errors(); Log::error('Registration validation failed', ['errors' => $this->errors, 'source' => 'RegistrationComponent']); } catch (\Exception $e) { $this->status = 'error'; Session::flash('error', 'Something went wrong: ' . $e->getMessage()); Log::error('Registration failed', ['error' => $e->getMessage(), 'source' => 'RegistrationComponent']); } finally { $this->isSubmitting = false; } } public function render() { return view('livewire.registration')->layout('layouts.app'); } }