Skip to content

Commit b58119b

Browse files
committed
Fixed issue #9: Non-standard conversion from given value into displayed value
version set to 1.2.1
1 parent b50a03e commit b58119b

File tree

3 files changed

+98
-2
lines changed

3 files changed

+98
-2
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-currency-input",
3-
"version": "1.1.1",
3+
"version": "1.2.1",
44
"description": "React component for inputing currency amounts",
55
"main": "lib/index.js",
66
"scripts": {

src/index.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,17 @@ const CurrencyInput = React.createClass({
6464
let initialValue = props.value;
6565
if (!initialValue) {
6666
initialValue = props.allowEmpty? null : '';
67+
}else{
68+
69+
if (typeof initialValue == 'string') {
70+
initialValue = Number.parseFloat(initialValue);
71+
}
72+
initialValue = Number(initialValue).toLocaleString(undefined, {
73+
style : 'decimal',
74+
minimumFractionDigits: props.precision,
75+
maximumFractionDigits: props.precision
76+
})
77+
6778
}
6879

6980
const { maskedValue, value } = mask(

test/index.spec.js

Lines changed: 86 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ describe('react-currency-input', function(){
5353
});
5454

5555
it('<CurrencyInput> should have masked value of "123.456,789"', function() {
56-
expect(this.renderedComponent.getMaskedValue()).to.equal('123.456,789')
56+
expect(this.renderedComponent.getMaskedValue()).to.equal('123.456.789,000')
5757
});
5858

5959
it('<input> should be of type "tel"', function() {
@@ -62,6 +62,91 @@ describe('react-currency-input', function(){
6262
});
6363

6464

65+
describe('properly convert number value props into display values', function(){
66+
67+
it('adds decimals to whole numbers to match precision', function() {
68+
var renderedComponent = ReactTestUtils.renderIntoDocument(
69+
<CurrencyInput precision="2" value={123456789} />
70+
);
71+
expect (renderedComponent.getMaskedValue()).to.equal('123,456,789.00')
72+
});
73+
74+
it('Does not change value when precision matches', function() {
75+
var renderedComponent = ReactTestUtils.renderIntoDocument(
76+
<CurrencyInput precision="2" value={1234567.89} />
77+
);
78+
expect (renderedComponent.getMaskedValue()).to.equal('1,234,567.89')
79+
});
80+
81+
82+
it('Rounds down properly when an number with extra decimals is passed in', function() {
83+
var renderedComponent = ReactTestUtils.renderIntoDocument(
84+
<CurrencyInput precision="2" value={1234567.89123} />
85+
);
86+
expect (renderedComponent.getMaskedValue()).to.equal('1,234,567.89')
87+
});
88+
89+
90+
it('Rounds up properly when an number with extra decimals is passed in', function() {
91+
var renderedComponent = ReactTestUtils.renderIntoDocument(
92+
<CurrencyInput precision="2" value={1234567.89999} />
93+
);
94+
expect (renderedComponent.getMaskedValue()).to.equal('1,234,567.90')
95+
});
96+
97+
it('Rounds up the whole number when an number with extra decimals is passed in', function() {
98+
var renderedComponent = ReactTestUtils.renderIntoDocument(
99+
<CurrencyInput precision="0" value={1234567.89999} />
100+
);
101+
expect (renderedComponent.getMaskedValue()).to.equal('1,234,568')
102+
});
103+
104+
});
105+
106+
107+
describe('properly convert string value props into display values', function(){
108+
109+
it('adds decimals to whole numbers to match precision', function() {
110+
var renderedComponent = ReactTestUtils.renderIntoDocument(
111+
<CurrencyInput precision="2" value="6300" />
112+
);
113+
expect (renderedComponent.getMaskedValue()).to.equal('6,300.00')
114+
});
115+
116+
117+
it('Does not change value when precision matches', function() {
118+
var renderedComponent = ReactTestUtils.renderIntoDocument(
119+
<CurrencyInput precision="2" value="1234567.89" />
120+
);
121+
expect (renderedComponent.getMaskedValue()).to.equal('1,234,567.89')
122+
});
123+
124+
125+
it('Rounds down properly when an number with extra decimals is passed in', function() {
126+
var renderedComponent = ReactTestUtils.renderIntoDocument(
127+
<CurrencyInput precision="2" value="1234567.89123" />
128+
);
129+
expect (renderedComponent.getMaskedValue()).to.equal('1,234,567.89')
130+
});
131+
132+
133+
it('Rounds up properly when an number with extra decimals is passed in', function() {
134+
var renderedComponent = ReactTestUtils.renderIntoDocument(
135+
<CurrencyInput precision="2" value="1234567.89999" />
136+
);
137+
expect (renderedComponent.getMaskedValue()).to.equal('1,234,567.90')
138+
});
139+
140+
141+
it('Rounds up the whole number when an number with extra decimals is passed in', function() {
142+
var renderedComponent = ReactTestUtils.renderIntoDocument(
143+
<CurrencyInput precision="0" value="1234567.89999" />
144+
);
145+
expect (renderedComponent.getMaskedValue()).to.equal('1,234,568')
146+
});
147+
148+
});
149+
65150
describe('change events', function(){
66151

67152
before('render and locate element', function() {

0 commit comments

Comments
 (0)