monday-ui-react-core
Version:
Official monday.com UI resources for application development in React.js
83 lines (75 loc) • 2.06 kB
JavaScript
import NOOP from "lodash/noop";
import isNil from "lodash/isNil";
import React from "react";
import PropTypes from "prop-types";
import cx from "classnames";
import Icon from "../Icon/Icon";
import Check from "../Icon/Icons/components/Check";
import "./Checkbox.scss";
const BASE_CLASS_NAME = "monday-style-checkbox";
export const Checkbox = ({
componentClassName,
label,
onChange,
checked,
disabled,
defaultChecked,
value,
name
}) => {
const checkboxClassNames = [`${BASE_CLASS_NAME}__checkbox`];
let overrideDefaultChecked = defaultChecked;
// If component did not receive default checked and checked props, choose default checked as
// default behavior (handle isChecked logic inside input) and set default value
if (isNil(overrideDefaultChecked) && isNil(checked)) {
overrideDefaultChecked = false;
}
return (
<label className={cx(BASE_CLASS_NAME, componentClassName)}>
<input
className={`${BASE_CLASS_NAME}__input`}
value={value}
name={name}
type="checkbox"
onChange={onChange}
defaultChecked={overrideDefaultChecked}
disabled={disabled}
aria-label={label}
checked={checked}
/>
<div className={cx(...checkboxClassNames)}>
<Icon
className={`${BASE_CLASS_NAME}__icon`}
iconType={Icon.type.SVG}
icon={Check}
iconLabel="checkbox"
ignoreFocusStyle
clickable
iconSize={11}
/>
</div>
<span className={`${BASE_CLASS_NAME}__label`}>{label}</span>
</label>
);
};
Checkbox.propTypes = {
componentClassName: PropTypes.string,
label: PropTypes.string,
onChange: PropTypes.func,
checked: PropTypes.bool,
defaultChecked: PropTypes.bool,
value: PropTypes.string,
disabled: PropTypes.bool,
name: PropTypes.string
};
Checkbox.defaultProps = {
componentClassName: "",
label: "",
onChange: NOOP,
disabled: false,
name: "",
value: "",
checked: undefined,
defaultChecked: undefined
};
export default Checkbox;