Skip to content

Commit f5ed609

Browse files
authored
chore: Update rc-trigger (#430)
* use ref hook * update rc-trigger * comment broken react/sort-comp eslint rule * update trigger deps * update doc
1 parent e75d112 commit f5ed609

File tree

9 files changed

+43
-19
lines changed

9 files changed

+43
-19
lines changed

.eslintrc.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ module.exports = {
66
rules: {
77
...base.rules,
88
'default-case': 0,
9+
'react/sort-comp': 0,
910
'jsx-a11y/interactive-supports-focus': 0,
1011
'jsx-a11y/no-autofocus': 0,
1112
'import/no-extraneous-dependencies': ['error', { devDependencies: true }],

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ React.render(c, container);
9696
|defaultValue | initial selected option(s) | String/Array<String> | - |
9797
|value | current selected option(s) | String/Array<String>/{key:String, label:React.Node}/Array<{key, label}> | - |
9898
|firstActiveValue | first active value when there is no value | String/Array<String> | - |
99-
|labelInValue| whether to embed label in value, see above value type | Bool | false |
99+
|labelInValue| whether to embed label in value, see above value type. Not support `combobox` mode | Bool | false |
100100
|backfill| whether backfill select option to search input (Only works in single and combobox mode) | Bool | false |
101101
|onChange | called when select an option or input value change(combobox) | function(value, option:Option/Array<Option>) | - |
102102
|onSearch | called when input changed | function | - |

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
"dependencies": {
4242
"classnames": "2.x",
4343
"rc-animate": "^2.10.0",
44-
"rc-trigger": "^2.6.5",
44+
"rc-trigger": "^4.0.0-alpha.4",
4545
"rc-util": "^4.11.0",
4646
"rc-virtual-list": "^0.0.0-alpha.25",
4747
"warning": "^4.0.3"

src/SelectTrigger.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as React from 'react';
22
import Trigger from 'rc-trigger';
33
import classNames from 'classnames';
4-
import { RenderNode } from './interface';
4+
import { RenderDOMFunc } from './interface';
55

66
const BUILT_IN_PLACEMENTS = {
77
bottomLeft: {
@@ -40,9 +40,11 @@ export interface SelectTriggerProps {
4040
dropdownClassName: string;
4141
dropdownMatchSelectWidth?: true | number;
4242
dropdownRender?: (menu: React.ReactElement) => React.ReactElement;
43-
getPopupContainer?: RenderNode;
43+
getPopupContainer?: RenderDOMFunc;
4444
dropdownAlign: object;
4545
empty: boolean;
46+
47+
getTriggerDOMNode: () => HTMLElement;
4648
}
4749

4850
const SelectTrigger: React.RefForwardingComponent<RefTriggerProps, SelectTriggerProps> = (
@@ -65,6 +67,7 @@ const SelectTrigger: React.RefForwardingComponent<RefTriggerProps, SelectTrigger
6567
dropdownAlign,
6668
getPopupContainer,
6769
empty,
70+
getTriggerDOMNode,
6871
...restProps
6972
} = props;
7073

@@ -106,6 +109,7 @@ const SelectTrigger: React.RefForwardingComponent<RefTriggerProps, SelectTrigger
106109
width:
107110
typeof dropdownMatchSelectWidth === 'number' ? dropdownMatchSelectWidth : containerWidth,
108111
}}
112+
getTriggerDOMNode={getTriggerDOMNode}
109113
>
110114
{children}
111115
</Trigger>

src/Selector/index.tsx

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,12 @@ export interface SelectorProps {
7575
onSearch: (searchValue: string) => boolean;
7676
onSelect: (value: RawValueType, option: { selected: boolean }) => void;
7777
onInputKeyDown?: React.KeyboardEventHandler<HTMLInputElement | HTMLTextAreaElement>;
78+
79+
/**
80+
* @private get real dom for trigger align.
81+
* This may be removed after React provides replacement of `findDOMNode`
82+
*/
83+
domRef: React.Ref<HTMLDivElement>;
7884
}
7985

8086
const Selector: React.RefForwardingComponent<RefSelectorProps, SelectorProps> = (props, ref) => {
@@ -87,6 +93,8 @@ const Selector: React.RefForwardingComponent<RefSelectorProps, SelectorProps> =
8793
onSearch,
8894
onToggleOpen,
8995
onInputKeyDown,
96+
97+
domRef,
9098
} = props;
9199

92100
// ======================= Ref =======================
@@ -163,7 +171,12 @@ const Selector: React.RefForwardingComponent<RefSelectorProps, SelectorProps> =
163171
);
164172

165173
return (
166-
<div className={`${prefixCls}-selector`} onClick={onClick} onMouseDown={onMouseDown}>
174+
<div
175+
ref={domRef}
176+
className={`${prefixCls}-selector`}
177+
onClick={onClick}
178+
onMouseDown={onMouseDown}
179+
>
167180
{selectNode}
168181
</div>
169182
);

src/generate.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import KeyCode from 'rc-util/lib/KeyCode';
1212
import classNames from 'classnames';
1313
import Selector, { RefSelectorProps } from './Selector';
1414
import SelectTrigger, { RefTriggerProps } from './SelectTrigger';
15-
import { RenderNode, Mode } from './interface';
15+
import { RenderNode, Mode, RenderDOMFunc } from './interface';
1616
import {
1717
GetLabeledValue,
1818
FilterOptions,
@@ -103,7 +103,7 @@ export interface SelectProps<OptionsType extends object[], ValueType> extends Re
103103
dropdownAlign?: any;
104104
animation?: string;
105105
transitionName?: string;
106-
getPopupContainer?: RenderNode;
106+
getPopupContainer?: RenderDOMFunc;
107107

108108
// Others
109109
disabled?: boolean;
@@ -333,6 +333,8 @@ export default function generateSelector<
333333
showSearch !== undefined ? showSearch : isMultiple || mode === 'combobox';
334334

335335
// ============================== Ref ===============================
336+
const selectorDomRef = React.useRef<HTMLDivElement>(null);
337+
336338
React.useImperativeHandle(ref, () => ({
337339
focus: selectorRef.current.focus,
338340
blur: selectorRef.current.blur,
@@ -902,9 +904,11 @@ export default function generateSelector<
902904
dropdownAlign={dropdownAlign}
903905
getPopupContainer={getPopupContainer}
904906
empty={!mergedOptions.length}
907+
getTriggerDOMNode={() => selectorDomRef.current}
905908
>
906909
<Selector
907910
{...props}
911+
domRef={selectorDomRef}
908912
prefixCls={prefixCls}
909913
inputElement={customizeInputElement}
910914
ref={selectorRef}

src/interface/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import * as React from 'react';
22
import { Key } from './generator';
33

4+
export type RenderDOMFunc = (props: any) => HTMLElement;
5+
46
export type RenderNode = React.ReactNode | ((props: any) => React.ReactNode);
57

68
export type Mode = 'multiple' | 'tags' | 'combobox';

tests/__snapshots__/Select.test.tsx.snap

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ exports[`Select.Basic does not filter when filterOption value is false 1`] = `
2727
</div>
2828
<div>
2929
<div
30-
class="rc-select-dropdown rc-select-dropdown-placement-bottomLeft "
30+
class="rc-select-dropdown"
31+
style="opacity:0"
3132
>
3233
<div>
3334
<div
@@ -124,7 +125,6 @@ exports[`Select.Basic filterOption could be true as described in default value 1
124125
>
125126
<div
126127
class="rc-select-selector"
127-
style=""
128128
>
129129
<span
130130
class="rc-select-selection-search"
@@ -147,8 +147,8 @@ exports[`Select.Basic filterOption could be true as described in default value 1
147147
</div>
148148
<div>
149149
<div
150-
class="rc-select-dropdown rc-select-dropdown-placement-bottomLeft "
151-
style="left: -999px; top: -995px; width: 0px;"
150+
class="rc-select-dropdown"
151+
style="opacity: 0; width: 0px;"
152152
>
153153
<div>
154154
<div
@@ -456,7 +456,8 @@ exports[`Select.Basic render renders dropdown correctly 1`] = `
456456
</div>
457457
<div>
458458
<div
459-
class="antd-dropdown antd-dropdown-placement-bottomLeft "
459+
class="antd-dropdown"
460+
style="opacity:0"
460461
>
461462
<div>
462463
<div
@@ -685,7 +686,8 @@ exports[`Select.Basic should contain falsy children 1`] = `
685686
</div>
686687
<div>
687688
<div
688-
class="rc-select-dropdown rc-select-dropdown-placement-bottomLeft "
689+
class="rc-select-dropdown"
690+
style="opacity:0"
689691
>
690692
<div>
691693
<div
@@ -784,7 +786,6 @@ exports[`Select.Basic should render custom dropdown correctly 1`] = `
784786
>
785787
<div
786788
class="rc-select-selector"
787-
style=""
788789
>
789790
<span
790791
class="rc-select-selection-search"
@@ -810,8 +811,8 @@ exports[`Select.Basic should render custom dropdown correctly 1`] = `
810811
</div>
811812
<div>
812813
<div
813-
class="rc-select-dropdown rc-select-dropdown-placement-bottomLeft "
814-
style="left: -999px; top: -995px; width: 0px;"
814+
class="rc-select-dropdown"
815+
style="opacity: 0; width: 0px;"
815816
>
816817
<div>
817818
<div>

tests/__snapshots__/Tags.test.tsx.snap

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ exports[`Select.Tags OptGroup renders correctly 1`] = `
77
>
88
<div
99
class="rc-select-selector"
10-
style=""
1110
>
1211
<span
1312
class="rc-select-selection-item"
@@ -78,8 +77,8 @@ exports[`Select.Tags OptGroup renders correctly 1`] = `
7877
</div>
7978
<div>
8079
<div
81-
class="rc-select-dropdown rc-select-dropdown-placement-bottomLeft "
82-
style="width: 0px; left: -999px; top: -995px;"
80+
class="rc-select-dropdown"
81+
style="width: 0px; opacity: 0;"
8382
>
8483
<div>
8584
<div

0 commit comments

Comments
 (0)