@acusti/dropdown 0.19.0 → 0.20.0
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/dist/Dropdown.d.ts +1 -0
- package/dist/Dropdown.js +87 -47
- package/dist/Dropdown.js.flow +1 -0
- package/dist/Dropdown.js.map +1 -1
- package/package.json +3 -4
- package/src/Dropdown.tsx +128 -76
package/dist/Dropdown.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ export declare type Props = {
|
|
|
15
15
|
hasItems?: boolean;
|
|
16
16
|
isOpenOnMount?: boolean;
|
|
17
17
|
isSearchable?: boolean;
|
|
18
|
+
keepOpenOnSubmit?: boolean;
|
|
18
19
|
label?: string;
|
|
19
20
|
/** Only usable in conjunction with {isSearchable: true}; used as search input’s name */
|
|
20
21
|
name?: string;
|
package/dist/Dropdown.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
// TODO
|
|
2
|
-
//
|
|
1
|
+
// TODO fix searching to match on significant parts of value (i.e. not parts that are the same)
|
|
2
|
+
// could also match on ukt-values (see searchable Font Weight example in storybook docs)
|
|
3
3
|
import InputText from '@acusti/input-text';
|
|
4
4
|
import { Style } from '@acusti/styling';
|
|
5
5
|
import useIsOutOfBounds from '@acusti/use-is-out-of-bounds';
|
|
6
|
-
import
|
|
6
|
+
import clsx from 'clsx';
|
|
7
7
|
import * as React from 'react';
|
|
8
8
|
import { BODY_CLASS_NAME, BODY_SELECTOR, LABEL_CLASS_NAME, LABEL_TEXT_CLASS_NAME, ROOT_CLASS_NAME, STYLES, TRIGGER_CLASS_NAME, } from './styles.js';
|
|
9
9
|
import { getActiveItemElement, getItemElements, ITEM_SELECTOR, KEY_EVENT_ELEMENTS, setActiveItem, } from './helpers.js';
|
|
10
10
|
const { Children, Fragment, useCallback, useLayoutEffect, useRef, useState } = React;
|
|
11
11
|
const noop = () => { };
|
|
12
12
|
const CHILDREN_ERROR = '@acusti/dropdown requires either 1 child (the dropdown body) or 2 children: the dropdown trigger and the dropdown body.';
|
|
13
|
-
const Dropdown = ({ allowEmpty = true, children, className, disabled, hasItems = true, isOpenOnMount, isSearchable, label, name, onClick, onMouseDown, onMouseUp, onSubmitItem, placeholder, tabIndex, value, }) => {
|
|
13
|
+
const Dropdown = ({ allowEmpty = true, children, className, disabled, hasItems = true, isOpenOnMount, isSearchable, keepOpenOnSubmit = !hasItems, label, name, onClick, onMouseDown, onMouseUp, onSubmitItem, placeholder, tabIndex, value, }) => {
|
|
14
14
|
const childrenCount = Children.count(children);
|
|
15
15
|
if (childrenCount !== 1 && childrenCount !== 2) {
|
|
16
16
|
if (childrenCount === 0) {
|
|
@@ -37,6 +37,7 @@ const Dropdown = ({ allowEmpty = true, children, className, disabled, hasItems =
|
|
|
37
37
|
const isOpenRef = useRef(isOpen);
|
|
38
38
|
const isOpeningRef = useRef(isOpening);
|
|
39
39
|
const isTriggerFromPropsRef = useRef(isOpening);
|
|
40
|
+
const keepOpenOnSubmitRef = useRef(keepOpenOnSubmit);
|
|
40
41
|
const onSubmitItemRef = useRef(onSubmitItem);
|
|
41
42
|
const valueRef = useRef(value);
|
|
42
43
|
useLayoutEffect(() => {
|
|
@@ -45,6 +46,7 @@ const Dropdown = ({ allowEmpty = true, children, className, disabled, hasItems =
|
|
|
45
46
|
isOpenRef.current = isOpen;
|
|
46
47
|
isOpeningRef.current = isOpening;
|
|
47
48
|
isTriggerFromPropsRef.current = isTriggerFromProps;
|
|
49
|
+
keepOpenOnSubmitRef.current = keepOpenOnSubmit;
|
|
48
50
|
onSubmitItemRef.current = onSubmitItem;
|
|
49
51
|
valueRef.current = value;
|
|
50
52
|
}, [
|
|
@@ -53,6 +55,7 @@ const Dropdown = ({ allowEmpty = true, children, className, disabled, hasItems =
|
|
|
53
55
|
isOpen,
|
|
54
56
|
isOpening,
|
|
55
57
|
isTriggerFromProps,
|
|
58
|
+
keepOpenOnSubmit,
|
|
56
59
|
onSubmitItem,
|
|
57
60
|
value,
|
|
58
61
|
]);
|
|
@@ -65,12 +68,18 @@ const Dropdown = ({ allowEmpty = true, children, className, disabled, hasItems =
|
|
|
65
68
|
closingTimerRef.current = null;
|
|
66
69
|
}
|
|
67
70
|
}, []);
|
|
68
|
-
const handleSubmitItem = useCallback(() => {
|
|
71
|
+
const handleSubmitItem = useCallback((event) => {
|
|
69
72
|
var _a;
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
73
|
+
const eventTarget = event.target;
|
|
74
|
+
if (isOpenRef.current && !keepOpenOnSubmitRef.current) {
|
|
75
|
+
const keepOpen = eventTarget.closest('[data-ukt-keep-open]');
|
|
76
|
+
// Don’t close dropdown if event occurs w/in data-ukt-keep-open element
|
|
77
|
+
if (!(keepOpen === null || keepOpen === void 0 ? void 0 : keepOpen.dataset.uktKeepOpen) ||
|
|
78
|
+
keepOpen.dataset.uktKeepOpen === 'false') {
|
|
79
|
+
// A short timeout before closing is better UX when user selects an item so dropdown
|
|
80
|
+
// doesn’t close before expected. It also enables using <Link />s in the dropdown body.
|
|
81
|
+
closingTimerRef.current = setTimeout(closeDropdown, 90);
|
|
82
|
+
}
|
|
74
83
|
}
|
|
75
84
|
if (!hasItemsRef.current)
|
|
76
85
|
return;
|
|
@@ -137,6 +146,55 @@ const Dropdown = ({ allowEmpty = true, children, className, disabled, hasItems =
|
|
|
137
146
|
}
|
|
138
147
|
}
|
|
139
148
|
}, []);
|
|
149
|
+
const handleMouseOut = useCallback((event) => {
|
|
150
|
+
if (!hasItemsRef.current)
|
|
151
|
+
return;
|
|
152
|
+
const activeItem = getActiveItemElement(dropdownElementRef.current);
|
|
153
|
+
if (!activeItem)
|
|
154
|
+
return;
|
|
155
|
+
const eventRelatedTarget = event.relatedTarget;
|
|
156
|
+
if (activeItem !== event.target || activeItem.contains(eventRelatedTarget))
|
|
157
|
+
return;
|
|
158
|
+
// If user moused out of activeItem (not into a descendant), it’s no longer active
|
|
159
|
+
delete activeItem.dataset.uktActive;
|
|
160
|
+
}, []);
|
|
161
|
+
const handleMouseDown = useCallback((event) => {
|
|
162
|
+
if (onMouseDown)
|
|
163
|
+
onMouseDown(event);
|
|
164
|
+
if (isOpenRef.current)
|
|
165
|
+
return;
|
|
166
|
+
setIsOpen(true);
|
|
167
|
+
setIsOpening(true);
|
|
168
|
+
mouseDownPositionRef.current = {
|
|
169
|
+
clientX: event.clientX,
|
|
170
|
+
clientY: event.clientY,
|
|
171
|
+
};
|
|
172
|
+
isOpeningTimerRef.current = setTimeout(() => {
|
|
173
|
+
setIsOpening(false);
|
|
174
|
+
isOpeningTimerRef.current = null;
|
|
175
|
+
}, 1000);
|
|
176
|
+
}, [onMouseDown]);
|
|
177
|
+
const handleMouseUp = useCallback((event) => {
|
|
178
|
+
if (onMouseUp)
|
|
179
|
+
onMouseUp(event);
|
|
180
|
+
// If dropdown isn’t open or is already closing, do nothing
|
|
181
|
+
if (!isOpenRef.current || closingTimerRef.current)
|
|
182
|
+
return;
|
|
183
|
+
// If dropdown has no items, do nothing
|
|
184
|
+
if (!hasItemsRef.current)
|
|
185
|
+
return;
|
|
186
|
+
const eventTarget = event.target;
|
|
187
|
+
// If mouse event is within dropdown body, trigger submit
|
|
188
|
+
if (eventTarget.closest(BODY_SELECTOR)) {
|
|
189
|
+
handleSubmitItem(event);
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
// Don’t close dropdown if isOpening or search input is focused
|
|
193
|
+
if (!isOpeningRef.current &&
|
|
194
|
+
inputElementRef.current !== eventTarget.ownerDocument.activeElement) {
|
|
195
|
+
closeDropdown();
|
|
196
|
+
}
|
|
197
|
+
}, [closeDropdown, handleSubmitItem, onMouseUp]);
|
|
140
198
|
const cleanupEventListenersRef = useRef(noop);
|
|
141
199
|
const handleRef = useCallback((ref) => {
|
|
142
200
|
dropdownElementRef.current = ref;
|
|
@@ -153,25 +211,16 @@ const Dropdown = ({ allowEmpty = true, children, className, disabled, hasItems =
|
|
|
153
211
|
inputElement = ref.firstElementChild.querySelector('input:not([type=radio]):not([type=checkbox]):not([type=range]),textarea');
|
|
154
212
|
inputElementRef.current = inputElement;
|
|
155
213
|
}
|
|
156
|
-
const
|
|
214
|
+
const handleGlobalMouseDown = ({ target }) => {
|
|
157
215
|
const eventTarget = target;
|
|
158
216
|
if (dropdownElementRef.current &&
|
|
159
217
|
!dropdownElementRef.current.contains(eventTarget)) {
|
|
160
218
|
// Close dropdown on an outside click
|
|
161
219
|
closeDropdown();
|
|
162
|
-
return;
|
|
163
220
|
}
|
|
164
|
-
if (isOpenRef.current)
|
|
165
|
-
return;
|
|
166
|
-
setIsOpen(true);
|
|
167
|
-
setIsOpening(true);
|
|
168
|
-
mouseDownPositionRef.current = { clientX, clientY };
|
|
169
|
-
isOpeningTimerRef.current = setTimeout(() => {
|
|
170
|
-
setIsOpening(false);
|
|
171
|
-
isOpeningTimerRef.current = null;
|
|
172
|
-
}, 1000);
|
|
173
221
|
};
|
|
174
|
-
const
|
|
222
|
+
const handleGlobalMouseUp = ({ target }) => {
|
|
223
|
+
var _a;
|
|
175
224
|
if (!isOpenRef.current || closingTimerRef.current)
|
|
176
225
|
return;
|
|
177
226
|
// If still isOpening (gets set false 1s after open triggers), set it to false onMouseUp
|
|
@@ -183,18 +232,9 @@ const Dropdown = ({ allowEmpty = true, children, className, disabled, hasItems =
|
|
|
183
232
|
}
|
|
184
233
|
return;
|
|
185
234
|
}
|
|
186
|
-
const
|
|
187
|
-
//
|
|
188
|
-
if (!
|
|
189
|
-
return;
|
|
190
|
-
// If mouseup is on an item, trigger submit item, else close the dropdown
|
|
191
|
-
if (isTargetInBody) {
|
|
192
|
-
handleSubmitItem();
|
|
193
|
-
}
|
|
194
|
-
else if (!inputElementRef.current ||
|
|
195
|
-
(dropdownElementRef.current &&
|
|
196
|
-
dropdownElementRef.current.contains(ownerDocument.activeElement))) {
|
|
197
|
-
// If dropdown is searchable and ref is still focused, this won’t be invoked
|
|
235
|
+
const eventTarget = target;
|
|
236
|
+
// Only handle mouseup events from outside the dropdown here
|
|
237
|
+
if (!((_a = dropdownElementRef.current) === null || _a === void 0 ? void 0 : _a.contains(eventTarget))) {
|
|
198
238
|
closeDropdown();
|
|
199
239
|
}
|
|
200
240
|
};
|
|
@@ -262,7 +302,7 @@ const Dropdown = ({ allowEmpty = true, children, className, disabled, hasItems =
|
|
|
262
302
|
// If dropdown isOpen, handle submitting the value
|
|
263
303
|
if (key === 'Enter' || (key === ' ' && !inputElementRef.current)) {
|
|
264
304
|
onEventHandled();
|
|
265
|
-
handleSubmitItem();
|
|
305
|
+
handleSubmitItem(event);
|
|
266
306
|
return;
|
|
267
307
|
}
|
|
268
308
|
// If dropdown isOpen, handle closing it on escape or spacebar if !hasItems
|
|
@@ -315,10 +355,10 @@ const Dropdown = ({ allowEmpty = true, children, className, disabled, hasItems =
|
|
|
315
355
|
}
|
|
316
356
|
};
|
|
317
357
|
// Close dropdown if any element is focused outside of this dropdown
|
|
318
|
-
const handleFocusIn = (
|
|
358
|
+
const handleFocusIn = ({ target }) => {
|
|
319
359
|
if (!isOpenRef.current)
|
|
320
360
|
return;
|
|
321
|
-
const eventTarget =
|
|
361
|
+
const eventTarget = target;
|
|
322
362
|
// If focused element is a descendant or a parent of the dropdown, do nothing
|
|
323
363
|
if (!dropdownElementRef.current ||
|
|
324
364
|
dropdownElementRef.current.contains(eventTarget) ||
|
|
@@ -329,13 +369,13 @@ const Dropdown = ({ allowEmpty = true, children, className, disabled, hasItems =
|
|
|
329
369
|
};
|
|
330
370
|
document.addEventListener('focusin', handleFocusIn);
|
|
331
371
|
document.addEventListener('keydown', handleKeyDown);
|
|
332
|
-
document.addEventListener('mousedown',
|
|
333
|
-
document.addEventListener('mouseup',
|
|
372
|
+
document.addEventListener('mousedown', handleGlobalMouseDown);
|
|
373
|
+
document.addEventListener('mouseup', handleGlobalMouseUp);
|
|
334
374
|
if (ownerDocument !== document) {
|
|
335
375
|
ownerDocument.addEventListener('focusin', handleFocusIn);
|
|
336
376
|
ownerDocument.addEventListener('keydown', handleKeyDown);
|
|
337
|
-
ownerDocument.addEventListener('mousedown',
|
|
338
|
-
ownerDocument.addEventListener('mouseup',
|
|
377
|
+
ownerDocument.addEventListener('mousedown', handleGlobalMouseDown);
|
|
378
|
+
ownerDocument.addEventListener('mouseup', handleGlobalMouseUp);
|
|
339
379
|
}
|
|
340
380
|
// If dropdown should be open on mount, focus it
|
|
341
381
|
if (isOpenOnMount) {
|
|
@@ -367,13 +407,13 @@ const Dropdown = ({ allowEmpty = true, children, className, disabled, hasItems =
|
|
|
367
407
|
cleanupEventListenersRef.current = () => {
|
|
368
408
|
document.removeEventListener('focusin', handleFocusIn);
|
|
369
409
|
document.removeEventListener('keydown', handleKeyDown);
|
|
370
|
-
document.removeEventListener('mousedown',
|
|
371
|
-
document.removeEventListener('mouseup',
|
|
410
|
+
document.removeEventListener('mousedown', handleGlobalMouseDown);
|
|
411
|
+
document.removeEventListener('mouseup', handleGlobalMouseUp);
|
|
372
412
|
if (ownerDocument !== document) {
|
|
373
413
|
ownerDocument.removeEventListener('focusin', handleFocusIn);
|
|
374
414
|
ownerDocument.removeEventListener('keydown', handleKeyDown);
|
|
375
|
-
ownerDocument.removeEventListener('mousedown',
|
|
376
|
-
ownerDocument.removeEventListener('mouseup',
|
|
415
|
+
ownerDocument.removeEventListener('mousedown', handleGlobalMouseDown);
|
|
416
|
+
ownerDocument.removeEventListener('mouseup', handleGlobalMouseUp);
|
|
377
417
|
}
|
|
378
418
|
if (inputElement) {
|
|
379
419
|
inputElement.removeEventListener('input', handleInput);
|
|
@@ -398,15 +438,15 @@ const Dropdown = ({ allowEmpty = true, children, className, disabled, hasItems =
|
|
|
398
438
|
}
|
|
399
439
|
return (React.createElement(Fragment, null,
|
|
400
440
|
React.createElement(Style, null, STYLES),
|
|
401
|
-
React.createElement("div", { className:
|
|
441
|
+
React.createElement("div", { className: clsx(ROOT_CLASS_NAME, className, {
|
|
402
442
|
disabled,
|
|
403
443
|
'is-open': isOpen,
|
|
404
444
|
'is-searchable': isSearchable,
|
|
405
|
-
}), onClick: onClick, onMouseDown:
|
|
445
|
+
}), onClick: onClick, onMouseDown: handleMouseDown, onMouseUp: handleMouseUp, onMouseMove: handleMouseMove, onMouseOut: handleMouseOut, onMouseOver: handleMouseOver, ref: handleRef, tabIndex: isSearchable || inputElementRef.current || !isTriggerFromProps
|
|
406
446
|
? undefined
|
|
407
447
|
: 0 },
|
|
408
448
|
trigger,
|
|
409
|
-
isOpen ? (React.createElement("div", { className:
|
|
449
|
+
isOpen ? (React.createElement("div", { className: clsx(BODY_CLASS_NAME, {
|
|
410
450
|
'calculating-position': !outOfBounds.hasLayout,
|
|
411
451
|
'has-items': hasItems,
|
|
412
452
|
'out-of-bounds-bottom': outOfBounds.bottom,
|
package/dist/Dropdown.js.flow
CHANGED
package/dist/Dropdown.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dropdown.js","sourceRoot":"","sources":["../src/Dropdown.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Dropdown.js","sourceRoot":"","sources":["../src/Dropdown.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@acusti/dropdown",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.20.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"exports": "./dist/Dropdown.js",
|
|
@@ -22,17 +22,16 @@
|
|
|
22
22
|
"homepage": "https://github.com/acusti/uikit/tree/main/packages/dropdown#readme",
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"@types/react": "^18.0.15",
|
|
25
|
-
"classnames": "^2",
|
|
26
25
|
"typescript": "^4.8.4"
|
|
27
26
|
},
|
|
28
27
|
"dependencies": {
|
|
29
28
|
"@acusti/input-text": "^0.11.0",
|
|
30
29
|
"@acusti/matchmaking": "^0.3.0",
|
|
31
30
|
"@acusti/styling": "^0.5.3",
|
|
32
|
-
"@acusti/use-is-out-of-bounds": "^0.5.0"
|
|
31
|
+
"@acusti/use-is-out-of-bounds": "^0.5.0",
|
|
32
|
+
"clsx": "^1.1.1"
|
|
33
33
|
},
|
|
34
34
|
"peerDependencies": {
|
|
35
|
-
"classnames": "^2",
|
|
36
35
|
"react": "^16.8 || ^17 || ^18",
|
|
37
36
|
"react-dom": "^16.8 || ^17 || ^18"
|
|
38
37
|
}
|
package/src/Dropdown.tsx
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
// TODO
|
|
2
|
-
//
|
|
1
|
+
// TODO fix searching to match on significant parts of value (i.e. not parts that are the same)
|
|
2
|
+
// could also match on ukt-values (see searchable Font Weight example in storybook docs)
|
|
3
3
|
import InputText from '@acusti/input-text';
|
|
4
4
|
import { Style } from '@acusti/styling';
|
|
5
5
|
import useIsOutOfBounds from '@acusti/use-is-out-of-bounds';
|
|
6
|
-
import
|
|
6
|
+
import clsx from 'clsx';
|
|
7
7
|
import * as React from 'react';
|
|
8
8
|
|
|
9
9
|
import {
|
|
@@ -37,6 +37,7 @@ export type Props = {
|
|
|
37
37
|
hasItems?: boolean;
|
|
38
38
|
isOpenOnMount?: boolean;
|
|
39
39
|
isSearchable?: boolean;
|
|
40
|
+
keepOpenOnSubmit?: boolean;
|
|
40
41
|
label?: string;
|
|
41
42
|
/** Only usable in conjunction with {isSearchable: true}; used as search input’s name */
|
|
42
43
|
name?: string;
|
|
@@ -74,6 +75,7 @@ const Dropdown: React.FC<Props> = ({
|
|
|
74
75
|
hasItems = true,
|
|
75
76
|
isOpenOnMount,
|
|
76
77
|
isSearchable,
|
|
78
|
+
keepOpenOnSubmit = !hasItems,
|
|
77
79
|
label,
|
|
78
80
|
name,
|
|
79
81
|
onClick,
|
|
@@ -115,6 +117,7 @@ const Dropdown: React.FC<Props> = ({
|
|
|
115
117
|
const isOpenRef = useRef(isOpen);
|
|
116
118
|
const isOpeningRef = useRef(isOpening);
|
|
117
119
|
const isTriggerFromPropsRef = useRef(isOpening);
|
|
120
|
+
const keepOpenOnSubmitRef = useRef(keepOpenOnSubmit);
|
|
118
121
|
const onSubmitItemRef = useRef(onSubmitItem);
|
|
119
122
|
const valueRef = useRef(value);
|
|
120
123
|
|
|
@@ -124,6 +127,7 @@ const Dropdown: React.FC<Props> = ({
|
|
|
124
127
|
isOpenRef.current = isOpen;
|
|
125
128
|
isOpeningRef.current = isOpening;
|
|
126
129
|
isTriggerFromPropsRef.current = isTriggerFromProps;
|
|
130
|
+
keepOpenOnSubmitRef.current = keepOpenOnSubmit;
|
|
127
131
|
onSubmitItemRef.current = onSubmitItem;
|
|
128
132
|
valueRef.current = value;
|
|
129
133
|
}, [
|
|
@@ -132,6 +136,7 @@ const Dropdown: React.FC<Props> = ({
|
|
|
132
136
|
isOpen,
|
|
133
137
|
isOpening,
|
|
134
138
|
isTriggerFromProps,
|
|
139
|
+
keepOpenOnSubmit,
|
|
135
140
|
onSubmitItem,
|
|
136
141
|
value,
|
|
137
142
|
]);
|
|
@@ -146,43 +151,56 @@ const Dropdown: React.FC<Props> = ({
|
|
|
146
151
|
}
|
|
147
152
|
}, []);
|
|
148
153
|
|
|
149
|
-
const handleSubmitItem = useCallback(
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
154
|
+
const handleSubmitItem = useCallback(
|
|
155
|
+
(event: Event | React.SyntheticEvent<HTMLElement>) => {
|
|
156
|
+
const eventTarget = event.target as HTMLElement;
|
|
157
|
+
if (isOpenRef.current && !keepOpenOnSubmitRef.current) {
|
|
158
|
+
const keepOpen = eventTarget.closest(
|
|
159
|
+
'[data-ukt-keep-open]',
|
|
160
|
+
) as HTMLElement | null;
|
|
161
|
+
// Don’t close dropdown if event occurs w/in data-ukt-keep-open element
|
|
162
|
+
if (
|
|
163
|
+
!keepOpen?.dataset.uktKeepOpen ||
|
|
164
|
+
keepOpen.dataset.uktKeepOpen === 'false'
|
|
165
|
+
) {
|
|
166
|
+
// A short timeout before closing is better UX when user selects an item so dropdown
|
|
167
|
+
// doesn’t close before expected. It also enables using <Link />s in the dropdown body.
|
|
168
|
+
closingTimerRef.current = setTimeout(closeDropdown, 90);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
155
171
|
|
|
156
|
-
|
|
172
|
+
if (!hasItemsRef.current) return;
|
|
157
173
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
174
|
+
const nextElement = getActiveItemElement(dropdownElementRef.current);
|
|
175
|
+
if (!nextElement) {
|
|
176
|
+
// If not allowEmpty, don’t allow submitting an empty item
|
|
177
|
+
if (!allowEmptyRef.current) return;
|
|
178
|
+
// If we have an input element as trigger & the user didn’t clear the text, do nothing
|
|
179
|
+
if (inputElementRef.current?.value) return;
|
|
180
|
+
}
|
|
165
181
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
182
|
+
const label = nextElement?.innerText || '';
|
|
183
|
+
const nextValue = nextElement?.dataset.uktValue || label;
|
|
184
|
+
const nextItem = { element: nextElement, value: nextValue };
|
|
185
|
+
if (inputElementRef.current) {
|
|
186
|
+
inputElementRef.current.value = label;
|
|
187
|
+
if (
|
|
188
|
+
inputElementRef.current ===
|
|
189
|
+
inputElementRef.current.ownerDocument.activeElement
|
|
190
|
+
) {
|
|
191
|
+
inputElementRef.current.blur();
|
|
192
|
+
}
|
|
176
193
|
}
|
|
177
|
-
}
|
|
178
194
|
|
|
179
|
-
|
|
180
|
-
|
|
195
|
+
// If parent is controlling Dropdown via props.value and nextValue is the same, do nothing
|
|
196
|
+
if (valueRef.current && valueRef.current === nextValue) return;
|
|
181
197
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
198
|
+
if (onSubmitItemRef.current) {
|
|
199
|
+
onSubmitItemRef.current(nextItem);
|
|
200
|
+
}
|
|
201
|
+
},
|
|
202
|
+
[closeDropdown],
|
|
203
|
+
);
|
|
186
204
|
|
|
187
205
|
const handleMouseMove = useCallback(
|
|
188
206
|
({ clientX, clientY }: React.MouseEvent<HTMLElement>) => {
|
|
@@ -227,6 +245,61 @@ const Dropdown: React.FC<Props> = ({
|
|
|
227
245
|
}
|
|
228
246
|
}, []);
|
|
229
247
|
|
|
248
|
+
const handleMouseOut = useCallback((event: React.MouseEvent<HTMLElement>) => {
|
|
249
|
+
if (!hasItemsRef.current) return;
|
|
250
|
+
const activeItem = getActiveItemElement(dropdownElementRef.current);
|
|
251
|
+
if (!activeItem) return;
|
|
252
|
+
const eventRelatedTarget = event.relatedTarget as HTMLElement;
|
|
253
|
+
if (activeItem !== event.target || activeItem.contains(eventRelatedTarget))
|
|
254
|
+
return;
|
|
255
|
+
// If user moused out of activeItem (not into a descendant), it’s no longer active
|
|
256
|
+
delete activeItem.dataset.uktActive;
|
|
257
|
+
}, []);
|
|
258
|
+
|
|
259
|
+
const handleMouseDown = useCallback(
|
|
260
|
+
(event: React.MouseEvent<HTMLElement>) => {
|
|
261
|
+
if (onMouseDown) onMouseDown(event);
|
|
262
|
+
if (isOpenRef.current) return;
|
|
263
|
+
|
|
264
|
+
setIsOpen(true);
|
|
265
|
+
setIsOpening(true);
|
|
266
|
+
mouseDownPositionRef.current = {
|
|
267
|
+
clientX: event.clientX,
|
|
268
|
+
clientY: event.clientY,
|
|
269
|
+
};
|
|
270
|
+
isOpeningTimerRef.current = setTimeout(() => {
|
|
271
|
+
setIsOpening(false);
|
|
272
|
+
isOpeningTimerRef.current = null;
|
|
273
|
+
}, 1000);
|
|
274
|
+
},
|
|
275
|
+
[onMouseDown],
|
|
276
|
+
);
|
|
277
|
+
|
|
278
|
+
const handleMouseUp = useCallback(
|
|
279
|
+
(event: React.MouseEvent<HTMLElement>) => {
|
|
280
|
+
if (onMouseUp) onMouseUp(event);
|
|
281
|
+
// If dropdown isn’t open or is already closing, do nothing
|
|
282
|
+
if (!isOpenRef.current || closingTimerRef.current) return;
|
|
283
|
+
// If dropdown has no items, do nothing
|
|
284
|
+
if (!hasItemsRef.current) return;
|
|
285
|
+
|
|
286
|
+
const eventTarget = event.target as HTMLElement;
|
|
287
|
+
// If mouse event is within dropdown body, trigger submit
|
|
288
|
+
if (eventTarget.closest(BODY_SELECTOR)) {
|
|
289
|
+
handleSubmitItem(event);
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
// Don’t close dropdown if isOpening or search input is focused
|
|
293
|
+
if (
|
|
294
|
+
!isOpeningRef.current &&
|
|
295
|
+
inputElementRef.current !== eventTarget.ownerDocument.activeElement
|
|
296
|
+
) {
|
|
297
|
+
closeDropdown();
|
|
298
|
+
}
|
|
299
|
+
},
|
|
300
|
+
[closeDropdown, handleSubmitItem, onMouseUp],
|
|
301
|
+
);
|
|
302
|
+
|
|
230
303
|
const cleanupEventListenersRef = useRef<() => void>(noop);
|
|
231
304
|
|
|
232
305
|
const handleRef = useCallback(
|
|
@@ -249,7 +322,7 @@ const Dropdown: React.FC<Props> = ({
|
|
|
249
322
|
inputElementRef.current = inputElement;
|
|
250
323
|
}
|
|
251
324
|
|
|
252
|
-
const
|
|
325
|
+
const handleGlobalMouseDown = ({ target }: MouseEvent) => {
|
|
253
326
|
const eventTarget = target as HTMLElement;
|
|
254
327
|
if (
|
|
255
328
|
dropdownElementRef.current &&
|
|
@@ -257,21 +330,10 @@ const Dropdown: React.FC<Props> = ({
|
|
|
257
330
|
) {
|
|
258
331
|
// Close dropdown on an outside click
|
|
259
332
|
closeDropdown();
|
|
260
|
-
return;
|
|
261
333
|
}
|
|
262
|
-
|
|
263
|
-
if (isOpenRef.current) return;
|
|
264
|
-
|
|
265
|
-
setIsOpen(true);
|
|
266
|
-
setIsOpening(true);
|
|
267
|
-
mouseDownPositionRef.current = { clientX, clientY };
|
|
268
|
-
isOpeningTimerRef.current = setTimeout(() => {
|
|
269
|
-
setIsOpening(false);
|
|
270
|
-
isOpeningTimerRef.current = null;
|
|
271
|
-
}, 1000);
|
|
272
334
|
};
|
|
273
335
|
|
|
274
|
-
const
|
|
336
|
+
const handleGlobalMouseUp = ({ target }: MouseEvent) => {
|
|
275
337
|
if (!isOpenRef.current || closingTimerRef.current) return;
|
|
276
338
|
|
|
277
339
|
// If still isOpening (gets set false 1s after open triggers), set it to false onMouseUp
|
|
@@ -284,20 +346,9 @@ const Dropdown: React.FC<Props> = ({
|
|
|
284
346
|
return;
|
|
285
347
|
}
|
|
286
348
|
|
|
287
|
-
const
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
if (!hasItemsRef.current && isTargetInBody) return;
|
|
291
|
-
|
|
292
|
-
// If mouseup is on an item, trigger submit item, else close the dropdown
|
|
293
|
-
if (isTargetInBody) {
|
|
294
|
-
handleSubmitItem();
|
|
295
|
-
} else if (
|
|
296
|
-
!inputElementRef.current ||
|
|
297
|
-
(dropdownElementRef.current &&
|
|
298
|
-
dropdownElementRef.current.contains(ownerDocument.activeElement))
|
|
299
|
-
) {
|
|
300
|
-
// If dropdown is searchable and ref is still focused, this won’t be invoked
|
|
349
|
+
const eventTarget = target as HTMLElement;
|
|
350
|
+
// Only handle mouseup events from outside the dropdown here
|
|
351
|
+
if (!dropdownElementRef.current?.contains(eventTarget)) {
|
|
301
352
|
closeDropdown();
|
|
302
353
|
}
|
|
303
354
|
};
|
|
@@ -376,7 +427,7 @@ const Dropdown: React.FC<Props> = ({
|
|
|
376
427
|
// If dropdown isOpen, handle submitting the value
|
|
377
428
|
if (key === 'Enter' || (key === ' ' && !inputElementRef.current)) {
|
|
378
429
|
onEventHandled();
|
|
379
|
-
handleSubmitItem();
|
|
430
|
+
handleSubmitItem(event);
|
|
380
431
|
return;
|
|
381
432
|
}
|
|
382
433
|
// If dropdown isOpen, handle closing it on escape or spacebar if !hasItems
|
|
@@ -432,10 +483,10 @@ const Dropdown: React.FC<Props> = ({
|
|
|
432
483
|
};
|
|
433
484
|
|
|
434
485
|
// Close dropdown if any element is focused outside of this dropdown
|
|
435
|
-
const handleFocusIn = (
|
|
486
|
+
const handleFocusIn = ({ target }: Event) => {
|
|
436
487
|
if (!isOpenRef.current) return;
|
|
437
488
|
|
|
438
|
-
const eventTarget =
|
|
489
|
+
const eventTarget = target as HTMLElement;
|
|
439
490
|
// If focused element is a descendant or a parent of the dropdown, do nothing
|
|
440
491
|
if (
|
|
441
492
|
!dropdownElementRef.current ||
|
|
@@ -450,14 +501,14 @@ const Dropdown: React.FC<Props> = ({
|
|
|
450
501
|
|
|
451
502
|
document.addEventListener('focusin', handleFocusIn);
|
|
452
503
|
document.addEventListener('keydown', handleKeyDown);
|
|
453
|
-
document.addEventListener('mousedown',
|
|
454
|
-
document.addEventListener('mouseup',
|
|
504
|
+
document.addEventListener('mousedown', handleGlobalMouseDown);
|
|
505
|
+
document.addEventListener('mouseup', handleGlobalMouseUp);
|
|
455
506
|
|
|
456
507
|
if (ownerDocument !== document) {
|
|
457
508
|
ownerDocument.addEventListener('focusin', handleFocusIn);
|
|
458
509
|
ownerDocument.addEventListener('keydown', handleKeyDown);
|
|
459
|
-
ownerDocument.addEventListener('mousedown',
|
|
460
|
-
ownerDocument.addEventListener('mouseup',
|
|
510
|
+
ownerDocument.addEventListener('mousedown', handleGlobalMouseDown);
|
|
511
|
+
ownerDocument.addEventListener('mouseup', handleGlobalMouseUp);
|
|
461
512
|
}
|
|
462
513
|
|
|
463
514
|
// If dropdown should be open on mount, focus it
|
|
@@ -494,14 +545,14 @@ const Dropdown: React.FC<Props> = ({
|
|
|
494
545
|
cleanupEventListenersRef.current = () => {
|
|
495
546
|
document.removeEventListener('focusin', handleFocusIn);
|
|
496
547
|
document.removeEventListener('keydown', handleKeyDown);
|
|
497
|
-
document.removeEventListener('mousedown',
|
|
498
|
-
document.removeEventListener('mouseup',
|
|
548
|
+
document.removeEventListener('mousedown', handleGlobalMouseDown);
|
|
549
|
+
document.removeEventListener('mouseup', handleGlobalMouseUp);
|
|
499
550
|
|
|
500
551
|
if (ownerDocument !== document) {
|
|
501
552
|
ownerDocument.removeEventListener('focusin', handleFocusIn);
|
|
502
553
|
ownerDocument.removeEventListener('keydown', handleKeyDown);
|
|
503
|
-
ownerDocument.removeEventListener('mousedown',
|
|
504
|
-
ownerDocument.removeEventListener('mouseup',
|
|
554
|
+
ownerDocument.removeEventListener('mousedown', handleGlobalMouseDown);
|
|
555
|
+
ownerDocument.removeEventListener('mouseup', handleGlobalMouseUp);
|
|
505
556
|
}
|
|
506
557
|
|
|
507
558
|
if (inputElement) {
|
|
@@ -554,15 +605,16 @@ const Dropdown: React.FC<Props> = ({
|
|
|
554
605
|
<Fragment>
|
|
555
606
|
<Style>{STYLES}</Style>
|
|
556
607
|
<div
|
|
557
|
-
className={
|
|
608
|
+
className={clsx(ROOT_CLASS_NAME, className, {
|
|
558
609
|
disabled,
|
|
559
610
|
'is-open': isOpen,
|
|
560
611
|
'is-searchable': isSearchable,
|
|
561
612
|
})}
|
|
562
613
|
onClick={onClick}
|
|
563
|
-
onMouseDown={
|
|
564
|
-
onMouseUp={
|
|
614
|
+
onMouseDown={handleMouseDown}
|
|
615
|
+
onMouseUp={handleMouseUp}
|
|
565
616
|
onMouseMove={handleMouseMove}
|
|
617
|
+
onMouseOut={handleMouseOut}
|
|
566
618
|
onMouseOver={handleMouseOver}
|
|
567
619
|
ref={handleRef}
|
|
568
620
|
tabIndex={
|
|
@@ -574,7 +626,7 @@ const Dropdown: React.FC<Props> = ({
|
|
|
574
626
|
{trigger}
|
|
575
627
|
{isOpen ? (
|
|
576
628
|
<div
|
|
577
|
-
className={
|
|
629
|
+
className={clsx(BODY_CLASS_NAME, {
|
|
578
630
|
'calculating-position': !outOfBounds.hasLayout,
|
|
579
631
|
'has-items': hasItems,
|
|
580
632
|
'out-of-bounds-bottom': outOfBounds.bottom,
|