lole-ui
Version:
React UI Component which like a love letter
42 lines (41 loc) • 2.18 kB
JavaScript
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;