From 1adc27f85c1c40669042a033bf7fe311e95e710c Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Mon, 6 Oct 2025 17:15:55 +0300 Subject: [PATCH 01/25] dynamic form component init --- npm/ng-packs/packages/components/dynamic-form/README.md | 3 +++ .../packages/components/dynamic-form/ng-package.json | 5 +++++ npm/ng-packs/packages/components/dynamic-form/src/index.ts | 1 + .../components/dynamic-form/src/lib/dynamic-form.module.ts | 7 +++++++ npm/ng-packs/packages/components/tsconfig.lib.json | 2 +- npm/ng-packs/tsconfig.base.json | 1 + 6 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 npm/ng-packs/packages/components/dynamic-form/README.md create mode 100644 npm/ng-packs/packages/components/dynamic-form/ng-package.json create mode 100644 npm/ng-packs/packages/components/dynamic-form/src/index.ts create mode 100644 npm/ng-packs/packages/components/dynamic-form/src/lib/dynamic-form.module.ts diff --git a/npm/ng-packs/packages/components/dynamic-form/README.md b/npm/ng-packs/packages/components/dynamic-form/README.md new file mode 100644 index 0000000000..b827823f31 --- /dev/null +++ b/npm/ng-packs/packages/components/dynamic-form/README.md @@ -0,0 +1,3 @@ +# @abp/ng.components/dynamic-form + +Secondary entry point of `@abp/ng.components`. It can be used by importing from `@abp/ng.components/dynamic-form`. diff --git a/npm/ng-packs/packages/components/dynamic-form/ng-package.json b/npm/ng-packs/packages/components/dynamic-form/ng-package.json new file mode 100644 index 0000000000..c781f0df46 --- /dev/null +++ b/npm/ng-packs/packages/components/dynamic-form/ng-package.json @@ -0,0 +1,5 @@ +{ + "lib": { + "entryFile": "src/index.ts" + } +} diff --git a/npm/ng-packs/packages/components/dynamic-form/src/index.ts b/npm/ng-packs/packages/components/dynamic-form/src/index.ts new file mode 100644 index 0000000000..c8ef4caca8 --- /dev/null +++ b/npm/ng-packs/packages/components/dynamic-form/src/index.ts @@ -0,0 +1 @@ +export * from './lib/dynamic-form.module'; diff --git a/npm/ng-packs/packages/components/dynamic-form/src/lib/dynamic-form.module.ts b/npm/ng-packs/packages/components/dynamic-form/src/lib/dynamic-form.module.ts new file mode 100644 index 0000000000..de647527c6 --- /dev/null +++ b/npm/ng-packs/packages/components/dynamic-form/src/lib/dynamic-form.module.ts @@ -0,0 +1,7 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +@NgModule({ + imports: [CommonModule], +}) +export class DynamicFormModule {} diff --git a/npm/ng-packs/packages/components/tsconfig.lib.json b/npm/ng-packs/packages/components/tsconfig.lib.json index 22d2695db8..478ba03368 100644 --- a/npm/ng-packs/packages/components/tsconfig.lib.json +++ b/npm/ng-packs/packages/components/tsconfig.lib.json @@ -10,6 +10,6 @@ "lib": ["dom", "es2020"], "useDefineForClassFields": false }, - "exclude": ["src/test-setup.ts", "**/*.spec.ts", "jest.config.ts"], + "exclude": ["test-setup.ts", "**/*.spec.ts", "jest.config.ts"], "include": ["**/*.ts"] } diff --git a/npm/ng-packs/tsconfig.base.json b/npm/ng-packs/tsconfig.base.json index f863f18520..f24e108aef 100644 --- a/npm/ng-packs/tsconfig.base.json +++ b/npm/ng-packs/tsconfig.base.json @@ -21,6 +21,7 @@ "@abp/ng.account/config": ["packages/account/config/src/public-api.ts"], "@abp/ng.components": ["packages/components/src/public-api.ts"], "@abp/ng.components/chart.js": ["packages/components/chart.js/src/public-api.ts"], + "@abp/ng.components/dynamic-form": ["packages/components/dynamic-form/src/index.ts"], "@abp/ng.components/extensible": ["packages/components/extensible/src/public-api.ts"], "@abp/ng.components/page": ["packages/components/page/src/public-api.ts"], "@abp/ng.components/tree": ["packages/components/tree/src/public-api.ts"], From fe26f7130e082b4182be4f7fdbc4f8ab00bb9369 Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Mon, 6 Oct 2025 17:59:55 +0300 Subject: [PATCH 02/25] refactoring --- .../packages/components/dynamic-form/ng-package.json | 3 ++- .../components/dynamic-form/src/dynamic-form.component.ts | 8 ++++++++ .../packages/components/dynamic-form/src/index.ts | 1 - .../dynamic-form/src/lib/dynamic-form.module.ts | 7 ------- .../packages/components/dynamic-form/src/public-api.ts | 1 + npm/ng-packs/tsconfig.base.json | 2 +- 6 files changed, 12 insertions(+), 10 deletions(-) create mode 100644 npm/ng-packs/packages/components/dynamic-form/src/dynamic-form.component.ts delete mode 100644 npm/ng-packs/packages/components/dynamic-form/src/index.ts delete mode 100644 npm/ng-packs/packages/components/dynamic-form/src/lib/dynamic-form.module.ts create mode 100644 npm/ng-packs/packages/components/dynamic-form/src/public-api.ts diff --git a/npm/ng-packs/packages/components/dynamic-form/ng-package.json b/npm/ng-packs/packages/components/dynamic-form/ng-package.json index c781f0df46..e09fb3fd03 100644 --- a/npm/ng-packs/packages/components/dynamic-form/ng-package.json +++ b/npm/ng-packs/packages/components/dynamic-form/ng-package.json @@ -1,5 +1,6 @@ { + "$schema": "../../../node_modules/ng-packagr/ng-entrypoint.schema.json", "lib": { - "entryFile": "src/index.ts" + "entryFile": "src/public-api.ts" } } diff --git a/npm/ng-packs/packages/components/dynamic-form/src/dynamic-form.component.ts b/npm/ng-packs/packages/components/dynamic-form/src/dynamic-form.component.ts new file mode 100644 index 0000000000..1f3dc53da4 --- /dev/null +++ b/npm/ng-packs/packages/components/dynamic-form/src/dynamic-form.component.ts @@ -0,0 +1,8 @@ +import { Component } from "@angular/core"; + +@Component({ + selector: 'lib-dynamic-form', + template: `` +}) + +export class DynamicFormComponent {} diff --git a/npm/ng-packs/packages/components/dynamic-form/src/index.ts b/npm/ng-packs/packages/components/dynamic-form/src/index.ts deleted file mode 100644 index c8ef4caca8..0000000000 --- a/npm/ng-packs/packages/components/dynamic-form/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './lib/dynamic-form.module'; diff --git a/npm/ng-packs/packages/components/dynamic-form/src/lib/dynamic-form.module.ts b/npm/ng-packs/packages/components/dynamic-form/src/lib/dynamic-form.module.ts deleted file mode 100644 index de647527c6..0000000000 --- a/npm/ng-packs/packages/components/dynamic-form/src/lib/dynamic-form.module.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; - -@NgModule({ - imports: [CommonModule], -}) -export class DynamicFormModule {} diff --git a/npm/ng-packs/packages/components/dynamic-form/src/public-api.ts b/npm/ng-packs/packages/components/dynamic-form/src/public-api.ts new file mode 100644 index 0000000000..38ece63528 --- /dev/null +++ b/npm/ng-packs/packages/components/dynamic-form/src/public-api.ts @@ -0,0 +1 @@ +export * from './dynamic-form.component'; diff --git a/npm/ng-packs/tsconfig.base.json b/npm/ng-packs/tsconfig.base.json index f24e108aef..0adc8db800 100644 --- a/npm/ng-packs/tsconfig.base.json +++ b/npm/ng-packs/tsconfig.base.json @@ -21,7 +21,7 @@ "@abp/ng.account/config": ["packages/account/config/src/public-api.ts"], "@abp/ng.components": ["packages/components/src/public-api.ts"], "@abp/ng.components/chart.js": ["packages/components/chart.js/src/public-api.ts"], - "@abp/ng.components/dynamic-form": ["packages/components/dynamic-form/src/index.ts"], + "@abp/ng.components/dynamic-form": ["packages/components/dynamic-form/src/public-api.ts"], "@abp/ng.components/extensible": ["packages/components/extensible/src/public-api.ts"], "@abp/ng.components/page": ["packages/components/page/src/public-api.ts"], "@abp/ng.components/tree": ["packages/components/tree/src/public-api.ts"], From e8ced7075f053307e8bd6e3eaecba02761eacc27 Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Mon, 6 Oct 2025 23:37:45 +0300 Subject: [PATCH 03/25] refactoring --- npm/ng-packs/packages/components/dynamic-form/README.md | 3 --- .../dynamic-form/src/dynamic-form-field.component.ts | 9 +++++++++ .../dynamic-form/src/dynamic-form.component.ts | 7 ++++--- .../components/dynamic-form/src/dynamic-form.models.ts | 0 .../components/dynamic-form/src/dynamic-form.service.ts | 8 ++++++++ 5 files changed, 21 insertions(+), 6 deletions(-) delete mode 100644 npm/ng-packs/packages/components/dynamic-form/README.md create mode 100644 npm/ng-packs/packages/components/dynamic-form/src/dynamic-form-field.component.ts create mode 100644 npm/ng-packs/packages/components/dynamic-form/src/dynamic-form.models.ts create mode 100644 npm/ng-packs/packages/components/dynamic-form/src/dynamic-form.service.ts diff --git a/npm/ng-packs/packages/components/dynamic-form/README.md b/npm/ng-packs/packages/components/dynamic-form/README.md deleted file mode 100644 index b827823f31..0000000000 --- a/npm/ng-packs/packages/components/dynamic-form/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# @abp/ng.components/dynamic-form - -Secondary entry point of `@abp/ng.components`. It can be used by importing from `@abp/ng.components/dynamic-form`. diff --git a/npm/ng-packs/packages/components/dynamic-form/src/dynamic-form-field.component.ts b/npm/ng-packs/packages/components/dynamic-form/src/dynamic-form-field.component.ts new file mode 100644 index 0000000000..63875e5507 --- /dev/null +++ b/npm/ng-packs/packages/components/dynamic-form/src/dynamic-form-field.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'abp-dynamic-form-field', + template: ``, + changeDetection: ChangeDetectionStrategy.OnPush +}) + +export class DynamicFormFieldComponent {} diff --git a/npm/ng-packs/packages/components/dynamic-form/src/dynamic-form.component.ts b/npm/ng-packs/packages/components/dynamic-form/src/dynamic-form.component.ts index 1f3dc53da4..725f559e05 100644 --- a/npm/ng-packs/packages/components/dynamic-form/src/dynamic-form.component.ts +++ b/npm/ng-packs/packages/components/dynamic-form/src/dynamic-form.component.ts @@ -1,8 +1,9 @@ -import { Component } from "@angular/core"; +import { ChangeDetectionStrategy, Component } from '@angular/core'; @Component({ - selector: 'lib-dynamic-form', - template: `` + selector: 'abp-dynamic-form', + template: ``, + changeDetection: ChangeDetectionStrategy.OnPush }) export class DynamicFormComponent {} diff --git a/npm/ng-packs/packages/components/dynamic-form/src/dynamic-form.models.ts b/npm/ng-packs/packages/components/dynamic-form/src/dynamic-form.models.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/npm/ng-packs/packages/components/dynamic-form/src/dynamic-form.service.ts b/npm/ng-packs/packages/components/dynamic-form/src/dynamic-form.service.ts new file mode 100644 index 0000000000..0653dd5e5e --- /dev/null +++ b/npm/ng-packs/packages/components/dynamic-form/src/dynamic-form.service.ts @@ -0,0 +1,8 @@ +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root', +}) +export class DynamicFormFieldService { + // Add any shared logic for dynamic form fields here if needed in the future +} From 753350d150ef8a0bca1399bf24b4509fb3db7ea9 Mon Sep 17 00:00:00 2001 From: erdemcaygor Date: Tue, 7 Oct 2025 13:45:01 +0300 Subject: [PATCH 04/25] refactoring --- .../src/dynamic-form-field.component.ts | 9 -- .../dynamic-form-field-control.ts | 75 ++++++++++ .../dynamic-form-field.component.html | 99 ++++++++++++++ .../dynamic-form-field.component.ts | 56 ++++++++ .../src/dynamic-form-field/index.ts | 1 + .../src/dynamic-form.component.ts | 129 +++++++++++++++++- .../dynamic-form/src/dynamic-form.models.ts | 27 ++++ .../dynamic-form/src/dynamic-form.service.ts | 56 +++++++- .../components/dynamic-form/src/public-api.ts | 1 + 9 files changed, 438 insertions(+), 15 deletions(-) delete mode 100644 npm/ng-packs/packages/components/dynamic-form/src/dynamic-form-field.component.ts create mode 100644 npm/ng-packs/packages/components/dynamic-form/src/dynamic-form-field/dynamic-form-field-control.ts create mode 100644 npm/ng-packs/packages/components/dynamic-form/src/dynamic-form-field/dynamic-form-field.component.html create mode 100644 npm/ng-packs/packages/components/dynamic-form/src/dynamic-form-field/dynamic-form-field.component.ts create mode 100644 npm/ng-packs/packages/components/dynamic-form/src/dynamic-form-field/index.ts diff --git a/npm/ng-packs/packages/components/dynamic-form/src/dynamic-form-field.component.ts b/npm/ng-packs/packages/components/dynamic-form/src/dynamic-form-field.component.ts deleted file mode 100644 index 63875e5507..0000000000 --- a/npm/ng-packs/packages/components/dynamic-form/src/dynamic-form-field.component.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; - -@Component({ - selector: 'abp-dynamic-form-field', - template: ``, - changeDetection: ChangeDetectionStrategy.OnPush -}) - -export class DynamicFormFieldComponent {} diff --git a/npm/ng-packs/packages/components/dynamic-form/src/dynamic-form-field/dynamic-form-field-control.ts b/npm/ng-packs/packages/components/dynamic-form/src/dynamic-form-field/dynamic-form-field-control.ts new file mode 100644 index 0000000000..3a87454884 --- /dev/null +++ b/npm/ng-packs/packages/components/dynamic-form/src/dynamic-form-field/dynamic-form-field-control.ts @@ -0,0 +1,75 @@ + +import {Observable} from 'rxjs'; +import {AbstractControlDirective, NgControl} from '@angular/forms'; +import {Directive} from '@angular/core'; + +@Directive() +export abstract class MatFormFieldControl { + /** The value of the control. */ + value: T | null; + + /** + * Stream that emits whenever the state of the control changes such that the parent `MatFormField` + * needs to run change detection. + */ + readonly stateChanges: Observable; + + /** The element ID for this control. */ + readonly id: string; + + /** The placeholder for this control. */ + readonly placeholder: string; + + /** Gets the AbstractControlDirective for this control. */ + readonly ngControl: NgControl | AbstractControlDirective | null; + + /** Whether the control is focused. */ + readonly focused: boolean; + + /** Whether the control is empty. */ + readonly empty: boolean; + + /** Whether the control is required. */ + readonly required: boolean; + + /** Whether the control is disabled. */ + readonly disabled: boolean; + + /** Whether the control is in an error state. */ + readonly errorState: boolean; + + /** + * An optional name for the control type that can be used to distinguish `mat-form-field` elements + * based on their control type. The form field will add a class, + * `mat-form-field-type-{{controlType}}` to its root element. + */ + readonly controlType?: string; + + /** + * Whether the input is currently in an autofilled state. If property is not present on the + * control it is assumed to be false. + */ + readonly autofilled?: boolean; + + /** + * Value of `aria-describedby` that should be merged with the described-by ids + * which are set by the form-field. + */ + readonly userAriaDescribedBy?: string; + + /** + * Whether to automatically assign the ID of the form field as the `for` attribute + * on the `