UNPKG

@yamada-ui/checkbox

Version:

Yamada UI checkbox component

63 lines (61 loc) 1.73 kB
"use client" // src/use-checkbox-group.ts import { useControllableState } from "@yamada-ui/use-controllable-state"; import { isObject, useCallbackRef } from "@yamada-ui/utils"; import { useCallback } from "react"; var isEvent = (value) => value && isObject(value) && isObject(value.target); var useCheckboxGroup = ({ defaultValue = [], isNative, value: valueProp, onChange: onChangeProp, ...props }) => { const onChangeRef = useCallbackRef(onChangeProp); const [value, setValue] = useControllableState({ defaultValue, value: valueProp, onChange: onChangeRef }); const onChange = useCallback( (evOrValue) => { const isChecked = isEvent(evOrValue) ? evOrValue.target.checked : !value.includes(evOrValue); const selectedValue = isEvent(evOrValue) ? evOrValue.target.value : evOrValue; const nextValue = isChecked ? [...value, selectedValue] : value.filter((v) => String(v) !== String(selectedValue)); setValue(nextValue); }, [value, setValue] ); const getContainerProps = useCallback( (props2 = {}, ref = null) => ({ role: "group", ...props2, ref }), [] ); const getCheckboxProps = useCallback( (props2 = {}, ref = null) => ({ ...props2, ref, [isNative ? "checked" : "isChecked"]: value.some( (val) => String(props2.value) === String(val) ), ...!isNative ? { checked: value.some((val) => String(props2.value) === String(val)) } : {}, onChange }), [onChange, isNative, value] ); return { props, setValue, value, getCheckboxProps, getContainerProps, onChange }; }; export { useCheckboxGroup }; //# sourceMappingURL=chunk-5MTF62B3.mjs.map