Skip to content

Commit 250d0c8

Browse files
committed
chore: all test
1 parent ff55f9a commit 250d0c8

File tree

10 files changed

+57
-241
lines changed

10 files changed

+57
-241
lines changed

src/BaseSelect/index.tsx

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -668,20 +668,20 @@ const BaseSelect = React.forwardRef<BaseSelectRef, BaseSelectProps>((props, ref)
668668
forceUpdate({});
669669
}
670670

671-
// // Used for raw custom input trigger
672-
// let onTriggerVisibleChange: null | ((newOpen: boolean) => void);
673-
// if (customizeRawInputElement) {
674-
// onTriggerVisibleChange = (newOpen: boolean) => {
675-
// onToggleOpen(newOpen);
676-
// };
677-
// }
671+
// Used for raw custom input trigger
672+
let onTriggerVisibleChange: null | ((newOpen: boolean) => void);
673+
if (!!mergedComponents.root) {
674+
onTriggerVisibleChange = (newOpen: boolean) => {
675+
triggerOpen(newOpen);
676+
};
677+
}
678678

679679
// Close when click on non-select element
680680
useSelectTriggerControl(
681681
() => [getDOM(containerRef.current), triggerRef.current?.getPopupElement()],
682682
mergedOpen,
683683
triggerOpen,
684-
!!customizeRawInputElement,
684+
!!mergedComponents.root,
685685
);
686686

