Skip to content

Commit

Permalink
fix(NumberPicker): avoid input - when min >=0, close alibaba-fusion#2335
Browse files Browse the repository at this point in the history
  • Loading branch information
galo.gm authored and youluna committed Apr 6, 2021
1 parent bb58f37 commit a8f0e89
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 1 deletion.
10 changes: 9 additions & 1 deletion src/number-picker/number-picker.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,12 @@ class NumberPicker extends React.Component {

// ignore when input start form '-'
if (value === '-' || this.state.value === '-') {
if (this.props.min >= 0) {
// trigger onCorrect when input - on min >= 0
// trigger onChange when the result of correction is not state.value
this.setInputValue(value, e);
return;
}
this.setState({
value,
reRender: false,
Expand All @@ -238,7 +244,7 @@ class NumberPicker extends React.Component {
return;
}
// ignore when value < min (because number is inputted one by one)
if (!isNaN(value) && Number(value) < this.props.min) {
if (!isNaN(value) && Number(value) > 0 && Number(value) < this.props.min) {
this.setState({
value,
reRender: false,
Expand Down Expand Up @@ -300,6 +306,8 @@ class NumberPicker extends React.Component {
if (val > props.max) {
val = props.max;
}
} else if (val === '-' && props.min >= 0) {
val = props.min;
} else {
val = this.state.value;
}
Expand Down
32 changes: 32 additions & 0 deletions test/number-picker/index-spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -433,6 +433,38 @@ describe('number-picker', () => {
done();
});

it('should avoid input - when min >= 0', done => {
let onChange = value => {
assert(value === 0);
},
wrapper = mount(
<NumberPicker
min={0}
onChange={onChange}
/>
);
wrapper
.find('input')
.simulate('change', { target: { value: '-' } });
wrapper
.find('input')
.simulate('change', { target: { value: '-2' } });
wrapper = mount(
<NumberPicker
defaultValue={-2}
min={0}
onChange={onChange}
/>
);
wrapper
.find('input')
.simulate('change', { target: { value: '-' } });
wrapper
.find('input')
.simulate('change', { target: { value: '-21' } });
done();

})
it('should be equal min while next value < min by click +', done => {
let onChange = value => {
assert(value === 30);
Expand Down

0 comments on commit a8f0e89

Please sign in to comment.