fix: Slider formatter returns fixed content, Tooltip position abnormal after dragging (#53460)

* feat:slider tooltip固定文本增加value触发

* test: 添加单测

* 删除中文注释

---------

Co-authored-by: 刘欢 <lh01217311@antgroup.com>
This commit is contained in:
EmilyyyLiu
2025-04-24 10:46:45 +08:00
committed by GitHub
parent a42f2bf8ce
commit c433fa33d9
3 changed files with 61 additions and 2 deletions

View File

@@ -9,10 +9,11 @@ import Tooltip from '../tooltip';
export type SliderTooltipProps = TooltipProps & {
draggingDelete?: boolean;
value?: number;
};
const SliderTooltip = React.forwardRef<SliderRef, SliderTooltipProps>((props, ref) => {
const { open, draggingDelete } = props;
const { open, draggingDelete, value } = props;
const innerRef = useRef<any>(null);
const mergedOpen = open && !draggingDelete;
@@ -39,7 +40,7 @@ const SliderTooltip = React.forwardRef<SliderRef, SliderTooltipProps>((props, re
}
return cancelKeepAlign;
}, [mergedOpen, props.title]);
}, [mergedOpen, props.title, value]);
return <Tooltip ref={composeRef(innerRef, ref)} {...props} open={mergedOpen} />;
});

View File

@@ -0,0 +1,57 @@
import React from 'react';
import { render } from '../../../tests/utils';
import SliderTooltip from '../SliderTooltip';
let mockForceAlign: jest.Mock;
jest.mock('../../tooltip', () => {
const ReactReal: typeof React = jest.requireActual('react');
return {
__esModule: true,
default: ReactReal.forwardRef((props: any, ref: any) => {
ReactReal.useImperativeHandle(ref, () => ({
forceAlign: mockForceAlign,
}));
return <div {...props} />;
}),
};
});
describe('SliderTooltip', () => {
beforeEach(() => {
mockForceAlign = jest.fn();
jest.useFakeTimers();
});
afterEach(() => {
jest.useRealTimers();
jest.clearAllMocks();
});
it('calls forceAlign when mergedOpen is true and value changes', () => {
const { rerender } = render(<SliderTooltip open draggingDelete={false} value={1} />);
jest.runAllTimers();
expect(mockForceAlign).toHaveBeenCalledTimes(1);
rerender(<SliderTooltip open draggingDelete={false} value={2} />);
jest.runAllTimers();
expect(mockForceAlign).toHaveBeenCalledTimes(2);
});
it('does not call forceAlign when mergedOpen is false and value changes', () => {
const { rerender } = render(<SliderTooltip open={false} value={1} />);
jest.runAllTimers();
expect(mockForceAlign).not.toHaveBeenCalled();
rerender(<SliderTooltip open={false} value={2} />);
jest.runAllTimers();
expect(mockForceAlign).not.toHaveBeenCalled();
rerender(<SliderTooltip open draggingDelete value={3} />);
jest.runAllTimers();
expect(mockForceAlign).not.toHaveBeenCalled();
});
});

View File

@@ -338,6 +338,7 @@ const Slider = React.forwardRef<SliderRef, SliderSingleProps | SliderRangeProps>
{...tooltipProps}
prefixCls={getPrefixCls('tooltip', customizeTooltipPrefixCls ?? legacyTooltipPrefixCls)}
title={mergedTipFormatter ? mergedTipFormatter(info.value) : ''}
value={info.value}
open={open}
placement={getTooltipPlacement(tooltipPlacement ?? legacyTooltipPlacement, vertical)}
key={index}