@etsoo/materialui 1.1.85 → 1.1.87
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/IntInputField.d.ts +1 -1
- package/lib/IntInputField.js +18 -15
- package/package.json +7 -7
- package/src/IntInputField.tsx +24 -16
package/lib/IntInputField.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { InputFieldProps } from "./InputField";
|
|
|
3
3
|
/**
|
|
4
4
|
* Integer input field props
|
|
5
5
|
*/
|
|
6
|
-
export type IntInputFieldProps = Omit<InputFieldProps, "type" | "inputProps" | "value"> & {
|
|
6
|
+
export type IntInputFieldProps = Omit<InputFieldProps, "type" | "inputProps" | "value" | "defaultValue"> & {
|
|
7
7
|
/**
|
|
8
8
|
* Minimum value
|
|
9
9
|
*/
|
package/lib/IntInputField.js
CHANGED
|
@@ -2,13 +2,14 @@ import { Box, IconButton, InputAdornment } from "@mui/material";
|
|
|
2
2
|
import AddIcon from "@mui/icons-material/Add";
|
|
3
3
|
import RemoveIcon from "@mui/icons-material/Remove";
|
|
4
4
|
import React from "react";
|
|
5
|
+
import { NumberUtils } from "@etsoo/shared";
|
|
5
6
|
import { InputField } from "./InputField";
|
|
6
7
|
/**
|
|
7
8
|
* Integer input field
|
|
8
9
|
*/
|
|
9
10
|
export const IntInputField = React.forwardRef((props, ref) => {
|
|
10
11
|
// Destruct
|
|
11
|
-
const { min = 0, step = 1, max = 9999999, inputStyle = { textAlign: "right" }, buttons, endSymbol, symbol, value,
|
|
12
|
+
const { min = 0, step = 1, max = 9999999, inputStyle = { textAlign: "right" }, buttons, endSymbol, symbol, value, changeDelay = 600, onChangeDelay, onChange, onValueChange, required, ...rest } = props;
|
|
12
13
|
// State
|
|
13
14
|
const [localValue, setLocalValue] = React.useState();
|
|
14
15
|
const setValue = (value, source, init = false) => {
|
|
@@ -29,15 +30,6 @@ export const IntInputField = React.forwardRef((props, ref) => {
|
|
|
29
30
|
React.useEffect(() => {
|
|
30
31
|
setValue(value, undefined, true);
|
|
31
32
|
}, [value]);
|
|
32
|
-
React.useEffect(() => {
|
|
33
|
-
if (defaultValue == null)
|
|
34
|
-
return;
|
|
35
|
-
const value = typeof defaultValue === "number"
|
|
36
|
-
? defaultValue
|
|
37
|
-
: parseFloat(`${defaultValue}`);
|
|
38
|
-
if (!isNaN(value))
|
|
39
|
-
setValue(value, defaultValue, true);
|
|
40
|
-
}, [defaultValue]);
|
|
41
33
|
// Layout
|
|
42
34
|
const layout = (React.createElement(InputField, { ref: ref, type: "number", value: localValue == null ? (required ? min : "") : localValue, inputProps: {
|
|
43
35
|
min,
|
|
@@ -58,7 +50,12 @@ export const IntInputField = React.forwardRef((props, ref) => {
|
|
|
58
50
|
WebkitAppearance: "none",
|
|
59
51
|
margin: 0
|
|
60
52
|
}
|
|
61
|
-
},
|
|
53
|
+
}, onChange: (event) => {
|
|
54
|
+
const source = event.target.value;
|
|
55
|
+
setLocalValue(source);
|
|
56
|
+
if (onChange)
|
|
57
|
+
onChange(event);
|
|
58
|
+
}, changeDelay: changeDelay, onChangeDelay: (event) => {
|
|
62
59
|
const source = event.target.value;
|
|
63
60
|
const value = parseFloat(source);
|
|
64
61
|
if (isNaN(value))
|
|
@@ -78,10 +75,13 @@ export const IntInputField = React.forwardRef((props, ref) => {
|
|
|
78
75
|
React.createElement(IconButton, { size: "small", onClick: () => {
|
|
79
76
|
if (localValue == null)
|
|
80
77
|
return;
|
|
81
|
-
|
|
78
|
+
const value = NumberUtils.parse(localValue);
|
|
79
|
+
if (isNaN(value))
|
|
80
|
+
return;
|
|
81
|
+
if (value <= min)
|
|
82
82
|
setValue(undefined, "SUB");
|
|
83
83
|
else
|
|
84
|
-
setValue(
|
|
84
|
+
setValue(value - step, "SUB");
|
|
85
85
|
} },
|
|
86
86
|
React.createElement(RemoveIcon, null)),
|
|
87
87
|
layout,
|
|
@@ -90,10 +90,13 @@ export const IntInputField = React.forwardRef((props, ref) => {
|
|
|
90
90
|
setValue(min, "ADD");
|
|
91
91
|
return;
|
|
92
92
|
}
|
|
93
|
-
|
|
93
|
+
const value = NumberUtils.parse(localValue);
|
|
94
|
+
if (isNaN(value))
|
|
95
|
+
return;
|
|
96
|
+
if (value >= max)
|
|
94
97
|
return;
|
|
95
98
|
else
|
|
96
|
-
setValue(
|
|
99
|
+
setValue(value + step, "ADD");
|
|
97
100
|
} },
|
|
98
101
|
React.createElement(AddIcon, { color: localValue == null ? undefined : "primary" }))));
|
|
99
102
|
else
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@etsoo/materialui",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.87",
|
|
4
4
|
"description": "TypeScript Material-UI Implementation",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -50,9 +50,9 @@
|
|
|
50
50
|
"@emotion/css": "^11.10.6",
|
|
51
51
|
"@emotion/react": "^11.10.6",
|
|
52
52
|
"@emotion/styled": "^11.10.6",
|
|
53
|
-
"@etsoo/appscript": "^1.3.
|
|
53
|
+
"@etsoo/appscript": "^1.3.87",
|
|
54
54
|
"@etsoo/notificationbase": "^1.1.24",
|
|
55
|
-
"@etsoo/react": "^1.6.
|
|
55
|
+
"@etsoo/react": "^1.6.58",
|
|
56
56
|
"@etsoo/shared": "^1.1.95",
|
|
57
57
|
"@mui/icons-material": "^5.11.11",
|
|
58
58
|
"@mui/material": "^5.11.15",
|
|
@@ -76,11 +76,11 @@
|
|
|
76
76
|
},
|
|
77
77
|
"devDependencies": {
|
|
78
78
|
"@babel/cli": "^7.21.0",
|
|
79
|
-
"@babel/core": "^7.21.
|
|
80
|
-
"@babel/plugin-transform-runtime": "^7.21.
|
|
81
|
-
"@babel/preset-env": "^7.
|
|
79
|
+
"@babel/core": "^7.21.4",
|
|
80
|
+
"@babel/plugin-transform-runtime": "^7.21.4",
|
|
81
|
+
"@babel/preset-env": "^7.21.4",
|
|
82
82
|
"@babel/preset-react": "^7.18.6",
|
|
83
|
-
"@babel/preset-typescript": "^7.21.
|
|
83
|
+
"@babel/preset-typescript": "^7.21.4",
|
|
84
84
|
"@babel/runtime-corejs3": "^7.21.0",
|
|
85
85
|
"@testing-library/jest-dom": "^5.16.5",
|
|
86
86
|
"@testing-library/react": "^14.0.0",
|
package/src/IntInputField.tsx
CHANGED
|
@@ -2,6 +2,7 @@ import { Box, IconButton, InputAdornment } from "@mui/material";
|
|
|
2
2
|
import AddIcon from "@mui/icons-material/Add";
|
|
3
3
|
import RemoveIcon from "@mui/icons-material/Remove";
|
|
4
4
|
import React from "react";
|
|
5
|
+
import { NumberUtils } from "@etsoo/shared";
|
|
5
6
|
import { InputField, InputFieldProps } from "./InputField";
|
|
6
7
|
|
|
7
8
|
/**
|
|
@@ -9,7 +10,7 @@ import { InputField, InputFieldProps } from "./InputField";
|
|
|
9
10
|
*/
|
|
10
11
|
export type IntInputFieldProps = Omit<
|
|
11
12
|
InputFieldProps,
|
|
12
|
-
"type" | "inputProps" | "value"
|
|
13
|
+
"type" | "inputProps" | "value" | "defaultValue"
|
|
13
14
|
> & {
|
|
14
15
|
/**
|
|
15
16
|
* Minimum value
|
|
@@ -81,15 +82,16 @@ export const IntInputField = React.forwardRef<
|
|
|
81
82
|
endSymbol,
|
|
82
83
|
symbol,
|
|
83
84
|
value,
|
|
84
|
-
|
|
85
|
+
changeDelay = 600,
|
|
85
86
|
onChangeDelay,
|
|
87
|
+
onChange,
|
|
86
88
|
onValueChange,
|
|
87
89
|
required,
|
|
88
90
|
...rest
|
|
89
91
|
} = props;
|
|
90
92
|
|
|
91
93
|
// State
|
|
92
|
-
const [localValue, setLocalValue] = React.useState<number>();
|
|
94
|
+
const [localValue, setLocalValue] = React.useState<number | string>();
|
|
93
95
|
|
|
94
96
|
const setValue = (
|
|
95
97
|
value: number | undefined,
|
|
@@ -114,15 +116,6 @@ export const IntInputField = React.forwardRef<
|
|
|
114
116
|
setValue(value, undefined, true);
|
|
115
117
|
}, [value]);
|
|
116
118
|
|
|
117
|
-
React.useEffect(() => {
|
|
118
|
-
if (defaultValue == null) return;
|
|
119
|
-
const value =
|
|
120
|
-
typeof defaultValue === "number"
|
|
121
|
-
? defaultValue
|
|
122
|
-
: parseFloat(`${defaultValue}`);
|
|
123
|
-
if (!isNaN(value)) setValue(value, defaultValue, true);
|
|
124
|
-
}, [defaultValue]);
|
|
125
|
-
|
|
126
119
|
// Layout
|
|
127
120
|
const layout = (
|
|
128
121
|
<InputField
|
|
@@ -156,6 +149,13 @@ export const IntInputField = React.forwardRef<
|
|
|
156
149
|
margin: 0
|
|
157
150
|
}
|
|
158
151
|
}}
|
|
152
|
+
onChange={(event) => {
|
|
153
|
+
const source = event.target.value;
|
|
154
|
+
setLocalValue(source);
|
|
155
|
+
|
|
156
|
+
if (onChange) onChange(event);
|
|
157
|
+
}}
|
|
158
|
+
changeDelay={changeDelay}
|
|
159
159
|
onChangeDelay={(event) => {
|
|
160
160
|
const source = event.target.value;
|
|
161
161
|
const value = parseFloat(source);
|
|
@@ -178,8 +178,12 @@ export const IntInputField = React.forwardRef<
|
|
|
178
178
|
size="small"
|
|
179
179
|
onClick={() => {
|
|
180
180
|
if (localValue == null) return;
|
|
181
|
-
|
|
182
|
-
|
|
181
|
+
|
|
182
|
+
const value = NumberUtils.parse(localValue);
|
|
183
|
+
if (isNaN(value)) return;
|
|
184
|
+
|
|
185
|
+
if (value <= min) setValue(undefined, "SUB");
|
|
186
|
+
else setValue(value - step, "SUB");
|
|
183
187
|
}}
|
|
184
188
|
>
|
|
185
189
|
<RemoveIcon />
|
|
@@ -192,8 +196,12 @@ export const IntInputField = React.forwardRef<
|
|
|
192
196
|
setValue(min, "ADD");
|
|
193
197
|
return;
|
|
194
198
|
}
|
|
195
|
-
|
|
196
|
-
|
|
199
|
+
|
|
200
|
+
const value = NumberUtils.parse(localValue);
|
|
201
|
+
if (isNaN(value)) return;
|
|
202
|
+
|
|
203
|
+
if (value >= max) return;
|
|
204
|
+
else setValue(value + step, "ADD");
|
|
197
205
|
}}
|
|
198
206
|
>
|
|
199
207
|
<AddIcon color={localValue == null ? undefined : "primary"} />
|