UNPKG

lole-ui

Version:

React UI Component which like a love letter

42 lines (41 loc) 2.18 kB
var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; import React, { memo, useCallback, useRef } from "react"; import classnames from 'classnames'; import CheckBox from "./check_box"; import { useIsValidChildren } from "../../hooks/useIsValidChildren"; export var checkBoxGroupContext = React.createContext([]); var CheckBoxGroup = memo(function (_a) { var _b = _a.defaultValue, defaultValue = _b === void 0 ? [] : _b, onChange = _a.onChange, children = _a.children, className = _a.className, style = _a.style; var checkedValueRef = useRef(defaultValue); var isValidChildren = useIsValidChildren(children, CheckBox).isValidChildren; var classes = classnames("xiOn-checkBox-group", className); var handleChange = useCallback(function (label, checked) { if (checked) { if (checkedValueRef.current.indexOf(label) === -1) { checkedValueRef.current.push(label); } } else { if (checkedValueRef.current.indexOf(label) !== -1) { checkedValueRef.current.splice(checkedValueRef.current.findIndex(function (_) { return _ === label; }), 1); } } onChange && onChange(checkedValueRef.current); }, [checkedValueRef.current]); return isValidChildren ? (React.createElement(checkBoxGroupContext.Provider, { value: defaultValue }, React.createElement("div", { className: classes, style: style }, React.Children.map(children, function (_) { var childProps = __assign(__assign({}, _.props), { name: "group", defaultChecked: defaultValue === null || defaultValue === void 0 ? void 0 : defaultValue.includes(_.props.label), onChange: handleChange }); return React.cloneElement(_, childProps); })))) : null; }); export default CheckBoxGroup;