Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F99537867
useButton.js
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Sat, Jan 25, 06:56
Size
6 KB
Mime Type
text/x-java
Expires
Mon, Jan 27, 06:56 (1 d, 23 h)
Engine
blob
Format
Raw Data
Handle
23819273
Attached To
rOACCT Open Access Compliance Check Tool (OACCT)
useButton.js
View Options
import
_extends
from
"@babel/runtime/helpers/esm/extends"
;
import
*
as
React
from
'react'
;
import
{
unstable_useForkRef
as
useForkRef
,
unstable_useIsFocusVisible
as
useIsFocusVisible
}
from
'@mui/utils'
;
import
extractEventHandlers
from
'../utils/extractEventHandlers'
;
export
default
function
useButton
(
parameters
)
{
const
{
disabled
=
false
,
focusableWhenDisabled
,
href
,
ref
:
externalRef
,
tabIndex
,
to
,
type
}
=
parameters
;
const
buttonRef
=
React
.
useRef
();
const
[
active
,
setActive
]
=
React
.
useState
(
false
);
const
{
isFocusVisibleRef
,
onFocus
:
handleFocusVisible
,
onBlur
:
handleBlurVisible
,
ref
:
focusVisibleRef
}
=
useIsFocusVisible
();
const
[
focusVisible
,
setFocusVisible
]
=
React
.
useState
(
false
);
if
(
disabled
&&
!
focusableWhenDisabled
&&
focusVisible
)
{
setFocusVisible
(
false
);
}
React
.
useEffect
(()
=>
{
isFocusVisibleRef
.
current
=
focusVisible
;
},
[
focusVisible
,
isFocusVisibleRef
]);
const
[
hostElementName
,
setHostElementName
]
=
React
.
useState
(
''
);
const
createHandleMouseLeave
=
otherHandlers
=>
event
=>
{
var
_otherHandlers$onMous
;
if
(
focusVisible
)
{
event
.
preventDefault
();
}
(
_otherHandlers$onMous
=
otherHandlers
.
onMouseLeave
)
==
null
?
void
0
:
_otherHandlers$onMous
.
call
(
otherHandlers
,
event
);
};
const
createHandleBlur
=
otherHandlers
=>
event
=>
{
var
_otherHandlers$onBlur
;
handleBlurVisible
(
event
);
if
(
isFocusVisibleRef
.
current
===
false
)
{
setFocusVisible
(
false
);
}
(
_otherHandlers$onBlur
=
otherHandlers
.
onBlur
)
==
null
?
void
0
:
_otherHandlers$onBlur
.
call
(
otherHandlers
,
event
);
};
const
createHandleFocus
=
otherHandlers
=>
event
=>
{
var
_otherHandlers$onFocu2
;
// Fix for https://github.com/facebook/react/issues/7769
if
(
!
buttonRef
.
current
)
{
buttonRef
.
current
=
event
.
currentTarget
;
}
handleFocusVisible
(
event
);
if
(
isFocusVisibleRef
.
current
===
true
)
{
var
_otherHandlers$onFocu
;
setFocusVisible
(
true
);
(
_otherHandlers$onFocu
=
otherHandlers
.
onFocusVisible
)
==
null
?
void
0
:
_otherHandlers$onFocu
.
call
(
otherHandlers
,
event
);
}
(
_otherHandlers$onFocu2
=
otherHandlers
.
onFocus
)
==
null
?
void
0
:
_otherHandlers$onFocu2
.
call
(
otherHandlers
,
event
);
};
const
isNativeButton
=
()
=>
{
const
button
=
buttonRef
.
current
;
return
hostElementName
===
'BUTTON'
||
hostElementName
===
'INPUT'
&&
[
'button'
,
'submit'
,
'reset'
].
includes
(
button
==
null
?
void
0
:
button
.
type
)
||
hostElementName
===
'A'
&&
(
button
==
null
?
void
0
:
button
.
href
);
};
const
createHandleClick
=
otherHandlers
=>
event
=>
{
if
(
!
disabled
)
{
var
_otherHandlers$onClic
;
(
_otherHandlers$onClic
=
otherHandlers
.
onClick
)
==
null
?
void
0
:
_otherHandlers$onClic
.
call
(
otherHandlers
,
event
);
}
};
const
createHandleMouseDown
=
otherHandlers
=>
event
=>
{
var
_otherHandlers$onMous2
;
if
(
!
disabled
)
{
setActive
(
true
);
document
.
addEventListener
(
'mouseup'
,
()
=>
{
setActive
(
false
);
},
{
once
:
true
});
}
(
_otherHandlers$onMous2
=
otherHandlers
.
onMouseDown
)
==
null
?
void
0
:
_otherHandlers$onMous2
.
call
(
otherHandlers
,
event
);
};
const
createHandleKeyDown
=
otherHandlers
=>
event
=>
{
var
_otherHandlers$onKeyD
;
(
_otherHandlers$onKeyD
=
otherHandlers
.
onKeyDown
)
==
null
?
void
0
:
_otherHandlers$onKeyD
.
call
(
otherHandlers
,
event
);
if
(
event
.
defaultPrevented
)
{
return
;
}
if
(
event
.
target
===
event
.
currentTarget
&&
!
isNativeButton
()
&&
event
.
key
===
' '
)
{
event
.
preventDefault
();
}
if
(
event
.
target
===
event
.
currentTarget
&&
event
.
key
===
' '
&&
!
disabled
)
{
setActive
(
true
);
}
// Keyboard accessibility for non interactive elements
if
(
event
.
target
===
event
.
currentTarget
&&
!
isNativeButton
()
&&
event
.
key
===
'Enter'
&&
!
disabled
)
{
var
_otherHandlers$onClic2
;
(
_otherHandlers$onClic2
=
otherHandlers
.
onClick
)
==
null
?
void
0
:
_otherHandlers$onClic2
.
call
(
otherHandlers
,
event
);
event
.
preventDefault
();
}
};
const
createHandleKeyUp
=
otherHandlers
=>
event
=>
{
var
_otherHandlers$onKeyU
;
// calling preventDefault in keyUp on a <button> will not dispatch a click event if Space is pressed
// https://codesandbox.io/s/button-keyup-preventdefault-dn7f0
if
(
event
.
target
===
event
.
currentTarget
)
{
setActive
(
false
);
}
(
_otherHandlers$onKeyU
=
otherHandlers
.
onKeyUp
)
==
null
?
void
0
:
_otherHandlers$onKeyU
.
call
(
otherHandlers
,
event
);
// Keyboard accessibility for non interactive elements
if
(
event
.
target
===
event
.
currentTarget
&&
!
isNativeButton
()
&&
!
disabled
&&
event
.
key
===
' '
&&
!
event
.
defaultPrevented
)
{
var
_otherHandlers$onClic3
;
(
_otherHandlers$onClic3
=
otherHandlers
.
onClick
)
==
null
?
void
0
:
_otherHandlers$onClic3
.
call
(
otherHandlers
,
event
);
}
};
const
updateHostElementName
=
React
.
useCallback
(
instance
=>
{
var
_instance$tagName
;
setHostElementName
((
_instance$tagName
=
instance
==
null
?
void
0
:
instance
.
tagName
)
!=
null
?
_instance$tagName
:
''
);
},
[]);
const
handleRef
=
useForkRef
(
updateHostElementName
,
externalRef
,
focusVisibleRef
,
buttonRef
);
const
buttonProps
=
{};
if
(
hostElementName
===
'BUTTON'
)
{
buttonProps
.
type
=
type
!=
null
?
type
:
'button'
;
if
(
focusableWhenDisabled
)
{
buttonProps
[
'aria-disabled'
]
=
disabled
;
}
else
{
buttonProps
.
disabled
=
disabled
;
}
}
else
if
(
hostElementName
!==
''
)
{
if
(
!
href
&&
!
to
)
{
buttonProps
.
role
=
'button'
;
buttonProps
.
tabIndex
=
tabIndex
!=
null
?
tabIndex
:
0
;
}
if
(
disabled
)
{
buttonProps
[
'aria-disabled'
]
=
disabled
;
buttonProps
.
tabIndex
=
focusableWhenDisabled
?
tabIndex
!=
null
?
tabIndex
:
0
:
-
1
;
}
}
const
getRootProps
=
(
otherHandlers
=
{})
=>
{
const
propsEventHandlers
=
extractEventHandlers
(
parameters
);
const
externalEventHandlers
=
_extends
({},
propsEventHandlers
,
otherHandlers
);
// onFocusVisible can be present on the props, but since it's not a valid React event handler,
// it must not be forwarded to the inner component.
delete
externalEventHandlers
.
onFocusVisible
;
return
_extends
({
type
},
externalEventHandlers
,
buttonProps
,
{
onBlur
:
createHandleBlur
(
externalEventHandlers
),
onClick
:
createHandleClick
(
externalEventHandlers
),
onFocus
:
createHandleFocus
(
externalEventHandlers
),
onKeyDown
:
createHandleKeyDown
(
externalEventHandlers
),
onKeyUp
:
createHandleKeyUp
(
externalEventHandlers
),
onMouseDown
:
createHandleMouseDown
(
externalEventHandlers
),
onMouseLeave
:
createHandleMouseLeave
(
externalEventHandlers
),
ref
:
handleRef
});
};
return
{
getRootProps
,
focusVisible
,
setFocusVisible
,
disabled
,
active
};
}
Event Timeline
Log In to Comment