import { IAuthResponse, TRoles } from '@/core'; import { ToastService } from '@/core/services/toast.service'; import { Component, EventEmitter, inject, Input, Output, signal } from '@angular/core'; import { Router } from '@angular/router'; import images from 'src/assets/images'; import { LoginComponent } from './login/login.component'; type TSteps = 'login' | 'otp' | 'modifyLoginInfo' | 'signup'; @Component({ selector: 'app-auth', templateUrl: './auth.component.html', imports: [LoginComponent], }) export class AuthComponent { @Input() redirectUrl!: string; @Input() loginApiUrl!: string; @Input() role?: TRoles; @Input() defaultStep: TSteps = 'login'; @Output() submit = new EventEmitter>(); private readonly toastService = inject(ToastService); private readonly router = inject(Router); readonly logo = images.logo; readonly authVector = images.login; activeStep = signal(this.defaultStep); selectedRole = signal(this.role); toSignUp = () => { this.activeStep.set('signup'); }; onLoggedIn = (data: IAuthResponse) => { this.toastService.success({ text: 'شما با موفقیت وارد شدید.' }); this.selectedRole.set(data.account.type.toUpperCase() as TRoles); // if (data.mustChangePassword) { // this.activeStep.set('modifyLoginInfo'); // return; // } if (this.submit.observed) { return this.submit.emit(Promise.resolve(true)); } this.redirectToDashboard(); }; onModifyLoginInfo = () => { if (this.submit.observed) { return this.submit.emit(Promise.resolve(true)); } this.redirectToDashboard(); }; private redirectToDashboard() { let redirectUrl = this.redirectUrl; if (!redirectUrl) { switch (this.selectedRole()) { case 'ADMIN': redirectUrl = '/super_admin'; break; case 'PROVIDER': redirectUrl = '/provider'; break; case 'PARTNER': redirectUrl = '/partner'; break; case 'CONSUMER': redirectUrl = '/consumer'; break; } } this.router.navigateByUrl(redirectUrl); } }