@stemy/ngx-dynamic-form 19.3.3 → 19.4.1
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/fesm2022/stemy-ngx-dynamic-form.mjs +135 -35
- package/fesm2022/stemy-ngx-dynamic-form.mjs.map +1 -1
- package/ngx-dynamic-form/common-types.d.ts +2 -1
- package/ngx-dynamic-form/components/base/dynamic-field-type.d.ts +30 -0
- package/ngx-dynamic-form/components/dynamic-form-chips/dynamic-form-chips.component.d.ts +2 -3
- package/ngx-dynamic-form/components/dynamic-form-upload/dynamic-form-upload.component.d.ts +2 -3
- package/ngx-dynamic-form/ngx-dynamic-form.module.d.ts +14 -13
- package/package.json +7 -3
- package/public_api.d.ts +1 -0
|
@@ -2,13 +2,13 @@ import * as i2 from '@stemy/ngx-utils';
|
|
|
2
2
|
import { cachedFactory, ReflectUtils, ObjectUtils, LANGUAGE_SERVICE, ForbiddenZone, API_SERVICE, StringUtils, TOASTER_SERVICE, EventsService, NgxUtilsModule } from '@stemy/ngx-utils';
|
|
3
3
|
import { Subject, BehaviorSubject, startWith, distinctUntilChanged, switchMap, from, isObservable, firstValueFrom, first } from 'rxjs';
|
|
4
4
|
import * as i0 from '@angular/core';
|
|
5
|
-
import { Inject, Injectable, input, output, inject, Renderer2, ElementRef, computed, signal, effect, HostListener, HostBinding, Directive, Injector, ChangeDetectionStrategy, ViewEncapsulation,
|
|
5
|
+
import { Inject, Injectable, input, output, inject, Renderer2, ElementRef, computed, signal, effect, HostListener, HostBinding, Directive, Type, Component, Injector, ChangeDetectionStrategy, ViewEncapsulation, makeEnvironmentProviders, NgModule } from '@angular/core';
|
|
6
6
|
import * as i1 from '@angular/forms';
|
|
7
7
|
import { FormGroup as FormGroup$1, FormArray as FormArray$1, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
8
8
|
import { outputToObservable, toSignal, rxResource } from '@angular/core/rxjs-interop';
|
|
9
9
|
import { debounceTime } from 'rxjs/operators';
|
|
10
10
|
import * as i3 from '@ngx-formly/core';
|
|
11
|
-
import {
|
|
11
|
+
import { FieldType, ɵobserve as _observe, FieldArrayType, FieldWrapper, provideFormlyConfig, provideFormlyCore, FormlyModule } from '@ngx-formly/core';
|
|
12
12
|
import * as i1$1 from '@angular/common';
|
|
13
13
|
import { CommonModule } from '@angular/common';
|
|
14
14
|
|
|
@@ -1253,6 +1253,108 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
1253
1253
|
args: ["click"]
|
|
1254
1254
|
}] } });
|
|
1255
1255
|
|
|
1256
|
+
class DynamicFieldType extends FieldType {
|
|
1257
|
+
stateChanges = new Subject();
|
|
1258
|
+
_errorState = false;
|
|
1259
|
+
_focused = false;
|
|
1260
|
+
ngOnDestroy() {
|
|
1261
|
+
delete this.formField?._control;
|
|
1262
|
+
this.stateChanges.complete();
|
|
1263
|
+
}
|
|
1264
|
+
setDescribedByIds(_ids) {
|
|
1265
|
+
}
|
|
1266
|
+
onContainerClick(_event) {
|
|
1267
|
+
this.field.focus = true;
|
|
1268
|
+
this.stateChanges.next();
|
|
1269
|
+
}
|
|
1270
|
+
get errorState() {
|
|
1271
|
+
const showError = this.options.showError(this);
|
|
1272
|
+
if (showError !== this._errorState) {
|
|
1273
|
+
this._errorState = showError;
|
|
1274
|
+
this.stateChanges.next();
|
|
1275
|
+
}
|
|
1276
|
+
return showError;
|
|
1277
|
+
}
|
|
1278
|
+
get controlType() {
|
|
1279
|
+
if (this.props.type) {
|
|
1280
|
+
return this.props.type;
|
|
1281
|
+
}
|
|
1282
|
+
const type = this.field.type;
|
|
1283
|
+
return type instanceof Type ? type.prototype.constructor.name : type;
|
|
1284
|
+
}
|
|
1285
|
+
get focused() {
|
|
1286
|
+
const focused = !!this.field.focus && !this.disabled;
|
|
1287
|
+
if (focused !== this._focused) {
|
|
1288
|
+
this._focused = focused;
|
|
1289
|
+
this.stateChanges.next();
|
|
1290
|
+
}
|
|
1291
|
+
return focused;
|
|
1292
|
+
}
|
|
1293
|
+
get disabled() {
|
|
1294
|
+
return !!this.props.disabled;
|
|
1295
|
+
}
|
|
1296
|
+
get required() {
|
|
1297
|
+
return !!this.props.required;
|
|
1298
|
+
}
|
|
1299
|
+
get placeholder() {
|
|
1300
|
+
return this.props.placeholder || "";
|
|
1301
|
+
}
|
|
1302
|
+
get shouldPlaceholderFloat() {
|
|
1303
|
+
return this.shouldLabelFloat;
|
|
1304
|
+
}
|
|
1305
|
+
get value() {
|
|
1306
|
+
return this.formControl?.value;
|
|
1307
|
+
}
|
|
1308
|
+
set value(value) {
|
|
1309
|
+
this.formControl?.patchValue(value);
|
|
1310
|
+
}
|
|
1311
|
+
get ngControl() {
|
|
1312
|
+
return this.formControl;
|
|
1313
|
+
}
|
|
1314
|
+
get empty() {
|
|
1315
|
+
return this.value == null || this.value === "";
|
|
1316
|
+
}
|
|
1317
|
+
get shouldLabelFloat() {
|
|
1318
|
+
return this.focused || !this.empty;
|
|
1319
|
+
}
|
|
1320
|
+
get formField() {
|
|
1321
|
+
return this.field?.["_formField"];
|
|
1322
|
+
}
|
|
1323
|
+
ngAfterViewInit() {
|
|
1324
|
+
const control = this;
|
|
1325
|
+
if (this.formField && control !== this.formField._control) {
|
|
1326
|
+
this.formField._control = control;
|
|
1327
|
+
// temporary fix for https://github.com/angular/material2/issues/6728
|
|
1328
|
+
const ngControl = control?.ngControl;
|
|
1329
|
+
if (ngControl?.valueAccessor?.hasOwnProperty("_formField")) {
|
|
1330
|
+
ngControl.valueAccessor["_formField"] = this.formField;
|
|
1331
|
+
}
|
|
1332
|
+
if (ngControl?.valueAccessor?.hasOwnProperty("_parentFormField")) {
|
|
1333
|
+
ngControl.valueAccessor["_parentFormField"] = this.formField;
|
|
1334
|
+
}
|
|
1335
|
+
["prefix", "suffix", "textPrefix", "textSuffix"].forEach((type) => _observe(this.field, ["props", type], ({ currentValue }) => currentValue &&
|
|
1336
|
+
Promise.resolve().then(() => {
|
|
1337
|
+
this.options.detectChanges(this.field);
|
|
1338
|
+
})));
|
|
1339
|
+
// https://github.com/angular/components/issues/16209
|
|
1340
|
+
const setDescribedByIds = control.setDescribedByIds.bind(control);
|
|
1341
|
+
control.setDescribedByIds = (ids) => {
|
|
1342
|
+
setTimeout(() => setDescribedByIds(ids));
|
|
1343
|
+
};
|
|
1344
|
+
}
|
|
1345
|
+
}
|
|
1346
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFieldType, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
1347
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DynamicFieldType, isStandalone: false, selector: "dynamic-field-type", usesInheritance: true, ngImport: i0, template: "", isInline: true });
|
|
1348
|
+
}
|
|
1349
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFieldType, decorators: [{
|
|
1350
|
+
type: Component,
|
|
1351
|
+
args: [{
|
|
1352
|
+
standalone: false,
|
|
1353
|
+
selector: "dynamic-field-type",
|
|
1354
|
+
template: ""
|
|
1355
|
+
}]
|
|
1356
|
+
}] });
|
|
1357
|
+
|
|
1256
1358
|
class DynamicFormComponent {
|
|
1257
1359
|
builder = inject(DynamicFormBuilderService);
|
|
1258
1360
|
events = inject(EventsService);
|
|
@@ -1312,7 +1414,7 @@ class DynamicFormComponent {
|
|
|
1312
1414
|
this.options?.resetModel?.();
|
|
1313
1415
|
}
|
|
1314
1416
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1315
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: DynamicFormComponent, isStandalone: false, selector: "dynamic-form", inputs: { labelPrefix: { classPropertyName: "labelPrefix", publicName: "labelPrefix", isSignal: true, isRequired: false, transformFunction: null }, labelCustomizer: { classPropertyName: "labelCustomizer", publicName: "labelCustomizer", isSignal: true, isRequired: false, transformFunction: null }, testId: { classPropertyName: "testId", publicName: "testId", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, fields: { classPropertyName: "fields", publicName: "fields", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onSubmit: "onSubmit" }, ngImport: i0, template: "@if (config() && group()) {\n <form [formGroup]=\"group()\" (ngSubmit)=\"submit()\" autocomplete=\"off\" role=\"presentation\">\n <input type=\"submit\" [hidden]=\"true\" />\n <formly-form [model]=\"data()\"\n [fields]=\"config()\"\n [form]=\"group()\"\n [options]=\"options\"></formly-form>\n <ng-content></ng-content>\n </form>\n}\n", dependencies: [{ kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i3.
|
|
1417
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: DynamicFormComponent, isStandalone: false, selector: "dynamic-form", inputs: { labelPrefix: { classPropertyName: "labelPrefix", publicName: "labelPrefix", isSignal: true, isRequired: false, transformFunction: null }, labelCustomizer: { classPropertyName: "labelCustomizer", publicName: "labelCustomizer", isSignal: true, isRequired: false, transformFunction: null }, testId: { classPropertyName: "testId", publicName: "testId", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, fields: { classPropertyName: "fields", publicName: "fields", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onSubmit: "onSubmit" }, ngImport: i0, template: "@if (config() && group()) {\n <form [formGroup]=\"group()\" (ngSubmit)=\"submit()\" autocomplete=\"off\" role=\"presentation\">\n <input type=\"submit\" [hidden]=\"true\" />\n <formly-form [model]=\"data()\"\n [fields]=\"config()\"\n [form]=\"group()\"\n [options]=\"options\"></formly-form>\n <ng-content></ng-content>\n </form>\n}\n", dependencies: [{ kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i3.LegacyFormlyForm, selector: "formly-form" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
1316
1418
|
}
|
|
1317
1419
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormComponent, decorators: [{
|
|
1318
1420
|
type: Component,
|
|
@@ -1328,16 +1430,16 @@ class DynamicFormArrayComponent extends FieldArrayType {
|
|
|
1328
1430
|
}
|
|
1329
1431
|
}
|
|
1330
1432
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormArrayComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
1331
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: DynamicFormArrayComponent, isStandalone: false, selector: "dynamic-form-array", usesInheritance: true, ngImport: i0, template: "<label class=\"field-label\" *ngIf=\"props.label\">\n {{ props.label | translate }}\n <p class=\"field-description\" *ngIf=\"props.description\">{{ props.description | translate }}</p>\n</label>\n<div class=\"field-container\">\n @if (props.useTabs) {\n <ul class=\"form-array-tabs\">\n @for (field of field.fieldGroup; track field.key; let ix = $index) {\n <li>\n <a class=\"btn\" [ngClass]=\"[currentTab() === ix ? 'btn-primary' : 'btn-secondary']\"\n (click)=\"currentTab.set(ix)\">\n {{ (field.formControl.value | getValue : props.tabsLabel) || ix + 1 }}\n </a>\n </li>\n }\n </ul>\n }\n @for (field of field.fieldGroup; track field.key; let ix = $index) {\n @if (!props.useTabs || ix === currentTab()) {\n <div class=\"form-array-item\">\n <div class=\"form-array-buttons\">\n @if (props.removeItem) {\n <button type=\"button\" class=\"btn btn-sm btn-primary\" (click)=\"remove(ix)\">\n <i icon=\"trash-outline\"></i>\n </button>\n }\n @if (props.insertItem) {\n <button type=\"button\" class=\"btn btn-sm btn-primary\" (click)=\"add(ix)\">\n <i icon=\"plus-outline\"></i>\n </button>\n }\n </div>\n <formly-field [field]=\"field\"></formly-field>\n </div>\n }\n }\n <div class=\"form-array-buttons\">\n @if (props.clearItems) {\n <button type=\"button\" class=\"btn btn-sm btn-primary\" (click)=\"clear()\">\n <i icon=\"trash-outline\"></i>\n {{ 'button.clear-items' | translate }}\n </button>\n }\n @if (props.addItem) {\n <button type=\"button\" class=\"btn btn-sm btn-primary\" (click)=\"add()\">\n <i icon=\"plus-outline\"></i>\n {{ 'button.insert-item' | translate }}\n </button>\n }\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.IconDirective, selector: "[icon]", inputs: ["icon", "activeIcon", "active"], outputs: ["activeChange"] }, { kind: "component", type: i3.
|
|
1433
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: DynamicFormArrayComponent, isStandalone: false, selector: "dynamic-form-array", usesInheritance: true, ngImport: i0, template: "<label class=\"field-label\" *ngIf=\"props.label\">\n {{ props.label | translate }}\n <p class=\"field-description\" *ngIf=\"props.description\">{{ props.description | translate }}</p>\n</label>\n<div class=\"field-container\">\n @if (props.useTabs) {\n <ul class=\"form-array-tabs\">\n @for (field of field.fieldGroup; track field.key; let ix = $index) {\n <li>\n <a class=\"btn\" [ngClass]=\"[currentTab() === ix ? 'btn-primary' : 'btn-secondary']\"\n (click)=\"currentTab.set(ix)\">\n {{ (field.formControl.value | getValue : props.tabsLabel) || ix + 1 }}\n </a>\n </li>\n }\n </ul>\n }\n @for (field of field.fieldGroup; track field.key; let ix = $index) {\n @if (!props.useTabs || ix === currentTab()) {\n <div class=\"form-array-item\">\n <div class=\"form-array-buttons\">\n @if (props.removeItem) {\n <button type=\"button\" class=\"btn btn-sm btn-primary\" (click)=\"remove(ix)\">\n <i icon=\"trash-outline\"></i>\n </button>\n }\n @if (props.insertItem) {\n <button type=\"button\" class=\"btn btn-sm btn-primary\" (click)=\"add(ix)\">\n <i icon=\"plus-outline\"></i>\n </button>\n }\n </div>\n <formly-field [field]=\"field\"></formly-field>\n </div>\n }\n }\n <div class=\"form-array-buttons\">\n @if (props.clearItems) {\n <button type=\"button\" class=\"btn btn-sm btn-primary\" (click)=\"clear()\">\n <i icon=\"trash-outline\"></i>\n {{ 'button.clear-items' | translate }}\n </button>\n }\n @if (props.addItem) {\n <button type=\"button\" class=\"btn btn-sm btn-primary\" (click)=\"add()\">\n <i icon=\"plus-outline\"></i>\n {{ 'button.insert-item' | translate }}\n </button>\n }\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.IconDirective, selector: "[icon]", inputs: ["icon", "activeIcon", "active"], outputs: ["activeChange"] }, { kind: "component", type: i3.LegacyFormlyField, selector: "formly-field" }, { kind: "pipe", type: i2.GetValuePipe, name: "getValue" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
|
|
1332
1434
|
}
|
|
1333
1435
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormArrayComponent, decorators: [{
|
|
1334
1436
|
type: Component,
|
|
1335
1437
|
args: [{ standalone: false, selector: "dynamic-form-array", encapsulation: ViewEncapsulation.None, template: "<label class=\"field-label\" *ngIf=\"props.label\">\n {{ props.label | translate }}\n <p class=\"field-description\" *ngIf=\"props.description\">{{ props.description | translate }}</p>\n</label>\n<div class=\"field-container\">\n @if (props.useTabs) {\n <ul class=\"form-array-tabs\">\n @for (field of field.fieldGroup; track field.key; let ix = $index) {\n <li>\n <a class=\"btn\" [ngClass]=\"[currentTab() === ix ? 'btn-primary' : 'btn-secondary']\"\n (click)=\"currentTab.set(ix)\">\n {{ (field.formControl.value | getValue : props.tabsLabel) || ix + 1 }}\n </a>\n </li>\n }\n </ul>\n }\n @for (field of field.fieldGroup; track field.key; let ix = $index) {\n @if (!props.useTabs || ix === currentTab()) {\n <div class=\"form-array-item\">\n <div class=\"form-array-buttons\">\n @if (props.removeItem) {\n <button type=\"button\" class=\"btn btn-sm btn-primary\" (click)=\"remove(ix)\">\n <i icon=\"trash-outline\"></i>\n </button>\n }\n @if (props.insertItem) {\n <button type=\"button\" class=\"btn btn-sm btn-primary\" (click)=\"add(ix)\">\n <i icon=\"plus-outline\"></i>\n </button>\n }\n </div>\n <formly-field [field]=\"field\"></formly-field>\n </div>\n }\n }\n <div class=\"form-array-buttons\">\n @if (props.clearItems) {\n <button type=\"button\" class=\"btn btn-sm btn-primary\" (click)=\"clear()\">\n <i icon=\"trash-outline\"></i>\n {{ 'button.clear-items' | translate }}\n </button>\n }\n @if (props.addItem) {\n <button type=\"button\" class=\"btn btn-sm btn-primary\" (click)=\"add()\">\n <i icon=\"plus-outline\"></i>\n {{ 'button.insert-item' | translate }}\n </button>\n }\n </div>\n</div>\n" }]
|
|
1336
1438
|
}] });
|
|
1337
1439
|
|
|
1338
|
-
class DynamicFormChipsComponent extends
|
|
1440
|
+
class DynamicFormChipsComponent extends DynamicFieldType {
|
|
1339
1441
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormChipsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
1340
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DynamicFormChipsComponent, isStandalone: false, selector: "dynamic-form-chips", usesInheritance: true, ngImport: i0, template: "<chips [formControl]=\"formControl\"\n [type]=\"props.type\"\n [step]=\"props.step\"\n [minLength]=\"props.minLength\"\n [maxLength]=\"props.maxLength\"\n [min]=\"props.min\"\n [max]=\"props.max\"\n [multiple]=\"props.multiple\"\n [formlyAttributes]=\"field\">\n</chips>\n", dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i2.ChipsComponent, selector: "chips", inputs: ["value", "multiple", "disabled", "type", "min", "max", "minLength", "maxLength", "step", "placeholder", "unique", "options"], outputs: ["valueChange"] }, { kind: "directive", type: i3
|
|
1442
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DynamicFormChipsComponent, isStandalone: false, selector: "dynamic-form-chips", usesInheritance: true, ngImport: i0, template: "<chips [formControl]=\"formControl\"\n [type]=\"props.type\"\n [step]=\"props.step\"\n [minLength]=\"props.minLength\"\n [maxLength]=\"props.maxLength\"\n [min]=\"props.min\"\n [max]=\"props.max\"\n [multiple]=\"props.multiple\"\n [formlyAttributes]=\"field\">\n</chips>\n", dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i2.ChipsComponent, selector: "chips", inputs: ["value", "multiple", "disabled", "type", "min", "max", "minLength", "maxLength", "step", "placeholder", "unique", "options"], outputs: ["valueChange"] }, { kind: "directive", type: i3.LegacyFormlyAttributes, selector: "[formlyAttributes]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
1341
1443
|
}
|
|
1342
1444
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormChipsComponent, decorators: [{
|
|
1343
1445
|
type: Component,
|
|
@@ -1346,7 +1448,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
1346
1448
|
|
|
1347
1449
|
class DynamicFormFieldComponent extends FieldWrapper {
|
|
1348
1450
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
1349
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DynamicFormFieldComponent, isStandalone: false, selector: "dynamic-form-field", usesInheritance: true, ngImport: i0, template: "<label class=\"field-label\" [for]=\"id\" *ngIf=\"props.label\">\n {{ props.label | translate }}\n <p class=\"field-description\" *ngIf=\"props.description\">{{ props.description | translate }}</p>\n <span class=\"field-required\" *ngIf=\"props.required && props.hideRequiredMarker !== true\" aria-hidden=\"true\">*</span>\n</label>\n<div class=\"field-container\">\n <ng-container #fieldComponent></ng-container>\n <div *ngIf=\"showError\" class=\"field-errors invalid-feedback\">\n <formly-validation-message\n id=\"{{ id }}-formly-validation-error\"\n [field]=\"field\"\n role=\"alert\"\n ></formly-validation-message>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3
|
|
1451
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DynamicFormFieldComponent, isStandalone: false, selector: "dynamic-form-field", usesInheritance: true, ngImport: i0, template: "<label class=\"field-label\" [for]=\"id\" *ngIf=\"props.label\">\n {{ props.label | translate }}\n <p class=\"field-description\" *ngIf=\"props.description\">{{ props.description | translate }}</p>\n <span class=\"field-required\" *ngIf=\"props.required && props.hideRequiredMarker !== true\" aria-hidden=\"true\">*</span>\n</label>\n<div class=\"field-container\">\n <ng-container #fieldComponent></ng-container>\n <div *ngIf=\"showError\" class=\"field-errors invalid-feedback\">\n <formly-validation-message\n id=\"{{ id }}-formly-validation-error\"\n [field]=\"field\"\n role=\"alert\"\n ></formly-validation-message>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.LegacyFormlyValidationMessage, selector: "formly-validation-message" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
|
|
1350
1452
|
}
|
|
1351
1453
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormFieldComponent, decorators: [{
|
|
1352
1454
|
type: Component,
|
|
@@ -1375,9 +1477,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
1375
1477
|
args: [{ standalone: false, selector: "dynamic-form-group", encapsulation: ViewEncapsulation.None, template: "<label class=\"field-label\" *ngIf=\"props.label\">\n {{ props.label | translate }}\n <p class=\"field-description\" *ngIf=\"props.description\">{{ props.description | translate }}</p>\n</label>\n<ng-container #fieldComponent></ng-container>\n" }]
|
|
1376
1478
|
}] });
|
|
1377
1479
|
|
|
1378
|
-
class DynamicFormUploadComponent extends
|
|
1480
|
+
class DynamicFormUploadComponent extends DynamicFieldType {
|
|
1379
1481
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormUploadComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
1380
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DynamicFormUploadComponent, isStandalone: false, selector: "dynamic-form-upload", usesInheritance: true, ngImport: i0, template: "<upload [formControl]=\"formControl\"\n [multiple]=\"props.multiple\"\n [inline]=\"props.inline\"\n [accept]=\"props.accept\"\n [baseUrl]=\"props.url\"\n [makeUpload]=\"props.createUploadData\"\n [formlyAttributes]=\"field\">\n</upload>\n", dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i2.UploadComponent, selector: "upload", inputs: ["value", "disabled", "inline", "accept", "baseUrl", "message", "multiple", "buttonText", "makeUpload", "preProcess"], outputs: ["onUploaded", "onRemove"] }, { kind: "directive", type: i3
|
|
1482
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DynamicFormUploadComponent, isStandalone: false, selector: "dynamic-form-upload", usesInheritance: true, ngImport: i0, template: "<upload [formControl]=\"formControl\"\n [multiple]=\"props.multiple\"\n [inline]=\"props.inline\"\n [accept]=\"props.accept\"\n [baseUrl]=\"props.url\"\n [makeUpload]=\"props.createUploadData\"\n [formlyAttributes]=\"field\">\n</upload>\n", dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i2.UploadComponent, selector: "upload", inputs: ["value", "disabled", "inline", "accept", "baseUrl", "message", "multiple", "buttonText", "makeUpload", "preProcess"], outputs: ["onUploaded", "onRemove"] }, { kind: "directive", type: i3.LegacyFormlyAttributes, selector: "[formlyAttributes]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
1381
1483
|
}
|
|
1382
1484
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DynamicFormUploadComponent, decorators: [{
|
|
1383
1485
|
type: Component,
|
|
@@ -1386,6 +1488,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
1386
1488
|
|
|
1387
1489
|
// --- Components ---
|
|
1388
1490
|
const components = [
|
|
1491
|
+
DynamicFieldType,
|
|
1389
1492
|
DynamicFormComponent,
|
|
1390
1493
|
DynamicFormArrayComponent,
|
|
1391
1494
|
DynamicFormChipsComponent,
|
|
@@ -1403,28 +1506,24 @@ const pipes = [];
|
|
|
1403
1506
|
|
|
1404
1507
|
class NgxDynamicFormModule {
|
|
1405
1508
|
static getProviders(config) {
|
|
1406
|
-
const
|
|
1407
|
-
types: [
|
|
1408
|
-
{ name: "array", component: DynamicFormArrayComponent },
|
|
1409
|
-
{ name: "chips", component: DynamicFormChipsComponent },
|
|
1410
|
-
{ name: "upload", component: DynamicFormUploadComponent, wrappers: ["form-field"] },
|
|
1411
|
-
{ name: "file", extends: "upload" },
|
|
1412
|
-
{ name: "translation", extends: "array" },
|
|
1413
|
-
...(config?.types || [])
|
|
1414
|
-
],
|
|
1415
|
-
wrappers: [
|
|
1416
|
-
{ name: "form-field", component: DynamicFormFieldComponent },
|
|
1417
|
-
{ name: "form-fieldset", component: DynamicFormFieldsetComponent },
|
|
1418
|
-
{ name: "form-group", component: DynamicFormGroupComponent },
|
|
1419
|
-
...(config?.wrappers || [])
|
|
1420
|
-
],
|
|
1421
|
-
extras: {
|
|
1422
|
-
renderFormlyFieldElement: false,
|
|
1423
|
-
...(config?.extras || {})
|
|
1424
|
-
}
|
|
1425
|
-
});
|
|
1509
|
+
const formlyConfigs = (config?.options || []).map(provideFormlyConfig);
|
|
1426
1510
|
return [
|
|
1427
|
-
|
|
1511
|
+
provideFormlyCore({
|
|
1512
|
+
types: [
|
|
1513
|
+
{ name: "array", component: DynamicFormArrayComponent },
|
|
1514
|
+
{ name: "chips", component: DynamicFormChipsComponent, wrappers: ["form-field"] },
|
|
1515
|
+
{ name: "upload", component: DynamicFormUploadComponent, wrappers: ["form-field"] }
|
|
1516
|
+
],
|
|
1517
|
+
wrappers: [
|
|
1518
|
+
{ name: "form-field", component: DynamicFormFieldComponent },
|
|
1519
|
+
{ name: "form-fieldset", component: DynamicFormFieldsetComponent },
|
|
1520
|
+
{ name: "form-group", component: DynamicFormGroupComponent }
|
|
1521
|
+
],
|
|
1522
|
+
extras: {
|
|
1523
|
+
renderFormlyFieldElement: false
|
|
1524
|
+
}
|
|
1525
|
+
}),
|
|
1526
|
+
...formlyConfigs,
|
|
1428
1527
|
DynamicFormService,
|
|
1429
1528
|
DynamicFormBuilderService,
|
|
1430
1529
|
DynamicFormSchemaService
|
|
@@ -1440,10 +1539,11 @@ class NgxDynamicFormModule {
|
|
|
1440
1539
|
return makeEnvironmentProviders(NgxDynamicFormModule.getProviders(config));
|
|
1441
1540
|
}
|
|
1442
1541
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: NgxDynamicFormModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
1443
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: NgxDynamicFormModule, declarations: [DynamicFormComponent, DynamicFormArrayComponent, DynamicFormChipsComponent, DynamicFormFieldComponent, DynamicFormFieldsetComponent, DynamicFormGroupComponent, DynamicFormUploadComponent, AsyncSubmitDirective], imports: [CommonModule,
|
|
1542
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: NgxDynamicFormModule, declarations: [DynamicFieldType, DynamicFormComponent, DynamicFormArrayComponent, DynamicFormChipsComponent, DynamicFormFieldComponent, DynamicFormFieldsetComponent, DynamicFormGroupComponent, DynamicFormUploadComponent, AsyncSubmitDirective], imports: [CommonModule,
|
|
1444
1543
|
FormsModule,
|
|
1445
1544
|
ReactiveFormsModule,
|
|
1446
|
-
NgxUtilsModule,
|
|
1545
|
+
NgxUtilsModule,
|
|
1546
|
+
FormlyModule], exports: [DynamicFieldType, DynamicFormComponent, DynamicFormArrayComponent, DynamicFormChipsComponent, DynamicFormFieldComponent, DynamicFormFieldsetComponent, DynamicFormGroupComponent, DynamicFormUploadComponent, AsyncSubmitDirective, FormsModule,
|
|
1447
1547
|
ReactiveFormsModule,
|
|
1448
1548
|
NgxUtilsModule,
|
|
1449
1549
|
FormlyModule] });
|
|
@@ -1453,7 +1553,7 @@ class NgxDynamicFormModule {
|
|
|
1453
1553
|
FormsModule,
|
|
1454
1554
|
ReactiveFormsModule,
|
|
1455
1555
|
NgxUtilsModule,
|
|
1456
|
-
FormlyModule
|
|
1556
|
+
FormlyModule, FormsModule,
|
|
1457
1557
|
ReactiveFormsModule,
|
|
1458
1558
|
NgxUtilsModule,
|
|
1459
1559
|
FormlyModule] });
|
|
@@ -1471,7 +1571,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
1471
1571
|
FormsModule,
|
|
1472
1572
|
ReactiveFormsModule,
|
|
1473
1573
|
NgxUtilsModule,
|
|
1474
|
-
FormlyModule
|
|
1574
|
+
FormlyModule
|
|
1475
1575
|
],
|
|
1476
1576
|
exports: [
|
|
1477
1577
|
...components,
|
|
@@ -1492,5 +1592,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
1492
1592
|
* Generated bundle index. Do not edit.
|
|
1493
1593
|
*/
|
|
1494
1594
|
|
|
1495
|
-
export { AsyncSubmitDirective, DynamicFormArrayComponent, DynamicFormBuilderService, DynamicFormChipsComponent, DynamicFormComponent, DynamicFormFieldComponent, DynamicFormFieldsetComponent, DynamicFormGroupComponent, DynamicFormSchemaService, DynamicFormService, DynamicFormUploadComponent, EDITOR_FORMATS, FORM_ROOT_KEY, FormFile, FormGroup, FormInput, FormModel, FormSelect, FormSerializable, FormUpload, MAX_INPUT_NUM, MIN_INPUT_NUM, NgxDynamicFormModule, additionalFieldValues, customizeFormField, emailValidation, getFieldByPath, getFieldsByKey, getFieldsByPredicate, jsonValidation, maxLengthValidation, maxValueValidation, minLengthValidation, minValueValidation, phoneValidation, replaceSpecialChars, requiredValidation, setFieldDisabled, setFieldHidden, translationValidation, validationMessage };
|
|
1595
|
+
export { AsyncSubmitDirective, DynamicFieldType, DynamicFormArrayComponent, DynamicFormBuilderService, DynamicFormChipsComponent, DynamicFormComponent, DynamicFormFieldComponent, DynamicFormFieldsetComponent, DynamicFormGroupComponent, DynamicFormSchemaService, DynamicFormService, DynamicFormUploadComponent, EDITOR_FORMATS, FORM_ROOT_KEY, FormFile, FormGroup, FormInput, FormModel, FormSelect, FormSerializable, FormUpload, MAX_INPUT_NUM, MIN_INPUT_NUM, NgxDynamicFormModule, additionalFieldValues, customizeFormField, emailValidation, getFieldByPath, getFieldsByKey, getFieldsByPredicate, jsonValidation, maxLengthValidation, maxValueValidation, minLengthValidation, minValueValidation, phoneValidation, replaceSpecialChars, requiredValidation, setFieldDisabled, setFieldHidden, translationValidation, validationMessage };
|
|
1496
1596
|
//# sourceMappingURL=stemy-ngx-dynamic-form.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stemy-ngx-dynamic-form.mjs","sources":["../../src/ngx-dynamic-form/common-types.ts","../../src/ngx-dynamic-form/utils/customizer.ts","../../src/ngx-dynamic-form/utils/decorators.ts","../../src/ngx-dynamic-form/utils/validation.ts","../../src/ngx-dynamic-form/utils/misc.ts","../../src/ngx-dynamic-form/utils/internal.ts","../../src/ngx-dynamic-form/services/dynamic-form-builder.service.ts","../../src/ngx-dynamic-form/services/dynamic-form-schema.service.ts","../../src/ngx-dynamic-form/services/dynamic-form.service.ts","../../src/ngx-dynamic-form/directives/async-submit.directive.ts","../../src/ngx-dynamic-form/components/dynamic-form/dynamic-form.component.ts","../../src/ngx-dynamic-form/components/dynamic-form/dynamic-form.component.html","../../src/ngx-dynamic-form/components/dynamic-form-array/dynamic-form-array.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-array/dynamic-form-array.component.html","../../src/ngx-dynamic-form/components/dynamic-form-chips/dynamic-form-chips.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-chips/dynamic-form-chips.component.html","../../src/ngx-dynamic-form/components/dynamic-form-field/dynamic-form-field.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-field/dynamic-form-field.component.html","../../src/ngx-dynamic-form/components/dynamic-form-fieldset/dynamic-form-fieldset.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-fieldset/dynamic-form-fieldset.component.html","../../src/ngx-dynamic-form/components/dynamic-form-group/dynamic-form-group.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-group/dynamic-form-group.component.html","../../src/ngx-dynamic-form/components/dynamic-form-upload/dynamic-form-upload.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-upload/dynamic-form-upload.component.html","../../src/ngx-dynamic-form/ngx-dynamic-form.imports.ts","../../src/ngx-dynamic-form/ngx-dynamic-form.module.ts","../../src/stemy-ngx-dynamic-form.ts"],"sourcesContent":["import {Injector, OutputRef, Signal} from \"@angular/core\";\nimport {AbstractControl, FormControl, FormGroup} from \"@angular/forms\";\nimport {Observable} from \"rxjs\";\nimport {ConfigOption, FormlyFieldConfig, FormlyFieldProps} from \"@ngx-formly/core\";\nimport {FormlySelectOption} from \"@ngx-formly/core/select\";\nimport {\n IAsyncMessage,\n IOpenApiSchema,\n IOpenApiSchemaProperty,\n IRequestOptions,\n MaybeArray,\n MaybePromise\n} from \"@stemy/ngx-utils\";\n\n// --- Basic frm constants ---\nexport const FORM_ROOT_KEY = \"__root\";\n\n// --- Basic form types ---\n\nexport type DynamicFormState = \"VALID\" | \"INVALID\" | \"PENDING\" | \"DISABLED\" | \"LOADING\";\nexport type DynamicFormUpdateOn = \"change\" | \"blur\" | \"submit\";\nexport type UploadData = Record<string, any> | ArrayBuffer | FormData;\n\n// --- Basic form field interfaces ---\n\nexport type FormFieldKey = string | number | (string | number)[];\n\nexport type FormFieldLabelCustomizer = (key: string, label: string, parent: FormFieldConfig, labelPrefix: string) => string;\n\nexport interface FormBuilderOptions {\n labelPrefix?: string;\n labelCustomizer?: FormFieldLabelCustomizer;\n testId?: string;\n}\n\nexport interface FormFieldProps extends FormlyFieldProps {\n // --- Input props ---\n autocomplete?: string;\n suffix?: string;\n // --- Checkbox props ---\n formCheck?: string;\n indeterminate?: boolean;\n // --- Select props ---\n multiple?: boolean;\n allowEmpty?: boolean;\n groupBy?: string;\n // --- Array props ---\n useTabs?: boolean;\n tabsLabel?: string;\n addItem?: boolean;\n insertItem?: boolean;\n cloneItem?: boolean;\n moveItem?: boolean;\n removeItem?: boolean;\n clearItems?: boolean;\n // --- Upload props ---\n inline?: boolean;\n accept?: string | string[];\n url?: string;\n maxSize?: number;\n uploadOptions?: IRequestOptions;\n createUploadData?: (file: File) => UploadData | Promise<UploadData>;\n // --- Old upload props\n multi?: boolean;\n asFile?: boolean;\n uploadUrl?: string;\n}\n\nexport type FormFieldSerializer = (field: FormFieldConfig, injector: Injector) => MaybePromise<any>;\n\nexport declare type FormHookFn = (field: FormFieldConfig) => void;\n\nexport interface FormHookConfig {\n onInit?: FormHookFn | ((field: FormFieldConfig) => Observable<any>);\n onChanges?: FormHookFn;\n afterContentInit?: FormHookFn;\n afterViewInit?: FormHookFn;\n onDestroy?: FormHookFn;\n}\n\nexport type FormFieldExpression<T = any> = string | ((field: FormFieldConfig) => T) | Observable<T>;\nexport type FormFieldExpressions = {\n [property: string]: FormFieldExpression;\n} & {\n className?: FormFieldExpression<string>;\n hide?: FormFieldExpression<boolean>;\n \"props.disabled\"?: FormFieldExpression<boolean>;\n \"props.required\"?: FormFieldExpression<boolean>;\n};\n\nexport interface FormFieldConfig<T = FormFieldProps> extends FormlyFieldConfig<T> {\n serializer?: FormFieldSerializer;\n serialize?: boolean;\n fieldSet?: string;\n parent?: FormFieldConfig;\n fieldGroup?: FormFieldConfig[];\n fieldArray?: FormFieldConfig | ((field: FormFieldConfig) => FormFieldConfig);\n hooks: FormHookConfig;\n expressions: FormFieldExpressions;\n readonly additional?: Readonly<{[key: string]: any}>;\n readonly path?: string;\n readonly testId?: string;\n}\n\nexport interface FormFieldType<T = FormFieldProps> extends FormFieldConfig<T> {\n formControl: FormControl;\n props: NonNullable<T>;\n}\n\nexport interface FormFieldChangeEvent {\n field: FormFieldConfig;\n type: string;\n value: any;\n [meta: string]: any;\n}\n\nexport interface FormSerializeResult {\n [key: string]: any;\n}\n\nexport interface FormSelectOption extends FormlySelectOption {\n className?: string;\n classes?: string[] | string;\n id?: any;\n}\n\nexport type FormSelectOptions = FormSelectOption[] | Observable<FormSelectOption[]>;\n\nexport interface IDynamicForm {\n\n readonly fieldChanges: Observable<FormFieldChangeEvent>;\n readonly config: Signal<FormFieldConfig[]>;\n readonly group: Signal<FormGroup>;\n readonly status: Signal<DynamicFormState>;\n readonly onSubmit: OutputRef<IDynamicForm>;\n\n reset(): void;\n}\n\n// --- Validation types ---\n\ntype FormFieldValidatorFn<T> = ((control: AbstractControl, field?: FormlyFieldConfig) => T) & {\n validatorName?: string\n};\n\nexport type ValidationMessageFn = (error: any, field: FormFieldConfig) => string | Observable<string>;\n\ninterface FormFieldValidatorExpression<T> {\n expression: FormFieldValidatorFn<T>;\n message: ValidationMessageFn;\n}\n\ntype FormFieldValidation<T, R> = {\n validation?: (string | T)[];\n} & {\n [key: string]: FormFieldValidatorFn<R> | FormFieldValidatorExpression<R>;\n}\n\nexport type ValidatorFn = FormFieldValidatorFn<boolean>;\n\nexport type ValidatorExpression = FormFieldValidatorExpression<boolean>;\n\nexport type Validators = FormFieldValidation<ValidatorFn, boolean>;\n\nexport type AsyncBoolean = Promise<boolean> | Observable<boolean>;\n\nexport type AsyncValidatorFn = FormFieldValidatorFn<AsyncBoolean>;\n\nexport type AsyncValidatorExpression = FormFieldValidatorExpression<AsyncBoolean>;\n\nexport type AsyncValidators = FormFieldValidation<AsyncValidatorFn, AsyncBoolean>;\n\nexport interface AllValidationErrors {\n control: AbstractControl;\n path: string;\n errorKey: string;\n errorValue: any;\n}\n\n// --- Form field data types ---\n\nexport type FormFieldCustom = Pick<FormFieldConfig, \"wrappers\" | \"hooks\" | \"fieldGroup\" | \"fieldArray\">;\n\nexport type FormFieldData = Pick<FormFieldProps, \"label\" | \"readonly\" | \"hidden\" | \"disabled\">\n & {\n validators?: Validators | ValidatorFn[];\n serializer?: FormFieldSerializer;\n fieldSet?: string;\n classes?: string[] | string;\n};\n\nexport type FormInputData = FormFieldData\n & Pick<FormFieldProps, \"type\" | \"pattern\" | \"placeholder\" | \"step\" | \"min\" | \"max\" | \"minLength\" | \"maxLength\" | \"autocomplete\" | \"suffix\" | \"indeterminate\" | \"cols\" | \"rows\">;\n\nexport type FormSelectData = FormFieldData\n & Pick<FormFieldProps, \"multiple\" | \"type\" | \"allowEmpty\" | \"groupBy\"> & {\n options?: (field: FormFieldConfig) => FormSelectOptions | Promise<FormSelectOption[]>;\n};\n\nexport type FormUploadData = FormFieldData\n & Pick<FormFieldProps, \"inline\" | \"multiple\" | \"accept\" | \"url\" | \"maxSize\" | \"uploadOptions\" | \"createUploadData\" | \"multi\" | \"asFile\" | \"uploadUrl\">;\n\nexport type FormGroupData = FormFieldData;\n\nexport type FormArrayData = FormFieldData\n & Pick<FormFieldProps, \"useTabs\" | \"tabsLabel\" | \"addItem\" | \"insertItem\" | \"cloneItem\" | \"moveItem\" | \"removeItem\" | \"clearItems\">;\n\n// --- JSON schema interfaces ---\n\nexport type FormFieldCustomizer = (\n field: FormFieldConfig, options: FormBuilderOptions, injector: Injector,\n property: IOpenApiSchemaProperty, schema: IOpenApiSchema\n) => MaybePromise<MaybeArray<FormFieldConfig>>;\n\nexport interface ConfigForSchemaOptions extends FormBuilderOptions {\n fieldCustomizer?: FormFieldCustomizer;\n}\n\nexport type CustomizerOrSchemaOptions = FormFieldCustomizer | ConfigForSchemaOptions;\n\nexport declare type AsyncSubmitMethod = (form: IDynamicForm, context?: any) => Promise<IAsyncMessage>;\n\nexport interface IDynamicFormModuleConfig extends Pick<ConfigOption, \"types\" | \"wrappers\" | \"extras\"> {\n\n}\n","import {\n cachedFactory,\n CachedProvider,\n IOpenApiSchema,\n IOpenApiSchemaProperty,\n MaybeArray,\n MaybePromise\n} from \"@stemy/ngx-utils\";\n\nimport {FormBuilderOptions, FormFieldConfig, FormFieldCustomizer} from \"../common-types\";\n\nexport interface IFormFieldCustomizer {\n acceptField(\n field: FormFieldConfig,\n property: IOpenApiSchemaProperty,\n schema: IOpenApiSchema\n ): boolean;\n customizeField(\n field: FormFieldConfig,\n options: FormBuilderOptions,\n property: IOpenApiSchemaProperty,\n schema: IOpenApiSchema\n ): MaybePromise<MaybeArray<FormFieldConfig>>;\n}\n\nexport function customizeFormField(...providers: CachedProvider<IFormFieldCustomizer>[]): FormFieldCustomizer {\n const factory = cachedFactory(providers);\n return async (field, options, injector, property, schema) => {\n const customizers = factory(injector);\n const fields = [field];\n for (const customizer of customizers) {\n const index = fields.findIndex(m => customizer.acceptField(m, property, schema));\n if (index >= 0) {\n const custom = await customizer.customizeField(\n fields[index], options, property, schema\n );\n const result = Array.isArray(custom) ? custom : [custom];\n fields.splice(index, 1, ...result);\n }\n }\n return fields;\n }\n}\n","import {ObjectUtils, ReflectUtils} from \"@stemy/ngx-utils\";\nimport {\n FormArrayData,\n FormFieldSerializer,\n FormGroupData,\n FormInputData,\n FormSelectData,\n FormUploadData\n} from \"../common-types\";\nimport {FormFieldBuilder} from \"../services/dynamic-form-builder.service\";\nimport {Type} from \"@angular/core\";\n\nfunction defineFormControl(target: any, propertyKey: string, cb: FormFieldBuilder): void {\n const fields: Set<string> = ReflectUtils.getMetadata(\"dynamicFormFields\", target) || new Set();\n const existing: FormFieldBuilder = ReflectUtils.getMetadata(\"dynamicFormField\", target, propertyKey);\n const builder: FormFieldBuilder = !ObjectUtils.isFunction(existing) ? cb : ((fb, opts, path) => {\n const data = existing(fb, opts, path);\n return ObjectUtils.assign(data || {}, cb(fb, opts, path) || {});\n });\n fields.add(propertyKey);\n ReflectUtils.defineMetadata(\"dynamicFormField\", builder, target, propertyKey);\n ReflectUtils.defineMetadata(\"dynamicFormFields\", fields, target);\n}\n\nexport function FormSerializable(serializer?: FormFieldSerializer): PropertyDecorator {\n return (target: any, key: string): void => {\n defineFormControl(target, key, () => ({\n key,\n serializer,\n serialize: true\n }));\n };\n}\n\nexport function FormInput(data?: FormInputData): PropertyDecorator {\n data = data || {};\n return (target: any, key: string): void => {\n const meta = ReflectUtils.getOwnMetadata(\"design:type\", target, key);\n const type = meta ? meta.name : \"\";\n let inputType = key.indexOf(\"password\") < 0 ? \"text\" : \"password\";\n switch (type) {\n case \"Number\":\n inputType = \"number\";\n break;\n case \"Boolean\":\n inputType = \"checkbox\";\n break;\n }\n data.type = data.type || inputType;\n defineFormControl(\n target, key,\n (fb, path, options) =>\n fb.createFormInput(key, data, path, options)\n );\n };\n}\n\nexport function FormSelect(data?: FormSelectData): PropertyDecorator {\n data = data || {};\n return (target: any, key: string): void => {\n defineFormControl(\n target, key,\n (fb, path, options) =>\n fb.createFormSelect(key, data, path, options)\n );\n };\n}\n\nexport function FormUpload(data?: FormUploadData): PropertyDecorator {\n data = data || {};\n return (target: any, key: string): void => {\n defineFormControl(\n target, key,\n (fb, path, options) =>\n fb.createFormUpload(key, data, path, options)\n );\n };\n}\n\nexport function FormFile(data?: FormUploadData): PropertyDecorator {\n console.warn(`@FormFile decorator is deprecated, use @FormUpload instead`);\n return FormUpload(data);\n}\n\nexport function FormGroup(data?: FormGroupData): PropertyDecorator {\n data = data || {};\n return (target: any, key: string): void => {\n defineFormControl(\n target, key,\n (fb, path, options) => {\n const targetType = ReflectUtils.getOwnMetadata(\"design:type\", target, key);\n return fb.resolveFormGroup(key, targetType, data, path, options);\n }\n );\n };\n}\n\nexport function FormArray(itemType: string | FormInputData | Type<any>, data?: FormArrayData): PropertyDecorator {\n data = data || {};\n return (target: any, key: string): void => {\n defineFormControl(\n target, key,\n (fb, path, options) => {\n return fb.resolveFormArray(key, itemType, data, path, options);\n }\n );\n };\n}\n\nexport function FormModel(data?: FormGroupData): PropertyDecorator {\n console.warn(`@FormModel decorator is deprecated, use @FormGroup instead`);\n return FormGroup(data);\n}\n","import {Injector} from \"@angular/core\";\nimport {LANGUAGE_SERVICE, ObjectUtils} from \"@stemy/ngx-utils\";\nimport {ValidationMessageFn, ValidatorFn} from \"../common-types\";\n\nexport function validationMessage(injector: Injector, key: string, labelPrefix?: string): ValidationMessageFn {\n const language = injector.get(LANGUAGE_SERVICE);\n return (_, field) => {\n return language.getTranslationSync(labelPrefix ? `${labelPrefix}.error.${key}` : `error.${key}`, field);\n }\n}\n\nexport function withName(fn: ValidatorFn, name: string): ValidatorFn {\n fn.validatorName = name;\n return fn;\n}\n\nfunction validateEach(each: boolean, cb: (value: any) => boolean, name: string): ValidatorFn {\n return withName((control) => {\n const value = control.value;\n return each ? Array.isArray(value) && value.every(cb) : cb(value);\n }, name);\n}\n\nexport function jsonValidation(): ValidatorFn {\n return withName((control) => {\n const value = control.value;\n if (!value) return false;\n try {\n JSON.parse(value);\n return true;\n } catch (e) {\n return false;\n }\n }, \"json\");\n}\n\nexport function requiredValidation(): ValidatorFn {\n return withName((control) =>\n ObjectUtils.isString(control.value) ? control.value.length > 0 : ObjectUtils.isDefined(control.value),\n \"required\"\n )\n}\n\nexport function translationValidation(langs: string[] = [\"de\", \"en\"]): ValidatorFn {\n return withName((control) => {\n const value: any[] = control.value;\n if (!value || value.length == 0) return false;\n return value.findIndex(t => langs.includes(t.lang) && !t.translation) < 0;\n }, \"translation\");\n}\n\nexport function phoneValidation(): ValidatorFn {\n return withName((control) => {\n const value = control.value;\n if (!value) return true;\n const phoneRegexp = /^\\d{10,12}$/;\n return phoneRegexp.test(value);\n }, \"phone\");\n}\n\nexport function emailValidation(): ValidatorFn {\n return withName((control) => {\n const value = control.value;\n if (!value) return true;\n const emailRegexp = /^[\\w-.]+@([\\w-]+\\.)+[\\w-]{2,4}$/g;\n return emailRegexp.test(value);\n }, \"email\");\n}\n\nexport function minLengthValidation(minLength: number, each?: boolean): ValidatorFn {\n return validateEach(each, v => typeof v == \"string\" && v.length >= minLength, \"minLength\");\n}\n\nexport function maxLengthValidation(maxLength: number, each?: boolean): ValidatorFn {\n return validateEach(each, v => typeof v == \"string\" && v.length <= maxLength, \"maxLength\");\n}\n\nexport function minValueValidation(min: number, each?: boolean): ValidatorFn {\n return validateEach(each, v => typeof v == \"number\" && v >= min, \"minValue\");\n}\n\nexport function maxValueValidation(max: number, each?: boolean): ValidatorFn {\n return validateEach(each, v => typeof v == \"number\" && v <= max, \"maxValue\");\n}\n","import {BehaviorSubject, Subject} from \"rxjs\";\nimport {ObjectUtils} from \"@stemy/ngx-utils\";\nimport {FormFieldKey, FormFieldConfig} from \"../common-types\";\n\nexport function replaceSpecialChars(str: string, to: string = \"-\"): string {\n return `${str}`.replace(/[&\\/\\\\#, +()$~%.@'\":*?<>{}]/g, to);\n}\n\nexport function getFieldByPath(field: FormFieldConfig, path: string): FormFieldConfig | null {\n if (field.path === path) {\n return field;\n }\n if (!field.fieldGroup) return null;\n for (const sf of field.fieldGroup) {\n const found = getFieldByPath(sf, path);\n if (found) return found;\n }\n return null;\n}\n\nexport function getFieldsByPredicate(field: FormFieldConfig, cb: (field: FormFieldConfig) => boolean): FormFieldConfig[] {\n if (cb(field)) {\n return [field];\n }\n if (!field.fieldGroup) return [];\n const results: FormFieldConfig[] = [];\n for (const sf of field.fieldGroup) {\n results.push(...getFieldsByPredicate(sf, cb));\n }\n return results;\n}\n\nexport function getFieldsByKey(field: FormFieldConfig, key: FormFieldKey): FormFieldConfig[] {\n return getFieldsByPredicate(field, f => f.key === key);\n}\n\nexport function setFieldHidden(field: FormFieldConfig, hidden: boolean = true): void {\n const hide = field.expressions?.hide;\n if (hide) {\n if (hide instanceof Subject) {\n hide.next(hidden);\n return;\n }\n field.expressions.hide = new BehaviorSubject(hidden);\n return;\n }\n field.hide = hidden;\n}\n\nexport function setFieldDisabled(field: FormFieldConfig, disabled: boolean = true): void {\n field.props = {\n ...(field.props || {}),\n disabled\n };\n}\n\nexport function additionalFieldValues(field: FormFieldConfig, values: {[key: string]: any}): void {\n const additional = field.expressions?.additional;\n if (additional instanceof BehaviorSubject) {\n additional.next(ObjectUtils.assign(additional.value, values || {}));\n return;\n }\n field.expressions.additional = new BehaviorSubject(values || {});\n}\n\nexport const MIN_INPUT_NUM = -999999999;\n\nexport const MAX_INPUT_NUM = 999999999;\n\nexport const EDITOR_FORMATS = [\"php\", \"json\", \"html\", \"css\", \"scss\"];\n","import {Injector} from \"@angular/core\";\r\nimport {IOpenApiSchema, IOpenApiSchemaProperty, MaybeArray, ObjectUtils, ForbiddenZone} from \"@stemy/ngx-utils\";\r\nimport {\r\n AllValidationErrors,\r\n ConfigForSchemaOptions,\r\n CustomizerOrSchemaOptions,\r\n FormBuilderOptions,\r\n FormFieldConfig,\r\n FormFieldCustomizer\r\n} from \"../common-types\";\r\nimport {AbstractControl, FormArray, FormGroup} from \"@angular/forms\";\r\n\r\nexport type ConfigForSchemaWrapMode = \"wrap\" | \"customizer\";\r\n\r\nexport interface ConfigForSchemaWrapOptions extends Required<FormBuilderOptions> {\r\n readonly injector: Injector;\r\n readonly schema: IOpenApiSchema;\r\n customize(field: FormFieldConfig, property: IOpenApiSchemaProperty, schema: IOpenApiSchema): Promise<FormFieldConfig[]>;\r\n}\r\n\r\nclass ConfigForSchemaWrap implements ConfigForSchemaWrapOptions {\r\n\r\n get labelPrefix() {\r\n return this.opts.labelPrefix;\r\n }\r\n\r\n get labelCustomizer() {\r\n return this.opts.labelCustomizer;\r\n }\r\n\r\n get testId() {\r\n return this.opts.testId;\r\n }\r\n\r\n protected fieldCustomizer: FormFieldCustomizer;\r\n\r\n constructor(\r\n protected readonly opts: ConfigForSchemaOptions,\r\n protected readonly mode: ConfigForSchemaWrapMode,\r\n readonly injector: Injector,\r\n readonly schema: IOpenApiSchema\r\n ) {\r\n this.fieldCustomizer = this.mode !== \"wrap\" || !ObjectUtils.isFunction(this.opts.fieldCustomizer)\r\n ? field => field\r\n : this.opts.fieldCustomizer;\r\n }\r\n\r\n async customize(field: FormFieldConfig, property: IOpenApiSchemaProperty, schema: IOpenApiSchema) {\r\n field.defaultValue = `${field.props?.type}`.startsWith(\"date\")\r\n ? convertToDate(property.default) : property.default;\r\n const res = await ForbiddenZone.run(\"customizer\", () =>\r\n this.fieldCustomizer(\r\n field, this.forCustomizer(), this.injector,\r\n property, schema\r\n )\r\n );\r\n return !res ? [field] : handleConfigs(res);\r\n }\r\n\r\n forCustomizer(): FormBuilderOptions {\r\n return new ConfigForSchemaWrap(this.opts, \"customizer\", this.injector, this.schema);\r\n }\r\n\r\n forSchema(schema: IOpenApiSchema): ConfigForSchemaWrapOptions {\r\n return new ConfigForSchemaWrap(this.opts, this.mode, this.injector, schema);\r\n }\r\n}\r\n\r\nexport async function toWrapOptions(customizeOrOptions: CustomizerOrSchemaOptions | ConfigForSchemaWrapOptions,\r\n injector: Injector,\r\n schema: IOpenApiSchema,\r\n errorMsg?: string): Promise<ConfigForSchemaWrapOptions> {\r\n if (errorMsg && ForbiddenZone.isForbidden(\"customizer\")) {\r\n throw new Error(errorMsg);\r\n }\r\n if (customizeOrOptions instanceof ConfigForSchemaWrap) {\r\n return customizeOrOptions;\r\n }\r\n let schemaOptions = customizeOrOptions as ConfigForSchemaOptions;\r\n if (!ObjectUtils.isObject(schemaOptions)) {\r\n schemaOptions = {\r\n fieldCustomizer: customizeOrOptions as FormFieldCustomizer\r\n };\r\n }\r\n return new ConfigForSchemaWrap(schemaOptions, \"wrap\", injector, schema);\r\n}\r\n\r\nexport function convertToDate(value: any): any {\r\n if (ObjectUtils.isNullOrUndefined(value)) return null;\r\n const date = ObjectUtils.isDate(value)\r\n ? value\r\n : new Date(value);\r\n return isNaN(date as any) ? new Date() : date;\r\n}\r\n\r\nexport function handleConfigs(configs: MaybeArray<FormFieldConfig>) {\r\n return Array.isArray(configs) ? configs : [configs];\r\n}\r\n\r\nexport function isStringWithVal(val: any): boolean {\r\n return typeof val == \"string\" && val.length > 0;\r\n}\r\n\r\nexport function findRefs(property: IOpenApiSchemaProperty): string[] {\r\n const refs = Array.isArray(property.allOf)\r\n ? property.allOf.map(o => o.$ref).filter(isStringWithVal)\r\n : [property.items?.$ref, property.$ref].filter(isStringWithVal);\r\n return refs.map(t => t.split(\"/\").pop());\r\n}\r\n\r\nexport function mergeFormFields(formFields: FormFieldConfig[][]): FormFieldConfig[] {\r\n const res: FormFieldConfig[] = [];\r\n for (const formModel of formFields) {\r\n for (const subModel of formModel) {\r\n const index = res.findIndex(t => t.key == subModel.key);\r\n if (index >= 0) {\r\n res[index] = subModel;\r\n continue;\r\n }\r\n res.push(subModel);\r\n }\r\n }\r\n return res;\r\n}\r\n\r\ninterface FormGroupControls {\r\n [key: string]: AbstractControl;\r\n}\r\n\r\nexport function getFormValidationErrors(controls: FormGroupControls, parentPath: string = \"\"): AllValidationErrors[] {\r\n const errors: AllValidationErrors[] = [];\r\n Object.entries(controls).forEach(([name, control], ix) => {\r\n const path = !parentPath ? name : `${parentPath}.${name}`;\r\n if (control instanceof FormGroup) {\r\n getFormValidationErrors(control.controls, path).forEach(error => errors.push(error));\r\n return;\r\n }\r\n if (control instanceof FormArray) {\r\n control.controls.forEach((control: FormGroup, ix) => {\r\n getFormValidationErrors(control.controls, `${path}.${ix}`).forEach(error => errors.push(error));\r\n });\r\n return;\r\n }\r\n Object.entries(control.errors || {}).forEach(([errorKey, errorValue]) => {\r\n errors.push({control, path, errorKey, errorValue});\r\n });\r\n });\r\n return errors;\r\n}\r\n","import {Inject, Injectable, Injector, Type} from \"@angular/core\";\nimport {BehaviorSubject, distinctUntilChanged, startWith, switchMap} from \"rxjs\";\nimport {\n API_SERVICE,\n IApiService,\n ILanguageService,\n LANGUAGE_SERVICE,\n MaybePromise,\n ObjectUtils,\n ReflectUtils\n} from \"@stemy/ngx-utils\";\n\nimport {\n FormArrayData,\n FormBuilderOptions,\n FormFieldConfig,\n FormFieldData,\n FormFieldExpressions,\n FormFieldProps,\n FormGroupData,\n FormHookConfig,\n FormInputData,\n FormSelectData,\n FormSelectOption,\n FormUploadData,\n Validators\n} from \"../common-types\";\nimport {validationMessage} from \"../utils/validation\";\nimport {MAX_INPUT_NUM, MIN_INPUT_NUM} from \"../utils/misc\";\nimport {isStringWithVal} from \"../utils/internal\";\n\nexport type FormFieldBuilder = (fb: DynamicFormBuilderService, parent: FormFieldConfig, options: FormBuilderOptions) => Partial<FormFieldConfig>;\n\n@Injectable()\nexport class DynamicFormBuilderService {\n\n constructor(readonly injector: Injector,\n @Inject(API_SERVICE) readonly api: IApiService,\n @Inject(LANGUAGE_SERVICE) readonly language: ILanguageService) {\n }\n\n resolveFormFields(target: Type<any>, parent: FormFieldConfig, options: FormBuilderOptions): FormFieldConfig[] {\n const prototype = target?.prototype || {};\n const fields: Set<string> = ReflectUtils.getMetadata(\"dynamicFormFields\", target?.prototype || {}) || new Set();\n const result: FormFieldConfig[] = [];\n for (const key of fields) {\n const builder: FormFieldBuilder = ReflectUtils.getMetadata(\"dynamicFormField\", prototype, key);\n const field = builder(this, parent, options) as FormFieldConfig;\n if (field) {\n result.push(field);\n }\n }\n return this.createFieldSets(result, parent, options);\n }\n\n resolveFormGroup(key: string, target: Type<any>, data: FormGroupData, parent: FormFieldConfig = null, options: FormBuilderOptions = {}): FormFieldConfig {\n return this.createFormGroup(key, sp => this.resolveFormFields(\n target, sp, options\n ), data, parent, options);\n }\n\n resolveFormArray(key: string, itemType: string | FormInputData | Type<any>, data: FormArrayData, parent: FormFieldConfig = null, options: FormBuilderOptions = {}): FormFieldConfig {\n return this.createFormArray(key, sp => {\n return typeof itemType === \"function\" ? this.resolveFormFields(\n itemType, sp, options\n ) : this.createFormInput(\"\", typeof itemType === \"string\" ? {type: `${itemType}`} : itemType, null, options);\n }, data, parent, options);\n }\n\n createFieldSets(fields: FormFieldConfig[], parent: FormFieldConfig, options: FormBuilderOptions): FormFieldConfig[] {\n const others: FormFieldConfig[] = [];\n const groups: { [fs: string]: FormFieldConfig[] } = {};\n fields = fields.filter(f => {\n if (Array.isArray(f.fieldGroup) && Array.isArray(f.wrappers) && f.wrappers[0] === \"form-fieldset\") {\n // This field is an already existing set\n groups[f.id] = f.fieldGroup;\n return false;\n }\n return true;\n });\n\n for (const field of fields) {\n const fsName = field.hide ? null : String(field.fieldSet || \"\");\n // If we have a fieldset name defined and have actual fields for it\n // then push the property fields into a group\n if (fsName) {\n const fsId = !parent?.path ? fsName : `${parent.path}.${fsName}`;\n const group = groups[fsId] || [];\n groups[fsId] = group;\n group.push(field);\n continue;\n }\n // Otherwise just push the fields to the others\n others.push(field);\n }\n\n // Create a field-set wrapper for each group and concat the other fields to the end\n return Object.keys(groups).map(id => {\n const key = id.split(\".\").pop();\n const fieldSet: FormFieldConfig = {\n id,\n parent,\n fieldGroup: groups[id],\n wrappers: [\"form-fieldset\"],\n className: `dynamic-form-fieldset dynamic-form-fieldset-${id}`,\n props: {\n label: this.getLabel(key, key, parent, options),\n hidden: false\n },\n hooks: {},\n expressions: {}\n };\n this.setExpressions(fieldSet, options);\n return fieldSet;\n }).concat(others);\n }\n\n createFormInput(key: string, data: FormInputData, parent: FormFieldConfig, options: FormBuilderOptions): FormFieldConfig {\n data = data || {};\n const type = `${data.type || \"text\"}`;\n const autocomplete = data.autocomplete || (type === \"password\" ? \"new-password\" : \"none\");\n return this.createFormField(key, type === \"checkbox\" || type === \"textarea\" ? type : \"input\", data, {\n type,\n autocomplete,\n pattern: ObjectUtils.isString(data.pattern) ? data.pattern : \"\",\n step: data.step,\n cols: data.cols || null,\n rows: data.rows || 10,\n min: isNaN(data.min) ? MIN_INPUT_NUM : data.min,\n max: isNaN(data.max) ? MAX_INPUT_NUM : data.max,\n minLength: isNaN(data.minLength) ? 0 : data.minLength,\n maxLength: isNaN(data.maxLength) ? MAX_INPUT_NUM : data.maxLength,\n placeholder: data.placeholder || \"\",\n indeterminate: data.indeterminate || false,\n suffix: data.suffix || \"\",\n attributes: {\n autocomplete\n },\n }, parent, options);\n }\n\n createFormSelect(key: string, data: FormSelectData, parent: FormFieldConfig, options: FormBuilderOptions): FormFieldConfig {\n data = data || {};\n const type = `${data.type || \"select\"}`;\n const select = this.createFormField(key, type === \"radio\" ? type : \"select\", data, {\n type,\n multiple: data.multiple,\n groupBy: data.groupBy,\n allowEmpty: data.allowEmpty\n }, parent, options);\n select.hooks = Object.assign(select.hooks, {\n onInit: field => {\n const options = data.options?.(field) || [];\n const control = field.formControl.root;\n field.props.options = options instanceof Promise ? control.valueChanges.pipe(\n startWith(control.value),\n distinctUntilChanged(),\n switchMap(async () => {\n const results: FormSelectOption[] = await data.options(field) as any;\n return this.fixSelectOptions(field, results);\n })\n ) : options;\n }\n } as FormHookConfig);\n return select;\n }\n\n createFormUpload(key: string, data: FormUploadData, parent: FormFieldConfig, options: FormBuilderOptions): FormFieldConfig {\n data = data || {};\n\n if (data.asFile) {\n data.inline = true;\n console.warn(`File upload property \"asFile\" is deprecated. Use \"inline\" instead.`);\n }\n\n if (data.multi) {\n data.multiple = true;\n console.warn(`File upload property \"multi\" is deprecated. Use \"multiple\" instead.`);\n }\n\n return this.createFormField(key, \"upload\", data, {\n inline: data.inline === true,\n multiple: data.multiple === true,\n accept: data.accept || [\".png\", \".jpg\"],\n url: data.url?.startsWith(\"http\") ? data.url : this.api.url(data.url || \"assets\"),\n maxSize: isNaN(data.maxSize) ? MAX_INPUT_NUM : data.maxSize,\n uploadOptions: data.uploadOptions || {},\n createUploadData: data.createUploadData\n }, parent, options);\n }\n\n createFormGroup(key: string, fields: (parent: FormFieldConfig) => FormFieldConfig[], data: FormGroupData, parent: FormFieldConfig, options: FormBuilderOptions): FormFieldConfig\n createFormGroup(key: string, fields: (parent: FormFieldConfig) => Promise<FormFieldConfig[]>, data: FormGroupData, parent: FormFieldConfig, options: FormBuilderOptions): Promise<FormFieldConfig>\n createFormGroup(key: string, fields: (parent: FormFieldConfig) => any, data: FormGroupData, parent: FormFieldConfig, options: FormBuilderOptions): MaybePromise<FormFieldConfig> {\n data = data || {};\n const group = this.createFormField(key, undefined, data, {}, parent, options);\n group.wrappers = [\"form-group\"];\n const result = fields(group);\n const handleGroup = (fieldGroup: FormFieldConfig[]) => {\n group.fieldGroup = fieldGroup;\n return group;\n };\n return result instanceof Promise\n ? result.then(handleGroup)\n : handleGroup(result);\n }\n\n createFormArray(key: string, fields: (parent: FormFieldConfig) => FormFieldConfig | FormFieldConfig[], data: FormArrayData, parent: FormFieldConfig, options: FormBuilderOptions): FormFieldConfig\n createFormArray(key: string, fields: (parent: FormFieldConfig) => Promise<FormFieldConfig | FormFieldConfig[]>, data: FormArrayData, parent: FormFieldConfig, options: FormBuilderOptions): Promise<FormFieldConfig>\n createFormArray(key: string, fields: (parent: FormFieldConfig) => any, data: FormArrayData, parent: FormFieldConfig, options: FormBuilderOptions): MaybePromise<FormFieldConfig> {\n data = data || {};\n const array = this.createFormField(key, \"array\", data, {\n // initialCount: data.initialCount || 0,\n // sortable: data.sortable || false,\n useTabs: data.useTabs === true,\n tabsLabel: `${data.tabsLabel || \"label\"}`,\n addItem: data.addItem !== false,\n insertItem: data.insertItem !== false,\n cloneItem: data.cloneItem !== false,\n moveItem: data.moveItem !== false,\n removeItem: data.removeItem !== false,\n clearItems: data.clearItems !== false\n }, parent, options);\n const result = fields(array);\n const handleItems = (items: FormFieldConfig | FormFieldConfig[]) => {\n if (Array.isArray(items)) {\n array.fieldArray = {\n wrappers: [\"form-group\"],\n fieldGroup: items,\n hooks: {},\n expressions: {}\n };\n return array;\n }\n const props = items.props || {};\n if (props.type === \"text\" || props.type === \"number\") {\n array.type = \"chips\";\n array.wrappers = [\"form-field\"];\n array.props = {\n ...props,\n ...array.props,\n multiple: true\n };\n return array;\n }\n array.fieldArray = {\n ...items,\n props: {\n ...items.props,\n label: \"\"\n }\n };\n return array;\n };\n return result instanceof Promise\n ? result.then(handleItems)\n : handleItems(result);\n }\n\n async fixSelectOptions(field: FormFieldConfig, options: FormSelectOption[]): Promise<FormSelectOption[]> {\n if (!options) return [];\n for (const option of options) {\n const classes = Array.isArray(option.classes) ? option.classes : [`${option.classes}`];\n option.className = classes.filter(isStringWithVal).join(\" \");\n option.label = await this.language.getTranslation(option.label);\n option.value = option.value ?? option.id;\n option.id = option.id ?? option.value;\n }\n const control = field.formControl;\n if (field.props.multiple || options.length === 0 || options.findIndex(o => o.value === control.value) >= 0) return options;\n control.setValue(options[0].value);\n return options;\n }\n\n protected getLabel(key: string, label: string, parent: FormFieldConfig, options: FormBuilderOptions): string {\n const labelPrefix = !ObjectUtils.isString(options.labelPrefix) ? `` : options.labelPrefix;\n const pathPrefix = `${parent?.props?.label || labelPrefix}`;\n const labelItems = ObjectUtils.isString(label)\n ? (!label ? [] : [labelPrefix, label])\n : [pathPrefix, `${key || \"\"}`]\n return labelItems.filter(l => l.length > 0).join(\".\");\n }\n\n protected createFormField(key: string, type: string, data: FormFieldData, props: FormFieldProps, parent: FormFieldConfig, options: FormBuilderOptions): FormFieldConfig {\n const validators = Array.isArray(data.validators)\n ? data.validators.reduce((res, validator, ix) => {\n res[validator.validatorName || `validator_${ix}`] = validator;\n return res;\n }, {} as Validators)\n : data.validators || {};\n const hide = new BehaviorSubject(data.hidden === true);\n const additional = new BehaviorSubject({});\n const field: FormFieldConfig = {\n key,\n type,\n validators,\n parent,\n fieldSet: String(data.fieldSet || \"\"),\n resetOnHide: false,\n validation: {\n messages: Object.keys(validators).reduce((res, key) => {\n res[key] = validationMessage(this.injector, key, options.labelPrefix);\n return res;\n }, {})\n },\n props: {\n ...props,\n disabled: data.disabled === true,\n formCheck: \"nolabel\",\n required: !!validators.required,\n label: options.labelCustomizer?.(key, data.label, parent, options.labelPrefix)\n ?? this.getLabel(key, data.label, parent, options),\n },\n modelOptions: {\n updateOn: \"change\"\n },\n fieldGroupClassName: \"field-container\",\n hooks: {},\n expressions: {\n hide,\n additional,\n className: (target: FormFieldConfig) => {\n return target.hide ? `` : [`dynamic-form-field`, `dynamic-form-field-${target.key}`, `dynamic-form-${target.type || \"group\"}`].concat(\n Array.isArray(data.classes) ? data.classes : [data.classes || \"\"]\n ).filter(c => c?.length > 0).join(\" \");\n }\n }\n };\n this.setExpressions(field, options);\n return field;\n }\n\n protected setExpressions(field: FormFieldConfig, options: FormBuilderOptions): void {\n const expressions: FormFieldExpressions = {\n path: target => {\n const tp = target.parent;\n const key = !target.key ? `` : `.${target.key}`;\n return !tp?.path ? `${target.key || \"\"}` : `${tp.path}.${key}`;\n },\n testId: target => {\n const tp = target.parent;\n const prefix = !options.testId ? `` : `${options.testId}-`;\n const key = !target.key ? `` : `-${target.key}`;\n return !tp?.testId ? `${prefix}${target.key || key}` : `${tp.testId}${key}`;\n }\n };\n Object.entries(expressions).forEach(([key, expression]) => {\n field.expressions = field.expressions ?? {};\n field.expressions[key] = expression;\n if (ObjectUtils.isFunction(expression)) {\n field[key] = expression(field);\n }\n });\n }\n}\n","import {Injectable, Injector} from \"@angular/core\";\nimport {AbstractControl, FormArray, FormGroup} from \"@angular/forms\";\nimport {distinctUntilChanged, firstValueFrom, from, isObservable, startWith, switchMap} from \"rxjs\";\nimport {\n IApiService,\n ILanguageService, IOpenApiSchema,\n IOpenApiSchemaProperty,\n ObjectUtils,\n OpenApiService,\n StringUtils\n} from \"@stemy/ngx-utils\";\n\nimport {\n CustomizerOrSchemaOptions,\n FormFieldConfig,\n FormFieldData,\n FormSelectOption,\n FormSelectOptions,\n Validators\n} from \"../common-types\";\n\nimport {\n emailValidation,\n maxLengthValidation,\n maxValueValidation,\n minLengthValidation,\n minValueValidation,\n requiredValidation\n} from \"../utils/validation\";\nimport {\n ConfigForSchemaWrapOptions,\n convertToDate,\n findRefs,\n isStringWithVal,\n mergeFormFields,\n toWrapOptions\n} from \"../utils/internal\";\n\nimport {DynamicFormBuilderService} from \"./dynamic-form-builder.service\";\n\n@Injectable()\nexport class DynamicFormSchemaService {\n\n get api(): IApiService {\n return this.openApi.api;\n }\n\n get language(): ILanguageService {\n return this.api.language;\n }\n\n constructor(protected readonly openApi: OpenApiService,\n protected readonly injector: Injector,\n protected readonly builder: DynamicFormBuilderService) {\n }\n\n async getSchema(name: string): Promise<IOpenApiSchema> {\n return this.openApi.getSchema(name);\n }\n\n async getFormFieldsForSchema(name: string,\n parent: FormFieldConfig,\n customizeOrOptions: CustomizerOrSchemaOptions): Promise<FormFieldConfig[]> {\n const schema = await this.getSchema(name);\n if (!schema) return [];\n const options = await toWrapOptions(customizeOrOptions, this.injector, schema);\n const keys = Object.keys(schema.properties || {});\n const fields: FormFieldConfig[] = [];\n // Collect all properties of this schema def\n for (const key of keys) {\n const property = schema.properties[key];\n const propFields = await this.getFormFieldsForProp(property, schema, options, parent);\n fields.push(...propFields);\n }\n return this.builder.createFieldSets(\n fields.filter(f => null !== f),\n parent, options\n );\n }\n\n protected async getFormFieldsForProp(property: IOpenApiSchemaProperty, schema: IOpenApiSchema, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): Promise<FormFieldConfig[]> {\n const field = await this.getFormFieldForProp(property, options, parent);\n return !field ? [] : options.customize(field, property, schema);\n }\n\n protected async getFormFieldForProp(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): Promise<FormFieldConfig> {\n const $enum = property.items?.enum || property.enum;\n if (Array.isArray($enum) || isStringWithVal(property.optionsPath) || isStringWithVal(property.endpoint)) {\n return this.getFormSelectConfig(property, options, parent);\n }\n switch (property.type) {\n case \"string\":\n case \"number\":\n case \"integer\":\n case \"textarea\":\n // if (this.checkIsEditorProperty(property)) {\n // return this.getFormEditorConfig(property, options, parent);\n // }\n if (property.format == \"textarea\") {\n return this.getFormTextareaConfig(property, options, parent);\n }\n if (property.format == \"date\" || property.format == \"date-time\") {\n return this.getFormDatepickerConfig(property, options, parent);\n }\n return this.getFormInputConfig(property, options, parent);\n // case \"object\":\n // return this.getFormEditorConfig(property, options, parent);\n case \"boolean\":\n return this.getFormCheckboxConfig(property, options, parent);\n case \"array\":\n return this.getFormArrayConfig(property, options, parent);\n case \"file\":\n case \"upload\":\n return this.getFormUploadConfig(property, options, parent);\n }\n if (findRefs(property).length > 0) {\n return this.getFormGroupConfig(property, options, parent);\n }\n return null;\n }\n\n protected getFormFieldData(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions): FormFieldData {\n const validators: Validators = {};\n const schema = options.schema;\n if (ObjectUtils.isArray(schema.required) && schema.required.indexOf(property.id) >= 0) {\n validators.required = requiredValidation();\n }\n this.addPropertyValidators(validators, property);\n this.addItemsValidators(validators, property.items);\n return {\n hidden: property.hidden === true,\n fieldSet: property.fieldSet,\n classes: property.classes,\n validators\n };\n }\n\n protected async getFormArrayConfig(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): Promise<FormFieldConfig> {\n return this.builder.createFormArray(property.id, async sp => {\n const subSchemas = findRefs(property);\n if (subSchemas.length > 0) {\n const subModels = await Promise.all(\n subSchemas.map(s => this.getFormFieldsForSchema(s, sp, options))\n );\n return mergeFormFields(ObjectUtils.copy(subModels));\n }\n return this.getFormFieldForProp(property.items, options, null);\n }, {\n ...this.getFormFieldData(property, options),\n // initialCount: property.initialCount || 0,\n // sortable: property.sortable || false,\n useTabs: property.useTabs,\n tabsLabel: property.tabsLabel,\n addItem: property.addItem,\n insertItem: property.insertItem,\n cloneItem: property.cloneItem,\n moveItem: property.moveItem,\n removeItem: property.removeItem,\n clearItems: property.clearItems\n }, parent, options);\n }\n\n protected async getFormGroupConfig(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): Promise<FormFieldConfig> {\n return this.builder.createFormGroup(property.id, async sp => {\n const subSchemas = findRefs(property);\n const subModels = await Promise.all(\n subSchemas.map(s => this.getFormFieldsForSchema(s, sp, options))\n );\n return mergeFormFields(subModels);\n }, {\n ...this.getFormFieldData(property, options),\n }, parent, options);\n }\n\n protected getFormInputConfig(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): FormFieldConfig {\n let type = StringUtils.has(property.id || \"\", \"password\", \"Password\") ? \"password\" : (property.format || property.type);\n switch (type) {\n case \"string\":\n type = \"text\";\n break;\n case \"boolean\":\n type = \"checkbox\";\n break;\n case \"textarea\":\n type = \"textarea\";\n break;\n case \"integer\":\n type = \"number\";\n break;\n }\n const sub = property.type == \"array\" ? property.items || property : property;\n return this.builder.createFormInput(property.id, {\n ...this.getFormFieldData(property, options),\n type,\n autocomplete: property.autocomplete,\n pattern: property.pattern,\n step: isNaN(sub.step) ? property.step : sub.step,\n min: sub.minimum,\n max: sub.maximum,\n minLength: sub.minLength,\n maxLength: sub.maxLength,\n placeholder: property.placeholder,\n indeterminate: property.indeterminate,\n suffix: property.suffix\n }, parent, options);\n }\n\n protected getFormTextareaConfig(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): FormFieldConfig {\n return this.builder.createFormInput(property.id, {\n ...this.getFormFieldData(property, options),\n type: \"textarea\",\n autocomplete: property.autoComplete,\n cols: property.cols || null,\n rows: property.rows || 10,\n minLength: property.minLength,\n maxLength: property.maxLength,\n placeholder: property.placeholder || \"\"\n }, parent, options);\n }\n\n // getFormEditorConfig(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrap): DynamicEditorModelConfig {\n // const sub = property.type == \"array\" ? property.items || property : property;\n // return Object.assign(\n // this.getFormControlConfig(property, options),\n // {\n // inputType: property.format || \"json\",\n // convertObject: property.type !== \"string\",\n // autoComplete: property.autoComplete || \"off\",\n // multiple: property.type == \"array\",\n // accept: ObjectUtils.isString(property.accept) ? property.accept : null,\n // mask: ObjectUtils.isString(property.mask) ? property.mask : null,\n // pattern: ObjectUtils.isString(property.pattern) ? property.pattern : null,\n // step: isNaN(sub.step) ? (isNaN(property.step) ? 1 : property.step) : sub.step,\n // minLength: isNaN(sub.minLength) ? 0 : sub.minLength,\n // maxLength: isNaN(sub.maxLength) ? MAX_INPUT_NUM : sub.maxLength,\n // placeholder: property.placeholder || \"\"\n // }\n // );\n // }\n\n protected getFormDatepickerConfig(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): FormFieldConfig {\n return this.builder.createFormInput(property.id, {\n ...this.getFormFieldData(property, options),\n type: property.format == \"date-time\" ? \"datetime-local\" : \"date\",\n // format: property.dateFormat || \"dd.MM.yyyy\",\n min: convertToDate(property.min),\n max: convertToDate(property.max),\n }, parent, options);\n }\n\n protected getFormSelectConfig(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): FormFieldConfig {\n return this.builder.createFormSelect(property.id, {\n ...this.getFormFieldData(property, options),\n options: field => this.getFormSelectOptions(property, options, field),\n type: property.format || \"select\",\n multiple: property.type == \"array\",\n groupBy: property.groupBy,\n allowEmpty: property.allowEmpty\n }, parent, options);\n }\n\n protected getFormUploadConfig(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): FormFieldConfig {\n return this.builder.createFormUpload(property.id, {\n ...this.getFormFieldData(property, options),\n multiple: property.type === \"array\",\n inline: property.inline,\n accept: property.accept,\n url: property.url,\n maxSize: property.maxSize,\n uploadOptions: property.uploadOptions\n }, parent, options);\n }\n\n protected getFormCheckboxConfig(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): FormFieldConfig {\n return this.builder.createFormInput(property.id, {\n ...this.getFormFieldData(property, options),\n type: \"checkbox\",\n indeterminate: property.indeterminate || false\n }, parent, options);\n }\n\n protected getFormSelectOptions(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, field: FormFieldConfig): FormSelectOptions {\n const $enum = property.items?.enum || property.enum;\n if (Array.isArray($enum)) {\n return from(this.builder.fixSelectOptions(field, $enum.map(value => {\n const label = options.labelPrefix\n ? this.language.getTranslationSync(`${options.labelPrefix}.${property.id}.${value}`)\n : `${property.id}.${value}`;\n return {value, label};\n })));\n }\n if (isStringWithVal(property.endpoint)) {\n const entries = Object.entries((field.formControl.root as FormGroup)?.controls || {});\n const endpoint = entries.reduce((res, [key, control]) => {\n return this.replaceOptionsEndpoint(res, key, control?.value);\n }, `${property.endpoint}`);\n this.api.cache[endpoint] = this.api.cache[endpoint] || this.api.list(endpoint, this.api.makeListParams(1, -1)).then(result => {\n const items = ObjectUtils.isArray(result)\n ? result\n : (ObjectUtils.isArray(result.items) ? result.items : []);\n return items.map(i => {\n const item = ObjectUtils.isObject(i) ? i : {id: i};\n return {\n ...item,\n value: item.id || item._id,\n label: item[property.labelField] || item.label || item.id || item._id\n };\n });\n });\n const options = this.api.cache[endpoint] as Promise<FormSelectOption[]>;\n return from(options.then(opts => {\n return this.builder.fixSelectOptions(field, opts.map(o => Object.assign({}, o)))\n }));\n }\n let path = property.optionsPath as string;\n let control = field.formControl;\n let current = field;\n if (path.startsWith(\"$root\")) {\n path = path.substring(5);\n control = control.root || control;\n while (current.parent) {\n current = current.parent;\n }\n }\n while (path.startsWith(\".\")) {\n path = path.substring(1);\n control = control.parent || control;\n current = current.parent || current;\n }\n control = !path ? control : control.get(path);\n return control.valueChanges.pipe(\n startWith(control.value),\n distinctUntilChanged(),\n switchMap(async (controlVal) => {\n const currentOpts = current.props.options;\n const finalOpts = isObservable(currentOpts)\n ? await firstValueFrom(currentOpts)\n : (Array.isArray(currentOpts) ? currentOpts : []);\n return this.builder.fixSelectOptions(field, (!Array.isArray(controlVal) ? [] : controlVal).map(value => {\n const modelOption = finalOpts.find(t => t.value == value);\n return {value, label: modelOption?.label || value};\n }));\n })\n );\n }\n\n protected replaceOptionsEndpoint(endpoint: string, key: string, value: any): string {\n if (ObjectUtils.isObject(value)) {\n return Object.entries(value).reduce((res, [k, v]) => {\n return this.replaceOptionsEndpoint(res, `${key}.${k}`, v);\n }, endpoint)\n }\n if (ObjectUtils.isArray(value)) {\n return value.reduce((res, v, i) => {\n return this.replaceOptionsEndpoint(res, `${key}.${i}`, v);\n }, endpoint)\n }\n return endpoint.replace(new RegExp(`\\\\$${key}`, \"gi\"), `${value ?? \"\"}`);\n }\n\n protected showErrorsForGroup(formGroup: FormGroup): void {\n if (!formGroup) return;\n formGroup.markAsTouched({onlySelf: true});\n const controls = Object.keys(formGroup.controls).map(id => formGroup.controls[id]);\n this.showErrorsForControls(controls);\n }\n\n protected showErrorsForControls(controls: AbstractControl[]): void {\n controls.forEach(control => {\n if (control instanceof FormGroup) {\n this.showErrorsForGroup(control);\n return;\n }\n control.markAsTouched({onlySelf: true});\n if (control instanceof FormArray) {\n this.showErrorsForControls(control.controls);\n }\n });\n }\n\n protected addPropertyValidators(validators: Validators, property: IOpenApiSchemaProperty): void {\n if (!property) return;\n if (!isNaN(property.minLength)) {\n validators.minLength = minLengthValidation(property.minLength);\n }\n if (!isNaN(property.maxLength)) {\n validators.maxLength = maxLengthValidation(property.maxLength);\n }\n if (!isNaN(property.minimum)) {\n validators.min = minValueValidation(property.minimum);\n }\n if (!isNaN(property.maximum)) {\n validators.max = maxValueValidation(property.maximum);\n }\n // if (isString(property.pattern) && property.pattern.length) {\n // validators.pattern = property.pattern;\n // }\n switch (property.format) {\n case \"email\":\n validators.email = emailValidation();\n break;\n }\n }\n\n protected addItemsValidators(validators: Validators, items: IOpenApiSchemaProperty): void {\n if (!items) return;\n if (!isNaN(items.minLength)) {\n validators.itemsMinLength = minLengthValidation(items.minLength, true);\n }\n if (!isNaN(items.maxLength)) {\n validators.itemsMaxLength = maxLengthValidation(items.maxLength, true);\n }\n if (!isNaN(items.minimum)) {\n validators.itemsMinValue = minValueValidation(items.minimum, true);\n }\n if (!isNaN(items.maximum)) {\n validators.itemsMaxValue = maxValueValidation(items.maximum, true);\n }\n }\n}\n","import {Inject, Injectable, Injector} from \"@angular/core\";\nimport {AbstractControl, FormArray, FormGroup} from \"@angular/forms\";\nimport {first} from \"rxjs\";\nimport {API_SERVICE, IApiService, ObjectUtils} from \"@stemy/ngx-utils\";\n\nimport {\n CustomizerOrSchemaOptions,\n FORM_ROOT_KEY,\n FormFieldConfig,\n FormSerializeResult,\n IDynamicForm\n} from \"../common-types\";\nimport {getFormValidationErrors, toWrapOptions} from \"../utils/internal\";\n\nimport {DynamicFormSchemaService} from \"./dynamic-form-schema.service\";\nimport {DynamicFormBuilderService} from \"./dynamic-form-builder.service\";\n\n@Injectable()\nexport class DynamicFormService {\n\n constructor(protected readonly fs: DynamicFormSchemaService,\n protected readonly fb: DynamicFormBuilderService,\n protected readonly injector: Injector,\n @Inject(API_SERVICE) protected readonly api: IApiService) {\n\n }\n\n async getFormFieldsForSchema(name: string, customizeOrOptions?: CustomizerOrSchemaOptions): Promise<FormFieldConfig[]> {\n const group = await this.getFormFieldGroupBySchemaName(name, customizeOrOptions, \"getFormFieldsForSchema\");\n return group.fieldGroup;\n }\n\n async getFormFieldGroupForSchema(name: string, customizeOrOptions?: CustomizerOrSchemaOptions): Promise<FormFieldConfig> {\n return this.getFormFieldGroupBySchemaName(name, customizeOrOptions, \"getFormFieldsForSchema\");\n }\n\n protected async getFormFieldGroupBySchemaName(name: string, customizeOrOptions: CustomizerOrSchemaOptions, restrictedMethod: string): Promise<FormFieldConfig> {\n const config = {\n key: FORM_ROOT_KEY,\n path: \"\",\n wrappers: [\"form-group\"]\n } as FormFieldConfig;\n const schema = await this.fs.getSchema(name);\n const wrapOptions = await toWrapOptions(\n customizeOrOptions, this.injector, schema,\n `\"DynamicFormService.${restrictedMethod}\" is called from a customizer, which is not allowed. Please use DynamicFormSchemaService instead!`\n );\n const fields = await this.fs.getFormFieldsForSchema(name, config, wrapOptions);\n const fieldGroup = [...fields];\n\n config.fieldGroup = fieldGroup;\n\n // There are no actual fields in the schema, or no schema exists\n if (fields.length === 0) return config;\n\n // Add id fields if necessary\n const idFields: FormFieldConfig[] = [\n this.fb.createFormInput(\"id\", {hidden: true}, null, wrapOptions),\n this.fb.createFormInput(\"_id\", {hidden: true}, null, wrapOptions)\n ];\n\n fieldGroup.unshift(...idFields\n .filter(t => !fields.some(c => c.key == t.key))\n );\n\n const root = await wrapOptions.customize(config, {\n id: FORM_ROOT_KEY,\n type: \"object\",\n properties: schema?.properties || {}\n }, schema);\n // Check if the customized root wrapper returned an array\n fields.length = 0;\n\n for (const model of root) {\n if (model.key === FORM_ROOT_KEY) {\n return model;\n } else {\n fields.push(model);\n }\n }\n\n return {\n ...config,\n fieldGroup: fields\n };\n }\n\n async validateForm(form: IDynamicForm, showErrors: boolean = true): Promise<any> {\n const group = form.group();\n if (!group) return Promise.resolve();\n return new Promise<any>((resolve, reject) => {\n group.statusChanges\n .pipe(first(status => status == \"VALID\" || status == \"INVALID\"))\n .subscribe(status => {\n if (showErrors) {\n this.showErrorsForGroup(group);\n }\n if (status == \"VALID\") {\n resolve(null);\n return;\n }\n reject(getFormValidationErrors(group.controls));\n });\n group.updateValueAndValidity();\n });\n }\n\n async serializeForm(form: IDynamicForm, validate: boolean = true): Promise<FormSerializeResult> {\n const fields = form.config();\n if (!fields) return null;\n if (validate) {\n await this.validateForm(form);\n }\n return this.serialize(fields);\n }\n\n async serialize(fields: FormFieldConfig[]): Promise<FormSerializeResult> {\n const result = {};\n if (!fields) return result;\n for (const field of fields) {\n const serializer = field.serializer;\n const key = `${field.key}`;\n if (ObjectUtils.isFunction(serializer)) {\n result[key] = await serializer(field, this.injector);\n continue;\n }\n if (field.hide && !field.serialize) {\n continue;\n }\n const control = field.formControl;\n if (field.fieldGroup) {\n const group = await this.serialize(field.fieldGroup);\n if (field.key) {\n result[key] = !field.fieldArray ? group : Object.values(group);\n continue;\n }\n Object.assign(result, group);\n continue;\n }\n result[key] = control.value;\n }\n return result;\n }\n\n protected showErrorsForGroup(formGroup: FormGroup): void {\n if (!formGroup) return;\n formGroup.markAsTouched({onlySelf: true});\n const controls = Object.keys(formGroup.controls).map(id => formGroup.controls[id]);\n this.showErrorsForControls(controls);\n }\n\n protected showErrorsForControls(controls: AbstractControl[]): void {\n controls.forEach(control => {\n if (control instanceof FormGroup) {\n this.showErrorsForGroup(control);\n return;\n }\n control.markAsTouched({onlySelf: true});\n if (control instanceof FormArray) {\n this.showErrorsForControls(control.controls);\n }\n });\n }\n}\n","import {\n computed,\n Directive,\n effect,\n ElementRef,\n HostBinding,\n HostListener,\n inject,\n input,\n output,\n Renderer2,\n signal\n} from \"@angular/core\";\nimport {outputToObservable} from \"@angular/core/rxjs-interop\";\nimport {debounceTime} from \"rxjs/operators\";\nimport {IAsyncMessage, TOASTER_SERVICE} from \"@stemy/ngx-utils\";\n\nimport {AsyncSubmitMethod, IDynamicForm} from \"../common-types\";\n\n@Directive({\n standalone: false,\n selector: \"[async-submit]\",\n exportAs: \"async-submit\"\n})\nexport class AsyncSubmitDirective {\n\n method = input<AsyncSubmitMethod>(null, {alias: \"async-submit\"});\n form = input<IDynamicForm>();\n context = input<any>();\n\n onSuccess = output<IAsyncMessage>();\n onError = output<IAsyncMessage>();\n\n toaster = inject(TOASTER_SERVICE);\n renderer = inject(Renderer2);\n elem = inject<ElementRef<HTMLElement>>(ElementRef);\n\n protected status = computed(() => {\n const form = this.form();\n return form?.status() || null;\n });\n\n protected group = computed(() => {\n const form = this.form();\n return form?.group() || null;\n });\n\n protected loading = signal(false);\n protected callback = signal<() => void>(null);\n\n @HostBinding(\"class.disabled\")\n get isDisabled(): boolean {\n return this.status() !== \"VALID\";\n }\n\n @HostBinding(\"class.loading\")\n get isLoading(): boolean {\n return this.loading();\n }\n\n constructor() {\n effect(() => {\n if (this.elem.nativeElement.tagName === \"BUTTON\") {\n this.renderer.setAttribute(this.elem.nativeElement, \"type\", \"button\");\n }\n });\n effect(() => {\n const status = this.status();\n const cb = this.callback();\n if (!cb || status == \"PENDING\") return;\n if (status === \"VALID\") {\n cb();\n }\n this.callback.set(null);\n });\n effect(() => {\n const form = this.form();\n if (!form) return;\n const sub = outputToObservable(form.onSubmit)\n .pipe(debounceTime(200)).subscribe(() => this.callMethod());\n return () => sub.unsubscribe();\n });\n }\n\n @HostListener(\"click\")\n click(): void {\n const status = this.status();\n if (status !== \"VALID\" && status !== \"INVALID\") {\n this.callback.set(() => this.callMethod());\n return;\n }\n this.callMethod();\n }\n\n callMethod(): void {\n if (this.loading()) return;\n this.loading.set(true);\n this.method()(this.form(), this.context).then(result => {\n this.loading.set(false);\n if (result) {\n this.onSuccess.emit(result);\n this.toaster.success(result.message, result.context);\n }\n }, reason => {\n if (!reason || !reason.message)\n throw new Error(\"Reason must implement IAsyncMessage interface\");\n this.loading.set(false);\n this.onError.emit(reason);\n this.toaster.error(reason.message, reason.context);\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n Injector,\n input,\n output,\n ViewEncapsulation\n} from \"@angular/core\";\nimport {rxResource, toSignal} from \"@angular/core/rxjs-interop\";\nimport {FormGroup} from \"@angular/forms\";\nimport {Subject} from \"rxjs\";\nimport {FormlyFormOptions} from \"@ngx-formly/core\";\nimport {EventsService, LANGUAGE_SERVICE} from \"@stemy/ngx-utils\";\n\nimport {FormFieldChangeEvent, FormFieldConfig, FormFieldLabelCustomizer, IDynamicForm} from \"../../common-types\";\nimport {DynamicFormBuilderService} from \"../../services/dynamic-form-builder.service\";\n\n@Component({\n standalone: false,\n selector: \"dynamic-form\",\n templateUrl: \"./dynamic-form.component.html\",\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DynamicFormComponent implements IDynamicForm {\n\n protected readonly builder = inject(DynamicFormBuilderService);\n\n protected readonly events = inject(EventsService);\n\n protected readonly languages = inject(LANGUAGE_SERVICE);\n\n readonly labelPrefix = input<string>(\"label\");\n\n readonly labelCustomizer = input<FormFieldLabelCustomizer>(null);\n\n readonly testId = input<string>(\"\");\n\n readonly data = input<any>({});\n\n readonly fields = input<FormFieldConfig[]>(null);\n\n readonly fieldChanges = new Subject<FormFieldChangeEvent>();\n\n protected readonly language = toSignal(this.events.languageChanged, {\n initialValue: this.languages.currentLanguage\n });\n\n protected readonly enableTranslations = toSignal(this.events.translationsEnabled, {\n initialValue: this.languages.enableTranslations\n });\n\n readonly config = computed(() => {\n return this.fields() || this.builder.resolveFormFields(this.data()?.constructor, null, {\n labelPrefix: this.labelPrefix(),\n labelCustomizer: this.labelCustomizer(),\n testId: this.testId(),\n });\n });\n\n readonly group = computed(() => {\n this.config();\n return new FormGroup({});\n });\n\n protected readonly status$ = rxResource({\n request: () => this.group(),\n loader: p => p.request.statusChanges,\n defaultValue: \"PENDING\"\n });\n\n readonly status = computed(() => this.status$.value());\n\n readonly onSubmit = output<IDynamicForm>();\n\n readonly options: FormlyFormOptions = {\n fieldChanges: this.fieldChanges,\n formState: {\n injector: inject(Injector)\n }\n };\n\n constructor() {\n effect(() => {\n this.language();\n this.enableTranslations();\n this.config().forEach(field => {\n if (!field.options) return;\n this.options.detectChanges(field);\n });\n });\n }\n\n submit() {\n // TODO: Templ disable submit\n // this.onSubmit.emit(this);\n }\n\n reset() {\n this.options?.resetModel?.();\n }\n}\n","@if (config() && group()) {\n <form [formGroup]=\"group()\" (ngSubmit)=\"submit()\" autocomplete=\"off\" role=\"presentation\">\n <input type=\"submit\" [hidden]=\"true\" />\n <formly-form [model]=\"data()\"\n [fields]=\"config()\"\n [form]=\"group()\"\n [options]=\"options\"></formly-form>\n <ng-content></ng-content>\n </form>\n}\n","import {Component, signal, ViewEncapsulation} from \"@angular/core\";\nimport {FormArray} from \"@angular/forms\";\nimport {FieldArrayType} from \"@ngx-formly/core\";\nimport {FormFieldConfig} from \"../../common-types\";\n\n@Component({\n standalone: false,\n selector: \"dynamic-form-array\",\n templateUrl: \"./dynamic-form-array.component.html\",\n encapsulation: ViewEncapsulation.None\n})\nexport class DynamicFormArrayComponent extends FieldArrayType<FormFieldConfig> {\n\n readonly currentTab = signal(0);\n\n clear(): void {\n const control = this.formControl as FormArray;\n while (control.length > 0) {\n this.remove(0);\n }\n }\n}\n","<label class=\"field-label\" *ngIf=\"props.label\">\n {{ props.label | translate }}\n <p class=\"field-description\" *ngIf=\"props.description\">{{ props.description | translate }}</p>\n</label>\n<div class=\"field-container\">\n @if (props.useTabs) {\n <ul class=\"form-array-tabs\">\n @for (field of field.fieldGroup; track field.key; let ix = $index) {\n <li>\n <a class=\"btn\" [ngClass]=\"[currentTab() === ix ? 'btn-primary' : 'btn-secondary']\"\n (click)=\"currentTab.set(ix)\">\n {{ (field.formControl.value | getValue : props.tabsLabel) || ix + 1 }}\n </a>\n </li>\n }\n </ul>\n }\n @for (field of field.fieldGroup; track field.key; let ix = $index) {\n @if (!props.useTabs || ix === currentTab()) {\n <div class=\"form-array-item\">\n <div class=\"form-array-buttons\">\n @if (props.removeItem) {\n <button type=\"button\" class=\"btn btn-sm btn-primary\" (click)=\"remove(ix)\">\n <i icon=\"trash-outline\"></i>\n </button>\n }\n @if (props.insertItem) {\n <button type=\"button\" class=\"btn btn-sm btn-primary\" (click)=\"add(ix)\">\n <i icon=\"plus-outline\"></i>\n </button>\n }\n </div>\n <formly-field [field]=\"field\"></formly-field>\n </div>\n }\n }\n <div class=\"form-array-buttons\">\n @if (props.clearItems) {\n <button type=\"button\" class=\"btn btn-sm btn-primary\" (click)=\"clear()\">\n <i icon=\"trash-outline\"></i>\n {{ 'button.clear-items' | translate }}\n </button>\n }\n @if (props.addItem) {\n <button type=\"button\" class=\"btn btn-sm btn-primary\" (click)=\"add()\">\n <i icon=\"plus-outline\"></i>\n {{ 'button.insert-item' | translate }}\n </button>\n }\n </div>\n</div>\n","import {ChangeDetectionStrategy, Component, ViewEncapsulation} from \"@angular/core\";\nimport {FieldType} from \"@ngx-formly/core\";\nimport {FormFieldType} from \"../../common-types\";\n\n@Component({\n standalone: false,\n selector: \"dynamic-form-chips\",\n templateUrl: \"./dynamic-form-chips.component.html\",\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DynamicFormChipsComponent extends FieldType<FormFieldType> {\n\n}\n","<chips [formControl]=\"formControl\"\n [type]=\"props.type\"\n [step]=\"props.step\"\n [minLength]=\"props.minLength\"\n [maxLength]=\"props.maxLength\"\n [min]=\"props.min\"\n [max]=\"props.max\"\n [multiple]=\"props.multiple\"\n [formlyAttributes]=\"field\">\n</chips>\n","import {Component, ViewEncapsulation} from \"@angular/core\";\nimport {FieldWrapper} from \"@ngx-formly/core\";\n\n@Component({\n standalone: false,\n selector: \"dynamic-form-field\",\n templateUrl: \"./dynamic-form-field.component.html\",\n encapsulation: ViewEncapsulation.None\n})\nexport class DynamicFormFieldComponent extends FieldWrapper {\n\n}\n","<label class=\"field-label\" [for]=\"id\" *ngIf=\"props.label\">\n {{ props.label | translate }}\n <p class=\"field-description\" *ngIf=\"props.description\">{{ props.description | translate }}</p>\n <span class=\"field-required\" *ngIf=\"props.required && props.hideRequiredMarker !== true\" aria-hidden=\"true\">*</span>\n</label>\n<div class=\"field-container\">\n <ng-container #fieldComponent></ng-container>\n <div *ngIf=\"showError\" class=\"field-errors invalid-feedback\">\n <formly-validation-message\n id=\"{{ id }}-formly-validation-error\"\n [field]=\"field\"\n role=\"alert\"\n ></formly-validation-message>\n </div>\n</div>\n","import {Component, inject, ViewEncapsulation} from \"@angular/core\";\nimport {FieldWrapper} from \"@ngx-formly/core\";\nimport {DynamicFormGroupComponent} from \"../dynamic-form-group/dynamic-form-group.component\";\n\n@Component({\n standalone: false,\n selector: \"dynamic-form-fieldset\",\n templateUrl: \"./dynamic-form-fieldset.component.html\",\n encapsulation: ViewEncapsulation.None\n})\nexport class DynamicFormFieldsetComponent extends FieldWrapper {\n\n ngOnInit(): void {\n // console.log(this.field.id, this.field.props?.label, this.options);\n // console.log(this.field.parent);\n }\n}\n","<legend class=\"field-legend\" *ngIf=\"props.label\">\n {{ props.label | translate }}\n</legend>\n<div class=\"field-container\">\n <ng-container #fieldComponent></ng-container>\n</div>\n","import {Component, ViewEncapsulation} from \"@angular/core\";\nimport {FieldWrapper} from \"@ngx-formly/core\";\n\n@Component({\n standalone: false,\n selector: \"dynamic-form-group\",\n templateUrl: \"./dynamic-form-group.component.html\",\n encapsulation: ViewEncapsulation.None\n})\nexport class DynamicFormGroupComponent extends FieldWrapper {\n\n}\n","<label class=\"field-label\" *ngIf=\"props.label\">\n {{ props.label | translate }}\n <p class=\"field-description\" *ngIf=\"props.description\">{{ props.description | translate }}</p>\n</label>\n<ng-container #fieldComponent></ng-container>\n","import {ChangeDetectionStrategy, Component, ViewEncapsulation} from \"@angular/core\";\nimport {FieldType} from \"@ngx-formly/core\";\nimport {FormFieldType} from \"../../common-types\";\n\n@Component({\n standalone: false,\n selector: \"dynamic-form-upload\",\n templateUrl: \"./dynamic-form-upload.component.html\",\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DynamicFormUploadComponent extends FieldType<FormFieldType> {\n\n}\n","<upload [formControl]=\"formControl\"\n [multiple]=\"props.multiple\"\n [inline]=\"props.inline\"\n [accept]=\"props.accept\"\n [baseUrl]=\"props.url\"\n [makeUpload]=\"props.createUploadData\"\n [formlyAttributes]=\"field\">\n</upload>\n","import {AsyncSubmitDirective} from \"./directives/async-submit.directive\";\n\nimport {DynamicFormComponent} from \"./components/dynamic-form/dynamic-form.component\";\nimport {DynamicFormArrayComponent} from \"./components/dynamic-form-array/dynamic-form-array.component\";\nimport {DynamicFormChipsComponent} from \"./components/dynamic-form-chips/dynamic-form-chips.component\";\nimport {DynamicFormFieldComponent} from \"./components/dynamic-form-field/dynamic-form-field.component\";\nimport {DynamicFormFieldsetComponent} from \"./components/dynamic-form-fieldset/dynamic-form-fieldset.component\";\nimport {DynamicFormGroupComponent} from \"./components/dynamic-form-group/dynamic-form-group.component\";\nimport {DynamicFormUploadComponent} from \"./components/dynamic-form-upload/dynamic-form-upload.component\";\n\n// --- Components ---\nexport const components = [\n DynamicFormComponent,\n DynamicFormArrayComponent,\n DynamicFormChipsComponent,\n DynamicFormFieldComponent,\n DynamicFormFieldsetComponent,\n DynamicFormGroupComponent,\n DynamicFormUploadComponent\n];\n\n// --- Directives ---\nexport const directives = [\n AsyncSubmitDirective,\n];\n\n// --- Pipes ---\nexport const pipes = [];\n","import {EnvironmentProviders, makeEnvironmentProviders, ModuleWithProviders, NgModule, Provider} from \"@angular/core\";\nimport {CommonModule} from \"@angular/common\";\nimport {FormsModule, ReactiveFormsModule} from \"@angular/forms\";\nimport {FormlyModule} from \"@ngx-formly/core\";\nimport {NgxUtilsModule} from \"@stemy/ngx-utils\";\n\nimport {components, directives, pipes} from \"./ngx-dynamic-form.imports\";\n\nimport {IDynamicFormModuleConfig} from \"./common-types\";\n\nimport {DynamicFormService} from \"./services/dynamic-form.service\";\nimport {DynamicFormBuilderService} from \"./services/dynamic-form-builder.service\";\nimport {DynamicFormSchemaService} from \"./services/dynamic-form-schema.service\";\n\nimport {DynamicFormArrayComponent} from \"./components/dynamic-form-array/dynamic-form-array.component\";\nimport {DynamicFormChipsComponent} from \"./components/dynamic-form-chips/dynamic-form-chips.component\";\nimport {DynamicFormGroupComponent} from \"./components/dynamic-form-group/dynamic-form-group.component\";\nimport {DynamicFormFieldComponent} from \"./components/dynamic-form-field/dynamic-form-field.component\";\nimport {DynamicFormFieldsetComponent} from \"./components/dynamic-form-fieldset/dynamic-form-fieldset.component\";\nimport {DynamicFormUploadComponent} from \"./components/dynamic-form-upload/dynamic-form-upload.component\";\n\n@NgModule({\n declarations: [\n ...components,\n ...directives,\n ...pipes\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NgxUtilsModule,\n FormlyModule.forChild()\n ],\n exports: [\n ...components,\n ...directives,\n ...pipes,\n FormsModule,\n ReactiveFormsModule,\n NgxUtilsModule,\n FormlyModule\n ],\n providers: [\n ...pipes\n ]\n})\nexport class NgxDynamicFormModule {\n\n private static getProviders(config?: IDynamicFormModuleConfig): Provider[] {\n const {providers} = FormlyModule.forRoot({\n types: [\n {name: \"array\", component: DynamicFormArrayComponent},\n {name: \"chips\", component: DynamicFormChipsComponent},\n {name: \"upload\", component: DynamicFormUploadComponent, wrappers: [\"form-field\"]},\n {name: \"file\", extends: \"upload\"},\n {name: \"translation\", extends: \"array\"},\n ...(config?.types || [])\n ],\n wrappers: [\n { name: \"form-field\", component: DynamicFormFieldComponent },\n { name: \"form-fieldset\", component: DynamicFormFieldsetComponent },\n { name: \"form-group\", component: DynamicFormGroupComponent },\n ...(config?.wrappers || [])\n ],\n extras: {\n renderFormlyFieldElement: false,\n ...(config?.extras || {})\n }\n });\n\n return [\n ...(providers as Provider[]),\n DynamicFormService,\n DynamicFormBuilderService,\n DynamicFormSchemaService\n ];\n }\n\n static forRoot(config?: IDynamicFormModuleConfig): ModuleWithProviders<NgxDynamicFormModule> {\n return {\n ngModule: NgxDynamicFormModule,\n providers: NgxDynamicFormModule.getProviders(config)\n }\n }\n\n static provideForms(config?: IDynamicFormModuleConfig): EnvironmentProviders {\n return makeEnvironmentProviders(NgxDynamicFormModule.getProviders(config));\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["FormGroup","FormArray","i1","i2.DynamicFormBuilderService","i2","i3"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stemy-ngx-dynamic-form.mjs","sources":["../../src/ngx-dynamic-form/common-types.ts","../../src/ngx-dynamic-form/utils/customizer.ts","../../src/ngx-dynamic-form/utils/decorators.ts","../../src/ngx-dynamic-form/utils/validation.ts","../../src/ngx-dynamic-form/utils/misc.ts","../../src/ngx-dynamic-form/utils/internal.ts","../../src/ngx-dynamic-form/services/dynamic-form-builder.service.ts","../../src/ngx-dynamic-form/services/dynamic-form-schema.service.ts","../../src/ngx-dynamic-form/services/dynamic-form.service.ts","../../src/ngx-dynamic-form/directives/async-submit.directive.ts","../../src/ngx-dynamic-form/components/base/dynamic-field-type.ts","../../src/ngx-dynamic-form/components/dynamic-form/dynamic-form.component.ts","../../src/ngx-dynamic-form/components/dynamic-form/dynamic-form.component.html","../../src/ngx-dynamic-form/components/dynamic-form-array/dynamic-form-array.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-array/dynamic-form-array.component.html","../../src/ngx-dynamic-form/components/dynamic-form-chips/dynamic-form-chips.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-chips/dynamic-form-chips.component.html","../../src/ngx-dynamic-form/components/dynamic-form-field/dynamic-form-field.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-field/dynamic-form-field.component.html","../../src/ngx-dynamic-form/components/dynamic-form-fieldset/dynamic-form-fieldset.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-fieldset/dynamic-form-fieldset.component.html","../../src/ngx-dynamic-form/components/dynamic-form-group/dynamic-form-group.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-group/dynamic-form-group.component.html","../../src/ngx-dynamic-form/components/dynamic-form-upload/dynamic-form-upload.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-upload/dynamic-form-upload.component.html","../../src/ngx-dynamic-form/ngx-dynamic-form.imports.ts","../../src/ngx-dynamic-form/ngx-dynamic-form.module.ts","../../src/stemy-ngx-dynamic-form.ts"],"sourcesContent":["import {Injector, OutputRef, Signal} from \"@angular/core\";\nimport {AbstractControl, FormControl, FormGroup} from \"@angular/forms\";\nimport {Observable} from \"rxjs\";\nimport {ConfigOption, FormlyFieldConfig, FormlyFieldProps} from \"@ngx-formly/core\";\nimport {FormlySelectOption} from \"@ngx-formly/core/select\";\nimport {\n IAsyncMessage,\n IOpenApiSchema,\n IOpenApiSchemaProperty,\n IRequestOptions,\n MaybeArray,\n MaybePromise\n} from \"@stemy/ngx-utils\";\n\n// --- Basic frm constants ---\nexport const FORM_ROOT_KEY = \"__root\";\n\n// --- Basic form types ---\n\nexport type DynamicFormState = \"VALID\" | \"INVALID\" | \"PENDING\" | \"DISABLED\" | \"LOADING\";\nexport type DynamicFormUpdateOn = \"change\" | \"blur\" | \"submit\";\nexport type UploadData = Record<string, any> | ArrayBuffer | FormData;\n\n// --- Basic form field interfaces ---\n\nexport type FormFieldKey = string | number | (string | number)[];\n\nexport type FormFieldLabelCustomizer = (key: string, label: string, parent: FormFieldConfig, labelPrefix: string) => string;\n\nexport interface FormBuilderOptions {\n labelPrefix?: string;\n labelCustomizer?: FormFieldLabelCustomizer;\n testId?: string;\n}\n\nexport interface FormFieldProps extends FormlyFieldProps {\n // --- Input props ---\n autocomplete?: string;\n suffix?: string;\n // --- Checkbox props ---\n formCheck?: string;\n indeterminate?: boolean;\n // --- Select props ---\n multiple?: boolean;\n allowEmpty?: boolean;\n groupBy?: string;\n // --- Array props ---\n useTabs?: boolean;\n tabsLabel?: string;\n addItem?: boolean;\n insertItem?: boolean;\n cloneItem?: boolean;\n moveItem?: boolean;\n removeItem?: boolean;\n clearItems?: boolean;\n // --- Upload props ---\n inline?: boolean;\n accept?: string | string[];\n url?: string;\n maxSize?: number;\n uploadOptions?: IRequestOptions;\n createUploadData?: (file: File) => UploadData | Promise<UploadData>;\n // --- Old upload props\n multi?: boolean;\n asFile?: boolean;\n uploadUrl?: string;\n}\n\nexport type FormFieldSerializer = (field: FormFieldConfig, injector: Injector) => MaybePromise<any>;\n\nexport declare type FormHookFn = (field: FormFieldConfig) => void;\n\nexport interface FormHookConfig {\n onInit?: FormHookFn | ((field: FormFieldConfig) => Observable<any>);\n onChanges?: FormHookFn;\n afterContentInit?: FormHookFn;\n afterViewInit?: FormHookFn;\n onDestroy?: FormHookFn;\n}\n\nexport type FormFieldExpression<T = any> = string | ((field: FormFieldConfig) => T) | Observable<T>;\nexport type FormFieldExpressions = {\n [property: string]: FormFieldExpression;\n} & {\n className?: FormFieldExpression<string>;\n hide?: FormFieldExpression<boolean>;\n \"props.disabled\"?: FormFieldExpression<boolean>;\n \"props.required\"?: FormFieldExpression<boolean>;\n};\n\nexport interface FormFieldConfig<T = FormFieldProps> extends FormlyFieldConfig<T> {\n serializer?: FormFieldSerializer;\n serialize?: boolean;\n fieldSet?: string;\n parent?: FormFieldConfig;\n fieldGroup?: FormFieldConfig[];\n fieldArray?: FormFieldConfig | ((field: FormFieldConfig) => FormFieldConfig);\n hooks: FormHookConfig;\n expressions: FormFieldExpressions;\n readonly additional?: Readonly<{[key: string]: any}>;\n readonly path?: string;\n readonly testId?: string;\n}\n\nexport interface FormFieldType<T = FormFieldProps> extends FormFieldConfig<T> {\n formControl: FormControl;\n props: NonNullable<T>;\n}\n\nexport interface FormFieldChangeEvent {\n field: FormFieldConfig;\n type: string;\n value: any;\n [meta: string]: any;\n}\n\nexport interface FormSerializeResult {\n [key: string]: any;\n}\n\nexport interface FormSelectOption extends FormlySelectOption {\n className?: string;\n classes?: string[] | string;\n id?: any;\n}\n\nexport type FormSelectOptions = FormSelectOption[] | Observable<FormSelectOption[]>;\n\nexport interface IDynamicForm {\n\n readonly fieldChanges: Observable<FormFieldChangeEvent>;\n readonly config: Signal<FormFieldConfig[]>;\n readonly group: Signal<FormGroup>;\n readonly status: Signal<DynamicFormState>;\n readonly onSubmit: OutputRef<IDynamicForm>;\n\n reset(): void;\n}\n\n// --- Validation types ---\n\ntype FormFieldValidatorFn<T> = ((control: AbstractControl, field?: FormlyFieldConfig) => T) & {\n validatorName?: string\n};\n\nexport type ValidationMessageFn = (error: any, field: FormFieldConfig) => string | Observable<string>;\n\ninterface FormFieldValidatorExpression<T> {\n expression: FormFieldValidatorFn<T>;\n message: ValidationMessageFn;\n}\n\ntype FormFieldValidation<T, R> = {\n validation?: (string | T)[];\n} & {\n [key: string]: FormFieldValidatorFn<R> | FormFieldValidatorExpression<R>;\n}\n\nexport type ValidatorFn = FormFieldValidatorFn<boolean>;\n\nexport type ValidatorExpression = FormFieldValidatorExpression<boolean>;\n\nexport type Validators = FormFieldValidation<ValidatorFn, boolean>;\n\nexport type AsyncBoolean = Promise<boolean> | Observable<boolean>;\n\nexport type AsyncValidatorFn = FormFieldValidatorFn<AsyncBoolean>;\n\nexport type AsyncValidatorExpression = FormFieldValidatorExpression<AsyncBoolean>;\n\nexport type AsyncValidators = FormFieldValidation<AsyncValidatorFn, AsyncBoolean>;\n\nexport interface AllValidationErrors {\n control: AbstractControl;\n path: string;\n errorKey: string;\n errorValue: any;\n}\n\n// --- Form field data types ---\n\nexport type FormFieldCustom = Pick<FormFieldConfig, \"wrappers\" | \"hooks\" | \"fieldGroup\" | \"fieldArray\">;\n\nexport type FormFieldData = Pick<FormFieldProps, \"label\" | \"readonly\" | \"hidden\" | \"disabled\">\n & {\n validators?: Validators | ValidatorFn[];\n serializer?: FormFieldSerializer;\n fieldSet?: string;\n classes?: string[] | string;\n};\n\nexport type FormInputData = FormFieldData\n & Pick<FormFieldProps, \"type\" | \"pattern\" | \"placeholder\" | \"step\" | \"min\" | \"max\" | \"minLength\" | \"maxLength\" | \"autocomplete\" | \"suffix\" | \"indeterminate\" | \"cols\" | \"rows\">;\n\nexport type FormSelectData = FormFieldData\n & Pick<FormFieldProps, \"multiple\" | \"type\" | \"allowEmpty\" | \"groupBy\"> & {\n options?: (field: FormFieldConfig) => FormSelectOptions | Promise<FormSelectOption[]>;\n};\n\nexport type FormUploadData = FormFieldData\n & Pick<FormFieldProps, \"inline\" | \"multiple\" | \"accept\" | \"url\" | \"maxSize\" | \"uploadOptions\" | \"createUploadData\" | \"multi\" | \"asFile\" | \"uploadUrl\">;\n\nexport type FormGroupData = FormFieldData;\n\nexport type FormArrayData = FormFieldData\n & Pick<FormFieldProps, \"useTabs\" | \"tabsLabel\" | \"addItem\" | \"insertItem\" | \"cloneItem\" | \"moveItem\" | \"removeItem\" | \"clearItems\">;\n\n// --- JSON schema interfaces ---\n\nexport type FormFieldCustomizer = (\n field: FormFieldConfig, options: FormBuilderOptions, injector: Injector,\n property: IOpenApiSchemaProperty, schema: IOpenApiSchema\n) => MaybePromise<MaybeArray<FormFieldConfig>>;\n\nexport interface ConfigForSchemaOptions extends FormBuilderOptions {\n fieldCustomizer?: FormFieldCustomizer;\n}\n\nexport type CustomizerOrSchemaOptions = FormFieldCustomizer | ConfigForSchemaOptions;\n\nexport declare type AsyncSubmitMethod = (form: IDynamicForm, context?: any) => Promise<IAsyncMessage>;\n\nexport interface IDynamicFormModuleConfig {\n options?: ConfigOption[];\n}\n","import {\n cachedFactory,\n CachedProvider,\n IOpenApiSchema,\n IOpenApiSchemaProperty,\n MaybeArray,\n MaybePromise\n} from \"@stemy/ngx-utils\";\n\nimport {FormBuilderOptions, FormFieldConfig, FormFieldCustomizer} from \"../common-types\";\n\nexport interface IFormFieldCustomizer {\n acceptField(\n field: FormFieldConfig,\n property: IOpenApiSchemaProperty,\n schema: IOpenApiSchema\n ): boolean;\n customizeField(\n field: FormFieldConfig,\n options: FormBuilderOptions,\n property: IOpenApiSchemaProperty,\n schema: IOpenApiSchema\n ): MaybePromise<MaybeArray<FormFieldConfig>>;\n}\n\nexport function customizeFormField(...providers: CachedProvider<IFormFieldCustomizer>[]): FormFieldCustomizer {\n const factory = cachedFactory(providers);\n return async (field, options, injector, property, schema) => {\n const customizers = factory(injector);\n const fields = [field];\n for (const customizer of customizers) {\n const index = fields.findIndex(m => customizer.acceptField(m, property, schema));\n if (index >= 0) {\n const custom = await customizer.customizeField(\n fields[index], options, property, schema\n );\n const result = Array.isArray(custom) ? custom : [custom];\n fields.splice(index, 1, ...result);\n }\n }\n return fields;\n }\n}\n","import {ObjectUtils, ReflectUtils} from \"@stemy/ngx-utils\";\nimport {\n FormArrayData,\n FormFieldSerializer,\n FormGroupData,\n FormInputData,\n FormSelectData,\n FormUploadData\n} from \"../common-types\";\nimport {FormFieldBuilder} from \"../services/dynamic-form-builder.service\";\nimport {Type} from \"@angular/core\";\n\nfunction defineFormControl(target: any, propertyKey: string, cb: FormFieldBuilder): void {\n const fields: Set<string> = ReflectUtils.getMetadata(\"dynamicFormFields\", target) || new Set();\n const existing: FormFieldBuilder = ReflectUtils.getMetadata(\"dynamicFormField\", target, propertyKey);\n const builder: FormFieldBuilder = !ObjectUtils.isFunction(existing) ? cb : ((fb, opts, path) => {\n const data = existing(fb, opts, path);\n return ObjectUtils.assign(data || {}, cb(fb, opts, path) || {});\n });\n fields.add(propertyKey);\n ReflectUtils.defineMetadata(\"dynamicFormField\", builder, target, propertyKey);\n ReflectUtils.defineMetadata(\"dynamicFormFields\", fields, target);\n}\n\nexport function FormSerializable(serializer?: FormFieldSerializer): PropertyDecorator {\n return (target: any, key: string): void => {\n defineFormControl(target, key, () => ({\n key,\n serializer,\n serialize: true\n }));\n };\n}\n\nexport function FormInput(data?: FormInputData): PropertyDecorator {\n data = data || {};\n return (target: any, key: string): void => {\n const meta = ReflectUtils.getOwnMetadata(\"design:type\", target, key);\n const type = meta ? meta.name : \"\";\n let inputType = key.indexOf(\"password\") < 0 ? \"text\" : \"password\";\n switch (type) {\n case \"Number\":\n inputType = \"number\";\n break;\n case \"Boolean\":\n inputType = \"checkbox\";\n break;\n }\n data.type = data.type || inputType;\n defineFormControl(\n target, key,\n (fb, path, options) =>\n fb.createFormInput(key, data, path, options)\n );\n };\n}\n\nexport function FormSelect(data?: FormSelectData): PropertyDecorator {\n data = data || {};\n return (target: any, key: string): void => {\n defineFormControl(\n target, key,\n (fb, path, options) =>\n fb.createFormSelect(key, data, path, options)\n );\n };\n}\n\nexport function FormUpload(data?: FormUploadData): PropertyDecorator {\n data = data || {};\n return (target: any, key: string): void => {\n defineFormControl(\n target, key,\n (fb, path, options) =>\n fb.createFormUpload(key, data, path, options)\n );\n };\n}\n\nexport function FormFile(data?: FormUploadData): PropertyDecorator {\n console.warn(`@FormFile decorator is deprecated, use @FormUpload instead`);\n return FormUpload(data);\n}\n\nexport function FormGroup(data?: FormGroupData): PropertyDecorator {\n data = data || {};\n return (target: any, key: string): void => {\n defineFormControl(\n target, key,\n (fb, path, options) => {\n const targetType = ReflectUtils.getOwnMetadata(\"design:type\", target, key);\n return fb.resolveFormGroup(key, targetType, data, path, options);\n }\n );\n };\n}\n\nexport function FormArray(itemType: string | FormInputData | Type<any>, data?: FormArrayData): PropertyDecorator {\n data = data || {};\n return (target: any, key: string): void => {\n defineFormControl(\n target, key,\n (fb, path, options) => {\n return fb.resolveFormArray(key, itemType, data, path, options);\n }\n );\n };\n}\n\nexport function FormModel(data?: FormGroupData): PropertyDecorator {\n console.warn(`@FormModel decorator is deprecated, use @FormGroup instead`);\n return FormGroup(data);\n}\n","import {Injector} from \"@angular/core\";\nimport {LANGUAGE_SERVICE, ObjectUtils} from \"@stemy/ngx-utils\";\nimport {ValidationMessageFn, ValidatorFn} from \"../common-types\";\n\nexport function validationMessage(injector: Injector, key: string, labelPrefix?: string): ValidationMessageFn {\n const language = injector.get(LANGUAGE_SERVICE);\n return (_, field) => {\n return language.getTranslationSync(labelPrefix ? `${labelPrefix}.error.${key}` : `error.${key}`, field);\n }\n}\n\nexport function withName(fn: ValidatorFn, name: string): ValidatorFn {\n fn.validatorName = name;\n return fn;\n}\n\nfunction validateEach(each: boolean, cb: (value: any) => boolean, name: string): ValidatorFn {\n return withName((control) => {\n const value = control.value;\n return each ? Array.isArray(value) && value.every(cb) : cb(value);\n }, name);\n}\n\nexport function jsonValidation(): ValidatorFn {\n return withName((control) => {\n const value = control.value;\n if (!value) return false;\n try {\n JSON.parse(value);\n return true;\n } catch (e) {\n return false;\n }\n }, \"json\");\n}\n\nexport function requiredValidation(): ValidatorFn {\n return withName((control) =>\n ObjectUtils.isString(control.value) ? control.value.length > 0 : ObjectUtils.isDefined(control.value),\n \"required\"\n )\n}\n\nexport function translationValidation(langs: string[] = [\"de\", \"en\"]): ValidatorFn {\n return withName((control) => {\n const value: any[] = control.value;\n if (!value || value.length == 0) return false;\n return value.findIndex(t => langs.includes(t.lang) && !t.translation) < 0;\n }, \"translation\");\n}\n\nexport function phoneValidation(): ValidatorFn {\n return withName((control) => {\n const value = control.value;\n if (!value) return true;\n const phoneRegexp = /^\\d{10,12}$/;\n return phoneRegexp.test(value);\n }, \"phone\");\n}\n\nexport function emailValidation(): ValidatorFn {\n return withName((control) => {\n const value = control.value;\n if (!value) return true;\n const emailRegexp = /^[\\w-.]+@([\\w-]+\\.)+[\\w-]{2,4}$/g;\n return emailRegexp.test(value);\n }, \"email\");\n}\n\nexport function minLengthValidation(minLength: number, each?: boolean): ValidatorFn {\n return validateEach(each, v => typeof v == \"string\" && v.length >= minLength, \"minLength\");\n}\n\nexport function maxLengthValidation(maxLength: number, each?: boolean): ValidatorFn {\n return validateEach(each, v => typeof v == \"string\" && v.length <= maxLength, \"maxLength\");\n}\n\nexport function minValueValidation(min: number, each?: boolean): ValidatorFn {\n return validateEach(each, v => typeof v == \"number\" && v >= min, \"minValue\");\n}\n\nexport function maxValueValidation(max: number, each?: boolean): ValidatorFn {\n return validateEach(each, v => typeof v == \"number\" && v <= max, \"maxValue\");\n}\n","import {BehaviorSubject, Subject} from \"rxjs\";\nimport {ObjectUtils} from \"@stemy/ngx-utils\";\nimport {FormFieldKey, FormFieldConfig} from \"../common-types\";\n\nexport function replaceSpecialChars(str: string, to: string = \"-\"): string {\n return `${str}`.replace(/[&\\/\\\\#, +()$~%.@'\":*?<>{}]/g, to);\n}\n\nexport function getFieldByPath(field: FormFieldConfig, path: string): FormFieldConfig | null {\n if (field.path === path) {\n return field;\n }\n if (!field.fieldGroup) return null;\n for (const sf of field.fieldGroup) {\n const found = getFieldByPath(sf, path);\n if (found) return found;\n }\n return null;\n}\n\nexport function getFieldsByPredicate(field: FormFieldConfig, cb: (field: FormFieldConfig) => boolean): FormFieldConfig[] {\n if (cb(field)) {\n return [field];\n }\n if (!field.fieldGroup) return [];\n const results: FormFieldConfig[] = [];\n for (const sf of field.fieldGroup) {\n results.push(...getFieldsByPredicate(sf, cb));\n }\n return results;\n}\n\nexport function getFieldsByKey(field: FormFieldConfig, key: FormFieldKey): FormFieldConfig[] {\n return getFieldsByPredicate(field, f => f.key === key);\n}\n\nexport function setFieldHidden(field: FormFieldConfig, hidden: boolean = true): void {\n const hide = field.expressions?.hide;\n if (hide) {\n if (hide instanceof Subject) {\n hide.next(hidden);\n return;\n }\n field.expressions.hide = new BehaviorSubject(hidden);\n return;\n }\n field.hide = hidden;\n}\n\nexport function setFieldDisabled(field: FormFieldConfig, disabled: boolean = true): void {\n field.props = {\n ...(field.props || {}),\n disabled\n };\n}\n\nexport function additionalFieldValues(field: FormFieldConfig, values: {[key: string]: any}): void {\n const additional = field.expressions?.additional;\n if (additional instanceof BehaviorSubject) {\n additional.next(ObjectUtils.assign(additional.value, values || {}));\n return;\n }\n field.expressions.additional = new BehaviorSubject(values || {});\n}\n\nexport const MIN_INPUT_NUM = -999999999;\n\nexport const MAX_INPUT_NUM = 999999999;\n\nexport const EDITOR_FORMATS = [\"php\", \"json\", \"html\", \"css\", \"scss\"];\n","import {Injector} from \"@angular/core\";\r\nimport {IOpenApiSchema, IOpenApiSchemaProperty, MaybeArray, ObjectUtils, ForbiddenZone} from \"@stemy/ngx-utils\";\r\nimport {\r\n AllValidationErrors,\r\n ConfigForSchemaOptions,\r\n CustomizerOrSchemaOptions,\r\n FormBuilderOptions,\r\n FormFieldConfig,\r\n FormFieldCustomizer\r\n} from \"../common-types\";\r\nimport {AbstractControl, FormArray, FormGroup} from \"@angular/forms\";\r\n\r\nexport type ConfigForSchemaWrapMode = \"wrap\" | \"customizer\";\r\n\r\nexport interface ConfigForSchemaWrapOptions extends Required<FormBuilderOptions> {\r\n readonly injector: Injector;\r\n readonly schema: IOpenApiSchema;\r\n customize(field: FormFieldConfig, property: IOpenApiSchemaProperty, schema: IOpenApiSchema): Promise<FormFieldConfig[]>;\r\n}\r\n\r\nclass ConfigForSchemaWrap implements ConfigForSchemaWrapOptions {\r\n\r\n get labelPrefix() {\r\n return this.opts.labelPrefix;\r\n }\r\n\r\n get labelCustomizer() {\r\n return this.opts.labelCustomizer;\r\n }\r\n\r\n get testId() {\r\n return this.opts.testId;\r\n }\r\n\r\n protected fieldCustomizer: FormFieldCustomizer;\r\n\r\n constructor(\r\n protected readonly opts: ConfigForSchemaOptions,\r\n protected readonly mode: ConfigForSchemaWrapMode,\r\n readonly injector: Injector,\r\n readonly schema: IOpenApiSchema\r\n ) {\r\n this.fieldCustomizer = this.mode !== \"wrap\" || !ObjectUtils.isFunction(this.opts.fieldCustomizer)\r\n ? field => field\r\n : this.opts.fieldCustomizer;\r\n }\r\n\r\n async customize(field: FormFieldConfig, property: IOpenApiSchemaProperty, schema: IOpenApiSchema) {\r\n field.defaultValue = `${field.props?.type}`.startsWith(\"date\")\r\n ? convertToDate(property.default) : property.default;\r\n const res = await ForbiddenZone.run(\"customizer\", () =>\r\n this.fieldCustomizer(\r\n field, this.forCustomizer(), this.injector,\r\n property, schema\r\n )\r\n );\r\n return !res ? [field] : handleConfigs(res);\r\n }\r\n\r\n forCustomizer(): FormBuilderOptions {\r\n return new ConfigForSchemaWrap(this.opts, \"customizer\", this.injector, this.schema);\r\n }\r\n\r\n forSchema(schema: IOpenApiSchema): ConfigForSchemaWrapOptions {\r\n return new ConfigForSchemaWrap(this.opts, this.mode, this.injector, schema);\r\n }\r\n}\r\n\r\nexport async function toWrapOptions(customizeOrOptions: CustomizerOrSchemaOptions | ConfigForSchemaWrapOptions,\r\n injector: Injector,\r\n schema: IOpenApiSchema,\r\n errorMsg?: string): Promise<ConfigForSchemaWrapOptions> {\r\n if (errorMsg && ForbiddenZone.isForbidden(\"customizer\")) {\r\n throw new Error(errorMsg);\r\n }\r\n if (customizeOrOptions instanceof ConfigForSchemaWrap) {\r\n return customizeOrOptions;\r\n }\r\n let schemaOptions = customizeOrOptions as ConfigForSchemaOptions;\r\n if (!ObjectUtils.isObject(schemaOptions)) {\r\n schemaOptions = {\r\n fieldCustomizer: customizeOrOptions as FormFieldCustomizer\r\n };\r\n }\r\n return new ConfigForSchemaWrap(schemaOptions, \"wrap\", injector, schema);\r\n}\r\n\r\nexport function convertToDate(value: any): any {\r\n if (ObjectUtils.isNullOrUndefined(value)) return null;\r\n const date = ObjectUtils.isDate(value)\r\n ? value\r\n : new Date(value);\r\n return isNaN(date as any) ? new Date() : date;\r\n}\r\n\r\nexport function handleConfigs(configs: MaybeArray<FormFieldConfig>) {\r\n return Array.isArray(configs) ? configs : [configs];\r\n}\r\n\r\nexport function isStringWithVal(val: any): boolean {\r\n return typeof val == \"string\" && val.length > 0;\r\n}\r\n\r\nexport function findRefs(property: IOpenApiSchemaProperty): string[] {\r\n const refs = Array.isArray(property.allOf)\r\n ? property.allOf.map(o => o.$ref).filter(isStringWithVal)\r\n : [property.items?.$ref, property.$ref].filter(isStringWithVal);\r\n return refs.map(t => t.split(\"/\").pop());\r\n}\r\n\r\nexport function mergeFormFields(formFields: FormFieldConfig[][]): FormFieldConfig[] {\r\n const res: FormFieldConfig[] = [];\r\n for (const formModel of formFields) {\r\n for (const subModel of formModel) {\r\n const index = res.findIndex(t => t.key == subModel.key);\r\n if (index >= 0) {\r\n res[index] = subModel;\r\n continue;\r\n }\r\n res.push(subModel);\r\n }\r\n }\r\n return res;\r\n}\r\n\r\ninterface FormGroupControls {\r\n [key: string]: AbstractControl;\r\n}\r\n\r\nexport function getFormValidationErrors(controls: FormGroupControls, parentPath: string = \"\"): AllValidationErrors[] {\r\n const errors: AllValidationErrors[] = [];\r\n Object.entries(controls).forEach(([name, control], ix) => {\r\n const path = !parentPath ? name : `${parentPath}.${name}`;\r\n if (control instanceof FormGroup) {\r\n getFormValidationErrors(control.controls, path).forEach(error => errors.push(error));\r\n return;\r\n }\r\n if (control instanceof FormArray) {\r\n control.controls.forEach((control: FormGroup, ix) => {\r\n getFormValidationErrors(control.controls, `${path}.${ix}`).forEach(error => errors.push(error));\r\n });\r\n return;\r\n }\r\n Object.entries(control.errors || {}).forEach(([errorKey, errorValue]) => {\r\n errors.push({control, path, errorKey, errorValue});\r\n });\r\n });\r\n return errors;\r\n}\r\n","import {Inject, Injectable, Injector, Type} from \"@angular/core\";\nimport {BehaviorSubject, distinctUntilChanged, startWith, switchMap} from \"rxjs\";\nimport {\n API_SERVICE,\n IApiService,\n ILanguageService,\n LANGUAGE_SERVICE,\n MaybePromise,\n ObjectUtils,\n ReflectUtils\n} from \"@stemy/ngx-utils\";\n\nimport {\n FormArrayData,\n FormBuilderOptions,\n FormFieldConfig,\n FormFieldData,\n FormFieldExpressions,\n FormFieldProps,\n FormGroupData,\n FormHookConfig,\n FormInputData,\n FormSelectData,\n FormSelectOption,\n FormUploadData,\n Validators\n} from \"../common-types\";\nimport {validationMessage} from \"../utils/validation\";\nimport {MAX_INPUT_NUM, MIN_INPUT_NUM} from \"../utils/misc\";\nimport {isStringWithVal} from \"../utils/internal\";\n\nexport type FormFieldBuilder = (fb: DynamicFormBuilderService, parent: FormFieldConfig, options: FormBuilderOptions) => Partial<FormFieldConfig>;\n\n@Injectable()\nexport class DynamicFormBuilderService {\n\n constructor(readonly injector: Injector,\n @Inject(API_SERVICE) readonly api: IApiService,\n @Inject(LANGUAGE_SERVICE) readonly language: ILanguageService) {\n }\n\n resolveFormFields(target: Type<any>, parent: FormFieldConfig, options: FormBuilderOptions): FormFieldConfig[] {\n const prototype = target?.prototype || {};\n const fields: Set<string> = ReflectUtils.getMetadata(\"dynamicFormFields\", target?.prototype || {}) || new Set();\n const result: FormFieldConfig[] = [];\n for (const key of fields) {\n const builder: FormFieldBuilder = ReflectUtils.getMetadata(\"dynamicFormField\", prototype, key);\n const field = builder(this, parent, options) as FormFieldConfig;\n if (field) {\n result.push(field);\n }\n }\n return this.createFieldSets(result, parent, options);\n }\n\n resolveFormGroup(key: string, target: Type<any>, data: FormGroupData, parent: FormFieldConfig = null, options: FormBuilderOptions = {}): FormFieldConfig {\n return this.createFormGroup(key, sp => this.resolveFormFields(\n target, sp, options\n ), data, parent, options);\n }\n\n resolveFormArray(key: string, itemType: string | FormInputData | Type<any>, data: FormArrayData, parent: FormFieldConfig = null, options: FormBuilderOptions = {}): FormFieldConfig {\n return this.createFormArray(key, sp => {\n return typeof itemType === \"function\" ? this.resolveFormFields(\n itemType, sp, options\n ) : this.createFormInput(\"\", typeof itemType === \"string\" ? {type: `${itemType}`} : itemType, null, options);\n }, data, parent, options);\n }\n\n createFieldSets(fields: FormFieldConfig[], parent: FormFieldConfig, options: FormBuilderOptions): FormFieldConfig[] {\n const others: FormFieldConfig[] = [];\n const groups: { [fs: string]: FormFieldConfig[] } = {};\n fields = fields.filter(f => {\n if (Array.isArray(f.fieldGroup) && Array.isArray(f.wrappers) && f.wrappers[0] === \"form-fieldset\") {\n // This field is an already existing set\n groups[f.id] = f.fieldGroup;\n return false;\n }\n return true;\n });\n\n for (const field of fields) {\n const fsName = field.hide ? null : String(field.fieldSet || \"\");\n // If we have a fieldset name defined and have actual fields for it\n // then push the property fields into a group\n if (fsName) {\n const fsId = !parent?.path ? fsName : `${parent.path}.${fsName}`;\n const group = groups[fsId] || [];\n groups[fsId] = group;\n group.push(field);\n continue;\n }\n // Otherwise just push the fields to the others\n others.push(field);\n }\n\n // Create a field-set wrapper for each group and concat the other fields to the end\n return Object.keys(groups).map(id => {\n const key = id.split(\".\").pop();\n const fieldSet: FormFieldConfig = {\n id,\n parent,\n fieldGroup: groups[id],\n wrappers: [\"form-fieldset\"],\n className: `dynamic-form-fieldset dynamic-form-fieldset-${id}`,\n props: {\n label: this.getLabel(key, key, parent, options),\n hidden: false\n },\n hooks: {},\n expressions: {}\n };\n this.setExpressions(fieldSet, options);\n return fieldSet;\n }).concat(others);\n }\n\n createFormInput(key: string, data: FormInputData, parent: FormFieldConfig, options: FormBuilderOptions): FormFieldConfig {\n data = data || {};\n const type = `${data.type || \"text\"}`;\n const autocomplete = data.autocomplete || (type === \"password\" ? \"new-password\" : \"none\");\n return this.createFormField(key, type === \"checkbox\" || type === \"textarea\" ? type : \"input\", data, {\n type,\n autocomplete,\n pattern: ObjectUtils.isString(data.pattern) ? data.pattern : \"\",\n step: data.step,\n cols: data.cols || null,\n rows: data.rows || 10,\n min: isNaN(data.min) ? MIN_INPUT_NUM : data.min,\n max: isNaN(data.max) ? MAX_INPUT_NUM : data.max,\n minLength: isNaN(data.minLength) ? 0 : data.minLength,\n maxLength: isNaN(data.maxLength) ? MAX_INPUT_NUM : data.maxLength,\n placeholder: data.placeholder || \"\",\n indeterminate: data.indeterminate || false,\n suffix: data.suffix || \"\",\n attributes: {\n autocomplete\n },\n }, parent, options);\n }\n\n createFormSelect(key: string, data: FormSelectData, parent: FormFieldConfig, options: FormBuilderOptions): FormFieldConfig {\n data = data || {};\n const type = `${data.type || \"select\"}`;\n const select = this.createFormField(key, type === \"radio\" ? type : \"select\", data, {\n type,\n multiple: data.multiple,\n groupBy: data.groupBy,\n allowEmpty: data.allowEmpty\n }, parent, options);\n select.hooks = Object.assign(select.hooks, {\n onInit: field => {\n const options = data.options?.(field) || [];\n const control = field.formControl.root;\n field.props.options = options instanceof Promise ? control.valueChanges.pipe(\n startWith(control.value),\n distinctUntilChanged(),\n switchMap(async () => {\n const results: FormSelectOption[] = await data.options(field) as any;\n return this.fixSelectOptions(field, results);\n })\n ) : options;\n }\n } as FormHookConfig);\n return select;\n }\n\n createFormUpload(key: string, data: FormUploadData, parent: FormFieldConfig, options: FormBuilderOptions): FormFieldConfig {\n data = data || {};\n\n if (data.asFile) {\n data.inline = true;\n console.warn(`File upload property \"asFile\" is deprecated. Use \"inline\" instead.`);\n }\n\n if (data.multi) {\n data.multiple = true;\n console.warn(`File upload property \"multi\" is deprecated. Use \"multiple\" instead.`);\n }\n\n return this.createFormField(key, \"upload\", data, {\n inline: data.inline === true,\n multiple: data.multiple === true,\n accept: data.accept || [\".png\", \".jpg\"],\n url: data.url?.startsWith(\"http\") ? data.url : this.api.url(data.url || \"assets\"),\n maxSize: isNaN(data.maxSize) ? MAX_INPUT_NUM : data.maxSize,\n uploadOptions: data.uploadOptions || {},\n createUploadData: data.createUploadData\n }, parent, options);\n }\n\n createFormGroup(key: string, fields: (parent: FormFieldConfig) => FormFieldConfig[], data: FormGroupData, parent: FormFieldConfig, options: FormBuilderOptions): FormFieldConfig\n createFormGroup(key: string, fields: (parent: FormFieldConfig) => Promise<FormFieldConfig[]>, data: FormGroupData, parent: FormFieldConfig, options: FormBuilderOptions): Promise<FormFieldConfig>\n createFormGroup(key: string, fields: (parent: FormFieldConfig) => any, data: FormGroupData, parent: FormFieldConfig, options: FormBuilderOptions): MaybePromise<FormFieldConfig> {\n data = data || {};\n const group = this.createFormField(key, undefined, data, {}, parent, options);\n group.wrappers = [\"form-group\"];\n const result = fields(group);\n const handleGroup = (fieldGroup: FormFieldConfig[]) => {\n group.fieldGroup = fieldGroup;\n return group;\n };\n return result instanceof Promise\n ? result.then(handleGroup)\n : handleGroup(result);\n }\n\n createFormArray(key: string, fields: (parent: FormFieldConfig) => FormFieldConfig | FormFieldConfig[], data: FormArrayData, parent: FormFieldConfig, options: FormBuilderOptions): FormFieldConfig\n createFormArray(key: string, fields: (parent: FormFieldConfig) => Promise<FormFieldConfig | FormFieldConfig[]>, data: FormArrayData, parent: FormFieldConfig, options: FormBuilderOptions): Promise<FormFieldConfig>\n createFormArray(key: string, fields: (parent: FormFieldConfig) => any, data: FormArrayData, parent: FormFieldConfig, options: FormBuilderOptions): MaybePromise<FormFieldConfig> {\n data = data || {};\n const array = this.createFormField(key, \"array\", data, {\n // initialCount: data.initialCount || 0,\n // sortable: data.sortable || false,\n useTabs: data.useTabs === true,\n tabsLabel: `${data.tabsLabel || \"label\"}`,\n addItem: data.addItem !== false,\n insertItem: data.insertItem !== false,\n cloneItem: data.cloneItem !== false,\n moveItem: data.moveItem !== false,\n removeItem: data.removeItem !== false,\n clearItems: data.clearItems !== false\n }, parent, options);\n const result = fields(array);\n const handleItems = (items: FormFieldConfig | FormFieldConfig[]) => {\n if (Array.isArray(items)) {\n array.fieldArray = {\n wrappers: [\"form-group\"],\n fieldGroup: items,\n hooks: {},\n expressions: {}\n };\n return array;\n }\n const props = items.props || {};\n if (props.type === \"text\" || props.type === \"number\") {\n array.type = \"chips\";\n array.wrappers = [\"form-field\"];\n array.props = {\n ...props,\n ...array.props,\n multiple: true\n };\n return array;\n }\n array.fieldArray = {\n ...items,\n props: {\n ...items.props,\n label: \"\"\n }\n };\n return array;\n };\n return result instanceof Promise\n ? result.then(handleItems)\n : handleItems(result);\n }\n\n async fixSelectOptions(field: FormFieldConfig, options: FormSelectOption[]): Promise<FormSelectOption[]> {\n if (!options) return [];\n for (const option of options) {\n const classes = Array.isArray(option.classes) ? option.classes : [`${option.classes}`];\n option.className = classes.filter(isStringWithVal).join(\" \");\n option.label = await this.language.getTranslation(option.label);\n option.value = option.value ?? option.id;\n option.id = option.id ?? option.value;\n }\n const control = field.formControl;\n if (field.props.multiple || options.length === 0 || options.findIndex(o => o.value === control.value) >= 0) return options;\n control.setValue(options[0].value);\n return options;\n }\n\n protected getLabel(key: string, label: string, parent: FormFieldConfig, options: FormBuilderOptions): string {\n const labelPrefix = !ObjectUtils.isString(options.labelPrefix) ? `` : options.labelPrefix;\n const pathPrefix = `${parent?.props?.label || labelPrefix}`;\n const labelItems = ObjectUtils.isString(label)\n ? (!label ? [] : [labelPrefix, label])\n : [pathPrefix, `${key || \"\"}`]\n return labelItems.filter(l => l.length > 0).join(\".\");\n }\n\n protected createFormField(key: string, type: string, data: FormFieldData, props: FormFieldProps, parent: FormFieldConfig, options: FormBuilderOptions): FormFieldConfig {\n const validators = Array.isArray(data.validators)\n ? data.validators.reduce((res, validator, ix) => {\n res[validator.validatorName || `validator_${ix}`] = validator;\n return res;\n }, {} as Validators)\n : data.validators || {};\n const hide = new BehaviorSubject(data.hidden === true);\n const additional = new BehaviorSubject({});\n const field: FormFieldConfig = {\n key,\n type,\n validators,\n parent,\n fieldSet: String(data.fieldSet || \"\"),\n resetOnHide: false,\n validation: {\n messages: Object.keys(validators).reduce((res, key) => {\n res[key] = validationMessage(this.injector, key, options.labelPrefix);\n return res;\n }, {})\n },\n props: {\n ...props,\n disabled: data.disabled === true,\n formCheck: \"nolabel\",\n required: !!validators.required,\n label: options.labelCustomizer?.(key, data.label, parent, options.labelPrefix)\n ?? this.getLabel(key, data.label, parent, options),\n },\n modelOptions: {\n updateOn: \"change\"\n },\n fieldGroupClassName: \"field-container\",\n hooks: {},\n expressions: {\n hide,\n additional,\n className: (target: FormFieldConfig) => {\n return target.hide ? `` : [`dynamic-form-field`, `dynamic-form-field-${target.key}`, `dynamic-form-${target.type || \"group\"}`].concat(\n Array.isArray(data.classes) ? data.classes : [data.classes || \"\"]\n ).filter(c => c?.length > 0).join(\" \");\n }\n }\n };\n this.setExpressions(field, options);\n return field;\n }\n\n protected setExpressions(field: FormFieldConfig, options: FormBuilderOptions): void {\n const expressions: FormFieldExpressions = {\n path: target => {\n const tp = target.parent;\n const key = !target.key ? `` : `.${target.key}`;\n return !tp?.path ? `${target.key || \"\"}` : `${tp.path}.${key}`;\n },\n testId: target => {\n const tp = target.parent;\n const prefix = !options.testId ? `` : `${options.testId}-`;\n const key = !target.key ? `` : `-${target.key}`;\n return !tp?.testId ? `${prefix}${target.key || key}` : `${tp.testId}${key}`;\n }\n };\n Object.entries(expressions).forEach(([key, expression]) => {\n field.expressions = field.expressions ?? {};\n field.expressions[key] = expression;\n if (ObjectUtils.isFunction(expression)) {\n field[key] = expression(field);\n }\n });\n }\n}\n","import {Injectable, Injector} from \"@angular/core\";\nimport {AbstractControl, FormArray, FormGroup} from \"@angular/forms\";\nimport {distinctUntilChanged, firstValueFrom, from, isObservable, startWith, switchMap} from \"rxjs\";\nimport {\n IApiService,\n ILanguageService, IOpenApiSchema,\n IOpenApiSchemaProperty,\n ObjectUtils,\n OpenApiService,\n StringUtils\n} from \"@stemy/ngx-utils\";\n\nimport {\n CustomizerOrSchemaOptions,\n FormFieldConfig,\n FormFieldData,\n FormSelectOption,\n FormSelectOptions,\n Validators\n} from \"../common-types\";\n\nimport {\n emailValidation,\n maxLengthValidation,\n maxValueValidation,\n minLengthValidation,\n minValueValidation,\n requiredValidation\n} from \"../utils/validation\";\nimport {\n ConfigForSchemaWrapOptions,\n convertToDate,\n findRefs,\n isStringWithVal,\n mergeFormFields,\n toWrapOptions\n} from \"../utils/internal\";\n\nimport {DynamicFormBuilderService} from \"./dynamic-form-builder.service\";\n\n@Injectable()\nexport class DynamicFormSchemaService {\n\n get api(): IApiService {\n return this.openApi.api;\n }\n\n get language(): ILanguageService {\n return this.api.language;\n }\n\n constructor(protected readonly openApi: OpenApiService,\n protected readonly injector: Injector,\n protected readonly builder: DynamicFormBuilderService) {\n }\n\n async getSchema(name: string): Promise<IOpenApiSchema> {\n return this.openApi.getSchema(name);\n }\n\n async getFormFieldsForSchema(name: string,\n parent: FormFieldConfig,\n customizeOrOptions: CustomizerOrSchemaOptions): Promise<FormFieldConfig[]> {\n const schema = await this.getSchema(name);\n if (!schema) return [];\n const options = await toWrapOptions(customizeOrOptions, this.injector, schema);\n const keys = Object.keys(schema.properties || {});\n const fields: FormFieldConfig[] = [];\n // Collect all properties of this schema def\n for (const key of keys) {\n const property = schema.properties[key];\n const propFields = await this.getFormFieldsForProp(property, schema, options, parent);\n fields.push(...propFields);\n }\n return this.builder.createFieldSets(\n fields.filter(f => null !== f),\n parent, options\n );\n }\n\n protected async getFormFieldsForProp(property: IOpenApiSchemaProperty, schema: IOpenApiSchema, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): Promise<FormFieldConfig[]> {\n const field = await this.getFormFieldForProp(property, options, parent);\n return !field ? [] : options.customize(field, property, schema);\n }\n\n protected async getFormFieldForProp(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): Promise<FormFieldConfig> {\n const $enum = property.items?.enum || property.enum;\n if (Array.isArray($enum) || isStringWithVal(property.optionsPath) || isStringWithVal(property.endpoint)) {\n return this.getFormSelectConfig(property, options, parent);\n }\n switch (property.type) {\n case \"string\":\n case \"number\":\n case \"integer\":\n case \"textarea\":\n // if (this.checkIsEditorProperty(property)) {\n // return this.getFormEditorConfig(property, options, parent);\n // }\n if (property.format == \"textarea\") {\n return this.getFormTextareaConfig(property, options, parent);\n }\n if (property.format == \"date\" || property.format == \"date-time\") {\n return this.getFormDatepickerConfig(property, options, parent);\n }\n return this.getFormInputConfig(property, options, parent);\n // case \"object\":\n // return this.getFormEditorConfig(property, options, parent);\n case \"boolean\":\n return this.getFormCheckboxConfig(property, options, parent);\n case \"array\":\n return this.getFormArrayConfig(property, options, parent);\n case \"file\":\n case \"upload\":\n return this.getFormUploadConfig(property, options, parent);\n }\n if (findRefs(property).length > 0) {\n return this.getFormGroupConfig(property, options, parent);\n }\n return null;\n }\n\n protected getFormFieldData(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions): FormFieldData {\n const validators: Validators = {};\n const schema = options.schema;\n if (ObjectUtils.isArray(schema.required) && schema.required.indexOf(property.id) >= 0) {\n validators.required = requiredValidation();\n }\n this.addPropertyValidators(validators, property);\n this.addItemsValidators(validators, property.items);\n return {\n hidden: property.hidden === true,\n fieldSet: property.fieldSet,\n classes: property.classes,\n validators\n };\n }\n\n protected async getFormArrayConfig(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): Promise<FormFieldConfig> {\n return this.builder.createFormArray(property.id, async sp => {\n const subSchemas = findRefs(property);\n if (subSchemas.length > 0) {\n const subModels = await Promise.all(\n subSchemas.map(s => this.getFormFieldsForSchema(s, sp, options))\n );\n return mergeFormFields(ObjectUtils.copy(subModels));\n }\n return this.getFormFieldForProp(property.items, options, null);\n }, {\n ...this.getFormFieldData(property, options),\n // initialCount: property.initialCount || 0,\n // sortable: property.sortable || false,\n useTabs: property.useTabs,\n tabsLabel: property.tabsLabel,\n addItem: property.addItem,\n insertItem: property.insertItem,\n cloneItem: property.cloneItem,\n moveItem: property.moveItem,\n removeItem: property.removeItem,\n clearItems: property.clearItems\n }, parent, options);\n }\n\n protected async getFormGroupConfig(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): Promise<FormFieldConfig> {\n return this.builder.createFormGroup(property.id, async sp => {\n const subSchemas = findRefs(property);\n const subModels = await Promise.all(\n subSchemas.map(s => this.getFormFieldsForSchema(s, sp, options))\n );\n return mergeFormFields(subModels);\n }, {\n ...this.getFormFieldData(property, options),\n }, parent, options);\n }\n\n protected getFormInputConfig(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): FormFieldConfig {\n let type = StringUtils.has(property.id || \"\", \"password\", \"Password\") ? \"password\" : (property.format || property.type);\n switch (type) {\n case \"string\":\n type = \"text\";\n break;\n case \"boolean\":\n type = \"checkbox\";\n break;\n case \"textarea\":\n type = \"textarea\";\n break;\n case \"integer\":\n type = \"number\";\n break;\n }\n const sub = property.type == \"array\" ? property.items || property : property;\n return this.builder.createFormInput(property.id, {\n ...this.getFormFieldData(property, options),\n type,\n autocomplete: property.autocomplete,\n pattern: property.pattern,\n step: isNaN(sub.step) ? property.step : sub.step,\n min: sub.minimum,\n max: sub.maximum,\n minLength: sub.minLength,\n maxLength: sub.maxLength,\n placeholder: property.placeholder,\n indeterminate: property.indeterminate,\n suffix: property.suffix\n }, parent, options);\n }\n\n protected getFormTextareaConfig(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): FormFieldConfig {\n return this.builder.createFormInput(property.id, {\n ...this.getFormFieldData(property, options),\n type: \"textarea\",\n autocomplete: property.autoComplete,\n cols: property.cols || null,\n rows: property.rows || 10,\n minLength: property.minLength,\n maxLength: property.maxLength,\n placeholder: property.placeholder || \"\"\n }, parent, options);\n }\n\n // getFormEditorConfig(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrap): DynamicEditorModelConfig {\n // const sub = property.type == \"array\" ? property.items || property : property;\n // return Object.assign(\n // this.getFormControlConfig(property, options),\n // {\n // inputType: property.format || \"json\",\n // convertObject: property.type !== \"string\",\n // autoComplete: property.autoComplete || \"off\",\n // multiple: property.type == \"array\",\n // accept: ObjectUtils.isString(property.accept) ? property.accept : null,\n // mask: ObjectUtils.isString(property.mask) ? property.mask : null,\n // pattern: ObjectUtils.isString(property.pattern) ? property.pattern : null,\n // step: isNaN(sub.step) ? (isNaN(property.step) ? 1 : property.step) : sub.step,\n // minLength: isNaN(sub.minLength) ? 0 : sub.minLength,\n // maxLength: isNaN(sub.maxLength) ? MAX_INPUT_NUM : sub.maxLength,\n // placeholder: property.placeholder || \"\"\n // }\n // );\n // }\n\n protected getFormDatepickerConfig(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): FormFieldConfig {\n return this.builder.createFormInput(property.id, {\n ...this.getFormFieldData(property, options),\n type: property.format == \"date-time\" ? \"datetime-local\" : \"date\",\n // format: property.dateFormat || \"dd.MM.yyyy\",\n min: convertToDate(property.min),\n max: convertToDate(property.max),\n }, parent, options);\n }\n\n protected getFormSelectConfig(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): FormFieldConfig {\n return this.builder.createFormSelect(property.id, {\n ...this.getFormFieldData(property, options),\n options: field => this.getFormSelectOptions(property, options, field),\n type: property.format || \"select\",\n multiple: property.type == \"array\",\n groupBy: property.groupBy,\n allowEmpty: property.allowEmpty\n }, parent, options);\n }\n\n protected getFormUploadConfig(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): FormFieldConfig {\n return this.builder.createFormUpload(property.id, {\n ...this.getFormFieldData(property, options),\n multiple: property.type === \"array\",\n inline: property.inline,\n accept: property.accept,\n url: property.url,\n maxSize: property.maxSize,\n uploadOptions: property.uploadOptions\n }, parent, options);\n }\n\n protected getFormCheckboxConfig(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, parent: FormFieldConfig): FormFieldConfig {\n return this.builder.createFormInput(property.id, {\n ...this.getFormFieldData(property, options),\n type: \"checkbox\",\n indeterminate: property.indeterminate || false\n }, parent, options);\n }\n\n protected getFormSelectOptions(property: IOpenApiSchemaProperty, options: ConfigForSchemaWrapOptions, field: FormFieldConfig): FormSelectOptions {\n const $enum = property.items?.enum || property.enum;\n if (Array.isArray($enum)) {\n return from(this.builder.fixSelectOptions(field, $enum.map(value => {\n const label = options.labelPrefix\n ? this.language.getTranslationSync(`${options.labelPrefix}.${property.id}.${value}`)\n : `${property.id}.${value}`;\n return {value, label};\n })));\n }\n if (isStringWithVal(property.endpoint)) {\n const entries = Object.entries((field.formControl.root as FormGroup)?.controls || {});\n const endpoint = entries.reduce((res, [key, control]) => {\n return this.replaceOptionsEndpoint(res, key, control?.value);\n }, `${property.endpoint}`);\n this.api.cache[endpoint] = this.api.cache[endpoint] || this.api.list(endpoint, this.api.makeListParams(1, -1)).then(result => {\n const items = ObjectUtils.isArray(result)\n ? result\n : (ObjectUtils.isArray(result.items) ? result.items : []);\n return items.map(i => {\n const item = ObjectUtils.isObject(i) ? i : {id: i};\n return {\n ...item,\n value: item.id || item._id,\n label: item[property.labelField] || item.label || item.id || item._id\n };\n });\n });\n const options = this.api.cache[endpoint] as Promise<FormSelectOption[]>;\n return from(options.then(opts => {\n return this.builder.fixSelectOptions(field, opts.map(o => Object.assign({}, o)))\n }));\n }\n let path = property.optionsPath as string;\n let control = field.formControl;\n let current = field;\n if (path.startsWith(\"$root\")) {\n path = path.substring(5);\n control = control.root || control;\n while (current.parent) {\n current = current.parent;\n }\n }\n while (path.startsWith(\".\")) {\n path = path.substring(1);\n control = control.parent || control;\n current = current.parent || current;\n }\n control = !path ? control : control.get(path);\n return control.valueChanges.pipe(\n startWith(control.value),\n distinctUntilChanged(),\n switchMap(async (controlVal) => {\n const currentOpts = current.props.options;\n const finalOpts = isObservable(currentOpts)\n ? await firstValueFrom(currentOpts)\n : (Array.isArray(currentOpts) ? currentOpts : []);\n return this.builder.fixSelectOptions(field, (!Array.isArray(controlVal) ? [] : controlVal).map(value => {\n const modelOption = finalOpts.find(t => t.value == value);\n return {value, label: modelOption?.label || value};\n }));\n })\n );\n }\n\n protected replaceOptionsEndpoint(endpoint: string, key: string, value: any): string {\n if (ObjectUtils.isObject(value)) {\n return Object.entries(value).reduce((res, [k, v]) => {\n return this.replaceOptionsEndpoint(res, `${key}.${k}`, v);\n }, endpoint)\n }\n if (ObjectUtils.isArray(value)) {\n return value.reduce((res, v, i) => {\n return this.replaceOptionsEndpoint(res, `${key}.${i}`, v);\n }, endpoint)\n }\n return endpoint.replace(new RegExp(`\\\\$${key}`, \"gi\"), `${value ?? \"\"}`);\n }\n\n protected showErrorsForGroup(formGroup: FormGroup): void {\n if (!formGroup) return;\n formGroup.markAsTouched({onlySelf: true});\n const controls = Object.keys(formGroup.controls).map(id => formGroup.controls[id]);\n this.showErrorsForControls(controls);\n }\n\n protected showErrorsForControls(controls: AbstractControl[]): void {\n controls.forEach(control => {\n if (control instanceof FormGroup) {\n this.showErrorsForGroup(control);\n return;\n }\n control.markAsTouched({onlySelf: true});\n if (control instanceof FormArray) {\n this.showErrorsForControls(control.controls);\n }\n });\n }\n\n protected addPropertyValidators(validators: Validators, property: IOpenApiSchemaProperty): void {\n if (!property) return;\n if (!isNaN(property.minLength)) {\n validators.minLength = minLengthValidation(property.minLength);\n }\n if (!isNaN(property.maxLength)) {\n validators.maxLength = maxLengthValidation(property.maxLength);\n }\n if (!isNaN(property.minimum)) {\n validators.min = minValueValidation(property.minimum);\n }\n if (!isNaN(property.maximum)) {\n validators.max = maxValueValidation(property.maximum);\n }\n // if (isString(property.pattern) && property.pattern.length) {\n // validators.pattern = property.pattern;\n // }\n switch (property.format) {\n case \"email\":\n validators.email = emailValidation();\n break;\n }\n }\n\n protected addItemsValidators(validators: Validators, items: IOpenApiSchemaProperty): void {\n if (!items) return;\n if (!isNaN(items.minLength)) {\n validators.itemsMinLength = minLengthValidation(items.minLength, true);\n }\n if (!isNaN(items.maxLength)) {\n validators.itemsMaxLength = maxLengthValidation(items.maxLength, true);\n }\n if (!isNaN(items.minimum)) {\n validators.itemsMinValue = minValueValidation(items.minimum, true);\n }\n if (!isNaN(items.maximum)) {\n validators.itemsMaxValue = maxValueValidation(items.maximum, true);\n }\n }\n}\n","import {Inject, Injectable, Injector} from \"@angular/core\";\nimport {AbstractControl, FormArray, FormGroup} from \"@angular/forms\";\nimport {first} from \"rxjs\";\nimport {API_SERVICE, IApiService, ObjectUtils} from \"@stemy/ngx-utils\";\n\nimport {\n CustomizerOrSchemaOptions,\n FORM_ROOT_KEY,\n FormFieldConfig,\n FormSerializeResult,\n IDynamicForm\n} from \"../common-types\";\nimport {getFormValidationErrors, toWrapOptions} from \"../utils/internal\";\n\nimport {DynamicFormSchemaService} from \"./dynamic-form-schema.service\";\nimport {DynamicFormBuilderService} from \"./dynamic-form-builder.service\";\n\n@Injectable()\nexport class DynamicFormService {\n\n constructor(protected readonly fs: DynamicFormSchemaService,\n protected readonly fb: DynamicFormBuilderService,\n protected readonly injector: Injector,\n @Inject(API_SERVICE) protected readonly api: IApiService) {\n\n }\n\n async getFormFieldsForSchema(name: string, customizeOrOptions?: CustomizerOrSchemaOptions): Promise<FormFieldConfig[]> {\n const group = await this.getFormFieldGroupBySchemaName(name, customizeOrOptions, \"getFormFieldsForSchema\");\n return group.fieldGroup;\n }\n\n async getFormFieldGroupForSchema(name: string, customizeOrOptions?: CustomizerOrSchemaOptions): Promise<FormFieldConfig> {\n return this.getFormFieldGroupBySchemaName(name, customizeOrOptions, \"getFormFieldsForSchema\");\n }\n\n protected async getFormFieldGroupBySchemaName(name: string, customizeOrOptions: CustomizerOrSchemaOptions, restrictedMethod: string): Promise<FormFieldConfig> {\n const config = {\n key: FORM_ROOT_KEY,\n path: \"\",\n wrappers: [\"form-group\"]\n } as FormFieldConfig;\n const schema = await this.fs.getSchema(name);\n const wrapOptions = await toWrapOptions(\n customizeOrOptions, this.injector, schema,\n `\"DynamicFormService.${restrictedMethod}\" is called from a customizer, which is not allowed. Please use DynamicFormSchemaService instead!`\n );\n const fields = await this.fs.getFormFieldsForSchema(name, config, wrapOptions);\n const fieldGroup = [...fields];\n\n config.fieldGroup = fieldGroup;\n\n // There are no actual fields in the schema, or no schema exists\n if (fields.length === 0) return config;\n\n // Add id fields if necessary\n const idFields: FormFieldConfig[] = [\n this.fb.createFormInput(\"id\", {hidden: true}, null, wrapOptions),\n this.fb.createFormInput(\"_id\", {hidden: true}, null, wrapOptions)\n ];\n\n fieldGroup.unshift(...idFields\n .filter(t => !fields.some(c => c.key == t.key))\n );\n\n const root = await wrapOptions.customize(config, {\n id: FORM_ROOT_KEY,\n type: \"object\",\n properties: schema?.properties || {}\n }, schema);\n // Check if the customized root wrapper returned an array\n fields.length = 0;\n\n for (const model of root) {\n if (model.key === FORM_ROOT_KEY) {\n return model;\n } else {\n fields.push(model);\n }\n }\n\n return {\n ...config,\n fieldGroup: fields\n };\n }\n\n async validateForm(form: IDynamicForm, showErrors: boolean = true): Promise<any> {\n const group = form.group();\n if (!group) return Promise.resolve();\n return new Promise<any>((resolve, reject) => {\n group.statusChanges\n .pipe(first(status => status == \"VALID\" || status == \"INVALID\"))\n .subscribe(status => {\n if (showErrors) {\n this.showErrorsForGroup(group);\n }\n if (status == \"VALID\") {\n resolve(null);\n return;\n }\n reject(getFormValidationErrors(group.controls));\n });\n group.updateValueAndValidity();\n });\n }\n\n async serializeForm(form: IDynamicForm, validate: boolean = true): Promise<FormSerializeResult> {\n const fields = form.config();\n if (!fields) return null;\n if (validate) {\n await this.validateForm(form);\n }\n return this.serialize(fields);\n }\n\n async serialize(fields: FormFieldConfig[]): Promise<FormSerializeResult> {\n const result = {};\n if (!fields) return result;\n for (const field of fields) {\n const serializer = field.serializer;\n const key = `${field.key}`;\n if (ObjectUtils.isFunction(serializer)) {\n result[key] = await serializer(field, this.injector);\n continue;\n }\n if (field.hide && !field.serialize) {\n continue;\n }\n const control = field.formControl;\n if (field.fieldGroup) {\n const group = await this.serialize(field.fieldGroup);\n if (field.key) {\n result[key] = !field.fieldArray ? group : Object.values(group);\n continue;\n }\n Object.assign(result, group);\n continue;\n }\n result[key] = control.value;\n }\n return result;\n }\n\n protected showErrorsForGroup(formGroup: FormGroup): void {\n if (!formGroup) return;\n formGroup.markAsTouched({onlySelf: true});\n const controls = Object.keys(formGroup.controls).map(id => formGroup.controls[id]);\n this.showErrorsForControls(controls);\n }\n\n protected showErrorsForControls(controls: AbstractControl[]): void {\n controls.forEach(control => {\n if (control instanceof FormGroup) {\n this.showErrorsForGroup(control);\n return;\n }\n control.markAsTouched({onlySelf: true});\n if (control instanceof FormArray) {\n this.showErrorsForControls(control.controls);\n }\n });\n }\n}\n","import {\n computed,\n Directive,\n effect,\n ElementRef,\n HostBinding,\n HostListener,\n inject,\n input,\n output,\n Renderer2,\n signal\n} from \"@angular/core\";\nimport {outputToObservable} from \"@angular/core/rxjs-interop\";\nimport {debounceTime} from \"rxjs/operators\";\nimport {IAsyncMessage, TOASTER_SERVICE} from \"@stemy/ngx-utils\";\n\nimport {AsyncSubmitMethod, IDynamicForm} from \"../common-types\";\n\n@Directive({\n standalone: false,\n selector: \"[async-submit]\",\n exportAs: \"async-submit\"\n})\nexport class AsyncSubmitDirective {\n\n method = input<AsyncSubmitMethod>(null, {alias: \"async-submit\"});\n form = input<IDynamicForm>();\n context = input<any>();\n\n onSuccess = output<IAsyncMessage>();\n onError = output<IAsyncMessage>();\n\n toaster = inject(TOASTER_SERVICE);\n renderer = inject(Renderer2);\n elem = inject<ElementRef<HTMLElement>>(ElementRef);\n\n protected status = computed(() => {\n const form = this.form();\n return form?.status() || null;\n });\n\n protected group = computed(() => {\n const form = this.form();\n return form?.group() || null;\n });\n\n protected loading = signal(false);\n protected callback = signal<() => void>(null);\n\n @HostBinding(\"class.disabled\")\n get isDisabled(): boolean {\n return this.status() !== \"VALID\";\n }\n\n @HostBinding(\"class.loading\")\n get isLoading(): boolean {\n return this.loading();\n }\n\n constructor() {\n effect(() => {\n if (this.elem.nativeElement.tagName === \"BUTTON\") {\n this.renderer.setAttribute(this.elem.nativeElement, \"type\", \"button\");\n }\n });\n effect(() => {\n const status = this.status();\n const cb = this.callback();\n if (!cb || status == \"PENDING\") return;\n if (status === \"VALID\") {\n cb();\n }\n this.callback.set(null);\n });\n effect(() => {\n const form = this.form();\n if (!form) return;\n const sub = outputToObservable(form.onSubmit)\n .pipe(debounceTime(200)).subscribe(() => this.callMethod());\n return () => sub.unsubscribe();\n });\n }\n\n @HostListener(\"click\")\n click(): void {\n const status = this.status();\n if (status !== \"VALID\" && status !== \"INVALID\") {\n this.callback.set(() => this.callMethod());\n return;\n }\n this.callMethod();\n }\n\n callMethod(): void {\n if (this.loading()) return;\n this.loading.set(true);\n this.method()(this.form(), this.context).then(result => {\n this.loading.set(false);\n if (result) {\n this.onSuccess.emit(result);\n this.toaster.success(result.message, result.context);\n }\n }, reason => {\n if (!reason || !reason.message)\n throw new Error(\"Reason must implement IAsyncMessage interface\");\n this.loading.set(false);\n this.onError.emit(reason);\n this.toaster.error(reason.message, reason.context);\n });\n }\n}\n","import {AfterViewInit, Component, Directive, OnDestroy, TemplateRef, Type} from \"@angular/core\";\r\nimport {FieldType as CoreFieldType, ɵobserve as observe} from \"@ngx-formly/core\";\r\nimport {Subject} from \"rxjs\";\r\nimport type {MatFormField, MatFormFieldControl} from \"@angular/material/form-field\";\r\n\r\nimport {FormFieldType} from \"../../common-types\";\r\n\r\n@Component({\r\n standalone: false,\r\n selector: \"dynamic-field-type\",\r\n template: \"\"\r\n})\r\nexport class DynamicFieldType<F extends FormFieldType = FormFieldType> extends CoreFieldType<F> implements AfterViewInit, OnDestroy, MatFormFieldControl<any> {\r\n\r\n stateChanges = new Subject<void>();\r\n _errorState = false;\r\n _focused = false;\r\n\r\n ngOnDestroy() {\r\n delete (this.formField as any)?._control;\r\n this.stateChanges.complete();\r\n }\r\n\r\n setDescribedByIds(_ids: string[]): void {\r\n }\r\n\r\n onContainerClick(_event: MouseEvent): void {\r\n this.field.focus = true;\r\n this.stateChanges.next();\r\n }\r\n\r\n get errorState() {\r\n const showError = this.options!.showError!(this);\r\n if (showError !== this._errorState) {\r\n this._errorState = showError;\r\n this.stateChanges.next();\r\n }\r\n\r\n return showError;\r\n }\r\n\r\n get controlType() {\r\n if (this.props.type) {\r\n return this.props.type;\r\n }\r\n\r\n const type = this.field.type!;\r\n return type instanceof Type ? type.prototype.constructor.name : type;\r\n }\r\n\r\n get focused() {\r\n const focused = !!this.field.focus && !this.disabled;\r\n if (focused !== this._focused) {\r\n this._focused = focused;\r\n this.stateChanges.next();\r\n }\r\n return focused;\r\n }\r\n\r\n get disabled() {\r\n return !!this.props.disabled;\r\n }\r\n\r\n get required() {\r\n return !!this.props.required;\r\n }\r\n\r\n get placeholder() {\r\n return this.props.placeholder || \"\";\r\n }\r\n\r\n get shouldPlaceholderFloat() {\r\n return this.shouldLabelFloat;\r\n }\r\n\r\n get value() {\r\n return this.formControl?.value;\r\n }\r\n\r\n set value(value) {\r\n this.formControl?.patchValue(value);\r\n }\r\n\r\n get ngControl() {\r\n return this.formControl as any;\r\n }\r\n\r\n get empty() {\r\n return this.value == null || this.value === \"\";\r\n }\r\n\r\n get shouldLabelFloat() {\r\n return this.focused || !this.empty;\r\n }\r\n\r\n get formField(): MatFormField {\r\n return (this.field as any)?.[\"_formField\"];\r\n }\r\n\r\n ngAfterViewInit() {\r\n const control = this as MatFormFieldControl<any>;\r\n if (this.formField && control !== this.formField._control) {\r\n this.formField._control = control;\r\n\r\n // temporary fix for https://github.com/angular/material2/issues/6728\r\n const ngControl = control?.ngControl as any;\r\n if (ngControl?.valueAccessor?.hasOwnProperty(\"_formField\")) {\r\n ngControl.valueAccessor[\"_formField\"] = this.formField;\r\n }\r\n if (ngControl?.valueAccessor?.hasOwnProperty(\"_parentFormField\")) {\r\n ngControl.valueAccessor[\"_parentFormField\"] = this.formField;\r\n }\r\n\r\n [\"prefix\", \"suffix\", \"textPrefix\", \"textSuffix\"].forEach((type) =>\r\n observe<TemplateRef<any>>(\r\n this.field,\r\n [\"props\", type],\r\n ({currentValue}) =>\r\n currentValue &&\r\n Promise.resolve().then(() => {\r\n this.options.detectChanges!(this.field);\r\n }),\r\n ),\r\n );\r\n\r\n // https://github.com/angular/components/issues/16209\r\n const setDescribedByIds = control.setDescribedByIds.bind(control);\r\n control.setDescribedByIds = (ids: string[]) => {\r\n setTimeout(() => setDescribedByIds(ids));\r\n };\r\n }\r\n }\r\n}\r\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n Injector,\n input,\n output,\n ViewEncapsulation\n} from \"@angular/core\";\nimport {rxResource, toSignal} from \"@angular/core/rxjs-interop\";\nimport {FormGroup} from \"@angular/forms\";\nimport {Subject} from \"rxjs\";\nimport {FormlyFormOptions} from \"@ngx-formly/core\";\nimport {EventsService, LANGUAGE_SERVICE} from \"@stemy/ngx-utils\";\n\nimport {FormFieldChangeEvent, FormFieldConfig, FormFieldLabelCustomizer, IDynamicForm} from \"../../common-types\";\nimport {DynamicFormBuilderService} from \"../../services/dynamic-form-builder.service\";\n\n@Component({\n standalone: false,\n selector: \"dynamic-form\",\n templateUrl: \"./dynamic-form.component.html\",\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DynamicFormComponent implements IDynamicForm {\n\n protected readonly builder = inject(DynamicFormBuilderService);\n\n protected readonly events = inject(EventsService);\n\n protected readonly languages = inject(LANGUAGE_SERVICE);\n\n readonly labelPrefix = input<string>(\"label\");\n\n readonly labelCustomizer = input<FormFieldLabelCustomizer>(null);\n\n readonly testId = input<string>(\"\");\n\n readonly data = input<any>({});\n\n readonly fields = input<FormFieldConfig[]>(null);\n\n readonly fieldChanges = new Subject<FormFieldChangeEvent>();\n\n protected readonly language = toSignal(this.events.languageChanged, {\n initialValue: this.languages.currentLanguage\n });\n\n protected readonly enableTranslations = toSignal(this.events.translationsEnabled, {\n initialValue: this.languages.enableTranslations\n });\n\n readonly config = computed(() => {\n return this.fields() || this.builder.resolveFormFields(this.data()?.constructor, null, {\n labelPrefix: this.labelPrefix(),\n labelCustomizer: this.labelCustomizer(),\n testId: this.testId(),\n });\n });\n\n readonly group = computed(() => {\n this.config();\n return new FormGroup({});\n });\n\n protected readonly status$ = rxResource({\n request: () => this.group(),\n loader: p => p.request.statusChanges,\n defaultValue: \"PENDING\"\n });\n\n readonly status = computed(() => this.status$.value());\n\n readonly onSubmit = output<IDynamicForm>();\n\n readonly options: FormlyFormOptions = {\n fieldChanges: this.fieldChanges,\n formState: {\n injector: inject(Injector)\n }\n };\n\n constructor() {\n effect(() => {\n this.language();\n this.enableTranslations();\n this.config().forEach(field => {\n if (!field.options) return;\n this.options.detectChanges(field);\n });\n });\n }\n\n submit() {\n // TODO: Templ disable submit\n // this.onSubmit.emit(this);\n }\n\n reset() {\n this.options?.resetModel?.();\n }\n}\n","@if (config() && group()) {\n <form [formGroup]=\"group()\" (ngSubmit)=\"submit()\" autocomplete=\"off\" role=\"presentation\">\n <input type=\"submit\" [hidden]=\"true\" />\n <formly-form [model]=\"data()\"\n [fields]=\"config()\"\n [form]=\"group()\"\n [options]=\"options\"></formly-form>\n <ng-content></ng-content>\n </form>\n}\n","import {Component, signal, ViewEncapsulation} from \"@angular/core\";\nimport {FormArray} from \"@angular/forms\";\nimport {FieldArrayType} from \"@ngx-formly/core\";\nimport {FormFieldConfig} from \"../../common-types\";\n\n@Component({\n standalone: false,\n selector: \"dynamic-form-array\",\n templateUrl: \"./dynamic-form-array.component.html\",\n encapsulation: ViewEncapsulation.None\n})\nexport class DynamicFormArrayComponent extends FieldArrayType<FormFieldConfig> {\n\n readonly currentTab = signal(0);\n\n clear(): void {\n const control = this.formControl as FormArray;\n while (control.length > 0) {\n this.remove(0);\n }\n }\n}\n","<label class=\"field-label\" *ngIf=\"props.label\">\n {{ props.label | translate }}\n <p class=\"field-description\" *ngIf=\"props.description\">{{ props.description | translate }}</p>\n</label>\n<div class=\"field-container\">\n @if (props.useTabs) {\n <ul class=\"form-array-tabs\">\n @for (field of field.fieldGroup; track field.key; let ix = $index) {\n <li>\n <a class=\"btn\" [ngClass]=\"[currentTab() === ix ? 'btn-primary' : 'btn-secondary']\"\n (click)=\"currentTab.set(ix)\">\n {{ (field.formControl.value | getValue : props.tabsLabel) || ix + 1 }}\n </a>\n </li>\n }\n </ul>\n }\n @for (field of field.fieldGroup; track field.key; let ix = $index) {\n @if (!props.useTabs || ix === currentTab()) {\n <div class=\"form-array-item\">\n <div class=\"form-array-buttons\">\n @if (props.removeItem) {\n <button type=\"button\" class=\"btn btn-sm btn-primary\" (click)=\"remove(ix)\">\n <i icon=\"trash-outline\"></i>\n </button>\n }\n @if (props.insertItem) {\n <button type=\"button\" class=\"btn btn-sm btn-primary\" (click)=\"add(ix)\">\n <i icon=\"plus-outline\"></i>\n </button>\n }\n </div>\n <formly-field [field]=\"field\"></formly-field>\n </div>\n }\n }\n <div class=\"form-array-buttons\">\n @if (props.clearItems) {\n <button type=\"button\" class=\"btn btn-sm btn-primary\" (click)=\"clear()\">\n <i icon=\"trash-outline\"></i>\n {{ 'button.clear-items' | translate }}\n </button>\n }\n @if (props.addItem) {\n <button type=\"button\" class=\"btn btn-sm btn-primary\" (click)=\"add()\">\n <i icon=\"plus-outline\"></i>\n {{ 'button.insert-item' | translate }}\n </button>\n }\n </div>\n</div>\n","import {ChangeDetectionStrategy, Component, ViewEncapsulation} from \"@angular/core\";\nimport {DynamicFieldType} from \"../base/dynamic-field-type\";\n\n@Component({\n standalone: false,\n selector: \"dynamic-form-chips\",\n templateUrl: \"./dynamic-form-chips.component.html\",\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DynamicFormChipsComponent extends DynamicFieldType {\n\n}\n","<chips [formControl]=\"formControl\"\n [type]=\"props.type\"\n [step]=\"props.step\"\n [minLength]=\"props.minLength\"\n [maxLength]=\"props.maxLength\"\n [min]=\"props.min\"\n [max]=\"props.max\"\n [multiple]=\"props.multiple\"\n [formlyAttributes]=\"field\">\n</chips>\n","import {Component, ViewEncapsulation} from \"@angular/core\";\nimport {FieldWrapper} from \"@ngx-formly/core\";\n\n@Component({\n standalone: false,\n selector: \"dynamic-form-field\",\n templateUrl: \"./dynamic-form-field.component.html\",\n encapsulation: ViewEncapsulation.None\n})\nexport class DynamicFormFieldComponent extends FieldWrapper {\n\n}\n","<label class=\"field-label\" [for]=\"id\" *ngIf=\"props.label\">\n {{ props.label | translate }}\n <p class=\"field-description\" *ngIf=\"props.description\">{{ props.description | translate }}</p>\n <span class=\"field-required\" *ngIf=\"props.required && props.hideRequiredMarker !== true\" aria-hidden=\"true\">*</span>\n</label>\n<div class=\"field-container\">\n <ng-container #fieldComponent></ng-container>\n <div *ngIf=\"showError\" class=\"field-errors invalid-feedback\">\n <formly-validation-message\n id=\"{{ id }}-formly-validation-error\"\n [field]=\"field\"\n role=\"alert\"\n ></formly-validation-message>\n </div>\n</div>\n","import {Component, inject, ViewEncapsulation} from \"@angular/core\";\nimport {FieldWrapper} from \"@ngx-formly/core\";\nimport {DynamicFormGroupComponent} from \"../dynamic-form-group/dynamic-form-group.component\";\n\n@Component({\n standalone: false,\n selector: \"dynamic-form-fieldset\",\n templateUrl: \"./dynamic-form-fieldset.component.html\",\n encapsulation: ViewEncapsulation.None\n})\nexport class DynamicFormFieldsetComponent extends FieldWrapper {\n\n ngOnInit(): void {\n // console.log(this.field.id, this.field.props?.label, this.options);\n // console.log(this.field.parent);\n }\n}\n","<legend class=\"field-legend\" *ngIf=\"props.label\">\n {{ props.label | translate }}\n</legend>\n<div class=\"field-container\">\n <ng-container #fieldComponent></ng-container>\n</div>\n","import {Component, ViewEncapsulation} from \"@angular/core\";\nimport {FieldWrapper} from \"@ngx-formly/core\";\n\n@Component({\n standalone: false,\n selector: \"dynamic-form-group\",\n templateUrl: \"./dynamic-form-group.component.html\",\n encapsulation: ViewEncapsulation.None\n})\nexport class DynamicFormGroupComponent extends FieldWrapper {\n\n}\n","<label class=\"field-label\" *ngIf=\"props.label\">\n {{ props.label | translate }}\n <p class=\"field-description\" *ngIf=\"props.description\">{{ props.description | translate }}</p>\n</label>\n<ng-container #fieldComponent></ng-container>\n","import {ChangeDetectionStrategy, Component, ViewEncapsulation} from \"@angular/core\";\nimport {DynamicFieldType} from \"../base/dynamic-field-type\";\n\n@Component({\n standalone: false,\n selector: \"dynamic-form-upload\",\n templateUrl: \"./dynamic-form-upload.component.html\",\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DynamicFormUploadComponent extends DynamicFieldType {\n\n}\n","<upload [formControl]=\"formControl\"\n [multiple]=\"props.multiple\"\n [inline]=\"props.inline\"\n [accept]=\"props.accept\"\n [baseUrl]=\"props.url\"\n [makeUpload]=\"props.createUploadData\"\n [formlyAttributes]=\"field\">\n</upload>\n","import {AsyncSubmitDirective} from \"./directives/async-submit.directive\";\n\nimport {DynamicFieldType} from \"./components/base/dynamic-field-type\";\nimport {DynamicFormComponent} from \"./components/dynamic-form/dynamic-form.component\";\nimport {DynamicFormArrayComponent} from \"./components/dynamic-form-array/dynamic-form-array.component\";\nimport {DynamicFormChipsComponent} from \"./components/dynamic-form-chips/dynamic-form-chips.component\";\nimport {DynamicFormFieldComponent} from \"./components/dynamic-form-field/dynamic-form-field.component\";\nimport {DynamicFormFieldsetComponent} from \"./components/dynamic-form-fieldset/dynamic-form-fieldset.component\";\nimport {DynamicFormGroupComponent} from \"./components/dynamic-form-group/dynamic-form-group.component\";\nimport {DynamicFormUploadComponent} from \"./components/dynamic-form-upload/dynamic-form-upload.component\";\n\n// --- Components ---\nexport const components = [\n DynamicFieldType,\n DynamicFormComponent,\n DynamicFormArrayComponent,\n DynamicFormChipsComponent,\n DynamicFormFieldComponent,\n DynamicFormFieldsetComponent,\n DynamicFormGroupComponent,\n DynamicFormUploadComponent\n];\n\n// --- Directives ---\nexport const directives = [\n AsyncSubmitDirective,\n];\n\n// --- Pipes ---\nexport const pipes = [];\n","import {EnvironmentProviders, makeEnvironmentProviders, ModuleWithProviders, NgModule, Provider} from \"@angular/core\";\nimport {CommonModule} from \"@angular/common\";\nimport {FormsModule, ReactiveFormsModule} from \"@angular/forms\";\nimport {FormlyModule, FormlyConfig, FormlyFormBuilder, provideFormlyCore, provideFormlyConfig} from \"@ngx-formly/core\";\nimport {NgxUtilsModule} from \"@stemy/ngx-utils\";\n\nimport {components, directives, pipes} from \"./ngx-dynamic-form.imports\";\n\nimport {IDynamicFormModuleConfig} from \"./common-types\";\n\nimport {DynamicFormService} from \"./services/dynamic-form.service\";\nimport {DynamicFormBuilderService} from \"./services/dynamic-form-builder.service\";\nimport {DynamicFormSchemaService} from \"./services/dynamic-form-schema.service\";\n\nimport {DynamicFormArrayComponent} from \"./components/dynamic-form-array/dynamic-form-array.component\";\nimport {DynamicFormChipsComponent} from \"./components/dynamic-form-chips/dynamic-form-chips.component\";\nimport {DynamicFormGroupComponent} from \"./components/dynamic-form-group/dynamic-form-group.component\";\nimport {DynamicFormFieldComponent} from \"./components/dynamic-form-field/dynamic-form-field.component\";\nimport {DynamicFormFieldsetComponent} from \"./components/dynamic-form-fieldset/dynamic-form-fieldset.component\";\nimport {DynamicFormUploadComponent} from \"./components/dynamic-form-upload/dynamic-form-upload.component\";\n\n@NgModule({\n declarations: [\n ...components,\n ...directives,\n ...pipes\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NgxUtilsModule,\n FormlyModule\n ],\n exports: [\n ...components,\n ...directives,\n ...pipes,\n FormsModule,\n ReactiveFormsModule,\n NgxUtilsModule,\n FormlyModule\n ],\n providers: [\n ...pipes\n ]\n})\nexport class NgxDynamicFormModule {\n\n private static getProviders(config?: IDynamicFormModuleConfig): Provider[] {\n const formlyConfigs = (config?.options || []).map(provideFormlyConfig);\n return [\n provideFormlyCore({\n types: [\n {name: \"array\", component: DynamicFormArrayComponent},\n {name: \"chips\", component: DynamicFormChipsComponent, wrappers: [\"form-field\"]},\n {name: \"upload\", component: DynamicFormUploadComponent, wrappers: [\"form-field\"]}\n ],\n wrappers: [\n { name: \"form-field\", component: DynamicFormFieldComponent },\n { name: \"form-fieldset\", component: DynamicFormFieldsetComponent },\n { name: \"form-group\", component: DynamicFormGroupComponent }\n ],\n extras: {\n renderFormlyFieldElement: false\n }\n }),\n ...formlyConfigs,\n DynamicFormService,\n DynamicFormBuilderService,\n DynamicFormSchemaService\n ];\n }\n\n static forRoot(config?: IDynamicFormModuleConfig): ModuleWithProviders<NgxDynamicFormModule> {\n return {\n ngModule: NgxDynamicFormModule,\n providers: NgxDynamicFormModule.getProviders(config)\n }\n }\n\n static provideForms(config?: IDynamicFormModuleConfig): EnvironmentProviders {\n return makeEnvironmentProviders(NgxDynamicFormModule.getProviders(config));\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["FormGroup","FormArray","i1","i2.DynamicFormBuilderService","CoreFieldType","observe","i2","i3"],"mappings":"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"}
|
|
@@ -147,6 +147,7 @@ export interface ConfigForSchemaOptions extends FormBuilderOptions {
|
|
|
147
147
|
}
|
|
148
148
|
export type CustomizerOrSchemaOptions = FormFieldCustomizer | ConfigForSchemaOptions;
|
|
149
149
|
export declare type AsyncSubmitMethod = (form: IDynamicForm, context?: any) => Promise<IAsyncMessage>;
|
|
150
|
-
export interface IDynamicFormModuleConfig
|
|
150
|
+
export interface IDynamicFormModuleConfig {
|
|
151
|
+
options?: ConfigOption[];
|
|
151
152
|
}
|
|
152
153
|
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { AfterViewInit, OnDestroy } from "@angular/core";
|
|
2
|
+
import { FieldType as CoreFieldType } from "@ngx-formly/core";
|
|
3
|
+
import { Subject } from "rxjs";
|
|
4
|
+
import type { MatFormField, MatFormFieldControl } from "@angular/material/form-field";
|
|
5
|
+
import { FormFieldType } from "../../common-types";
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export declare class DynamicFieldType<F extends FormFieldType = FormFieldType> extends CoreFieldType<F> implements AfterViewInit, OnDestroy, MatFormFieldControl<any> {
|
|
8
|
+
stateChanges: Subject<void>;
|
|
9
|
+
_errorState: boolean;
|
|
10
|
+
_focused: boolean;
|
|
11
|
+
ngOnDestroy(): void;
|
|
12
|
+
setDescribedByIds(_ids: string[]): void;
|
|
13
|
+
onContainerClick(_event: MouseEvent): void;
|
|
14
|
+
get errorState(): boolean;
|
|
15
|
+
get controlType(): any;
|
|
16
|
+
get focused(): boolean;
|
|
17
|
+
get disabled(): boolean;
|
|
18
|
+
get required(): boolean;
|
|
19
|
+
get placeholder(): string;
|
|
20
|
+
get shouldPlaceholderFloat(): boolean;
|
|
21
|
+
get value(): any;
|
|
22
|
+
set value(value: any);
|
|
23
|
+
get ngControl(): any;
|
|
24
|
+
get empty(): boolean;
|
|
25
|
+
get shouldLabelFloat(): boolean;
|
|
26
|
+
get formField(): MatFormField;
|
|
27
|
+
ngAfterViewInit(): void;
|
|
28
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DynamicFieldType<any>, never>;
|
|
29
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DynamicFieldType<any>, "dynamic-field-type", never, {}, {}, never, never, false, never>;
|
|
30
|
+
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { FormFieldType } from "../../common-types";
|
|
1
|
+
import { DynamicFieldType } from "../base/dynamic-field-type";
|
|
3
2
|
import * as i0 from "@angular/core";
|
|
4
|
-
export declare class DynamicFormChipsComponent extends
|
|
3
|
+
export declare class DynamicFormChipsComponent extends DynamicFieldType {
|
|
5
4
|
static ɵfac: i0.ɵɵFactoryDeclaration<DynamicFormChipsComponent, never>;
|
|
6
5
|
static ɵcmp: i0.ɵɵComponentDeclaration<DynamicFormChipsComponent, "dynamic-form-chips", never, {}, {}, never, never, false, never>;
|
|
7
6
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { FormFieldType } from "../../common-types";
|
|
1
|
+
import { DynamicFieldType } from "../base/dynamic-field-type";
|
|
3
2
|
import * as i0 from "@angular/core";
|
|
4
|
-
export declare class DynamicFormUploadComponent extends
|
|
3
|
+
export declare class DynamicFormUploadComponent extends DynamicFieldType {
|
|
5
4
|
static ɵfac: i0.ɵɵFactoryDeclaration<DynamicFormUploadComponent, never>;
|
|
6
5
|
static ɵcmp: i0.ɵɵComponentDeclaration<DynamicFormUploadComponent, "dynamic-form-upload", never, {}, {}, never, never, false, never>;
|
|
7
6
|
}
|
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
import { EnvironmentProviders, ModuleWithProviders } from "@angular/core";
|
|
2
2
|
import { IDynamicFormModuleConfig } from "./common-types";
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "./components/
|
|
5
|
-
import * as i2 from "./components/dynamic-form
|
|
6
|
-
import * as i3 from "./components/dynamic-form-
|
|
7
|
-
import * as i4 from "./components/dynamic-form-
|
|
8
|
-
import * as i5 from "./components/dynamic-form-
|
|
9
|
-
import * as i6 from "./components/dynamic-form-
|
|
10
|
-
import * as i7 from "./components/dynamic-form-
|
|
11
|
-
import * as i8 from "./
|
|
12
|
-
import * as i9 from "
|
|
13
|
-
import * as i10 from "@angular/
|
|
14
|
-
import * as i11 from "@
|
|
15
|
-
import * as i12 from "@ngx-
|
|
4
|
+
import * as i1 from "./components/base/dynamic-field-type";
|
|
5
|
+
import * as i2 from "./components/dynamic-form/dynamic-form.component";
|
|
6
|
+
import * as i3 from "./components/dynamic-form-array/dynamic-form-array.component";
|
|
7
|
+
import * as i4 from "./components/dynamic-form-chips/dynamic-form-chips.component";
|
|
8
|
+
import * as i5 from "./components/dynamic-form-field/dynamic-form-field.component";
|
|
9
|
+
import * as i6 from "./components/dynamic-form-fieldset/dynamic-form-fieldset.component";
|
|
10
|
+
import * as i7 from "./components/dynamic-form-group/dynamic-form-group.component";
|
|
11
|
+
import * as i8 from "./components/dynamic-form-upload/dynamic-form-upload.component";
|
|
12
|
+
import * as i9 from "./directives/async-submit.directive";
|
|
13
|
+
import * as i10 from "@angular/common";
|
|
14
|
+
import * as i11 from "@angular/forms";
|
|
15
|
+
import * as i12 from "@stemy/ngx-utils";
|
|
16
|
+
import * as i13 from "@ngx-formly/core";
|
|
16
17
|
export declare class NgxDynamicFormModule {
|
|
17
18
|
private static getProviders;
|
|
18
19
|
static forRoot(config?: IDynamicFormModuleConfig): ModuleWithProviders<NgxDynamicFormModule>;
|
|
19
20
|
static provideForms(config?: IDynamicFormModuleConfig): EnvironmentProviders;
|
|
20
21
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgxDynamicFormModule, never>;
|
|
21
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<NgxDynamicFormModule, [typeof i1.
|
|
22
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<NgxDynamicFormModule, [typeof i1.DynamicFieldType, typeof i2.DynamicFormComponent, typeof i3.DynamicFormArrayComponent, typeof i4.DynamicFormChipsComponent, typeof i5.DynamicFormFieldComponent, typeof i6.DynamicFormFieldsetComponent, typeof i7.DynamicFormGroupComponent, typeof i8.DynamicFormUploadComponent, typeof i9.AsyncSubmitDirective], [typeof i10.CommonModule, typeof i11.FormsModule, typeof i11.ReactiveFormsModule, typeof i12.NgxUtilsModule, typeof i13.FormlyModule], [typeof i1.DynamicFieldType, typeof i2.DynamicFormComponent, typeof i3.DynamicFormArrayComponent, typeof i4.DynamicFormChipsComponent, typeof i5.DynamicFormFieldComponent, typeof i6.DynamicFormFieldsetComponent, typeof i7.DynamicFormGroupComponent, typeof i8.DynamicFormUploadComponent, typeof i9.AsyncSubmitDirective, typeof i11.FormsModule, typeof i11.ReactiveFormsModule, typeof i12.NgxUtilsModule, typeof i13.FormlyModule]>;
|
|
22
23
|
static ɵinj: i0.ɵɵInjectorDeclaration<NgxDynamicFormModule>;
|
|
23
24
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stemy/ngx-dynamic-form",
|
|
3
|
-
"version": "19.
|
|
3
|
+
"version": "19.4.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"public": true,
|
|
6
6
|
"repository": "https://github.com/stemyke/ngx-dynamic-form.git",
|
|
@@ -23,8 +23,12 @@
|
|
|
23
23
|
"@floating-ui/dom": "^1.7.1",
|
|
24
24
|
"json5": "^2.2.3",
|
|
25
25
|
"@stemy/ngx-utils": ">=19.5.3",
|
|
26
|
-
"@ngx-formly/core": "^
|
|
27
|
-
"ngx-mask": "^
|
|
26
|
+
"@ngx-formly/core": "^7.0.0",
|
|
27
|
+
"ngx-mask": "^19.0.7",
|
|
28
|
+
"@angular/material": "^19.2.18"
|
|
29
|
+
},
|
|
30
|
+
"optionalDependencies": {
|
|
31
|
+
"@angular/material": "^19.2.18"
|
|
28
32
|
},
|
|
29
33
|
"main": "dist/bundles/stemy-ngx-dynamic-form.umd.js",
|
|
30
34
|
"module": "fesm2022/stemy-ngx-dynamic-form.mjs",
|
package/public_api.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export { DynamicFormBuilderService } from "./ngx-dynamic-form/services/dynamic-f
|
|
|
7
7
|
export { DynamicFormSchemaService } from "./ngx-dynamic-form/services/dynamic-form-schema.service";
|
|
8
8
|
export { DynamicFormService } from "./ngx-dynamic-form/services/dynamic-form.service";
|
|
9
9
|
export { AsyncSubmitDirective } from "./ngx-dynamic-form/directives/async-submit.directive";
|
|
10
|
+
export { DynamicFieldType } from "./ngx-dynamic-form/components/base/dynamic-field-type";
|
|
10
11
|
export { DynamicFormComponent } from "./ngx-dynamic-form/components/dynamic-form/dynamic-form.component";
|
|
11
12
|
export { DynamicFormArrayComponent } from "./ngx-dynamic-form/components/dynamic-form-array/dynamic-form-array.component";
|
|
12
13
|
export { DynamicFormChipsComponent } from "./ngx-dynamic-form/components/dynamic-form-chips/dynamic-form-chips.component";
|