@base-ui-components/react
Version:
Base UI is a library of headless ('unstyled') React components and low-level hooks. You gain complete control over your app's CSS and accessibility features.
37 lines • 1.16 kB
JavaScript
import * as React from 'react';
import { useMenuItem } from '../item/useMenuItem.js';
import { useControlled } from '../../utils/useControlled.js';
import { mergeReactProps } from '../../utils/mergeReactProps.js';
export function useMenuCheckboxItem(params) {
const {
checked: checkedProp,
defaultChecked,
onCheckedChange,
...other
} = params;
const [checked, setChecked] = useControlled({
controlled: checkedProp,
default: defaultChecked ?? false,
name: 'MenuCheckboxItem',
state: 'checked'
});
const {
getRootProps: getMenuItemRootProps,
...menuItem
} = useMenuItem(other);
const getRootProps = React.useCallback(externalProps => {
return getMenuItemRootProps(mergeReactProps(externalProps, {
role: 'menuitemcheckbox',
'aria-checked': checked,
onClick: event => {
setChecked(currentlyChecked => !currentlyChecked);
onCheckedChange?.(!checked, event.nativeEvent);
}
}));
}, [checked, getMenuItemRootProps, onCheckedChange, setChecked]);
return React.useMemo(() => ({
...menuItem,
getRootProps,
checked
}), [checked, getRootProps, menuItem]);
}