mirror of
https://github.com/ant-design/ant-design.git
synced 2026-02-09 02:49:18 +08:00
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:
@@ -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} />;
|
||||
});
|
||||
|
||||
57
components/slider/__tests__/SliderTooltip.test.tsx
Normal file
57
components/slider/__tests__/SliderTooltip.test.tsx
Normal 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();
|
||||
});
|
||||
});
|
||||
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user