Skip to content

Commit

Permalink
[core] Extract useRippleHandler outside of ButtonBase (#44591)
Browse files Browse the repository at this point in the history
Co-authored-by: wilhelmlofsten <[email protected]>
  • Loading branch information
albarv340 and wilhelmlofsten authored Dec 2, 2024
1 parent 0ff85eb commit ac1f902
Showing 1 changed file with 33 additions and 28 deletions.
61 changes: 33 additions & 28 deletions packages/mui-material/src/ButtonBase/ButtonBase.js
Original file line number Diff line number Diff line change
Expand Up @@ -137,38 +137,29 @@ const ButtonBase = React.forwardRef(function ButtonBase(inProps, ref) {
}
}, [disableRipple, focusRipple, focusVisible, ripple]);

function useRippleHandler(rippleAction, eventCallback, skipRippleAction = disableTouchRipple) {
return useEventCallback((event) => {
if (eventCallback) {
eventCallback(event);
const handleMouseDown = useRippleHandler(ripple, 'start', onMouseDown, disableTouchRipple);
const handleContextMenu = useRippleHandler(ripple, 'stop', onContextMenu, disableTouchRipple);
const handleDragLeave = useRippleHandler(ripple, 'stop', onDragLeave, disableTouchRipple);
const handleMouseUp = useRippleHandler(ripple, 'stop', onMouseUp, disableTouchRipple);
const handleMouseLeave = useRippleHandler(
ripple,
'stop',
(event) => {
if (focusVisible) {
event.preventDefault();
}

const ignore = skipRippleAction;
if (!ignore) {
ripple[rippleAction](event);
if (onMouseLeave) {
onMouseLeave(event);
}

return true;
});
}

const handleMouseDown = useRippleHandler('start', onMouseDown);
const handleContextMenu = useRippleHandler('stop', onContextMenu);
const handleDragLeave = useRippleHandler('stop', onDragLeave);
const handleMouseUp = useRippleHandler('stop', onMouseUp);
const handleMouseLeave = useRippleHandler('stop', (event) => {
if (focusVisible) {
event.preventDefault();
}
if (onMouseLeave) {
onMouseLeave(event);
}
});
const handleTouchStart = useRippleHandler('start', onTouchStart);
const handleTouchEnd = useRippleHandler('stop', onTouchEnd);
const handleTouchMove = useRippleHandler('stop', onTouchMove);
},
disableTouchRipple,
);
const handleTouchStart = useRippleHandler(ripple, 'start', onTouchStart, disableTouchRipple);
const handleTouchEnd = useRippleHandler(ripple, 'stop', onTouchEnd, disableTouchRipple);
const handleTouchMove = useRippleHandler(ripple, 'stop', onTouchMove, disableTouchRipple);

const handleBlur = useRippleHandler(
ripple,
'stop',
(event) => {
if (!isFocusVisible(event.target)) {
Expand Down Expand Up @@ -326,6 +317,20 @@ const ButtonBase = React.forwardRef(function ButtonBase(inProps, ref) {
);
});

function useRippleHandler(ripple, rippleAction, eventCallback, skipRippleAction = false) {
return useEventCallback((event) => {
if (eventCallback) {
eventCallback(event);
}

if (!skipRippleAction) {
ripple[rippleAction](event);
}

return true;
});
}

ButtonBase.propTypes /* remove-proptypes */ = {
// ┌────────────────────────────── Warning ──────────────────────────────┐
// │ These PropTypes are generated from the TypeScript type definitions. │
Expand Down

0 comments on commit ac1f902

Please sign in to comment.