-
Notifications
You must be signed in to change notification settings - Fork 398
Expand file tree
/
Copy pathMenuItem.tsx
More file actions
35 lines (30 loc) · 1.07 KB
/
MenuItem.tsx
File metadata and controls
35 lines (30 loc) · 1.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import cx from 'classnames';
import React, { forwardRef, HTMLAttributes, MouseEvent } from 'react';
import { useItem, UseItemProps } from '../../behaviors/item';
import {OptionType} from "../../types";
export interface BaseMenuItemProps extends HTMLAttributes<HTMLAnchorElement> {
active?: boolean;
disabled?: boolean;
href?: string;
}
export const BaseMenuItem = forwardRef<HTMLAnchorElement, BaseMenuItemProps>(
({ active, children, className, disabled, onClick, ...props }, ref) => {
return (
<a
{...props}
className={cx('dropdown-item', { active, disabled }, className)}
href={props.href || '#'}
onClick={(e: MouseEvent<HTMLAnchorElement>) => {
e.preventDefault();
!disabled && onClick && onClick(e);
}}
ref={ref}>
{children}
</a>
);
}
);
export type MenuItemProps<Option extends OptionType> = UseItemProps<HTMLAnchorElement, Option>;
export default function MenuItem<Option extends OptionType>(props: MenuItemProps<Option>) {
return <BaseMenuItem {...useItem(props)} />;
}