@acusti/dropdown 0.18.3 → 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 +4 -0
- package/dist/Dropdown.js +87 -47
- package/dist/Dropdown.js.flow +4 -0
- package/dist/Dropdown.js.map +1 -1
- package/package.json +4 -5
- package/src/Dropdown.tsx +135 -74
package/dist/Dropdown.d.ts
CHANGED
|
@@ -15,9 +15,13 @@ 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;
|
|
22
|
+
onClick?: (event: React.MouseEvent<HTMLElement>) => unknown;
|
|
23
|
+
onMouseDown?: (event: React.MouseEvent<HTMLElement>) => unknown;
|
|
24
|
+
onMouseUp?: (event: React.MouseEvent<HTMLElement>) => unknown;
|
|
21
25
|
onSubmitItem?: (payload: Item) => void;
|
|
22
26
|
/** Only usable in conjunction with {isSearchable: true}; used as search input’s placeholder */
|
|
23
27
|
placeholder?: 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, 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
|
-
}), onMouseMove: handleMouseMove, onMouseOver: handleMouseOver, ref: handleRef, tabIndex: isSearchable || inputElementRef.current || !isTriggerFromProps
|
|
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
|
@@ -30,12 +30,16 @@ export type Props = {|
|
|
|
30
30
|
hasItems?: boolean,
|
|
31
31
|
isOpenOnMount?: boolean,
|
|
32
32
|
isSearchable?: boolean,
|
|
33
|
+
keepOpenOnSubmit?: boolean,
|
|
33
34
|
label?: string,
|
|
34
35
|
|
|
35
36
|
/**
|
|
36
37
|
* Only usable in conjunction with {isSearchable: true}; used as search input’s name
|
|
37
38
|
*/
|
|
38
39
|
name?: string,
|
|
40
|
+
onClick?: (event: SyntheticMouseEvent<HTMLElement>) => mixed,
|
|
41
|
+
onMouseDown?: (event: SyntheticMouseEvent<HTMLElement>) => mixed,
|
|
42
|
+
onMouseUp?: (event: SyntheticMouseEvent<HTMLElement>) => mixed,
|
|
39
43
|
onSubmitItem?: (payload: Item) => void,
|
|
40
44
|
|
|
41
45
|
/**
|
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
|
-
"
|
|
26
|
-
"typescript": "~4.6.4"
|
|
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,9 +37,13 @@ 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;
|
|
44
|
+
onClick?: (event: React.MouseEvent<HTMLElement>) => unknown;
|
|
45
|
+
onMouseDown?: (event: React.MouseEvent<HTMLElement>) => unknown;
|
|
46
|
+
onMouseUp?: (event: React.MouseEvent<HTMLElement>) => unknown;
|
|
43
47
|
onSubmitItem?: (payload: Item) => void;
|
|
44
48
|
/** Only usable in conjunction with {isSearchable: true}; used as search input’s placeholder */
|
|
45
49
|
placeholder?: string;
|
|
@@ -71,8 +75,12 @@ const Dropdown: React.FC<Props> = ({
|
|
|
71
75
|
hasItems = true,
|
|
72
76
|
isOpenOnMount,
|
|
73
77
|
isSearchable,
|
|
78
|
+
keepOpenOnSubmit = !hasItems,
|
|
74
79
|
label,
|
|
75
80
|
name,
|
|
81
|
+
onClick,
|
|
82
|
+
onMouseDown,
|
|
83
|
+
onMouseUp,
|
|
76
84
|
onSubmitItem,
|
|
77
85
|
placeholder,
|
|
78
86
|
tabIndex,
|
|
@@ -109,6 +117,7 @@ const Dropdown: React.FC<Props> = ({
|
|
|
109
117
|
const isOpenRef = useRef(isOpen);
|
|
110
118
|
const isOpeningRef = useRef(isOpening);
|
|
111
119
|
const isTriggerFromPropsRef = useRef(isOpening);
|
|
120
|
+
const keepOpenOnSubmitRef = useRef(keepOpenOnSubmit);
|
|
112
121
|
const onSubmitItemRef = useRef(onSubmitItem);
|
|
113
122
|
const valueRef = useRef(value);
|
|
114
123
|
|
|
@@ -118,6 +127,7 @@ const Dropdown: React.FC<Props> = ({
|
|
|
118
127
|
isOpenRef.current = isOpen;
|
|
119
128
|
isOpeningRef.current = isOpening;
|
|
120
129
|
isTriggerFromPropsRef.current = isTriggerFromProps;
|
|
130
|
+
keepOpenOnSubmitRef.current = keepOpenOnSubmit;
|
|
121
131
|
onSubmitItemRef.current = onSubmitItem;
|
|
122
132
|
valueRef.current = value;
|
|
123
133
|
}, [
|
|
@@ -126,6 +136,7 @@ const Dropdown: React.FC<Props> = ({
|
|
|
126
136
|
isOpen,
|
|
127
137
|
isOpening,
|
|
128
138
|
isTriggerFromProps,
|
|
139
|
+
keepOpenOnSubmit,
|
|
129
140
|
onSubmitItem,
|
|
130
141
|
value,
|
|
131
142
|
]);
|
|
@@ -140,43 +151,56 @@ const Dropdown: React.FC<Props> = ({
|
|
|
140
151
|
}
|
|
141
152
|
}, []);
|
|
142
153
|
|
|
143
|
-
const handleSubmitItem = useCallback(
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
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
|
+
}
|
|
149
171
|
|
|
150
|
-
|
|
172
|
+
if (!hasItemsRef.current) return;
|
|
151
173
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
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
|
+
}
|
|
159
181
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
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
|
+
}
|
|
170
193
|
}
|
|
171
|
-
}
|
|
172
194
|
|
|
173
|
-
|
|
174
|
-
|
|
195
|
+
// If parent is controlling Dropdown via props.value and nextValue is the same, do nothing
|
|
196
|
+
if (valueRef.current && valueRef.current === nextValue) return;
|
|
175
197
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
198
|
+
if (onSubmitItemRef.current) {
|
|
199
|
+
onSubmitItemRef.current(nextItem);
|
|
200
|
+
}
|
|
201
|
+
},
|
|
202
|
+
[closeDropdown],
|
|
203
|
+
);
|
|
180
204
|
|
|
181
205
|
const handleMouseMove = useCallback(
|
|
182
206
|
({ clientX, clientY }: React.MouseEvent<HTMLElement>) => {
|
|
@@ -221,6 +245,61 @@ const Dropdown: React.FC<Props> = ({
|
|
|
221
245
|
}
|
|
222
246
|
}, []);
|
|
223
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
|
+
|
|
224
303
|
const cleanupEventListenersRef = useRef<() => void>(noop);
|
|
225
304
|
|
|
226
305
|
const handleRef = useCallback(
|
|
@@ -243,7 +322,7 @@ const Dropdown: React.FC<Props> = ({
|
|
|
243
322
|
inputElementRef.current = inputElement;
|
|
244
323
|
}
|
|
245
324
|
|
|
246
|
-
const
|
|
325
|
+
const handleGlobalMouseDown = ({ target }: MouseEvent) => {
|
|
247
326
|
const eventTarget = target as HTMLElement;
|
|
248
327
|
if (
|
|
249
328
|
dropdownElementRef.current &&
|
|
@@ -251,21 +330,10 @@ const Dropdown: React.FC<Props> = ({
|
|
|
251
330
|
) {
|
|
252
331
|
// Close dropdown on an outside click
|
|
253
332
|
closeDropdown();
|
|
254
|
-
return;
|
|
255
333
|
}
|
|
256
|
-
|
|
257
|
-
if (isOpenRef.current) return;
|
|
258
|
-
|
|
259
|
-
setIsOpen(true);
|
|
260
|
-
setIsOpening(true);
|
|
261
|
-
mouseDownPositionRef.current = { clientX, clientY };
|
|
262
|
-
isOpeningTimerRef.current = setTimeout(() => {
|
|
263
|
-
setIsOpening(false);
|
|
264
|
-
isOpeningTimerRef.current = null;
|
|
265
|
-
}, 1000);
|
|
266
334
|
};
|
|
267
335
|
|
|
268
|
-
const
|
|
336
|
+
const handleGlobalMouseUp = ({ target }: MouseEvent) => {
|
|
269
337
|
if (!isOpenRef.current || closingTimerRef.current) return;
|
|
270
338
|
|
|
271
339
|
// If still isOpening (gets set false 1s after open triggers), set it to false onMouseUp
|
|
@@ -278,20 +346,9 @@ const Dropdown: React.FC<Props> = ({
|
|
|
278
346
|
return;
|
|
279
347
|
}
|
|
280
348
|
|
|
281
|
-
const
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
if (!hasItemsRef.current && isTargetInBody) return;
|
|
285
|
-
|
|
286
|
-
// If mouseup is on an item, trigger submit item, else close the dropdown
|
|
287
|
-
if (isTargetInBody) {
|
|
288
|
-
handleSubmitItem();
|
|
289
|
-
} else if (
|
|
290
|
-
!inputElementRef.current ||
|
|
291
|
-
(dropdownElementRef.current &&
|
|
292
|
-
dropdownElementRef.current.contains(ownerDocument.activeElement))
|
|
293
|
-
) {
|
|
294
|
-
// 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)) {
|
|
295
352
|
closeDropdown();
|
|
296
353
|
}
|
|
297
354
|
};
|
|
@@ -370,7 +427,7 @@ const Dropdown: React.FC<Props> = ({
|
|
|
370
427
|
// If dropdown isOpen, handle submitting the value
|
|
371
428
|
if (key === 'Enter' || (key === ' ' && !inputElementRef.current)) {
|
|
372
429
|
onEventHandled();
|
|
373
|
-
handleSubmitItem();
|
|
430
|
+
handleSubmitItem(event);
|
|
374
431
|
return;
|
|
375
432
|
}
|
|
376
433
|
// If dropdown isOpen, handle closing it on escape or spacebar if !hasItems
|
|
@@ -426,10 +483,10 @@ const Dropdown: React.FC<Props> = ({
|
|
|
426
483
|
};
|
|
427
484
|
|
|
428
485
|
// Close dropdown if any element is focused outside of this dropdown
|
|
429
|
-
const handleFocusIn = (
|
|
486
|
+
const handleFocusIn = ({ target }: Event) => {
|
|
430
487
|
if (!isOpenRef.current) return;
|
|
431
488
|
|
|
432
|
-
const eventTarget =
|
|
489
|
+
const eventTarget = target as HTMLElement;
|
|
433
490
|
// If focused element is a descendant or a parent of the dropdown, do nothing
|
|
434
491
|
if (
|
|
435
492
|
!dropdownElementRef.current ||
|
|
@@ -444,14 +501,14 @@ const Dropdown: React.FC<Props> = ({
|
|
|
444
501
|
|
|
445
502
|
document.addEventListener('focusin', handleFocusIn);
|
|
446
503
|
document.addEventListener('keydown', handleKeyDown);
|
|
447
|
-
document.addEventListener('mousedown',
|
|
448
|
-
document.addEventListener('mouseup',
|
|
504
|
+
document.addEventListener('mousedown', handleGlobalMouseDown);
|
|
505
|
+
document.addEventListener('mouseup', handleGlobalMouseUp);
|
|
449
506
|
|
|
450
507
|
if (ownerDocument !== document) {
|
|
451
508
|
ownerDocument.addEventListener('focusin', handleFocusIn);
|
|
452
509
|
ownerDocument.addEventListener('keydown', handleKeyDown);
|
|
453
|
-
ownerDocument.addEventListener('mousedown',
|
|
454
|
-
ownerDocument.addEventListener('mouseup',
|
|
510
|
+
ownerDocument.addEventListener('mousedown', handleGlobalMouseDown);
|
|
511
|
+
ownerDocument.addEventListener('mouseup', handleGlobalMouseUp);
|
|
455
512
|
}
|
|
456
513
|
|
|
457
514
|
// If dropdown should be open on mount, focus it
|
|
@@ -488,14 +545,14 @@ const Dropdown: React.FC<Props> = ({
|
|
|
488
545
|
cleanupEventListenersRef.current = () => {
|
|
489
546
|
document.removeEventListener('focusin', handleFocusIn);
|
|
490
547
|
document.removeEventListener('keydown', handleKeyDown);
|
|
491
|
-
document.removeEventListener('mousedown',
|
|
492
|
-
document.removeEventListener('mouseup',
|
|
548
|
+
document.removeEventListener('mousedown', handleGlobalMouseDown);
|
|
549
|
+
document.removeEventListener('mouseup', handleGlobalMouseUp);
|
|
493
550
|
|
|
494
551
|
if (ownerDocument !== document) {
|
|
495
552
|
ownerDocument.removeEventListener('focusin', handleFocusIn);
|
|
496
553
|
ownerDocument.removeEventListener('keydown', handleKeyDown);
|
|
497
|
-
ownerDocument.removeEventListener('mousedown',
|
|
498
|
-
ownerDocument.removeEventListener('mouseup',
|
|
554
|
+
ownerDocument.removeEventListener('mousedown', handleGlobalMouseDown);
|
|
555
|
+
ownerDocument.removeEventListener('mouseup', handleGlobalMouseUp);
|
|
499
556
|
}
|
|
500
557
|
|
|
501
558
|
if (inputElement) {
|
|
@@ -548,12 +605,16 @@ const Dropdown: React.FC<Props> = ({
|
|
|
548
605
|
<Fragment>
|
|
549
606
|
<Style>{STYLES}</Style>
|
|
550
607
|
<div
|
|
551
|
-
className={
|
|
608
|
+
className={clsx(ROOT_CLASS_NAME, className, {
|
|
552
609
|
disabled,
|
|
553
610
|
'is-open': isOpen,
|
|
554
611
|
'is-searchable': isSearchable,
|
|
555
612
|
})}
|
|
613
|
+
onClick={onClick}
|
|
614
|
+
onMouseDown={handleMouseDown}
|
|
615
|
+
onMouseUp={handleMouseUp}
|
|
556
616
|
onMouseMove={handleMouseMove}
|
|
617
|
+
onMouseOut={handleMouseOut}
|
|
557
618
|
onMouseOver={handleMouseOver}
|
|
558
619
|
ref={handleRef}
|
|
559
620
|
tabIndex={
|
|
@@ -565,7 +626,7 @@ const Dropdown: React.FC<Props> = ({
|
|
|
565
626
|
{trigger}
|
|
566
627
|
{isOpen ? (
|
|
567
628
|
<div
|
|
568
|
-
className={
|
|
629
|
+
className={clsx(BODY_CLASS_NAME, {
|
|
569
630
|
'calculating-position': !outOfBounds.hasLayout,
|
|
570
631
|
'has-items': hasItems,
|
|
571
632
|
'out-of-bounds-bottom': outOfBounds.bottom,
|