Skip to content

Commit 6cb7013

Browse files
committed
[fix](BasicInputNumber): Add integer parameter to restrict numerical input
1 parent 7863f74 commit 6cb7013

File tree

8 files changed

+131
-13
lines changed

8 files changed

+131
-13
lines changed

packages/base/src/page/Account/components/AccessToken/GenerateTokenModal.tsx

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -88,13 +88,7 @@ const GenerateTokenModal: React.FC<GenerateTokenModalProps> = ({
8888
]}
8989
>
9090
<BasicInputNumber
91-
formatter={(value) => {
92-
if (!value) {
93-
return '';
94-
}
95-
96-
return `${Math.floor(value as number)}`;
97-
}}
91+
integer
9892
min={1}
9993
placeholder={t('common.form.placeholder.input', {
10094
name: t(

packages/base/src/page/DataSource/components/Form/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -571,6 +571,7 @@ const DataSourceForm: React.FC<IDataSourceFormProps> = (props) => {
571571
placeholder={t('common.form.placeholder.input', {
572572
name: t('dmsDataSource.dataSourceForm.lineNumberLimit')
573573
})}
574+
integer
574575
/>
575576
</FormItemLabel>
576577
</EmptyBox>

packages/base/src/page/System/PushNotification/WebhookSetting/components/ConfigField.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ const ConfigField = () => {
3131
}
3232
]}
3333
>
34-
<BasicInputNumber min={0} max={5} />
34+
<BasicInputNumber integer min={0} max={5} />
3535
</FormItemLabel>
3636
<FormItemLabel
3737
className="has-required-style"
@@ -43,7 +43,7 @@ const ConfigField = () => {
4343
}
4444
]}
4545
>
46-
<BasicInputNumber min={1} max={5} />
46+
<BasicInputNumber integer min={1} max={5} />
4747
</FormItemLabel>
4848
<FormItemLabel label="token" name="token">
4949
<BasicInput

packages/shared/lib/components/BasicInputNumber/BasicInputNumber.test.tsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { renderWithTheme } from '../../testUtil/customRender';
22
import BasicInputNumber from './BasicInputNumber';
33
import { BasicInputNumberProps } from './BasicInputNumber.types';
4+
import { act, fireEvent } from '@testing-library/react';
5+
import { getBySelector } from '../../testUtil/customQuery';
46

57
describe('lib/BasicInputNumber', () => {
68
const customRender = (params: BasicInputNumberProps) => {
@@ -28,4 +30,23 @@ describe('lib/BasicInputNumber', () => {
2830
});
2931
expect(container3).toMatchSnapshot();
3032
});
33+
34+
it('render integer input', async () => {
35+
const { container } = customRender({
36+
integer: true
37+
});
38+
expect(container).toMatchSnapshot();
39+
40+
const inputElement = getBySelector('input');
41+
42+
fireEvent.change(inputElement, {
43+
target: { value: 1.1111 }
44+
});
45+
46+
await act(async () => {
47+
fireEvent.blur(inputElement);
48+
});
49+
50+
expect(inputElement).toHaveValue('1');
51+
});
3152
});

packages/shared/lib/components/BasicInputNumber/BasicInputNumber.tsx

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,27 @@ import { BasicInputNumberStyleWrapper } from './style';
33
import { ComponentControlHeight } from '../../data/common';
44
import { BasicInputNumberProps } from './BasicInputNumber.types';
55
import { ConfigProvider } from 'antd';
6+
import { useMemo } from 'react';
7+
import { InputNumberProps } from 'antd';
68

