@aemforms/af-core 0.22.16 → 0.22.18
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.d.ts +22 -0
- package/lib/BaseNode.js +86 -9
- package/lib/Checkbox.d.ts +8 -0
- package/lib/CheckboxGroup.js +3 -0
- package/lib/Container.d.ts +39 -196
- package/lib/Container.js +30 -3
- package/lib/Field.d.ts +36 -20
- package/lib/Field.js +211 -50
- package/lib/FileObject.d.ts +2 -0
- package/lib/FileObject.js +9 -0
- package/lib/FileUpload.d.ts +4 -13
- package/lib/FileUpload.js +29 -131
- package/lib/Form.d.ts +41 -212
- package/lib/Form.js +12 -35
- package/lib/FormInstance.d.ts +1 -1
- package/lib/FormInstance.js +3 -25
- package/lib/Scriptable.d.ts +1 -1
- package/lib/Scriptable.js +4 -4
- package/lib/controller/Controller.d.ts +1 -0
- package/lib/controller/Controller.js +3 -0
- package/lib/controller/EventQueue.d.ts +1 -1
- package/lib/controller/EventQueue.js +2 -2
- package/lib/controller/Logger.d.ts +17 -0
- package/lib/controller/Logger.js +36 -0
- package/lib/data/DataValue.d.ts +1 -1
- package/lib/data/DataValue.js +4 -2
- package/lib/rules/FunctionRuntime.d.ts +4 -0
- package/lib/rules/FunctionRuntime.js +13 -0
- package/lib/types/Json.d.ts +4 -0
- package/lib/types/Model.d.ts +12 -6
- package/lib/utils/FormUtils.d.ts +4 -12
- package/lib/utils/FormUtils.js +56 -49
- package/lib/utils/ValidationUtils.d.ts +17 -0
- package/lib/utils/ValidationUtils.js +101 -11
- package/package.json +3 -2
package/lib/FileUpload.js
CHANGED
|
@@ -22,8 +22,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
22
22
|
const Controller_1 = require("./controller/Controller");
|
|
23
23
|
const Field_1 = __importDefault(require("./Field"));
|
|
24
24
|
const FormUtils_1 = require("./utils/FormUtils");
|
|
25
|
-
const ValidationUtils_1 = require("./utils/ValidationUtils");
|
|
26
25
|
const FileObject_1 = require("./FileObject");
|
|
26
|
+
const ValidationUtils_1 = require("./utils/ValidationUtils");
|
|
27
27
|
function addNameToDataURL(dataURL, name) {
|
|
28
28
|
return dataURL.replace(';base64', `;name=${encodeURIComponent(name)};base64`);
|
|
29
29
|
}
|
|
@@ -32,7 +32,7 @@ function processFiles(files) {
|
|
|
32
32
|
}
|
|
33
33
|
function processFile(file) {
|
|
34
34
|
return __awaiter(this, void 0, void 0, function* () {
|
|
35
|
-
const { name, size,
|
|
35
|
+
const { name, size, type } = file;
|
|
36
36
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
37
37
|
const fileObj = yield new Promise((resolve, reject) => {
|
|
38
38
|
const reader = new FileReader();
|
|
@@ -40,7 +40,7 @@ function processFile(file) {
|
|
|
40
40
|
resolve(new FileObject_1.FileObject({
|
|
41
41
|
// @ts-ignore
|
|
42
42
|
data: addNameToDataURL(event.target.result, name),
|
|
43
|
-
|
|
43
|
+
type,
|
|
44
44
|
name,
|
|
45
45
|
size
|
|
46
46
|
}));
|
|
@@ -56,7 +56,10 @@ function processFile(file) {
|
|
|
56
56
|
class FileUpload extends Field_1.default {
|
|
57
57
|
//private _files: FileObject[];
|
|
58
58
|
_getDefaults() {
|
|
59
|
-
return Object.assign(Object.assign({}, super._getDefaults()), { accept: ['audio/*', 'video/*', 'image/*', 'text/*', 'application/pdf'], maxFileSize: '2MB'
|
|
59
|
+
return Object.assign(Object.assign({}, super._getDefaults()), { accept: ['audio/*', 'video/*', 'image/*', 'text/*', 'application/pdf'], maxFileSize: '2MB' });
|
|
60
|
+
}
|
|
61
|
+
_getFallbackType() {
|
|
62
|
+
return 'file';
|
|
60
63
|
}
|
|
61
64
|
/**
|
|
62
65
|
* Returns the max file size in bytes as per IEC specification
|
|
@@ -99,124 +102,23 @@ class FileUpload extends Field_1.default {
|
|
|
99
102
|
return acc;
|
|
100
103
|
}, {});
|
|
101
104
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
case 'string':
|
|
106
|
-
return { valid: true, value: value };
|
|
107
|
-
default:
|
|
108
|
-
return ValidationUtils_1.Constraints.type(type, value);
|
|
109
|
-
}
|
|
105
|
+
getInternalType() {
|
|
106
|
+
var _a;
|
|
107
|
+
return ((_a = this.type) === null || _a === void 0 ? void 0 : _a.endsWith('[]')) ? 'file[]' : 'file';
|
|
110
108
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
let
|
|
114
|
-
if (
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
accepts = Array.isArray(accepts) ? accepts : accepts.split(',');
|
|
118
|
-
accepts.forEach((accept) => {
|
|
119
|
-
const trimmedAccept = accept.trim();
|
|
120
|
-
const prefixAccept = trimmedAccept.split('/')[0];
|
|
121
|
-
const suffixAccept = trimmedAccept.split('.')[1];
|
|
122
|
-
if ((trimmedAccept.includes('*') && type.startsWith(prefixAccept)) ||
|
|
123
|
-
(trimmedAccept.includes('.') && type.endsWith(suffixAccept)) ||
|
|
124
|
-
(trimmedAccept === type)) {
|
|
125
|
-
validFileType = true;
|
|
109
|
+
getDataNodeValue(typedValue) {
|
|
110
|
+
var _a;
|
|
111
|
+
let dataNodeValue = typedValue;
|
|
112
|
+
if (dataNodeValue != null) {
|
|
113
|
+
if (this.type === 'string') {
|
|
114
|
+
dataNodeValue = (_a = dataNodeValue.data) === null || _a === void 0 ? void 0 : _a.toString();
|
|
126
115
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
acceptCheck(value) {
|
|
131
|
-
const tempValue = value instanceof Array ? value : [value];
|
|
132
|
-
const invalidFile = tempValue.some((file) => !this.checkFileType(file.type || file.mediaType));
|
|
133
|
-
return {
|
|
134
|
-
valid: !invalidFile,
|
|
135
|
-
value
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
get value() {
|
|
139
|
-
// @ts-ignore
|
|
140
|
-
this.ruleEngine.trackDependency(this);
|
|
141
|
-
if (this._jsonModel.value === undefined) {
|
|
142
|
-
return null;
|
|
143
|
-
}
|
|
144
|
-
let val = this._jsonModel.value;
|
|
145
|
-
// always return file object irrespective of data schema
|
|
146
|
-
if (val != null) {
|
|
147
|
-
// @ts-ignore
|
|
148
|
-
val = this.coerce((val instanceof Array ? val : [val])
|
|
149
|
-
.map(file => {
|
|
150
|
-
let retVal = file;
|
|
151
|
-
if (!(retVal instanceof FileObject_1.FileObject)) {
|
|
152
|
-
retVal = new FileObject_1.FileObject({
|
|
153
|
-
'name': file.name,
|
|
154
|
-
'mediaType': file.mediaType,
|
|
155
|
-
'size': file.size,
|
|
156
|
-
'data': file.data
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
// define serialization here
|
|
160
|
-
/*
|
|
161
|
-
Object.defineProperty(retVal, 'data', {
|
|
162
|
-
get: async function() {
|
|
163
|
-
if (file.data instanceof File) {
|
|
164
|
-
return processFile(file);
|
|
165
|
-
} else {
|
|
166
|
-
return file.data;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
});
|
|
170
|
-
*/
|
|
171
|
-
return retVal;
|
|
172
|
-
}));
|
|
173
|
-
}
|
|
174
|
-
return val;
|
|
175
|
-
}
|
|
176
|
-
set value(value) {
|
|
177
|
-
if (value !== undefined) {
|
|
178
|
-
// store file list here
|
|
179
|
-
const typeRes = this.typeCheck(value);
|
|
180
|
-
const acceptRes = this.acceptCheck(value);
|
|
181
|
-
let fileInfoPayload = (0, FormUtils_1.extractFileInfo)(value);
|
|
182
|
-
fileInfoPayload = this.coerce(fileInfoPayload);
|
|
183
|
-
const changes = this._setProperty('value', fileInfoPayload, false);
|
|
184
|
-
if (changes.length > 0) {
|
|
185
|
-
const dataNode = this.getDataNode();
|
|
186
|
-
if (typeof dataNode !== 'undefined') {
|
|
187
|
-
let val = this._jsonModel.value;
|
|
188
|
-
const retVal = (val instanceof Array ? val : [val]).map(file => {
|
|
189
|
-
if (this.type === 'file' || this.type === 'file[]') {
|
|
190
|
-
return file;
|
|
191
|
-
}
|
|
192
|
-
else if (this.type === 'string' || this.type === 'string[]') {
|
|
193
|
-
// @ts-ignore
|
|
194
|
-
return file.data.toString();
|
|
195
|
-
}
|
|
196
|
-
});
|
|
197
|
-
val = this.coerce(retVal);
|
|
198
|
-
if (dataNode !== undefined) {
|
|
199
|
-
dataNode.setValue(val, this._jsonModel.value);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
let updates;
|
|
203
|
-
if (typeRes.valid && acceptRes.valid) {
|
|
204
|
-
updates = this.evaluateConstraints();
|
|
205
|
-
}
|
|
206
|
-
else {
|
|
207
|
-
const changes = {
|
|
208
|
-
'valid': typeRes.valid && acceptRes.valid,
|
|
209
|
-
'errorMessage': typeRes.valid && acceptRes.valid ? '' : this.getErrorMessage('type')
|
|
210
|
-
};
|
|
211
|
-
updates = this._applyUpdates(['valid', 'errorMessage'], changes);
|
|
212
|
-
}
|
|
213
|
-
if (updates.valid) {
|
|
214
|
-
this.triggerValidationEvent(updates);
|
|
215
|
-
}
|
|
216
|
-
const changeAction = new Controller_1.Change({ changes: changes.concat(Object.values(updates)) });
|
|
217
|
-
this.dispatch(changeAction);
|
|
116
|
+
else if (this.type === 'string[]') {
|
|
117
|
+
dataNodeValue = dataNodeValue instanceof Array ? dataNodeValue : [dataNodeValue];
|
|
118
|
+
dataNodeValue = dataNodeValue.map((_) => { var _a; return (_a = _ === null || _ === void 0 ? void 0 : _.data) === null || _a === void 0 ? void 0 : _a.toString(); });
|
|
218
119
|
}
|
|
219
120
|
}
|
|
121
|
+
return dataNodeValue;
|
|
220
122
|
}
|
|
221
123
|
_serialize() {
|
|
222
124
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -229,28 +131,24 @@ class FileUpload extends Field_1.default {
|
|
|
229
131
|
return filesInfo;
|
|
230
132
|
});
|
|
231
133
|
}
|
|
232
|
-
coerce(val) {
|
|
233
|
-
let retVal = val;
|
|
234
|
-
if ((this.type === 'string' || this.type === 'file') && retVal instanceof Array) {
|
|
235
|
-
// @ts-ignore
|
|
236
|
-
retVal = val[0];
|
|
237
|
-
}
|
|
238
|
-
return retVal;
|
|
239
|
-
}
|
|
240
134
|
importData(dataModel) {
|
|
241
135
|
this._bindToDataModel(dataModel);
|
|
242
136
|
const dataNode = this.getDataNode();
|
|
243
137
|
if (dataNode !== undefined) {
|
|
244
138
|
const value = dataNode === null || dataNode === void 0 ? void 0 : dataNode.$value;
|
|
245
|
-
let newValue = value;
|
|
246
139
|
// only if not undefined, proceed further
|
|
247
140
|
if (value != null) {
|
|
248
|
-
const
|
|
249
|
-
|
|
141
|
+
const res = ValidationUtils_1.Constraints.type(this.getInternalType(), value);
|
|
142
|
+
if (!res.valid) {
|
|
143
|
+
this.form.logger.error(`unable to bind ${this.name} to data`);
|
|
144
|
+
}
|
|
250
145
|
// is this needed ?
|
|
251
|
-
this.form.getEventQueue().queue(this, (0, Controller_1.propertyChange)('value',
|
|
146
|
+
this.form.getEventQueue().queue(this, (0, Controller_1.propertyChange)('value', res.value, this._jsonModel.value));
|
|
147
|
+
this._jsonModel.value = res.value;
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
this._jsonModel.value = null;
|
|
252
151
|
}
|
|
253
|
-
this._jsonModel.value = newValue;
|
|
254
152
|
}
|
|
255
153
|
}
|
|
256
154
|
}
|
package/lib/Form.d.ts
CHANGED
|
@@ -1,25 +1,9 @@
|
|
|
1
1
|
import Container from './Container';
|
|
2
|
-
import { Action, FieldJson, FieldModel, FieldsetJson, FieldsetModel, FormJson, FormModel, Items } from './types';
|
|
2
|
+
import { Action, BaseModel, FieldJson, FieldModel, FieldsetJson, FieldsetModel, FormJson, FormModel, Items } from './types';
|
|
3
3
|
import FormMetaData from './FormMetaData';
|
|
4
4
|
import EventQueue from './controller/EventQueue';
|
|
5
|
+
import { Logger, LogLevel } from './controller/Logger';
|
|
5
6
|
import RuleEngine from './rules/RuleEngine';
|
|
6
|
-
declare type LogFunction = 'info' | 'warn' | 'error' | 'debug';
|
|
7
|
-
/**
|
|
8
|
-
* Logging levels.
|
|
9
|
-
*/
|
|
10
|
-
export declare type LogLevel = 'off' | LogFunction;
|
|
11
|
-
/**
|
|
12
|
-
* @private
|
|
13
|
-
*/
|
|
14
|
-
export declare class Logger {
|
|
15
|
-
debug(msg: string): void;
|
|
16
|
-
info(msg: string): void;
|
|
17
|
-
warn(msg: string): void;
|
|
18
|
-
error(msg: string): void;
|
|
19
|
-
log(msg: string, level: LogFunction): void;
|
|
20
|
-
private logLevel;
|
|
21
|
-
constructor(logLevel?: LogLevel);
|
|
22
|
-
}
|
|
23
7
|
/**
|
|
24
8
|
* Defines `form model` which implements {@link FormModel | form model}
|
|
25
9
|
*/
|
|
@@ -54,6 +38,7 @@ declare class Form extends Container<FormJson> implements FormModel {
|
|
|
54
38
|
protected _createChild(child: FieldsetJson | FieldJson): FieldModel | FieldsetModel;
|
|
55
39
|
importData(dataModel: any): void;
|
|
56
40
|
exportData(): any;
|
|
41
|
+
setFocus(field: BaseModel): void;
|
|
57
42
|
/**
|
|
58
43
|
* Returns the current state of the form
|
|
59
44
|
*
|
|
@@ -101,9 +86,13 @@ declare class Form extends Container<FormJson> implements FormModel {
|
|
|
101
86
|
properties?: {
|
|
102
87
|
[key: string]: any;
|
|
103
88
|
} | undefined;
|
|
89
|
+
screenReaderText?: string | undefined;
|
|
90
|
+
tooltip?: string | undefined;
|
|
91
|
+
altText?: string | undefined;
|
|
104
92
|
} & {
|
|
105
93
|
items: (FieldJson | import("./types").ContainerJson)[];
|
|
106
94
|
initialItems?: number | undefined;
|
|
95
|
+
activeChild?: string | undefined;
|
|
107
96
|
} & {
|
|
108
97
|
metadata?: import("./types").MetaDataJson | undefined;
|
|
109
98
|
data?: any;
|
|
@@ -111,8 +100,10 @@ declare class Form extends Container<FormJson> implements FormModel {
|
|
|
111
100
|
action?: string | undefined;
|
|
112
101
|
adaptiveForm?: string | undefined;
|
|
113
102
|
} & {
|
|
114
|
-
':type': string;
|
|
115
103
|
items: ({
|
|
104
|
+
id: string;
|
|
105
|
+
index: number;
|
|
106
|
+
':type': string;
|
|
116
107
|
description?: string | undefined;
|
|
117
108
|
rules?: Items<string> | undefined;
|
|
118
109
|
events?: Items<string | string[] | undefined> | undefined;
|
|
@@ -137,7 +128,6 @@ declare class Form extends Container<FormJson> implements FormModel {
|
|
|
137
128
|
validationExpression?: string | undefined;
|
|
138
129
|
uniqueItems?: boolean | undefined;
|
|
139
130
|
dataRef?: string | null | undefined;
|
|
140
|
-
':type': string;
|
|
141
131
|
label?: import("./types").Label | undefined;
|
|
142
132
|
enabled?: boolean | undefined;
|
|
143
133
|
visible?: boolean | undefined;
|
|
@@ -148,7 +138,19 @@ declare class Form extends Container<FormJson> implements FormModel {
|
|
|
148
138
|
properties?: {
|
|
149
139
|
[key: string]: any;
|
|
150
140
|
} | undefined;
|
|
151
|
-
|
|
141
|
+
screenReaderText?: string | undefined;
|
|
142
|
+
tooltip?: string | undefined;
|
|
143
|
+
altText?: string | undefined;
|
|
144
|
+
placeholder?: string | undefined; /**
|
|
145
|
+
* Returns the current state of the form
|
|
146
|
+
*
|
|
147
|
+
* To access the form data and attachments, one needs to use the `data` and `attachments` property.
|
|
148
|
+
* For example,
|
|
149
|
+
* ```
|
|
150
|
+
* const data = form.getState().data
|
|
151
|
+
* const attachments = form.getState().attachments
|
|
152
|
+
* ```
|
|
153
|
+
*/
|
|
152
154
|
readOnly?: boolean | undefined;
|
|
153
155
|
valid?: boolean | undefined;
|
|
154
156
|
default?: any;
|
|
@@ -158,8 +160,10 @@ declare class Form extends Container<FormJson> implements FormModel {
|
|
|
158
160
|
editValue?: string | undefined;
|
|
159
161
|
displayValue?: string | undefined;
|
|
160
162
|
emptyValue?: "" | "undefined" | "null" | undefined;
|
|
161
|
-
id: string;
|
|
162
163
|
} | {
|
|
164
|
+
id: string;
|
|
165
|
+
index: number;
|
|
166
|
+
':type': string;
|
|
163
167
|
description?: string | undefined;
|
|
164
168
|
rules?: Items<string> | undefined;
|
|
165
169
|
events?: Items<string | string[] | undefined> | undefined;
|
|
@@ -184,7 +188,6 @@ declare class Form extends Container<FormJson> implements FormModel {
|
|
|
184
188
|
validationExpression?: string | undefined;
|
|
185
189
|
uniqueItems?: boolean | undefined;
|
|
186
190
|
dataRef?: string | null | undefined;
|
|
187
|
-
':type'?: string | undefined;
|
|
188
191
|
label?: import("./types").Label | undefined;
|
|
189
192
|
enabled?: boolean | undefined;
|
|
190
193
|
visible?: boolean | undefined;
|
|
@@ -195,197 +198,22 @@ declare class Form extends Container<FormJson> implements FormModel {
|
|
|
195
198
|
properties?: {
|
|
196
199
|
[key: string]: any;
|
|
197
200
|
} | undefined;
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
enum?: any[] | undefined;
|
|
203
|
-
} & {
|
|
204
|
-
accept?: string[] | undefined;
|
|
205
|
-
enforceEnum?: boolean | undefined;
|
|
206
|
-
exclusiveMinimum?: number | undefined;
|
|
207
|
-
exclusiveMaximum?: number | undefined;
|
|
208
|
-
format?: string | undefined;
|
|
209
|
-
maxFileSize?: string | number | undefined;
|
|
210
|
-
maxLength?: number | undefined;
|
|
211
|
-
maximum?: number | undefined;
|
|
212
|
-
maxItems?: number | undefined;
|
|
213
|
-
minLength?: number | undefined;
|
|
214
|
-
minimum?: number | undefined;
|
|
215
|
-
minItems?: number | undefined;
|
|
216
|
-
pattern?: string | undefined;
|
|
217
|
-
required?: boolean | undefined;
|
|
218
|
-
step?: number | undefined;
|
|
219
|
-
type?: string | undefined;
|
|
220
|
-
validationExpression?: string | undefined;
|
|
221
|
-
uniqueItems?: boolean | undefined;
|
|
222
|
-
} & {
|
|
223
|
-
dataRef?: string | null | undefined;
|
|
224
|
-
':type'?: string | undefined;
|
|
225
|
-
label?: import("./types").Label | undefined;
|
|
226
|
-
enabled?: boolean | undefined;
|
|
227
|
-
visible?: boolean | undefined;
|
|
228
|
-
name?: string | undefined;
|
|
229
|
-
constraintMessages?: import("./types").ConstraintsMessages | undefined;
|
|
230
|
-
fieldType?: string | undefined;
|
|
231
|
-
errorMessage?: string | undefined;
|
|
232
|
-
properties?: {
|
|
233
|
-
[key: string]: any;
|
|
234
|
-
} | undefined;
|
|
235
|
-
} & {
|
|
236
|
-
placeholder?: string | undefined;
|
|
237
|
-
} & {
|
|
238
|
-
readOnly?: boolean | undefined;
|
|
239
|
-
valid?: boolean | undefined;
|
|
240
|
-
default?: any;
|
|
241
|
-
value?: any;
|
|
242
|
-
displayFormat?: string | undefined;
|
|
243
|
-
editFormat?: string | undefined;
|
|
244
|
-
editValue?: string | undefined;
|
|
245
|
-
displayValue?: string | undefined;
|
|
246
|
-
emptyValue?: "" | "undefined" | "null" | undefined;
|
|
247
|
-
} & {
|
|
248
|
-
id: string;
|
|
249
|
-
':type': string;
|
|
250
|
-
}) | ({
|
|
251
|
-
description?: string | undefined;
|
|
252
|
-
} & import("./types").RulesJson & {
|
|
253
|
-
enumNames?: string[] | undefined;
|
|
254
|
-
enum?: any[] | undefined;
|
|
255
|
-
} & {
|
|
256
|
-
accept?: string[] | undefined;
|
|
257
|
-
enforceEnum?: boolean | undefined;
|
|
258
|
-
exclusiveMinimum?: number | undefined;
|
|
259
|
-
exclusiveMaximum?: number | undefined;
|
|
260
|
-
format?: string | undefined;
|
|
261
|
-
maxFileSize?: string | number | undefined;
|
|
262
|
-
maxLength?: number | undefined;
|
|
263
|
-
maximum?: number | undefined;
|
|
264
|
-
maxItems?: number | undefined;
|
|
265
|
-
minLength?: number | undefined;
|
|
266
|
-
minimum?: number | undefined;
|
|
267
|
-
minItems?: number | undefined;
|
|
268
|
-
pattern?: string | undefined;
|
|
269
|
-
required?: boolean | undefined;
|
|
270
|
-
step?: number | undefined;
|
|
271
|
-
type?: string | undefined;
|
|
272
|
-
validationExpression?: string | undefined;
|
|
273
|
-
uniqueItems?: boolean | undefined;
|
|
274
|
-
} & {
|
|
275
|
-
dataRef?: string | null | undefined;
|
|
276
|
-
':type'?: string | undefined;
|
|
277
|
-
label?: import("./types").Label | undefined;
|
|
278
|
-
enabled?: boolean | undefined;
|
|
279
|
-
visible?: boolean | undefined;
|
|
280
|
-
name?: string | undefined;
|
|
281
|
-
constraintMessages?: import("./types").ConstraintsMessages | undefined;
|
|
282
|
-
fieldType?: string | undefined;
|
|
283
|
-
errorMessage?: string | undefined;
|
|
284
|
-
properties?: {
|
|
285
|
-
[key: string]: any;
|
|
286
|
-
} | undefined;
|
|
287
|
-
} & {
|
|
288
|
-
items: (FieldJson | import("./types").ContainerJson)[];
|
|
289
|
-
initialItems?: number | undefined;
|
|
290
|
-
} & {
|
|
291
|
-
id: string;
|
|
292
|
-
items: (({
|
|
293
|
-
description?: string | undefined;
|
|
294
|
-
} & import("./types").RulesJson & {
|
|
295
|
-
enumNames?: string[] | undefined;
|
|
296
|
-
enum?: any[] | undefined;
|
|
297
|
-
} & {
|
|
298
|
-
accept?: string[] | undefined;
|
|
299
|
-
enforceEnum?: boolean | undefined;
|
|
300
|
-
exclusiveMinimum?: number | undefined;
|
|
301
|
-
exclusiveMaximum?: number | undefined;
|
|
302
|
-
format?: string | undefined;
|
|
303
|
-
maxFileSize?: string | number | undefined;
|
|
304
|
-
maxLength?: number | undefined;
|
|
305
|
-
maximum?: number | undefined;
|
|
306
|
-
maxItems?: number | undefined;
|
|
307
|
-
minLength?: number | undefined;
|
|
308
|
-
minimum?: number | undefined;
|
|
309
|
-
minItems?: number | undefined;
|
|
310
|
-
pattern?: string | undefined;
|
|
311
|
-
required?: boolean | undefined;
|
|
312
|
-
step?: number | undefined;
|
|
313
|
-
type?: string | undefined;
|
|
314
|
-
validationExpression?: string | undefined;
|
|
315
|
-
uniqueItems?: boolean | undefined;
|
|
316
|
-
} & {
|
|
317
|
-
dataRef?: string | null | undefined;
|
|
318
|
-
':type'?: string | undefined;
|
|
319
|
-
label?: import("./types").Label | undefined;
|
|
320
|
-
enabled?: boolean | undefined;
|
|
321
|
-
visible?: boolean | undefined;
|
|
322
|
-
name?: string | undefined;
|
|
323
|
-
constraintMessages?: import("./types").ConstraintsMessages | undefined;
|
|
324
|
-
fieldType?: string | undefined;
|
|
325
|
-
errorMessage?: string | undefined;
|
|
326
|
-
properties?: {
|
|
327
|
-
[key: string]: any;
|
|
328
|
-
} | undefined;
|
|
329
|
-
} & {
|
|
330
|
-
placeholder?: string | undefined;
|
|
331
|
-
} & {
|
|
332
|
-
readOnly?: boolean | undefined;
|
|
333
|
-
valid?: boolean | undefined;
|
|
334
|
-
default?: any;
|
|
335
|
-
value?: any;
|
|
336
|
-
displayFormat?: string | undefined;
|
|
337
|
-
editFormat?: string | undefined;
|
|
338
|
-
editValue?: string | undefined;
|
|
339
|
-
displayValue?: string | undefined;
|
|
340
|
-
emptyValue?: "" | "undefined" | "null" | undefined;
|
|
341
|
-
} & {
|
|
342
|
-
id: string;
|
|
343
|
-
':type': string;
|
|
344
|
-
}) | ({
|
|
345
|
-
description?: string | undefined;
|
|
346
|
-
} & import("./types").RulesJson & {
|
|
347
|
-
enumNames?: string[] | undefined;
|
|
348
|
-
enum?: any[] | undefined;
|
|
349
|
-
} & {
|
|
350
|
-
accept?: string[] | undefined;
|
|
351
|
-
enforceEnum?: boolean | undefined;
|
|
352
|
-
exclusiveMinimum?: number | undefined;
|
|
353
|
-
exclusiveMaximum?: number | undefined;
|
|
354
|
-
format?: string | undefined;
|
|
355
|
-
maxFileSize?: string | number | undefined;
|
|
356
|
-
maxLength?: number | undefined;
|
|
357
|
-
maximum?: number | undefined;
|
|
358
|
-
maxItems?: number | undefined;
|
|
359
|
-
minLength?: number | undefined;
|
|
360
|
-
minimum?: number | undefined;
|
|
361
|
-
minItems?: number | undefined;
|
|
362
|
-
pattern?: string | undefined;
|
|
363
|
-
required?: boolean | undefined;
|
|
364
|
-
step?: number | undefined;
|
|
365
|
-
type?: string | undefined;
|
|
366
|
-
validationExpression?: string | undefined;
|
|
367
|
-
uniqueItems?: boolean | undefined;
|
|
368
|
-
} & {
|
|
369
|
-
dataRef?: string | null | undefined;
|
|
370
|
-
':type'?: string | undefined;
|
|
371
|
-
label?: import("./types").Label | undefined;
|
|
372
|
-
enabled?: boolean | undefined;
|
|
373
|
-
visible?: boolean | undefined;
|
|
374
|
-
name?: string | undefined;
|
|
375
|
-
constraintMessages?: import("./types").ConstraintsMessages | undefined;
|
|
376
|
-
fieldType?: string | undefined;
|
|
377
|
-
errorMessage?: string | undefined;
|
|
378
|
-
properties?: {
|
|
379
|
-
[key: string]: any;
|
|
380
|
-
} | undefined;
|
|
381
|
-
} & {
|
|
382
|
-
items: (FieldJson | import("./types").ContainerJson)[];
|
|
383
|
-
initialItems?: number | undefined;
|
|
384
|
-
} & any))[];
|
|
385
|
-
}))[];
|
|
201
|
+
screenReaderText?: string | undefined;
|
|
202
|
+
tooltip?: string | undefined;
|
|
203
|
+
altText?: string | undefined;
|
|
204
|
+
items: (FieldJson | import("./types").ContainerJson)[] & import("./types").State<FieldJson | import("./types").ContainerJson>[];
|
|
386
205
|
initialItems?: number | undefined;
|
|
387
|
-
|
|
206
|
+
activeChild?: string | undefined;
|
|
388
207
|
})[];
|
|
208
|
+
properties: {
|
|
209
|
+
[key: string]: any;
|
|
210
|
+
};
|
|
211
|
+
index: number;
|
|
212
|
+
parent: undefined;
|
|
213
|
+
qualifiedName: any;
|
|
214
|
+
events: {};
|
|
215
|
+
rules: {};
|
|
216
|
+
':type': string;
|
|
389
217
|
id: string;
|
|
390
218
|
};
|
|
391
219
|
get type(): string;
|
|
@@ -421,6 +249,7 @@ declare class Form extends Container<FormJson> implements FormModel {
|
|
|
421
249
|
*/
|
|
422
250
|
submit(action: Action, context: any): void;
|
|
423
251
|
getElement(id: string): FieldModel | FieldsetModel | this;
|
|
252
|
+
get qualifiedName(): string;
|
|
424
253
|
/**
|
|
425
254
|
* @private
|
|
426
255
|
*/
|
package/lib/Form.js
CHANGED
|
@@ -10,48 +10,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
10
10
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.Logger = void 0;
|
|
14
13
|
const Container_1 = __importDefault(require("./Container"));
|
|
15
14
|
const FormMetaData_1 = __importDefault(require("./FormMetaData"));
|
|
16
15
|
const Fieldset_1 = require("./Fieldset");
|
|
17
16
|
const EventQueue_1 = __importDefault(require("./controller/EventQueue"));
|
|
17
|
+
const Logger_1 = require("./controller/Logger");
|
|
18
18
|
const FormUtils_1 = require("./utils/FormUtils");
|
|
19
19
|
const DataGroup_1 = __importDefault(require("./data/DataGroup"));
|
|
20
20
|
const FunctionRuntime_1 = require("./rules/FunctionRuntime");
|
|
21
21
|
const controller_1 = require("./controller");
|
|
22
|
-
const levels = {
|
|
23
|
-
off: 0,
|
|
24
|
-
debug: 1,
|
|
25
|
-
info: 2,
|
|
26
|
-
warn: 3,
|
|
27
|
-
error: 4
|
|
28
|
-
};
|
|
29
|
-
/**
|
|
30
|
-
* @private
|
|
31
|
-
*/
|
|
32
|
-
class Logger {
|
|
33
|
-
constructor(logLevel = 'off') {
|
|
34
|
-
this.logLevel = levels[logLevel];
|
|
35
|
-
}
|
|
36
|
-
debug(msg) {
|
|
37
|
-
this.log(msg, 'debug');
|
|
38
|
-
}
|
|
39
|
-
info(msg) {
|
|
40
|
-
this.log(msg, 'info');
|
|
41
|
-
}
|
|
42
|
-
warn(msg) {
|
|
43
|
-
this.log(msg, 'warn');
|
|
44
|
-
}
|
|
45
|
-
error(msg) {
|
|
46
|
-
this.log(msg, 'error');
|
|
47
|
-
}
|
|
48
|
-
log(msg, level) {
|
|
49
|
-
if (this.logLevel !== 0 && this.logLevel <= levels[level]) {
|
|
50
|
-
console[level](msg);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
exports.Logger = Logger;
|
|
55
22
|
/**
|
|
56
23
|
* Defines `form model` which implements {@link FormModel | form model}
|
|
57
24
|
*/
|
|
@@ -77,7 +44,7 @@ class Form extends Container_1.default {
|
|
|
77
44
|
*/
|
|
78
45
|
this._invalidFields = [];
|
|
79
46
|
this.dataRefRegex = /("[^"]+?"|[^.]+?)(?:\.|$)/g;
|
|
80
|
-
this._logger = new Logger(logLevel);
|
|
47
|
+
this._logger = new Logger_1.Logger(logLevel);
|
|
81
48
|
this.queueEvent(new controller_1.Initialize());
|
|
82
49
|
this.queueEvent(new controller_1.ExecuteRule());
|
|
83
50
|
this._ids = (0, FormUtils_1.IdGenerator)();
|
|
@@ -107,6 +74,13 @@ class Form extends Container_1.default {
|
|
|
107
74
|
var _a;
|
|
108
75
|
return (_a = this.getDataNode()) === null || _a === void 0 ? void 0 : _a.$value;
|
|
109
76
|
}
|
|
77
|
+
setFocus(field) {
|
|
78
|
+
const parent = field.parent;
|
|
79
|
+
const currentField = field;
|
|
80
|
+
while (parent != null && parent.activeChild != currentField) {
|
|
81
|
+
parent.activeChild = currentField;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
110
84
|
/**
|
|
111
85
|
* Returns the current state of the form
|
|
112
86
|
*
|
|
@@ -231,6 +205,9 @@ class Form extends Container_1.default {
|
|
|
231
205
|
}
|
|
232
206
|
return this._fields[id];
|
|
233
207
|
}
|
|
208
|
+
get qualifiedName() {
|
|
209
|
+
return '$form';
|
|
210
|
+
}
|
|
234
211
|
/**
|
|
235
212
|
* @private
|
|
236
213
|
*/
|
package/lib/FormInstance.d.ts
CHANGED
package/lib/FormInstance.js
CHANGED
|
@@ -6,39 +6,17 @@
|
|
|
6
6
|
*
|
|
7
7
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ADOBE NOR ITS THIRD PARTY PROVIDERS AND PARTNERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
8
8
|
*/
|
|
9
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
-
}
|
|
15
|
-
Object.defineProperty(o, k2, desc);
|
|
16
|
-
}) : (function(o, m, k, k2) {
|
|
17
|
-
if (k2 === undefined) k2 = k;
|
|
18
|
-
o[k2] = m[k];
|
|
19
|
-
}));
|
|
20
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
-
}) : function(o, v) {
|
|
23
|
-
o["default"] = v;
|
|
24
|
-
});
|
|
25
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
26
|
-
if (mod && mod.__esModule) return mod;
|
|
27
|
-
var result = {};
|
|
28
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
29
|
-
__setModuleDefault(result, mod);
|
|
30
|
-
return result;
|
|
31
|
-
};
|
|
32
9
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
33
10
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
34
11
|
};
|
|
35
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
13
|
exports.fetchForm = exports.validateFormData = exports.validateFormInstance = exports.createFormInstance = void 0;
|
|
37
|
-
const Form_1 =
|
|
14
|
+
const Form_1 = __importDefault(require("./Form"));
|
|
38
15
|
const JsonUtils_1 = require("./utils/JsonUtils");
|
|
39
16
|
const Fetch_1 = require("./utils/Fetch");
|
|
40
17
|
const RuleEngine_1 = __importDefault(require("./rules/RuleEngine"));
|
|
41
18
|
const EventQueue_1 = __importDefault(require("./controller/EventQueue"));
|
|
19
|
+
const Logger_1 = require("./controller/Logger");
|
|
42
20
|
/**
|
|
43
21
|
* Creates form instance using form model definition as per `adaptive form specification`
|
|
44
22
|
* @param formModel form model definition
|
|
@@ -52,7 +30,7 @@ const createFormInstance = (formModel, callback, logLevel = 'error', fModel = un
|
|
|
52
30
|
try {
|
|
53
31
|
let f = fModel;
|
|
54
32
|
if (f == null) {
|
|
55
|
-
f = new Form_1.default(Object.assign({}, formModel), new RuleEngine_1.default(), new EventQueue_1.default(new
|
|
33
|
+
f = new Form_1.default(Object.assign({}, formModel), new RuleEngine_1.default(), new EventQueue_1.default(new Logger_1.Logger(logLevel)), logLevel);
|
|
56
34
|
}
|
|
57
35
|
const formData = formModel === null || formModel === void 0 ? void 0 : formModel.data;
|
|
58
36
|
if (formData) {
|