@aemforms/af-core 0.22.43 → 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/Container.d.ts +1 -0
- package/lib/Container.js +30 -15
- package/lib/Field.d.ts +5 -2
- package/lib/Field.js +43 -18
- 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 +54 -0
- 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/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,7 +32,8 @@ 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);
|
|
@@ -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,11 +631,12 @@ class Field extends Scriptable_1.default {
|
|
|
612
631
|
}
|
|
613
632
|
}
|
|
614
633
|
validate() {
|
|
634
|
+
var _a;
|
|
615
635
|
if (this.visible === false) {
|
|
616
636
|
return [];
|
|
617
637
|
}
|
|
618
638
|
const changes = this.evaluateConstraints();
|
|
619
|
-
if (changes.valid) {
|
|
639
|
+
if ((_a = changes === null || changes === void 0 ? void 0 : changes.validity) === null || _a === void 0 ? void 0 : _a.valid) {
|
|
620
640
|
this.triggerValidationEvent(changes);
|
|
621
641
|
this.notifyDependents(new Events_1.Change({ changes: Object.values(changes) }));
|
|
622
642
|
}
|
|
@@ -638,12 +658,14 @@ class Field extends Scriptable_1.default {
|
|
|
638
658
|
getState() {
|
|
639
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 });
|
|
640
660
|
}
|
|
641
|
-
markAsInvalid(message) {
|
|
661
|
+
markAsInvalid(message, constraint = null) {
|
|
642
662
|
const changes = {
|
|
643
663
|
'valid': false,
|
|
644
|
-
'errorMessage': message
|
|
664
|
+
'errorMessage': message,
|
|
665
|
+
'validationMessage': message,
|
|
666
|
+
'validity': Object.assign({ valid: false }, (constraint != null ? { [types_1.constraintKeys[constraint]]: true } : {}))
|
|
645
667
|
};
|
|
646
|
-
const updates = this._applyUpdates(['valid', 'errorMessage'], changes);
|
|
668
|
+
const updates = this._applyUpdates(['valid', 'errorMessage', 'validationMessage', 'validity'], changes);
|
|
647
669
|
this.triggerValidationEvent(updates);
|
|
648
670
|
const changeAction = new Events_1.Change({ changes: [].concat(Object.values(updates)) });
|
|
649
671
|
this.dispatch(changeAction);
|
|
@@ -660,6 +682,9 @@ __decorate([
|
|
|
660
682
|
__decorate([
|
|
661
683
|
(0, BaseNode_1.dependencyTracked)()
|
|
662
684
|
], Field.prototype, "valid", null);
|
|
685
|
+
__decorate([
|
|
686
|
+
(0, BaseNode_1.dependencyTracked)()
|
|
687
|
+
], Field.prototype, "validity", null);
|
|
663
688
|
__decorate([
|
|
664
689
|
(0, BaseNode_1.dependencyTracked)()
|
|
665
690
|
], Field.prototype, "enum", null);
|
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
|
@@ -90,6 +90,8 @@ declare type TranslationFieldJson = {
|
|
|
90
90
|
export declare type FieldJson = BaseJson & TranslationFieldJson & {
|
|
91
91
|
readOnly?: boolean;
|
|
92
92
|
valid?: boolean;
|
|
93
|
+
validity?: any;
|
|
94
|
+
validationMessage?: string;
|
|
93
95
|
default?: any;
|
|
94
96
|
value?: any;
|
|
95
97
|
displayFormat?: string;
|
|
@@ -122,4 +124,56 @@ export declare type FormJson = ContainerJson & {
|
|
|
122
124
|
export declare type TranslationJson = TranslationBaseJson & TranslationFieldJson & TranslationConstraintsJson;
|
|
123
125
|
export declare const translationProps: string[];
|
|
124
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
|
+
};
|
|
125
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",
|