Skip to content

Commit f48435e

Browse files
committed
test: add test case
1 parent 06017ae commit f48435e

File tree

4 files changed

+41
-1
lines changed

4 files changed

+41
-1
lines changed

docs/examples/click-nested.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ const Test = () => {
8282
// Level 2
8383
<NestPopup open={open2} setOpen={setOpen2} />
8484
}
85+
fresh
8586
>
8687
<span>Click Me</span>
8788
</Trigger>

src/Popup/index.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ export interface PopupProps {
3434
open: boolean;
3535
/** Tell Portal that should keep in screen. e.g. should wait all motion end */
3636
keepDom: boolean;
37+
fresh?: boolean;
3738

3839
// Click
3940
onClick?: React.MouseEventHandler<HTMLDivElement>;
@@ -76,6 +77,7 @@ const Popup = React.forwardRef<HTMLDivElement, PopupProps>((props, ref) => {
7677
// Open
7778
open,
7879
keepDom,
80+
fresh,
7981

8082
// Click
8183
onClick,
@@ -262,7 +264,9 @@ const Popup = React.forwardRef<HTMLDivElement, PopupProps>((props, ref) => {
262264
align={align}
263265
/>
264266
)}
265-
<PopupContent cache={!open}>{childNode}</PopupContent>
267+
<PopupContent cache={!open && !fresh}>
268+
{childNode}
269+
</PopupContent>
266270
</div>
267271
);
268272
}}

src/index.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,13 @@ export interface TriggerProps {
112112

113113
alignPoint?: boolean; // Maybe we can support user pass position in the future
114114

115+
/**
116+
* Trigger will memo content when close.
117+
* This may affect the case if want to keep content update.
118+
* Set `fresh` to `false` will always keep update.
119+
*/
120+
fresh?: boolean;
121+
115122
// ==================== Arrow ====================
116123
arrow?: boolean | ArrowTypeOuter;
117124

@@ -179,6 +186,7 @@ export function generateTrigger(
179186
zIndex,
180187
stretch,
181188
getPopupClassNameFromAlign,
189+
fresh,
182190

183191
alignPoint,
184192

@@ -687,6 +695,7 @@ export function generateTrigger(
687695
// Open
688696
open={mergedOpen}
689697
keepDom={inMotion}
698+
fresh={fresh}
690699
// Click
691700
onClick={onPopupClick}
692701
// Mask

tests/basic.test.jsx

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1165,4 +1165,30 @@ describe('Trigger.Basic', () => {
11651165
trigger(container, '.popup', 'mouseEnter');
11661166
expect(onPopupVisibleChange).not.toHaveBeenCalled();
11671167
});
1168+
1169+
// https://gith(ub.com/ant-design/ant-design/issues/44830
1170+
it('fresh should work', () => {
1171+
const Demo = () => {
1172+
const [open, setOpen] = React.useState(true);
1173+
1174+
return (
1175+
<Trigger
1176+
popupVisible={open}
1177+
onPopupVisibleChange={setOpen}
1178+
popup={<strong className="x-content">{String(open)}</strong>}
1179+
action={['click']}
1180+
popupAlign={placementAlignMap.left}
1181+
fresh
1182+
>
1183+
<div className="target">click</div>
1184+
</Trigger>
1185+
);
1186+
};
1187+
1188+
const { container } = render(<Demo />);
1189+
expect(document.querySelector('.x-content').textContent).toBe('true');
1190+
1191+
trigger(container, '.target');
1192+
expect(document.querySelector('.x-content').textContent).toBe('false');
1193+
});
11681194
});

0 commit comments

Comments
 (0)