@formio/js 5.0.0-rc.91 → 5.0.0-rc.92

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. package/dist/formio.embed.js +1 -1
  2. package/dist/formio.embed.min.js +1 -1
  3. package/dist/formio.embed.min.js.LICENSE.txt +1 -1
  4. package/dist/formio.form.js +20 -20
  5. package/dist/formio.form.min.js +1 -1
  6. package/dist/formio.form.min.js.LICENSE.txt +1 -1
  7. package/dist/formio.full.js +21 -21
  8. package/dist/formio.full.min.js +1 -1
  9. package/dist/formio.full.min.js.LICENSE.txt +1 -1
  10. package/dist/formio.js +3 -3
  11. package/dist/formio.min.js +1 -1
  12. package/dist/formio.min.js.LICENSE.txt +1 -1
  13. package/dist/formio.utils.js +6 -6
  14. package/dist/formio.utils.min.js +1 -1
  15. package/dist/formio.utils.min.js.LICENSE.txt +1 -1
  16. package/lib/cjs/Webform.js +7 -1
  17. package/lib/cjs/components/_classes/component/Component.js +2 -2
  18. package/lib/cjs/components/_classes/component/editForm/Component.edit.conditional.js +1 -1
  19. package/lib/cjs/components/_classes/component/editForm/Component.edit.data.js +1 -1
  20. package/lib/cjs/components/_classes/component/editForm/utils.js +1 -1
  21. package/lib/cjs/components/day/Day.js +3 -0
  22. package/lib/cjs/components/editgrid/EditGrid.js +8 -2
  23. package/lib/cjs/components/editgrid/fixtures/comp19.d.ts +59 -0
  24. package/lib/cjs/components/editgrid/fixtures/comp19.js +73 -0
  25. package/lib/cjs/components/editgrid/fixtures/index.d.ts +2 -1
  26. package/lib/cjs/components/editgrid/fixtures/index.js +3 -1
  27. package/lib/cjs/components/form/editForm/Form.edit.data.js +1 -1
  28. package/lib/cjs/components/number/fixtures/comp11.d.ts +17 -0
  29. package/lib/cjs/components/number/fixtures/comp11.js +20 -0
  30. package/lib/cjs/components/number/fixtures/index.d.ts +2 -1
  31. package/lib/cjs/components/number/fixtures/index.js +3 -1
  32. package/lib/cjs/components/time/Time.js +0 -6
  33. package/lib/cjs/components/time/fixtures/timeForm2.js +9 -0
  34. package/lib/mjs/Webform.js +6 -1
  35. package/lib/mjs/components/_classes/component/Component.js +2 -2
  36. package/lib/mjs/components/_classes/component/editForm/Component.edit.conditional.js +1 -1
  37. package/lib/mjs/components/_classes/component/editForm/Component.edit.data.js +1 -1
  38. package/lib/mjs/components/_classes/component/editForm/utils.js +1 -1
  39. package/lib/mjs/components/day/Day.js +3 -0
  40. package/lib/mjs/components/editgrid/EditGrid.js +8 -2
  41. package/lib/mjs/components/editgrid/fixtures/comp19.d.ts +59 -0
  42. package/lib/mjs/components/editgrid/fixtures/comp19.js +71 -0
  43. package/lib/mjs/components/editgrid/fixtures/index.d.ts +2 -1
  44. package/lib/mjs/components/editgrid/fixtures/index.js +2 -1
  45. package/lib/mjs/components/form/editForm/Form.edit.data.js +1 -1
  46. package/lib/mjs/components/number/fixtures/comp11.d.ts +17 -0
  47. package/lib/mjs/components/number/fixtures/comp11.js +18 -0
  48. package/lib/mjs/components/number/fixtures/index.d.ts +2 -1
  49. package/lib/mjs/components/number/fixtures/index.js +2 -1
  50. package/lib/mjs/components/time/Time.js +0 -6
  51. package/lib/mjs/components/time/fixtures/timeForm2.js +9 -0
  52. package/package.json +3 -3
@@ -20,7 +20,7 @@
20
20
 
21
21
  /*! @license DOMPurify 3.1.6 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.1.6/LICENSE */
22
22
 
