@formio/js 5.0.0-dev.5704.492ccdf → 5.0.0-dev.5707.d029d4d

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.
Files changed (32) hide show
  1. package/Changelog.md +10 -0
  2. package/dist/formio.form.js +3 -3
  3. package/dist/formio.form.min.js +1 -1
  4. package/dist/formio.full.js +3 -3
  5. package/dist/formio.full.min.js +1 -1
  6. package/lib/cjs/Webform.js +0 -3
  7. package/lib/cjs/components/currency/Currency.d.ts +1 -0
  8. package/lib/cjs/components/editgrid/EditGrid.js +10 -0
  9. package/lib/cjs/components/editgrid/fixtures/comp-test-events.d.ts +54 -0
  10. package/lib/cjs/components/editgrid/fixtures/comp-test-events.js +54 -0
  11. package/lib/cjs/components/editgrid/fixtures/index.d.ts +2 -1
  12. package/lib/cjs/components/editgrid/fixtures/index.js +3 -1
  13. package/lib/cjs/components/number/Number.d.ts +10 -1
  14. package/lib/cjs/components/number/Number.js +15 -6
  15. package/lib/cjs/components/number/fixtures/comp9.d.ts +18 -0
  16. package/lib/cjs/components/number/fixtures/comp9.js +21 -0
  17. package/lib/cjs/components/number/fixtures/index.d.ts +2 -1
  18. package/lib/cjs/components/number/fixtures/index.js +3 -1
  19. package/lib/mjs/Webform.js +0 -3
  20. package/lib/mjs/components/currency/Currency.d.ts +1 -0
  21. package/lib/mjs/components/editgrid/EditGrid.js +10 -0
  22. package/lib/mjs/components/editgrid/fixtures/comp-test-events.d.ts +54 -0
  23. package/lib/mjs/components/editgrid/fixtures/comp-test-events.js +52 -0
  24. package/lib/mjs/components/editgrid/fixtures/index.d.ts +2 -1
  25. package/lib/mjs/components/editgrid/fixtures/index.js +2 -1
  26. package/lib/mjs/components/number/Number.d.ts +10 -1
  27. package/lib/mjs/components/number/Number.js +14 -5
  28. package/lib/mjs/components/number/fixtures/comp9.d.ts +18 -0
  29. package/lib/mjs/components/number/fixtures/comp9.js +19 -0
  30. package/lib/mjs/components/number/fixtures/index.d.ts +2 -1
  31. package/lib/mjs/components/number/fixtures/index.js +2 -1
  32. package/package.json +1 -1
@@ -849,9 +849,6 @@ class Webform extends NestedDataComponent_1.default {
849
849
  return changed;
850
850
  }
851
851
  getValue() {
852
- if (!this._submission) {
853
- this._submission = {};
854
- }
855
852
  if (!this._submission.data) {
856
853
  this._submission.data = {};
857
854
  }
@@ -2,6 +2,7 @@ export default class CurrencyComponent extends NumberComponent {
2
2
  constructor(component: any, options: any, data: any);
3
3
  currencyPrefix: any;
4
4
  currencySuffix: any;
5
+ parseValue(value: any): string | null;
5
6
  addZerosAndFormatValue(value: any): any;
6
7
  stripPrefixSuffix(value: any): any;
7
8
  }
@@ -681,6 +681,11 @@ class EditGridComponent extends NestedArrayComponent_1.default {
681
681
  }
682
682
  },
683
683
  }, this.component.saveRow || 'Save'));
684
+ this.emit('editGridOpenModal', {
685
+ component: this.component,
686
+ row: editRow,
687
+ instance: this,
688
+ });
684
689
  return this.attachComponents(modalContent, components);
685
690
  }
