UNPKG

@itwin/itwinui-react

Version:

A react component library for iTwinUI

72 lines (71 loc) 1.91 kB
import cx from 'classnames'; import * as React from 'react'; import { DropdownMenu } from '../DropdownMenu/DropdownMenu.js'; import { SvgCaretDownSmall, SvgCaretUpSmall, Box, ButtonBase, } from '../../utils/index.js'; import { HeaderBasicButton } from './HeaderBasicButton.js'; export const HeaderSplitButton = React.forwardRef((props, forwardedRef) => { let { menuItems, className, menuPlacement = 'bottom-end', children, disabled, ...rest } = props; let [isMenuOpen, setIsMenuOpen] = React.useState(false); let [menuWidth, setMenuWidth] = React.useState(0); let ref = React.useRef(null); React.useEffect(() => { if (ref.current) setMenuWidth(ref.current.offsetWidth); }, [children]); return React.createElement( Box, { className: cx('iui-header-breadcrumb-button-wrapper', className), ref: ref, }, React.createElement( HeaderBasicButton, { ref: forwardedRef, disabled: disabled, ...rest, }, children, ), React.createElement( DropdownMenu, { placement: menuPlacement, menuItems: menuItems, style: { minInlineSize: menuWidth, }, onVisibleChange: (open) => setIsMenuOpen(open), }, React.createElement( ButtonBase, { 'aria-label': 'More', className: 'iui-header-breadcrumb-button iui-header-breadcrumb-button-split', disabled: disabled, }, isMenuOpen ? React.createElement(SvgCaretUpSmall, { className: 'iui-header-breadcrumb-button-dropdown-icon', 'aria-hidden': true, }) : React.createElement(SvgCaretDownSmall, { className: 'iui-header-breadcrumb-button-dropdown-icon', 'aria-hidden': true, }), ), ), ); });