UNPKG

@razorpay/blade

Version:

The Design System that powers Razorpay

130 lines (126 loc) 4.73 kB
import _defineProperty from '@babel/runtime/helpers/defineProperty'; import _slicedToArray from '@babel/runtime/helpers/slicedToArray'; import React__default from 'react'; import { useFormId } from '../Form/useFormId.js'; import '../../utils/makeAccessible/index.js'; import '../../utils/index.js'; import { useControllableState } from '../../utils/useControllable.js'; import '../../utils/logger/index.js'; import { getPlatformType } from '../../utils/getPlatformType/getPlatformType.js'; import { throwBladeError } from '../../utils/logger/logger.js'; import { makeAccessible } from '../../utils/makeAccessible/makeAccessible.web.js'; function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } /** * indeterminate is not a HTML input element prop, * it's an IDL prop thus we need to set it on the underlying HTMLInputElement */ function setMixed(element, mixed) { if (mixed) { element.indeterminate = true; } else if (element.indeterminate) { element.indeterminate = false; } } var useCheckbox = function useCheckbox(_ref) { var _ref$role = _ref.role, role = _ref$role === void 0 ? 'checkbox' : _ref$role, isChecked = _ref.isChecked, defaultChecked = _ref.defaultChecked, isIndeterminate = _ref.isIndeterminate, isDisabled = _ref.isDisabled, isRequired = _ref.isRequired, hasError = _ref.hasError, hasHelperText = _ref.hasHelperText, onChange = _ref.onChange, name = _ref.name, value = _ref.value; var inputRef = React__default.useRef(null); var isReactNative = getPlatformType() === 'react-native'; if (false) { if (isChecked && defaultChecked) { throwBladeError({ message: "Do not provide both 'isChecked' and 'defaultChecked' to useCheckbox. Consider if you want this component to be controlled or uncontrolled.", moduleName: 'useCheckbox' }); } } var _useControllableState = useControllableState({ value: isChecked, defaultValue: defaultChecked !== null && defaultChecked !== void 0 ? defaultChecked : false }), _useControllableState2 = _slicedToArray(_useControllableState, 2), checkboxState = _useControllableState2[0], setCheckboxStateChange = _useControllableState2[1]; var handleOnChange = function handleOnChange(event) { if (isDisabled) { event.stopPropagation(); event.preventDefault(); return; } setCheckboxStateChange(function (checked) { onChange === null || onChange === void 0 ? void 0 : onChange({ isChecked: !checked, event: event, value: value }); return !checked; }); }; // set indeterminate to input React__default.useEffect(function () { var element = inputRef.current; if (!element) return; setMixed(element, isIndeterminate); }, [isIndeterminate]); var state = { isReactNative: isReactNative, isChecked: checkboxState, setChecked: setCheckboxStateChange }; var _useFormId = useFormId('checkbox'), inputId = _useFormId.inputId, errorTextId = _useFormId.errorTextId, helpTextId = _useFormId.helpTextId; var accessibilityProps = makeAccessible(_objectSpread(_objectSpread({ role: role, required: Boolean(isRequired), invalid: Boolean(hasError), disabled: Boolean(isDisabled), checked: checkboxState }, hasError ? { errorMessage: errorTextId } : {}), hasHelperText ? { describedBy: helpTextId } : {})); if (isReactNative) { return { state: state, inputProps: _objectSpread({ onPress: handleOnChange, name: name, value: value }, accessibilityProps) }; } return { state: state, ids: { inputId: inputId, errorTextId: errorTextId, helpTextId: helpTextId }, inputProps: _objectSpread({ ref: inputRef, onChange: handleOnChange, type: 'checkbox', name: name, value: value, checked: checkboxState, disabled: isDisabled, required: isRequired }, accessibilityProps) }; }; export { useCheckbox }; //# sourceMappingURL=useCheckbox.js.map