@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.
@@ -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
  */
@@ -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, defaultValue, onChangeDelay, onValueChange, required, ...rest } = props;
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
- }, onChangeDelay: (event) => {
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
- if (localValue <= min)
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(localValue - step, "SUB");
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
- if (localValue >= max)
93
+ const value = NumberUtils.parse(localValue);
94
+ if (isNaN(value))
95
+ return;
96
+ if (value >= max)
94
97
  return;
95
98
  else
96
- setValue(localValue + step, "ADD");
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.85",
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.86",
53
+ "@etsoo/appscript": "^1.3.87",
54
54
  "@etsoo/notificationbase": "^1.1.24",
55
- "@etsoo/react": "^1.6.57",
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.3",
80
- "@babel/plugin-transform-runtime": "^7.21.0",
81
- "@babel/preset-env": "^7.20.2",
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.0",
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",
@@ -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
- defaultValue,
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
- if (localValue <= min) setValue(undefined, "SUB");
182
- else setValue(localValue - step, "SUB");
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
- if (localValue >= max) return;
196
- else setValue(localValue + step, "ADD");
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"} />