@ng-forge/dynamic-forms 1.1.0-next.1 → 1.1.0-next.3
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/README.md +4 -1
- package/fesm2022/{ng-forge-dynamic-forms-array-field.component-CIheZh11.mjs → ng-forge-dynamic-forms-array-field.component-DCHrAcfd.mjs} +2 -2
- package/fesm2022/{ng-forge-dynamic-forms-array-field.component-CIheZh11.mjs.map → ng-forge-dynamic-forms-array-field.component-DCHrAcfd.mjs.map} +1 -1
- package/fesm2022/{ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-C9aVachF.mjs → ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-DWIWQjjZ.mjs} +2 -2
- package/fesm2022/{ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-C9aVachF.mjs.map → ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-DWIWQjjZ.mjs.map} +1 -1
- package/fesm2022/{ng-forge-dynamic-forms-container-field.component-DNafCSO8.mjs → ng-forge-dynamic-forms-container-field.component-CSYhRBe6.mjs} +2 -2
- package/fesm2022/{ng-forge-dynamic-forms-container-field.component-DNafCSO8.mjs.map → ng-forge-dynamic-forms-container-field.component-CSYhRBe6.mjs.map} +1 -1
- package/fesm2022/{ng-forge-dynamic-forms-css-wrapper.component-BmHGlmES.mjs → ng-forge-dynamic-forms-css-wrapper.component-D_yRuLpu.mjs} +4 -3
- package/fesm2022/ng-forge-dynamic-forms-css-wrapper.component-D_yRuLpu.mjs.map +1 -0
- package/fesm2022/{ng-forge-dynamic-forms-group-field.component-CKVIw2K5.mjs → ng-forge-dynamic-forms-group-field.component-DqhHzVsN.mjs} +2 -2
- package/fesm2022/{ng-forge-dynamic-forms-group-field.component-CKVIw2K5.mjs.map → ng-forge-dynamic-forms-group-field.component-DqhHzVsN.mjs.map} +1 -1
- package/fesm2022/ng-forge-dynamic-forms-integration.mjs +17 -56
- package/fesm2022/ng-forge-dynamic-forms-integration.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-internal.mjs +81 -59
- package/fesm2022/ng-forge-dynamic-forms-internal.mjs.map +1 -1
- package/fesm2022/{ng-forge-dynamic-forms-ng-forge-dynamic-forms-CBawLbtp.mjs → ng-forge-dynamic-forms-ng-forge-dynamic-forms-BYyZ_cuA.mjs} +56 -134
- package/fesm2022/ng-forge-dynamic-forms-ng-forge-dynamic-forms-BYyZ_cuA.mjs.map +1 -0
- package/fesm2022/{ng-forge-dynamic-forms-page-field.component-BRixkgyS.mjs → ng-forge-dynamic-forms-page-field.component-Vvk3fYZp.mjs} +2 -2
- package/fesm2022/{ng-forge-dynamic-forms-page-field.component-BRixkgyS.mjs.map → ng-forge-dynamic-forms-page-field.component-Vvk3fYZp.mjs.map} +1 -1
- package/fesm2022/ng-forge-dynamic-forms-testing.mjs +84 -0
- package/fesm2022/ng-forge-dynamic-forms-testing.mjs.map +1 -0
- package/fesm2022/ng-forge-dynamic-forms.mjs +1 -1
- package/package.json +5 -1
- package/types/ng-forge-dynamic-forms-integration.d.ts +6 -54
- package/types/ng-forge-dynamic-forms-internal.d.ts +41 -10
- package/types/ng-forge-dynamic-forms-testing.d.ts +58 -0
- package/types/ng-forge-dynamic-forms.d.ts +1 -1
- package/fesm2022/ng-forge-dynamic-forms-css-wrapper.component-BmHGlmES.mjs.map +0 -1
- package/fesm2022/ng-forge-dynamic-forms-ng-forge-dynamic-forms-CBawLbtp.mjs.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { reflectComponentType, Injector, inject, EnvironmentInjector, DestroyRef, computed, signal, input, ViewContainerRef, Directive, linkedSignal, ChangeDetectionStrategy, Component, Injectable, InjectionToken, isSignal, runInInjectionContext, afterNextRender, untracked, PendingTasks, ElementRef, PLATFORM_ID, isDevMode, TemplateRef, model, contentChildren, makeEnvironmentProviders } from '@angular/core';
|
|
3
3
|
import { explicitEffect } from 'ngxtension/explicit-effect';
|
|
4
|
-
import { DynamicFormLogger, WRAPPER_COMPONENT_CACHE, WRAPPER_REGISTRY, toReadonlyFieldTreeCached, writeToFieldValue, WRAPPER_AUTO_ASSOCIATIONS, DEFAULT_WRAPPERS, READONLY_FIELD_TREE_CACHE, EventBus, FieldContextRegistryService, FunctionRegistryService, FORM_OPTIONS, evaluateCondition, FIELD_SIGNAL_CONTEXT, isRowField, isContainerField, isArrayField, hasChildFields, isSimplifiedArrayField, DynamicFormError, isStateLogicConfig, isDerivationLogicConfig, createDebouncedLogicFunction, createLogicFunction, ExpressionParser, applyValidator, isPageField, isGenericContainerField, isGroupField, getFieldValueHandling, normalizeFieldsArray, getNestedValue,
|
|
4
|
+
import { DynamicFormLogger, WRAPPER_COMPONENT_CACHE, WRAPPER_REGISTRY, toReadonlyFieldTreeCached, writeToFieldValue, WRAPPER_AUTO_ASSOCIATIONS, DEFAULT_WRAPPERS, READONLY_FIELD_TREE_CACHE, getGridClassString, EventBus, FieldContextRegistryService, FunctionRegistryService, FORM_OPTIONS, evaluateCondition, FIELD_SIGNAL_CONTEXT, isRowField, isContainerField, isArrayField, hasChildFields, isSimplifiedArrayField, DynamicFormError, isStateLogicConfig, isDerivationLogicConfig, createDebouncedLogicFunction, createLogicFunction, ExpressionParser, requiresTreeValidation, applyValidator, isPageField, isGenericContainerField, isGroupField, getFieldValueHandling, normalizeFieldsArray, getNestedValue, extractStringDependencies, isCrossFieldStateLogic, extractExpressionDependencies, isCrossFieldSchema, keyBy, mapValues, isEqual, hasTargetProperty, ARRAY_CONTEXT, GROUP_CONTEXT, FORM_ID_PREFIX, baseFieldMapper, detectFormMode, validatePageNesting, FIELD_REGISTRY, assertNever, ADDON_TYPE_REGISTRY, deepMergeDefaults, derivedFromDeferred, createWarningTracker, RootFormRegistryService, DEFAULT_PROPS, DEFAULT_VALIDATION_MESSAGES, EXTERNAL_DATA, DEPRECATION_WARNING_TRACKER, createAddonActionRegistry, ADDON_ACTION_REGISTRY, HttpConditionCache, HTTP_CONDITION_CACHE, HttpConditionFunctionCacheService, AsyncConditionFunctionCacheService, DynamicValueFunctionCacheService, LogicFunctionCacheService, setupInitializationTracking, ComponentInitializedEvent, DF_FIELD_TEMPLATES, rowFieldMapper, groupFieldMapper, arrayFieldMapper, pageFieldMapper, textFieldMapper, containerFieldMapper, isWrapperTypeDefinition, ADDON_TYPE_COMPONENT_CACHE, ADDON_TYPE_DEFINITIONS, createDefaultDerivationLogConfig, NoopLogger, EMIT_FORM_VALUE_ON_EVENTS, DynamicTextPipe, ADDON_ACTION_HANDLERS } from '@ng-forge/dynamic-forms/internal';
|
|
5
5
|
import { takeUntilDestroyed, toObservable, toSignal, outputFromObservable } from '@angular/core/rxjs-interop';
|
|
6
6
|
import { of, forkJoin, from, catchError, map, switchMap, isObservable, firstValueFrom, exhaustMap, EMPTY, debounceTime, distinctUntilChanged, tap, pipe, scan, Observable, Subject, concatMap, filter, take } from 'rxjs';
|
|
7
7
|
import { submit, required, disabled, readonly, hidden, applyEach, applyWhenValue, applyWhen, apply, email, minLength, maxLength, pattern, min, max, schema, validateStandardSchema, validateTree, form, provideSignalFormsConfig } from '@angular/forms/signals';
|
|
@@ -81,6 +81,12 @@ function loadWrapperComponents(configs, registry, cache, logger) {
|
|
|
81
81
|
function renderWrapperChain(options) {
|
|
82
82
|
const refs = [];
|
|
83
83
|
renderStep(options.outerContainer, options.loadedWrappers, options, refs);
|
|
84
|
+
if (options.outermostHostClasses && refs.length > 0) {
|
|
85
|
+
const tokens = options.outermostHostClasses.split(/\s+/).filter(Boolean);
|
|
86
|
+
if (tokens.length > 0) {
|
|
87
|
+
refs[0].location.nativeElement.classList.add(...tokens);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
84
90
|
return refs;
|
|
85
91
|
}
|
|
86
92
|
function renderStep(slot, remaining, options, refs) {
|
|
@@ -218,6 +224,7 @@ function applyEmission({ state, loaded }, ctx) {
|
|
|
218
224
|
logger: deps.logger,
|
|
219
225
|
fieldInputs: opts.fieldInputs?.(),
|
|
220
226
|
fieldInjector: opts.fieldInjector?.(),
|
|
227
|
+
outermostHostClasses: opts.outermostHostClasses?.(),
|
|
221
228
|
renderInnermost: opts.renderInnermost,
|
|
222
229
|
});
|
|
223
230
|
mounted.value = { wrappers: state.wrappers, rebuildKey: state.rebuildKey };
|
|
@@ -366,6 +373,8 @@ class DfFieldOutlet {
|
|
|
366
373
|
...(ngDevMode ? [{ debugName: "fieldEnvInjector" }] : /* istanbul ignore next */ []));
|
|
367
374
|
fieldInjector = computed(() => this.dfFieldOutlet().injector, /* @ts-ignore */
|
|
368
375
|
...(ngDevMode ? [{ debugName: "fieldInjector" }] : /* istanbul ignore next */ []));
|
|
376
|
+
outermostHostClasses = computed(() => getGridClassString(this.dfFieldOutlet().fieldDef) || undefined, /* @ts-ignore */
|
|
377
|
+
...(ngDevMode ? [{ debugName: "outermostHostClasses" }] : /* istanbul ignore next */ []));
|
|
369
378
|
constructor() {
|
|
370
379
|
createWrapperChainController({
|
|
371
380
|
vcr: this.vcr,
|
|
@@ -374,6 +383,7 @@ class DfFieldOutlet {
|
|
|
374
383
|
rebuildKey: this.componentIdentity,
|
|
375
384
|
fieldInputs: this.fieldInputs,
|
|
376
385
|
fieldInjector: this.fieldInjector,
|
|
386
|
+
outermostHostClasses: this.outermostHostClasses,
|
|
377
387
|
beforeRebuild: () => this.fieldComponent.detach(),
|
|
378
388
|
renderInnermost: (slot) => {
|
|
379
389
|
const resolved = this.dfFieldOutlet();
|
|
@@ -822,11 +832,11 @@ class PageOrchestratorComponent {
|
|
|
822
832
|
}
|
|
823
833
|
}
|
|
824
834
|
`, isInline: true, styles: [":host{display:block;position:relative;width:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, deferBlockDependencies: [() => [/* @ts-ignore */
|
|
825
|
-
import('./ng-forge-dynamic-forms-page-field.component-
|
|
826
|
-
import('./ng-forge-dynamic-forms-page-field.component-
|
|
835
|
+
import('./ng-forge-dynamic-forms-page-field.component-Vvk3fYZp.mjs').then(m => m.default)], () => [/* @ts-ignore */
|
|
836
|
+
import('./ng-forge-dynamic-forms-page-field.component-Vvk3fYZp.mjs').then(m => m.default)]] });
|
|
827
837
|
}
|
|
828
838
|
i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "22.0.1", ngImport: i0, type: PageOrchestratorComponent, resolveDeferredDeps: () => [/* @ts-ignore */
|
|
829
|
-
import('./ng-forge-dynamic-forms-page-field.component-
|
|
839
|
+
import('./ng-forge-dynamic-forms-page-field.component-Vvk3fYZp.mjs').then(m => m.default)], resolveMetadata: PageFieldComponent => ({ decorators: [{
|
|
830
840
|
type: Component,
|
|
831
841
|
args: [{ selector: 'div[page-orchestrator]', imports: [PageFieldComponent], template: `
|
|
832
842
|
@for (pageField of pageFields(); track pageField.key; let i = $index) {
|
|
@@ -1215,7 +1225,7 @@ function applySchema(config, fieldPath) {
|
|
|
1215
1225
|
`Ensure the schema is registered in your schema registry.`);
|
|
1216
1226
|
return;
|
|
1217
1227
|
}
|
|
1218
|
-
const schemaFn = createSchemaFunction(schema);
|
|
1228
|
+
const schemaFn = createSchemaFunction(schema, logger);
|
|
1219
1229
|
const path = fieldPath;
|
|
1220
1230
|
switch (config.type) {
|
|
1221
1231
|
case 'apply':
|
|
@@ -1238,9 +1248,14 @@ function applySchema(config, fieldPath) {
|
|
|
1238
1248
|
break;
|
|
1239
1249
|
}
|
|
1240
1250
|
}
|
|
1241
|
-
function createSchemaFunction(schema) {
|
|
1251
|
+
function createSchemaFunction(schema, logger) {
|
|
1242
1252
|
return (path) => {
|
|
1243
1253
|
schema.validators?.forEach((validatorConfig) => {
|
|
1254
|
+
if (requiresTreeValidation(validatorConfig)) {
|
|
1255
|
+
logger?.warn(`Validator "${validatorConfig.type}" in schema definition "${schema.name}" uses a cross-field expression, ` +
|
|
1256
|
+
`which is not supported on schema definition validators; it was skipped.`);
|
|
1257
|
+
return;
|
|
1258
|
+
}
|
|
1244
1259
|
applyValidator(validatorConfig, path);
|
|
1245
1260
|
});
|
|
1246
1261
|
schema.logic?.forEach((logicConfig) => {
|
|
@@ -1702,7 +1717,6 @@ const VALIDATION_EXECUTION_DEFAULTS = new InjectionToken('VALIDATION_EXECUTION_D
|
|
|
1702
1717
|
}),
|
|
1703
1718
|
});
|
|
1704
1719
|
|
|
1705
|
-
const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
1706
1720
|
function getFieldTreeByKey(ctx, key) {
|
|
1707
1721
|
if (!key.includes('.')) {
|
|
1708
1722
|
return ctx.fieldTree[key];
|
|
@@ -1765,12 +1779,19 @@ function createSchemaFromFields(fields, registry, optionsOrValidators) {
|
|
|
1765
1779
|
}
|
|
1766
1780
|
function applyCrossFieldTreeValidator(rootPath, validators, functionRegistry, logger) {
|
|
1767
1781
|
const customFunctions = functionRegistry.getCustomFunctions();
|
|
1782
|
+
const customValidators = validators.filter((entry) => {
|
|
1783
|
+
if (entry.config.type !== 'custom') {
|
|
1784
|
+
logger.warn(`Unexpected non-custom validator in cross-field tree for "${entry.sourceFieldKey}"; ignoring.`);
|
|
1785
|
+
return false;
|
|
1786
|
+
}
|
|
1787
|
+
return true;
|
|
1788
|
+
});
|
|
1768
1789
|
validateTree(rootPath, (ctx) => {
|
|
1769
|
-
if (
|
|
1790
|
+
if (customValidators.length === 0) {
|
|
1770
1791
|
return null; }
|
|
1771
1792
|
const formValue = ctx.value();
|
|
1772
1793
|
const errors = [];
|
|
1773
|
-
for (const entry of
|
|
1794
|
+
for (const entry of customValidators) {
|
|
1774
1795
|
const { sourceFieldKey, config } = entry;
|
|
1775
1796
|
try {
|
|
1776
1797
|
const error = evaluateCrossFieldValidator(entry, formValue, sourceFieldKey, ctx, customFunctions, logger);
|
|
@@ -1803,12 +1824,7 @@ function evaluateCrossFieldValidator(entry, formValue, sourceFieldKey, ctx, cust
|
|
|
1803
1824
|
customFunctions,
|
|
1804
1825
|
logger,
|
|
1805
1826
|
};
|
|
1806
|
-
if (config.type === 'custom') {
|
|
1807
1827
|
return evaluateCustomCrossFieldValidator(config, evaluationContext, sourceFieldKey, ctx);
|
|
1808
|
-
}
|
|
1809
|
-
else {
|
|
1810
|
-
return evaluateBuiltInCrossFieldValidator(config, evaluationContext, sourceFieldKey, ctx);
|
|
1811
|
-
}
|
|
1812
1828
|
}
|
|
1813
1829
|
function evaluateCustomCrossFieldValidator(config, evaluationContext, sourceFieldKey, ctx) {
|
|
1814
1830
|
if (!config.expression) {
|
|
@@ -1851,91 +1867,6 @@ function evaluateCustomCrossFieldValidator(config, evaluationContext, sourceFiel
|
|
|
1851
1867
|
}
|
|
1852
1868
|
return errorObj;
|
|
1853
1869
|
}
|
|
1854
|
-
function evaluateBuiltInCrossFieldValidator(config, evaluationContext, sourceFieldKey, ctx) {
|
|
1855
|
-
const { fieldValue, formValue, logger, customFunctions } = evaluationContext;
|
|
1856
|
-
if (config.when) {
|
|
1857
|
-
const conditionMet = evaluateCondition(config.when, {
|
|
1858
|
-
fieldValue,
|
|
1859
|
-
formValue,
|
|
1860
|
-
fieldPath: sourceFieldKey,
|
|
1861
|
-
customFunctions: customFunctions || {},
|
|
1862
|
-
logger,
|
|
1863
|
-
});
|
|
1864
|
-
if (!conditionMet) {
|
|
1865
|
-
return null; }
|
|
1866
|
-
}
|
|
1867
|
-
const isValid = applyBuiltInValidationLogic(config, fieldValue);
|
|
1868
|
-
if (isValid) {
|
|
1869
|
-
return null; }
|
|
1870
|
-
const targetField = getFieldTreeByKey(ctx, sourceFieldKey);
|
|
1871
|
-
if (!targetField) {
|
|
1872
|
-
logger.warn(`Cross-field validator references non-existent field "${sourceFieldKey}"`);
|
|
1873
|
-
return null;
|
|
1874
|
-
}
|
|
1875
|
-
return {
|
|
1876
|
-
kind: config.type,
|
|
1877
|
-
fieldTree: targetField,
|
|
1878
|
-
};
|
|
1879
|
-
}
|
|
1880
|
-
function applyBuiltInValidationLogic(config, fieldValue) {
|
|
1881
|
-
switch (config.type) {
|
|
1882
|
-
case 'required':
|
|
1883
|
-
if (fieldValue === null || fieldValue === undefined) {
|
|
1884
|
-
return false;
|
|
1885
|
-
}
|
|
1886
|
-
if (typeof fieldValue === 'string' && fieldValue.trim() === '') {
|
|
1887
|
-
return false;
|
|
1888
|
-
}
|
|
1889
|
-
return true;
|
|
1890
|
-
case 'min':
|
|
1891
|
-
if (fieldValue === null || fieldValue === undefined) {
|
|
1892
|
-
return true; }
|
|
1893
|
-
if ('value' in config && typeof config.value === 'number') {
|
|
1894
|
-
return fieldValue >= config.value;
|
|
1895
|
-
}
|
|
1896
|
-
return true;
|
|
1897
|
-
case 'max':
|
|
1898
|
-
if (fieldValue === null || fieldValue === undefined) {
|
|
1899
|
-
return true;
|
|
1900
|
-
}
|
|
1901
|
-
if ('value' in config && typeof config.value === 'number') {
|
|
1902
|
-
return fieldValue <= config.value;
|
|
1903
|
-
}
|
|
1904
|
-
return true;
|
|
1905
|
-
case 'minLength':
|
|
1906
|
-
if (fieldValue === null || fieldValue === undefined || fieldValue === '') {
|
|
1907
|
-
return true;
|
|
1908
|
-
}
|
|
1909
|
-
if ('value' in config && typeof config.value === 'number') {
|
|
1910
|
-
return String(fieldValue).length >= config.value;
|
|
1911
|
-
}
|
|
1912
|
-
return true;
|
|
1913
|
-
case 'maxLength':
|
|
1914
|
-
if (fieldValue === null || fieldValue === undefined || fieldValue === '') {
|
|
1915
|
-
return true;
|
|
1916
|
-
}
|
|
1917
|
-
if ('value' in config && typeof config.value === 'number') {
|
|
1918
|
-
return String(fieldValue).length <= config.value;
|
|
1919
|
-
}
|
|
1920
|
-
return true;
|
|
1921
|
-
case 'email':
|
|
1922
|
-
if (fieldValue === null || fieldValue === undefined || fieldValue === '') {
|
|
1923
|
-
return true;
|
|
1924
|
-
}
|
|
1925
|
-
return emailPattern.test(String(fieldValue));
|
|
1926
|
-
case 'pattern':
|
|
1927
|
-
if (fieldValue === null || fieldValue === undefined || fieldValue === '') {
|
|
1928
|
-
return true;
|
|
1929
|
-
}
|
|
1930
|
-
if ('value' in config && config.value) {
|
|
1931
|
-
const regex = config.value instanceof RegExp ? config.value : new RegExp(String(config.value));
|
|
1932
|
-
return regex.test(String(fieldValue));
|
|
1933
|
-
}
|
|
1934
|
-
return true;
|
|
1935
|
-
default:
|
|
1936
|
-
return true;
|
|
1937
|
-
}
|
|
1938
|
-
}
|
|
1939
1870
|
function fieldsToDefaultValues(fields, registry) {
|
|
1940
1871
|
const defaultValues = {};
|
|
1941
1872
|
for (const field of fields) {
|
|
@@ -2007,38 +1938,25 @@ function collectFromField(field, collection, pathPrefix) {
|
|
|
2007
1938
|
}
|
|
2008
1939
|
}
|
|
2009
1940
|
function tryCreateValidatorEntry(fieldKey, config) {
|
|
2010
|
-
|
|
1941
|
+
if (!requiresTreeValidation(config)) {
|
|
1942
|
+
return null; }
|
|
1943
|
+
if (config.type === 'custom') {
|
|
2011
1944
|
const customConfig = config;
|
|
2012
|
-
if (isCrossFieldValidator(customConfig)) {
|
|
2013
|
-
return {
|
|
2014
|
-
sourceFieldKey: fieldKey,
|
|
2015
|
-
config,
|
|
2016
|
-
dependsOn: extractStringDependencies(customConfig.expression || ''),
|
|
2017
|
-
category: 'validator',
|
|
2018
|
-
};
|
|
2019
|
-
}
|
|
2020
|
-
}
|
|
2021
|
-
if (isCrossFieldBuiltInValidator(config)) {
|
|
2022
|
-
const builtInConfig = config;
|
|
2023
|
-
return {
|
|
2024
|
-
sourceFieldKey: fieldKey,
|
|
2025
|
-
config: convertBuiltInToCustomValidator(builtInConfig),
|
|
2026
|
-
validatorType: config.type,
|
|
2027
|
-
dependsOn: extractStringDependencies(builtInConfig.expression || ''),
|
|
2028
|
-
category: 'validator',
|
|
2029
|
-
};
|
|
2030
|
-
}
|
|
2031
|
-
if (hasCrossFieldWhenCondition(config)) {
|
|
2032
|
-
const whenCondition = config.when;
|
|
2033
1945
|
return {
|
|
2034
1946
|
sourceFieldKey: fieldKey,
|
|
2035
1947
|
config,
|
|
2036
|
-
|
|
2037
|
-
dependsOn: extractExpressionDependencies(whenCondition),
|
|
1948
|
+
dependsOn: extractStringDependencies(customConfig.expression || ''),
|
|
2038
1949
|
category: 'validator',
|
|
2039
1950
|
};
|
|
2040
1951
|
}
|
|
2041
|
-
|
|
1952
|
+
const builtInConfig = config;
|
|
1953
|
+
return {
|
|
1954
|
+
sourceFieldKey: fieldKey,
|
|
1955
|
+
config: convertBuiltInToCustomValidator(builtInConfig),
|
|
1956
|
+
validatorType: config.type,
|
|
1957
|
+
dependsOn: extractStringDependencies(builtInConfig.expression || ''),
|
|
1958
|
+
category: 'validator',
|
|
1959
|
+
};
|
|
2042
1960
|
}
|
|
2043
1961
|
function tryCreateLogicEntry(fieldKey, config) {
|
|
2044
1962
|
if (!isStateLogicConfig(config)) {
|
|
@@ -3932,16 +3850,20 @@ class FormStateManager {
|
|
|
3932
3850
|
this.deps.value.set(value);
|
|
3933
3851
|
}
|
|
3934
3852
|
reset() {
|
|
3853
|
+
const rootField = this.form()();
|
|
3935
3854
|
this.excludedValueStore.set({});
|
|
3936
3855
|
const defaults = this.defaultValues();
|
|
3937
|
-
|
|
3856
|
+
rootField.value.set(defaults);
|
|
3938
3857
|
this.deps.value.set(defaults);
|
|
3858
|
+
rootField.reset();
|
|
3939
3859
|
}
|
|
3940
3860
|
clear() {
|
|
3861
|
+
const rootField = this.form()();
|
|
3941
3862
|
this.excludedValueStore.set({});
|
|
3942
3863
|
const emptyValue = {};
|
|
3943
|
-
|
|
3864
|
+
rootField.value.set(emptyValue);
|
|
3944
3865
|
this.deps.value.set(emptyValue);
|
|
3866
|
+
rootField.reset();
|
|
3945
3867
|
}
|
|
3946
3868
|
submit() {
|
|
3947
3869
|
this.eventBus.dispatch(FormSubmitEvent);
|
|
@@ -4172,7 +4094,7 @@ function createDerivationRenderGate() {
|
|
|
4172
4094
|
if (!has || engine() !== 'idle')
|
|
4173
4095
|
return;
|
|
4174
4096
|
engine.set('loading');
|
|
4175
|
-
pendingTasks.run(() => import('./ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-
|
|
4097
|
+
pendingTasks.run(() => import('./ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-DWIWQjjZ.mjs')
|
|
4176
4098
|
.then(({ bootstrapDerivationOrchestrator }) => {
|
|
4177
4099
|
runInInjectionContext(injector, () => bootstrapDerivationOrchestrator());
|
|
4178
4100
|
engine.set('wired');
|
|
@@ -4671,28 +4593,28 @@ const DISPLAY_FIELD_TYPES_BASE = {
|
|
|
4671
4593
|
const BUILT_IN_FIELDS = [
|
|
4672
4594
|
{
|
|
4673
4595
|
name: 'row',
|
|
4674
|
-
loadComponent: () => import('./ng-forge-dynamic-forms-container-field.component-
|
|
4596
|
+
loadComponent: () => import('./ng-forge-dynamic-forms-container-field.component-CSYhRBe6.mjs'),
|
|
4675
4597
|
mapper: rowFieldMapper,
|
|
4676
4598
|
valueHandling: 'flatten',
|
|
4677
4599
|
...CONTAINER_FIELD_TYPES_BASE,
|
|
4678
4600
|
},
|
|
4679
4601
|
{
|
|
4680
4602
|
name: 'group',
|
|
4681
|
-
loadComponent: () => import('./ng-forge-dynamic-forms-group-field.component-
|
|
4603
|
+
loadComponent: () => import('./ng-forge-dynamic-forms-group-field.component-DqhHzVsN.mjs'),
|
|
4682
4604
|
mapper: groupFieldMapper,
|
|
4683
4605
|
valueHandling: 'include',
|
|
4684
4606
|
...CONTAINER_FIELD_TYPES_BASE,
|
|
4685
4607
|
},
|
|
4686
4608
|
{
|
|
4687
4609
|
name: 'array',
|
|
4688
|
-
loadComponent: () => import('./ng-forge-dynamic-forms-array-field.component-
|
|
4610
|
+
loadComponent: () => import('./ng-forge-dynamic-forms-array-field.component-DCHrAcfd.mjs'),
|
|
4689
4611
|
mapper: arrayFieldMapper,
|
|
4690
4612
|
valueHandling: 'include',
|
|
4691
4613
|
...CONTAINER_FIELD_TYPES_BASE,
|
|
4692
4614
|
},
|
|
4693
4615
|
{
|
|
4694
4616
|
name: 'page',
|
|
4695
|
-
loadComponent: () => import('./ng-forge-dynamic-forms-page-field.component-
|
|
4617
|
+
loadComponent: () => import('./ng-forge-dynamic-forms-page-field.component-Vvk3fYZp.mjs'),
|
|
4696
4618
|
mapper: pageFieldMapper,
|
|
4697
4619
|
valueHandling: 'flatten',
|
|
4698
4620
|
...CONTAINER_FIELD_TYPES_BASE,
|
|
@@ -4710,7 +4632,7 @@ const BUILT_IN_FIELDS = [
|
|
|
4710
4632
|
},
|
|
4711
4633
|
{
|
|
4712
4634
|
name: 'container',
|
|
4713
|
-
loadComponent: () => import('./ng-forge-dynamic-forms-container-field.component-
|
|
4635
|
+
loadComponent: () => import('./ng-forge-dynamic-forms-container-field.component-CSYhRBe6.mjs'),
|
|
4714
4636
|
mapper: containerFieldMapper,
|
|
4715
4637
|
valueHandling: 'flatten',
|
|
4716
4638
|
...CONTAINER_FIELD_TYPES_BASE,
|
|
@@ -4719,7 +4641,7 @@ const BUILT_IN_FIELDS = [
|
|
|
4719
4641
|
const BUILT_IN_WRAPPERS = [
|
|
4720
4642
|
{
|
|
4721
4643
|
wrapperName: 'css',
|
|
4722
|
-
loadComponent: () => import('./ng-forge-dynamic-forms-css-wrapper.component-
|
|
4644
|
+
loadComponent: () => import('./ng-forge-dynamic-forms-css-wrapper.component-D_yRuLpu.mjs'),
|
|
4723
4645
|
},
|
|
4724
4646
|
{
|
|
4725
4647
|
wrapperName: 'row',
|
|
@@ -5114,4 +5036,4 @@ function arrayEvent(arrayKey) {
|
|
|
5114
5036
|
|
|
5115
5037
|
|
|
5116
5038
|
export { withValueExclusionDefaults as $, ArrayItemRegistryService as A, BUILT_IN_FIELDS as B, CONTAINER_FIELD_PROCESSORS as C, DfFieldOutlet as D, EventDispatcher as E, FormStateManager as F, PrependArrayItemEvent as G, PreviousPageEvent as H, InsertArrayItemEvent as I, TextAddonComponent as J, arrayEvent as K, createWrappers as L, MoveArrayItemEvent as M, NextPageEvent as N, isWrappersBundle as O, PROPERTY_OVERRIDE_STORE as P, provideDynamicForm as Q, RemoveAtIndexEvent as R, ShiftArrayItemEvent as S, TemplateAddonComponent as T, sanitizeFormConfig as U, withAddonActions as V, withCustomAddon as W, withEventFormValue as X, withLegacyStatusClasses as Y, withLoggerConfig as Z, withValidationExecutionDefaults as _, isSameWrapperChain as a, wrapperProps as a0, createWrapperChainController as b, createFieldResolutionPipe as c, createSchemaFromFields as d, createHiddenSignal as e, createRenderReadySignal as f, getNormalizedArrayMetadata as g, getFieldDefaultValue as h, injectFieldRegistry as i, DEV_MODE as j, DEFAULT_DEBOUNCE_MS as k, DERIVATION_WARNING_TRACKER as l, mapFieldToInputs as m, DERIVATION_LOG_CONFIG as n, AppendArrayItemEvent as o, ComponentAddonComponent as p, ConsoleLogger as q, resolveWrappers as r, DfTemplate as s, traverseFieldsWithContext as t, DynamicForm as u, FormClearEvent as v, FormResetEvent as w, FormSubmitEvent as x, PageChangeEvent as y, PopArrayItemEvent as z };
|
|
5117
|
-
//# sourceMappingURL=ng-forge-dynamic-forms-ng-forge-dynamic-forms-
|
|
5039
|
+
//# sourceMappingURL=ng-forge-dynamic-forms-ng-forge-dynamic-forms-BYyZ_cuA.mjs.map
|