forked from deriv-com/ui
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.tsx
57 lines (52 loc) · 1.64 KB
/
index.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import React, { ChangeEvent, forwardRef, useEffect, useState } from "react";
import clsx from "clsx";
import { Input } from "../Input";
import "./ToggleSwitch.scss";
interface ToggleSwitchProps {
onChange?: (event: ChangeEvent<HTMLInputElement>) => void;
value?: boolean;
wrapperClassName?: React.ComponentProps<typeof Input>["wrapperClassName"];
className?: React.ComponentProps<typeof Input>["className"];
wrapperStyle?: React.CSSProperties;
style?: React.CSSProperties;
}
export const ToggleSwitch = forwardRef<HTMLInputElement, ToggleSwitchProps>(
(
{
onChange,
value = false,
wrapperClassName,
className,
wrapperStyle,
style,
},
ref,
) => {
const [isChecked, setIsChecked] = useState<boolean>(value);
useEffect(() => {
if (value !== undefined) {
setIsChecked(value);
}
}, [value]);
const onClickHandler = (event: ChangeEvent<HTMLInputElement>) => {
setIsChecked(!isChecked);
onChange?.(event);
};
return (
<label
className={clsx("deriv-toggle-switch", wrapperClassName)}
style={wrapperStyle}
>
<input
checked={isChecked}
onChange={onClickHandler}
ref={ref}
type="checkbox"
className={clsx(className)}
style={style}
/>
<span className="deriv-toggle-switch__slider" />
</label>
);
},
);