diff --git a/npm/ng-packs/packages/identity/src/lib/defaults/default-users-form-props.ts b/npm/ng-packs/packages/identity/src/lib/defaults/default-users-form-props.ts index 232785249d..ce0bb03636 100644 --- a/npm/ng-packs/packages/identity/src/lib/defaults/default-users-form-props.ts +++ b/npm/ng-packs/packages/identity/src/lib/defaults/default-users-form-props.ts @@ -12,7 +12,7 @@ export const DEFAULT_USERS_CREATE_FORM_PROPS = FormProp.createMany [Validators.required, Validators.maxLength(256)], }, { - type: ePropType.Password, + type: ePropType.PasswordInputGroup, name: 'password', displayName: 'AbpIdentity::Password', id: 'password', diff --git a/npm/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-form-props.ts b/npm/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-form-props.ts index 4086bdb5ef..a3956e87d5 100644 --- a/npm/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-form-props.ts +++ b/npm/ng-packs/packages/tenant-management/src/lib/defaults/default-tenants-form-props.ts @@ -21,7 +21,7 @@ export const DEFAULT_TENANTS_CREATE_FORM_PROPS = FormProp.createMany< validators: () => [Validators.required, Validators.maxLength(256), Validators.email], }, { - type: ePropType.Password, + type: ePropType.PasswordInputGroup, name: 'adminPassword', displayName: 'AbpTenantManagement::DisplayName:AdminPassword', id: 'admin-password', diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.html b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.html index e06e4f0bfe..3c94b3123e 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.html +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.html @@ -138,6 +138,21 @@ class="form-control" > + + + + + diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts index 5732cdcc6f..815a466c8f 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts @@ -32,6 +32,7 @@ import { FormProp } from '../../models/form-props'; import { PropData } from '../../models/props'; import { selfFactory } from '../../utils/factory.util'; import { addTypeaheadTextSuffix } from '../../utils/typeahead.util'; +import { eThemeSharedComponents } from '../../enums/components'; @Component({ selector: 'abp-extensible-form-prop', @@ -70,6 +71,8 @@ export class ExtensibleFormPropComponent implements OnChanges, AfterViewInit { typeaheadModel: any; + passwordKey = eThemeSharedComponents.PasswordComponent; + private readonly form: UntypedFormGroup; disabledFn = (data: PropData) => false; @@ -161,6 +164,8 @@ export class ExtensibleFormPropComponent implements OnChanges, AfterViewInit { return 'time'; case ePropType.Typeahead: return 'typeahead'; + case ePropType.PasswordInputGroup: + return 'passwordinputgroup'; default: return prop.options ? 'select' : 'input'; } @@ -179,6 +184,8 @@ export class ExtensibleFormPropComponent implements OnChanges, AfterViewInit { return 'email'; case ePropType.Password: return 'password'; + case ePropType.PasswordInputGroup: + return 'passwordinputgroup'; default: return 'hidden'; } diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/enums/components.ts b/npm/ng-packs/packages/theme-shared/extensions/src/lib/enums/components.ts new file mode 100644 index 0000000000..562041c807 --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/enums/components.ts @@ -0,0 +1,3 @@ +export const enum eThemeSharedComponents { + PasswordComponent = 'ThemeShared.Extensions.PasswordComponent', +} diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/enums/props.enum.ts b/npm/ng-packs/packages/theme-shared/extensions/src/lib/enums/props.enum.ts index 12d4a3571a..f6184a5e87 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/enums/props.enum.ts +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/enums/props.enum.ts @@ -8,6 +8,7 @@ export const enum ePropType { MultiSelect = 'multiselect', Number = 'number', Password = 'password', + PasswordInputGroup = 'passwordinputgroup', String = 'string', Text = 'text', Time = 'time', diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/public-api.ts b/npm/ng-packs/packages/theme-shared/extensions/src/public-api.ts index f786eb4ac8..7268be4395 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/public-api.ts +++ b/npm/ng-packs/packages/theme-shared/extensions/src/public-api.ts @@ -11,6 +11,7 @@ export * from './lib/constants/extra-properties'; export * from './lib/directives/disabled.directive'; export * from './lib/directives/prop-data.directive'; export * from './lib/enums/props.enum'; +export * from './lib/enums/components'; export { ActionCallback, ActionList, diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/index.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/index.ts index 3f8e3c5e0f..810d5a991a 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/index.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/index.ts @@ -10,3 +10,4 @@ export * from './modal/modal-ref.service'; export * from './modal/modal.component'; export * from './toast-container/toast-container.component'; export * from './toast/toast.component'; +export * from './password/password.component'; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/password/password.component.html b/npm/ng-packs/packages/theme-shared/src/lib/components/password/password.component.html new file mode 100644 index 0000000000..3272e2bec9 --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/password/password.component.html @@ -0,0 +1,19 @@ +
+ + + +
diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/password/password.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/password/password.component.ts new file mode 100644 index 0000000000..74020240a1 --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/password/password.component.ts @@ -0,0 +1,28 @@ +import { Component, forwardRef, Injector, Input } from '@angular/core'; +import { AbstractNgModelComponent } from '@abp/ng.core'; +import { NG_VALUE_ACCESSOR } from '@angular/forms'; + +@Component({ + selector: 'abp-password', + templateUrl: `password.component.html`, + providers: [ + { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => PasswordComponent), + multi: true, + }, + ], +}) +export class PasswordComponent extends AbstractNgModelComponent { + @Input() inputId!: string; + @Input() formControlName!: string; + fieldTextType: boolean; + + constructor(injector: Injector) { + super(injector); + } + + toggleFieldTextType() { + this.fieldTextType = !this.fieldTextType; + } +} diff --git a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts index 6240925054..fd9a0cd236 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts @@ -32,9 +32,10 @@ import { RootParams } from './models/common'; import { NG_BOOTSTRAP_CONFIG_PROVIDERS } from './providers'; import { THEME_SHARED_ROUTE_PROVIDERS } from './providers/route.provider'; import { THEME_SHARED_APPEND_CONTENT } from './tokens/append-content.token'; -import { httpErrorConfigFactory, HTTP_ERROR_CONFIG } from './tokens/http-error.token'; +import { HTTP_ERROR_CONFIG, httpErrorConfigFactory } from './tokens/http-error.token'; import { DateParserFormatter } from './utils/date-parser-formatter'; import { CONFIRMATION_ICONS, DEFAULT_CONFIRMATION_ICONS } from './tokens/confirmation-icons.token'; +import { PasswordComponent } from './components/password/password.component'; const declarationsWithExports = [ BreadcrumbComponent, @@ -46,6 +47,7 @@ const declarationsWithExports = [ ModalComponent, ToastComponent, ToastContainerComponent, + PasswordComponent, NgxDatatableDefaultDirective, NgxDatatableListDirective, LoadingDirective, @@ -61,7 +63,7 @@ const declarationsWithExports = [ EllipsisModule, ], declarations: [...declarationsWithExports, HttpErrorWrapperComponent], - exports: [NgxDatatableModule, EllipsisModule, ...declarationsWithExports], + exports: [NgxDatatableModule, EllipsisModule, NgxValidateCoreModule, ...declarationsWithExports], providers: [DatePipe], }) export class BaseThemeSharedModule {}