@ngx-formly/core 6.1.3 → 6.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/formly.field.mjs +2 -2
- package/esm2020/lib/extensions/field-expression/field-expression.mjs +25 -18
- package/esm2020/lib/extensions/field-form/field-form.mjs +5 -2
- package/esm2020/lib/utils.mjs +2 -2
- package/esm2020/select/select-options.pipe.mjs +1 -1
- package/fesm2015/ngx-formly-core-select.mjs.map +1 -1
- package/fesm2015/ngx-formly-core.mjs +30 -20
- package/fesm2015/ngx-formly-core.mjs.map +1 -1
- package/fesm2020/ngx-formly-core-select.mjs.map +1 -1
- package/fesm2020/ngx-formly-core.mjs +30 -20
- package/fesm2020/ngx-formly-core.mjs.map +1 -1
- package/lib/utils.d.ts +1 -1
- package/package.json +1 -1
- package/select/select-options.pipe.d.ts +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-formly-core-select.mjs","sources":["../../../../src/core/select/src/select-options.pipe.ts","../../../../src/core/select/src/select.module.ts","../../../../src/core/select/src/ngx-formly-core-select.ts"],"sourcesContent":["import { OnDestroy, Pipe, PipeTransform } from '@angular/core';\nimport { BehaviorSubject, Observable, Subscription } from 'rxjs';\nimport { filter, map, tap } from 'rxjs/operators';\nimport { FormlyFieldConfig, FormlyFieldProps } from '@ngx-formly/core';\n\nexport interface FormlySelectOption {\n label: string;\n disabled?: boolean;\n value?: any;\n group?: FormlySelectOption[];\n}\n\nexport interface FormlyFieldSelectProps extends FormlyFieldProps {\n groupProp?: string | ((option: any) => string);\n labelProp?: string | ((option: any) =>
|
|
1
|
+
{"version":3,"file":"ngx-formly-core-select.mjs","sources":["../../../../src/core/select/src/select-options.pipe.ts","../../../../src/core/select/src/select.module.ts","../../../../src/core/select/src/ngx-formly-core-select.ts"],"sourcesContent":["import { OnDestroy, Pipe, PipeTransform } from '@angular/core';\nimport { BehaviorSubject, Observable, Subscription } from 'rxjs';\nimport { filter, map, tap } from 'rxjs/operators';\nimport { FormlyFieldConfig, FormlyFieldProps } from '@ngx-formly/core';\n\nexport interface FormlySelectOption {\n label: string;\n disabled?: boolean;\n value?: any;\n group?: FormlySelectOption[];\n}\n\nexport interface FormlyFieldSelectProps extends FormlyFieldProps {\n groupProp?: string | ((option: any) => string);\n labelProp?: string | ((option: any) => string);\n valueProp?: string | ((option: any) => any);\n disabledProp?: string | ((option: any) => boolean);\n}\n\ntype ITransformOption = {\n labelProp: (option: any) => string;\n valueProp: (option: any) => any;\n disabledProp: (option: any) => boolean;\n groupProp: (option: any) => string;\n};\n\n@Pipe({ name: 'formlySelectOptions' })\nexport class FormlySelectOptionsPipe implements PipeTransform, OnDestroy {\n private _subscription: Subscription;\n private _options: BehaviorSubject<any[]>;\n\n transform(options: any, field?: FormlyFieldConfig): Observable<FormlySelectOption[]> {\n if (!(options instanceof Observable)) {\n options = this.observableOf(options, field);\n } else {\n this.dispose();\n }\n\n return (options as Observable<any>).pipe(map((value) => this.transformOptions(value, field)));\n }\n\n ngOnDestroy(): void {\n this.dispose();\n }\n\n private transformOptions(options: any[], field?: FormlyFieldConfig): FormlySelectOption[] {\n const to = this.transformSelectProps(field);\n\n const opts: FormlySelectOption[] = [];\n const groups: { [id: string]: number } = {};\n\n options?.forEach((option) => {\n const o = this.transformOption(option, to);\n if (o.group) {\n const id = groups[o.label];\n if (id === undefined) {\n groups[o.label] = opts.push(o) - 1;\n } else {\n o.group.forEach((o) => opts[id].group.push(o));\n }\n } else {\n opts.push(o);\n }\n });\n\n return opts;\n }\n\n private transformOption(option: any, props: ITransformOption): FormlySelectOption {\n const group = props.groupProp(option);\n if (Array.isArray(group)) {\n return {\n label: props.labelProp(option),\n group: group.map((opt) => this.transformOption(opt, props)),\n };\n }\n\n option = {\n label: props.labelProp(option),\n value: props.valueProp(option),\n disabled: !!props.disabledProp(option),\n };\n\n if (group) {\n return { label: group, group: [option] };\n }\n\n return option;\n }\n\n private transformSelectProps(field?: FormlyFieldConfig): ITransformOption {\n const props = field?.props || field?.templateOptions || {};\n const selectPropFn = (prop: any) => (typeof prop === 'function' ? prop : (o: any) => o[prop]);\n\n return {\n groupProp: selectPropFn(props.groupProp || 'group'),\n labelProp: selectPropFn(props.labelProp || 'label'),\n valueProp: selectPropFn(props.valueProp || 'value'),\n disabledProp: selectPropFn(props.disabledProp || 'disabled'),\n };\n }\n\n private dispose() {\n if (this._options) {\n this._options.complete();\n this._options = null;\n }\n\n if (this._subscription) {\n this._subscription.unsubscribe();\n this._subscription = null;\n }\n }\n\n private observableOf(options: any, f?: FormlyFieldConfig) {\n this.dispose();\n if (f && f.options && f.options.fieldChanges) {\n this._subscription = f.options.fieldChanges\n .pipe(\n filter(({ property, type, field }) => {\n return (\n type === 'expressionChanges' &&\n (property.indexOf('templateOptions.options') === 0 || property.indexOf('props.options') === 0) &&\n field === f &&\n Array.isArray(field.props.options) &&\n !!this._options\n );\n }),\n tap(() => this._options.next(f.props.options as any)),\n )\n .subscribe();\n }\n\n this._options = new BehaviorSubject(options);\n return this._options.asObservable();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FormlySelectOptionsPipe } from './select-options.pipe';\n\n@NgModule({\n declarations: [FormlySelectOptionsPipe],\n exports: [FormlySelectOptionsPipe],\n})\nexport class FormlySelectModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
@@ -220,7 +220,7 @@ function observe(o, paths, setFn) {
|
|
|
220
220
|
if (state.onChange.indexOf(setFn) === -1) {
|
|
221
221
|
state.onChange.push(setFn);
|
|
222
222
|
setFn({ currentValue: state.value, firstChange: true });
|
|
223
|
-
if (state.onChange.length >= 1) {
|
|
223
|
+
if (state.onChange.length >= 1 && isObject(target)) {
|
|
224
224
|
const { enumerable } = Object.getOwnPropertyDescriptor(target, key) || { enumerable: true };
|
|
225
225
|
Object.defineProperty(target, key, {
|
|
226
226
|
enumerable,
|
|
@@ -892,7 +892,7 @@ class FormlyField {
|
|
|
892
892
|
}
|
|
893
893
|
const subscribes = [
|
|
894
894
|
observeDeep(field, ['props'], () => field.options.detectChanges(field)),
|
|
895
|
-
observeDeep(field
|
|
895
|
+
observeDeep(field, ['options', 'formState'], () => field.options.detectChanges(field)),
|
|
896
896
|
];
|
|
897
897
|
for (const key of Object.keys(field._expressions || {})) {
|
|
898
898
|
const expressionObserver = observe(field, ['_expressions', key], ({ currentValue, previousValue }) => {
|
|
@@ -1685,28 +1685,35 @@ class FieldExpressionExtension {
|
|
|
1685
1685
|
}
|
|
1686
1686
|
}
|
|
1687
1687
|
evalExpr(field, prop, value) {
|
|
1688
|
-
try {
|
|
1689
|
-
let target = field;
|
|
1690
|
-
const paths = this._evalExpressionPath(field, prop);
|
|
1691
|
-
const lastIndex = paths.length - 1;
|
|
1692
|
-
for (let i = 0; i < lastIndex; i++) {
|
|
1693
|
-
target = target[paths[i]];
|
|
1694
|
-
}
|
|
1695
|
-
target[paths[lastIndex]] = value;
|
|
1696
|
-
}
|
|
1697
|
-
catch (error) {
|
|
1698
|
-
error.message = `[Formly Error] [Expression "${prop}"] ${error.message}`;
|
|
1699
|
-
throw error;
|
|
1700
|
-
}
|
|
1701
|
-
if (['templateOptions.disabled', 'props.disabled'].includes(prop) && hasKey(field)) {
|
|
1702
|
-
this.changeDisabledState(field, value);
|
|
1703
|
-
}
|
|
1704
1688
|
if (prop.indexOf('model.') === 0) {
|
|
1705
|
-
const key = prop.replace(/^model\./, ''),
|
|
1689
|
+
const key = prop.replace(/^model\./, ''), parent = field.fieldGroup ? field : field.parent;
|
|
1690
|
+
let control = field?.key === key ? field.formControl : field.form.get(key);
|
|
1691
|
+
if (!control && field.get(key)) {
|
|
1692
|
+
control = field.get(key).formControl;
|
|
1693
|
+
}
|
|
1694
|
+
assignFieldValue({ key, parent, model: field.model }, value);
|
|
1706
1695
|
if (control && !(isNil(control.value) && isNil(value)) && control.value !== value) {
|
|
1707
1696
|
control.patchValue(value);
|
|
1708
1697
|
}
|
|
1709
1698
|
}
|
|
1699
|
+
else {
|
|
1700
|
+
try {
|
|
1701
|
+
let target = field;
|
|
1702
|
+
const paths = this._evalExpressionPath(field, prop);
|
|
1703
|
+
const lastIndex = paths.length - 1;
|
|
1704
|
+
for (let i = 0; i < lastIndex; i++) {
|
|
1705
|
+
target = target[paths[i]];
|
|
1706
|
+
}
|
|
1707
|
+
target[paths[lastIndex]] = value;
|
|
1708
|
+
}
|
|
1709
|
+
catch (error) {
|
|
1710
|
+
error.message = `[Formly Error] [Expression "${prop}"] ${error.message}`;
|
|
1711
|
+
throw error;
|
|
1712
|
+
}
|
|
1713
|
+
if (['templateOptions.disabled', 'props.disabled'].includes(prop) && hasKey(field)) {
|
|
1714
|
+
this.changeDisabledState(field, value);
|
|
1715
|
+
}
|
|
1716
|
+
}
|
|
1710
1717
|
this.emitExpressionChanges(field, prop, value);
|
|
1711
1718
|
}
|
|
1712
1719
|
emitExpressionChanges(field, property, value) {
|
|
@@ -1919,6 +1926,9 @@ class FieldFormExtension {
|
|
|
1919
1926
|
}
|
|
1920
1927
|
addFormControl(field) {
|
|
1921
1928
|
let control = findControl(field);
|
|
1929
|
+
if (field.fieldArray) {
|
|
1930
|
+
return;
|
|
1931
|
+
}
|
|
1922
1932
|
if (!control) {
|
|
1923
1933
|
const controlOptions = { updateOn: field.modelOptions.updateOn };
|
|
1924
1934
|
if (field.fieldGroup) {
|
|
@@ -1926,7 +1936,7 @@ class FieldFormExtension {
|
|
|
1926
1936
|
}
|
|
1927
1937
|
else {
|
|
1928
1938
|
const value = hasKey(field) ? getFieldValue(field) : field.defaultValue;
|
|
1929
|
-
control = new FormControl({ value, disabled:
|
|
1939
|
+
control = new FormControl({ value, disabled: !!field.props.disabled }, { ...controlOptions, initialValueIsDefault: true });
|
|
1930
1940
|
}
|
|
1931
1941
|
}
|
|
1932
1942
|
registerControl(field, control);
|