@etsoo/materialui
Version:
TypeScript Material-UI Implementation
41 lines (40 loc) • 1.81 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Switch = Switch;
const jsx_runtime_1 = require("react/jsx-runtime");
const react_1 = __importDefault(require("react"));
const Checkbox_1 = __importDefault(require("@mui/material/Checkbox"));
const Switch_1 = __importDefault(require("@mui/material/Switch"));
const FormControlLabel_1 = __importDefault(require("@mui/material/FormControlLabel"));
/**
* Switch
* @param props Props
* @returns Component
*/
function Switch(props) {
// Destruct
const { checked, defaultChecked, defaultValue, onChange, readOnly, size, checkbox = false, value = "true", ...rest } = props;
// Checked state
const [controlChecked, setControlChecked] = react_1.default.useState(checked ?? defaultChecked ?? defaultValue == value);
react_1.default.useEffect(() => {
if (checked)
setControlChecked(checked);
}, [checked]);
// Handle change
const handleChange = (event, checked) => {
if (onChange)
onChange(event, checked);
setControlChecked(checked);
};
// Control
const control = checkbox ? ((0, jsx_runtime_1.jsx)(Checkbox_1.default, { readOnly: readOnly, checked: controlChecked, onChange: handleChange, size: size, value: value })) : ((0, jsx_runtime_1.jsx)(Switch_1.default, { readOnly: readOnly, checked: controlChecked, onChange: handleChange, size: size, value: value }));
// Default state
react_1.default.useEffect(() => {
setControlChecked(controlChecked);
}, [controlChecked]);
// Layout
return (0, jsx_runtime_1.jsx)(FormControlLabel_1.default, { control: control, ...rest });
}