@astroapps/forms-core 1.0.2 → 1.1.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/lib/formNode.d.ts +7 -0
- package/lib/formState.d.ts +4 -0
- package/lib/index.cjs +56 -12
- package/lib/index.cjs.map +1 -1
- package/lib/index.js +54 -14
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
- package/src/formNode.ts +45 -0
- package/src/formState.ts +52 -31
package/lib/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ensureMetaValue, newControl, updateComputedValue, addDependent, createSyncEffect, createAsyncEffect, collectChanges, trackedValue, createCleanupScope, createEffect, trackControlChange, ControlChange, createScopedEffect, getControlPath, unsafeRestoreControl
|
|
1
|
+
import { ensureMetaValue, newControl, updateComputedValue, addDependent, createSyncEffect, createAsyncEffect, collectChanges, trackedValue, createCleanupScope, createEffect, trackControlChange, ControlChange, getCurrentFields, getMetaValue, createScopedEffect, getControlPath, unsafeRestoreControl } from '@astroapps/controls';
|
|
2
2
|
import jsonata from 'jsonata';
|
|
3
3
|
import { v4 } from 'uuid';
|
|
4
4
|
|
|
@@ -1074,6 +1074,35 @@ function visitFormDataInContext(parentContext, node, cb) {
|
|
|
1074
1074
|
const dataNode = lookupDataNode(node.definition, parentContext);
|
|
1075
1075
|
return visitFormData(node, dataNode != null ? dataNode : parentContext, cb, !dataNode);
|
|
1076
1076
|
}
|
|
1077
|
+
function visitFormDataNode(node, visitFn) {
|
|
1078
|
+
const dataNode = lookupDataNode(node.formNode.definition, node.parentData);
|
|
1079
|
+
const v = visitFn(node, dataNode);
|
|
1080
|
+
if (v !== undefined) return v;
|
|
1081
|
+
const parentData = dataNode != null ? dataNode : node.parentData;
|
|
1082
|
+
if (parentData.schema.field.collection && parentData.elementIndex == null) {
|
|
1083
|
+
const elemCount = parentData.control.elements.length;
|
|
1084
|
+
for (let i = 0; i < elemCount; i++) {
|
|
1085
|
+
const _v = visitChildren(parentData.getChildElement(i));
|
|
1086
|
+
if (_v !== undefined) return _v;
|
|
1087
|
+
}
|
|
1088
|
+
return undefined;
|
|
1089
|
+
} else {
|
|
1090
|
+
return visitChildren(parentData);
|
|
1091
|
+
}
|
|
1092
|
+
function visitChildren(parentData) {
|
|
1093
|
+
const children = node.formNode.getChildNodes();
|
|
1094
|
+
for (let i = 0; i < children.length; i++) {
|
|
1095
|
+
const child = children[i];
|
|
1096
|
+
const res = visitFormDataNode({
|
|
1097
|
+
formNode: child,
|
|
1098
|
+
parent: node,
|
|
1099
|
+
parentData,
|
|
1100
|
+
childIndex: i
|
|
1101
|
+
}, visitFn);
|
|
1102
|
+
if (res !== undefined) return res;
|
|
1103
|
+
}
|
|
1104
|
+
}
|
|
1105
|
+
}
|
|
1077
1106
|
|
|
1078
1107
|
/**
|
|
1079
1108
|
* Converts a JSON path array to a string.
|
|
@@ -1319,6 +1348,9 @@ function setupValidation(controlImpl, definition, dataNode, schemaInterface, par
|
|
|
1319
1348
|
}, c => {}, controlImpl);
|
|
1320
1349
|
}
|
|
1321
1350
|
|
|
1351
|
+
function getControlStateId(parent, formNode, stateKey) {
|
|
1352
|
+
return parent.id + "$" + formNode.id + (stateKey != null ? stateKey : "");
|
|
1353
|
+
}
|
|
1322
1354
|
function createFormState(schemaInterface, evaluators = defaultEvaluators) {
|
|
1323
1355
|
// console.log("createFormState");
|
|
1324
1356
|
const controlStates = newControl({});
|
|
@@ -1332,9 +1364,17 @@ function createFormState(schemaInterface, evaluators = defaultEvaluators) {
|
|
|
1332
1364
|
// console.log("Cleanup form state");
|
|
1333
1365
|
controlStates.cleanup();
|
|
1334
1366
|
},
|
|
1367
|
+
getExistingControlState(parent, formNode, stateKey) {
|
|
1368
|
+
const stateId = getControlStateId(parent, formNode, stateKey);
|
|
1369
|
+
const control = getCurrentFields(controlStates)[stateId];
|
|
1370
|
+
if (control) {
|
|
1371
|
+
var _getMetaValue;
|
|
1372
|
+
return (_getMetaValue = getMetaValue(control, "impl")) == null ? void 0 : _getMetaValue.value;
|
|
1373
|
+
}
|
|
1374
|
+
return undefined;
|
|
1375
|
+
},
|
|
1335
1376
|
getControlState(parent, formNode, context, runAsync) {
|
|
1336
|
-
|
|
1337
|
-
const stateId = parent.id + "$" + formNode.id + ((_context$stateKey = context.stateKey) != null ? _context$stateKey : "");
|
|
1377
|
+
const stateId = getControlStateId(parent, formNode, context.stateKey);
|
|
1338
1378
|
const controlImpl = controlStates.fields[stateId];
|
|
1339
1379
|
controlImpl.value = context;
|
|
1340
1380
|
function evalExpr(scope, init, nk, e, coerce) {
|
|
@@ -1364,14 +1404,6 @@ function createFormState(schemaInterface, evaluators = defaultEvaluators) {
|
|
|
1364
1404
|
const definition = createOverrideProxy(def, definitionOverrides);
|
|
1365
1405
|
const of = definitionOverrides.fields;
|
|
1366
1406
|
const df = displayOverrides.fields;
|
|
1367
|
-
createScopedEffect(c => {
|
|
1368
|
-
const textDisplay = isDisplayControl(def) && isTextDisplay(def.displayData) ? def.displayData : undefined;
|
|
1369
|
-
evalExpr(c, textDisplay == null ? void 0 : textDisplay.text, df.text, textDisplay && firstExpr(formNode, DynamicPropertyType.Display), coerceString);
|
|
1370
|
-
}, displayOverrides);
|
|
1371
|
-
createScopedEffect(c => {
|
|
1372
|
-
const htmlDisplay = isDisplayControl(def) && isHtmlDisplay(def.displayData) ? def.displayData : undefined;
|
|
1373
|
-
evalExpr(c, htmlDisplay == null ? void 0 : htmlDisplay.html, df.html, htmlDisplay && firstExpr(formNode, DynamicPropertyType.Display), coerceString);
|
|
1374
|
-
}, displayOverrides);
|
|
1375
1407
|
updateComputedValue(of.displayData, () => isDisplayControl(def) ? createOverrideProxy(def.displayData, displayOverrides) : undefined);
|
|
1376
1408
|
createScopedEffect(c => {
|
|
1377
1409
|
evalExpr(c, def.hidden, of.hidden, firstExpr(formNode, DynamicPropertyType.Visible), r => !r);
|
|
@@ -1400,7 +1432,8 @@ function createFormState(schemaInterface, evaluators = defaultEvaluators) {
|
|
|
1400
1432
|
clearHidden: false,
|
|
1401
1433
|
hidden: false,
|
|
1402
1434
|
variables: (_controlImpl$fields$v = controlImpl.fields.variables.current.value) != null ? _controlImpl$fields$v : {},
|
|
1403
|
-
stateId
|
|
1435
|
+
stateId,
|
|
1436
|
+
meta: newControl({})
|
|
1404
1437
|
});
|
|
1405
1438
|
const {
|
|
1406
1439
|
dataNode,
|
|
@@ -1410,11 +1443,13 @@ function createFormState(schemaInterface, evaluators = defaultEvaluators) {
|
|
|
1410
1443
|
layoutStyle,
|
|
1411
1444
|
allowedOptions,
|
|
1412
1445
|
disabled,
|
|
1413
|
-
variables
|
|
1446
|
+
variables,
|
|
1447
|
+
display
|
|
1414
1448
|
} = control.fields;
|
|
1415
1449
|
createScopedEffect(c => evalExpr(c, undefined, style, firstExpr(formNode, DynamicPropertyType.Style), coerceStyle), scope);
|
|
1416
1450
|
createScopedEffect(c => evalExpr(c, undefined, layoutStyle, firstExpr(formNode, DynamicPropertyType.LayoutStyle), coerceStyle), scope);
|
|
1417
1451
|
createScopedEffect(c => evalExpr(c, undefined, allowedOptions, firstExpr(formNode, DynamicPropertyType.AllowedOptions), x => x), scope);
|
|
1452
|
+
createScopedEffect(c => evalExpr(c, undefined, display, firstExpr(formNode, DynamicPropertyType.Display), coerceString), scope);
|
|
1418
1453
|
updateComputedValue(dataNode, () => lookupDataNode(definition, parent));
|
|
1419
1454
|
updateComputedValue(hidden, () => !!cf.hidden.value || definition.hidden || dataNode.value && (!validDataNode(dataNode.value) || hideDisplayOnly(dataNode.value, schemaInterface, definition)));
|
|
1420
1455
|
updateComputedValue(readonly, () => !!cf.readonly.value || isControlReadonly(definition));
|
|
@@ -1429,6 +1464,11 @@ function createFormState(schemaInterface, evaluators = defaultEvaluators) {
|
|
|
1429
1464
|
dn.control.disabled = disabled.value;
|
|
1430
1465
|
}
|
|
1431
1466
|
}, scope);
|
|
1467
|
+
createSyncEffect(() => {
|
|
1468
|
+
if (isDisplayControl(def)) {
|
|
1469
|
+
if (isTextDisplay(def.displayData)) df.text.value = display.value;else if (isHtmlDisplay(def.displayData)) df.html.value = display.value;
|
|
1470
|
+
}
|
|
1471
|
+
}, displayOverrides);
|
|
1432
1472
|
setupValidation(controlImpl, definition, dataNode, schemaInterface, parent, formNode, runAsync);
|
|
1433
1473
|
createSyncEffect(() => {
|
|
1434
1474
|
var _dataNode$value;
|
|
@@ -1522,5 +1562,5 @@ function createOverrideProxy(proxyFor, handlers) {
|
|
|
1522
1562
|
});
|
|
1523
1563
|
}
|
|
1524
1564
|
|
|
1525
|
-
export { ActionStyle, AdornmentPlacement, ControlAdornmentType, ControlDefinitionType, DataRenderType, DateComparison, DefaultSchemaInterface, DisplayDataType, DynamicPropertyType, ExpressionType, FieldType, FormNode, FormTree, GroupRenderType, IconLibrary, IconPlacement, SchemaDataNode, SchemaDataTree, SchemaDataTreeImpl, SchemaNode, SchemaTags, SchemaTree, SyncTextType, ValidationMessageType, ValidatorType, addFieldOption, boolField, buildSchema, compoundField, createControlMap, createFormLookup, createFormState, createFormTree, createOverrideProxy, createSchemaDataNode, createSchemaLookup, createSchemaNode, createSchemaTree, createScoped, createScopedComputed, dateField, dateTimeField, defaultCompoundField, defaultScalarField, defaultSchemaInterface, doubleField, fieldPathForDefinition, findField, fontAwesomeIcon, getDisplayOnlyOptions, getGroupRendererOptions, getJsonPath, getMetaFields, getRootDataNode, getSchemaFieldList, getSchemaNodePath, getSchemaNodePathString, getSchemaPath, getTagParam, hideDisplayOnly, intField, isActionControl, isArrayRenderer, isAutoCompleteClasses, isAutocompleteRenderer, isCheckEntryClasses, isCompoundField, isCompoundNode, isControlDisabled, isControlDisplayOnly, isControlReadonly, isDataControl, isDataGroupRenderer, isDateTimeRenderer, isDialogRenderer, isDisplayControl, isDisplayOnlyRenderer, isFlexRenderer, isGridRenderer, isGroupControl, isHtmlDisplay, isInlineRenderer, isScalarField, isSelectChildRenderer, isTabsRenderer, isTextDisplay, isTextfieldRenderer, isWizardRenderer, jsonPathString, legacyFormNode, lookupDataNode, makeCompoundField, makeParamTag, makeScalarField, makeSchemaDataNode, mergeField, mergeFields, missingField, relativePath, relativeSegmentPath, resolveSchemaNode, resolveSchemas, schemaDataForFieldPath, schemaDataForFieldRef, schemaForFieldPath, schemaForFieldRef, stringField, stringOptionsField, timeField, traverseData, traverseParents, traverseSchemaPath, validDataNode, visitControlData, visitControlDataArray, visitControlDefinition, visitFormData, visitFormDataInContext, withScalarOptions };
|
|
1565
|
+
export { ActionStyle, AdornmentPlacement, ControlAdornmentType, ControlDefinitionType, DataRenderType, DateComparison, DefaultSchemaInterface, DisplayDataType, DynamicPropertyType, ExpressionType, FieldType, FormNode, FormTree, GroupRenderType, IconLibrary, IconPlacement, SchemaDataNode, SchemaDataTree, SchemaDataTreeImpl, SchemaNode, SchemaTags, SchemaTree, SyncTextType, ValidationMessageType, ValidatorType, addFieldOption, boolField, buildSchema, compoundField, createControlMap, createFormLookup, createFormState, createFormTree, createOverrideProxy, createSchemaDataNode, createSchemaLookup, createSchemaNode, createSchemaTree, createScoped, createScopedComputed, dateField, dateTimeField, defaultCompoundField, defaultScalarField, defaultSchemaInterface, doubleField, fieldPathForDefinition, findField, fontAwesomeIcon, getControlStateId, getDisplayOnlyOptions, getGroupRendererOptions, getJsonPath, getMetaFields, getRootDataNode, getSchemaFieldList, getSchemaNodePath, getSchemaNodePathString, getSchemaPath, getTagParam, hideDisplayOnly, intField, isActionControl, isArrayRenderer, isAutoCompleteClasses, isAutocompleteRenderer, isCheckEntryClasses, isCompoundField, isCompoundNode, isControlDisabled, isControlDisplayOnly, isControlReadonly, isDataControl, isDataGroupRenderer, isDateTimeRenderer, isDialogRenderer, isDisplayControl, isDisplayOnlyRenderer, isFlexRenderer, isGridRenderer, isGroupControl, isHtmlDisplay, isInlineRenderer, isScalarField, isSelectChildRenderer, isTabsRenderer, isTextDisplay, isTextfieldRenderer, isWizardRenderer, jsonPathString, legacyFormNode, lookupDataNode, makeCompoundField, makeParamTag, makeScalarField, makeSchemaDataNode, mergeField, mergeFields, missingField, relativePath, relativeSegmentPath, resolveSchemaNode, resolveSchemas, schemaDataForFieldPath, schemaDataForFieldRef, schemaForFieldPath, schemaForFieldRef, stringField, stringOptionsField, timeField, traverseData, traverseParents, traverseSchemaPath, validDataNode, visitControlData, visitControlDataArray, visitControlDefinition, visitFormData, visitFormDataInContext, visitFormDataNode, withScalarOptions };
|
|
1526
1566
|
//# sourceMappingURL=index.js.map
|