'Masuk Akun', ])] class Login extends Component { use WithToast; #[Validate(['required', 'string'], attribute: 'nama pengguna atau email')] public string $login = ''; #[Validate('required', attribute: 'kata sandi')] public string $password = ''; public function mount() { if (! request()->has('message')) { return; } $this->toast(request('message')); $this->js(<<<'JS' const url = new URL(window.location); url.search = ''; window.history.replaceState({}, '', url); JS); } public function auth() { $this->validate(); if (! $this->attemptLogin()) { $this->toast('Oops! Nama pengguna, email, atau kata sandi tidak sesuai.', 'Gagal', 'danger'); return; } $user = auth()->user(); if (! $this->userIsActive($user)) { auth()->logout(); $this->toast( 'Akun Anda belum aktif. Mohon periksa email untuk mengaktifkan akun, dan hubungi kami jika memerlukan bantuan lebih lanjut.', 'Gagal', 'danger' ); return; } session()->regenerate(); $this->toast('Hai, '.($user?->employee?->full_name ?? $user->name).'! Semoga harimu menyenangkan 😊'); $this->redirectByRole($user->roles->pluck('name')->toArray()); } protected function attemptLogin() { $field = filter_var($this->login, FILTER_VALIDATE_EMAIL) ? 'email' : 'username'; return auth()->attempt([ $field => $this->login, 'password' => $this->password, ]); } protected function userIsActive($user) { return $user?->status === UserStatus::ACTIVE; } protected function redirectByRole(array $roles) { if (array_intersect($roles, ['Developer', 'Owner', 'Leader', 'Admin'])) { $this->redirectIntended('/studio/dashboard/overview', navigate: true); return; } if (in_array('Partner', $roles, true)) { $this->redirectIntended('/partner/overview', navigate: true); return; } if (in_array('Customer', $roles, true)) { $this->redirectIntended('/member/overview', navigate: true); return; } $this->redirectIntended('/login', navigate: true); } public function render() { return view('livewire.auth.login'); } }