From e8d4617e1068e1d8b0007b02b37ee16f437f2175 Mon Sep 17 00:00:00 2001 From: bnymncoskuner Date: Mon, 21 Sep 2020 16:31:25 +0300 Subject: [PATCH] feat: add input text directive for better type --- .../directives/free-text-input.directive.ts | 38 +++++++++++++++++++ .../theme-shared/src/lib/directives/index.ts | 1 + .../src/lib/theme-shared.module.ts | 3 ++ 3 files changed, 42 insertions(+) create mode 100644 npm/ng-packs/packages/theme-shared/src/lib/directives/free-text-input.directive.ts diff --git a/npm/ng-packs/packages/theme-shared/src/lib/directives/free-text-input.directive.ts b/npm/ng-packs/packages/theme-shared/src/lib/directives/free-text-input.directive.ts new file mode 100644 index 0000000000..b4c87ae5e3 --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/src/lib/directives/free-text-input.directive.ts @@ -0,0 +1,38 @@ +import { Directive, Input, HostBinding } from '@angular/core'; + +// TODO: improve this type +export interface FreeTextType { + valueType: { + validator: { + name: string; + }; + }; +} + +export const INPUT_TYPES = { + numeric: 'number', + default: 'text', +}; + +@Directive({ + selector: 'input[abpFreeText]', + exportAs: 'inputAbpFreeText', +}) +export class FreeTextInputDirective { + _feature: FreeTextType; + @Input('abpFreeText') set feature(val: FreeTextType) { + this._feature = val; + this.setInputType(); + } + + get feature() { + return this._feature; + } + + @HostBinding('type') type: string; + + private setInputType() { + const validatorType = this.feature?.valueType?.validator?.name.toLowerCase(); + this.type = INPUT_TYPES[validatorType] ?? INPUT_TYPES.default; + } +} diff --git a/npm/ng-packs/packages/theme-shared/src/lib/directives/index.ts b/npm/ng-packs/packages/theme-shared/src/lib/directives/index.ts index a6b666be3b..16ee0cf9c3 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/directives/index.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/directives/index.ts @@ -2,3 +2,4 @@ export * from './loading.directive'; export * from './ngx-datatable-default.directive'; export * from './ngx-datatable-list.directive'; export * from './table-sort.directive'; +export * from './free-text-input.directive'; 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 e45ac8d1e3..1c60973c2f 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 @@ -29,6 +29,7 @@ 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 { DateParserFormatter } from './utils/date-parser-formatter'; +import { FreeTextInputDirective } from './directives/free-text-input.directive'; @NgModule({ imports: [CoreModule, NgxDatatableModule, NgxValidateCoreModule, NgbPaginationModule], @@ -51,6 +52,7 @@ import { DateParserFormatter } from './utils/date-parser-formatter'; NgxDatatableListDirective, LoadingDirective, TableSortDirective, + FreeTextInputDirective, ], exports: [ NgxDatatableModule, @@ -70,6 +72,7 @@ import { DateParserFormatter } from './utils/date-parser-formatter'; NgxDatatableListDirective, LoadingDirective, TableSortDirective, + FreeTextInputDirective, ], providers: [DatePipe], entryComponents: [