@formio/js 5.1.0-dev.6040.debc859 → 5.1.0-dev.6042.6e62a7a
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/Changelog.md +140 -6
- package/dist/formio.form.js +591 -580
- package/dist/formio.form.min.js +1 -1
- package/dist/formio.full.js +613 -602
- package/dist/formio.full.min.js +1 -1
- package/dist/formio.js +47 -14
- package/dist/formio.min.js +1 -1
- package/dist/formio.utils.js +48 -15
- package/dist/formio.utils.min.js +1 -1
- package/lib/cjs/Element.d.ts +2 -1
- package/lib/cjs/Element.js +6 -4
- package/lib/cjs/Webform.d.ts +2 -2
- package/lib/cjs/Webform.js +9 -9
- package/lib/cjs/WebformBuilder.js +5 -1
- package/lib/cjs/Wizard.d.ts +1 -0
- package/lib/cjs/Wizard.js +23 -3
- package/lib/cjs/components/_classes/component/Component.d.ts +50 -15
- package/lib/cjs/components/_classes/component/Component.js +153 -69
- package/lib/cjs/components/_classes/component/editForm/Component.edit.data.js +19 -0
- package/lib/cjs/components/_classes/component/editForm/utils.js +1 -1
- package/lib/cjs/components/_classes/list/ListComponent.js +2 -2
- package/lib/cjs/components/_classes/nested/NestedComponent.d.ts +0 -1
- package/lib/cjs/components/_classes/nested/NestedComponent.form.js +13 -0
- package/lib/cjs/components/_classes/nested/NestedComponent.js +10 -18
- package/lib/cjs/components/_classes/nesteddata/NestedDataComponent.d.ts +0 -2
- package/lib/cjs/components/_classes/nesteddata/NestedDataComponent.js +0 -11
- package/lib/cjs/components/address/Address.d.ts +9 -0
- package/lib/cjs/components/address/Address.js +31 -8
- package/lib/cjs/components/address/editForm/Address.edit.display.d.ts +4 -0
- package/lib/cjs/components/address/editForm/Address.edit.display.js +1 -0
- package/lib/cjs/components/address/editForm/Address.edit.provider.js +8 -8
- package/lib/cjs/components/content/editForm/Content.edit.display.js +8 -0
- package/lib/cjs/components/currency/editForm/Currency.edit.display.js +12 -0
- package/lib/cjs/components/datagrid/DataGrid.js +0 -3
- package/lib/cjs/components/datamap/DataMap.js +2 -6
- package/lib/cjs/components/datetime/editForm/DateTime.edit.validation.d.ts +66 -15
- package/lib/cjs/components/datetime/editForm/DateTime.edit.validation.js +68 -47
- package/lib/cjs/components/day/editForm/Day.edit.display.js +8 -0
- package/lib/cjs/components/editgrid/EditGrid.js +3 -13
- package/lib/cjs/components/email/editForm/Email.edit.display.js +12 -0
- package/lib/cjs/components/fieldset/editForm/Fieldset.edit.display.js +8 -0
- package/lib/cjs/components/file/File.js +7 -2
- package/lib/cjs/components/file/editForm/File.edit.file.d.ts +13 -0
- package/lib/cjs/components/file/editForm/File.edit.file.js +1 -0
- package/lib/cjs/components/form/Form.d.ts +0 -1
- package/lib/cjs/components/form/Form.js +18 -22
- package/lib/cjs/components/hidden/editForm/Hidden.edit.display.js +8 -0
- package/lib/cjs/components/html/HTML.js +1 -2
- package/lib/cjs/components/html/editForm/HTML.edit.display.js +8 -0
- package/lib/cjs/components/number/editForm/Number.edit.display.js +12 -0
- package/lib/cjs/components/password/editForm/Password.edit.display.js +13 -1
- package/lib/cjs/components/phonenumber/PhoneNumber.form.js +9 -1
- package/lib/cjs/components/radio/Radio.js +1 -1
- package/lib/cjs/components/select/Select.js +1 -1
- package/lib/cjs/components/select/editForm/Select.edit.data.d.ts +68 -110
- package/lib/cjs/components/select/editForm/Select.edit.data.js +2 -37
- package/lib/cjs/components/selectboxes/SelectBoxes.js +3 -0
- package/lib/cjs/components/survey/Survey.js +1 -1
- package/lib/cjs/components/tabs/Tabs.js +1 -0
- package/lib/cjs/components/tabs/editForm/Tabs.edit.display.js +8 -0
- package/lib/cjs/components/textarea/TextArea.js +9 -1
- package/lib/cjs/components/textarea/editForm/TextArea.edit.display.js +12 -0
- package/lib/cjs/components/textfield/TextField.js +2 -2
- package/lib/cjs/components/unknown/Unknown.form.d.ts +2 -1
- package/lib/cjs/components/unknown/Unknown.form.js +13 -9
- package/lib/cjs/components/url/editForm/Url.edit.display.js +12 -0
- package/lib/cjs/components/well/editForm/Well.edit.display.js +8 -0
- package/lib/cjs/formio.form.js +2 -2
- package/lib/cjs/providers/storage/uploadAdapter.js +5 -3
- package/lib/cjs/translations/en.d.ts +1 -234
- package/lib/cjs/translations/en.js +4 -2
- package/lib/cjs/utils/formUtils.d.ts +2 -2
- package/lib/cjs/utils/utils.d.ts +9 -8
- package/lib/cjs/utils/utils.js +18 -23
- package/lib/cjs/widgets/CalendarWidget.js +6 -1
- package/lib/mjs/Element.d.ts +2 -1
- package/lib/mjs/Element.js +6 -4
- package/lib/mjs/Webform.d.ts +2 -2
- package/lib/mjs/Webform.js +9 -9
- package/lib/mjs/WebformBuilder.js +5 -1
- package/lib/mjs/Wizard.d.ts +1 -0
- package/lib/mjs/Wizard.js +22 -2
- package/lib/mjs/components/_classes/component/Component.d.ts +50 -15
- package/lib/mjs/components/_classes/component/Component.js +154 -70
- package/lib/mjs/components/_classes/component/editForm/Component.edit.data.js +19 -0
- package/lib/mjs/components/_classes/component/editForm/utils.js +1 -1
- package/lib/mjs/components/_classes/list/ListComponent.js +2 -2
- package/lib/mjs/components/_classes/nested/NestedComponent.d.ts +0 -1
- package/lib/mjs/components/_classes/nested/NestedComponent.form.js +13 -0
- package/lib/mjs/components/_classes/nested/NestedComponent.js +10 -18
- package/lib/mjs/components/_classes/nesteddata/NestedDataComponent.d.ts +0 -2
- package/lib/mjs/components/_classes/nesteddata/NestedDataComponent.js +0 -11
- package/lib/mjs/components/address/Address.d.ts +9 -0
- package/lib/mjs/components/address/Address.js +31 -8
- package/lib/mjs/components/address/editForm/Address.edit.display.d.ts +4 -0
- package/lib/mjs/components/address/editForm/Address.edit.display.js +1 -0
- package/lib/mjs/components/address/editForm/Address.edit.provider.js +8 -8
- package/lib/mjs/components/content/editForm/Content.edit.display.js +8 -0
- package/lib/mjs/components/currency/editForm/Currency.edit.display.js +12 -0
- package/lib/mjs/components/datagrid/DataGrid.js +0 -3
- package/lib/mjs/components/datamap/DataMap.js +2 -6
- package/lib/mjs/components/datetime/editForm/DateTime.edit.validation.d.ts +66 -15
- package/lib/mjs/components/datetime/editForm/DateTime.edit.validation.js +68 -47
- package/lib/mjs/components/day/editForm/Day.edit.display.js +8 -0
- package/lib/mjs/components/editgrid/EditGrid.js +3 -12
- package/lib/mjs/components/email/editForm/Email.edit.display.js +12 -0
- package/lib/mjs/components/fieldset/editForm/Fieldset.edit.display.js +8 -0
- package/lib/mjs/components/file/File.js +7 -2
- package/lib/mjs/components/file/editForm/File.edit.file.d.ts +13 -0
- package/lib/mjs/components/file/editForm/File.edit.file.js +1 -0
- package/lib/mjs/components/form/Form.d.ts +0 -1
- package/lib/mjs/components/form/Form.js +18 -22
- package/lib/mjs/components/hidden/editForm/Hidden.edit.display.js +8 -0
- package/lib/mjs/components/html/HTML.js +1 -2
- package/lib/mjs/components/html/editForm/HTML.edit.display.js +8 -0
- package/lib/mjs/components/number/editForm/Number.edit.display.js +12 -0
- package/lib/mjs/components/password/editForm/Password.edit.display.js +13 -1
- package/lib/mjs/components/phonenumber/PhoneNumber.form.js +9 -1
- package/lib/mjs/components/radio/Radio.js +1 -1
- package/lib/mjs/components/select/Select.js +1 -1
- package/lib/mjs/components/select/editForm/Select.edit.data.d.ts +68 -110
- package/lib/mjs/components/select/editForm/Select.edit.data.js +2 -37
- package/lib/mjs/components/selectboxes/SelectBoxes.js +3 -0
- package/lib/mjs/components/survey/Survey.js +1 -1
- package/lib/mjs/components/tabs/Tabs.js +1 -0
- package/lib/mjs/components/tabs/editForm/Tabs.edit.display.js +8 -0
- package/lib/mjs/components/textarea/TextArea.js +9 -1
- package/lib/mjs/components/textarea/editForm/TextArea.edit.display.js +12 -0
- package/lib/mjs/components/textfield/TextField.js +2 -2
- package/lib/mjs/components/unknown/Unknown.form.d.ts +2 -1
- package/lib/mjs/components/unknown/Unknown.form.js +13 -9
- package/lib/mjs/components/url/editForm/Url.edit.display.js +12 -0
- package/lib/mjs/components/well/editForm/Well.edit.display.js +8 -0
- package/lib/mjs/formio.form.js +1 -1
- package/lib/mjs/providers/storage/uploadAdapter.js +5 -3
- package/lib/mjs/translations/en.d.ts +1 -234
- package/lib/mjs/translations/en.js +5 -47
- package/lib/mjs/utils/formUtils.d.ts +2 -2
- package/lib/mjs/utils/utils.d.ts +9 -8
- package/lib/mjs/utils/utils.js +16 -21
- package/lib/mjs/widgets/CalendarWidget.js +7 -2
- package/package.json +2 -2
- package/lib/cjs/i18n.d.ts +0 -13
- package/lib/cjs/i18n.js +0 -19
- package/lib/cjs/utils/i18n.d.ts +0 -19
- package/lib/cjs/utils/i18n.js +0 -120
- package/lib/mjs/i18n.d.ts +0 -13
- package/lib/mjs/i18n.js +0 -14
- package/lib/mjs/utils/i18n.d.ts +0 -19
- package/lib/mjs/utils/i18n.js +0 -112
@@ -20,7 +20,6 @@ export default class AddressComponent extends ContainerComponent {
|
|
20
20
|
key: 'address',
|
21
21
|
switchToManualModeLabel: 'Can\'t find address? Switch to manual mode.',
|
22
22
|
provider: '',
|
23
|
-
providerOptions: {},
|
24
23
|
manualModeViewString: '',
|
25
24
|
hideLabel: false,
|
26
25
|
disableClearIcon: false,
|
@@ -113,20 +112,33 @@ export default class AddressComponent extends ContainerComponent {
|
|
113
112
|
NestedComponent.prototype.addComponents.call(this, this.manualMode ? this.address : {});
|
114
113
|
}
|
115
114
|
Field.prototype.init.call(this);
|
115
|
+
// Added for backwards compatibility
|
116
|
+
if (this.component.providerOptions) {
|
117
|
+
const { params, url, queryProperty, responseProperty, displayValueProperty } = this.component.providerOptions;
|
118
|
+
const key = params?.key;
|
119
|
+
const autocompleteOptions = params?.autocompleteOptions;
|
120
|
+
delete this.component.providerOptions;
|
121
|
+
this.component.url = url;
|
122
|
+
this.component.queryProperty = queryProperty;
|
123
|
+
this.component.responseProperty = responseProperty;
|
124
|
+
this.component.displayValueProperty = displayValueProperty;
|
125
|
+
this.component.apiKey = key;
|
126
|
+
this.component.autocompleteOptions = autocompleteOptions;
|
127
|
+
}
|
128
|
+
let provider = this.component.provider;
|
129
|
+
const providerOptions = this.providerOptions;
|
130
|
+
const map = this.component.map;
|
116
131
|
if (!this.builderMode) {
|
117
|
-
if (
|
118
|
-
const { provider, providerOptions, } = this.component;
|
132
|
+
if (provider) {
|
119
133
|
if (_.get(providerOptions, 'params.subscriptionKey')) {
|
120
134
|
_.set(providerOptions, "params['subscription-key']", _.get(providerOptions, 'params.subscriptionKey'));
|
121
135
|
_.unset(providerOptions, 'params.subscriptionKey');
|
122
136
|
}
|
123
137
|
this.provider = this.initializeProvider(provider, providerOptions);
|
124
138
|
}
|
125
|
-
else if (
|
139
|
+
else if (map) {
|
126
140
|
// Fallback to legacy version where Google Maps was the only provider.
|
127
|
-
this.component.provider = GoogleAddressProvider.name;
|
128
|
-
this.component.providerOptions = this.component.providerOptions || {};
|
129
|
-
const { map, provider, providerOptions, } = this.component;
|
141
|
+
provider = this.component.provider = GoogleAddressProvider.name;
|
130
142
|
const { key, region, } = map;
|
131
143
|
if (key) {
|
132
144
|
_.set(providerOptions, 'params.key', key);
|
@@ -258,6 +270,16 @@ export default class AddressComponent extends ContainerComponent {
|
|
258
270
|
? (this.refs[AddressComponent.modeSwitcherRef] || null)
|
259
271
|
: null;
|
260
272
|
}
|
273
|
+
get providerOptions() {
|
274
|
+
return {
|
275
|
+
params: { subscriptionKey: this.component.subscriptionKey, key: this.component.apiKey, ...this.component.params },
|
276
|
+
url: this.component.url,
|
277
|
+
queryProperty: this.component.queryProperty,
|
278
|
+
responseProperty: this.component.responseProperty,
|
279
|
+
displayValueProperty: this.component.displayValueProperty,
|
280
|
+
autocompleteOptions: this.component.autocompleteOptions
|
281
|
+
};
|
282
|
+
}
|
261
283
|
get removeValueIcon() {
|
262
284
|
return this.refs
|
263
285
|
? (this.refs[AddressComponent.removeValueIconRef] || null)
|
@@ -371,7 +393,8 @@ export default class AddressComponent extends ContainerComponent {
|
|
371
393
|
const result = ((this.builderMode || this.manualMode) ? super.attach : Field.prototype.attach).call(this, element);
|
372
394
|
if (!this.builderMode) {
|
373
395
|
if (!this.provider && this.component.provider) {
|
374
|
-
const
|
396
|
+
const provider = this.component.provider;
|
397
|
+
const providerOptions = this.providerOptions;
|
375
398
|
this.provider = this.initializeProvider(provider, providerOptions);
|
376
399
|
}
|
377
400
|
}
|
@@ -8,6 +8,7 @@ declare const _default: ({
|
|
8
8
|
customConditional: ({ data }: {
|
9
9
|
data: any;
|
10
10
|
}) => boolean;
|
11
|
+
defaultValue?: undefined;
|
11
12
|
placeholder?: undefined;
|
12
13
|
validate?: undefined;
|
13
14
|
} | {
|
@@ -15,6 +16,7 @@ declare const _default: ({
|
|
15
16
|
type: string;
|
16
17
|
input: boolean;
|
17
18
|
key: string;
|
19
|
+
defaultValue: string;
|
18
20
|
label: string;
|
19
21
|
placeholder: string;
|
20
22
|
tooltip: string;
|
@@ -32,6 +34,7 @@ declare const _default: ({
|
|
32
34
|
label: string;
|
33
35
|
tooltip: string;
|
34
36
|
customConditional?: undefined;
|
37
|
+
defaultValue?: undefined;
|
35
38
|
placeholder?: undefined;
|
36
39
|
validate?: undefined;
|
37
40
|
} | {
|
@@ -45,6 +48,7 @@ declare const _default: ({
|
|
45
48
|
customConditional: ({ data }: {
|
46
49
|
data: any;
|
47
50
|
}) => any;
|
51
|
+
defaultValue?: undefined;
|
48
52
|
validate?: undefined;
|
49
53
|
})[];
|
50
54
|
export default _default;
|
@@ -13,6 +13,7 @@ export default [
|
|
13
13
|
type: 'textfield',
|
14
14
|
input: true,
|
15
15
|
key: 'switchToManualModeLabel',
|
16
|
+
defaultValue: 'Can\'t find address? Switch to manual mode.',
|
16
17
|
label: 'Switch To Manual Mode Label',
|
17
18
|
placeholder: 'Switch To Manual Mode Label',
|
18
19
|
tooltip: 'The label for the checkbox used to switch to manual mode.',
|
@@ -26,7 +26,7 @@ export default [
|
|
26
26
|
{
|
27
27
|
type: 'textfield',
|
28
28
|
input: true,
|
29
|
-
key: "
|
29
|
+
key: "subscriptionKey",
|
30
30
|
label: 'Subscription Key',
|
31
31
|
placeholder: 'Enter Subscription Key',
|
32
32
|
weight: 10,
|
@@ -41,7 +41,7 @@ export default [
|
|
41
41
|
{
|
42
42
|
type: 'textfield',
|
43
43
|
input: true,
|
44
|
-
key: '
|
44
|
+
key: 'url',
|
45
45
|
label: 'Url',
|
46
46
|
placeholder: 'Enter Url',
|
47
47
|
weight: 10,
|
@@ -56,7 +56,7 @@ export default [
|
|
56
56
|
{
|
57
57
|
type: 'textfield',
|
58
58
|
input: true,
|
59
|
-
key: '
|
59
|
+
key: 'queryProperty',
|
60
60
|
label: 'Query Property',
|
61
61
|
defaultValue: 'query',
|
62
62
|
placeholder: 'Enter Query Property',
|
@@ -69,7 +69,7 @@ export default [
|
|
69
69
|
{
|
70
70
|
type: 'textfield',
|
71
71
|
input: true,
|
72
|
-
key: '
|
72
|
+
key: 'responseProperty',
|
73
73
|
label: 'Response Property',
|
74
74
|
placeholder: 'Enter Response Property',
|
75
75
|
weight: 30,
|
@@ -81,7 +81,7 @@ export default [
|
|
81
81
|
{
|
82
82
|
type: 'textfield',
|
83
83
|
input: true,
|
84
|
-
key: '
|
84
|
+
key: 'displayValueProperty',
|
85
85
|
label: 'Display Value Property',
|
86
86
|
placeholder: 'Display Value Property',
|
87
87
|
weight: 40,
|
@@ -93,7 +93,7 @@ export default [
|
|
93
93
|
{
|
94
94
|
type: 'textarea',
|
95
95
|
input: true,
|
96
|
-
key: '
|
96
|
+
key: 'params',
|
97
97
|
label: 'Params',
|
98
98
|
placeholder: '{ ... }',
|
99
99
|
weight: 50,
|
@@ -108,7 +108,7 @@ export default [
|
|
108
108
|
{
|
109
109
|
type: 'textfield',
|
110
110
|
input: true,
|
111
|
-
key: '
|
111
|
+
key: 'apiKey',
|
112
112
|
label: 'API Key',
|
113
113
|
placeholder: 'Enter API Key',
|
114
114
|
weight: 10,
|
@@ -123,7 +123,7 @@ export default [
|
|
123
123
|
{
|
124
124
|
type: 'textarea',
|
125
125
|
input: true,
|
126
|
-
key: '
|
126
|
+
key: 'autocompleteOptions',
|
127
127
|
label: 'Provider options',
|
128
128
|
placeholder: 'Enter provider options as JSON object',
|
129
129
|
defaultValue: {},
|
@@ -7,6 +7,18 @@ export default [
|
|
7
7
|
key: 'allowMultipleMasks',
|
8
8
|
ignore: true
|
9
9
|
},
|
10
|
+
{
|
11
|
+
key: 'inputMasks',
|
12
|
+
ignore: true
|
13
|
+
},
|
14
|
+
{
|
15
|
+
key: 'widget.type',
|
16
|
+
ignore: true
|
17
|
+
},
|
18
|
+
{
|
19
|
+
key: 'widget',
|
20
|
+
ignore: true
|
21
|
+
},
|
10
22
|
{
|
11
23
|
key: 'showWordCount',
|
12
24
|
ignore: true
|
@@ -609,9 +609,6 @@ export default class DataGridComponent extends NestedArrayComponent {
|
|
609
609
|
this.updateOnChange(flags, changed);
|
610
610
|
return changed;
|
611
611
|
}
|
612
|
-
restoreComponentsContext() {
|
613
|
-
this.rows.forEach((row, index) => _.forIn(row, (component) => component.data = this.dataValue[index]));
|
614
|
-
}
|
615
612
|
toggleGroup(element, index) {
|
616
613
|
element.classList.toggle('collapsed');
|
617
614
|
_.each(this.refs.chunks[index], row => {
|
@@ -68,14 +68,10 @@ export default class DataMapComponent extends DataGridComponent {
|
|
68
68
|
return {};
|
69
69
|
}
|
70
70
|
get dataValue() {
|
71
|
-
if (!this.key
|
72
|
-
(this.conditionallyHidden && this.component.clearOnHide)) {
|
71
|
+
if (!this.key) {
|
73
72
|
return this.emptyValue;
|
74
73
|
}
|
75
|
-
|
76
|
-
this.dataValue = this.emptyValue;
|
77
|
-
}
|
78
|
-
return _.get(this.data, this.key);
|
74
|
+
return _.get(this.data, this.key, this.emptyValue);
|
79
75
|
}
|
80
76
|
set dataValue(value) {
|
81
77
|
super.dataValue = value;
|
@@ -6,36 +6,87 @@ declare const _default: ({
|
|
6
6
|
persistent: boolean;
|
7
7
|
weight: number;
|
8
8
|
tooltip: string;
|
9
|
+
applyMaskOn?: undefined;
|
10
|
+
logic?: undefined;
|
9
11
|
skipMerge?: undefined;
|
10
|
-
|
12
|
+
tableView?: undefined;
|
13
|
+
validateWhenHidden?: undefined;
|
11
14
|
enableTime?: undefined;
|
12
15
|
} | {
|
16
|
+
label: string;
|
17
|
+
tooltip: string;
|
18
|
+
applyMaskOn: string;
|
19
|
+
key: string;
|
20
|
+
logic: ({
|
21
|
+
name: string;
|
22
|
+
trigger: {
|
23
|
+
type: string;
|
24
|
+
javascript: string;
|
25
|
+
event?: undefined;
|
26
|
+
};
|
27
|
+
actions: {
|
28
|
+
name: string;
|
29
|
+
type: string;
|
30
|
+
schemaDefinition: string;
|
31
|
+
}[];
|
32
|
+
} | {
|
33
|
+
name: string;
|
34
|
+
trigger: {
|
35
|
+
type: string;
|
36
|
+
event: string;
|
37
|
+
javascript?: undefined;
|
38
|
+
};
|
39
|
+
actions: {
|
40
|
+
name: string;
|
41
|
+
type: string;
|
42
|
+
customAction: string;
|
43
|
+
}[];
|
44
|
+
})[];
|
13
45
|
type: string;
|
14
46
|
input: boolean;
|
15
|
-
key: string;
|
16
|
-
label: string;
|
17
47
|
skipMerge: boolean;
|
18
48
|
weight: number;
|
19
|
-
tooltip: string;
|
20
|
-
customConditional({ data, component }: {
|
21
|
-
data: any;
|
22
|
-
component: any;
|
23
|
-
}): boolean;
|
24
49
|
persistent?: undefined;
|
50
|
+
tableView?: undefined;
|
51
|
+
validateWhenHidden?: undefined;
|
25
52
|
enableTime?: undefined;
|
26
53
|
} | {
|
54
|
+
label: string;
|
55
|
+
tooltip: string;
|
56
|
+
applyMaskOn: string;
|
57
|
+
tableView: boolean;
|
58
|
+
validateWhenHidden: boolean;
|
59
|
+
key: string;
|
60
|
+
logic: ({
|
61
|
+
name: string;
|
62
|
+
trigger: {
|
63
|
+
type: string;
|
64
|
+
javascript: string;
|
65
|
+
event?: undefined;
|
66
|
+
};
|
67
|
+
actions: {
|
68
|
+
name: string;
|
69
|
+
type: string;
|
70
|
+
schemaDefinition: string;
|
71
|
+
}[];
|
72
|
+
} | {
|
73
|
+
name: string;
|
74
|
+
trigger: {
|
75
|
+
type: string;
|
76
|
+
event: string;
|
77
|
+
javascript?: undefined;
|
78
|
+
};
|
79
|
+
actions: {
|
80
|
+
name: string;
|
81
|
+
type: string;
|
82
|
+
customAction: string;
|
83
|
+
}[];
|
84
|
+
})[];
|
27
85
|
type: string;
|
28
86
|
input: boolean;
|
29
87
|
enableTime: boolean;
|
30
|
-
key: string;
|
31
88
|
skipMerge: boolean;
|
32
|
-
label: string;
|
33
89
|
weight: number;
|
34
|
-
tooltip: string;
|
35
|
-
customConditional({ data, component }: {
|
36
|
-
data: any;
|
37
|
-
component: any;
|
38
|
-
}): any;
|
39
90
|
persistent?: undefined;
|
40
91
|
})[];
|
41
92
|
export default _default;
|
@@ -9,35 +9,44 @@ export default [
|
|
9
9
|
tooltip: 'Enables to use input for moment functions instead of calendar.'
|
10
10
|
},
|
11
11
|
{
|
12
|
-
|
13
|
-
|
12
|
+
label: 'Minimum Date',
|
13
|
+
tooltip: "The minimum date that can be picked. You can also use Moment.js functions. For example: moment().subtract(10, 'days')",
|
14
|
+
applyMaskOn: 'change',
|
14
15
|
key: 'datePicker.minDate',
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
16
|
+
logic: [
|
17
|
+
{
|
18
|
+
name: 'check input mode',
|
19
|
+
trigger: {
|
20
|
+
type: 'javascript',
|
21
|
+
javascript: "if (component.datePicker && component.datePicker.minDate && component.datePicker.minDate.indexOf('moment') !== -1) {\r\n result = false;\r\n}\r\nelse {\r\n result = !data.enableMinDateInput;\r\n}",
|
22
|
+
},
|
23
|
+
actions: [
|
24
|
+
{
|
25
|
+
name: 'change component',
|
26
|
+
type: 'mergeComponentSchema',
|
27
|
+
schemaDefinition: "schema = {\n type: 'datetime',\n label: 'Use calendar to set minDate',\n enableDate: true,\n enableTime: true,\n tooltip: 'Enables to use calendar to set date.',\n widget: {\n type: 'calendar',\n displayInTimezone: 'viewer',\n locale: 'en',\n useLocaleSettings: false,\n allowInput: true,\n mode: 'single',\n enableTime: true,\n noCalendar: false,\n format: 'yyyy-MM-dd hh:mm a',\n hourIncrement: 1,\n minuteIncrement: 1,\n time_24hr: false,\n disableWeekends: false,\n disableWeekdays: false,\n maxDate: null,\n },\n};",
|
28
|
+
},
|
29
|
+
],
|
30
|
+
},
|
31
|
+
{
|
32
|
+
name: 'clear value',
|
33
|
+
trigger: {
|
34
|
+
type: 'event',
|
35
|
+
event: 'componentChange',
|
36
|
+
},
|
37
|
+
actions: [
|
38
|
+
{
|
39
|
+
name: 'reset value',
|
40
|
+
type: 'customAction',
|
41
|
+
customAction: "var isDateInput = instance.component?.type === 'datetime';\nvar enableInput = data.enableMinDateInput;\nvar allowReset = result[0].component && result[0].component.key === 'enableMinDateInput' && !result[0].flags?.fromSubmission;\nif(((enableInput && isDateInput) || (!enableInput && !isDateInput)) && allowReset) {\n instance.resetValue()\n}\n",
|
42
|
+
},
|
43
|
+
],
|
44
|
+
},
|
45
|
+
],
|
27
46
|
type: 'textfield',
|
28
47
|
input: true,
|
29
|
-
enableTime: false,
|
30
|
-
key: 'datePicker.minDate',
|
31
48
|
skipMerge: true,
|
32
|
-
label: 'Minimum Date',
|
33
49
|
weight: 10,
|
34
|
-
tooltip: 'The minimum date that can be picked. You can also use Moment.js functions. For example: \n \n moment().subtract(10, \'days\')',
|
35
|
-
customConditional({ data, component }) {
|
36
|
-
if (component.datePicker && component.datePicker.minDate && component.datePicker.minDate.indexOf('moment') !== -1) {
|
37
|
-
return true;
|
38
|
-
}
|
39
|
-
return data.enableMinDateInput;
|
40
|
-
},
|
41
50
|
},
|
42
51
|
{
|
43
52
|
type: 'checkbox',
|
@@ -49,34 +58,46 @@ export default [
|
|
49
58
|
tooltip: 'Enables to use input for moment functions instead of calendar.'
|
50
59
|
},
|
51
60
|
{
|
52
|
-
|
53
|
-
|
61
|
+
label: 'Maximum Date',
|
62
|
+
tooltip: "The maximum date that can be picked. You can also use Moment.js functions. For example: moment().add(10, 'days')",
|
63
|
+
applyMaskOn: 'change',
|
64
|
+
tableView: true,
|
65
|
+
validateWhenHidden: false,
|
54
66
|
key: 'datePicker.maxDate',
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
+
logic: [
|
68
|
+
{
|
69
|
+
name: 'check input mode',
|
70
|
+
trigger: {
|
71
|
+
type: 'javascript',
|
72
|
+
javascript: "if (component.datePicker && component.datePicker.maxDate && component.datePicker.maxDate.indexOf('moment') !== -1) {\r\n result = false;\r\n}\r\nelse {\r\n result = !data.enableMaxDateInput;\r\n}",
|
73
|
+
},
|
74
|
+
actions: [
|
75
|
+
{
|
76
|
+
name: 'change component',
|
77
|
+
type: 'mergeComponentSchema',
|
78
|
+
schemaDefinition: "schema = {\n type: 'datetime',\n label: 'Use calendar to set maxDate',\n enableDate: true,\n enableTime: true,\n tooltip: 'Enables to use calendar to set date.',\n widget: {\n type: 'calendar',\n displayInTimezone: 'viewer',\n locale: 'en',\n useLocaleSettings: false,\n allowInput: true,\n mode: 'single',\n enableTime: true,\n noCalendar: false,\n format: 'yyyy-MM-dd hh:mm a',\n hourIncrement: 1,\n minuteIncrement: 1,\n time_24hr: false,\n disableWeekends: false,\n disableWeekdays: false,\n maxDate: null,\n },\n};",
|
79
|
+
},
|
80
|
+
],
|
81
|
+
},
|
82
|
+
{
|
83
|
+
name: 'clear value',
|
84
|
+
trigger: {
|
85
|
+
type: 'event',
|
86
|
+
event: 'componentChange',
|
87
|
+
},
|
88
|
+
actions: [
|
89
|
+
{
|
90
|
+
name: 'reset value',
|
91
|
+
type: 'customAction',
|
92
|
+
customAction: "var isDateInput = instance.component?.type === 'datetime';\nvar enableInput = data.enableMaxDateInput;\nvar allowReset = result[0].component && result[0].component.key === 'enableMaxDateInput' && !result[0].flags?.fromSubmission;\nif(((enableInput && isDateInput) || (!enableInput && !isDateInput)) && allowReset) {\n instance.resetValue()\n}\n",
|
93
|
+
},
|
94
|
+
],
|
95
|
+
},
|
96
|
+
],
|
67
97
|
type: 'textfield',
|
68
98
|
input: true,
|
69
99
|
enableTime: false,
|
70
|
-
key: 'datePicker.maxDate',
|
71
100
|
skipMerge: true,
|
72
|
-
label: 'Maximum Date',
|
73
|
-
tooltip: 'The maximum date that can be picked. You can also use Moment.js functions. For example: \n \n moment().add(10, \'days\')',
|
74
101
|
weight: 20,
|
75
|
-
customConditional({ data, component }) {
|
76
|
-
if (component.datePicker && component.datePicker.maxDate && component.datePicker.maxDate.indexOf('moment') !== -1) {
|
77
|
-
return true;
|
78
|
-
}
|
79
|
-
return data.enableMaxDateInput;
|
80
|
-
},
|
81
102
|
}
|
82
103
|
];
|
@@ -546,13 +546,6 @@ export default class EditGridComponent extends NestedArrayComponent {
|
|
546
546
|
}
|
547
547
|
});
|
548
548
|
}
|
549
|
-
restoreComponentsContext() {
|
550
|
-
this.getComponents().forEach((component) => {
|
551
|
-
const rowData = this.dataValue[component.rowIndex];
|
552
|
-
const editRowData = this.editRows[component.rowIndex]?.data;
|
553
|
-
component.data = rowData || editRowData;
|
554
|
-
});
|
555
|
-
}
|
556
549
|
flattenComponents(rowIndex) {
|
557
550
|
const result = {};
|
558
551
|
this.everyComponent((component) => {
|
@@ -1106,7 +1099,9 @@ export default class EditGridComponent extends NestedArrayComponent {
|
|
1106
1099
|
errors.push(...this._errors);
|
1107
1100
|
return false;
|
1108
1101
|
}
|
1109
|
-
|
1102
|
+
// TODO: this is the only place invalidMessage gets called, and it's not clear why it's needed - we already validate the editGrid
|
1103
|
+
// component above with super.checkComponentValidity
|
1104
|
+
const message = this.invalid || this.invalidMessage(data, dirty, false, row, options);
|
1110
1105
|
if (allRowErrors.length && this.root?.submitted && !message) {
|
1111
1106
|
this._errors = this.setCustomValidity(message, dirty);
|
1112
1107
|
errors.push(...this._errors);
|
@@ -1150,9 +1145,6 @@ export default class EditGridComponent extends NestedArrayComponent {
|
|
1150
1145
|
}
|
1151
1146
|
}
|
1152
1147
|
const changed = this.hasChanged(value, this.dataValue);
|
1153
|
-
if (this.parent) {
|
1154
|
-
this.parent.checkComponentConditions();
|
1155
|
-
}
|
1156
1148
|
this.dataValue = value;
|
1157
1149
|
// Refresh editRow data when data changes.
|
1158
1150
|
this.dataValue.forEach((row, rowIndex) => {
|
@@ -1183,7 +1175,6 @@ export default class EditGridComponent extends NestedArrayComponent {
|
|
1183
1175
|
this.editRows = this.editRows.slice(0, dataLength);
|
1184
1176
|
this.openWhenEmpty();
|
1185
1177
|
this.updateOnChange(flags, changed);
|
1186
|
-
this.checkData();
|
1187
1178
|
this.changeState(changed, flags);
|
1188
1179
|
return changed;
|
1189
1180
|
}
|
@@ -7,6 +7,18 @@ export default [
|
|
7
7
|
key: 'allowMultipleMasks',
|
8
8
|
ignore: true,
|
9
9
|
},
|
10
|
+
{
|
11
|
+
key: 'inputMasks',
|
12
|
+
ignore: true
|
13
|
+
},
|
14
|
+
{
|
15
|
+
key: 'widget.type',
|
16
|
+
ignore: true
|
17
|
+
},
|
18
|
+
{
|
19
|
+
key: 'widget',
|
20
|
+
ignore: true
|
21
|
+
},
|
10
22
|
{
|
11
23
|
key: 'showWordCount',
|
12
24
|
ignore: true
|
@@ -903,14 +903,17 @@ export default class FileComponent extends Field {
|
|
903
903
|
} : false;
|
904
904
|
}
|
905
905
|
async uploadFile(fileToSync) {
|
906
|
-
|
906
|
+
const filePromise = this.fileService.uploadFile(fileToSync.storage, fileToSync.file, fileToSync.name, fileToSync.dir,
|
907
907
|
// Progress callback
|
908
|
-
this.updateProgress.bind(this, fileToSync), fileToSync.url, fileToSync.options, fileToSync.fileKey, fileToSync.groupPermissions, fileToSync.groupResourceId, () => {
|
908
|
+
this.updateProgress.bind(this, fileToSync), fileToSync.url, fileToSync.options, fileToSync.fileKey, fileToSync.groupPermissions, fileToSync.groupResourceId, () => {
|
909
|
+
this.emit('fileUploadingStart', filePromise);
|
910
|
+
},
|
909
911
|
// Abort upload callback
|
910
912
|
(abort) => this.abortUploads.push({
|
911
913
|
id: fileToSync.id,
|
912
914
|
abort,
|
913
915
|
}), this.getMultipartOptions(fileToSync));
|
916
|
+
return await filePromise;
|
914
917
|
}
|
915
918
|
async upload() {
|
916
919
|
if (!this.filesToSync.filesToUpload.length) {
|
@@ -930,6 +933,7 @@ export default class FileComponent extends Field {
|
|
930
933
|
fileToSync.message = this.t('succefullyUploaded');
|
931
934
|
fileInfo.originalName = fileToSync.originalName;
|
932
935
|
fileInfo.hash = fileToSync.hash;
|
936
|
+
this.emit('fileUploadingEnd', Promise.resolve(fileInfo));
|
933
937
|
}
|
934
938
|
catch (response) {
|
935
939
|
fileToSync.status = 'error';
|
@@ -939,6 +943,7 @@ export default class FileComponent extends Field {
|
|
939
943
|
: response.type === 'abort'
|
940
944
|
? this.t('Request was aborted')
|
941
945
|
: response.toString();
|
946
|
+
this.emit('fileUploadingEnd', Promise.reject(response));
|
942
947
|
this.emit('fileUploadError', {
|
943
948
|
fileToSync,
|
944
949
|
response,
|