UNPKG

monday-ui-react-core

Version:

Official monday.com UI resources for application development in React.js

94 lines (87 loc) 2.33 kB
import React from "react"; import PropTypes from "prop-types"; import cx from "classnames"; import NOOP from "lodash/noop"; import { BASE_TOGGLE_CLASS_NAME } from "./ToggleConstants"; import ToggleText from "./ToggleText"; import "./Toggle.scss"; import { useToggle } from "../../hooks/useToggle"; import { BEMClass } from "../../helpers/bem-helper"; const bemHelper = BEMClass(BASE_TOGGLE_CLASS_NAME); const Toggle = ({ id, componentClassName, isDefaultSelected, isSelected, onChange, value, name, isDisabled, ariaLabel, ariaControls, areLabelsHidden, onOverrideText, offOverrideText }) => { const { inputProps, isChecked } = useToggle({ id, isDefaultSelected, isSelected, onChange, value, name, isDisabled, ariaLabel, ariaControls }); return ( <label htmlFor={id} className={cx(bemHelper({ element: "wrapper" }), { [bemHelper({ element: "wrapper", state: "disabled" })]: isDisabled })} > {areLabelsHidden ? null : <ToggleText>{offOverrideText}</ToggleText>} <input {...inputProps} className={bemHelper({ element: "input" })} /> <div className={cx(bemHelper({ element: "toggle" }), componentClassName, { [bemHelper({ element: "toggle", state: "selected" })]: isChecked, [bemHelper({ element: "toggle", state: "not-selected" })]: !isChecked })} aria-hidden="true" /> {areLabelsHidden ? null : <ToggleText>{onOverrideText}</ToggleText>} </label> ); }; Toggle.propTypes = { id: PropTypes.string, componentClassName: PropTypes.string, isDefaultSelected: PropTypes.bool, isSelected: PropTypes.bool, onChange: PropTypes.func, value: PropTypes.string, name: PropTypes.string, isDisabled: PropTypes.bool, areLabelsHidden: PropTypes.bool, onOverrideText: PropTypes.string, offOverrideText: PropTypes.string, ariaLabel: PropTypes.string, ariaControls: PropTypes.string }; Toggle.defaultProps = { id: undefined, componentClassName: "", isDefaultSelected: true, isSelected: undefined, onChange: NOOP, value: undefined, name: undefined, isDisabled: false, areLabelsHidden: false, ariaLabel: undefined, ariaControls: undefined, onOverrideText: "On", offOverrideText: "Off" }; export default Toggle;