687687
// ============================ Context =============================
@@ -953,7 +953,7 @@ const BaseSelect = React.forwardRef<BaseSelectRef, BaseSelectProps>((props, ref)
953953
builtinPlacements={builtinPlacements}
954954
getPopupContainer={getPopupContainer}
955955
empty={emptyOptions}
956-
// onPopupVisibleChange={onTriggerVisibleChange}
956+
onPopupVisibleChange={onTriggerVisibleChange}
957957
onPopupMouseEnter={onPopupMouseEnter}
958958
onPopupMouseDown={onInternalMouseDown}
959959
>

src/SelectInput/index.tsx

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -211,29 +211,15 @@ export default React.forwardRef<SelectInputRef, SelectInputProps>(function Selec
211211
onInputKeyDown: onInternalInputKeyDown,
212212
};
213213

214-
const sharedProps = {
215-
// Open
216-
onMouseDown: onInternalMouseDown,
217-
onBlur: onInternalBlur,
218-
} as const;
219-
220214
if (RootComponent) {
221215
if (React.isValidElement<any>(RootComponent)) {
222-
const oriProps = RootComponent.props || {};
223216
return React.cloneElement(RootComponent, {
224-
...sharedProps,
225-
onMouseDown: (e: React.MouseEvent<HTMLDivElement>) => {
226-
sharedProps.onMouseDown(e);
227-
oriProps.onMouseDown?.(e);
228-
},
229-
onBlur: (e: React.FocusEvent<HTMLDivElement>) => {
230-
sharedProps.onBlur(e);
231-
oriProps.onBlur?.(e);
232-
},
217+
...domProps,
233218
ref: composeRef((RootComponent as any).ref, rootRef),
234219
});
235220
}
236-
return <RootComponent {...sharedProps} ref={rootRef} />;
221+
222+
return <RootComponent {...domProps} ref={rootRef} />;
237223
}
238224

239225
return (
@@ -244,8 +230,9 @@ export default React.forwardRef<SelectInputRef, SelectInputProps>(function Selec
244230
ref={rootRef}
245231
className={className}
246232
style={style}
247-
// Shared Props
248-
{...sharedProps}
233+
// Mouse Events
234+
onMouseDown={onInternalMouseDown}
235+
onBlur={onInternalBlur}
249236
>
250237
{/* Prefix */}
251238
<Affix className={clsx(`${prefixCls}-prefix`, classNames?.prefix)} style={styles?.prefix}>
Lines changed: 21 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,37 @@
11
import * as React from 'react';
2+
import { useEvent } from '@rc-component/util';
23

34
export default function useSelectTriggerControl(
45
elements: () => (HTMLElement | SVGElement | undefined)[],
56
open: boolean,
67
triggerOpen: (open: boolean) => void,
78
customizedTrigger: boolean,
89
) {
9-
const propsRef = React.useRef(null);
10-
propsRef.current = {
11-
open,
12-
triggerOpen,
13-
customizedTrigger,
14-
};
15-
16-
React.useEffect(() => {
17-
function onGlobalMouseDown(event: MouseEvent) {
18-
// If trigger is customized, Trigger will take control of popupVisible
19-
if (propsRef.current?.customizedTrigger) {
20-
return;
21-
}
10+
const onGlobalMouseDown = useEvent((event: MouseEvent) => {
11+
// If trigger is customized, Trigger will take control of popupVisible
12+
if (customizedTrigger) {
13+
return;
14+
}
2215

23-
let target = event.target as HTMLElement;
16+
let target = event.target as HTMLElement;
2417

25-
if (target.shadowRoot && event.composed) {
26-
target = (event.composedPath()[0] || target) as HTMLElement;
27-
}
18+
if (target.shadowRoot && event.composed) {
19+
target = (event.composedPath()[0] || target) as HTMLElement;
20+
}
2821

29-
if (
30-
propsRef.current.open &&
31-
elements()
32-
.filter((element) => element)
33-
.every((element) => !element.contains(target) && element !== target)
34-
) {
35-
// Should trigger close
36-
propsRef.current.triggerOpen(false);
37-
}
22+
if (
23+
open &&
24+
elements()
25+
.filter((element) => element)
26+
.every((element) => !element.contains(target) && element !== target)
27+
) {
28+
// Should trigger close
29+
triggerOpen(false);
3830
}
31+
});
3932

33+
React.useEffect(() => {
4034
window.addEventListener('mousedown', onGlobalMouseDown);
4135
return () => window.removeEventListener('mousedown', onGlobalMouseDown);
42-
}, []);
36+
}, [onGlobalMouseDown]);
4337
}

tests/BaseSelect.test.tsx

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,22 @@ import type { OptionListProps, RefOptionListProps } from '@/OptionList';
22
import { fireEvent, render } from '@testing-library/react';
33
import { forwardRef, act } from 'react';
44
import BaseSelect from '../src/BaseSelect';
5+
import { waitFakeTimer } from './utils/common';
56

67
const OptionList = forwardRef<RefOptionListProps, OptionListProps>(() => (
78
<div className="popup">Popup</div>
89
));
910

1011
describe('BaseSelect', () => {
11-
it('customized inputElement should trigger popup properly', () => {
12+
beforeEach(() => {
13+
jest.useFakeTimers();
14+
});
15+
16+
afterEach(() => {
17+
jest.useRealTimers();
18+
});
19+
20+
it('customized inputElement should trigger popup properly', async () => {
1221
const { container } = render(
1322
<BaseSelect
1423
prefixCls="rc-select"
@@ -27,11 +36,17 @@ describe('BaseSelect', () => {
2736
/>,
2837
);
2938
expect(container.querySelector('div.popup')).toBeFalsy();
39+
3040
fireEvent.click(container.querySelector('a.trigger'));
41+
await waitFakeTimer();
3142
expect(container.querySelector('div.popup')).toBeTruthy();
43+
3244
fireEvent.mouseDown(container.querySelector('a.trigger'));
45+
await waitFakeTimer();
3346
expect(container.querySelector('div.rc-select-dropdown-hidden')).toBeFalsy();
47+
3448
fireEvent.click(container.querySelector('a.trigger'));
49+
await waitFakeTimer();
3550
expect(container.querySelector('div.rc-select-dropdown-hidden')).toBeTruthy();
3651
});
3752

tests/Custom.test.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as React from 'react';
22
import Select from '../src';
3-
import { injectRunAllTimers } from './utils/common';
3+
import { injectRunAllTimers, waitFakeTimer } from './utils/common';
44
import { fireEvent, render } from '@testing-library/react';
55

66
describe('Select.Custom', () => {
@@ -14,7 +14,7 @@ describe('Select.Custom', () => {
1414
jest.useRealTimers();
1515
});
1616

17-
it('getRawInputElement', () => {
17+
it('getRawInputElement', async () => {
1818
const onPopupVisibleChange = jest.fn();
1919
const { container } = render(
2020
<Select
@@ -23,6 +23,7 @@ describe('Select.Custom', () => {
2323
/>,
2424
);
2525
fireEvent.click(container.querySelector('.custom'));
26+
await waitFakeTimer();
2627

2728
expect(onPopupVisibleChange).toHaveBeenCalledWith(true);
2829
});

tests/Select.test.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1895,13 +1895,11 @@ describe('Select.Basic', () => {
18951895
act(() => {
18961896
jest.runAllTimers();
18971897
});
1898-
console.log('~~~~1');
18991898
rerender(renderDemo(true));
19001899
act(() => {
19011900
jest.runAllTimers();
19021901
});
19031902

1904-
console.log('~~~~2');
19051903
rerender(renderDemo(false));
19061904

19071905
act(() => {

tests/SelectInput/Content.test.tsx

Lines changed: 0 additions & 70 deletions
This file was deleted.

tests/SelectInput/Input.test.tsx

Lines changed: 0 additions & 53 deletions
This file was deleted.

tests/__snapshots__/Combobox.test.tsx.snap

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
exports[`Select.Combobox renders controlled correctly 1`] = `
44
<div
5-
class="rc-select rc-select-single"
5+
class="rc-select rc-select-single rc-select-show-search"
66
>
77
<div
88
class="rc-select-content"
@@ -22,7 +22,6 @@ exports[`Select.Combobox renders controlled correctly 1`] = `
2222
autocomplete="off"
2323
class="rc-select-input"
2424
id="test-id"
25-
readonly=""
2625
role="combobox"
2726
type="text"
2827
value=""
@@ -33,7 +32,7 @@ exports[`Select.Combobox renders controlled correctly 1`] = `
3332

3433
exports[`Select.Combobox renders correctly 1`] = `
3534
<div
36-
class="rc-select rc-select-single"
35+
class="rc-select rc-select-single rc-select-show-search"
3736
>
3837
<div
3938
class="rc-select-content"
@@ -53,7 +52,6 @@ exports[`Select.Combobox renders correctly 1`] = `
5352
autocomplete="off"
5453
class="rc-select-input"
5554
id="test-id"
56-
readonly=""
5755
role="combobox"
5856
type="text"
5957
value=""

0 commit comments

Comments
 (0)