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 ef1647b540..30d115216b 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
@@ -1,15 +1,13 @@
-
+
@@ -19,28 +17,26 @@
{{ prop.displayName | abpLocalization }} {{ asterisk }}
-
+
-
+
-
+
-
+
-
+
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 f796c2d5fe..4a28b14f22 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
@@ -1,14 +1,17 @@
-import { TrackByService } from '@abp/ng.core';
+import { ABP, TrackByService } from '@abp/ng.core';
import {
ChangeDetectionStrategy,
ChangeDetectorRef,
Component,
Input,
Optional,
+ SimpleChanges,
SkipSelf,
+ OnChanges,
} from '@angular/core';
-import { ControlContainer, Validators } from '@angular/forms';
+import { ControlContainer, Validators, ValidatorFn } from '@angular/forms';
import { NgbDateAdapter, NgbTimeAdapter } from '@ng-bootstrap/ng-bootstrap';
+import { Observable, of } from 'rxjs';
import { DateAdapter } from '../../adapters/date.adapter';
import { TimeAdapter } from '../../adapters/time.adapter';
import { ePropType } from '../../enums/props.enum';
@@ -30,15 +33,23 @@ import { selfFactory } from '../../utils/factory.util';
{ provide: NgbTimeAdapter, useClass: TimeAdapter },
],
})
-export class ExtensibleFormPropComponent {
+export class ExtensibleFormPropComponent implements OnChanges {
@Input() data: PropData;
@Input() prop: FormProp;
+ options$: Observable[]> = of([]);
+
+ validators: ValidatorFn[] = [];
+
+ readonly: boolean;
+
+ disabled: boolean;
+
constructor(public readonly cdRef: ChangeDetectorRef, public readonly track: TrackByService) {}
- getAsterisk(prop: FormProp, data: PropData): string {
- return prop.validators(data).some(validator => validator === Validators.required) ? '*' : '';
+ get asterisk(): string {
+ return this.validators.some(validator => validator === Validators.required) ? '*' : '';
}
getComponent(prop: FormProp): string {
@@ -77,4 +88,16 @@ export class ExtensibleFormPropComponent {
return 'hidden';
}
}
+
+ ngOnChanges({ prop }: SimpleChanges) {
+ const options = prop.currentValue.options;
+ const readonly = prop.currentValue.readonly;
+ const disabled = prop.currentValue.disabled;
+ const validators = prop.currentValue.validators;
+
+ if (options) this.options$ = options(this.data);
+ if (readonly) this.readonly = readonly(this.data);
+ if (disabled) this.disabled = disabled(this.data);
+ if (validators) this.validators = validators(this.data);
+ }
}
diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form.component.ts b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form.component.ts
index 995b29b8d1..f15f173faa 100644
--- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form.component.ts
+++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form.component.ts
@@ -1,20 +1,16 @@
import { TrackByService } from '@abp/ng.core';
import {
- AfterViewInit,
ChangeDetectionStrategy,
ChangeDetectorRef,
Component,
Inject,
Input,
- OnDestroy,
Optional,
QueryList,
SkipSelf,
ViewChildren,
} from '@angular/core';
import { ControlContainer, FormGroup } from '@angular/forms';
-import { Subscription } from 'rxjs';
-import { debounceTime } from 'rxjs/operators';
import { EXTRA_PROPERTIES_KEY } from '../../constants/extra-properties';
import { FormPropList } from '../../models/form-props';
import { ExtensionsService } from '../../services/extensions.service';
@@ -35,7 +31,7 @@ import { ExtensibleFormPropComponent } from './extensible-form-prop.component';
},
],
})
-export class ExtensibleFormComponent implements AfterViewInit, OnDestroy {
+export class ExtensibleFormComponent {
@ViewChildren(ExtensibleFormPropComponent)
formProps: QueryList;
@@ -46,7 +42,6 @@ export class ExtensibleFormComponent implements AfterViewInit, OnDestro
this.record = record;
}
- private subscription = new Subscription();
extraPropertiesKey = EXTRA_PROPERTIES_KEY;
propList: FormPropList;
record: R;
@@ -66,17 +61,4 @@ export class ExtensibleFormComponent implements AfterViewInit, OnDestro
private extensions: ExtensionsService,
@Inject(EXTENSIONS_IDENTIFIER) private identifier: string,
) {}
-
- ngAfterViewInit() {
- this.subscription.add(
- this.form.statusChanges.pipe(debounceTime(0)).subscribe(() => {
- this.formProps.forEach(prop => prop.cdRef.markForCheck());
- this.cdRef.detectChanges();
- }),
- );
- }
-
- ngOnDestroy() {
- this.subscription.unsubscribe();
- }
}