penambahan UI update password

This commit is contained in:
Fuzi_fauzia 2024-06-28 16:31:55 +07:00
parent be071b75b1
commit 97b2445d4f
7 changed files with 277 additions and 11 deletions

View File

@ -426,7 +426,7 @@ export class CostManagementComponent implements OnInit {
);
}
export(){
export() {
this.spinnerExportActive = true;
setTimeout(() => {
const columnsToExport = [

View File

@ -2,6 +2,8 @@
<h4 style="color: #ffffff; margin-bottom: 20px !important">
Comparison of Water and Electricity Costs > {{ dataRow.building }}
</h4>
<p style="color: #ffffff">Room : {{ dataRow?.roomName }}</p>
<p style="color: #ffffff">Category : {{ dataRow?.categoryName }}</p>
<div class="card-dashboard">
<ngx-datatable

View File

@ -29,6 +29,10 @@ export class ModalExportComponent {
ngOnInit() {
this.formattedEndDate = this.dataRow.endDate.slice(0, 7);
}
ngAfterViewInit(): void {
console.log(this.dataRow);
this.fetchData(
this.dataRow.categoryId,
this.dataRow.roomId,
@ -75,7 +79,7 @@ export class ModalExportComponent {
columnsToExport
);
this.spinnerExportActive = false;
this.activeModal.close('Export completed');
this.activeModal.close("Export completed");
}, 3000);
}
}

View File

@ -1 +1,170 @@
<p>update-password works!</p>
<section id="update-password">
<div class="row">
<div class="col-8">
<div class="card" style="background-color: #252525 !important">
<div class="card-content">
<div class="card-header" style="background-color: #252525 !important">
<h2 style="color: #ffffff">Update Password</h2>
</div>
<div class="card-body">
<form [formGroup]="profilInfo" (ngSubmit)="onProjectInfoSubmit()">
<div class="form-body">
<div class="row">
<div class="col-md-12">
<div class="form-group position-relative">
<label for="currentPass" style="color: #ffffff"
>Current Password</label
>
<input
[type]="showCurrentPass ? 'text' : 'password'"
id="currentPass"
class="form-control"
formControlName="currentPass"
placeholder="********"
[ngClass]="{
'is-invalid': submitted && f.currentPass.errors
}"
/>
<small
class="form-text text-muted danger"
*ngIf="submitted && f.currentPass.errors"
class="invalid-feedback"
>
<div *ngIf="f.currentPass.errors.required">
Current Password is required
</div>
</small>
<button
type="button"
class="btn btn-link position-absolute"
(click)="toggleCurrentPassVisibility()"
style="top: 30px; right: 10px; color: #c3f164 !important;"
>
<i
[class]="
showCurrentPass ? 'fa fa-eye-slash' : 'fa fa-eye'
"
></i>
</button>
</div>
<div class="form-group position-relative">
<label for="newPass" style="color: #ffffff"
>New Password</label
>
<input
[type]="showNewPass ? 'text' : 'password'"
id="newPass"
class="form-control"
formControlName="newPass"
placeholder="********"
[ngClass]="{
'is-invalid': submitted && f.newPass.errors
}"
/>
<small
class="form-text text-muted danger"
*ngIf="submitted && f.newPass.errors"
class="invalid-feedback"
>
<div *ngIf="f.newPass.errors.required">
New Password is required
</div>
<div *ngIf="f.newPass.errors.minlength">
New Password must be at least 8 characters long
</div>
<div *ngIf="f.newPass.errors.pattern">
New Password must contain at least one uppercase
letter, one lowercase letter, and one number
</div>
</small>
<button
type="button"
class="btn btn-link position-absolute"
(click)="toggleNewPassVisibility()"
style="top: 30px; right: 10px; color: #c3f164 !important;"
>
<i
[class]="
showNewPass ? 'fa fa-eye-slash' : 'fa fa-eye'
"
></i>
</button>
</div>
<div class="form-group position-relative">
<label for="confirmPass" style="color: #ffffff"
>Confirm Password</label
>
<input
[type]="showConfirmPass ? 'text' : 'password'"
id="confirmPass"
class="form-control"
formControlName="confirmPass"
placeholder="********"
[ngClass]="{
'is-invalid': submitted && f.confirmPass.errors
}"
/>
<small
class="form-text text-muted danger"
*ngIf="submitted && f.confirmPass.errors"
class="invalid-feedback"
>
<div *ngIf="f.confirmPass.errors.required">
Confirm Password is required
</div>
<div *ngIf="f.confirmPass.errors.matchPassword">
Confirm Password must match the New Password
</div>
</small>
<button
type="button"
class="btn btn-link position-absolute"
(click)="toggleConfirmPassVisibility()"
style="top: 30px; right: 10px; color: #c3f164 !important;"
>
<i
[class]="
showConfirmPass ? 'fa fa-eye-slash' : 'fa fa-eye'
"
></i>
</button>
</div>
</div>
</div>
</div>
<div class="form-actions text-right">
<button
type="button"
class="btn btn-warning mr-1"
style="
color: #ffffff !important;
background-color: transparent !important;
border-color: #ffffff !important;
border-radius: 10px;
width: 145px;
"
(click)="cancel()"
>
Cancel
</button>
<button
type="submit"
class="btn btn-primary"
style="
color: #000000 !important;
background-color: #c3f164 !important;
border-radius: 10px;
width: 145px;
"
(click)="saveEdit()"
>
Save
</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</section>

View File

@ -1,10 +1,98 @@
import { Component } from '@angular/core';
import { Component, ViewChild } from "@angular/core";
import { FormBuilder, FormGroup, NgForm, Validators, AbstractControl, ValidatorFn } from "@angular/forms";
import { ActivatedRoute, Router } from "@angular/router";
@Component({
selector: 'app-update-password',
templateUrl: './update-password.component.html',
styleUrls: ['./update-password.component.css']
selector: "app-update-password",
templateUrl: "./update-password.component.html",
styleUrls: ["./update-password.component.css"],
})
export class UpdatePasswordComponent {
@ViewChild("f", { read: true }) userProfileForm: NgForm;
public breadcrumb: any;
profilInfo: FormGroup;
activeTab: string = "profile-info2";
submitted = false;
showCurrentPass: boolean = false;
showNewPass: boolean = false;
showConfirmPass: boolean = false;
constructor(
private formBuilder: FormBuilder,
private router: Router,
private route: ActivatedRoute
) {}
ngOnInit(): void {
this.profilInfo = this.formBuilder.group({
currentPass: ["", Validators.required],
newPass: ["", [Validators.required, Validators.minLength(8), Validators.pattern(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).+$/)]],
confirmPass: ["", [Validators.required, this.matchPassword('newPass')]],
});
this.profilInfo.get('newPass').valueChanges.subscribe(() => {
this.profilInfo.get('confirmPass').updateValueAndValidity();
});
}
selectTab(tabName: string) {
this.activeTab = tabName;
}
get f() {
return this.profilInfo.controls;
}
matchPassword(passwordControlName: string): ValidatorFn {
return (control: AbstractControl): { [key: string]: boolean } | null => {
if (!control.parent || !control) {
return null;
}
const passwordControl = control.parent.get(passwordControlName);
if (!passwordControl) {
return null;
}
if (passwordControl.value !== control.value) {
return { matchPassword: true };
}
return null;
};
}
onProjectInfoSubmit() {
this.submitted = true;
if (this.profilInfo.invalid) {
return;
}
// Handle form submission
}
cancel() {
// Handle cancel action
}
saveEdit() {
// Handle save action
console.log(this.profilInfo);
console.log(this.profilInfo.invalid);
console.log(this.profilInfo.valid);
}
toggleCurrentPassVisibility() {
this.showCurrentPass = !this.showCurrentPass;
}
toggleNewPassVisibility() {
this.showNewPass = !this.showNewPass;
}
toggleConfirmPassVisibility() {
this.showConfirmPass = !this.showConfirmPass;
}
}

View File

@ -1,21 +1,25 @@
.tabs {
display: flex;
border-bottom: 1px solid #ccc;
margin-bottom: 20px;
/* border-bottom: 1px solid #ccc; */
}
.tab-link {
background-color: #333;
color: #fff;
border-radius: 8px;
color: #C3F164;
padding: 10px 20px;
cursor: pointer;
border: none;
outline: none;
transition: background-color 0.3s ease;
margin-right: 10px;
}
.tab-link:hover,
.tab-link.active {
background-color: #555;
background-color: #C3F164;
color: black !important;
}
.tab-content {

View File

@ -9,7 +9,6 @@
<button class="tab-link hidden" (click)="selectTab('profile-info')" [class.active]="activeTab === 'profile-info'">Profile Information</button>
<button class="tab-link" (click)="selectTab('profile-info2')" [class.active]="activeTab === 'profile-info2'">Profile Information</button>
<button class="tab-link" (click)="selectTab('update-password')" [class.active]="activeTab === 'update-password'">Update Password</button>
</div>
<div *ngIf="activeTab === 'profile-info'" class="hidden">