@etsoo/react 1.4.50 → 1.4.51

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/index.d.ts CHANGED
@@ -65,6 +65,7 @@ export * from './mu/SearchField';
65
65
  export * from './mu/SearchOptionGroup';
66
66
  export * from './mu/SelectEx';
67
67
  export * from './mu/Switch';
68
+ export * from './mu/SwitchAnt';
68
69
  export * from './mu/TabBox';
69
70
  export * from './mu/TableEx';
70
71
  export * from './mu/TextFieldEx';
package/lib/index.js CHANGED
@@ -68,6 +68,7 @@ export * from './mu/SearchField';
68
68
  export * from './mu/SearchOptionGroup';
69
69
  export * from './mu/SelectEx';
70
70
  export * from './mu/Switch';
71
+ export * from './mu/SwitchAnt';
71
72
  export * from './mu/TabBox';
72
73
  export * from './mu/TableEx';
73
74
  export * from './mu/TextFieldEx';
package/lib/mu/Switch.js CHANGED
@@ -8,13 +8,20 @@ import MuiSwitch from '@mui/material/Switch';
8
8
  * @returns Component
9
9
  */
10
10
  export function Switch(props) {
11
+ var _a;
11
12
  // Destruct
12
- const { defaultChecked, defaultValue, readOnly, size, checkbox = false, value = 'true', ...rest } = props;
13
+ const { checked, defaultChecked, defaultValue, onChange, readOnly, size, checkbox = false, value = 'true', ...rest } = props;
13
14
  // Checked state
14
- const [controlChecked, setControlChecked] = React.useState(defaultChecked !== null && defaultChecked !== void 0 ? defaultChecked : defaultValue == value);
15
+ const [controlChecked, setControlChecked] = React.useState((_a = checked !== null && checked !== void 0 ? checked : defaultChecked) !== null && _a !== void 0 ? _a : defaultValue == value);
16
+ React.useEffect(() => {
17
+ if (checked)
18
+ setControlChecked(checked);
19
+ }, [checked]);
15
20
  // Handle change
16
- const handleChange = (event) => {
17
- setControlChecked(event.target.checked);
21
+ const handleChange = (event, checked) => {
22
+ if (onChange)
23
+ onChange(event, checked);
24
+ setControlChecked(checked);
18
25
  };
19
26
  // Control
20
27
  const control = checkbox ? (React.createElement(MuiCheckbox, { readOnly: readOnly, checked: controlChecked, onChange: handleChange, size: size, value: value })) : (React.createElement(MuiSwitch, { readOnly: readOnly, checked: controlChecked, onChange: handleChange, size: size, value: value }));
@@ -0,0 +1,25 @@
1
+ /// <reference types="react" />
2
+ import { SwitchProps } from '@mui/material/Switch';
3
+ /**
4
+ * Ant style switch props
5
+ */
6
+ export interface SwitchAntProps extends SwitchProps {
7
+ /**
8
+ *
9
+ */
10
+ activeColor?: string;
11
+ /**
12
+ * Start label
13
+ */
14
+ startLabel: string;
15
+ /**
16
+ * End label
17
+ */
18
+ endLabel: string;
19
+ }
20
+ /**
21
+ * Ant style switch
22
+ * @param props Props
23
+ * @returns Component
24
+ */
25
+ export declare function SwitchAnt(props: SwitchAntProps): JSX.Element;
@@ -0,0 +1,40 @@
1
+ import { Stack, Typography } from '@mui/material';
2
+ import Switch from '@mui/material/Switch';
3
+ import React from 'react';
4
+ /**
5
+ * Ant style switch
6
+ * @param props Props
7
+ * @returns Component
8
+ */
9
+ export function SwitchAnt(props) {
10
+ var _a;
11
+ // Destruct
12
+ const { activeColor, checked, defaultChecked, defaultValue, endLabel, startLabel, onChange, value = 'true', ...rest } = props;
13
+ // Checked state
14
+ const [controlChecked, setControlChecked] = React.useState((_a = checked !== null && checked !== void 0 ? checked : defaultChecked) !== null && _a !== void 0 ? _a : defaultValue == value);
15
+ React.useEffect(() => {
16
+ if (checked)
17
+ setControlChecked(checked);
18
+ }, [checked]);
19
+ // On change
20
+ const onChangeLocal = (event, checked) => {
21
+ if (onChange)
22
+ onChange(event, checked);
23
+ setControlChecked(checked);
24
+ };
25
+ // Layout
26
+ return (React.createElement(Stack, { direction: "row", spacing: 1, alignItems: "center" },
27
+ React.createElement(Typography, { onClick: () => setControlChecked(false), sx: {
28
+ cursor: 'pointer',
29
+ color: controlChecked
30
+ ? undefined
31
+ : (theme) => activeColor !== null && activeColor !== void 0 ? activeColor : theme.palette.warning.main
32
+ } }, startLabel),
33
+ React.createElement(Switch, { checked: controlChecked, value: value, onChange: onChangeLocal, ...rest }),
34
+ React.createElement(Typography, { onClick: () => setControlChecked(true), sx: {
35
+ cursor: 'pointer',
36
+ color: controlChecked
37
+ ? (theme) => activeColor !== null && activeColor !== void 0 ? activeColor : theme.palette.warning.main
38
+ : undefined
39
+ } }, endLabel)));
40
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@etsoo/react",
3
- "version": "1.4.50",
3
+ "version": "1.4.51",
4
4
  "description": "TypeScript ReactJs framework",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
package/src/index.ts CHANGED
@@ -72,6 +72,7 @@ export * from './mu/SearchField';
72
72
  export * from './mu/SearchOptionGroup';
73
73
  export * from './mu/SelectEx';
74
74
  export * from './mu/Switch';
75
+ export * from './mu/SwitchAnt';
75
76
  export * from './mu/TabBox';
76
77
  export * from './mu/TableEx';
77
78
  export * from './mu/TextFieldEx';
package/src/mu/Switch.tsx CHANGED
@@ -36,8 +36,10 @@ export interface SwitchProps extends Omit<FormControlLabelProps, 'control'> {
36
36
  export function Switch(props: SwitchProps) {
37
37
  // Destruct
38
38
  const {
39
+ checked,
39
40
  defaultChecked,
40
41
  defaultValue,
42
+ onChange,
41
43
  readOnly,
42
44
  size,
43
45
  checkbox = false,
@@ -47,12 +49,20 @@ export function Switch(props: SwitchProps) {
47
49
 
48
50
  // Checked state
49
51
  const [controlChecked, setControlChecked] = React.useState(
50
- defaultChecked ?? defaultValue == value
52
+ checked ?? defaultChecked ?? defaultValue == value
51
53
  );
52
54
 
55
+ React.useEffect(() => {
56
+ if (checked) setControlChecked(checked);
57
+ }, [checked]);
58
+
53
59
  // Handle change
54
- const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
55
- setControlChecked(event.target.checked);
60
+ const handleChange = (
61
+ event: React.ChangeEvent<HTMLInputElement>,
62
+ checked: boolean
63
+ ) => {
64
+ if (onChange) onChange(event, checked);
65
+ setControlChecked(checked);
56
66
  };
57
67
 
58
68
  // Control
@@ -0,0 +1,95 @@
1
+ import { Stack, Typography } from '@mui/material';
2
+ import Switch, { SwitchProps } from '@mui/material/Switch';
3
+ import React from 'react';
4
+
5
+ /**
6
+ * Ant style switch props
7
+ */
8
+ export interface SwitchAntProps extends SwitchProps {
9
+ /**
10
+ *
11
+ */
12
+ activeColor?: string;
13
+
14
+ /**
15
+ * Start label
16
+ */
17
+ startLabel: string;
18
+
19
+ /**
20
+ * End label
21
+ */
22
+ endLabel: string;
23
+ }
24
+
25
+ /**
26
+ * Ant style switch
27
+ * @param props Props
28
+ * @returns Component
29
+ */
30
+ export function SwitchAnt(props: SwitchAntProps) {
31
+ // Destruct
32
+ const {
33
+ activeColor,
34
+ checked,
35
+ defaultChecked,
36
+ defaultValue,
37
+ endLabel,
38
+ startLabel,
39
+ onChange,
40
+ value = 'true',
41
+ ...rest
42
+ } = props;
43
+
44
+ // Checked state
45
+ const [controlChecked, setControlChecked] = React.useState(
46
+ checked ?? defaultChecked ?? defaultValue == value
47
+ );
48
+
49
+ React.useEffect(() => {
50
+ if (checked) setControlChecked(checked);
51
+ }, [checked]);
52
+
53
+ // On change
54
+ const onChangeLocal = (
55
+ event: React.ChangeEvent<HTMLInputElement>,
56
+ checked: boolean
57
+ ) => {
58
+ if (onChange) onChange(event, checked);
59
+ setControlChecked(checked);
60
+ };
61
+
62
+ // Layout
63
+ return (
64
+ <Stack direction="row" spacing={1} alignItems="center">
65
+ <Typography
66
+ onClick={() => setControlChecked(false)}
67
+ sx={{
68
+ cursor: 'pointer',
69
+ color: controlChecked
70
+ ? undefined
71
+ : (theme) => activeColor ?? theme.palette.warning.main
72
+ }}
73
+ >
74
+ {startLabel}
75
+ </Typography>
76
+ <Switch
77
+ checked={controlChecked}
78
+ value={value}
79
+ onChange={onChangeLocal}
80
+ {...rest}
81
+ />
82
+ <Typography
83
+ onClick={() => setControlChecked(true)}
84
+ sx={{
85
+ cursor: 'pointer',
86
+ color: controlChecked
87
+ ? (theme) => activeColor ?? theme.palette.warning.main
88
+ : undefined
89
+ }}
90
+ >
91
+ {endLabel}
92
+ </Typography>
93
+ </Stack>
94
+ );
95
+ }