23
- /*! formiojs v5.0.0-rc.91 | https://unpkg.com/formiojs@5.0.0-rc.91/LICENSE.txt */
23
+ /*! formiojs v5.0.0-rc.92 | https://unpkg.com/formiojs@5.0.0-rc.92/LICENSE.txt */
24
24
 
25
25
  /**
26
26
  * @license
@@ -1228,9 +1228,15 @@ class Webform extends NestedDataComponent_1.default {
1228
1228
  * @param {any} changes - The changes that have occured in the form.
1229
1229
  */
1230
1230
  onChange(flags, changed, modified, changes) {
1231
+ var _a;
1231
1232
  flags = flags || {};
1232
1233
  let isChangeEventEmitted = false;
1233
- super.onChange(flags, true);
1234
+ if (((_a = this.parent) === null || _a === void 0 ? void 0 : _a.subForm) === this) {
1235
+ super.onChange(Object.assign(Object.assign({}, flags), { modified }), false);
1236
+ }
1237
+ else {
1238
+ super.onChange(flags, true);
1239
+ }
1234
1240
  const value = lodash_1.default.clone(this.submission);
1235
1241
  flags.changed = value.changed = changed;
1236
1242
  flags.changes = changes;
@@ -1738,12 +1738,12 @@ class Component extends Element_1.default {
1738
1738
  var _a, _b, _c;
1739
1739
  if ((_a = this.root) === null || _a === void 0 ? void 0 : _a.currentSelection) {
1740
1740
  if ((_b = this.refs.input) === null || _b === void 0 ? void 0 : _b.length) {
1741
- const { selection, index } = this.root.currentSelection;
1741
+ const { index } = this.root.currentSelection;
1742
1742
  let input = this.refs.input[index];
1743
1743
  const isInputRangeSelectable = (i) => /text|search|password|tel|url/i.test((i === null || i === void 0 ? void 0 : i.type) || '');
1744
1744
  if (input) {
1745
1745
  if (isInputRangeSelectable(input)) {
1746
- input.setSelectionRange(...selection);
1746
+ input.setSelectionRange(input.value.length, input.value.length);
1747
1747
  }
1748
1748
  }
1749
1749
  else {
@@ -50,6 +50,6 @@ exports.default = [
50
50
  },
51
51
  utils_1.default.javaScriptValue('Advanced Conditions', 'customConditional', 'conditional.json', 110, '<p>You must assign the <strong>show</strong> variable a boolean result.</p>' +
52
52
  '<p><strong>Note: Advanced Conditional logic will override the results of the Simple Conditional logic.</strong></p>' +
53
- '<h5>Example</h5><pre>show = !!data.showMe;</pre>', '<p><a href="http://formio.github.io/formio.js/app/examples/conditions.html" target="_blank" rel="noopener noreferrer">Click here for an example</a></p>')
53
+ '<h5>Example</h5><pre>show = !!data.showMe;</pre>', '<p><a href="https://help.form.io/userguide/form-building/logic-and-conditions" target="_blank" rel="noopener noreferrer">Click here for an example</a></p>')
54
54
  ];
55
55
  /* eslint-enable quotes, max-len */
@@ -140,7 +140,7 @@ exports.default = [
140
140
  input: true
141
141
  },
142
142
  utils_1.default.javaScriptValue('Custom Default Value', 'customDefaultValue', 'customDefaultValue', 1000, '<p><h4>Example:</h4><pre>value = data.firstName + " " + data.lastName;</pre></p>', '<p><h4>Example:</h4><pre>{"cat": [{"var": "data.firstName"}, " ", {"var": "data.lastName"}]}</pre>'),
143
- utils_1.default.javaScriptValue('Calculated Value', 'calculateValue', 'calculateValue', 1100, '<p><h4>Example:</h4><pre>value = data.a + data.b + data.c;</pre></p>', '<p><h4>Example:</h4><pre>{"+": [{"var": "data.a"}, {"var": "data.b"}, {"var": "data.c"}]}</pre><p><a href="http://formio.github.io/formio.js/app/examples/calculated.html" target="_blank" rel="noopener noreferrer">Click here for an example</a></p>', '<tr><th>token</th><td>The decoded JWT token for the authenticated user.</td></tr>'),
143
+ utils_1.default.javaScriptValue('Calculated Value', 'calculateValue', 'calculateValue', 1100, '<p><h4>Example:</h4><pre>value = data.a + data.b + data.c;</pre></p>', '<p><h4>Example:</h4><pre>{"+": [{"var": "data.a"}, {"var": "data.b"}, {"var": "data.c"}]}</pre><p><a href="https://help.form.io/userguide/form-building/logic-and-conditions#calculated-values" target="_blank" rel="noopener noreferrer">Click here for an example</a></p>', '<tr><th>token</th><td>The decoded JWT token for the authenticated user.</td></tr>'),
144
144
  {
145
145
  type: 'checkbox',
146
146
  input: true,
@@ -55,7 +55,7 @@ const EditFormUtils = {
55
55
  '<tr><th>value</th><td>The current value of the component.</td></tr>' +
56
56
  '<tr><th>moment</th><td>The moment.js library for date manipulation.</td></tr>' +
57
57
  '<tr><th>_</th><td>An instance of <a href="https://lodash.com/docs/" target="_blank" rel="noopener noreferrer">Lodash</a>.</td></tr>' +
58
- '<tr><th>utils</th><td>An instance of the <a href="http://formio.github.io/formio.js/docs/identifiers.html#utils" target="_blank" rel="noopener noreferrer">FormioUtils</a> object.</td></tr>' +
58
+ '<tr><th>utils</th><td>An instance of the <a href="https://help.form.io/developers/javascript-development/javascript-utilities" target="_blank" rel="noopener noreferrer">FormioUtils</a> object.</td></tr>' +
59
59
  '<tr><th>util</th><td>An alias for "utils".</td></tr>' +
60
60
  '</table><br/>'
61
61
  /* eslint-enable prefer-template */
@@ -584,6 +584,9 @@ class DayComponent extends Field_1.default {
584
584
  * @returns {string|null} - The string value of the date.
585
585
  */
586
586
  getValueAsString(value) {
587
+ if (!value) {
588
+ return '';
589
+ }
587
590
  return this.getDate(value) || '';
588
591
  }
589
592
  focus(field) {
@@ -13,6 +13,7 @@ const utils_1 = require("../../utils/utils");
13
13
  const EditRowState = {
14
14
  New: 'new',
15
15
  Editing: 'editing',
16
+ Saving: 'saving',
16
17
  Saved: 'saved',
17
18
  Viewing: 'viewing',
18
19
  Removed: 'removed',
@@ -798,6 +799,10 @@ class EditGridComponent extends NestedArrayComponent_1.default {
798
799
  if (!this.component.rowDrafts) {
799
800
  editRow.components.forEach((comp) => comp.setPristine(false));
800
801
  }
802
+ // Mark the row with a 'Saving' state to trigger validation for future row changes
803
+ if (editRow.state === EditRowState.New) {
804
+ editRow.state = EditRowState.Saving;
805
+ }
801
806
  const errors = this.validateRow(editRow, true);
802
807
  if (!this.component.rowDrafts) {
803
808
  if (errors.length) {
@@ -810,7 +815,7 @@ class EditGridComponent extends NestedArrayComponent_1.default {
810
815
  this.root.focusedComponent = null;
811
816
  }
812
817
  switch (editRow.state) {
813
- case EditRowState.New: {
818
+ case EditRowState.Saving: {
814
819
  const newIndex = dataValue.length;
815
820
  dataValue.push(editRow.data);
816
821
  editRow.components.forEach(component => component.rowIndex = newIndex);
@@ -970,7 +975,7 @@ class EditGridComponent extends NestedArrayComponent_1.default {
970
975
  }
971
976
  shouldValidateRow(editRow, dirty) {
972
977
  return this.shouldValidateDraft(editRow) ||
973
- editRow.state === EditRowState.New ||
978
+ editRow.state === EditRowState.Saving ||
974
979
  editRow.state === EditRowState.Editing ||
975
980
  editRow.alerts ||
976
981
  dirty;
@@ -1074,6 +1079,7 @@ class EditGridComponent extends NestedArrayComponent_1.default {
1074
1079
  }
1075
1080
  else if (errorContainer) {
1076
1081
  errorContainer.textContent = '';
1082
+ this.removeClass(errorContainer, 'help-block');
1077
1083
  }
1078
1084
  }
1079
1085
  }
@@ -0,0 +1,59 @@
1
+ declare namespace _default {
2
+ let _id: string;
3
+ let title: string;
4
+ let name: string;
5
+ let path: string;
6
+ let type: string;
7
+ let display: string;
8
+ let components: ({
9
+ label: string;
10
+ tableView: boolean;
11
+ validateWhenHidden: boolean;
12
+ rowDrafts: boolean;
13
+ key: string;
14
+ type: string;
15
+ displayAsTable: boolean;
16
+ input: boolean;
17
+ components: {
18
+ label: string;
19
+ columns: {
20
+ components: {
21
+ label: string;
22
+ applyMaskOn: string;
23
+ tableView: boolean;
24
+ validate: {
25
+ required: boolean;
26
+ };
27
+ validateWhenHidden: boolean;
28
+ key: string;
29
+ type: string;
30
+ input: boolean;
31
+ }[];
32
+ width: number;
33
+ offset: number;
34
+ push: number;
35
+ pull: number;
36
+ size: string;
37
+ currentWidth: number;
38
+ }[];
39
+ key: string;
40
+ type: string;
41
+ input: boolean;
42
+ tableView: boolean;
43
+ }[];
44
+ disableOnInvalid?: undefined;
45
+ } | {
46
+ type: string;
47
+ label: string;
48
+ key: string;
49
+ disableOnInvalid: boolean;
50
+ input: boolean;
51
+ tableView: boolean;
52
+ validateWhenHidden?: undefined;
53
+ rowDrafts?: undefined;
54
+ displayAsTable?: undefined;
55
+ components?: undefined;
56
+ })[];
57
+ let project: string;
58
+ }
59
+ export default _default;
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = {
4
+ _id: '6704f3d329cf52a3ddd4e244',
5
+ title: 'uiu',
6
+ name: 'uiu',
7
+ path: 'uiu',
8
+ type: 'resource',
9
+ display: 'form',
10
+ components: [
11
+ {
12
+ label: 'Edit Grid',
13
+ tableView: false,
14
+ validateWhenHidden: false,
15
+ rowDrafts: false,
16
+ key: 'editGrid',
17
+ type: 'editgrid',
18
+ displayAsTable: false,
19
+ input: true,
20
+ components: [
21
+ {
22
+ label: 'Columns',
23
+ columns: [
24
+ {
25
+ components: [
26
+ {
27
+ label: 'Text Field',
28
+ applyMaskOn: 'change',
29
+ tableView: true,
30
+ validate: {
31
+ required: true,
32
+ },
33
+ validateWhenHidden: false,
34
+ key: 'textField',
35
+ type: 'textfield',
36
+ input: true,
37
+ },
38
+ ],
39
+ width: 6,
40
+ offset: 0,
41
+ push: 0,
42
+ pull: 0,
43
+ size: 'md',
44
+ currentWidth: 6,
45
+ },
46
+ {
47
+ components: [],
48
+ width: 6,
49
+ offset: 0,
50
+ push: 0,
51
+ pull: 0,
52
+ size: 'md',
53
+ currentWidth: 6,
54
+ },
55
+ ],
56
+ key: 'columns',
57
+ type: 'columns',
58
+ input: false,
59
+ tableView: false,
60
+ },
61
+ ],
62
+ },
63
+ {
64
+ type: 'button',
65
+ label: 'Submit',
66
+ key: 'submit',
67
+ disableOnInvalid: true,
68
+ input: true,
69
+ tableView: false,
70
+ },
71
+ ],
72
+ project: '66f66c655879bf08113cf465',
73
+ };
@@ -15,7 +15,8 @@ import comp14 from './comp14';
15
15
  import comp15 from './comp15';
16
16
  import comp16 from './comp16';
17
17
  import comp18 from './comp18';
18
+ import comp19 from './comp19';
18
19
  import compOpenWhenEmpty from './comp-openWhenEmpty';
19
20
  import withOpenWhenEmptyAndConditions from './comp-with-conditions-and-openWhenEmpty';
20
21
  import compWithCustomDefaultValue from './comp-with-custom-default-value';
21
- export { comp1, comp2, comp3, comp4, comp5, comp6, comp7, comp8, comp9, comp10, comp11, comp12, comp13, comp14, comp15, comp16, comp17, comp18, compOpenWhenEmpty, withOpenWhenEmptyAndConditions, compWithCustomDefaultValue, compTestEvents };
22
+ export { comp1, comp2, comp3, comp4, comp5, comp6, comp7, comp8, comp9, comp10, comp11, comp12, comp13, comp14, comp15, comp16, comp17, comp18, comp19, compOpenWhenEmpty, withOpenWhenEmptyAndConditions, compWithCustomDefaultValue, compTestEvents };
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.compTestEvents = exports.compWithCustomDefaultValue = exports.withOpenWhenEmptyAndConditions = exports.compOpenWhenEmpty = exports.comp18 = exports.comp17 = exports.comp16 = exports.comp15 = exports.comp14 = exports.comp13 = exports.comp12 = exports.comp11 = exports.comp10 = exports.comp9 = exports.comp8 = exports.comp7 = exports.comp6 = exports.comp5 = exports.comp4 = exports.comp3 = exports.comp2 = exports.comp1 = void 0;
6
+ exports.compTestEvents = exports.compWithCustomDefaultValue = exports.withOpenWhenEmptyAndConditions = exports.compOpenWhenEmpty = exports.comp19 = exports.comp18 = exports.comp17 = exports.comp16 = exports.comp15 = exports.comp14 = exports.comp13 = exports.comp12 = exports.comp11 = exports.comp10 = exports.comp9 = exports.comp8 = exports.comp7 = exports.comp6 = exports.comp5 = exports.comp4 = exports.comp3 = exports.comp2 = exports.comp1 = void 0;
7
7
  const comp1_1 = __importDefault(require("./comp1"));
8
8
  exports.comp1 = comp1_1.default;
9
9
  const comp2_1 = __importDefault(require("./comp2"));
@@ -40,6 +40,8 @@ const comp17_1 = __importDefault(require("./comp17"));
40
40
  exports.comp17 = comp17_1.default;
41
41
  const comp18_1 = __importDefault(require("./comp18"));
42
42
  exports.comp18 = comp18_1.default;
43
+ const comp19_1 = __importDefault(require("./comp19"));
44
+ exports.comp19 = comp19_1.default;
43
45
  const comp_with_conditions_and_openWhenEmpty_1 = __importDefault(require("./comp-with-conditions-and-openWhenEmpty"));
44
46
  exports.withOpenWhenEmptyAndConditions = comp_with_conditions_and_openWhenEmpty_1.default;
45
47
  const comp_openWhenEmpty_1 = __importDefault(require("./comp-openWhenEmpty"));
@@ -7,7 +7,7 @@ const utils_1 = __importDefault(require("../../_classes/component/editForm/utils
7
7
  /* eslint-disable max-len */
8
8
  exports.default = [
9
9
  utils_1.default.javaScriptValue('Custom Default Value', 'customDefaultValue', 'customDefaultValue', 120, '<p><h4>Example:</h4><pre>value = data.firstName + " " + data.lastName;</pre></p>', '<p><h4>Example:</h4><pre>{"cat": [{"var": "data.firstName"}, " ", {"var": "data.lastName"}]}</pre>'),
10
- utils_1.default.javaScriptValue('Calculated Value', 'calculateValue', 'calculateValue', 130, '<p><h4>Example:</h4><pre>value = data.a + data.b + data.c;</pre></p>', '<p><h4>Example:</h4><pre>{"+": [{"var": "data.a"}, {"var": "data.b"}, {"var": "data.c"}]}</pre><p><a href="http://formio.github.io/formio.js/app/examples/calculated.html" target="_blank" rel="noopener noreferrer">Click here for an example</a></p>'),
10
+ utils_1.default.javaScriptValue('Calculated Value', 'calculateValue', 'calculateValue', 130, '<p><h4>Example:</h4><pre>value = data.a + data.b + data.c;</pre></p>', '<p><h4>Example:</h4><pre>{"+": [{"var": "data.a"}, {"var": "data.b"}, {"var": "data.c"}]}</pre><p><a href="https://help.form.io/userguide/form-building/logic-and-conditions#calculated-values" target="_blank" rel="noopener noreferrer">Click here for an example</a></p>'),
11
11
  {
12
12
  weight: 140,
13
13
  type: 'checkbox',
@@ -0,0 +1,17 @@
1
+ declare namespace _default {
2
+ let components: {
3
+ label: string;
4
+ mask: boolean;
5
+ tableView: boolean;
6
+ modalEdit: boolean;
7
+ multiple: boolean;
8
+ delimiter: string;
9
+ requireDecimal: boolean;
10
+ inputFormat: string;
11
+ truncateMultipleSpaces: boolean;
12
+ key: string;
13
+ type: string;
14
+ input: boolean;
15
+ }[];
16
+ }
17
+ export default _default;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = {
4
+ components: [
5
+ {
6
+ label: 'Number',
7
+ mask: true,
8
+ tableView: false,
9
+ modalEdit: true,
10
+ multiple: true,
11
+ delimiter: ',',
12
+ requireDecimal: false,
13
+ inputFormat: 'plain',
14
+ truncateMultipleSpaces: false,
15
+ key: 'number',
16
+ type: 'number',
17
+ input: true
18
+ }
19
+ ]
20
+ };
@@ -8,4 +8,5 @@ import comp7 from './comp7';
8
8
  import comp8 from './comp8';
9
9
  import comp9 from './comp9';
10
10
  import comp10 from './comp10';
11
- export { comp1, comp2, comp3, comp4, comp5, comp6, comp7, comp8, comp9, comp10 };
11
+ import comp11 from './comp11';
12
+ export { comp1, comp2, comp3, comp4, comp5, comp6, comp7, comp8, comp9, comp10, comp11 };
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.comp10 = exports.comp9 = exports.comp8 = exports.comp7 = exports.comp6 = exports.comp5 = exports.comp4 = exports.comp3 = exports.comp2 = exports.comp1 = void 0;
6
+ exports.comp11 = exports.comp10 = exports.comp9 = exports.comp8 = exports.comp7 = exports.comp6 = exports.comp5 = exports.comp4 = exports.comp3 = exports.comp2 = exports.comp1 = void 0;
7
7
  const comp1_1 = __importDefault(require("./comp1"));
8
8
  exports.comp1 = comp1_1.default;
9
9
  const comp2_1 = __importDefault(require("./comp2"));
@@ -24,3 +24,5 @@ const comp9_1 = __importDefault(require("./comp9"));
24
24
  exports.comp9 = comp9_1.default;
25
25
  const comp10_1 = __importDefault(require("./comp10"));
26
26
  exports.comp10 = comp10_1.default;
27
+ const comp11_1 = __importDefault(require("./comp11"));
28
+ exports.comp11 = comp11_1.default;
@@ -56,12 +56,6 @@ class TimeComponent extends TextField_1.default {
56
56
  }
57
57
  return value;
58
58
  }
59
- get validationValue() {
60
- if ((Array.isArray(this.rawData) && !this.rawData.length) || !this.rawData) {
61
- return this.dataValue;
62
- }
63
- return this.rawData;
64
- }
65
59
  get inputInfo() {
66
60
  const info = super.inputInfo;
67
61
  info.attr.type = this.component.inputType;
@@ -14,6 +14,15 @@ exports.default = {
14
14
  'input': true,
15
15
  'inputMask': '99:99'
16
16
  },
17
+ {
18
+ 'label': 'Multiple Time',
19
+ 'inputType': 'text',
20
+ 'tableView': true,
21
+ 'key': 'multipleTime',
22
+ 'type': 'time',
23
+ 'input': true,
24
+ 'inputMask': '99:99'
25
+ },
17
26
  {
18
27
  'label': 'Submit',
19
28
  'showValidations': false,
@@ -1232,7 +1232,12 @@ export default class Webform extends NestedDataComponent {
1232
1232
  onChange(flags, changed, modified, changes) {
1233
1233
  flags = flags || {};
1234
1234
  let isChangeEventEmitted = false;
1235
- super.onChange(flags, true);
1235
+ if (this.parent?.subForm === this) {
1236
+ super.onChange({ ...flags, modified }, false);
1237
+ }
1238
+ else {
1239
+ super.onChange(flags, true);
1240
+ }
1236
1241
  const value = _.clone(this.submission);
1237
1242
  flags.changed = value.changed = changed;
1238
1243
  flags.changes = changes;
@@ -1702,12 +1702,12 @@ export default class Component extends Element {
1702
1702
  restoreCaretPosition() {
1703
1703
  if (this.root?.currentSelection) {
1704
1704
  if (this.refs.input?.length) {
1705
- const { selection, index } = this.root.currentSelection;
1705
+ const { index } = this.root.currentSelection;
1706
1706
  let input = this.refs.input[index];
1707
1707
  const isInputRangeSelectable = (i) => /text|search|password|tel|url/i.test(i?.type || '');
1708
1708
  if (input) {
1709
1709
  if (isInputRangeSelectable(input)) {
1710
- input.setSelectionRange(...selection);
1710
+ input.setSelectionRange(input.value.length, input.value.length);
1711
1711
  }
1712
1712
  }
1713
1713
  else {
@@ -45,6 +45,6 @@ export default [
45
45
  },
46
46
  EditFormUtils.javaScriptValue('Advanced Conditions', 'customConditional', 'conditional.json', 110, '<p>You must assign the <strong>show</strong> variable a boolean result.</p>' +
47
47
  '<p><strong>Note: Advanced Conditional logic will override the results of the Simple Conditional logic.</strong></p>' +
48
- '<h5>Example</h5><pre>show = !!data.showMe;</pre>', '<p><a href="http://formio.github.io/formio.js/app/examples/conditions.html" target="_blank" rel="noopener noreferrer">Click here for an example</a></p>')
48
+ '<h5>Example</h5><pre>show = !!data.showMe;</pre>', '<p><a href="https://help.form.io/userguide/form-building/logic-and-conditions" target="_blank" rel="noopener noreferrer">Click here for an example</a></p>')
49
49
  ];
50
50
  /* eslint-enable quotes, max-len */
@@ -135,7 +135,7 @@ export default [
135
135
  input: true
136
136
  },
137
137
  EditFormUtils.javaScriptValue('Custom Default Value', 'customDefaultValue', 'customDefaultValue', 1000, '<p><h4>Example:</h4><pre>value = data.firstName + " " + data.lastName;</pre></p>', '<p><h4>Example:</h4><pre>{"cat": [{"var": "data.firstName"}, " ", {"var": "data.lastName"}]}</pre>'),
138
- EditFormUtils.javaScriptValue('Calculated Value', 'calculateValue', 'calculateValue', 1100, '<p><h4>Example:</h4><pre>value = data.a + data.b + data.c;</pre></p>', '<p><h4>Example:</h4><pre>{"+": [{"var": "data.a"}, {"var": "data.b"}, {"var": "data.c"}]}</pre><p><a href="http://formio.github.io/formio.js/app/examples/calculated.html" target="_blank" rel="noopener noreferrer">Click here for an example</a></p>', '<tr><th>token</th><td>The decoded JWT token for the authenticated user.</td></tr>'),
138
+ EditFormUtils.javaScriptValue('Calculated Value', 'calculateValue', 'calculateValue', 1100, '<p><h4>Example:</h4><pre>value = data.a + data.b + data.c;</pre></p>', '<p><h4>Example:</h4><pre>{"+": [{"var": "data.a"}, {"var": "data.b"}, {"var": "data.c"}]}</pre><p><a href="https://help.form.io/userguide/form-building/logic-and-conditions#calculated-values" target="_blank" rel="noopener noreferrer">Click here for an example</a></p>', '<tr><th>token</th><td>The decoded JWT token for the authenticated user.</td></tr>'),
139
139
  {
140
140
  type: 'checkbox',
141
141
  input: true,
@@ -50,7 +50,7 @@ const EditFormUtils = {
50
50
  '<tr><th>value</th><td>The current value of the component.</td></tr>' +
51
51
  '<tr><th>moment</th><td>The moment.js library for date manipulation.</td></tr>' +
52
52
  '<tr><th>_</th><td>An instance of <a href="https://lodash.com/docs/" target="_blank" rel="noopener noreferrer">Lodash</a>.</td></tr>' +
53
- '<tr><th>utils</th><td>An instance of the <a href="http://formio.github.io/formio.js/docs/identifiers.html#utils" target="_blank" rel="noopener noreferrer">FormioUtils</a> object.</td></tr>' +
53
+ '<tr><th>utils</th><td>An instance of the <a href="https://help.form.io/developers/javascript-development/javascript-utilities" target="_blank" rel="noopener noreferrer">FormioUtils</a> object.</td></tr>' +
54
54
  '<tr><th>util</th><td>An alias for "utils".</td></tr>' +
55
55
  '</table><br/>'
56
56
  /* eslint-enable prefer-template */
@@ -582,6 +582,9 @@ export default class DayComponent extends Field {
582
582
  * @returns {string|null} - The string value of the date.
583
583
  */
584
584
  getValueAsString(value) {
585
+ if (!value) {
586
+ return '';
587
+ }
585
588
  return this.getDate(value) || '';
586
589
  }
587
590
  focus(field) {
@@ -8,6 +8,7 @@ import { fastCloneDeep, Evaluator, getArrayFromComponentPath, eachComponent } fr
8
8
  const EditRowState = {
9
9
  New: 'new',
10
10
  Editing: 'editing',
11
+ Saving: 'saving',
11
12
  Saved: 'saved',
12
13
  Viewing: 'viewing',
13
14
  Removed: 'removed',
@@ -788,6 +789,10 @@ export default class EditGridComponent extends NestedArrayComponent {
788
789
  if (!this.component.rowDrafts) {
789
790
  editRow.components.forEach((comp) => comp.setPristine(false));
790
791
  }
792
+ // Mark the row with a 'Saving' state to trigger validation for future row changes
793
+ if (editRow.state === EditRowState.New) {
794
+ editRow.state = EditRowState.Saving;
795
+ }
791
796
  const errors = this.validateRow(editRow, true);
792
797
  if (!this.component.rowDrafts) {
793
798
  if (errors.length) {
@@ -800,7 +805,7 @@ export default class EditGridComponent extends NestedArrayComponent {
800
805
  this.root.focusedComponent = null;
801
806
  }
802
807
  switch (editRow.state) {
803
- case EditRowState.New: {
808
+ case EditRowState.Saving: {
804
809
  const newIndex = dataValue.length;
805
810
  dataValue.push(editRow.data);
806
811
  editRow.components.forEach(component => component.rowIndex = newIndex);
@@ -960,7 +965,7 @@ export default class EditGridComponent extends NestedArrayComponent {
960
965
  }
961
966
  shouldValidateRow(editRow, dirty) {
962
967
  return this.shouldValidateDraft(editRow) ||
963
- editRow.state === EditRowState.New ||
968
+ editRow.state === EditRowState.Saving ||
964
969
  editRow.state === EditRowState.Editing ||
965
970
  editRow.alerts ||
966
971
  dirty;
@@ -1062,6 +1067,7 @@ export default class EditGridComponent extends NestedArrayComponent {
1062
1067
  }
1063
1068
  else if (errorContainer) {
1064
1069
  errorContainer.textContent = '';
1070
+ this.removeClass(errorContainer, 'help-block');
1065
1071
  }
1066
1072
  }
1067
1073
  }
@@ -0,0 +1,59 @@
1
+ declare namespace _default {
2
+ let _id: string;
3
+ let title: string;
4
+ let name: string;
5
+ let path: string;
6
+ let type: string;
7
+ let display: string;
8
+ let components: ({
9
+ label: string;
10
+ tableView: boolean;
11
+ validateWhenHidden: boolean;
12
+ rowDrafts: boolean;
13
+ key: string;
14
+ type: string;
15
+ displayAsTable: boolean;
16
+ input: boolean;
17
+ components: {
18
+ label: string;
19
+ columns: {
20
+ components: {
21
+ label: string;
22
+ applyMaskOn: string;
23
+ tableView: boolean;
24
+ validate: {
25
+ required: boolean;
26
+ };
27
+ validateWhenHidden: boolean;
28
+ key: string;
29
+ type: string;
30
+ input: boolean;
31
+ }[];
32
+ width: number;
33
+ offset: number;
34
+ push: number;
35
+ pull: number;
36
+ size: string;
37
+ currentWidth: number;
38
+ }[];
39
+ key: string;
40
+ type: string;
41
+ input: boolean;
42
+ tableView: boolean;
43
+ }[];
44
+ disableOnInvalid?: undefined;
45
+ } | {
46
+ type: string;
47
+ label: string;
48
+ key: string;
49
+ disableOnInvalid: boolean;
50
+ input: boolean;
51
+ tableView: boolean;
52
+ validateWhenHidden?: undefined;
53
+ rowDrafts?: undefined;
54
+ displayAsTable?: undefined;
55
+ components?: undefined;
56
+ })[];
57
+ let project: string;
58
+ }
59
+ export default _default;