Profile Page ts (before member and reward changes)
Thu Jul 11 2024 18:17:42 GMT+0000 (Coordinated Universal Time)
Saved by @iamkatmakhafola
import { Component, OnDestroy, OnInit } from '@angular/core'; import { FormGroup, Validators, FormBuilder } from '@angular/forms'; import { UserService } from '../Services/userprofile.service'; import { Router } from '@angular/router'; import { CommonModule } from '@angular/common'; import { ReactiveFormsModule } from '@angular/forms'; import { Member, updateUser } from '../shared/update-user'; import { Subscription, catchError } from 'rxjs'; import { RewardRedeemViewModel, RewardViewModel, UnredeemedRewardModel } from '../shared/reward'; import { RewardService } from '../Services/reward.service'; import { RewardTypeViewModel } from '../shared/reward'; declare var $: any; // Import jQuery @Component({ selector: 'app-profile-page', standalone: true, imports: [CommonModule, ReactiveFormsModule], templateUrl: './profile-page.component.html', styleUrls: ['./profile-page.component.css'] }) export class ProfilePageComponent implements OnInit, OnDestroy { profileForm: FormGroup; user: updateUser | undefined; member!: Member; isEditMode = false; errorMessage = ''; userProfileImage: string | ArrayBuffer = ''; // Add this property to store the Base64 image data unredeemedRewards: UnredeemedRewardModel[] = []; selectedReward: UnredeemedRewardModel | null = null; private userSubscription: Subscription | undefined; private redeemSubscription: Subscription | undefined; constructor( private userService: UserService, private rewardService: RewardService, private router: Router, private fb: FormBuilder ) { this.profileForm = this.fb.group({ email: ['', [Validators.required, Validators.email]], name: ['', [Validators.required, Validators.minLength(3), Validators.maxLength(20)]], surname: ['', [Validators.required, Validators.minLength(3), Validators.maxLength(20)]], phoneNumber: ['', [Validators.required, Validators.maxLength(10)]], physical_Address: ['', [Validators.required, Validators.maxLength(255)]], photo: [''] }); } ngOnInit(): void { const userId = JSON.parse(localStorage.getItem('User') || '').userId; console.log('User ID from local storage:', userId); this.userSubscription = this.userService.getUserById(userId).pipe( catchError(error => { console.error('Error fetching user profile:', error); // Handle error return []; // Return empty array or default value as per your logic }) ).subscribe({ next: (result) => { console.log('User data received:', result); this.user = result; this.profileForm.patchValue(this.user); // Assign userProfileImage this.userProfileImage = `data:image/jpeg;base64,${this.user.Photo}`; // Ensure this.user.Photo contains the Base64 data // Log userProfileImage and user for debugging console.log('User Profile Image:', this.userProfileImage); console.log('User:', this.user); // Check if the user is a member and fetch member details if (this.user.User_Type_ID !== 3) { this.userService.getMemberByUserId(userId).subscribe( memberResult => { this.member = memberResult; console.log('Member data received:', this.member); this.loadUnredeemedRewards(); // Load rewards if the user is a member }, memberError => { console.error('Error fetching member data:', memberError); } ); } }, complete: () => { console.log('getUserById subscription completed'); } }); this.isEditMode = false; this.loadUnredeemedRewards(); } ngOnDestroy(): void { // Clean up subscriptions if (this.userSubscription) { this.userSubscription.unsubscribe(); } if (this.redeemSubscription) { this.redeemSubscription.unsubscribe(); } } clearForm() { this.profileForm.reset(); } enableEditMode(event: Event) { event.preventDefault(); this.isEditMode = true; this.profileForm.enable(); } openSaveModal() { if (this.profileForm.invalid) { this.showValidationErrors(); $('#errorModal').modal('show'); return; } $('#saveConfirmationModal').modal('show'); } showValidationErrors() { const invalidFields: string[] = []; Object.keys(this.profileForm.controls).forEach(key => { const controlErrors = this.profileForm.get(key)?.errors; if (controlErrors) { Object.keys(controlErrors).forEach(errorKey => { invalidFields.push(`${key}: ${errorKey}`); }); } }); this.errorMessage = `Please enter a valid input: ${invalidFields.join(', ')}`; } dismissModal() { $('#saveConfirmationModal').modal('hide'); } dismissErrorModal() { $('#errorModal').modal('hide'); } confirmSave() { this.dismissModal(); this.onSubmit(); this.isEditMode = false; // Disable edit mode after confirmation } onSubmit() { if (this.profileForm.valid) { const userId = JSON.parse(localStorage.getItem('User')!).userId; this.userService.updateUser(userId,this.profileForm.value).subscribe({ next: (result) => { console.log('User to be updated:', result); this.router.navigateByUrl(`/ProfilePage/${userId}`); alert('Successfully updated profile'); }, error: () => { console.error('Error updating user profile:'); alert('Error updating profile'); } }); } } onPhotoChange(event: Event): void { if (!this.isEditMode) return; const input = event.target as HTMLInputElement; if (input.files && input.files[0]) { const reader = new FileReader(); reader.onload = (e: any) => { this.userProfileImage = e.target.result; // Update the image source this.profileForm.patchValue({ photo: e.target.result }); // Update the form control }; reader.readAsDataURL(input.files[0]); } } goBack() { const userTypeId = JSON.parse(localStorage.getItem('User')!).userTypeId; const userId = JSON.parse(localStorage.getItem('User')!).userId; if (userTypeId === 1) { // Ensure userTypeID is compared as string this.router.navigateByUrl(`/OwnerHome/${userId}`); } else if (userTypeId === 2) { this.router.navigateByUrl(`/EmployeeHome/${userId}`); } else if (userTypeId === 3) { this.router.navigateByUrl(`/Home/${userId}`); } } changePassword() { this.router.navigateByUrl('/ChangePasswordPage'); } // Method to load rewards for the current user loadUnredeemedRewards(): void { const memberId = this.member.Member_ID; this.rewardService.getUnredeemedRewardsForMember(memberId).subscribe( rewards => { this.unredeemedRewards = rewards; console.log('Unredeemed Rewards:', this.unredeemedRewards); }, error => { console.error('Error fetching unredeemed rewards:', error); } ); } // Method to open redeem modal for a reward openRedeemModal(reward: UnredeemedRewardModel): void { this.selectedReward = reward; $('#redeemRewardModal').modal('show'); } // Method to dismiss redeem modal dismissRedeemModal(): void { $('#redeemRewardModal').modal('hide'); } // Method to confirm redeeming a reward confirmRedeem(): void { if (!this.selectedReward) { return; } const redeemRequest = new RewardRedeemViewModel(); redeemRequest.MemberId = this.member?.Member_ID ?? 0; redeemRequest.RewardId = this.selectedReward.reward_ID; // Call backend service to redeem the reward this.redeemSubscription = this.rewardService.redeemReward(redeemRequest).subscribe({ next: () => { // Show success modal on successful redemption $('#successModal').modal('show'); // Remove redeemed reward from the list this.unredeemedRewards = this.unredeemedRewards.filter(r => r.reward_ID !== this.selectedReward?.reward_ID); }, error: (error) => { console.error('Error redeeming reward:', error); // Handle error } }); this.dismissRedeemModal(); } // Method to dismiss success modal dismissSuccessModal(): void { $('#successModal').modal('hide'); } }
Comments