diff --git a/packages/components/common/Portal.tsx b/packages/components/common/Portal.tsx index 71d8270b76..b57035484b 100644 --- a/packages/components/common/Portal.tsx +++ b/packages/components/common/Portal.tsx @@ -1,10 +1,12 @@ -import React, { forwardRef, useMemo, useImperativeHandle } from 'react'; +import React, { forwardRef, useImperativeHandle, useMemo } from 'react'; import { createPortal } from 'react-dom'; -import { AttachNode, AttachNodeReturnValue } from '../common'; + import { canUseDocument } from '../_util/dom'; import useConfig from '../hooks/useConfig'; import useIsomorphicLayoutEffect from '../hooks/useLayoutEffect'; +import type { AttachNode, AttachNodeReturnValue } from '../common'; + export interface PortalProps { /** * 指定挂载的 HTML 节点, false 为挂载在 body @@ -15,6 +17,7 @@ export interface PortalProps { */ triggerNode?: HTMLElement; children: React.ReactNode; + style?: React.CSSProperties; } export function getAttach(attach: PortalProps['attach'], triggerNode?: HTMLElement): AttachNodeReturnValue { @@ -38,14 +41,18 @@ export function getAttach(attach: PortalProps['attach'], triggerNode?: HTMLEleme } const Portal = forwardRef((props: PortalProps, ref) => { - const { attach, children, triggerNode } = props; + const { attach, children, triggerNode, style } = props; const { classPrefix } = useConfig(); const container = useMemo(() => { if (!canUseDocument) return null; const el = document.createElement('div'); el.className = `${classPrefix}-portal-wrapper`; + if (typeof style === 'object') { + Object.assign(el.style, style); + } return el; + // eslint-disable-next-line react-hooks/exhaustive-deps }, [classPrefix]); useIsomorphicLayoutEffect(() => { diff --git a/packages/components/date-picker/base/Header.tsx b/packages/components/date-picker/base/Header.tsx index 6046bce980..e0685030e8 100644 --- a/packages/components/date-picker/base/Header.tsx +++ b/packages/components/date-picker/base/Header.tsx @@ -1,9 +1,9 @@ -import React, { useState, useMemo, useEffect, useCallback, useRef } from 'react'; -import { useLocaleReceiver } from '../../locale/LocalReceiver'; +import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import useConfig from '../../hooks/useConfig'; +import { useLocaleReceiver } from '../../locale/LocalReceiver'; +import { PaginationMini, type TdPaginationMiniProps } from '../../pagination'; import Select from '../../select'; -import { TdDatePickerProps } from '../type'; -import { PaginationMini, TdPaginationMiniProps } from '../../pagination'; +import type { TdDatePickerProps } from '../type'; export interface DatePickerHeaderProps extends Pick { year?: number; @@ -210,7 +210,11 @@ const DatePickerHeader = (props: DatePickerHeaderProps) => { }} popupProps={{ onScroll: handleScroll, - updateScrollTop: handleUpdateScrollTop, + updateScrollTop: (el) => { + setTimeout(() => { + handleUpdateScrollTop(el); + }, 0); + }, attach: (triggerElement: HTMLElement) => triggerElement.parentNode as HTMLElement, overlayClassName: `${headerClassName}-controller-year-popup`, }} diff --git a/packages/components/guide/__tests__/__snapshots__/vitest-guide.test.jsx.snap b/packages/components/guide/__tests__/__snapshots__/vitest-guide.test.jsx.snap index eb9a97b7a4..e1a685bb66 100644 --- a/packages/components/guide/__tests__/__snapshots__/vitest-guide.test.jsx.snap +++ b/packages/components/guide/__tests__/__snapshots__/vitest-guide.test.jsx.snap @@ -113,6 +113,7 @@ exports[`Guide Component > GuideStep.body works fine 1`] = ` />
GuideStep.children works fine 1`] = ` />
GuideStep.content works fine 1`] = ` />
GuideStep.highlightContent works fine 1`] = ` />
GuideStep.placement is equal to bottom-left 1`] = ` />
GuideStep.stepOverlayClass is equal to t-test-guide-s />
GuideStep.title works fine 1`] = ` />
((originalProps, ref) => { placement: popperPlacement, ...popperOptions, }); + /** * 是否启用 popper.js 的 arrow 修饰符 * - 会自动根据属性 data-popper-arrow 来识别箭头元素 * - 从而支持使用 padding 调整箭头位置 - * @ see https://popper.js.org/docs/v2/modifiers/arrow/ + * @docs https://popper.js.org/docs/v2/modifiers/arrow/ */ const hasArrowModifier = popperOptions?.modifiers?.some((modifier) => modifier.name === 'arrow'); const { styles, attributes } = popperRef.current; @@ -191,7 +195,12 @@ const Popup = forwardRef((originalProps, ref) => { onEnter={handleEnter} onExited={handleExited} > - + + diff --git a/test/snap/__snapshots__/csr.test.jsx.snap b/test/snap/__snapshots__/csr.test.jsx.snap index 6e7c6b6946..b021f76f17 100644 --- a/test/snap/__snapshots__/csr.test.jsx.snap +++ b/test/snap/__snapshots__/csr.test.jsx.snap @@ -78172,7 +78172,7 @@ exports[`csr snapshot test > csr test packages/components/popup/_example/contain
ssr test packages/components/popconfirm/_example/th exports[`ssr snapshot test > ssr test packages/components/popup/_example/base.tsx 1`] = `""`; -exports[`ssr snapshot test > ssr test packages/components/popup/_example/container.tsx 1`] = `"
"`; +exports[`ssr snapshot test > ssr test packages/components/popup/_example/container.tsx 1`] = `"
"`; exports[`ssr snapshot test > ssr test packages/components/popup/_example/destroy.tsx 1`] = `""`; diff --git a/test/snap/__snapshots__/ssr.test.jsx.snap b/test/snap/__snapshots__/ssr.test.jsx.snap index fdecc07bb4..e34c9f5859 100644 --- a/test/snap/__snapshots__/ssr.test.jsx.snap +++ b/test/snap/__snapshots__/ssr.test.jsx.snap @@ -732,7 +732,7 @@ exports[`ssr snapshot test > ssr test packages/components/popconfirm/_example/th exports[`ssr snapshot test > ssr test packages/components/popup/_example/base.tsx 1`] = `""`; -exports[`ssr snapshot test > ssr test packages/components/popup/_example/container.tsx 1`] = `"
"`; +exports[`ssr snapshot test > ssr test packages/components/popup/_example/container.tsx 1`] = `"
"`; exports[`ssr snapshot test > ssr test packages/components/popup/_example/destroy.tsx 1`] = `""`;