Skip to content

Commit

Permalink
FIO-9173: Allow Scientific Notations (#5878)
Browse files Browse the repository at this point in the history
* FIO-9173: Allow Scientific Notations

* FIO-9173: Fixing index

* FIO-9173: Adding more tests & using parseFloat instead of Number
  • Loading branch information
edwinanciani authored and lane-formio committed Oct 28, 2024
1 parent cd4ba4b commit d14937e
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 13 deletions.
7 changes: 6 additions & 1 deletion src/components/number/Number.js
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,12 @@ export default class NumberComponent extends Input {
let value = parseFloat(input);

if (!_.isNaN(value)) {
value = String(value).replace('.', this.decimalSeparator);
// Format scientific notation
if (/e/i.test(String(value))) {
value = value.toExponential(this.decimalLimit);
} else {
value = String(value).replace('.', this.decimalSeparator);
}
}
else {
value = null;
Expand Down
28 changes: 25 additions & 3 deletions src/components/number/Number.unit.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,11 @@ import {
comp6,
comp7,
comp8,
comp9
} from './fixtures';
import CurrencyComponent from '../currency/Currency';
comp9,
comp10,
comp11,
scientificNotation
} from './fixtures/number';

describe('Number Component', () => {
it('Should build an number component', () => {
Expand All @@ -25,6 +27,26 @@ describe('Number Component', () => {
});
});

it('Should correctly handle scientific notation', () => {
return Harness.testCreate(NumberComponent, scientificNotation, { allowScientificNotation: true }).then((component) => {
const testCases = [
[6.54635E+12, 6546350000000, '6546350000000'],
[1.23e-5, 0.0000123, '0.0000123'],
[3.14159e2, 314.159, '314.159'],
[2e-3, 0.002, '0.002'],
[7.5e5, 750000, '750000'],
[1.2345e10, 12345000000, '12345000000'],
];

testCases.forEach(([input, expectedValue, expectedDisplayValue]) => {

component.setValue(input);
assert.equal(component.dataValue, expectedValue, `setValue: ${input} should result in ${expectedValue}`);
assert.equal(component.getValueAsString(input), expectedDisplayValue, `getValueAsString: ${input} should result in ${expectedDisplayValue}`);
});
});
});

it('Should format submissions for table view for French locale', () => {
return Harness.testCreate(NumberComponent, comp4, { language: 'fr' }).then((component) => {
const value1 = component.getValueAsString(1);
Expand Down
20 changes: 11 additions & 9 deletions src/components/number/fixtures/index.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
export comp1 from './comp1';
export comp2 from './comp2';
export comp3 from './comp3';
export comp4 from './comp4';
export comp5 from './comp5';
export comp6 from './comp6';
export comp7 from './comp7';
export comp8 from './comp8';
export comp9 from './comp9';
import comp1 from './comp1';
import comp2 from './comp2';
import comp3 from './comp3';
import comp4 from './comp4';
import comp5 from './comp5';
import comp6 from './comp6';
import comp7 from './comp7';
import comp8 from './comp8';
import comp9 from './comp9';
import scientificNotation from './scientificNotation';
export { comp1, comp2, comp3, comp4, comp5, comp6, comp7, comp8, comp9, scientificNotation };
13 changes: 13 additions & 0 deletions src/components/number/fixtures/scientificNotation.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
export default {
'label': 'Number',
'mask': false,
'spellcheck': true,
'tableView': true,
'delimiter': true,
'requireDecimal': true,
'inputFormat': 'plain',
'key': 'number',
'type': 'number',
'decimalLimit': 2,
'input': true
};

0 comments on commit d14937e

Please sign in to comment.