Skip to content

Commit 25bf4c5

Browse files
authored
Merge pull request #7130 from masudul-tikweb/master
Upstream changes
2 parents 2d7df6c + ee0a990 commit 25bf4c5

File tree

9 files changed

+409
-196
lines changed

9 files changed

+409
-196
lines changed

eform-client/src/app/modules/account-management/components/profile/profile-settings/profile-settings.component.html

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,16 @@
1111
</div>
1212
</eform-new-subheader>
1313

14-
<div class="d-flex flex-row justify-content-between align-items-start">
14+
<div [formGroup]="profileForm" class="d-flex flex-row justify-content-between align-items-start">
1515
<mat-card class="p-3" *ngIf="selectCurrentUserIsAdmin$ | async">
1616
<mat-card-header>
1717
<mat-card-title>{{ 'Google Authenticator' | translate }}</mat-card-title>
1818
</mat-card-header>
1919
<div class="mb-1">
2020
<mat-checkbox
2121
id="2fauthForsed"
22-
(change)="isTwoFactorEnabledCheckBoxChanged($event)"
23-
[(ngModel)]="googleAuthInfoModel.isTwoFactorEnabled"
22+
formControlName="isTwoFactorEnabled"
23+
(change)="toggleTwoFactor()"
2424
color="primary">
2525
{{ 'Status' | translate }}
2626
</mat-checkbox>
@@ -128,7 +128,7 @@
128128
[bindLabel]="'name'"
129129
[bindValue]="'languageCode'"
130130
[clearable]="false"
131-
[(ngModel)]="userSettingsModel.locale"
131+
formControlName="locale"
132132
[items]="activeLanguages">
133133
</mtx-select>
134134
</mat-form-field>
@@ -139,7 +139,7 @@
139139
[bindLabel]="'text'"
140140
[bindValue]="'id'"
141141
[clearable]="false"
142-
[(ngModel)]="userSettingsModel.formats"
142+
formControlName="formats"
143143
[items]="countries">
144144
</mtx-select>
145145
</mat-form-field>
@@ -150,14 +150,14 @@
150150
[bindLabel]="'name'"
151151
[bindValue]="'id'"
152152
[clearable]="false"
153-
[(ngModel)]="userSettingsModel.timeZone"
153+
formControlName="timeZone"
154154
[items]="timeZones.timeZoneModels">
155155
</mtx-select>
156156
</mat-form-field>
157157
<div class="mb-1">
158158
<mat-checkbox
159159
id="darkTheme"
160-
[(ngModel)]="userSettingsModel.darkTheme">
160+
formControlName="darkTheme">
161161
{{ 'Dark theme' | translate }}
162162
</mat-checkbox>
163163
</div>

eform-client/src/app/modules/account-management/components/profile/profile-settings/profile-settings.component.ts

