diff --git a/packages/plasma-new-hope/src/components/_beta/Popover/Popover.tsx b/packages/plasma-new-hope/src/components/_beta/Popover/Popover.tsx index 1b8a0dee29f..95c9a6b653c 100644 --- a/packages/plasma-new-hope/src/components/_beta/Popover/Popover.tsx +++ b/packages/plasma-new-hope/src/components/_beta/Popover/Popover.tsx @@ -26,7 +26,7 @@ import { IconClose } from '../../_Icon'; import { Resizable } from '../../_Resizable'; import { Slot } from '../../_Slot/Slot'; -import { sizeToIconSize, matchPlacements } from './utils'; +import { sizeToIconSize, matchPlacements, getFloatingPortalProps } from './utils'; import { tokens, classes } from './Popover.tokens'; import { base, CloseButton, Wrapper } from './Popover.styles'; import type { PopoverProps } from './Popover.types'; @@ -132,7 +132,7 @@ export const popoverRoot = (Root: RootProps {opened && ( - + . + * @default Без использования portal всплывающее окно рендерится перед . */ - portal?: React.RefObject; + portal?: string | React.RefObject; /** * Вид компонента. diff --git a/packages/plasma-new-hope/src/components/_beta/Popover/utils/getFloatingPortalProps.ts b/packages/plasma-new-hope/src/components/_beta/Popover/utils/getFloatingPortalProps.ts new file mode 100644 index 00000000000..77c8fb2e9d6 --- /dev/null +++ b/packages/plasma-new-hope/src/components/_beta/Popover/utils/getFloatingPortalProps.ts @@ -0,0 +1,20 @@ +import { RefObject } from 'react'; + +type FloatingPortalReturnedProps = { + root?: RefObject; + id?: string; +}; + +export const getFloatingPortalProps = ( + portal?: string | RefObject, +): FloatingPortalReturnedProps => { + if (!portal) { + return {}; + } + + if (typeof portal === 'string') { + return { id: portal }; + } + + return { root: portal }; +}; diff --git a/packages/plasma-new-hope/src/components/_beta/Popover/utils/index.ts b/packages/plasma-new-hope/src/components/_beta/Popover/utils/index.ts index 7e152b490fb..e96c691c1d4 100644 --- a/packages/plasma-new-hope/src/components/_beta/Popover/utils/index.ts +++ b/packages/plasma-new-hope/src/components/_beta/Popover/utils/index.ts @@ -1,2 +1,3 @@ export * from './sizeToIconSize'; export * from './matchPlacements'; +export * from './getFloatingPortalProps'; diff --git a/packages/plasma-new-hope/src/components/_beta/Tooltip/Tooltip.tsx b/packages/plasma-new-hope/src/components/_beta/Tooltip/Tooltip.tsx index e11451fc22b..9c3616b192f 100644 --- a/packages/plasma-new-hope/src/components/_beta/Tooltip/Tooltip.tsx +++ b/packages/plasma-new-hope/src/components/_beta/Tooltip/Tooltip.tsx @@ -20,6 +20,7 @@ import { css } from '@linaria/core'; import { Slot } from '../../_Slot/Slot'; import { ARROW_HEIGHT, ARROW_PADDING, ARROW_POLYGON, ARROW_WIDTH } from '../Popover/Popover'; +import { getFloatingPortalProps } from '../Popover/utils'; import { tokens, classes } from './Tooltip.tokens'; import { base, Wrapper, IconWrapper } from './Tooltip.styles'; @@ -97,7 +98,7 @@ export const tooltipRoot = (Root: RootProps {opened && ( - + . + * @default Без использования portal всплывающее окно рендерится перед . */ - portal?: React.RefObject; + portal?: string | React.RefObject; /** * Вид компонента.