686
691
  showDialog(rowIndex) {
@@ -738,6 +743,11 @@ class EditGridComponent extends NestedArrayComponent_1.default {
738
743
  editRow.data = dataSnapshot;
739
744
  this.restoreRowContext(editRow);
740
745
  }
746
+ this.emit('editGridEditRow', {
747
+ component: this.component,
748
+ row: editRow,
749
+ instance: this,
750
+ });
741
751
  if (this.component.modal) {
742
752
  return this.addRowModal(rowIndex);
743
753
  }
@@ -0,0 +1,54 @@
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 owner: string;
9
+ let components: ({
10
+ label: string;
11
+ tableView: boolean;
12
+ modal: boolean;
13
+ validateWhenHidden: boolean;
14
+ rowDrafts: boolean;
15
+ key: string;
16
+ type: string;
17
+ displayAsTable: boolean;
18
+ input: boolean;
19
+ components: {
20
+ label: string;
21
+ applyMaskOn: string;
22
+ tableView: boolean;
23
+ validateWhenHidden: boolean;
24
+ key: string;
25
+ type: string;
26
+ input: boolean;
27
+ }[];
28
+ disableOnInvalid?: undefined;
29
+ } | {
30
+ type: string;
31
+ label: string;
32
+ key: string;
33
+ disableOnInvalid: boolean;
34
+ input: boolean;
35
+ tableView: boolean;
36
+ modal?: undefined;
37
+ validateWhenHidden?: undefined;
38
+ rowDrafts?: undefined;
39
+ displayAsTable?: undefined;
40
+ components?: undefined;
41
+ })[];
42
+ let pdfComponents: never[];
43
+ let settings: {};
44
+ let properties: {};
45
+ let project: string;
46
+ let controller: string;
47
+ let revisions: string;
48
+ let submissionRevisions: string;
49
+ let _vid: number;
50
+ let created: string;
51
+ let modified: string;
52
+ let machineName: string;
53
+ }
54
+ export default _default;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = {
4
+ _id: '669e1c88a40e327e67e7d1c5',
5
+ title: 'editGrid test',
6
+ name: 'editGridTest',
7
+ path: 'editgridtest',
8
+ type: 'form',
9
+ display: 'form',
10
+ owner: '637b2e6b48c1227e60b1f910',
11
+ components: [
12
+ {
13
+ label: 'Edit Grid',
14
+ tableView: false,
15
+ modal: false,
16
+ validateWhenHidden: false,
17
+ rowDrafts: false,
18
+ key: 'editGrid',
19
+ type: 'editgrid',
20
+ displayAsTable: false,
21
+ input: true,
22
+ components: [
23
+ {
24
+ label: 'Text Field',
25
+ applyMaskOn: 'change',
26
+ tableView: true,
27
+ validateWhenHidden: false,
28
+ key: 'textField',
29
+ type: 'textfield',
30
+ input: true,
31
+ },
32
+ ],
33
+ },
34
+ {
35
+ type: 'button',
36
+ label: 'Submit',
37
+ key: 'submit',
38
+ disableOnInvalid: true,
39
+ input: true,
40
+ tableView: false,
41
+ },
42
+ ],
43
+ pdfComponents: [],
44
+ settings: {},
45
+ properties: {},
46
+ project: '669e1c68a40e327e67e7cedd',
47
+ controller: '',
48
+ revisions: '',
49
+ submissionRevisions: '',
50
+ _vid: 0,
51
+ created: '2024-07-22T08:47:04.399Z',
52
+ modified: '2024-07-22T10:04:23.474Z',
53
+ machineName: 'authoring-qzdhayddccjauyr:editGridTest',
54
+ };
@@ -16,4 +16,5 @@ import comp9 from './comp9';
16
16
  import compOpenWhenEmpty from './comp-openWhenEmpty';
17
17
  import withOpenWhenEmptyAndConditions from './comp-with-conditions-and-openWhenEmpty';
18
18
  import compWithCustomDefaultValue from './comp-with-custom-default-value';
