@geezee/react-ui
Version:
Modern and minimalist React UI library.
77 lines (71 loc) • 2.7 kB
JavaScript
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);