@aemforms/af-core 0.22.42 → 0.22.44
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/BaseNode.js +7 -1
- package/lib/Container.d.ts +1 -0
- package/lib/Container.js +30 -15
- package/lib/Field.d.ts +8 -5
- package/lib/Field.js +46 -18
- package/lib/Form.d.ts +1 -1
- package/lib/Form.js +3 -1
- package/lib/controller/Events.d.ts +6 -0
- package/lib/controller/Events.js +13 -1
- package/lib/rules/FunctionRuntime.js +12 -2
- package/lib/types/Json.d.ts +59 -1
- package/lib/types/Json.js +77 -1
- package/lib/utils/FormUtils.d.ts +1 -0
- package/lib/utils/FormUtils.js +8 -1
- package/lib/utils/TranslationUtils.js +5 -0
- package/package.json +2 -2
package/lib/BaseNode.js
CHANGED
|
@@ -198,7 +198,13 @@ class BaseNode {
|
|
|
198
198
|
return this._jsonModel.dataRef;
|
|
199
199
|
}
|
|
200
200
|
get visible() {
|
|
201
|
-
|
|
201
|
+
var _a, _b;
|
|
202
|
+
if (((_a = this.parent) === null || _a === void 0 ? void 0 : _a.visible) !== undefined) {
|
|
203
|
+
return ((_b = this.parent) === null || _b === void 0 ? void 0 : _b.visible) ? this._jsonModel.visible : false;
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
return this._jsonModel.visible;
|
|
207
|
+
}
|
|
202
208
|
}
|
|
203
209
|
set visible(v) {
|
|
204
210
|
if (v !== this._jsonModel.visible) {
|
package/lib/Container.d.ts
CHANGED
|
@@ -22,6 +22,7 @@ declare abstract class Container<T extends ContainerJson & RulesJson> extends Sc
|
|
|
22
22
|
private _activeChild;
|
|
23
23
|
private isSiteContainer;
|
|
24
24
|
private isAFormField;
|
|
25
|
+
private _getFormAndSitesState;
|
|
25
26
|
private getItemsState;
|
|
26
27
|
getState(isRepeatableChild?: boolean): T & {
|
|
27
28
|
items: any[];
|
package/lib/Container.js
CHANGED
|
@@ -66,24 +66,33 @@ class Container extends Scriptable_1.default {
|
|
|
66
66
|
isAFormField(item) {
|
|
67
67
|
return ('fieldType' in item || 'id' in item || 'name' in item || 'dataRef' in item || 'type' in item);
|
|
68
68
|
}
|
|
69
|
+
_getFormAndSitesState(isRepeatableChild = false) {
|
|
70
|
+
return this._jsonModel.items ? this._jsonModel.items.map((x) => {
|
|
71
|
+
if (this.isSiteContainer(x)) {
|
|
72
|
+
const newObjWithId = Object.assign({}, ((x === null || x === void 0 ? void 0 : x.id) ? { id: this.form.getUniqueId() } : {}));
|
|
73
|
+
return Object.assign(Object.assign(Object.assign({}, x), newObjWithId), { ':items': this.walkSiteContainerItems(x) });
|
|
74
|
+
}
|
|
75
|
+
else if (this.isAFormField(x)) {
|
|
76
|
+
return Object.assign({}, this.form.getElement(x === null || x === void 0 ? void 0 : x.id).getState(isRepeatableChild));
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
return x;
|
|
80
|
+
}
|
|
81
|
+
}) : [];
|
|
82
|
+
}
|
|
69
83
|
getItemsState(isRepeatableChild = false) {
|
|
70
84
|
if (this._jsonModel.type === 'array' || (0, JsonUtils_1.isRepeatable)(this._jsonModel) || isRepeatableChild) {
|
|
71
|
-
|
|
72
|
-
return
|
|
73
|
-
}
|
|
85
|
+
if (isRepeatableChild) {
|
|
86
|
+
return this._getFormAndSitesState(isRepeatableChild);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
return this._children.map(x => {
|
|
90
|
+
return Object.assign({}, x.getState(true));
|
|
91
|
+
});
|
|
92
|
+
}
|
|
74
93
|
}
|
|
75
94
|
else {
|
|
76
|
-
return this.
|
|
77
|
-
if (this.isSiteContainer(x)) {
|
|
78
|
-
return Object.assign(Object.assign({}, x), { ':items': this.walkSiteContainerItems(x) });
|
|
79
|
-
}
|
|
80
|
-
else if (this.isAFormField(x)) {
|
|
81
|
-
return Object.assign({}, this.form.getElement(x === null || x === void 0 ? void 0 : x.id).getState(isRepeatableChild));
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
return x;
|
|
85
|
-
}
|
|
86
|
-
}) : [];
|
|
95
|
+
return this._getFormAndSitesState(isRepeatableChild);
|
|
87
96
|
}
|
|
88
97
|
}
|
|
89
98
|
getState(isRepeatableChild = false) {
|
|
@@ -105,7 +114,13 @@ class Container extends Scriptable_1.default {
|
|
|
105
114
|
return this.walkSiteContainerItems(value);
|
|
106
115
|
}
|
|
107
116
|
else {
|
|
108
|
-
|
|
117
|
+
if (typeof value === 'object') {
|
|
118
|
+
const newObjWithId = Object.assign({}, ((value === null || value === void 0 ? void 0 : value.id) ? { 'id': this.form.getUniqueId() } : {}));
|
|
119
|
+
return [key, Object.assign(Object.assign({}, value), newObjWithId)];
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
return [key, value];
|
|
123
|
+
}
|
|
109
124
|
}
|
|
110
125
|
}));
|
|
111
126
|
}
|
package/lib/Field.d.ts
CHANGED
|
@@ -32,12 +32,13 @@ declare class Field extends Scriptable<FieldJson> implements FieldModel {
|
|
|
32
32
|
set readOnly(e: boolean | undefined);
|
|
33
33
|
get enabled(): boolean | undefined;
|
|
34
34
|
set enabled(e: boolean | undefined);
|
|
35
|
-
get valid():
|
|
35
|
+
get valid(): any;
|
|
36
|
+
get validity(): any;
|
|
36
37
|
get emptyValue(): "" | null | undefined;
|
|
37
38
|
get enum(): any[] | undefined;
|
|
38
39
|
set enum(e: any[] | undefined);
|
|
39
|
-
get enumNames(): string[] | undefined;
|
|
40
|
-
set enumNames(e: string[] | undefined);
|
|
40
|
+
get enumNames(): string[] | import("./types").EnumName[] | undefined;
|
|
41
|
+
set enumNames(e: string[] | import("./types").EnumName[] | undefined);
|
|
41
42
|
get required(): boolean;
|
|
42
43
|
set required(r: boolean);
|
|
43
44
|
get maximum(): number | undefined;
|
|
@@ -158,7 +159,7 @@ declare class Field extends Scriptable<FieldJson> implements FieldModel {
|
|
|
158
159
|
description?: string | undefined;
|
|
159
160
|
rules: import("./types").Items<string> & {};
|
|
160
161
|
events: import("./types").Items<string | string[] | undefined> & {};
|
|
161
|
-
enumNames?: string[] | undefined;
|
|
162
|
+
enumNames?: string[] | import("./types").EnumName[] | undefined;
|
|
162
163
|
enum?: any[] | undefined;
|
|
163
164
|
accept?: string[] | undefined;
|
|
164
165
|
enforceEnum?: boolean | undefined;
|
|
@@ -199,6 +200,8 @@ declare class Field extends Scriptable<FieldJson> implements FieldModel {
|
|
|
199
200
|
viewType?: string | undefined;
|
|
200
201
|
placeholder?: string | undefined;
|
|
201
202
|
valid?: boolean | undefined;
|
|
203
|
+
validity?: any;
|
|
204
|
+
validationMessage?: string | undefined;
|
|
202
205
|
default?: any;
|
|
203
206
|
value?: any;
|
|
204
207
|
emptyValue?: "" | "undefined" | "null" | undefined;
|
|
@@ -207,6 +210,6 @@ declare class Field extends Scriptable<FieldJson> implements FieldModel {
|
|
|
207
210
|
qualifiedName: any;
|
|
208
211
|
id: string;
|
|
209
212
|
};
|
|
210
|
-
markAsInvalid(message: string): void;
|
|
213
|
+
markAsInvalid(message: string, constraint?: keyof (ConstraintsMessages) | null): void;
|
|
211
214
|
}
|
|
212
215
|
export default Field;
|
package/lib/Field.js
CHANGED
|
@@ -18,6 +18,7 @@ const DataValue_1 = __importDefault(require("./data/DataValue"));
|
|
|
18
18
|
const BaseNode_1 = require("./BaseNode");
|
|
19
19
|
const EmptyDataValue_1 = __importDefault(require("./data/EmptyDataValue"));
|
|
20
20
|
const af_formatters_1 = require("@aemforms/af-formatters");
|
|
21
|
+
const FormUtils_1 = require("./utils/FormUtils");
|
|
21
22
|
const validTypes = ['string', 'number', 'integer', 'boolean', 'file', 'string[]', 'number[]', 'integer[]', 'boolean[]', 'file[]', 'array', 'object'];
|
|
22
23
|
class Field extends Scriptable_1.default {
|
|
23
24
|
constructor(params, _options) {
|
|
@@ -200,7 +201,11 @@ class Field extends Scriptable_1.default {
|
|
|
200
201
|
this._setProperty('enabled', e);
|
|
201
202
|
}
|
|
202
203
|
get valid() {
|
|
203
|
-
|
|
204
|
+
var _a, _b;
|
|
205
|
+
return (_b = (_a = this._jsonModel) === null || _a === void 0 ? void 0 : _a.validity) === null || _b === void 0 ? void 0 : _b.valid;
|
|
206
|
+
}
|
|
207
|
+
get validity() {
|
|
208
|
+
return this._jsonModel.validity;
|
|
204
209
|
}
|
|
205
210
|
get emptyValue() {
|
|
206
211
|
if (this._jsonModel.emptyValue === 'null') {
|
|
@@ -324,21 +329,27 @@ class Field extends Scriptable_1.default {
|
|
|
324
329
|
set value(v) {
|
|
325
330
|
const changes = this.updateDataNodeAndTypedValue(v);
|
|
326
331
|
let uniqueRes = { valid: true };
|
|
332
|
+
let constraint = 'type';
|
|
327
333
|
if ((changes === null || changes === void 0 ? void 0 : changes.length) > 0) {
|
|
328
334
|
let updates = {};
|
|
329
335
|
const typeRes = ValidationUtils_1.Constraints.type(this.getInternalType() || 'string', v);
|
|
330
336
|
if (this.parent.uniqueItems && this.parent.type === 'array') {
|
|
331
337
|
uniqueRes = ValidationUtils_1.Constraints.uniqueItems(this.parent.uniqueItems, this.parent.getDataNode().$value);
|
|
338
|
+
constraint = 'uniqueItems';
|
|
332
339
|
}
|
|
333
340
|
if (typeRes.valid && uniqueRes.valid) {
|
|
334
341
|
updates = this.evaluateConstraints();
|
|
335
342
|
}
|
|
336
343
|
else {
|
|
337
|
-
const
|
|
338
|
-
|
|
339
|
-
'
|
|
340
|
-
|
|
341
|
-
|
|
344
|
+
const valid = typeRes.valid && uniqueRes.valid;
|
|
345
|
+
const changes = Object.assign({ valid, 'errorMessage': typeRes.valid && uniqueRes.valid ? '' : this.getErrorMessage('type') }, (valid ? {} : {
|
|
346
|
+
'validationMessage': valid ? '' : this.getErrorMessage(constraint),
|
|
347
|
+
'validity': {
|
|
348
|
+
valid,
|
|
349
|
+
[types_1.constraintKeys[constraint]]: true
|
|
350
|
+
}
|
|
351
|
+
}));
|
|
352
|
+
updates = this._applyUpdates(['valid', 'errorMessage', 'validationMessage', 'validity'], changes);
|
|
342
353
|
}
|
|
343
354
|
if (updates.valid) {
|
|
344
355
|
this.triggerValidationEvent(updates);
|
|
@@ -351,9 +362,13 @@ class Field extends Scriptable_1.default {
|
|
|
351
362
|
const changes = this.updateDataNodeAndTypedValue(this.default);
|
|
352
363
|
const validationStateChanges = {
|
|
353
364
|
'valid': undefined,
|
|
354
|
-
'errorMessage': ''
|
|
365
|
+
'errorMessage': '',
|
|
366
|
+
'validationMessage': '',
|
|
367
|
+
'validity': {
|
|
368
|
+
valid: undefined
|
|
369
|
+
}
|
|
355
370
|
};
|
|
356
|
-
const updates = this._applyUpdates(['valid', 'errorMessage'], validationStateChanges);
|
|
371
|
+
const updates = this._applyUpdates(['valid', 'errorMessage', 'validationMessage', 'validity'], validationStateChanges);
|
|
357
372
|
const changeAction = new Events_1.Change({ changes: changes.concat(Object.values(updates)) });
|
|
358
373
|
this.dispatch(changeAction);
|
|
359
374
|
}
|
|
@@ -392,7 +407,11 @@ class Field extends Scriptable_1.default {
|
|
|
392
407
|
}
|
|
393
408
|
getErrorMessage(constraint) {
|
|
394
409
|
var _a;
|
|
395
|
-
|
|
410
|
+
const afConstraintKey = constraint;
|
|
411
|
+
const html5ConstraintType = types_1.constraintKeys[afConstraintKey];
|
|
412
|
+
const constraintTypeMessages = (0, types_1.getConstraintTypeMessages)();
|
|
413
|
+
return ((_a = this._jsonModel.constraintMessages) === null || _a === void 0 ? void 0 : _a[afConstraintKey])
|
|
414
|
+
|| (0, FormUtils_1.replaceTemplatePlaceholders)(constraintTypeMessages[html5ConstraintType], [this._jsonModel[afConstraintKey]]);
|
|
396
415
|
}
|
|
397
416
|
get errorMessage() {
|
|
398
417
|
return this._jsonModel.errorMessage;
|
|
@@ -595,11 +614,11 @@ class Field extends Scriptable_1.default {
|
|
|
595
614
|
if (!valid) {
|
|
596
615
|
this.form.logger.info(`${constraint} constraint evaluation failed ${this._jsonModel[constraint]}. Received ${this._jsonModel.value}`);
|
|
597
616
|
}
|
|
598
|
-
const changes = {
|
|
599
|
-
'valid':
|
|
600
|
-
'
|
|
601
|
-
};
|
|
602
|
-
return this._applyUpdates(['valid', 'errorMessage'], changes);
|
|
617
|
+
const changes = Object.assign({ 'valid': valid, 'errorMessage': valid ? '' : this.getErrorMessage(constraint) }, ({
|
|
618
|
+
'validationMessage': valid ? '' : this.getErrorMessage(constraint),
|
|
619
|
+
'validity': Object.assign({ valid }, (valid ? {} : { [types_1.constraintKeys[constraint]]: true }))
|
|
620
|
+
}));
|
|
621
|
+
return this._applyUpdates(['valid', 'errorMessage', 'validationMessage', 'validity'], changes);
|
|
603
622
|
}
|
|
604
623
|
triggerValidationEvent(changes) {
|
|
605
624
|
if (changes.valid) {
|
|
@@ -612,8 +631,12 @@ class Field extends Scriptable_1.default {
|
|
|
612
631
|
}
|
|
613
632
|
}
|
|
614
633
|
validate() {
|
|
634
|
+
var _a;
|
|
635
|
+
if (this.visible === false) {
|
|
636
|
+
return [];
|
|
637
|
+
}
|
|
615
638
|
const changes = this.evaluateConstraints();
|
|
616
|
-
if (changes.valid) {
|
|
639
|
+
if ((_a = changes === null || changes === void 0 ? void 0 : changes.validity) === null || _a === void 0 ? void 0 : _a.valid) {
|
|
617
640
|
this.triggerValidationEvent(changes);
|
|
618
641
|
this.notifyDependents(new Events_1.Change({ changes: Object.values(changes) }));
|
|
619
642
|
}
|
|
@@ -635,12 +658,14 @@ class Field extends Scriptable_1.default {
|
|
|
635
658
|
getState() {
|
|
636
659
|
return Object.assign(Object.assign({}, super.getState()), { editFormat: this.editFormat, displayFormat: this.displayFormat, editValue: this.editValue, displayValue: this.displayValue, enabled: this.enabled, readOnly: this.readOnly });
|
|
637
660
|
}
|
|
638
|
-
markAsInvalid(message) {
|
|
661
|
+
markAsInvalid(message, constraint = null) {
|
|
639
662
|
const changes = {
|
|
640
663
|
'valid': false,
|
|
641
|
-
'errorMessage': message
|
|
664
|
+
'errorMessage': message,
|
|
665
|
+
'validationMessage': message,
|
|
666
|
+
'validity': Object.assign({ valid: false }, (constraint != null ? { [types_1.constraintKeys[constraint]]: true } : {}))
|
|
642
667
|
};
|
|
643
|
-
const updates = this._applyUpdates(['valid', 'errorMessage'], changes);
|
|
668
|
+
const updates = this._applyUpdates(['valid', 'errorMessage', 'validationMessage', 'validity'], changes);
|
|
644
669
|
this.triggerValidationEvent(updates);
|
|
645
670
|
const changeAction = new Events_1.Change({ changes: [].concat(Object.values(updates)) });
|
|
646
671
|
this.dispatch(changeAction);
|
|
@@ -657,6 +682,9 @@ __decorate([
|
|
|
657
682
|
__decorate([
|
|
658
683
|
(0, BaseNode_1.dependencyTracked)()
|
|
659
684
|
], Field.prototype, "valid", null);
|
|
685
|
+
__decorate([
|
|
686
|
+
(0, BaseNode_1.dependencyTracked)()
|
|
687
|
+
], Field.prototype, "validity", null);
|
|
660
688
|
__decorate([
|
|
661
689
|
(0, BaseNode_1.dependencyTracked)()
|
|
662
690
|
], Field.prototype, "enum", null);
|
package/lib/Form.d.ts
CHANGED
|
@@ -22,7 +22,7 @@ declare class Form extends Container<FormJson> implements FormModel {
|
|
|
22
22
|
getState(): {
|
|
23
23
|
description?: string | undefined;
|
|
24
24
|
} & import("./types/Json").RulesJson & {
|
|
25
|
-
enumNames?: string[] | undefined;
|
|
25
|
+
enumNames?: string[] | import("./types/Json").EnumName[] | undefined;
|
|
26
26
|
enum?: any[] | undefined;
|
|
27
27
|
} & {
|
|
28
28
|
accept?: string[] | undefined;
|
package/lib/Form.js
CHANGED
|
@@ -139,7 +139,9 @@ class Form extends Container_1.default {
|
|
|
139
139
|
submit(action, context) {
|
|
140
140
|
if (this.validate().length === 0) {
|
|
141
141
|
const payload = (action === null || action === void 0 ? void 0 : action.payload) || {};
|
|
142
|
-
|
|
142
|
+
const successEventName = (payload === null || payload === void 0 ? void 0 : payload.success) ? payload === null || payload === void 0 ? void 0 : payload.success : 'submitSuccess';
|
|
143
|
+
const failureEventName = (payload === null || payload === void 0 ? void 0 : payload.error) ? payload === null || payload === void 0 ? void 0 : payload.error : 'submitFailure';
|
|
144
|
+
(0, FunctionRuntime_1.submit)(context, successEventName, failureEventName, payload === null || payload === void 0 ? void 0 : payload.submit_as, payload === null || payload === void 0 ? void 0 : payload.data);
|
|
143
145
|
}
|
|
144
146
|
}
|
|
145
147
|
reset() {
|
|
@@ -60,6 +60,12 @@ export declare class Focus extends ActionImpl {
|
|
|
60
60
|
export declare class Submit extends ActionImpl {
|
|
61
61
|
constructor(payload?: any, dispatch?: boolean);
|
|
62
62
|
}
|
|
63
|
+
export declare class SubmitSuccess extends ActionImpl {
|
|
64
|
+
constructor(payload?: any, dispatch?: boolean);
|
|
65
|
+
}
|
|
66
|
+
export declare class SubmitFailure extends ActionImpl {
|
|
67
|
+
constructor(payload?: any, dispatch?: boolean);
|
|
68
|
+
}
|
|
63
69
|
export declare class Reset extends ActionImpl {
|
|
64
70
|
constructor(payload?: any, dispatch?: boolean);
|
|
65
71
|
}
|
package/lib/controller/Events.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RemoveInstance = exports.AddInstance = exports.RemoveItem = exports.AddItem = exports.CustomEvent = exports.FieldChanged = exports.Reset = exports.Submit = exports.Focus = exports.ValidationComplete = exports.Blur = exports.Click = exports.FormLoad = exports.Initialize = exports.propertyChange = exports.ExecuteRule = exports.Valid = exports.Invalid = exports.Change = void 0;
|
|
3
|
+
exports.RemoveInstance = exports.AddInstance = exports.RemoveItem = exports.AddItem = exports.CustomEvent = exports.FieldChanged = exports.Reset = exports.SubmitFailure = exports.SubmitSuccess = exports.Submit = exports.Focus = exports.ValidationComplete = exports.Blur = exports.Click = exports.FormLoad = exports.Initialize = exports.propertyChange = exports.ExecuteRule = exports.Valid = exports.Invalid = exports.Change = void 0;
|
|
4
4
|
class ActionImpl {
|
|
5
5
|
constructor(payload, type, _metadata) {
|
|
6
6
|
this._metadata = _metadata;
|
|
@@ -117,6 +117,18 @@ class Submit extends ActionImpl {
|
|
|
117
117
|
}
|
|
118
118
|
}
|
|
119
119
|
exports.Submit = Submit;
|
|
120
|
+
class SubmitSuccess extends ActionImpl {
|
|
121
|
+
constructor(payload, dispatch = false) {
|
|
122
|
+
super(payload, 'submitSuccess', { dispatch });
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
exports.SubmitSuccess = SubmitSuccess;
|
|
126
|
+
class SubmitFailure extends ActionImpl {
|
|
127
|
+
constructor(payload, dispatch = false) {
|
|
128
|
+
super(payload, 'submitFailure', { dispatch });
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
exports.SubmitFailure = SubmitFailure;
|
|
120
132
|
class Reset extends ActionImpl {
|
|
121
133
|
constructor(payload, dispatch = false) {
|
|
122
134
|
super(payload, 'reset', { dispatch });
|
|
@@ -59,12 +59,22 @@ const request = (context, uri, httpVerb, payload, success, error, headers) => __
|
|
|
59
59
|
const result = yield (0, Fetch_1.request)(endpoint, inputPayload, requestOptions);
|
|
60
60
|
if ((result === null || result === void 0 ? void 0 : result.status) >= 200 && (result === null || result === void 0 ? void 0 : result.status) <= 299) {
|
|
61
61
|
const eName = getCustomEventName(success);
|
|
62
|
-
|
|
62
|
+
if (eName === 'submitSuccess') {
|
|
63
|
+
context.form.dispatch(new Events_1.SubmitSuccess(result, true));
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
context.form.dispatch(new Events_1.CustomEvent(eName, result, true));
|
|
67
|
+
}
|
|
63
68
|
}
|
|
64
69
|
else {
|
|
65
70
|
context.form.logger.error('Error invoking a rest API');
|
|
66
71
|
const eName = getCustomEventName(error);
|
|
67
|
-
|
|
72
|
+
if (eName === 'submitFailure') {
|
|
73
|
+
context.form.dispatch(new Events_1.SubmitFailure(result, true));
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
context.form.dispatch(new Events_1.CustomEvent(eName, result, true));
|
|
77
|
+
}
|
|
68
78
|
}
|
|
69
79
|
});
|
|
70
80
|
exports.request = request;
|
package/lib/types/Json.d.ts
CHANGED
|
@@ -7,8 +7,12 @@ export declare type Label = {
|
|
|
7
7
|
richText?: boolean;
|
|
8
8
|
visible?: boolean;
|
|
9
9
|
};
|
|
10
|
+
export declare type EnumName = {
|
|
11
|
+
value: string;
|
|
12
|
+
richText?: boolean;
|
|
13
|
+
};
|
|
10
14
|
declare type TranslationConstraintsJson = {
|
|
11
|
-
enumNames?: string[];
|
|
15
|
+
enumNames?: string[] | EnumName[];
|
|
12
16
|
enum?: any[];
|
|
13
17
|
};
|
|
14
18
|
export declare type ConstraintsJson = TranslationConstraintsJson & {
|
|
@@ -86,6 +90,8 @@ declare type TranslationFieldJson = {
|
|
|
86
90
|
export declare type FieldJson = BaseJson & TranslationFieldJson & {
|
|
87
91
|
readOnly?: boolean;
|
|
88
92
|
valid?: boolean;
|
|
93
|
+
validity?: any;
|
|
94
|
+
validationMessage?: string;
|
|
89
95
|
default?: any;
|
|
90
96
|
value?: any;
|
|
91
97
|
displayFormat?: string;
|
|
@@ -118,4 +124,56 @@ export declare type FormJson = ContainerJson & {
|
|
|
118
124
|
export declare type TranslationJson = TranslationBaseJson & TranslationFieldJson & TranslationConstraintsJson;
|
|
119
125
|
export declare const translationProps: string[];
|
|
120
126
|
export declare const constraintProps: string[];
|
|
127
|
+
export declare const ConstraintType: Readonly<{
|
|
128
|
+
PATTERN_MISMATCH: "patternMismatch";
|
|
129
|
+
TOO_SHORT: "tooShort";
|
|
130
|
+
TOO_LONG: "tooLong";
|
|
131
|
+
RANGE_OVERFLOW: "rangeOverflow";
|
|
132
|
+
RANGE_UNDERFLOW: "rangeUnderflow";
|
|
133
|
+
TYPE_MISMATCH: "typeMismatch";
|
|
134
|
+
VALUE_MISSING: "valueMissing";
|
|
135
|
+
STEP_MISMATCH: "stepMismatch";
|
|
136
|
+
FORMAT_MISMATCH: "formatMismatch";
|
|
137
|
+
ACCEPT_MISMATCH: "acceptMismatch";
|
|
138
|
+
FILE_SIZE_MISMATCH: "fileSizeMismatch";
|
|
139
|
+
UNIQUE_ITEMS_MISMATCH: "uniqueItemsMismatch";
|
|
140
|
+
MIN_ITEMS_MISMATCH: "minItemsMismatch";
|
|
141
|
+
MAX_ITEMS_MISMATCH: "maxItemsMismatch";
|
|
142
|
+
EXPRESSION_MISMATCH: "expressionMismatch";
|
|
143
|
+
}>;
|
|
144
|
+
export declare const constraintKeys: Readonly<{
|
|
145
|
+
pattern: "patternMismatch";
|
|
146
|
+
minLength: "tooShort";
|
|
147
|
+
maxLength: "tooLong";
|
|
148
|
+
maximum: "rangeOverflow";
|
|
149
|
+
minimum: "rangeUnderflow";
|
|
150
|
+
type: "typeMismatch";
|
|
151
|
+
required: "valueMissing";
|
|
152
|
+
step: "stepMismatch";
|
|
153
|
+
format: "formatMismatch";
|
|
154
|
+
accept: "acceptMismatch";
|
|
155
|
+
maxFileSize: "fileSizeMismatch";
|
|
156
|
+
uniqueItems: "uniqueItemsMismatch";
|
|
157
|
+
minItems: "minItemsMismatch";
|
|
158
|
+
maxItems: "maxItemsMismatch";
|
|
159
|
+
validationExpression: "expressionMismatch";
|
|
160
|
+
}>;
|
|
161
|
+
export declare const setCustomDefaultConstraintTypeMessages: (messages: Record<string, string>) => void;
|
|
162
|
+
export declare const getConstraintTypeMessages: () => {
|
|
163
|
+
patternMismatch: "Please match the format requested.";
|
|
164
|
+
tooShort: "Please lengthen this text to ${0} characters or more.";
|
|
165
|
+
tooLong: "Please shorten this text to ${0} characters or less.";
|
|
166
|
+
rangeOverflow: "Value must be less than or equal to ${0}.";
|
|
167
|
+
rangeUnderflow: "Value must be greater than or equal to ${0}.";
|
|
168
|
+
typeMismatch: "Please enter a valid value.";
|
|
169
|
+
valueMissing: "Please fill in this field.";
|
|
170
|
+
stepMismatch: "Please enter a valid value.";
|
|
171
|
+
formatMismatch: "Specify the value in allowed format : ${0}.";
|
|
172
|
+
acceptMismatch: "The specified file type not supported.";
|
|
173
|
+
fileSizeMismatch: "File too large. Reduce size and try again.";
|
|
174
|
+
uniqueItemsMismatch: "All the items must be unique.";
|
|
175
|
+
minItemsMismatch: "Specify a number of items equal to or greater than ${0}.";
|
|
176
|
+
maxItemsMismatch: "Specify a number of items equal to or less than ${0}.";
|
|
177
|
+
expressionMismatch: "The validation expression is invalid.";
|
|
178
|
+
};
|
|
121
179
|
export {};
|
package/lib/types/Json.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.constraintProps = exports.translationProps = void 0;
|
|
3
|
+
exports.getConstraintTypeMessages = exports.setCustomDefaultConstraintTypeMessages = exports.constraintKeys = exports.ConstraintType = exports.constraintProps = exports.translationProps = void 0;
|
|
4
4
|
exports.translationProps = ['description', 'placeholder', 'enum', 'enumNames', 'label.value', 'constraintMessages.accept',
|
|
5
5
|
'constraintMessages.enum', 'constraintMessages.exclusiveMinimum', 'constraintMessages.exclusiveMaximum', 'constraintMessages.format', 'constraintMessages.maxFileSize', 'constraintMessages.maxLength',
|
|
6
6
|
'constraintMessages.maximum', 'constraintMessages.maxItems', 'constraintMessages.minLength', 'constraintMessages.minimum', 'constraintMessages.minItems', 'constraintMessages.pattern', 'constraintMessages.required',
|
|
@@ -8,3 +8,79 @@ exports.translationProps = ['description', 'placeholder', 'enum', 'enumNames', '
|
|
|
8
8
|
exports.constraintProps = ['accept', 'enum', 'exclusiveMinimum', 'exclusiveMaximum',
|
|
9
9
|
'format', 'maxFileSize', 'maxLength', 'maximum', 'maxItems',
|
|
10
10
|
'minLength', 'minimum', 'minItems', 'pattern', 'required', 'step', 'validationExpression', 'enumNames'];
|
|
11
|
+
exports.ConstraintType = Object.freeze({
|
|
12
|
+
PATTERN_MISMATCH: 'patternMismatch',
|
|
13
|
+
TOO_SHORT: 'tooShort',
|
|
14
|
+
TOO_LONG: 'tooLong',
|
|
15
|
+
RANGE_OVERFLOW: 'rangeOverflow',
|
|
16
|
+
RANGE_UNDERFLOW: 'rangeUnderflow',
|
|
17
|
+
TYPE_MISMATCH: 'typeMismatch',
|
|
18
|
+
VALUE_MISSING: 'valueMissing',
|
|
19
|
+
STEP_MISMATCH: 'stepMismatch',
|
|
20
|
+
FORMAT_MISMATCH: 'formatMismatch',
|
|
21
|
+
ACCEPT_MISMATCH: 'acceptMismatch',
|
|
22
|
+
FILE_SIZE_MISMATCH: 'fileSizeMismatch',
|
|
23
|
+
UNIQUE_ITEMS_MISMATCH: 'uniqueItemsMismatch',
|
|
24
|
+
MIN_ITEMS_MISMATCH: 'minItemsMismatch',
|
|
25
|
+
MAX_ITEMS_MISMATCH: 'maxItemsMismatch',
|
|
26
|
+
EXPRESSION_MISMATCH: 'expressionMismatch'
|
|
27
|
+
});
|
|
28
|
+
exports.constraintKeys = Object.freeze({
|
|
29
|
+
pattern: exports.ConstraintType.PATTERN_MISMATCH,
|
|
30
|
+
minLength: exports.ConstraintType.TOO_SHORT,
|
|
31
|
+
maxLength: exports.ConstraintType.TOO_LONG,
|
|
32
|
+
maximum: exports.ConstraintType.RANGE_OVERFLOW,
|
|
33
|
+
minimum: exports.ConstraintType.RANGE_UNDERFLOW,
|
|
34
|
+
type: exports.ConstraintType.TYPE_MISMATCH,
|
|
35
|
+
required: exports.ConstraintType.VALUE_MISSING,
|
|
36
|
+
step: exports.ConstraintType.STEP_MISMATCH,
|
|
37
|
+
format: exports.ConstraintType.FORMAT_MISMATCH,
|
|
38
|
+
accept: exports.ConstraintType.ACCEPT_MISMATCH,
|
|
39
|
+
maxFileSize: exports.ConstraintType.FILE_SIZE_MISMATCH,
|
|
40
|
+
uniqueItems: exports.ConstraintType.UNIQUE_ITEMS_MISMATCH,
|
|
41
|
+
minItems: exports.ConstraintType.MIN_ITEMS_MISMATCH,
|
|
42
|
+
maxItems: exports.ConstraintType.MAX_ITEMS_MISMATCH,
|
|
43
|
+
validationExpression: exports.ConstraintType.EXPRESSION_MISMATCH
|
|
44
|
+
});
|
|
45
|
+
const defaultConstraintTypeMessages = Object.freeze({
|
|
46
|
+
[exports.ConstraintType.PATTERN_MISMATCH]: 'Please match the format requested.',
|
|
47
|
+
[exports.ConstraintType.TOO_SHORT]: 'Please lengthen this text to ${0} characters or more.',
|
|
48
|
+
[exports.ConstraintType.TOO_LONG]: 'Please shorten this text to ${0} characters or less.',
|
|
49
|
+
[exports.ConstraintType.RANGE_OVERFLOW]: 'Value must be less than or equal to ${0}.',
|
|
50
|
+
[exports.ConstraintType.RANGE_UNDERFLOW]: 'Value must be greater than or equal to ${0}.',
|
|
51
|
+
[exports.ConstraintType.TYPE_MISMATCH]: 'Please enter a valid value.',
|
|
52
|
+
[exports.ConstraintType.VALUE_MISSING]: 'Please fill in this field.',
|
|
53
|
+
[exports.ConstraintType.STEP_MISMATCH]: 'Please enter a valid value.',
|
|
54
|
+
[exports.ConstraintType.FORMAT_MISMATCH]: 'Specify the value in allowed format : ${0}.',
|
|
55
|
+
[exports.ConstraintType.ACCEPT_MISMATCH]: 'The specified file type not supported.',
|
|
56
|
+
[exports.ConstraintType.FILE_SIZE_MISMATCH]: 'File too large. Reduce size and try again.',
|
|
57
|
+
[exports.ConstraintType.UNIQUE_ITEMS_MISMATCH]: 'All the items must be unique.',
|
|
58
|
+
[exports.ConstraintType.MIN_ITEMS_MISMATCH]: 'Specify a number of items equal to or greater than ${0}.',
|
|
59
|
+
[exports.ConstraintType.MAX_ITEMS_MISMATCH]: 'Specify a number of items equal to or less than ${0}.',
|
|
60
|
+
[exports.ConstraintType.EXPRESSION_MISMATCH]: 'The validation expression is invalid.'
|
|
61
|
+
});
|
|
62
|
+
const transformObjectKeys = (obj, transformer) => {
|
|
63
|
+
if (typeof obj !== 'object' || obj === null) {
|
|
64
|
+
return obj;
|
|
65
|
+
}
|
|
66
|
+
if (Array.isArray(obj)) {
|
|
67
|
+
return obj.map((item) => transformObjectKeys(item, transformer));
|
|
68
|
+
}
|
|
69
|
+
return Object.keys(obj).reduce((transformedObj, key) => {
|
|
70
|
+
const transformedKey = transformer(key);
|
|
71
|
+
const value = obj[key];
|
|
72
|
+
transformedObj[transformedKey] = transformObjectKeys(value, transformer);
|
|
73
|
+
return transformedObj;
|
|
74
|
+
}, {});
|
|
75
|
+
};
|
|
76
|
+
let customConstraintTypeMessages = {};
|
|
77
|
+
const setCustomDefaultConstraintTypeMessages = (messages) => {
|
|
78
|
+
customConstraintTypeMessages = transformObjectKeys(messages, (key) => {
|
|
79
|
+
return exports.constraintKeys[key];
|
|
80
|
+
});
|
|
81
|
+
};
|
|
82
|
+
exports.setCustomDefaultConstraintTypeMessages = setCustomDefaultConstraintTypeMessages;
|
|
83
|
+
const getConstraintTypeMessages = () => {
|
|
84
|
+
return Object.assign(Object.assign({}, defaultConstraintTypeMessages), customConstraintTypeMessages);
|
|
85
|
+
};
|
|
86
|
+
exports.getConstraintTypeMessages = getConstraintTypeMessages;
|
package/lib/utils/FormUtils.d.ts
CHANGED
package/lib/utils/FormUtils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.sitesModelToFormModel = exports.dataURItoBlob = exports.extractFileInfo = exports.isDataUrl = exports.IdGenerator = exports.getFileSizeInBytes = exports.getAttachments = exports.isEmpty = exports.randomWord = void 0;
|
|
3
|
+
exports.replaceTemplatePlaceholders = exports.sitesModelToFormModel = exports.dataURItoBlob = exports.extractFileInfo = exports.isDataUrl = exports.IdGenerator = exports.getFileSizeInBytes = exports.getAttachments = exports.isEmpty = exports.randomWord = void 0;
|
|
4
4
|
const JsonUtils_1 = require("./JsonUtils");
|
|
5
5
|
const FileObject_1 = require("../FileObject");
|
|
6
6
|
const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_'.split('');
|
|
@@ -224,3 +224,10 @@ const sitesModelToFormModel = (sitesModel) => {
|
|
|
224
224
|
return sitesModel;
|
|
225
225
|
};
|
|
226
226
|
exports.sitesModelToFormModel = sitesModelToFormModel;
|
|
227
|
+
const replaceTemplatePlaceholders = (str, values = []) => {
|
|
228
|
+
return str === null || str === void 0 ? void 0 : str.replace(/\${(\d+)}/g, (match, index) => {
|
|
229
|
+
const replacement = values[index];
|
|
230
|
+
return typeof replacement !== 'undefined' ? replacement : match;
|
|
231
|
+
});
|
|
232
|
+
};
|
|
233
|
+
exports.replaceTemplatePlaceholders = replaceTemplatePlaceholders;
|
|
@@ -35,6 +35,11 @@ const addTranslationId = (input, additionalTranslationProps = []) => {
|
|
|
35
35
|
exports.addTranslationId = addTranslationId;
|
|
36
36
|
const _createTranslationId = (input, path, transProps) => {
|
|
37
37
|
Object.entries(input).forEach(([key, value]) => {
|
|
38
|
+
if (key === 'enumNames' && value instanceof Array) {
|
|
39
|
+
value = value.map((x) => {
|
|
40
|
+
return typeof x === 'string' ? x : x === null || x === void 0 ? void 0 : x.value;
|
|
41
|
+
});
|
|
42
|
+
}
|
|
38
43
|
if (typeof value == 'object') {
|
|
39
44
|
if (input instanceof Array) {
|
|
40
45
|
if (value && 'name' in value) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aemforms/af-core",
|
|
3
|
-
"version": "0.22.
|
|
3
|
+
"version": "0.22.44",
|
|
4
4
|
"description": "Core Module for Forms Runtime",
|
|
5
5
|
"author": "Adobe Systems",
|
|
6
6
|
"license": "Adobe Proprietary",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"@adobe/json-formula": "0.1.50",
|
|
38
|
-
"@aemforms/af-formatters": "^0.22.
|
|
38
|
+
"@aemforms/af-formatters": "^0.22.44"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@babel/preset-env": "^7.20.2",
|