19
- export { comp1, comp2, comp3, comp10, comp11, comp12, comp13, comp14, comp15, comp4, comp5, comp6, comp7, comp8, comp9, compOpenWhenEmpty, withOpenWhenEmptyAndConditions, compWithCustomDefaultValue };
19
+ import compTestEvents from './comp-test-events';
20
+ export { comp1, comp2, comp3, comp10, comp11, comp12, comp13, comp14, comp15, comp4, comp5, comp6, comp7, comp8, comp9, 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.compWithCustomDefaultValue = exports.withOpenWhenEmptyAndConditions = exports.compOpenWhenEmpty = exports.comp9 = exports.comp8 = exports.comp7 = exports.comp6 = exports.comp5 = exports.comp4 = exports.comp15 = exports.comp14 = exports.comp13 = exports.comp12 = exports.comp11 = exports.comp10 = exports.comp3 = exports.comp2 = exports.comp1 = void 0;
6
+ exports.compTestEvents = exports.compWithCustomDefaultValue = exports.withOpenWhenEmptyAndConditions = exports.compOpenWhenEmpty = exports.comp9 = exports.comp8 = exports.comp7 = exports.comp6 = exports.comp5 = exports.comp4 = exports.comp15 = exports.comp14 = exports.comp13 = exports.comp12 = exports.comp11 = exports.comp10 = 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,3 +40,5 @@ const comp_openWhenEmpty_1 = __importDefault(require("./comp-openWhenEmpty"));
40
40
  exports.compOpenWhenEmpty = comp_openWhenEmpty_1.default;
41
41
  const comp_with_custom_default_value_1 = __importDefault(require("./comp-with-custom-default-value"));
42
42
  exports.compWithCustomDefaultValue = comp_with_custom_default_value_1.default;
43
+ const comp_test_events_1 = __importDefault(require("./comp-test-events"));
44
+ exports.compTestEvents = comp_test_events_1.default;
@@ -31,7 +31,16 @@ export default class NumberComponent extends Input {
31
31
  setInputMask(input: any): void;
32
32
  getValueAt(index: any): number | null;
33
33
  setValueAt(index: any, value: any, flags?: {}): void;
34
- parseValue(input: any): number;
34
+ /**
35
+ * Converts a string to a floating point number, formats the number based on the parsed float function
36
+ * (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseFloat) and then returns the
37
+ * formatted number back as a string
38
+ * Example Input: "123.456,22"
39
+ * Example Output: "123456,22"
40
+ * @param {string | number} input the numeric string to parse
41
+ * @returns {string | null} a parsed string
42
+ */
43
+ parseValue(input: string | number): string | null;
35
44
  focus(): void;
36
45
  getMaskedValue(value: any): any;
37
46
  getValueAsString(value: any, options: any): any;
@@ -45,19 +45,19 @@ class NumberComponent extends Input_1.default {
45
45
  return (0, utils_1.getComponentSavedTypes)(schema) || [utils_1.componentValueTypes.number];
46
46
  }
47
47
  constructor(...args) {
48
- var _a, _b;
48
+ var _a, _b, _c;
49
49
  super(...args);
50
50
  const separators = (0, utils_1.getNumberSeparators)(this.options.language || navigator.language);
51
51
  this.decimalSeparator = this.options.decimalSeparator = this.component.decimalSymbol || this.options.decimalSeparator
52
52
  || ((_a = this.options.properties) === null || _a === void 0 ? void 0 : _a.decimalSeparator)
53
53
  || separators.decimalSeparator;
54
54
  if (this.component.delimiter) {
55
- if (this.options.hasOwnProperty('thousandsSeparator')) {
56
- console.warn("Property 'thousandsSeparator' is deprecated. Please use i18n to specify delimiter.");
57
- }
58
- this.delimiter = ((_b = this.options.properties) === null || _b === void 0 ? void 0 : _b.thousandsSeparator) || this.options.thousandsSeparator || separators.delimiter;
55
+ this.delimiter = this.component.thousandsSeparator || ((_b = this.options.properties) === null || _b === void 0 ? void 0 : _b.thousandsSeparator) || this.options.thousandsSeparator || separators.delimiter;
59
56
  }
60
57
  else {
58
+ if (this.component.thousandsSeparator || ((_c = this.options.properties) === null || _c === void 0 ? void 0 : _c.thousandsSeparator) || this.options.thousandsSeparator) {
59
+ console.warn('In order for thousands separator to work properly, you must set the delimiter to true in the component json');
60
+ }
61
61
  this.delimiter = '';
62
62
  }
63
63
  const requireDecimal = lodash_1.default.get(this.component, 'requireDecimal', false);
@@ -79,7 +79,7 @@ class NumberComponent extends Input_1.default {
79
79
  prefix: '',
80
80
  suffix: '',
81
81
  requireDecimal: lodash_1.default.get(this.component, 'requireDecimal', false),
82
- thousandsSeparatorSymbol: lodash_1.default.get(this.component, 'thousandsSeparator', this.delimiter),
82
+ thousandsSeparatorSymbol: this.delimiter || '',
83
83
  decimalSymbol: lodash_1.default.get(this.component, 'decimalSymbol', this.decimalSeparator),
84
84
  decimalLimit: lodash_1.default.get(this.component, 'decimalLimit', this.decimalLimit),
85
85
  allowNegative: lodash_1.default.get(this.component, 'allowNegative', true),
@@ -146,6 +146,15 @@ class NumberComponent extends Input_1.default {
146
146
  setValueAt(index, value, flags = {}) {
147
147
  return super.setValueAt(index, this.formatValue(this.parseValue(value)), flags);
148
148
  }
149
+ /**
150
+ * Converts a string to a floating point number, formats the number based on the parsed float function
151
+ * (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseFloat) and then returns the
152
+ * formatted number back as a string
153
+ * Example Input: "123.456,22"
154
+ * Example Output: "123456,22"
155
+ * @param {string | number} input the numeric string to parse
156
+ * @returns {string | null} a parsed string
157
+ */
149
158
  parseValue(input) {
150
159
  if (typeof input === 'string') {
151
160
  input = input.split(this.delimiter).join('').replace(this.decimalSeparator, '.');
@@ -0,0 +1,18 @@
1
+ declare namespace _default {
2
+ let components: {
3
+ label: string;
4
+ applyMaskOn: string;
5
+ mask: boolean;
6
+ tableView: boolean;
7
+ delimiter: boolean;
8
+ requireDecimal: boolean;
9
+ inputFormat: string;
10
+ truncateMultipleSpaces: boolean;
11
+ key: string;
12
+ type: string;
13
+ input: boolean;
14
+ decimalSymbol: string;
15
+ thousandsSeparator: string;
16
+ }[];
17
+ }
18
+ export default _default;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = {
4
+ components: [
5
+ {
6
+ "label": "Number",
7
+ "applyMaskOn": "change",
8
+ "mask": false,
9
+ "tableView": false,
10
+ "delimiter": true,
11
+ "requireDecimal": false,
12
+ "inputFormat": "plain",
13
+ "truncateMultipleSpaces": false,
14
+ "key": "number",
15
+ "type": "number",
16
+ "input": true,
17
+ "decimalSymbol": ",",
18
+ "thousandsSeparator": "."
19
+ }
20
+ ]
21
+ };
@@ -6,4 +6,5 @@ import comp5 from './comp5';
6
6
  import comp6 from './comp6';
7
7
  import comp7 from './comp7';
8
8
  import comp8 from './comp8';
9
- export { comp1, comp2, comp3, comp4, comp5, comp6, comp7, comp8 };
9
+ import comp9 from './comp9';
10
+ export { comp1, comp2, comp3, comp4, comp5, comp6, comp7, comp8, comp9 };
@@ -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.comp8 = exports.comp7 = exports.comp6 = exports.comp5 = exports.comp4 = exports.comp3 = exports.comp2 = exports.comp1 = void 0;
6
+ 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"));
@@ -20,3 +20,5 @@ const comp7_1 = __importDefault(require("./comp7"));
20
20
  exports.comp7 = comp7_1.default;
21
21
  const comp8_1 = __importDefault(require("./comp8"));
22
22
  exports.comp8 = comp8_1.default;
23
+ const comp9_1 = __importDefault(require("./comp9"));
24
+ exports.comp9 = comp9_1.default;
@@ -853,9 +853,6 @@ export default class Webform extends NestedDataComponent {
853
853
  return changed;
854
854
  }
855
855
  getValue() {
856
- if (!this._submission) {
857
- this._submission = {};
858
- }
859
856
  if (!this._submission.data) {
860
857
  this._submission.data = {};
861
858
  }
@@ -2,6 +2,7 @@ export default class CurrencyComponent extends NumberComponent {
2
2
  constructor(component: any, options: any, data: any);
3
3
  currencyPrefix: any;
4
4
  currencySuffix: any;
5
+ parseValue(value: any): string | null;
5
6
  addZerosAndFormatValue(value: any): any;
6
7
  stripPrefixSuffix(value: any): any;
7
8
  }
@@ -672,6 +672,11 @@ export default class EditGridComponent extends NestedArrayComponent {
672
672
  }
673
673
  },
674
674
  }, this.component.saveRow || 'Save'));
675
+ this.emit('editGridOpenModal', {
676
+ component: this.component,
677
+ row: editRow,
678
+ instance: this,
679
+ });
675
680
  return this.attachComponents(modalContent, components);
676
681
  }
677
682
  showDialog(rowIndex) {
@@ -729,6 +734,11 @@ export default class EditGridComponent extends NestedArrayComponent {
729
734
  editRow.data = dataSnapshot;
730
735
  this.restoreRowContext(editRow);
731
736
  }
737
+ this.emit('editGridEditRow', {
738
+ component: this.component,
739
+ row: editRow,
740
+ instance: this,
741
+ });
732
742
  if (this.component.modal) {
733
743
  return this.addRowModal(rowIndex);
734
744
  }
@@ -0,0 +1,54 @@
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 owner: string;
9
+ let components: ({
10
+ label: string;
11
+ tableView: boolean;
12
+ modal: boolean;
13
+ validateWhenHidden: boolean;
14
+ rowDrafts: boolean;
15
+ key: string;
16
+ type: string;
17
+ displayAsTable: boolean;
18
+ input: boolean;
19
+ components: {
20
+ label: string;
21
+ applyMaskOn: string;
22
+ tableView: boolean;
23
+ validateWhenHidden: boolean;
24
+ key: string;
25
+ type: string;
26
+ input: boolean;
27
+ }[];
28
+ disableOnInvalid?: undefined;
29
+ } | {
30
+ type: string;
31
+ label: string;
32
+ key: string;
33
+ disableOnInvalid: boolean;
34
+ input: boolean;
35
+ tableView: boolean;
36
+ modal?: undefined;
37
+ validateWhenHidden?: undefined;
38
+ rowDrafts?: undefined;
39
+ displayAsTable?: undefined;
40
+ components?: undefined;
41
+ })[];
42
+ let pdfComponents: never[];
43
+ let settings: {};
44
+ let properties: {};
45
+ let project: string;
46
+ let controller: string;
47
+ let revisions: string;
48
+ let submissionRevisions: string;
49
+ let _vid: number;
50
+ let created: string;
51
+ let modified: string;
52
+ let machineName: string;
53
+ }
54
+ export default _default;
@@ -0,0 +1,52 @@
1
+ export default {
2
+ _id: '669e1c88a40e327e67e7d1c5',
3
+ title: 'editGrid test',
4
+ name: 'editGridTest',
5
+ path: 'editgridtest',
6
+ type: 'form',
7
+ display: 'form',
8
+ owner: '637b2e6b48c1227e60b1f910',
9
+ components: [
10
+ {
11
+ label: 'Edit Grid',
12
+ tableView: false,
13
+ modal: false,
14
+ validateWhenHidden: false,
15
+ rowDrafts: false,
16
+ key: 'editGrid',
17
+ type: 'editgrid',
18
+ displayAsTable: false,
19
+ input: true,
20
+ components: [
21
+ {
22
+ label: 'Text Field',
23
+ applyMaskOn: 'change',
24
+ tableView: true,
25
+ validateWhenHidden: false,
26
+ key: 'textField',
27
+ type: 'textfield',
28
+ input: true,
29
+ },
30
+ ],
31
+ },
32
+ {
33
+ type: 'button',
34
+ label: 'Submit',
35
+ key: 'submit',
36
+ disableOnInvalid: true,
37
+ input: true,
38
+ tableView: false,
39
+ },
40
+ ],
41
+ pdfComponents: [],
42
+ settings: {},
43
+ properties: {},
44
+ project: '669e1c68a40e327e67e7cedd',
45
+ controller: '',
46
+ revisions: '',
47
+ submissionRevisions: '',
48
+ _vid: 0,
49
+ created: '2024-07-22T08:47:04.399Z',
50
+ modified: '2024-07-22T10:04:23.474Z',
51
+ machineName: 'authoring-qzdhayddccjauyr:editGridTest',
52
+ };
@@ -16,4 +16,5 @@ import comp9 from './comp9';
16
16
  import compOpenWhenEmpty from './comp-openWhenEmpty';
17
17
  import withOpenWhenEmptyAndConditions from './comp-with-conditions-and-openWhenEmpty';
18
18
  import compWithCustomDefaultValue from './comp-with-custom-default-value';
19
- export { comp1, comp2, comp3, comp10, comp11, comp12, comp13, comp14, comp15, comp4, comp5, comp6, comp7, comp8, comp9, compOpenWhenEmpty, withOpenWhenEmptyAndConditions, compWithCustomDefaultValue };
19
+ import compTestEvents from './comp-test-events';
20
+ export { comp1, comp2, comp3, comp10, comp11, comp12, comp13, comp14, comp15, comp4, comp5, comp6, comp7, comp8, comp9, compOpenWhenEmpty, withOpenWhenEmptyAndConditions, compWithCustomDefaultValue, compTestEvents };
@@ -16,4 +16,5 @@ import comp15 from './comp15';
16
16
  import withOpenWhenEmptyAndConditions from './comp-with-conditions-and-openWhenEmpty';
17
17
  import compOpenWhenEmpty from './comp-openWhenEmpty';
18
18
  import compWithCustomDefaultValue from './comp-with-custom-default-value';
19
- export { comp1, comp2, comp3, comp10, comp11, comp12, comp13, comp14, comp15, comp4, comp5, comp6, comp7, comp8, comp9, compOpenWhenEmpty, withOpenWhenEmptyAndConditions, compWithCustomDefaultValue };
19
+ import compTestEvents from './comp-test-events';
20
+ export { comp1, comp2, comp3, comp10, comp11, comp12, comp13, comp14, comp15, comp4, comp5, comp6, comp7, comp8, comp9, compOpenWhenEmpty, withOpenWhenEmptyAndConditions, compWithCustomDefaultValue, compTestEvents };
@@ -31,7 +31,16 @@ export default class NumberComponent extends Input {
31
31
  setInputMask(input: any): void;
32
32
  getValueAt(index: any): number | null;
33
33
  setValueAt(index: any, value: any, flags?: {}): void;
34
- parseValue(input: any): number;
34
+ /**
35
+ * Converts a string to a floating point number, formats the number based on the parsed float function
36
+ * (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseFloat) and then returns the
37
+ * formatted number back as a string
38
+ * Example Input: "123.456,22"
39
+ * Example Output: "123456,22"
40
+ * @param {string | number} input the numeric string to parse
41
+ * @returns {string | null} a parsed string
42
+ */
43
+ parseValue(input: string | number): string | null;
35
44
  focus(): void;
36
45
  getMaskedValue(value: any): any;
37
46
  getValueAsString(value: any, options: any): any;
@@ -50,12 +50,12 @@ export default class NumberComponent extends Input {
50
50
  || this.options.properties?.decimalSeparator
51
51
  || separators.decimalSeparator;
52
52
  if (this.component.delimiter) {
53
- if (this.options.hasOwnProperty('thousandsSeparator')) {
54
- console.warn("Property 'thousandsSeparator' is deprecated. Please use i18n to specify delimiter.");
55
- }
56
- this.delimiter = this.options.properties?.thousandsSeparator || this.options.thousandsSeparator || separators.delimiter;
53
+ this.delimiter = this.component.thousandsSeparator || this.options.properties?.thousandsSeparator || this.options.thousandsSeparator || separators.delimiter;
57
54
  }
58
55
  else {
56
+ if (this.component.thousandsSeparator || this.options.properties?.thousandsSeparator || this.options.thousandsSeparator) {
57
+ console.warn('In order for thousands separator to work properly, you must set the delimiter to true in the component json');
58
+ }
59
59
  this.delimiter = '';
60
60
  }
61
61
  const requireDecimal = _.get(this.component, 'requireDecimal', false);
@@ -77,7 +77,7 @@ export default class NumberComponent extends Input {
77
77
  prefix: '',
78
78
  suffix: '',
79
79
  requireDecimal: _.get(this.component, 'requireDecimal', false),
80
- thousandsSeparatorSymbol: _.get(this.component, 'thousandsSeparator', this.delimiter),
80
+ thousandsSeparatorSymbol: this.delimiter || '',
81
81
  decimalSymbol: _.get(this.component, 'decimalSymbol', this.decimalSeparator),
82
82
  decimalLimit: _.get(this.component, 'decimalLimit', this.decimalLimit),
83
83
  allowNegative: _.get(this.component, 'allowNegative', true),
@@ -144,6 +144,15 @@ export default class NumberComponent extends Input {
144
144
  setValueAt(index, value, flags = {}) {
145
145
  return super.setValueAt(index, this.formatValue(this.parseValue(value)), flags);
146
146
  }
147
+ /**
148
+ * Converts a string to a floating point number, formats the number based on the parsed float function
149
+ * (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseFloat) and then returns the
150
+ * formatted number back as a string
151
+ * Example Input: "123.456,22"
152
+ * Example Output: "123456,22"
153
+ * @param {string | number} input the numeric string to parse
154
+ * @returns {string | null} a parsed string
155
+ */
147
156
  parseValue(input) {
148
157
  if (typeof input === 'string') {
149
158
  input = input.split(this.delimiter).join('').replace(this.decimalSeparator, '.');
@@ -0,0 +1,18 @@
1
+ declare namespace _default {
2
+ let components: {
3
+ label: string;
4
+ applyMaskOn: string;
5
+ mask: boolean;
6
+ tableView: boolean;
7
+ delimiter: boolean;
8
+ requireDecimal: boolean;
9
+ inputFormat: string;
10
+ truncateMultipleSpaces: boolean;
11
+ key: string;
12
+ type: string;
13
+ input: boolean;
14
+ decimalSymbol: string;
15
+ thousandsSeparator: string;
16
+ }[];
17
+ }
18
+ export default _default;
@@ -0,0 +1,19 @@
1
+ export default {
2
+ components: [
3
+ {
4
+ "label": "Number",
5
+ "applyMaskOn": "change",
6
+ "mask": false,
7
+ "tableView": false,
8
+ "delimiter": true,
9
+ "requireDecimal": false,
10
+ "inputFormat": "plain",
11
+ "truncateMultipleSpaces": false,
12
+ "key": "number",
13
+ "type": "number",
14
+ "input": true,
15
+ "decimalSymbol": ",",
16
+ "thousandsSeparator": "."
17
+ }
18
+ ]
19
+ };
@@ -6,4 +6,5 @@ import comp5 from './comp5';
6
6
  import comp6 from './comp6';
7
7
  import comp7 from './comp7';
8
8
  import comp8 from './comp8';
9
- export { comp1, comp2, comp3, comp4, comp5, comp6, comp7, comp8 };
9
+ import comp9 from './comp9';
10
+ export { comp1, comp2, comp3, comp4, comp5, comp6, comp7, comp8, comp9 };
@@ -6,4 +6,5 @@ import comp5 from './comp5';
6
6
  import comp6 from './comp6';
7
7
  import comp7 from './comp7';
8
8
  import comp8 from './comp8';
9
- export { comp1, comp2, comp3, comp4, comp5, comp6, comp7, comp8 };
9
+ import comp9 from './comp9';
10
+ export { comp1, comp2, comp3, comp4, comp5, comp6, comp7, comp8, comp9 };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@formio/js",
3
- "version": "5.0.0-dev.5704.492ccdf",
3
+ "version": "5.0.0-dev.5707.d029d4d",
4
4
  "description": "JavaScript powered Forms with JSON Form Builder",
5
5
  "main": "lib/cjs/index.js",
6
6
  "exports": {