Skip to content

Commit 05fb796

Browse files
committed
Apply useSlot to Tooltip
1 parent 6b6935b commit 05fb796

File tree

1 file changed

+19
-43
lines changed

1 file changed

+19
-43
lines changed

packages/mui-joy/src/Tooltip/Tooltip.tsx

Lines changed: 19 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,12 @@ import {
1010
unstable_useId as useId,
1111
} from '@mui/utils';
1212
import { PopperUnstyled, unstable_composeClasses as composeClasses } from '@mui/base';
13-
import { useSlotProps } from '@mui/base/utils';
14-
import { WithCommonProps } from '@mui/base/utils/mergeSlotProps';
15-
import { MUIStyledCommonProps } from '@mui/system';
1613
import { OverridableComponent } from '@mui/types';
1714
import styled from '../styles/styled';
1815
import useThemeProps from '../styles/useThemeProps';
16+
import useSlot from '../utils/useSlot';
1917
import { getTooltipUtilityClass } from './tooltipClasses';
20-
import {
21-
TooltipComponentsPropsOverrides,
22-
TooltipProps,
23-
TooltipOwnerState,
24-
TooltipTypeMap,
25-
} from './TooltipProps';
18+
import { TooltipProps, TooltipOwnerState, TooltipTypeMap } from './TooltipProps';
2619

2720
const useUtilityClasses = (ownerState: TooltipOwnerState) => {
2821
const { arrow, variant, color, size, placement, touch } = ownerState;
@@ -214,8 +207,6 @@ const Tooltip = React.forwardRef(function Tooltip(inProps, ref) {
214207
children,
215208
className,
216209
arrow = false,
217-
components = {},
218-
componentsProps = {},
219210
describeChild = false,
220211
disableFocusListener = false,
221212
disableHoverListener = false,
@@ -577,30 +568,26 @@ const Tooltip = React.forwardRef(function Tooltip(inProps, ref) {
577568

578569
const classes = useUtilityClasses(ownerState);
579570

580-
const RootComponent = components.Root ?? TooltipRoot;
581-
const ArrowComponent = components.Arrow ?? TooltipArrow;
582-
583-
const rootProps = useSlotProps({
584-
elementType: RootComponent,
585-
externalSlotProps: componentsProps.root,
571+
const [SlotRoot, rootProps] = useSlot('root', {
572+
ref,
573+
className: classes.root,
574+
elementType: TooltipRoot,
575+
externalForwardedProps: other,
586576
ownerState,
587-
className: clsx(classes.root, componentsProps.root?.className),
588577
});
589578

590-
const tooltipArrowProps = useSlotProps({
591-
elementType: ArrowComponent,
592-
externalSlotProps: componentsProps.arrow as WithCommonProps<
593-
React.HTMLProps<HTMLSpanElement> & MUIStyledCommonProps & TooltipComponentsPropsOverrides
594-
>,
579+
const [SlotArrow, arrowProps] = useSlot('arrow', {
580+
className: classes.arrow,
581+
elementType: TooltipArrow,
582+
externalForwardedProps: other,
595583
ownerState,
596-
className: clsx(classes.arrow, componentsProps.arrow?.className),
597584
});
598585

599586
return (
600587
<React.Fragment>
601588
{React.isValidElement(children) && React.cloneElement(children, childrenProps)}
602589
<PopperUnstyled
603-
component={RootComponent}
590+
component={SlotRoot}
604591
placement={placement}
605592
anchorEl={
606593
followCursor
@@ -623,17 +610,9 @@ const Tooltip = React.forwardRef(function Tooltip(inProps, ref) {
623610
{...interactiveWrapperListeners}
624611
{...rootProps}
625612
popperOptions={popperOptions}
626-
ownerState={ownerState}
627613
>
628614
{title}
629-
{arrow ? (
630-
<TooltipArrow
631-
{...tooltipArrowProps}
632-
className={clsx(classes.arrow, componentsProps.arrow?.className)}
633-
ref={setArrowRef}
634-
ownerState={ownerState}
635-
/>
636-
) : null}
615+
{arrow ? <SlotArrow ref={setArrowRef} {...arrowProps} /> : null}
637616
</PopperUnstyled>
638617
</React.Fragment>
639618
);
@@ -666,22 +645,19 @@ Tooltip.propTypes /* remove-proptypes */ = {
666645
PropTypes.string,
667646
]),
668647
/**
669-
* The components used for each slot inside the Tooltip.
670-
* Either a string to use a HTML element or a component.
671-
* @default {}
648+
* Replace the default slots.
672649
*/
673650
components: PropTypes.shape({
674-
Arrow: PropTypes.elementType,
675-
Root: PropTypes.elementType,
651+
arrow: PropTypes.elementType,
652+
root: PropTypes.elementType,
676653
}),
677654
/**
678-
* The props used for each slot inside the Tooltip.
679-
* Note that `componentsProps.root` prop values win over `RootProps` if both are applied.
655+
* The props used for each slot inside.
680656
* @default {}
681657
*/
682658
componentsProps: PropTypes.shape({
683-
arrow: PropTypes.object,
684-
root: PropTypes.object,
659+
arrow: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
660+
root: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
685661
}),
686662
/**
687663
* Set to `true` if the `title` acts as an accessible description.

0 commit comments

Comments
 (0)