@rc-component/select 1.2.3 → 1.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/BaseSelect/index.js +18 -6
- package/es/Select.d.ts +1 -1
- package/es/SelectInput/index.js +6 -13
- package/es/SelectTrigger.d.ts +1 -0
- package/es/SelectTrigger.js +3 -1
- package/es/hooks/useOpen.js +1 -1
- package/es/hooks/useSelectTriggerControl.d.ts +1 -0
- package/es/hooks/useSelectTriggerControl.js +6 -1
- package/lib/BaseSelect/index.js +18 -6
- package/lib/Select.d.ts +1 -1
- package/lib/SelectInput/index.js +6 -13
- package/lib/SelectTrigger.d.ts +1 -0
- package/lib/SelectTrigger.js +3 -1
- package/lib/hooks/useOpen.js +1 -1
- package/lib/hooks/useSelectTriggerControl.d.ts +1 -0
- package/lib/hooks/useSelectTriggerControl.js +7 -1
- package/package.json +1 -1
package/es/BaseSelect/index.js
CHANGED
|
@@ -5,11 +5,11 @@ import * as React from 'react';
|
|
|
5
5
|
import { useAllowClear } from "../hooks/useAllowClear";
|
|
6
6
|
import { BaseSelectContext } from "../hooks/useBaseProps";
|
|
7
7
|
import useLock from "../hooks/useLock";
|
|
8
|
-
import useSelectTriggerControl from "../hooks/useSelectTriggerControl";
|
|
8
|
+
import useSelectTriggerControl, { isInside } from "../hooks/useSelectTriggerControl";
|
|
9
9
|
import SelectTrigger from "../SelectTrigger";
|
|
10
10
|
import { getSeparatedContent, isValidCount } from "../utils/valueUtil";
|
|
11
11
|
import Polite from "./Polite";
|
|
12
|
-
import useOpen from "../hooks/useOpen";
|
|
12
|
+
import useOpen, { macroTask } from "../hooks/useOpen";
|
|
13
13
|
import { useEvent } from '@rc-component/util';
|
|
14
14
|
import SelectInput from "../SelectInput";
|
|
15
15
|
import useComponents from "../hooks/useComponents";
|
|
@@ -288,6 +288,12 @@ const BaseSelect = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
288
288
|
keyLockRef.current = false;
|
|
289
289
|
};
|
|
290
290
|
|
|
291
|
+
// ========================== Focus / Blur ==========================
|
|
292
|
+
const getSelectElements = () => [getDOM(containerRef.current), triggerRef.current?.getPopupElement()];
|
|
293
|
+
|
|
294
|
+
// Close when click on non-select element
|
|
295
|
+
useSelectTriggerControl(getSelectElements, mergedOpen, triggerOpen, !!mergedComponents.root);
|
|
296
|
+
|
|
291
297
|
// ========================== Focus / Blur ==========================
|
|
292
298
|
/** Record real focus status */
|
|
293
299
|
// const focusRef = React.useRef<boolean>(false);
|
|
@@ -302,6 +308,13 @@ const BaseSelect = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
302
308
|
onFocus?.(event);
|
|
303
309
|
}
|
|
304
310
|
};
|
|
311
|
+
const onRootBlur = () => {
|
|
312
|
+
macroTask(() => {
|
|
313
|
+
if (!isInside(getSelectElements(), document.activeElement)) {
|
|
314
|
+
triggerOpen(false);
|
|
315
|
+
}
|
|
316
|
+
});
|
|
317
|
+
};
|
|
305
318
|
const onInternalBlur = event => {
|
|
306
319
|
setFocused(false);
|
|
307
320
|
if (mergedSearchValue) {
|
|
@@ -317,6 +330,7 @@ const BaseSelect = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
317
330
|
});
|
|
318
331
|
}
|
|
319
332
|
}
|
|
333
|
+
onRootBlur();
|
|
320
334
|
if (!disabled) {
|
|
321
335
|
onBlur?.(event);
|
|
322
336
|
}
|
|
@@ -352,9 +366,6 @@ const BaseSelect = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
352
366
|
};
|
|
353
367
|
}
|
|
354
368
|
|
|
355
|
-
// Close when click on non-select element
|
|
356
|
-
useSelectTriggerControl(() => [getDOM(containerRef.current), triggerRef.current?.getPopupElement()], mergedOpen, triggerOpen, !!mergedComponents.root);
|
|
357
|
-
|
|
358
369
|
// ============================ Context =============================
|
|
359
370
|
const baseSelectContext = React.useMemo(() => ({
|
|
360
371
|
...props,
|
|
@@ -488,7 +499,8 @@ const BaseSelect = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
488
499
|
empty: emptyOptions,
|
|
489
500
|
onPopupVisibleChange: onTriggerVisibleChange,
|
|
490
501
|
onPopupMouseEnter: onPopupMouseEnter,
|
|
491
|
-
onPopupMouseDown: onInternalMouseDown
|
|
502
|
+
onPopupMouseDown: onInternalMouseDown,
|
|
503
|
+
onPopupBlur: onRootBlur
|
|
492
504
|
}, renderNode);
|
|
493
505
|
return /*#__PURE__*/React.createElement(BaseSelectContext.Provider, {
|
|
494
506
|
value: baseSelectContext
|
package/es/Select.d.ts
CHANGED
|
@@ -125,7 +125,7 @@ export interface SelectProps<ValueType = any, OptionType extends BaseOptionType
|
|
|
125
125
|
classNames?: Partial<Record<SemanticName, string>>;
|
|
126
126
|
styles?: Partial<Record<SemanticName, React.CSSProperties>>;
|
|
127
127
|
}
|
|
128
|
-
declare const TypedSelect: (<ValueType = any, OptionType extends
|
|
128
|
+
declare const TypedSelect: (<ValueType = any, OptionType extends DefaultOptionType | BaseOptionType = DefaultOptionType>(props: React.PropsWithChildren<SelectProps<ValueType, OptionType>> & React.RefAttributes<BaseSelectRef>) => React.ReactElement) & {
|
|
129
129
|
Option: typeof Option;
|
|
130
130
|
OptGroup: typeof OptGroup;
|
|
131
131
|
};
|
package/es/SelectInput/index.js
CHANGED
|
@@ -10,7 +10,6 @@ import { isValidateOpenKey } from "../utils/keyUtil";
|
|
|
10
10
|
import { clsx } from 'clsx';
|
|
11
11
|
import { getDOM } from "@rc-component/util/es/Dom/findDOMNode";
|
|
12
12
|
import { composeRef } from "@rc-component/util/es/ref";
|
|
13
|
-
import { macroTask } from "../hooks/useOpen";
|
|
14
13
|
const DEFAULT_OMIT_PROPS = ['value', 'onChange', 'removeIcon', 'placeholder', 'maxTagCount', 'maxTagTextLength', 'maxTagPlaceholder', 'choiceTransitionName', 'onInputKeyDown', 'onPopupScroll', 'tabIndex', 'activeValue', 'onSelectorRemove', 'focused'];
|
|
15
14
|
export default /*#__PURE__*/React.forwardRef(function SelectInput(props, ref) {
|
|
16
15
|
const {
|
|
@@ -38,7 +37,6 @@ export default /*#__PURE__*/React.forwardRef(function SelectInput(props, ref) {
|
|
|
38
37
|
autoFocus,
|
|
39
38
|
// Events
|
|
40
39
|
onMouseDown,
|
|
41
|
-
onBlur,
|
|
42
40
|
onClearMouseDown,
|
|
43
41
|
onInputKeyDown,
|
|
44
42
|
onSelectorRemove,
|
|
@@ -107,6 +105,11 @@ export default /*#__PURE__*/React.forwardRef(function SelectInput(props, ref) {
|
|
|
107
105
|
// ====================== Open ======================
|
|
108
106
|
const onInternalMouseDown = useEvent(event => {
|
|
109
107
|
if (!disabled) {
|
|
108
|
+
// https://github.com/ant-design/ant-design/issues/56002
|
|
109
|
+
// Tell `useSelectTriggerControl` to ignore this event
|
|
110
|
+
// When icon is dynamic render, the parentNode will miss
|
|
111
|
+
// so we need to mark the event directly
|
|
112
|
+
event.nativeEvent._ignore_global_close = true;
|
|
110
113
|
const inputDOM = getDOM(inputRef.current);
|
|
111
114
|
if (inputDOM && event.target !== inputDOM && !inputDOM.contains(event.target)) {
|
|
112
115
|
event.preventDefault();
|
|
@@ -129,15 +132,6 @@ export default /*#__PURE__*/React.forwardRef(function SelectInput(props, ref) {
|
|
|
129
132
|
}
|
|
130
133
|
onMouseDown?.(event);
|
|
131
134
|
});
|
|
132
|
-
const onInternalBlur = event => {
|
|
133
|
-
macroTask(() => {
|
|
134
|
-
const inputNode = getDOM(inputRef.current);
|
|
135
|
-
if (!inputNode || inputNode !== document.activeElement && !inputNode.contains(document.activeElement)) {
|
|
136
|
-
toggleOpen(false);
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
onBlur?.(event);
|
|
140
|
-
};
|
|
141
135
|
|
|
142
136
|
// =================== Components ===================
|
|
143
137
|
const {
|
|
@@ -172,8 +166,7 @@ export default /*#__PURE__*/React.forwardRef(function SelectInput(props, ref) {
|
|
|
172
166
|
style: style
|
|
173
167
|
// Mouse Events
|
|
174
168
|
,
|
|
175
|
-
onMouseDown: onInternalMouseDown
|
|
176
|
-
onBlur: onInternalBlur
|
|
169
|
+
onMouseDown: onInternalMouseDown
|
|
177
170
|
}), /*#__PURE__*/React.createElement(Affix, {
|
|
178
171
|
className: clsx(`${prefixCls}-prefix`, classNames?.prefix),
|
|
179
172
|
style: styles?.prefix
|
package/es/SelectTrigger.d.ts
CHANGED
|
@@ -25,6 +25,7 @@ export interface SelectTriggerProps {
|
|
|
25
25
|
onPopupVisibleChange?: (visible: boolean) => void;
|
|
26
26
|
onPopupMouseEnter: () => void;
|
|
27
27
|
onPopupMouseDown: React.MouseEventHandler<HTMLDivElement>;
|
|
28
|
+
onPopupBlur?: React.FocusEventHandler<HTMLDivElement>;
|
|
28
29
|
}
|
|
29
30
|
declare const RefSelectTrigger: React.ForwardRefExoticComponent<SelectTriggerProps & React.RefAttributes<RefTriggerProps>>;
|
|
30
31
|
export default RefSelectTrigger;
|
package/es/SelectTrigger.js
CHANGED
|
@@ -66,6 +66,7 @@ const SelectTrigger = (props, ref) => {
|
|
|
66
66
|
onPopupVisibleChange,
|
|
67
67
|
onPopupMouseEnter,
|
|
68
68
|
onPopupMouseDown,
|
|
69
|
+
onPopupBlur,
|
|
69
70
|
...restProps
|
|
70
71
|
} = props;
|
|
71
72
|
|
|
@@ -117,7 +118,8 @@ const SelectTrigger = (props, ref) => {
|
|
|
117
118
|
},
|
|
118
119
|
popup: /*#__PURE__*/React.createElement("div", {
|
|
119
120
|
onMouseEnter: onPopupMouseEnter,
|
|
120
|
-
onMouseDown: onPopupMouseDown
|
|
121
|
+
onMouseDown: onPopupMouseDown,
|
|
122
|
+
onBlur: onPopupBlur
|
|
121
123
|
}, popupNode),
|
|
122
124
|
ref: triggerPopupRef,
|
|
123
125
|
stretch: stretch,
|
package/es/hooks/useOpen.js
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
+
export declare function isInside(elements: (HTMLElement | SVGElement | undefined)[], target: HTMLElement): boolean;
|
|
1
2
|
export default function useSelectTriggerControl(elements: () => (HTMLElement | SVGElement | undefined)[], open: boolean, triggerOpen: (open: boolean) => void, customizedTrigger: boolean): void;
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { useEvent } from '@rc-component/util';
|
|
3
|
+
export function isInside(elements, target) {
|
|
4
|
+
return elements.filter(element => element).some(element => element.contains(target) || element === target);
|
|
5
|
+
}
|
|
3
6
|
export default function useSelectTriggerControl(elements, open, triggerOpen, customizedTrigger) {
|
|
4
7
|
const onGlobalMouseDown = useEvent(event => {
|
|
5
8
|
// If trigger is customized, Trigger will take control of popupVisible
|
|
@@ -10,7 +13,9 @@ export default function useSelectTriggerControl(elements, open, triggerOpen, cus
|
|
|
10
13
|
if (target.shadowRoot && event.composed) {
|
|
11
14
|
target = event.composedPath()[0] || target;
|
|
12
15
|
}
|
|
13
|
-
if (open &&
|
|
16
|
+
if (open &&
|
|
17
|
+
// Marked by SelectInput mouseDown event
|
|
18
|
+
!event._ignore_global_close && !isInside(elements(), target)) {
|
|
14
19
|
// Should trigger close
|
|
15
20
|
triggerOpen(false);
|
|
16
21
|
}
|
package/lib/BaseSelect/index.js
CHANGED
|
@@ -10,11 +10,11 @@ var React = _interopRequireWildcard(require("react"));
|
|
|
10
10
|
var _useAllowClear = require("../hooks/useAllowClear");
|
|
11
11
|
var _useBaseProps = require("../hooks/useBaseProps");
|
|
12
12
|
var _useLock = _interopRequireDefault(require("../hooks/useLock"));
|
|
13
|
-
var _useSelectTriggerControl =
|
|
13
|
+
var _useSelectTriggerControl = _interopRequireWildcard(require("../hooks/useSelectTriggerControl"));
|
|
14
14
|
var _SelectTrigger = _interopRequireDefault(require("../SelectTrigger"));
|
|
15
15
|
var _valueUtil = require("../utils/valueUtil");
|
|
16
16
|
var _Polite = _interopRequireDefault(require("./Polite"));
|
|
17
|
-
var _useOpen =
|
|
17
|
+
var _useOpen = _interopRequireWildcard(require("../hooks/useOpen"));
|
|
18
18
|
var _util = require("@rc-component/util");
|
|
19
19
|
var _SelectInput = _interopRequireDefault(require("../SelectInput"));
|
|
20
20
|
var _useComponents = _interopRequireDefault(require("../hooks/useComponents"));
|
|
@@ -297,6 +297,12 @@ const BaseSelect = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
297
297
|
keyLockRef.current = false;
|
|
298
298
|
};
|
|
299
299
|
|
|
300
|
+
// ========================== Focus / Blur ==========================
|
|
301
|
+
const getSelectElements = () => [(0, _findDOMNode.getDOM)(containerRef.current), triggerRef.current?.getPopupElement()];
|
|
302
|
+
|
|
303
|
+
// Close when click on non-select element
|
|
304
|
+
(0, _useSelectTriggerControl.default)(getSelectElements, mergedOpen, triggerOpen, !!mergedComponents.root);
|
|
305
|
+
|
|
300
306
|
// ========================== Focus / Blur ==========================
|
|
301
307
|
/** Record real focus status */
|
|
302
308
|
// const focusRef = React.useRef<boolean>(false);
|
|
@@ -311,6 +317,13 @@ const BaseSelect = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
311
317
|
onFocus?.(event);
|
|
312
318
|
}
|
|
313
319
|
};
|
|
320
|
+
const onRootBlur = () => {
|
|
321
|
+
(0, _useOpen.macroTask)(() => {
|
|
322
|
+
if (!(0, _useSelectTriggerControl.isInside)(getSelectElements(), document.activeElement)) {
|
|
323
|
+
triggerOpen(false);
|
|
324
|
+
}
|
|
325
|
+
});
|
|
326
|
+
};
|
|
314
327
|
const onInternalBlur = event => {
|
|
315
328
|
setFocused(false);
|
|
316
329
|
if (mergedSearchValue) {
|
|
@@ -326,6 +339,7 @@ const BaseSelect = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
326
339
|
});
|
|
327
340
|
}
|
|
328
341
|
}
|
|
342
|
+
onRootBlur();
|
|
329
343
|
if (!disabled) {
|
|
330
344
|
onBlur?.(event);
|
|
331
345
|
}
|
|
@@ -361,9 +375,6 @@ const BaseSelect = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
361
375
|
};
|
|
362
376
|
}
|
|
363
377
|
|
|
364
|
-
// Close when click on non-select element
|
|
365
|
-
(0, _useSelectTriggerControl.default)(() => [(0, _findDOMNode.getDOM)(containerRef.current), triggerRef.current?.getPopupElement()], mergedOpen, triggerOpen, !!mergedComponents.root);
|
|
366
|
-
|
|
367
378
|
// ============================ Context =============================
|
|
368
379
|
const baseSelectContext = React.useMemo(() => ({
|
|
369
380
|
...props,
|
|
@@ -497,7 +508,8 @@ const BaseSelect = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
497
508
|
empty: emptyOptions,
|
|
498
509
|
onPopupVisibleChange: onTriggerVisibleChange,
|
|
499
510
|
onPopupMouseEnter: onPopupMouseEnter,
|
|
500
|
-
onPopupMouseDown: onInternalMouseDown
|
|
511
|
+
onPopupMouseDown: onInternalMouseDown,
|
|
512
|
+
onPopupBlur: onRootBlur
|
|
501
513
|
}, renderNode);
|
|
502
514
|
return /*#__PURE__*/React.createElement(_useBaseProps.BaseSelectContext.Provider, {
|
|
503
515
|
value: baseSelectContext
|
package/lib/Select.d.ts
CHANGED
|
@@ -125,7 +125,7 @@ export interface SelectProps<ValueType = any, OptionType extends BaseOptionType
|
|
|
125
125
|
classNames?: Partial<Record<SemanticName, string>>;
|
|
126
126
|
styles?: Partial<Record<SemanticName, React.CSSProperties>>;
|
|
127
127
|
}
|
|
128
|
-
declare const TypedSelect: (<ValueType = any, OptionType extends
|
|
128
|
+
declare const TypedSelect: (<ValueType = any, OptionType extends DefaultOptionType | BaseOptionType = DefaultOptionType>(props: React.PropsWithChildren<SelectProps<ValueType, OptionType>> & React.RefAttributes<BaseSelectRef>) => React.ReactElement) & {
|
|
129
129
|
Option: typeof Option;
|
|
130
130
|
OptGroup: typeof OptGroup;
|
|
131
131
|
};
|
package/lib/SelectInput/index.js
CHANGED
|
@@ -15,7 +15,6 @@ var _keyUtil = require("../utils/keyUtil");
|
|
|
15
15
|
var _clsx = require("clsx");
|
|
16
16
|
var _findDOMNode = require("@rc-component/util/lib/Dom/findDOMNode");
|
|
17
17
|
var _ref = require("@rc-component/util/lib/ref");
|
|
18
|
-
var _useOpen = require("../hooks/useOpen");
|
|
19
18
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
20
19
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
21
20
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
@@ -47,7 +46,6 @@ var _default = exports.default = /*#__PURE__*/React.forwardRef(function SelectIn
|
|
|
47
46
|
autoFocus,
|
|
48
47
|
// Events
|
|
49
48
|
onMouseDown,
|
|
50
|
-
onBlur,
|
|
51
49
|
onClearMouseDown,
|
|
52
50
|
onInputKeyDown,
|
|
53
51
|
onSelectorRemove,
|
|
@@ -116,6 +114,11 @@ var _default = exports.default = /*#__PURE__*/React.forwardRef(function SelectIn
|
|
|
116
114
|
// ====================== Open ======================
|
|
117
115
|
const onInternalMouseDown = (0, _util.useEvent)(event => {
|
|
118
116
|
if (!disabled) {
|
|
117
|
+
// https://github.com/ant-design/ant-design/issues/56002
|
|
118
|
+
// Tell `useSelectTriggerControl` to ignore this event
|
|
119
|
+
// When icon is dynamic render, the parentNode will miss
|
|
120
|
+
// so we need to mark the event directly
|
|
121
|
+
event.nativeEvent._ignore_global_close = true;
|
|
119
122
|
const inputDOM = (0, _findDOMNode.getDOM)(inputRef.current);
|
|
120
123
|
if (inputDOM && event.target !== inputDOM && !inputDOM.contains(event.target)) {
|
|
121
124
|
event.preventDefault();
|
|
@@ -138,15 +141,6 @@ var _default = exports.default = /*#__PURE__*/React.forwardRef(function SelectIn
|
|
|
138
141
|
}
|
|
139
142
|
onMouseDown?.(event);
|
|
140
143
|
});
|
|
141
|
-
const onInternalBlur = event => {
|
|
142
|
-
(0, _useOpen.macroTask)(() => {
|
|
143
|
-
const inputNode = (0, _findDOMNode.getDOM)(inputRef.current);
|
|
144
|
-
if (!inputNode || inputNode !== document.activeElement && !inputNode.contains(document.activeElement)) {
|
|
145
|
-
toggleOpen(false);
|
|
146
|
-
}
|
|
147
|
-
});
|
|
148
|
-
onBlur?.(event);
|
|
149
|
-
};
|
|
150
144
|
|
|
151
145
|
// =================== Components ===================
|
|
152
146
|
const {
|
|
@@ -181,8 +175,7 @@ var _default = exports.default = /*#__PURE__*/React.forwardRef(function SelectIn
|
|
|
181
175
|
style: style
|
|
182
176
|
// Mouse Events
|
|
183
177
|
,
|
|
184
|
-
onMouseDown: onInternalMouseDown
|
|
185
|
-
onBlur: onInternalBlur
|
|
178
|
+
onMouseDown: onInternalMouseDown
|
|
186
179
|
}), /*#__PURE__*/React.createElement(_Affix.default, {
|
|
187
180
|
className: (0, _clsx.clsx)(`${prefixCls}-prefix`, classNames?.prefix),
|
|
188
181
|
style: styles?.prefix
|
package/lib/SelectTrigger.d.ts
CHANGED
|
@@ -25,6 +25,7 @@ export interface SelectTriggerProps {
|
|
|
25
25
|
onPopupVisibleChange?: (visible: boolean) => void;
|
|
26
26
|
onPopupMouseEnter: () => void;
|
|
27
27
|
onPopupMouseDown: React.MouseEventHandler<HTMLDivElement>;
|
|
28
|
+
onPopupBlur?: React.FocusEventHandler<HTMLDivElement>;
|
|
28
29
|
}
|
|
29
30
|
declare const RefSelectTrigger: React.ForwardRefExoticComponent<SelectTriggerProps & React.RefAttributes<RefTriggerProps>>;
|
|
30
31
|
export default RefSelectTrigger;
|
package/lib/SelectTrigger.js
CHANGED
|
@@ -75,6 +75,7 @@ const SelectTrigger = (props, ref) => {
|
|
|
75
75
|
onPopupVisibleChange,
|
|
76
76
|
onPopupMouseEnter,
|
|
77
77
|
onPopupMouseDown,
|
|
78
|
+
onPopupBlur,
|
|
78
79
|
...restProps
|
|
79
80
|
} = props;
|
|
80
81
|
|
|
@@ -126,7 +127,8 @@ const SelectTrigger = (props, ref) => {
|
|
|
126
127
|
},
|
|
127
128
|
popup: /*#__PURE__*/React.createElement("div", {
|
|
128
129
|
onMouseEnter: onPopupMouseEnter,
|
|
129
|
-
onMouseDown: onPopupMouseDown
|
|
130
|
+
onMouseDown: onPopupMouseDown,
|
|
131
|
+
onBlur: onPopupBlur
|
|
130
132
|
}, popupNode),
|
|
131
133
|
ref: triggerPopupRef,
|
|
132
134
|
stretch: stretch,
|
package/lib/hooks/useOpen.js
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
+
export declare function isInside(elements: (HTMLElement | SVGElement | undefined)[], target: HTMLElement): boolean;
|
|
1
2
|
export default function useSelectTriggerControl(elements: () => (HTMLElement | SVGElement | undefined)[], open: boolean, triggerOpen: (open: boolean) => void, customizedTrigger: boolean): void;
|
|
@@ -4,10 +4,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = useSelectTriggerControl;
|
|
7
|
+
exports.isInside = isInside;
|
|
7
8
|
var React = _interopRequireWildcard(require("react"));
|
|
8
9
|
var _util = require("@rc-component/util");
|
|
9
10
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
10
11
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
12
|
+
function isInside(elements, target) {
|
|
13
|
+
return elements.filter(element => element).some(element => element.contains(target) || element === target);
|
|
14
|
+
}
|
|
11
15
|
function useSelectTriggerControl(elements, open, triggerOpen, customizedTrigger) {
|
|
12
16
|
const onGlobalMouseDown = (0, _util.useEvent)(event => {
|
|
13
17
|
// If trigger is customized, Trigger will take control of popupVisible
|
|
@@ -18,7 +22,9 @@ function useSelectTriggerControl(elements, open, triggerOpen, customizedTrigger)
|
|
|
18
22
|
if (target.shadowRoot && event.composed) {
|
|
19
23
|
target = event.composedPath()[0] || target;
|
|
20
24
|
}
|
|
21
|
-
if (open &&
|
|
25
|
+
if (open &&
|
|
26
|
+
// Marked by SelectInput mouseDown event
|
|
27
|
+
!event._ignore_global_close && !isInside(elements(), target)) {
|
|
22
28
|
// Should trigger close
|
|
23
29
|
triggerOpen(false);
|
|
24
30
|
}
|