Files
micro-frontend/ng-ttc-frontend/src/app/content/login-content/login-content.component.ts

144 lines
4.6 KiB
TypeScript
Raw Normal View History

2025-11-17 17:19:18 +07:00
import { Component, OnInit, ViewChild } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { GeneralService } from '../../services/generalservice';
import { LoginForgotComponent } from '../../../app/component/login-forgot/login-forgot.component';
import { LoginPageComponent } from '../../../app/component/login-page/login-page.component';
import { finalize } from 'rxjs/operators';
import { JwtService } from '../../services/jwt.service';
2025-11-17 17:19:18 +07:00
@Component({
selector: 'app-login-content',
standalone: false,
templateUrl: './login-content.component.html',
styleUrl: './login-content.component.css'
})
export class LoginContentComponent implements OnInit {
@ViewChild(LoginForgotComponent) loginForgotComponent!: LoginForgotComponent;
@ViewChild(LoginPageComponent) loginPageComponent!: LoginPageComponent;
mode: 'forgot-password' | 'default' = 'default';
constructor(
private generalService: GeneralService,
private route: ActivatedRoute,
private router: Router,
private jwtService: JwtService
2025-11-17 17:19:18 +07:00
) {}
ngOnInit(): void {
let param = this.route.snapshot.paramMap.get('mode');
if (param === 'forgot-password') {
this.mode = 'forgot-password';
} else {
// this.router.navigate(['/login']); // This can cause navigation loops
this.mode = 'default';
}
}
onSignInSubmit(value: any){
const uri = '/api/login/login';
const request = {
username: value.username,
password: value.password
};
if (this.loginPageComponent) {
this.loginPageComponent.busy = true;
this.loginPageComponent.message = '';
}
this.generalService.postRequest(uri, request)
.pipe(
finalize(() => {
if (this.loginPageComponent) {
this.loginPageComponent.busy = false;
}
})
).subscribe({
next: (result: any) => {
if (result.code === '200' && result.data?.token) {
this.generalService.trowApi(result);
localStorage.setItem('access_token', result.data.token);
this.jwtService.restartCountdown();
2025-11-19 18:30:35 +07:00
this.router.navigate(['main']);
2025-11-17 17:19:18 +07:00
} else {
const errorMessage = result.message_th || result.message || 'Sign-in failed.';
if (this.loginPageComponent) {
this.loginPageComponent.message = errorMessage;
}
this.generalService.trowApi(result);
}
},
error: (error: any) => {
const errorMessage = error?.error?.message_th || error?.error?.message || 'An error occurred.';
if (this.loginPageComponent) {
this.loginPageComponent.message = errorMessage;
}
this.generalService.trowApi(error);
}
});
}
onOtpSendSubmit(value: any){
let uri = '/api/login/otp/send';
let request = {
email: value.email
// otp: value.otp
}
this.loginForgotComponent.isLoading = true;
this.generalService.postRequest(uri, request)
.pipe(
// ✅ finalize จะทำงานทุกกรณี (ทั้ง success/error)
finalize(() => {
this.loginForgotComponent.isLoading = false;
})
).subscribe({
next: (result: any) => {
if (result.code === '200') {
this.generalService.trowApi(result);
// console.log(`✅ OTP ส่งไปที่ ${value.email}`);
2025-11-17 17:19:18 +07:00
} else {
// console.warn('⚠️ ไม่สามารถส่ง OTP ได้:', result.message_th);
2025-11-17 17:19:18 +07:00
}
},
error: (error: any) => {
this.loginForgotComponent.isSendOtp = false;
this.loginForgotComponent.isLoading = false;
this.generalService.trowApi(error);
// console.error('❌ Error sending OTP:', error);
2025-11-17 17:19:18 +07:00
},
complete: () => {
this.loginForgotComponent.isLoading = false;
this.loginForgotComponent.isSendOtp = true;
// console.log('📨 OTP send request completed');
2025-11-17 17:19:18 +07:00
}
});
}
onVerifySubmit(value: any){
let uri = '/api/login/otp/verify';
let request = {
email: value.email,
otp: value.otp
}
this.generalService.postRequest(uri, request).subscribe({
next: (result: any) => {
if (result.code === '200') {
// console.log(`OTP ส่งไปยืนยันสำเร็จ`);
2025-11-17 17:19:18 +07:00
} else {
// console.warn('⚠️ ไม่สามารถส่ง OTP ได้:', result.message_th);
2025-11-17 17:19:18 +07:00
}
},
error: (error: any) => {
// console.error('❌ Error sending OTP:', error);
2025-11-17 17:19:18 +07:00
},
complete: () => {
this.router.navigate(['/login']);
// console.log('📨 OTP send request completed');
2025-11-17 17:19:18 +07:00
}
});
}
}