Field customizer
This commit is contained in:
@@ -4,11 +4,46 @@ import { FormlyFieldConfig } from '@ngx-formly/core'
|
|||||||
import { ActivatedRoute, Router } from '@angular/router';
|
import { ActivatedRoute, Router } from '@angular/router';
|
||||||
|
|
||||||
import { CrudService } from '../crud.service'
|
import { CrudService } from '../crud.service'
|
||||||
import { BehaviorSubject } from "rxjs";
|
import {BehaviorSubject, NotFoundError} from "rxjs";
|
||||||
import {CrudFormlyJsonschemaService} from "../crud-formly-jsonschema.service";
|
import { CrudFormlyJsonschemaService } from "../crud-formly-jsonschema.service";
|
||||||
|
|
||||||
export interface Model {
|
export class FieldCustomizer {
|
||||||
email: string;
|
protected customizers = {};
|
||||||
|
|
||||||
|
applyCustomizers(form: FormlyFieldConfig[]): FormlyFieldConfig[] {
|
||||||
|
for (const [property, customizer] of Object.entries(this.customizers)) {
|
||||||
|
const f = this.getFieldByPath(form, property);
|
||||||
|
this.apply(f, customizer)
|
||||||
|
}
|
||||||
|
return form
|
||||||
|
}
|
||||||
|
|
||||||
|
apply(field: FormlyFieldConfig, customizer: any) {
|
||||||
|
if (customizer.hasOwnProperty("props")) {
|
||||||
|
for (const [property, value] of Object.entries(customizer.props)) {
|
||||||
|
field.props![property] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getFieldByPath(form: FormlyFieldConfig[], path: string): FormlyFieldConfig {
|
||||||
|
let field = form[0];
|
||||||
|
let array = path.split('.');
|
||||||
|
for (const k in array) {
|
||||||
|
field = this.getFieldByKey(field, array[k])
|
||||||
|
}
|
||||||
|
|
||||||
|
return field;
|
||||||
|
}
|
||||||
|
|
||||||
|
getFieldByKey(field: FormlyFieldConfig, key: string): FormlyFieldConfig {
|
||||||
|
for (let i=0; i < field.fieldGroup!.length; i++) {
|
||||||
|
if (field.fieldGroup![i].key == key) {
|
||||||
|
return field.fieldGroup![i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new NotFoundError(`field ${key} not found in fieldgroup`)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
@@ -20,6 +55,7 @@ export class CardComponent implements OnInit {
|
|||||||
@Input() resource: string | undefined;
|
@Input() resource: string | undefined;
|
||||||
@Input() resource_id: string | null = null;
|
@Input() resource_id: string | null = null;
|
||||||
@Input() schema: string | undefined;
|
@Input() schema: string | undefined;
|
||||||
|
@Input() field_customizer: FieldCustomizer = new FieldCustomizer();
|
||||||
@Input() is_modal: Boolean = false;
|
@Input() is_modal: Boolean = false;
|
||||||
|
|
||||||
@Output() resourceCreated: EventEmitter<string> = new EventEmitter();
|
@Output() resourceCreated: EventEmitter<string> = new EventEmitter();
|
||||||
@@ -65,7 +101,7 @@ export class CardComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fields$.subscribe((fields: any) => {
|
fields$.subscribe((fields: any) => {
|
||||||
this.fields = [fields]
|
this.fields = this.field_customizer.applyCustomizers([fields]);
|
||||||
this._formLoading$.next(false);
|
this._formLoading$.next(false);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user