diff --git a/npm/ng-packs/packages/account/src/lib/components/change-password/change-password.component.html b/npm/ng-packs/packages/account/src/lib/components/change-password/change-password.component.html index fdc8f23ce2..9387c84dc2 100644 --- a/npm/ng-packs/packages/account/src/lib/components/change-password/change-password.component.html +++ b/npm/ng-packs/packages/account/src/lib/components/change-password/change-password.component.html @@ -1,5 +1,5 @@
-
+
{ if (PASSWORD_FIELDS.indexOf(String(control.name)) < 0) return errors; @@ -36,6 +38,8 @@ export class ChangePasswordComponent ) {} ngOnInit(): void { + this.hideOldPassword = !this.store.selectSnapshot(ProfileState.getProfile).hasPassword; + const passwordValidations = getPasswordValidators(this.store); this.form = this.fb.group( @@ -58,6 +62,8 @@ export class ChangePasswordComponent validators: [comparePasswords(PASSWORD_FIELDS)], }, ); + + if (this.hideOldPassword) this.form.removeControl('password'); } onSubmit() { @@ -66,7 +72,7 @@ export class ChangePasswordComponent this.store .dispatch( new ChangePassword({ - currentPassword: this.form.get('password').value, + ...(!this.hideOldPassword && { currentPassword: this.form.get('password').value }), newPassword: this.form.get('newPassword').value, }), ) diff --git a/npm/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.html b/npm/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.html index 16e0d66f42..4b6f5bf496 100644 --- a/npm/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.html +++ b/npm/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.html @@ -1,11 +1,11 @@
-
+
-
+

diff --git a/npm/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.ts b/npm/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.ts index f9ee2b8ff7..3a795c83d7 100644 --- a/npm/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.ts +++ b/npm/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.ts @@ -1,17 +1,42 @@ import { fadeIn } from '@abp/ng.theme.shared'; import { transition, trigger, useAnimation } from '@angular/animations'; -import { Component } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; import { eAccountComponents } from '../../enums/components'; +import { Store } from '@ngxs/store'; +import { GetProfile, ProfileState } from '@abp/ng.core'; @Component({ selector: 'abp-manage-profile', templateUrl: './manage-profile.component.html', animations: [trigger('fadeIn', [transition(':enter', useAnimation(fadeIn))])], + styles: [ + ` + .min-h-400 { + min-height: 400px; + } + `, + ], }) -export class ManageProfileComponent { +export class ManageProfileComponent implements OnInit { selectedTab = 0; changePasswordKey = eAccountComponents.ChangePassword; personalSettingsKey = eAccountComponents.PersonalSettings; + + isProfileLoaded: boolean; + + hideChangePasswordTab: boolean; + + constructor(private store: Store) {} + + ngOnInit() { + this.store.dispatch(new GetProfile()).subscribe(() => { + this.isProfileLoaded = true; + if (this.store.selectSnapshot(ProfileState.getProfile).isExternal) { + this.hideChangePasswordTab = true; + this.selectedTab = 1; + } + }); + } } diff --git a/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.ts b/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.ts index 444a014d6d..f31cb2743e 100644 --- a/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.ts +++ b/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.ts @@ -1,10 +1,9 @@ -import { GetProfile, Profile, ProfileState, UpdateProfile } from '@abp/ng.core'; +import { ProfileState, UpdateProfile } from '@abp/ng.core'; +import { ToasterService } from '@abp/ng.theme.shared'; import { Component, OnInit } from '@angular/core'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { Select, Store } from '@ngxs/store'; -import { Observable } from 'rxjs'; -import { take, withLatestFrom, finalize } from 'rxjs/operators'; -import { ToasterService } from '@abp/ng.theme.shared'; +import { Store } from '@ngxs/store'; +import { finalize } from 'rxjs/operators'; import { Account } from '../../models/account'; const { maxLength, required, email } = Validators; @@ -19,9 +18,6 @@ export class PersonalSettingsComponent OnInit, Account.PersonalSettingsComponentInputs, Account.PersonalSettingsComponentOutputs { - @Select(ProfileState.getProfile) - profile$: Observable; - form: FormGroup; inProgress: boolean; @@ -37,18 +33,15 @@ export class PersonalSettingsComponent } buildForm() { - this.store - .dispatch(new GetProfile()) - .pipe(withLatestFrom(this.profile$), take(1)) - .subscribe(([, profile]) => { - this.form = this.fb.group({ - userName: [profile.userName, [required, maxLength(256)]], - email: [profile.email, [required, email, maxLength(256)]], - name: [profile.name || '', [maxLength(64)]], - surname: [profile.surname || '', [maxLength(64)]], - phoneNumber: [profile.phoneNumber || '', [maxLength(16)]], - }); - }); + const profile = this.store.selectSnapshot(ProfileState.getProfile); + + this.form = this.fb.group({ + userName: [profile.userName, [required, maxLength(256)]], + email: [profile.email, [required, email, maxLength(256)]], + name: [profile.name || '', [maxLength(64)]], + surname: [profile.surname || '', [maxLength(64)]], + phoneNumber: [profile.phoneNumber || '', [maxLength(16)]], + }); } submit() { diff --git a/npm/ng-packs/packages/core/src/lib/models/profile.ts b/npm/ng-packs/packages/core/src/lib/models/profile.ts index 068a3fad39..4d65b5dcbb 100644 --- a/npm/ng-packs/packages/core/src/lib/models/profile.ts +++ b/npm/ng-packs/packages/core/src/lib/models/profile.ts @@ -9,6 +9,8 @@ export namespace Profile { name: string; surname: string; phoneNumber: string; + isExternal: boolean; + hasPassword: boolean; } export interface ChangePasswordRequest {