66 * Side Public License, v 1.
77 */
88
9- import React from 'react' ;
9+ import React , { useEffect , useRef } from 'react' ;
1010import type { Meta , StoryObj } from '@storybook/react' ;
1111
1212import {
@@ -16,6 +16,7 @@ import {
1616
1717import { EuiButtonEmpty } from './button_empty' ;
1818import { EuiButton , Props as EuiButtonProps } from './button' ;
19+ import { EuiFlexGroup } from '../flex' ;
1920
2021const meta : Meta < EuiButtonProps > = {
2122 title : 'Navigation/EuiButton' ,
@@ -53,6 +54,110 @@ export const Playground: Story = {
5354} ;
5455disableStorybookControls ( Playground , [ 'buttonRef' ] ) ;
5556
57+ export const TESTING_EXAMPLE : Story = {
58+ parameters : {
59+ loki : {
60+ skip : true ,
61+ } ,
62+ controls : {
63+ include : [ 'hasAriaDisabled' ] ,
64+ } ,
65+ } ,
66+ render : function Render ( { hasAriaDisabled } : any ) {
67+ const buttonRef = useRef < HTMLButtonElement | null > ( null ) ;
68+ const [ isLoading , setIsLoading ] = React . useState ( false ) ;
69+ const [ isDisabled , setIsDisabled ] = React . useState ( false ) ;
70+
71+ useEffect ( ( ) => {
72+ if ( isLoading ) {
73+ const timer = setTimeout ( ( ) => {
74+ setIsLoading ( false ) ;
75+ } , 5000 ) ;
76+
77+ return ( ) => clearTimeout ( timer ) ;
78+ }
79+ } , [ isLoading ] ) ;
80+
81+ useEffect ( ( ) => {
82+ if ( isDisabled ) {
83+ const timer = setTimeout ( ( ) => {
84+ setIsDisabled ( false ) ;
85+ } , 5000 ) ;
86+
87+ return ( ) => clearTimeout ( timer ) ;
88+ }
89+ } , [ isDisabled ] ) ;
90+
91+ useEffect ( ( ) => {
92+ const button = buttonRef . current ;
93+
94+ if ( ! button ) return ;
95+
96+ const onClickHandler = ( ) => {
97+ console . log ( 'DOM event: click' ) ;
98+ } ;
99+
100+ const onMouseDownHandler = ( ) => {
101+ console . log ( 'DOM event: mousedown' ) ;
102+ } ;
103+
104+ const onTouchStartHandler = ( ) => {
105+ console . log ( 'DOM event: touchstart' ) ;
106+ } ;
107+
108+ const onKeyDownHandler = ( ) => {
109+ console . log ( 'DOM event: keydown' ) ;
110+ } ;
111+
112+ const onFocusHandler = ( e : FocusEvent ) => {
113+ console . log ( 'DOM event: focus' , e . target , e . relatedTarget ) ;
114+ } ;
115+
116+ const onBlurHandler = ( e : FocusEvent ) => {
117+ console . log ( 'DOM event: blur' , e . target , e . relatedTarget ) ;
118+ } ;
119+
120+ button . addEventListener ( 'click' , onClickHandler , { capture : true } ) ;
121+ button . addEventListener ( 'mousedown' , onMouseDownHandler ) ;
122+ button . addEventListener ( 'touchstart' , onTouchStartHandler ) ;
123+ button . addEventListener ( 'keydown' , onKeyDownHandler ) ;
124+ button . addEventListener ( 'focus' , onFocusHandler , { capture : true } ) ;
125+ button . addEventListener ( 'blur' , onBlurHandler ) ;
126+
127+ return ( ) => {
128+ button . removeEventListener ( 'click' , onClickHandler ) ;
129+ button . removeEventListener ( 'mousedown' , onMouseDownHandler ) ;
130+ button . removeEventListener ( 'touchstart' , onTouchStartHandler ) ;
131+ button . removeEventListener ( 'keydown' , onKeyDownHandler ) ;
132+ button . removeEventListener ( 'focus' , onFocusHandler ) ;
133+ button . removeEventListener ( 'blur' , onBlurHandler ) ;
134+ } ;
135+ } , [ ] ) ;
136+
137+ return (
138+ < EuiFlexGroup >
139+ < EuiButton onClick = { ( ) => setIsLoading ( true ) } > Set loading</ EuiButton >
140+ < EuiButton onClick = { ( ) => setIsDisabled ( true ) } > Set disabled</ EuiButton >
141+ < EuiButton
142+ buttonRef = { buttonRef }
143+ isLoading = { isLoading }
144+ isDisabled = { isDisabled }
145+ hasAriaDisabled = { hasAriaDisabled }
146+ onClick = { ( ) => console . log ( 'EuiButton onClick' ) }
147+ onKeyDown = { ( ) => console . log ( 'EuiButton onKeyDown' ) }
148+ onMouseDown = { ( ) => console . log ( 'EuiButton onMouseDown' ) }
149+ onPointerDown = { ( ) => console . log ( 'EuiButton onPointerDown' ) }
150+ onTouchStart = { ( ) => console . log ( 'EuiButton onTouchStart' ) }
151+ onFocus = { ( ) => console . log ( 'EuiButton onFocus' ) }
152+ onBlur = { ( ) => console . log ( 'EuiButton onBlur' ) }
153+ >
154+ Button
155+ </ EuiButton >
156+ </ EuiFlexGroup >
157+ ) ;
158+ } ,
159+ } ;
160+
56161export const HighContrast : Story = {
57162 tags : [ 'vrt-only' ] ,
58163 globals : { highContrastMode : true } ,
0 commit comments