You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
867 B
TypeScript
32 lines
867 B
TypeScript
4 years ago
|
import React from "react";
|
||
4 years ago
|
import clsx from "clsx";
|
||
|
import { checkIcon } from "./icons";
|
||
|
|
||
|
import "./CheckboxItem.scss";
|
||
|
|
||
|
export const CheckboxItem: React.FC<{
|
||
|
checked: boolean;
|
||
3 years ago
|
onChange: (checked: boolean, event: React.MouseEvent) => void;
|
||
3 years ago
|
className?: string;
|
||
3 years ago
|
children?: React.ReactNode;
|
||
3 years ago
|
}> = ({ children, checked, onChange, className }) => {
|
||
4 years ago
|
return (
|
||
|
<div
|
||
3 years ago
|
className={clsx("Checkbox", className, { "is-checked": checked })}
|
||
4 years ago
|
onClick={(event) => {
|
||
3 years ago
|
onChange(!checked, event);
|
||
3 years ago
|
(
|
||
|
(event.currentTarget as HTMLDivElement).querySelector(
|
||
|
".Checkbox-box",
|
||
|
) as HTMLButtonElement
|
||
|
).focus();
|
||
4 years ago
|
}}
|
||
|
>
|
||
|
<button className="Checkbox-box" role="checkbox" aria-checked={checked}>
|
||
|
{checkIcon}
|
||
|
</button>
|
||
|
<div className="Checkbox-label">{children}</div>
|
||
|
</div>
|
||
|
);
|
||
|
};
|