1
0

dropdownMenu.tsx 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import classnames from 'classnames';
  4. import { cssClasses } from '@douyinfe/semi-foundation/dropdown/constants';
  5. import Foundation from '@douyinfe/semi-foundation/dropdown/menuFoundation';
  6. import DropdownContext from './context';
  7. import BaseComponent, { BaseProps } from '../_base/baseComponent';
  8. const prefixCls = cssClasses.PREFIX;
  9. export type DropdownMenuProps = BaseProps;
  10. class DropdownMenu extends BaseComponent<DropdownMenuProps> {
  11. static propTypes = {
  12. children: PropTypes.node,
  13. className: PropTypes.string,
  14. style: PropTypes.object,
  15. };
  16. static contextType = DropdownContext;
  17. constructor(props: DropdownMenuProps) {
  18. super(props);
  19. this.foundation = new Foundation(this.adapter);
  20. }
  21. get adapter() {
  22. return {
  23. ...super.adapter,
  24. };
  25. }
  26. render() {
  27. const { children, className, style, ...rest } = this.props;
  28. return (
  29. <ul role="menu" aria-orientation="vertical" {...rest} className={classnames(`${prefixCls}-menu`, className)} style={style} onKeyDown={e => this.foundation.onMenuKeydown(e)}>
  30. {children}
  31. </ul>
  32. );
  33. }
  34. }
  35. export default DropdownMenu;