@ngx-formly/core
Version:
Formly is a dynamic (JSON powered) form library for Angular that bring unmatched maintainability to your application's forms.
100 lines • 14.5 kB
JavaScript
import { Pipe } from '@angular/core';
import { BehaviorSubject, Observable } from 'rxjs';
import { filter, map, tap } from 'rxjs/operators';
import * as i0 from "@angular/core";
export class FormlySelectOptionsPipe {
transform(options, field) {
if (!(options instanceof Observable)) {
options = this.observableOf(options, field);
}
else {
this.dispose();
}
return options.pipe(map((value) => this.transformOptions(value, field)));
}
ngOnDestroy() {
this.dispose();
}
transformOptions(options, field) {
const to = this.transformSelectProps(field);
const opts = [];
const groups = {};
options?.forEach((option) => {
const o = this.transformOption(option, to);
if (o.group) {
const id = groups[o.label];
if (id === undefined) {
groups[o.label] = opts.push(o) - 1;
}
else {
o.group.forEach((o) => opts[id].group.push(o));
}
}
else {
opts.push(o);
}
});
return opts;
}
transformOption(option, props) {
const group = props.groupProp(option);
if (Array.isArray(group)) {
return {
label: props.labelProp(option),
group: group.map((opt) => this.transformOption(opt, props)),
};
}
option = {
label: props.labelProp(option),
value: props.valueProp(option),
disabled: !!props.disabledProp(option),
};
if (group) {
return { label: group, group: [option] };
}
return option;
}
transformSelectProps(field) {
const props = field?.props || field?.templateOptions || {};
const selectPropFn = (prop) => (typeof prop === 'function' ? prop : (o) => o[prop]);
return {
groupProp: selectPropFn(props.groupProp || 'group'),
labelProp: selectPropFn(props.labelProp || 'label'),
valueProp: selectPropFn(props.valueProp || 'value'),
disabledProp: selectPropFn(props.disabledProp || 'disabled'),
};
}
dispose() {
if (this._options) {
this._options.complete();
this._options = null;
}
if (this._subscription) {
this._subscription.unsubscribe();
this._subscription = null;
}
}
observableOf(options, f) {
this.dispose();
if (f && f.options && f.options.fieldChanges) {
this._subscription = f.options.fieldChanges
.pipe(filter(({ property, type, field }) => {
return (type === 'expressionChanges' &&
(property.indexOf('templateOptions.options') === 0 || property.indexOf('props.options') === 0) &&
field === f &&
Array.isArray(field.props.options) &&
!!this._options);
}), tap(() => this._options.next(f.props.options)))
.subscribe();
}
this._options = new BehaviorSubject(options);
return this._options.asObservable();
}
}
FormlySelectOptionsPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FormlySelectOptionsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
FormlySelectOptionsPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FormlySelectOptionsPipe, name: "formlySelectOptions" });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FormlySelectOptionsPipe, decorators: [{
type: Pipe,
args: [{ name: 'formlySelectOptions' }]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LW9wdGlvbnMucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb3JlL3NlbGVjdC9zcmMvc2VsZWN0LW9wdGlvbnMucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDakUsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBeUJsRCxNQUFNLE9BQU8sdUJBQXVCO0lBSWxDLFNBQVMsQ0FBQyxPQUFZLEVBQUUsS0FBeUI7UUFDL0MsSUFBSSxDQUFDLENBQUMsT0FBTyxZQUFZLFVBQVUsQ0FBQyxFQUFFO1lBQ3BDLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztTQUM3QzthQUFNO1lBQ0wsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ2hCO1FBRUQsT0FBUSxPQUEyQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxPQUFjLEVBQUUsS0FBeUI7UUFDaEUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTVDLE1BQU0sSUFBSSxHQUF5QixFQUFFLENBQUM7UUFDdEMsTUFBTSxNQUFNLEdBQTZCLEVBQUUsQ0FBQztRQUU1QyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxF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QkFBdUI7NEZBQXZCLHVCQUF1QjtrQkFEbkMsSUFBSTttQkFBQyxFQUFFLElBQUksRUFBRSxxQkFBcUIsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9uRGVzdHJveSwgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZywgRm9ybWx5RmllbGRQcm9wcyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1seVNlbGVjdE9wdGlvbiB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgdmFsdWU/OiBhbnk7XG4gIGdyb3VwPzogRm9ybWx5U2VsZWN0T3B0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWx5RmllbGRTZWxlY3RQcm9wcyBleHRlbmRzIEZvcm1seUZpZWxkUHJvcHMge1xuICBncm91cFByb3A/OiBzdHJpbmcgfCAoKG9wdGlvbjogYW55KSA9PiBzdHJpbmcpO1xuICBsYWJlbFByb3A/OiBzdHJpbmcgfCAoKG9wdGlvbjogYW55KSA9PiBzdHJpbmcpO1xuICB2YWx1ZVByb3A/OiBzdHJpbmcgfCAoKG9wdGlvbjogYW55KSA9PiBhbnkpO1xuICBkaXNhYmxlZFByb3A/OiBzdHJpbmcgfCAoKG9wdGlvbjogYW55KSA9PiBib29sZWFuKTtcbn1cblxudHlwZSBJVHJhbnNmb3JtT3B0aW9uID0ge1xuICBsYWJlbFByb3A6IChvcHRpb246IGFueSkgPT4gc3RyaW5nO1xuICB2YWx1ZVByb3A6IChvcHRpb246IGFueSkgPT4gYW55O1xuICBkaXNhYmxlZFByb3A6IChvcHRpb246IGFueSkgPT4gYm9vbGVhbjtcbiAgZ3JvdXBQcm9wOiAob3B0aW9uOiBhbnkpID0+IHN0cmluZztcbn07XG5cbkBQaXBlKHsgbmFtZTogJ2Zvcm1seVNlbGVjdE9wdGlvbnMnIH0pXG5leHBvcnQgY2xhc3MgRm9ybWx5U2VsZWN0T3B0aW9uc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtLCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBfb3B0aW9uczogQmVoYXZpb3JTdWJqZWN0PGFueVtdPjtcblxuICB0cmFuc2Zvcm0ob3B0aW9uczogYW55LCBmaWVsZD86IEZvcm1seUZpZWxkQ29uZmlnKTogT2JzZXJ2YWJsZTxGb3JtbHlTZWxlY3RPcHRpb25bXT4ge1xuICAgIGlmICghKG9wdGlvbnMgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSkge1xuICAgICAgb3B0aW9ucyA9IHRoaXMub2JzZXJ2YWJsZU9mKG9wdGlvbnMsIGZpZWxkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwb3NlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChvcHRpb25zIGFzIE9ic2VydmFibGU8YW55PikucGlwZShtYXAoKHZhbHVlKSA9PiB0aGlzLnRyYW5zZm9ybU9wdGlvbnModmFsdWUsIGZpZWxkKSkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybU9wdGlvbnMob3B0aW9uczogYW55W10sIGZpZWxkPzogRm9ybWx5RmllbGRDb25maWcpOiBGb3JtbHlTZWxlY3RPcHRpb25bXSB7XG4gICAgY29uc3QgdG8gPSB0aGlzLnRyYW5zZm9ybVNlbGVjdFByb3BzKGZpZWxkKTtcblxuICAgIGNvbnN0IG9wdHM6IEZvcm1seVNlbGVjdE9wdGlvbltdID0gW107XG4gICAgY29uc3QgZ3JvdXBzOiB7IFtpZDogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcblxuICAgIG9wdGlvbnM/LmZvckVhY2goKG9wdGlvbikgPT4ge1xuICAgICAgY29uc3QgbyA9IHRoaXMudHJhbnNmb3JtT3B0aW9uKG9wdGlvbiwgdG8pO1xuICAgICAgaWYgKG8uZ3JvdXApIHtcbiAgICAgICAgY29uc3QgaWQgPSBncm91cHNbby5sYWJlbF07XG4gICAgICAgIGlmIChpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZ3JvdXBzW28ubGFiZWxdID0gb3B0cy5wdXNoKG8pIC0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvLmdyb3VwLmZvckVhY2goKG8pID0+IG9wdHNbaWRdLmdyb3VwLnB1c2gobykpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRzLnB1c2gobyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb3B0cztcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtT3B0aW9uKG9wdGlvbjogYW55LCBwcm9wczogSVRyYW5zZm9ybU9wdGlvbik6IEZvcm1seVNlbGVjdE9wdGlvbiB7XG4gICAgY29uc3QgZ3JvdXAgPSBwcm9wcy5ncm91cFByb3Aob3B0aW9uKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShncm91cCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxhYmVsOiBwcm9wcy5sYWJlbFByb3Aob3B0aW9uKSxcbiAgICAgICAgZ3JvdXA6IGdyb3VwLm1hcCgob3B0KSA9PiB0aGlzLnRyYW5zZm9ybU9wdGlvbihvcHQsIHByb3BzKSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIG9wdGlvbiA9IHtcbiAgICAgIGxhYmVsOiBwcm9wcy5sYWJlbFByb3Aob3B0aW9uKSxcbiAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZVByb3Aob3B0aW9uKSxcbiAgICAgIGRpc2FibGVkOiAhIXByb3BzLmRpc2FibGVkUHJvcChvcHRpb24pLFxuICAgIH07XG5cbiAgICBpZiAoZ3JvdXApIHtcbiAgICAgIHJldHVybiB7IGxhYmVsOiBncm91cCwgZ3JvdXA6IFtvcHRpb25dIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtU2VsZWN0UHJvcHMoZmllbGQ/OiBGb3JtbHlGaWVsZENvbmZpZyk6IElUcmFuc2Zvcm1PcHRpb24ge1xuICAgIGNvbnN0IHByb3BzID0gZmllbGQ/LnByb3BzIHx8IGZpZWxkPy50ZW1wbGF0ZU9wdGlvbnMgfHwge307XG4gICAgY29uc3Qgc2VsZWN0UHJvcEZuID0gKHByb3A6IGFueSkgPT4gKHR5cGVvZiBwcm9wID09PSAnZnVuY3Rpb24nID8gcHJvcCA6IChvOiBhbnkpID0+IG9bcHJvcF0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGdyb3VwUHJvcDogc2VsZWN0UHJvcEZuKHByb3BzLmdyb3VwUHJvcCB8fCAnZ3JvdXAnKSxcbiAgICAgIGxhYmVsUHJvcDogc2VsZWN0UHJvcEZuKHByb3BzLmxhYmVsUHJvcCB8fCAnbGFiZWwnKSxcbiAgICAgIHZhbHVlUHJvcDogc2VsZWN0UHJvcEZuKHByb3BzLnZhbHVlUHJvcCB8fCAndmFsdWUnKSxcbiAgICAgIGRpc2FibGVkUHJvcDogc2VsZWN0UHJvcEZuKHByb3BzLmRpc2FibGVkUHJvcCB8fCAnZGlzYWJsZWQnKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwb3NlKCkge1xuICAgIGlmICh0aGlzLl9vcHRpb25zKSB7XG4gICAgICB0aGlzLl9vcHRpb25zLmNvbXBsZXRlKCk7XG4gICAgICB0aGlzLl9vcHRpb25zID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvYnNlcnZhYmxlT2Yob3B0aW9uczogYW55LCBmPzogRm9ybWx5RmllbGRDb25maWcpIHtcbiAgICB0aGlzLmRpc3Bvc2UoKTtcbiAgICBpZiAoZiAmJiBmLm9wdGlvbnMgJiYgZi5vcHRpb25zLmZpZWxkQ2hhbmdlcykge1xuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uID0gZi5vcHRpb25zLmZpZWxkQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKHsgcHJvcGVydHksIHR5cGUsIGZpZWxkIH0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIHR5cGUgPT09ICdleHByZXNzaW9uQ2hhbmdlcycgJiZcbiAgICAgICAgICAgICAgKHByb3BlcnR5LmluZGV4T2YoJ3RlbXBsYXRlT3B0aW9ucy5vcHRpb25zJykgPT09IDAgfHwgcHJvcGVydHkuaW5kZXhPZigncHJvcHMub3B0aW9ucycpID09PSAwKSAmJlxuICAgICAgICAgICAgICBmaWVsZCA9PT0gZiAmJlxuICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KGZpZWxkLnByb3BzLm9wdGlvbnMpICYmXG4gICAgICAgICAgICAgICEhdGhpcy5fb3B0aW9uc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5fb3B0aW9ucy5uZXh0KGYucHJvcHMub3B0aW9ucyBhcyBhbnkpKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fb3B0aW9ucyA9IG5ldyBCZWhhdmlvclN1YmplY3Qob3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnMuYXNPYnNlcnZhYmxlKCk7XG4gIH1cbn1cbiJdfQ==