Skip to content

Commit 7f261af

Browse files
committed
feat(datepicker): Adding new prop allowOnlyNumbers
1 parent f2531b4 commit 7f261af

File tree

5 files changed

+22
-3
lines changed

5 files changed

+22
-3
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
"ignoreRestSiblings": true
7070
}
7171
],
72+
"complexity": ["error", 10],
7273
"import/no-unassigned-import": 0,
7374
"no-console": 1
7475
}

src/__tests__/utils.test.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
isSelectable,
99
moveElementsByN,
1010
omit,
11+
onlyNumbers,
1112
parseFormatString,
1213
pick,
1314
} from '../utils';
@@ -152,3 +153,9 @@ describe('parseFormatString', () => {
152153
expect(parseFormatString('DD/MM/yyyy')).toBe('dd/MM/yyyy');
153154
});
154155
});
156+
157+
describe('onlyNumbers', () => {
158+
it('should only return numbers', () => {
159+
expect(onlyNumbers('ABC-1025.4.8')).toBe('102548');
160+
});
161+
});

src/components/datepicker.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
formatSelectedDate,
88
moveElementsByN,
99
omit,
10+
onlyNumbers,
1011
parseOnBlur,
1112
pick,
1213
} from '../utils';
@@ -51,6 +52,7 @@ const semanticInputProps = [
5152

5253
class SemanticDatepicker extends React.Component {
5354
static propTypes = {
55+
allowOnlyNumbers: PropTypes.bool,
5456
clearable: PropTypes.bool,
5557
date: PropTypes.instanceOf(Date),
5658
firstDayOfWeek: PropTypes.number,
@@ -71,6 +73,7 @@ class SemanticDatepicker extends React.Component {
7173
};
7274

7375
static defaultProps = {
76+
allowOnlyNumbers: false,
7477
clearable: true,
7578
date: undefined,
7679
filterDate: () => true,
@@ -269,10 +272,11 @@ class SemanticDatepicker extends React.Component {
269272
};
270273

271274
handleChange = (evt, { value }) => {
272-
const { format, onDateChange } = this.props;
275+
const { allowOnlyNumbers, format, onDateChange } = this.props;
273276
const formatString = this.isRangeInput ? `${format} - ${format}` : format;
277+
const typedValue = allowOnlyNumbers ? onlyNumbers(value) : value;
274278

275-
if (!value) {
279+
if (!typedValue) {
276280
const newState = {
277281
selectedDate: this.isRangeInput ? [] : null,
278282
selectedDateFormatted: '',
@@ -289,7 +293,7 @@ class SemanticDatepicker extends React.Component {
289293
this.setState({
290294
selectedDate: this.isRangeInput ? [] : null,
291295
selectedDateFormatted: '',
292-
typedValue: formatStringByPattern(formatString, value),
296+
typedValue: formatStringByPattern(formatString, typedValue),
293297
});
294298
};
295299

src/utils.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,5 @@ export const parseOnBlur = (typedValue, formatString, isRangeInput) => {
7474

7575
return dateFnsV2.parse(typedValue, parsedFormatString, new Date());
7676
};
77+
78+
export const onlyNumbers = (value = '') => value.replace(/[^\d]/g, '');

stories/index.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ storiesOf('Examples', module)
3030
<SemanticDatepicker onDateChange={console.log} />
3131
</Content>
3232
))
33+
.add('Basic with allowOnlyNumbers', () => (
34+
<Content>
35+
<SemanticDatepicker allowOnlyNumbers onDateChange={console.log} />
36+
</Content>
37+
))
3338
.add('Basic with firstDayOfWeek', () => (
3439
<Content>
3540
<SemanticDatepicker firstDayOfWeek={3} onDateChange={console.log} />

0 commit comments

Comments
 (0)