Lines changed: 114 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { Component, OnInit, inject } from '@angular/core';
2+
import { FormBuilder, FormGroup, FormControl } from '@angular/forms';
23
import { GoogleAuthInfoModel } from 'src/app/common/models/auth';
34
import { UserSettingsModel } from 'src/app/common/models/settings';
45
import {
@@ -32,6 +33,7 @@ import * as R from 'ramda';
3233
standalone: false
3334
})
3435
export class ProfileSettingsComponent implements OnInit {
36+
private fb = inject(FormBuilder);
3537
authStateService = inject(AuthStateService);
3638
private authStore = inject(Store);
3739
private googleAuthService = inject(GoogleAuthService);
@@ -55,6 +57,14 @@ export class ProfileSettingsComponent implements OnInit {
5557
public selectCurrentUserIsAdmin$ = this.authStore.select(selectCurrentUserIsAdmin);
5658
private selectBearerToken$ = this.authStore.select(selectBearerToken);
5759

60+
profileForm: FormGroup = this.fb.group({
61+
locale: new FormControl(''),
62+
formats: new FormControl(''),
63+
timeZone: new FormControl(''),
64+
darkTheme: new FormControl(false),
65+
isTwoFactorEnabled: new FormControl(false),
66+
});
67+
5868
ngOnInit() {
5969
this.getEnabledLanguages();
6070
this.initializeUploaders();
@@ -94,12 +104,25 @@ export class ProfileSettingsComponent implements OnInit {
94104
});
95105
}
96106

97-
isTwoFactorEnabledCheckBoxChanged(e) {
98-
if (e.target) {
99-
this.googleAuthInfoModel.isTwoFactorEnabled = e.target.checked;
100-
} else {
101-
return;
102-
}
107+
// isTwoFactorEnabledCheckBoxChanged(e) {
108+
// if (e.target) {
109+
// this.googleAuthInfoModel.isTwoFactorEnabled = e.target.checked;
110+
// } else {
111+
// return;
112+
// }
113+
// this.googleAuthService
114+
// .updateGoogleAuthenticatorInfo(this.googleAuthInfoModel)
115+
// .subscribe((data) => {
116+
// if (data.success) {
117+
// this.authStateService.logout();
118+
// }
119+
// });
120+
// }
121+
122+
toggleTwoFactor(): void {
123+
const isEnabled = this.profileForm.get('isTwoFactorEnabled')?.value;
124+
this.googleAuthInfoModel.isTwoFactorEnabled = isEnabled;
125+
103126
this.googleAuthService
104127
.updateGoogleAuthenticatorInfo(this.googleAuthInfoModel)
105128
.subscribe((data) => {
@@ -117,41 +140,106 @@ export class ProfileSettingsComponent implements OnInit {
117140
});
118141
}
119142

143+
// deleteGoogleAuthenticatorInfo() {
144+
// this.googleAuthService.deleteGoogleAuthenticatorInfo().subscribe((data) => {
145+
// if (data && data.success) {
146+
// this.googleAuthInfoModel.psk = null;
147+
// }
148+
// });
149+
// }
150+
151+
// updateUserProfileSettings() {
152+
//
153+
// if (this.profilePictureUploader.queue.length > 0) {
154+
// this.profilePictureUploader.queue[0].upload();
155+
// }
156+
// this.userSettingsService
157+
// .updateUserSettings(this.userSettingsModel)
158+
// .subscribe((data) => {
159+
// this.userSettings.getUserSettings().subscribe((data) => {
160+
// this.userSettingsModel = data.model;
161+
// this.store.dispatch(updateCurrentUserLocaleAndDarkTheme({
162+
// darkTheme: this.userSettingsModel.darkTheme,
163+
// locale: this.userSettingsModel.locale,
164+
// languageId: this.userSettingsModel.languageId
165+
// }));
166+
// this.getUserSettings();
167+
// });
168+
// this.store.dispatch(loadAppMenu());
169+
// });
170+
// }
171+
120172
updateUserProfileSettings() {
173+
const formValue = this.profileForm.value;
174+
175+
this.userSettingsModel.locale = formValue.locale;
176+
this.userSettingsModel.formats = formValue.formats;
177+
this.userSettingsModel.timeZone = formValue.timeZone;
178+
this.userSettingsModel.darkTheme = formValue.darkTheme;
121179

122180
if (this.profilePictureUploader.queue.length > 0) {
123181
this.profilePictureUploader.queue[0].upload();
124182
}
125-
this.userSettingsService
126-
.updateUserSettings(this.userSettingsModel)
127-
.subscribe((data) => {
128-
this.userSettings.getUserSettings().subscribe((data) => {
129-
this.userSettingsModel = data.model;
130-
this.store.dispatch(updateCurrentUserLocaleAndDarkTheme({
183+
184+
this.userSettingsService.updateUserSettings(this.userSettingsModel).subscribe((data) => {
185+
this.userSettings.getUserSettings().subscribe((data) => {
186+
this.userSettingsModel = data.model;
187+
this.store.dispatch(
188+
updateCurrentUserLocaleAndDarkTheme({
131189
darkTheme: this.userSettingsModel.darkTheme,
132190
locale: this.userSettingsModel.locale,
133-
languageId: this.userSettingsModel.languageId
134-
}));
135-
this.getUserSettings();
136-
});
137-
this.store.dispatch(loadAppMenu());
191+
languageId: this.userSettingsModel.languageId,
192+
})
193+
);
194+
this.getUserSettings();
138195
});
196+
this.store.dispatch(loadAppMenu());
197+
});
139198
}
140199

200+
// getEnabledLanguages() {
201+
// this.getLanguagesSub$ = this.appSettingsStateService.getLanguages()
202+
// .pipe(tap(data => {
203+
// if (data && data.success && data.model) {
204+
// this.appLanguages = data.model;
205+
// this.activeLanguages = this.appLanguages.languages.filter((x) => x.isActive);
206+
// this.getTimeZones();
207+
// this.getGoogleAuthenticatorInfo();
208+
// this.getUserSettings();
209+
// }
210+
// }))
211+
// .subscribe();
212+
// }
213+
141214
getEnabledLanguages() {
142215
this.getLanguagesSub$ = this.appSettingsStateService.getLanguages()
143-
.pipe(tap(data => {
144-
if (data && data.success && data.model) {
145-
this.appLanguages = data.model;
146-
this.activeLanguages = this.appLanguages.languages.filter((x) => x.isActive);
147-
this.getTimeZones();
148-
this.getGoogleAuthenticatorInfo();
149-
this.getUserSettings();
150-
}
151-
}))
216+
.pipe(
217+
tap((data) => {
218+
if (data && data.success && data.model) {
219+
this.appLanguages = data.model;
220+
this.activeLanguages = this.appLanguages.languages.filter((x) => x.isActive);
221+
this.getTimeZones();
222+
this.getGoogleAuthenticatorInfo();
223+
224+
// Fetch user settings after languages are available
225+
this.userSettingsService.getUserSettings().subscribe((data) => {
226+
this.userSettingsModel = data.model;
227+
228+
this.profileForm.patchValue({
229+
locale: this.userSettingsModel.locale,
230+
formats: this.userSettingsModel.formats,
231+
timeZone: this.userSettingsModel.timeZone,
232+
darkTheme: this.userSettingsModel.darkTheme,
233+
isTwoFactorEnabled: this.googleAuthInfoModel.isTwoFactorEnabled,
234+
});
235+
});
236+
}
237+
})
238+
)
152239
.subscribe();
153240
}
154241

242+
155243
get languages() {
156244
return this.appLanguages.languages.filter((x) => x.isActive);
157245
}

eform-client/src/app/modules/account-management/components/users/user-modal/user-modal.component.html

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
<h3 mat-dialog-title>{{ (edit ? 'Edit User' : 'New User') | translate }}</h3>
22
<div mat-dialog-content>
3-
<form #form="ngForm" class="need-wrapper">
3+
<form #form="ngForm" [formGroup]="userForm" class="need-wrapper">
44
<div class="d-flex flex-row">
55
<mat-form-field>
66
<mat-label>{{ 'First name' | translate }}</mat-label>
77
<input
8-
matInput
9-
type="text"
10-
[disabled]="userModel.isDeviceUser"
11-
[(ngModel)]="userModel.firstName"
12-
[id]="edit ? 'editFirstName' : 'createFirstName'"
13-
[name]="edit ? 'editFirstName' : 'createFirstName'"
8+
matInput
9+
type="text"
10+
[disabled]="isDeviceUser"
11+
formControlName="firstName"
12+
[id]="edit ? 'editFirstName' : 'createFirstName'"
13+
[name]="edit ? 'editFirstName' : 'createFirstName'"
1414
>
1515
</mat-form-field>
1616
<mat-form-field>
1717
<mat-label>{{ 'Last name' | translate }}</mat-label>
1818
<input
1919
matInput
2020
type="text"
21-
[disabled]="userModel.isDeviceUser"
22-
[(ngModel)]="userModel.lastName"
21+
[disabled]="isDeviceUser"
22+
formControlName="lastName"
2323
[name]="edit ? 'editLastName' : 'createLastName'"
2424
[id]="edit ? 'editLastName' : 'createLastName'"
2525
>
@@ -31,9 +31,8 @@ <h3 mat-dialog-title>{{ (edit ? 'Edit User' : 'New User') | translate }}</h3>
3131
<input
3232
matInput
3333
required
34-
#createEmail="ngModel"
35-
type="text"
36-
[(ngModel)]="userModel.email"
34+
type="email"
35+
formControlName="email"
3736
[id]="edit ? 'emailEdit' : 'createEmail'"
3837
[name]="edit ? 'emailEdit' : 'createEmail'"
3938
>
@@ -44,7 +43,7 @@ <h3 mat-dialog-title>{{ (edit ? 'Edit User' : 'New User') | translate }}</h3>
4443
matInput
4544
required
4645
type="password"
47-
[(ngModel)]="userModel.password"
46+
formControlName="password"
4847
[id]="edit ? 'editPassword' : 'createPassword'"
4948
[name]="edit ? 'editPassword' : 'createPassword'"
5049
>
@@ -58,8 +57,7 @@ <h3 mat-dialog-title>{{ (edit ? 'Edit User' : 'New User') | translate }}</h3>
5857
bindLabel="name"
5958
bindValue="id"
6059
[clearable]="false"
61-
[(ngModel)]="userModel.role"
62-
[name]="edit ? 'editRole' : 'createRole'"
60+
formControlName="role"
6361
[id]="edit ? 'editRole' : 'createRole'"
6462
id="createRole"
6563
appendTo="body"
@@ -69,14 +67,13 @@ <h3 mat-dialog-title>{{ (edit ? 'Edit User' : 'New User') | translate }}</h3>
6967
]"
7068
></mtx-select>
7169
</mat-form-field>
72-
<mat-form-field *ngIf="userModel.role !== 'admin'">
70+
<mat-form-field *ngIf="userForm.get('role')?.value !== 'admin'">
7371
<mat-label>{{ 'Group' | translate }}</mat-label>
7472
<mtx-select
7573
required
7674
bindLabel="groupName"
7775
bindValue="id"
78-
[(ngModel)]="userModel.groupId"
79-
[name]="edit ? 'editGroup' : 'createGroup'"
76+
formControlName="groupId"
8077
[id]="edit ? 'editGroup' : 'createGroup'"
8178
appendTo="body"
8279
[items]="availableGroups.entities"
@@ -87,11 +84,11 @@ <h3 mat-dialog-title>{{ (edit ? 'Edit User' : 'New User') | translate }}</h3>
8784
</div>
8885
<div mat-dialog-actions class="d-flex flex-row justify-content-end">
8986
<button
90-
[disabled]="!form.form.valid"
9187
mat-raised-button
9288
color="accent"
9389
type="submit"
94-
(click)="edit ? updateUser() : createUser()"
90+
[disabled]="userForm.invalid"
91+
(click)="submit()"
9592
[id]="edit ? 'editUserSaveBtn' : 'createAdministrationUserBtn'"
9693
>
9794
{{ (edit ? 'Save' : 'Create') | translate }}

0 commit comments

Comments
 (0)