Skip to content

Commit

Permalink
[@mantine/core] HoverCard: Allow HoverCard.Target usage with Tooltip (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
rtivital committed Aug 12, 2022
1 parent ebd695b commit 9644db4
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 21 deletions.
27 changes: 27 additions & 0 deletions src/mantine-core/src/HoverCard/HoverCard.story.tsx
@@ -1,5 +1,6 @@
import React from 'react';
import { Button } from '../Button';
import { Tooltip } from '../Tooltip';
import { HoverCard } from './HoverCard';

export default { title: 'HoverCard' };
Expand All @@ -17,3 +18,29 @@ export function Usage() {
</div>
);
}

export function TargetWithTooltip() {
return (
<div style={{ padding: 40 }}>
<HoverCard>
<Tooltip label="Tooltip first">
<HoverCard.Target>
<Button>Tooltip first</Button>
</HoverCard.Target>
</Tooltip>

<HoverCard.Dropdown>Dropdown</HoverCard.Dropdown>
</HoverCard>

<HoverCard>
<HoverCard.Target>
<Tooltip label="Tooltip last">
<Button ml="xl">Tooltip last</Button>
</Tooltip>
</HoverCard.Target>

<HoverCard.Dropdown>Dropdown</HoverCard.Dropdown>
</HoverCard>
</div>
);
}
30 changes: 16 additions & 14 deletions src/mantine-core/src/HoverCard/HoverCardTarget/HoverCardTarget.tsx
@@ -1,25 +1,27 @@
import React, { cloneElement } from 'react';
import React, { cloneElement, forwardRef } from 'react';
import { isElement, createEventHandler } from '@mantine/utils';
import { Popover, PopoverTargetProps } from '../../Popover';
import { useHoverCardContext } from '../HoverCard.context';
import { HOVER_CARD_ERRORS } from '../HoverCard.errors';

export interface HoverCardTargetProps extends PopoverTargetProps {}

export function HoverCardTarget({ children, refProp }: HoverCardTargetProps) {
if (!isElement(children)) {
throw new Error(HOVER_CARD_ERRORS.children);
}
export const HoverCardTarget = forwardRef<HTMLElement, HoverCardTargetProps>(
({ children, refProp, ...others }, ref) => {
if (!isElement(children)) {
throw new Error(HOVER_CARD_ERRORS.children);
}

const ctx = useHoverCardContext();
const onMouseEnter = createEventHandler(children.props.onMouseEnter, ctx.openDropdown);
const onMouseLeave = createEventHandler(children.props.onMouseLeave, ctx.closeDropdown);
const ctx = useHoverCardContext();
const onMouseEnter = createEventHandler(children.props.onMouseEnter, ctx.openDropdown);
const onMouseLeave = createEventHandler(children.props.onMouseLeave, ctx.closeDropdown);

return (
<Popover.Target refProp={refProp}>
{cloneElement(children as React.ReactElement, { onMouseEnter, onMouseLeave })}
</Popover.Target>
);
}
return (
<Popover.Target refProp={refProp} ref={ref} {...others}>
{cloneElement(children as React.ReactElement, { onMouseEnter, onMouseLeave })}
</Popover.Target>
);
}
);

HoverCardTarget.displayName = '@mantine/core/HoverCardTarget';
4 changes: 2 additions & 2 deletions src/mantine-core/src/Popover/Popover.story.tsx
Expand Up @@ -85,15 +85,15 @@ export function WithinGroup() {
export function PopoverTargetWithTooltip() {
return (
<div style={{ padding: 40 }}>
{/* <Popover>
<Popover>
<Tooltip label="Tooltip first">
<Popover.Target>
<Button>Tooltip first</Button>
</Popover.Target>
</Tooltip>

<Popover.Dropdown>Dropdown</Popover.Dropdown>
</Popover> */}
</Popover>

<Popover>
<Popover.Target>
Expand Down
15 changes: 10 additions & 5 deletions src/mantine-core/src/Tooltip/Tooltip.tsx
@@ -1,5 +1,5 @@
import React, { cloneElement, forwardRef } from 'react';
import { isElement } from '@mantine/utils';
import { isElement, ForwardRefWithStaticComponents } from '@mantine/utils';
import { useMergedRef } from '@mantine/hooks';
import { getDefaultZIndex, useComponentDefaultProps } from '@mantine/styles';
import { TooltipGroup } from './TooltipGroup/TooltipGroup';
Expand Down Expand Up @@ -66,7 +66,7 @@ const defaultProps: Partial<TooltipProps> = {
positionDependencies: [],
};

export const Tooltip = forwardRef<HTMLElement, TooltipProps>((props, ref) => {
const _Tooltip = forwardRef<HTMLElement, TooltipProps>((props, ref) => {
const {
children,
position,
Expand Down Expand Up @@ -171,7 +171,12 @@ export const Tooltip = forwardRef<HTMLElement, TooltipProps>((props, ref) => {
);
}) as any;

Tooltip.Group = TooltipGroup;
Tooltip.Floating = TooltipFloating;
_Tooltip.Group = TooltipGroup;
_Tooltip.Floating = TooltipFloating;

Tooltip.displayName = '@mantine/core/Tooltip';
_Tooltip.displayName = '@mantine/core/Tooltip';

export const Tooltip: ForwardRefWithStaticComponents<
TooltipProps,
{ Group: typeof TooltipGroup; Floating: typeof TooltipFloating }
> = _Tooltip;

0 comments on commit 9644db4

Please sign in to comment.