UNPKG

@geezee/react-ui

Version:

Modern and minimalist React UI library.

77 lines (71 loc) 2.7 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray"; import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray"; import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties"; import _JSXStyle from "styled-jsx/style"; import React, { useEffect, useMemo, useState } from 'react'; import withDefaults from '../utils/with-defaults'; import { CheckboxContext } from './checkbox-context'; import useWarning from '../utils/use-warning'; var defaultProps = { disabled: false, size: 'small', className: '' }; export var getCheckboxSize = function getCheckboxSize(size) { var sizes = { mini: '.75rem', small: '.875rem', medium: '1rem', large: '1.125rem' }; return sizes[size]; }; var CheckboxGroup = function CheckboxGroup(_ref) { var disabled = _ref.disabled, onChange = _ref.onChange, value = _ref.value, size = _ref.size, children = _ref.children, className = _ref.className, props = _objectWithoutProperties(_ref, ["disabled", "onChange", "value", "size", "children", "className"]); var _useState = useState([]), _useState2 = _slicedToArray(_useState, 2), selfVal = _useState2[0], setSelfVal = _useState2[1]; if (!value) { value = []; useWarning('Props "value" is required.', 'Checkbox Group'); } var updateState = function updateState(val, checked) { var removed = selfVal.filter(function (v) { return v !== val; }); var next = checked ? [].concat(_toConsumableArray(removed), [val]) : removed; setSelfVal(next); onChange && onChange(next); }; var providerValue = useMemo(function () { return { updateState: updateState, disabledAll: disabled, inGroup: true, values: selfVal }; }, [disabled, selfVal]); var fontSize = useMemo(function () { return getCheckboxSize(size); }, [size]); useEffect(function () { setSelfVal(value); }, [value.join(',')]); return /*#__PURE__*/React.createElement(CheckboxContext.Provider, { value: providerValue }, /*#__PURE__*/React.createElement("div", _extends({}, props, { className: _JSXStyle.dynamic([["2338097398", [fontSize, fontSize]]]) + " " + (props && props.className != null && props.className || "group ".concat(className)) }), children, /*#__PURE__*/React.createElement(_JSXStyle, { id: "2338097398", dynamic: [fontSize, fontSize] }, ".group.__jsx-style-dynamic-selector label{margin-right:calc(".concat(fontSize, " * 2);--checkbox-size:").concat(fontSize, ";}")))); }; export default withDefaults(CheckboxGroup, defaultProps);