1- import { forwardRef } from 'react' ;
1+ import clsx from 'clsx' ;
2+ import { forwardRef , useMemo , useState } from 'react' ;
3+ import { RdTooltipProps , Tooltip } from '../Tooltip' ;
24import { ButtonGroup } from './ButtonGroup' ;
35import { ButtonStyles } from './styles' ;
4- import { RdButtonComponent , RdButtonCompoundedComponent } from './types' ;
5- import clsx from 'clsx' ;
6+ import { RdButtonComponent , RdButtonCompoundedComponent , RdButtonProps } from './types' ;
67
78export const ButtonInternal : RdButtonComponent = forwardRef ( ( props , ref ) => {
8- const { rootClassName } = props ;
9+ const {
10+ rootClassName,
11+ tooltip,
12+ hideTooltipWhenClick = true ,
13+ onClick,
14+ onMouseLeave,
15+ ...defaultProps
16+ } = props ;
17+ const [ isOpenTooltip , setIsOpenTooltip ] = useState ( false ) ;
18+
19+ const handleClickButton : RdButtonProps [ 'onClick' ] = event => {
20+ if ( hideTooltipWhenClick ) {
21+ setIsOpenTooltip ( false ) ;
22+ }
23+
24+ if ( onClick ) {
25+ onClick ( event ) ;
26+ }
27+ } ;
28+
29+ const handleMouseLeave : RdButtonProps [ 'onMouseLeave' ] = event => {
30+ if ( onMouseLeave ) {
31+ onMouseLeave ( event ) ;
32+ }
33+ } ;
34+
35+ const RdButtonStyles = useMemo ( ( ) => {
36+ return (
37+ < ButtonStyles
38+ rootClassName = { clsx ( 'rd-button' , rootClassName ) }
39+ ref = { ref }
40+ onMouseLeave = { handleMouseLeave }
41+ onClick = { handleClickButton }
42+ { ...defaultProps }
43+ />
44+ ) ;
45+ } , [ defaultProps , rootClassName , handleClickButton , handleMouseLeave ] ) ;
46+
47+ if ( tooltip ) {
48+ const tooltipProps : RdTooltipProps = hideTooltipWhenClick
49+ ? {
50+ open : isOpenTooltip ,
51+ onOpenChange : visible => setIsOpenTooltip ( visible ) ,
52+ }
53+ : { } ;
54+
55+ if ( typeof tooltip === 'string' ) {
56+ return (
57+ < Tooltip { ...tooltipProps } title = { tooltip } >
58+ { RdButtonStyles }
59+ </ Tooltip >
60+ ) ;
61+ }
62+
63+ return (
64+ < Tooltip { ...tooltipProps } { ...tooltip } >
65+ { RdButtonStyles }
66+ </ Tooltip >
67+ ) ;
68+ }
969
10- return < ButtonStyles rootClassName = { clsx ( 'rd-button' , rootClassName ) } ref = { ref } { ... props } /> ;
70+ return RdButtonStyles ;
1171} ) ;
1272
1373export const Button = ButtonInternal as RdButtonCompoundedComponent ;
14- Button . Group = ButtonGroup ;
74+ Button . Group = ButtonGroup ;
0 commit comments