79
const BasicInputNumber: React.FC<BasicInputNumberProps> = (props) => {
8-
const { className, ...params } = props;
10+
const { className, integer, ...params } = props;
11+
12+
const inputNumberProps: InputNumberProps = useMemo(() => {
13+
if (integer) {
14+
return {
15+
formatter: (value) => {
16+
if (!value) {
17+
return '';
18+
}
19+
20+
return `${Math.floor(value as number)}`;
21+
},
22+
...params
23+
};
24+
}
25+
return params;
26+
}, [integer, params]);
927

1028
return (
1129
<ConfigProvider
@@ -22,7 +40,7 @@ const BasicInputNumber: React.FC<BasicInputNumberProps> = (props) => {
2240
<BasicInputNumberStyleWrapper
2341
size="large"
2442
className={classnames('basic-inputNumber-wrapper', className)}
25-
{...params}
43+
{...inputNumberProps}
2644
/>
2745
</ConfigProvider>
2846
);
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
import { InputNumberProps } from 'antd';
22

3-
export interface BasicInputNumberProps extends InputNumberProps {}
3+
export interface BasicInputNumberProps extends InputNumberProps {
4+
integer?: boolean;
5+
}

packages/shared/lib/components/BasicInputNumber/__snapshots__/BasicInputNumber.test.tsx.snap

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,3 +311,81 @@ exports[`lib/BasicInputNumber render diff size input number 4`] = `
311311
</div>
312312
</div>
313313
`;
314+
315+
exports[`lib/BasicInputNumber render integer input 1`] = `
316+
<div>
317+
<div
318+
class="ant-input-number ant-input-number-lg css-dev-only-do-not-override-ezmdel basic-inputNumber-wrapper css-1fd5hnt"
319+
>
320+
<div
321+
class="ant-input-number-handler-wrap"
322+
>
323+
<span
324+
aria-disabled="false"
325+
aria-label="Increase Value"
326+
class="ant-input-number-handler ant-input-number-handler-up"
327+
role="button"
328+
unselectable="on"
329+
>
330+
<span
331+
aria-label="up"
332+
class="anticon anticon-up ant-input-number-handler-up-inner"
333+
role="img"
334+
>
335+
<svg
336+
aria-hidden="true"
337+
data-icon="up"
338+
fill="currentColor"
339+
focusable="false"
340+
height="1em"
341+
viewBox="64 64 896 896"
342+
width="1em"
343+
>
344+
<path
345+
d="M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140 768h75c5.1 0 9.9-2.5 12.9-6.6L512 369.8l284.1 391.6c3 4.1 7.8 6.6 12.9 6.6h75c6.5 0 10.3-7.4 6.5-12.7z"
346+
/>
347+
</svg>
348+
</span>
349+
</span>
350+
<span
351+
aria-disabled="false"
352+
aria-label="Decrease Value"
353+
class="ant-input-number-handler ant-input-number-handler-down"
354+
role="button"
355+
unselectable="on"
356+
>
357+
<span
358+
aria-label="down"
359+
class="anticon anticon-down ant-input-number-handler-down-inner"
360+
role="img"
361+
>
362+
<svg
363+
aria-hidden="true"
364+
data-icon="down"
365+
fill="currentColor"
366+
focusable="false"
367+
height="1em"
368+
viewBox="64 64 896 896"
369+
width="1em"
370+
>
371+
<path
372+
d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"
373+
/>
374+
</svg>
375+
</span>
376+
</span>
377+
</div>
378+
<div
379+
class="ant-input-number-input-wrap"
380+
>
381+
<input
382+
autocomplete="off"
383+
class="ant-input-number-input"
384+
role="spinbutton"
385+
step="1"
386+
value=""
387+
/>
388+
</div>
389+
</div>
390+
</div>
391+
`;

packages/sqle/src/page/SqlExecWorkflow/Common/SqlStatementFormController/SqlStatementFormItem/components/SqlBackupSwitcher.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,11 @@ const SqlBackupSwitcher: React.FC<SqlBackupSwitcherProps> = ({
154154
name={[fieldPrefixPath, 'backupMaxRows']}
155155
initialValue={1000}
156156
>
157-
<BasicInputNumber min={0} disabled={getInstanceEnableBackup()} />
157+
<BasicInputNumber
158+
integer
159+
min={0}
160+
disabled={getInstanceEnableBackup()}
161+
/>
158162
</FormItemLabel>
159163
</EmptyBox>
160164
</EmptyBox>

0 commit comments

Comments
 (0)