@oxyhq/bloom 0.33.0 → 0.33.1
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/lib/commonjs/command/Command.js +49 -2
- package/lib/commonjs/command/Command.js.map +1 -1
- package/lib/module/command/Command.js +50 -3
- package/lib/module/command/Command.js.map +1 -1
- package/lib/typescript/commonjs/command/Command.d.ts +14 -0
- package/lib/typescript/commonjs/command/Command.d.ts.map +1 -1
- package/lib/typescript/module/command/Command.d.ts +14 -0
- package/lib/typescript/module/command/Command.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/Command.test.tsx +122 -1
- package/src/command/Command.tsx +50 -3
|
@@ -13,6 +13,7 @@ var _index2 = require("../item/index.js");
|
|
|
13
13
|
var _index3 = require("../kbd/index.js");
|
|
14
14
|
var _index4 = require("../search-input/index.js");
|
|
15
15
|
var _tokens = require("../styles/tokens.js");
|
|
16
|
+
var _context = require("../dialog/context.js");
|
|
16
17
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
17
18
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
18
19
|
/** Centered command-palette max width (px). Matches the legacy palette card. */
|
|
@@ -34,6 +35,20 @@ function defaultFilter(item, query) {
|
|
|
34
35
|
* `SearchInput`, an `Item` results list and `Kbd` shortcut hints. Items group
|
|
35
36
|
* by their `group` field (ungrouped first). On web the list is
|
|
36
37
|
* keyboard-navigable (Up/Down/Enter); on native, tap to select.
|
|
38
|
+
*
|
|
39
|
+
* Control mode — IMPERATIVE, not controlled. `Command` keeps its public
|
|
40
|
+
* *controlled* API (`visible` boolean + `onClose`) but internally bridges it
|
|
41
|
+
* onto the Dialog's imperative `useDialogControl()` handle, exactly like
|
|
42
|
+
* `AlertDialog`. This makes `Command` the LAST controlled-`open` `Dialog`
|
|
43
|
+
* consumer to move onto the imperative path every other surface uses
|
|
44
|
+
* (`alert()`, `confirm()`, native `Menu`/`Select`/`ContextMenu`, Mention's
|
|
45
|
+
* dialogs), so there is one code path across the ecosystem. It also guarantees
|
|
46
|
+
* the palette's exit animation on the dismiss path even for a consumer that
|
|
47
|
+
* unmounts the palette in response to `onClose` (`{open && <Command …/>}`): the
|
|
48
|
+
* imperative `close()` runs the exit animation FIRST and fires `onClose` only
|
|
49
|
+
* once it settles, whereas the controlled `open` path fires `onClose`
|
|
50
|
+
* synchronously — which, for an unmount-on-close consumer, would tear the
|
|
51
|
+
* surface down before it could animate out.
|
|
37
52
|
*/
|
|
38
53
|
function createCommand(Dialog) {
|
|
39
54
|
const Command = function Command({
|
|
@@ -50,6 +65,7 @@ function createCommand(Dialog) {
|
|
|
50
65
|
testID
|
|
51
66
|
}) {
|
|
52
67
|
const theme = (0, _useTheme.useTheme)();
|
|
68
|
+
const control = (0, _context.useDialogControl)();
|
|
53
69
|
const searchRef = (0, _react.useRef)(null);
|
|
54
70
|
const [activeIndex, setActiveIndex] = (0, _react.useState)(0);
|
|
55
71
|
const [query, setQuery] = (0, _useControllableState.useControllableState)({
|
|
@@ -129,6 +145,37 @@ function createCommand(Dialog) {
|
|
|
129
145
|
onClose();
|
|
130
146
|
}, [setQuery, onClose]);
|
|
131
147
|
|
|
148
|
+
// Bridge the public *controlled* `visible` prop onto the Dialog's imperative
|
|
149
|
+
// open/close (mirrors `AlertDialog`). `control` is referentially stable
|
|
150
|
+
// (memoised on its id), so this effect only re-runs when `visible` actually
|
|
151
|
+
// flips. Opening straight from an effect on mount matches bloom's own
|
|
152
|
+
// `AutoMountedDialog`. When a consumer flips `visible` to `false` (their own
|
|
153
|
+
// close, or after a select), we imperatively `close()` so the exit animation
|
|
154
|
+
// still plays.
|
|
155
|
+
const closingFromPropRef = (0, _react.useRef)(false);
|
|
156
|
+
(0, _react.useEffect)(() => {
|
|
157
|
+
if (visible) {
|
|
158
|
+
control.open();
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
closingFromPropRef.current = true;
|
|
162
|
+
control.close();
|
|
163
|
+
}, [visible, control]);
|
|
164
|
+
|
|
165
|
+
// The Dialog fires `onClose` after the exit animation settles (imperative
|
|
166
|
+
// mode). Forward ONLY user-initiated dismissals (backdrop / Escape) to the
|
|
167
|
+
// consumer — a consumer-initiated close (they flipped `visible` to `false`,
|
|
168
|
+
// e.g. `select` already called `onClose`) must not re-enter `onClose`,
|
|
169
|
+
// preserving the previous controlled semantics where a programmatic close
|
|
170
|
+
// does not fire `onClose` a second time.
|
|
171
|
+
const handleClose = (0, _react.useCallback)(() => {
|
|
172
|
+
if (closingFromPropRef.current) {
|
|
173
|
+
closingFromPropRef.current = false;
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
onClose();
|
|
177
|
+
}, [onClose]);
|
|
178
|
+
|
|
132
179
|
// Web keyboard navigation on the search input.
|
|
133
180
|
const webKeyHandler = _reactNative.Platform.OS === 'web' ? {
|
|
134
181
|
onKeyDown: e => {
|
|
@@ -152,8 +199,8 @@ function createCommand(Dialog) {
|
|
|
152
199
|
}
|
|
153
200
|
} : {};
|
|
154
201
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(Dialog, {
|
|
155
|
-
|
|
156
|
-
onClose:
|
|
202
|
+
control: control,
|
|
203
|
+
onClose: handleClose,
|
|
157
204
|
placement: "center",
|
|
158
205
|
dismissOnBackdrop: true,
|
|
159
206
|
maxWidth: COMMAND_MAX_WIDTH,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_useTheme","_useControllableState","_index","_index2","_index3","_index4","_tokens","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","COMMAND_MAX_WIDTH","defaultFilter","item","query","q","trim","toLowerCase","label","includes","description","keywords","some","k","createCommand","Dialog","Command","visible","onClose","items","placeholder","emptyText","queryProp","onQueryChange","filter","maxListHeight","style","testID","theme","useTheme","searchRef","useRef","activeIndex","setActiveIndex","useState","setQuery","useControllableState","value","defaultValue","onChange","filtered","useMemo","it","entries","selectable","groups","Map","ungrouped","group","arr","push","flat","sel","pushItem","type","selectableIndex","length","prevQueryRef","current","prevVisibleRef","Platform","OS","requestAnimationFrame","focus","clampedActive","Math","min","max","select","useCallback","disabled","onSelect","webKeyHandler","onKeyDown","key","preventDefault","jsx","open","placement","dismissOnBackdrop","maxWidth","styles","panel","children","jsxs","View","searchWrap","borderBottomColor","colors","borderLight","SearchInput","ref","onChangeText","onClearText","autoFocus","empty","Text","color","textSecondary","fontSize","sm","ScrollView","maxHeight","contentContainerStyle","list","keyboardShouldPersistTaps","showsVerticalScrollIndicator","map","entry","groupHeader","textTertiary","Icon","icon","isActive","Item","title","subtitle","density","active","role","onPress","leading","size","fill","trailing","shortcut","Kbd","id","displayName","StyleSheet","create","paddingTop","paddingHorizontal","paddingBottom","space","xs","md","borderBottomWidth","hairlineWidth","fontWeight","textTransform","letterSpacing","lg","paddingVertical","_2xl","alignItems"],"sourceRoot":"../../../src","sources":["command/Command.tsx"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_useTheme","_useControllableState","_index","_index2","_index3","_index4","_tokens","_context","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","COMMAND_MAX_WIDTH","defaultFilter","item","query","q","trim","toLowerCase","label","includes","description","keywords","some","k","createCommand","Dialog","Command","visible","onClose","items","placeholder","emptyText","queryProp","onQueryChange","filter","maxListHeight","style","testID","theme","useTheme","control","useDialogControl","searchRef","useRef","activeIndex","setActiveIndex","useState","setQuery","useControllableState","value","defaultValue","onChange","filtered","useMemo","it","entries","selectable","groups","Map","ungrouped","group","arr","push","flat","sel","pushItem","type","selectableIndex","length","prevQueryRef","current","prevVisibleRef","Platform","OS","requestAnimationFrame","focus","clampedActive","Math","min","max","select","useCallback","disabled","onSelect","closingFromPropRef","useEffect","open","close","handleClose","webKeyHandler","onKeyDown","key","preventDefault","jsx","placement","dismissOnBackdrop","maxWidth","styles","panel","children","jsxs","View","searchWrap","borderBottomColor","colors","borderLight","SearchInput","ref","onChangeText","onClearText","autoFocus","empty","Text","color","textSecondary","fontSize","sm","ScrollView","maxHeight","contentContainerStyle","list","keyboardShouldPersistTaps","showsVerticalScrollIndicator","map","entry","groupHeader","textTertiary","Icon","icon","isActive","Item","title","subtitle","density","active","role","onPress","leading","size","fill","trailing","shortcut","Kbd","id","displayName","StyleSheet","create","paddingTop","paddingHorizontal","paddingBottom","space","xs","md","borderBottomWidth","hairlineWidth","fontWeight","textTransform","letterSpacing","lg","paddingVertical","_2xl","alignItems"],"sourceRoot":"../../../src","sources":["command/Command.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import React, { useCallback, useMemo, useRef, useState } from 'react';
|
|
3
|
+
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
4
4
|
import { Platform, ScrollView, StyleSheet, View } from 'react-native';
|
|
5
5
|
import { useTheme } from "../theme/use-theme.js";
|
|
6
6
|
import { useControllableState } from "../hooks/useControllableState.js";
|
|
@@ -9,6 +9,7 @@ import { Item } from "../item/index.js";
|
|
|
9
9
|
import { Kbd } from "../kbd/index.js";
|
|
10
10
|
import { SearchInput } from "../search-input/index.js";
|
|
11
11
|
import { fontSize, space } from "../styles/tokens.js";
|
|
12
|
+
import { useDialogControl } from "../dialog/context.js";
|
|
12
13
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
14
|
/** Centered command-palette max width (px). Matches the legacy palette card. */
|
|
14
15
|
const COMMAND_MAX_WIDTH = 560;
|
|
@@ -29,6 +30,20 @@ function defaultFilter(item, query) {
|
|
|
29
30
|
* `SearchInput`, an `Item` results list and `Kbd` shortcut hints. Items group
|
|
30
31
|
* by their `group` field (ungrouped first). On web the list is
|
|
31
32
|
* keyboard-navigable (Up/Down/Enter); on native, tap to select.
|
|
33
|
+
*
|
|
34
|
+
* Control mode — IMPERATIVE, not controlled. `Command` keeps its public
|
|
35
|
+
* *controlled* API (`visible` boolean + `onClose`) but internally bridges it
|
|
36
|
+
* onto the Dialog's imperative `useDialogControl()` handle, exactly like
|
|
37
|
+
* `AlertDialog`. This makes `Command` the LAST controlled-`open` `Dialog`
|
|
38
|
+
* consumer to move onto the imperative path every other surface uses
|
|
39
|
+
* (`alert()`, `confirm()`, native `Menu`/`Select`/`ContextMenu`, Mention's
|
|
40
|
+
* dialogs), so there is one code path across the ecosystem. It also guarantees
|
|
41
|
+
* the palette's exit animation on the dismiss path even for a consumer that
|
|
42
|
+
* unmounts the palette in response to `onClose` (`{open && <Command …/>}`): the
|
|
43
|
+
* imperative `close()` runs the exit animation FIRST and fires `onClose` only
|
|
44
|
+
* once it settles, whereas the controlled `open` path fires `onClose`
|
|
45
|
+
* synchronously — which, for an unmount-on-close consumer, would tear the
|
|
46
|
+
* surface down before it could animate out.
|
|
32
47
|
*/
|
|
33
48
|
export function createCommand(Dialog) {
|
|
34
49
|
const Command = function Command({
|
|
@@ -45,6 +60,7 @@ export function createCommand(Dialog) {
|
|
|
45
60
|
testID
|
|
46
61
|
}) {
|
|
47
62
|
const theme = useTheme();
|
|
63
|
+
const control = useDialogControl();
|
|
48
64
|
const searchRef = useRef(null);
|
|
49
65
|
const [activeIndex, setActiveIndex] = useState(0);
|
|
50
66
|
const [query, setQuery] = useControllableState({
|
|
@@ -124,6 +140,37 @@ export function createCommand(Dialog) {
|
|
|
124
140
|
onClose();
|
|
125
141
|
}, [setQuery, onClose]);
|
|
126
142
|
|
|
143
|
+
// Bridge the public *controlled* `visible` prop onto the Dialog's imperative
|
|
144
|
+
// open/close (mirrors `AlertDialog`). `control` is referentially stable
|
|
145
|
+
// (memoised on its id), so this effect only re-runs when `visible` actually
|
|
146
|
+
// flips. Opening straight from an effect on mount matches bloom's own
|
|
147
|
+
// `AutoMountedDialog`. When a consumer flips `visible` to `false` (their own
|
|
148
|
+
// close, or after a select), we imperatively `close()` so the exit animation
|
|
149
|
+
// still plays.
|
|
150
|
+
const closingFromPropRef = useRef(false);
|
|
151
|
+
useEffect(() => {
|
|
152
|
+
if (visible) {
|
|
153
|
+
control.open();
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
closingFromPropRef.current = true;
|
|
157
|
+
control.close();
|
|
158
|
+
}, [visible, control]);
|
|
159
|
+
|
|
160
|
+
// The Dialog fires `onClose` after the exit animation settles (imperative
|
|
161
|
+
// mode). Forward ONLY user-initiated dismissals (backdrop / Escape) to the
|
|
162
|
+
// consumer — a consumer-initiated close (they flipped `visible` to `false`,
|
|
163
|
+
// e.g. `select` already called `onClose`) must not re-enter `onClose`,
|
|
164
|
+
// preserving the previous controlled semantics where a programmatic close
|
|
165
|
+
// does not fire `onClose` a second time.
|
|
166
|
+
const handleClose = useCallback(() => {
|
|
167
|
+
if (closingFromPropRef.current) {
|
|
168
|
+
closingFromPropRef.current = false;
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
onClose();
|
|
172
|
+
}, [onClose]);
|
|
173
|
+
|
|
127
174
|
// Web keyboard navigation on the search input.
|
|
128
175
|
const webKeyHandler = Platform.OS === 'web' ? {
|
|
129
176
|
onKeyDown: e => {
|
|
@@ -147,8 +194,8 @@ export function createCommand(Dialog) {
|
|
|
147
194
|
}
|
|
148
195
|
} : {};
|
|
149
196
|
return /*#__PURE__*/_jsx(Dialog, {
|
|
150
|
-
|
|
151
|
-
onClose:
|
|
197
|
+
control: control,
|
|
198
|
+
onClose: handleClose,
|
|
152
199
|
placement: "center",
|
|
153
200
|
dismissOnBackdrop: true,
|
|
154
201
|
maxWidth: COMMAND_MAX_WIDTH,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useCallback","useMemo","useRef","useState","Platform","ScrollView","StyleSheet","View","useTheme","useControllableState","Text","Item","Kbd","SearchInput","fontSize","space","jsx","_jsx","jsxs","_jsxs","COMMAND_MAX_WIDTH","defaultFilter","item","query","q","trim","toLowerCase","label","includes","description","keywords","some","k","createCommand","Dialog","Command","visible","onClose","items","placeholder","emptyText","queryProp","onQueryChange","filter","maxListHeight","style","testID","theme","searchRef","activeIndex","setActiveIndex","setQuery","value","defaultValue","onChange","filtered","it","entries","selectable","groups","Map","ungrouped","group","arr","get","push","set","flat","sel","pushItem","type","selectableIndex","length","prevQueryRef","current","prevVisibleRef","OS","requestAnimationFrame","focus","clampedActive","Math","min","max","select","disabled","onSelect","webKeyHandler","onKeyDown","e","key","preventDefault","i","
|
|
1
|
+
{"version":3,"names":["React","useCallback","useEffect","useMemo","useRef","useState","Platform","ScrollView","StyleSheet","View","useTheme","useControllableState","Text","Item","Kbd","SearchInput","fontSize","space","useDialogControl","jsx","_jsx","jsxs","_jsxs","COMMAND_MAX_WIDTH","defaultFilter","item","query","q","trim","toLowerCase","label","includes","description","keywords","some","k","createCommand","Dialog","Command","visible","onClose","items","placeholder","emptyText","queryProp","onQueryChange","filter","maxListHeight","style","testID","theme","control","searchRef","activeIndex","setActiveIndex","setQuery","value","defaultValue","onChange","filtered","it","entries","selectable","groups","Map","ungrouped","group","arr","get","push","set","flat","sel","pushItem","type","selectableIndex","length","prevQueryRef","current","prevVisibleRef","OS","requestAnimationFrame","focus","clampedActive","Math","min","max","select","disabled","onSelect","closingFromPropRef","open","close","handleClose","webKeyHandler","onKeyDown","e","key","preventDefault","i","placement","dismissOnBackdrop","maxWidth","styles","panel","children","searchWrap","borderBottomColor","colors","borderLight","ref","onChangeText","onClearText","autoFocus","empty","color","textSecondary","sm","maxHeight","contentContainerStyle","list","keyboardShouldPersistTaps","showsVerticalScrollIndicator","map","entry","groupHeader","textTertiary","Icon","icon","isActive","title","subtitle","density","active","role","onPress","leading","size","fill","trailing","shortcut","id","displayName","create","paddingTop","paddingHorizontal","paddingBottom","xs","md","borderBottomWidth","hairlineWidth","fontWeight","textTransform","letterSpacing","lg","paddingVertical","_2xl","alignItems"],"sourceRoot":"../../../src","sources":["command/Command.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -12,6 +12,20 @@ type DialogComponent = React.ComponentType<DialogProps>;
|
|
|
12
12
|
* `SearchInput`, an `Item` results list and `Kbd` shortcut hints. Items group
|
|
13
13
|
* by their `group` field (ungrouped first). On web the list is
|
|
14
14
|
* keyboard-navigable (Up/Down/Enter); on native, tap to select.
|
|
15
|
+
*
|
|
16
|
+
* Control mode — IMPERATIVE, not controlled. `Command` keeps its public
|
|
17
|
+
* *controlled* API (`visible` boolean + `onClose`) but internally bridges it
|
|
18
|
+
* onto the Dialog's imperative `useDialogControl()` handle, exactly like
|
|
19
|
+
* `AlertDialog`. This makes `Command` the LAST controlled-`open` `Dialog`
|
|
20
|
+
* consumer to move onto the imperative path every other surface uses
|
|
21
|
+
* (`alert()`, `confirm()`, native `Menu`/`Select`/`ContextMenu`, Mention's
|
|
22
|
+
* dialogs), so there is one code path across the ecosystem. It also guarantees
|
|
23
|
+
* the palette's exit animation on the dismiss path even for a consumer that
|
|
24
|
+
* unmounts the palette in response to `onClose` (`{open && <Command …/>}`): the
|
|
25
|
+
* imperative `close()` runs the exit animation FIRST and fires `onClose` only
|
|
26
|
+
* once it settles, whereas the controlled `open` path fires `onClose`
|
|
27
|
+
* synchronously — which, for an unmount-on-close consumer, would tear the
|
|
28
|
+
* surface down before it could animate out.
|
|
15
29
|
*/
|
|
16
30
|
export declare function createCommand(Dialog: DialogComponent): {
|
|
17
31
|
({ visible, onClose, items, placeholder, emptyText, query: queryProp, onQueryChange, filter, maxListHeight, style, testID, }: CommandProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Command.d.ts","sourceRoot":"","sources":["../../../../src/command/Command.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Command.d.ts","sourceRoot":"","sources":["../../../../src/command/Command.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAgBjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,SAAS,CAAC;AAEzD,KAAK,eAAe,GAAG,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;AAqBxD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe;kIAahD,YAAY;;EA2NhB;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC"}
|
|
@@ -12,6 +12,20 @@ type DialogComponent = React.ComponentType<DialogProps>;
|
|
|
12
12
|
* `SearchInput`, an `Item` results list and `Kbd` shortcut hints. Items group
|
|
13
13
|
* by their `group` field (ungrouped first). On web the list is
|
|
14
14
|
* keyboard-navigable (Up/Down/Enter); on native, tap to select.
|
|
15
|
+
*
|
|
16
|
+
* Control mode — IMPERATIVE, not controlled. `Command` keeps its public
|
|
17
|
+
* *controlled* API (`visible` boolean + `onClose`) but internally bridges it
|
|
18
|
+
* onto the Dialog's imperative `useDialogControl()` handle, exactly like
|
|
19
|
+
* `AlertDialog`. This makes `Command` the LAST controlled-`open` `Dialog`
|
|
20
|
+
* consumer to move onto the imperative path every other surface uses
|
|
21
|
+
* (`alert()`, `confirm()`, native `Menu`/`Select`/`ContextMenu`, Mention's
|
|
22
|
+
* dialogs), so there is one code path across the ecosystem. It also guarantees
|
|
23
|
+
* the palette's exit animation on the dismiss path even for a consumer that
|
|
24
|
+
* unmounts the palette in response to `onClose` (`{open && <Command …/>}`): the
|
|
25
|
+
* imperative `close()` runs the exit animation FIRST and fires `onClose` only
|
|
26
|
+
* once it settles, whereas the controlled `open` path fires `onClose`
|
|
27
|
+
* synchronously — which, for an unmount-on-close consumer, would tear the
|
|
28
|
+
* surface down before it could animate out.
|
|
15
29
|
*/
|
|
16
30
|
export declare function createCommand(Dialog: DialogComponent): {
|
|
17
31
|
({ visible, onClose, items, placeholder, emptyText, query: queryProp, onQueryChange, filter, maxListHeight, style, testID, }: CommandProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Command.d.ts","sourceRoot":"","sources":["../../../../src/command/Command.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Command.d.ts","sourceRoot":"","sources":["../../../../src/command/Command.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAgBjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,SAAS,CAAC;AAEzD,KAAK,eAAe,GAAG,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;AAqBxD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe;kIAahD,YAAY;;EA2NhB;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import React from 'react';
|
|
1
|
+
import React, { useImperativeHandle } from 'react';
|
|
2
2
|
import { act, fireEvent, render } from '@testing-library/react-native';
|
|
3
3
|
|
|
4
4
|
import { Command } from '../command';
|
|
5
|
+
import { createCommand } from '../command/Command';
|
|
5
6
|
import type { CommandItem } from '../command';
|
|
7
|
+
import type { DialogProps } from '../dialog';
|
|
6
8
|
import { BloomThemeProvider } from '../theme/BloomThemeProvider';
|
|
7
9
|
|
|
8
10
|
function renderWithTheme(ui: React.ReactElement) {
|
|
@@ -104,4 +106,123 @@ describe('Command (built on Dialog)', () => {
|
|
|
104
106
|
expect(onSelect).toHaveBeenCalledTimes(1);
|
|
105
107
|
expect(onClose).toHaveBeenCalledTimes(1);
|
|
106
108
|
});
|
|
109
|
+
|
|
110
|
+
// The migration off the controlled `open` prop onto the imperative `control`
|
|
111
|
+
// handle (making `Command` the last controlled-mode `Dialog` consumer to move
|
|
112
|
+
// over). These pin the fix at the prop boundary between `Command` and the
|
|
113
|
+
// underlying `Dialog`, using a prop-capturing mock `Dialog` so the assertions
|
|
114
|
+
// are deterministic and platform-agnostic — mirroring `AlertDialog`'s round.
|
|
115
|
+
describe('control-mode bridge', () => {
|
|
116
|
+
function captureDialogProps() {
|
|
117
|
+
const captured: { props?: DialogProps } = {};
|
|
118
|
+
const MockDialog = (props: DialogProps) => {
|
|
119
|
+
captured.props = props;
|
|
120
|
+
return null;
|
|
121
|
+
};
|
|
122
|
+
return { captured, MockDialog };
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
it('drives the underlying Dialog imperatively (control), never the controlled `open` prop', () => {
|
|
126
|
+
const { captured, MockDialog } = captureDialogProps();
|
|
127
|
+
const TestCommand = createCommand(MockDialog);
|
|
128
|
+
renderWithTheme(
|
|
129
|
+
<TestCommand visible onClose={() => {}} items={makeItems(() => {})} />,
|
|
130
|
+
);
|
|
131
|
+
// The whole point of the migration: `Command` must take the Dialog's
|
|
132
|
+
// imperative/uncontrolled branch (the one that plays the exit animation on
|
|
133
|
+
// dismiss), so an imperative `control` handle is passed and the controlled
|
|
134
|
+
// `open` boolean — which fires `onClose` synchronously — is never set.
|
|
135
|
+
expect(captured.props?.control).toBeDefined();
|
|
136
|
+
expect(captured.props?.open).toBeUndefined();
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
// A mock Dialog that registers the real imperative contract on `control.ref`
|
|
140
|
+
// (so `Command`'s `control.open()` / `control.close()` proxy through it) and
|
|
141
|
+
// fires `onClose` when imperatively closed — modelling the real Dialog,
|
|
142
|
+
// which invokes `onClose` only AFTER its exit animation settles.
|
|
143
|
+
function ImperativeMockDialog(props: DialogProps) {
|
|
144
|
+
const onCloseRef = React.useRef(props.onClose);
|
|
145
|
+
onCloseRef.current = props.onClose;
|
|
146
|
+
useImperativeHandle(
|
|
147
|
+
props.control?.ref,
|
|
148
|
+
() => ({
|
|
149
|
+
open: () => {},
|
|
150
|
+
// The real Dialog fires `onClose` post-exit-animation.
|
|
151
|
+
close: () => onCloseRef.current?.(),
|
|
152
|
+
}),
|
|
153
|
+
[],
|
|
154
|
+
);
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
it('opens the Dialog imperatively on mount when visible, and closes it when visible flips false', () => {
|
|
159
|
+
const spies = { open: jest.fn(), close: jest.fn() };
|
|
160
|
+
const MockDialog = (props: DialogProps) => {
|
|
161
|
+
useImperativeHandle(props.control?.ref, () => spies, []);
|
|
162
|
+
return null;
|
|
163
|
+
};
|
|
164
|
+
const TestCommand = createCommand(MockDialog);
|
|
165
|
+
const { rerender } = renderWithTheme(
|
|
166
|
+
<TestCommand visible onClose={() => {}} items={makeItems(() => {})} />,
|
|
167
|
+
);
|
|
168
|
+
expect(spies.open).toHaveBeenCalledTimes(1);
|
|
169
|
+
expect(spies.close).not.toHaveBeenCalled();
|
|
170
|
+
|
|
171
|
+
act(() => {
|
|
172
|
+
rerender(
|
|
173
|
+
<BloomThemeProvider mode="light" colorPreset="teal">
|
|
174
|
+
<TestCommand
|
|
175
|
+
visible={false}
|
|
176
|
+
onClose={() => {}}
|
|
177
|
+
items={makeItems(() => {})}
|
|
178
|
+
/>
|
|
179
|
+
</BloomThemeProvider>,
|
|
180
|
+
);
|
|
181
|
+
});
|
|
182
|
+
expect(spies.close).toHaveBeenCalledTimes(1);
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
it('forwards a user dismissal (backdrop / Escape) through onClose', () => {
|
|
186
|
+
const spyRef: { fn?: () => void } = {};
|
|
187
|
+
const MockDialog = (props: DialogProps) => {
|
|
188
|
+
spyRef.fn = props.onClose;
|
|
189
|
+
return null;
|
|
190
|
+
};
|
|
191
|
+
const onClose = jest.fn();
|
|
192
|
+
const TestCommand = createCommand(MockDialog);
|
|
193
|
+
renderWithTheme(
|
|
194
|
+
<TestCommand visible onClose={onClose} items={makeItems(() => {})} />,
|
|
195
|
+
);
|
|
196
|
+
// The real Dialog fires `onClose` once its exit animation settles after a
|
|
197
|
+
// backdrop / Escape dismissal. `Command` must forward that to the consumer.
|
|
198
|
+
act(() => {
|
|
199
|
+
spyRef.fn?.();
|
|
200
|
+
});
|
|
201
|
+
expect(onClose).toHaveBeenCalledTimes(1);
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
it('does not re-enter onClose when the consumer closes it (visible → false)', () => {
|
|
205
|
+
const onClose = jest.fn();
|
|
206
|
+
const TestCommand = createCommand(ImperativeMockDialog);
|
|
207
|
+
const { rerender } = renderWithTheme(
|
|
208
|
+
<TestCommand visible onClose={onClose} items={makeItems(() => {})} />,
|
|
209
|
+
);
|
|
210
|
+
act(() => {
|
|
211
|
+
rerender(
|
|
212
|
+
<BloomThemeProvider mode="light" colorPreset="teal">
|
|
213
|
+
<TestCommand
|
|
214
|
+
visible={false}
|
|
215
|
+
onClose={onClose}
|
|
216
|
+
items={makeItems(() => {})}
|
|
217
|
+
/>
|
|
218
|
+
</BloomThemeProvider>,
|
|
219
|
+
);
|
|
220
|
+
});
|
|
221
|
+
// A consumer-initiated close flips `visible` to false → `Command`
|
|
222
|
+
// imperatively `close()`s the Dialog (which fires its post-exit `onClose`).
|
|
223
|
+
// That programmatic close must NOT re-enter the consumer's `onClose`,
|
|
224
|
+
// preserving the previous controlled semantics.
|
|
225
|
+
expect(onClose).not.toHaveBeenCalled();
|
|
226
|
+
});
|
|
227
|
+
});
|
|
107
228
|
});
|
package/src/command/Command.tsx
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useCallback, useMemo, useRef, useState } from 'react';
|
|
1
|
+
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
2
2
|
import {
|
|
3
3
|
Platform,
|
|
4
4
|
ScrollView,
|
|
@@ -15,6 +15,7 @@ import { Kbd } from '../kbd';
|
|
|
15
15
|
import { SearchInput } from '../search-input';
|
|
16
16
|
import { fontSize, space } from '../styles/tokens';
|
|
17
17
|
import type { DialogProps } from '../dialog';
|
|
18
|
+
import { useDialogControl } from '../dialog/context';
|
|
18
19
|
import type { CommandItem, CommandProps } from './types';
|
|
19
20
|
|
|
20
21
|
type DialogComponent = React.ComponentType<DialogProps>;
|
|
@@ -48,6 +49,20 @@ interface FlatEntry {
|
|
|
48
49
|
* `SearchInput`, an `Item` results list and `Kbd` shortcut hints. Items group
|
|
49
50
|
* by their `group` field (ungrouped first). On web the list is
|
|
50
51
|
* keyboard-navigable (Up/Down/Enter); on native, tap to select.
|
|
52
|
+
*
|
|
53
|
+
* Control mode — IMPERATIVE, not controlled. `Command` keeps its public
|
|
54
|
+
* *controlled* API (`visible` boolean + `onClose`) but internally bridges it
|
|
55
|
+
* onto the Dialog's imperative `useDialogControl()` handle, exactly like
|
|
56
|
+
* `AlertDialog`. This makes `Command` the LAST controlled-`open` `Dialog`
|
|
57
|
+
* consumer to move onto the imperative path every other surface uses
|
|
58
|
+
* (`alert()`, `confirm()`, native `Menu`/`Select`/`ContextMenu`, Mention's
|
|
59
|
+
* dialogs), so there is one code path across the ecosystem. It also guarantees
|
|
60
|
+
* the palette's exit animation on the dismiss path even for a consumer that
|
|
61
|
+
* unmounts the palette in response to `onClose` (`{open && <Command …/>}`): the
|
|
62
|
+
* imperative `close()` runs the exit animation FIRST and fires `onClose` only
|
|
63
|
+
* once it settles, whereas the controlled `open` path fires `onClose`
|
|
64
|
+
* synchronously — which, for an unmount-on-close consumer, would tear the
|
|
65
|
+
* surface down before it could animate out.
|
|
51
66
|
*/
|
|
52
67
|
export function createCommand(Dialog: DialogComponent) {
|
|
53
68
|
const Command = function Command({
|
|
@@ -64,6 +79,7 @@ export function createCommand(Dialog: DialogComponent) {
|
|
|
64
79
|
testID,
|
|
65
80
|
}: CommandProps) {
|
|
66
81
|
const theme = useTheme();
|
|
82
|
+
const control = useDialogControl();
|
|
67
83
|
const searchRef = useRef<TextInput>(null);
|
|
68
84
|
const [activeIndex, setActiveIndex] = useState(0);
|
|
69
85
|
|
|
@@ -142,6 +158,37 @@ export function createCommand(Dialog: DialogComponent) {
|
|
|
142
158
|
[setQuery, onClose],
|
|
143
159
|
);
|
|
144
160
|
|
|
161
|
+
// Bridge the public *controlled* `visible` prop onto the Dialog's imperative
|
|
162
|
+
// open/close (mirrors `AlertDialog`). `control` is referentially stable
|
|
163
|
+
// (memoised on its id), so this effect only re-runs when `visible` actually
|
|
164
|
+
// flips. Opening straight from an effect on mount matches bloom's own
|
|
165
|
+
// `AutoMountedDialog`. When a consumer flips `visible` to `false` (their own
|
|
166
|
+
// close, or after a select), we imperatively `close()` so the exit animation
|
|
167
|
+
// still plays.
|
|
168
|
+
const closingFromPropRef = useRef(false);
|
|
169
|
+
useEffect(() => {
|
|
170
|
+
if (visible) {
|
|
171
|
+
control.open();
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
closingFromPropRef.current = true;
|
|
175
|
+
control.close();
|
|
176
|
+
}, [visible, control]);
|
|
177
|
+
|
|
178
|
+
// The Dialog fires `onClose` after the exit animation settles (imperative
|
|
179
|
+
// mode). Forward ONLY user-initiated dismissals (backdrop / Escape) to the
|
|
180
|
+
// consumer — a consumer-initiated close (they flipped `visible` to `false`,
|
|
181
|
+
// e.g. `select` already called `onClose`) must not re-enter `onClose`,
|
|
182
|
+
// preserving the previous controlled semantics where a programmatic close
|
|
183
|
+
// does not fire `onClose` a second time.
|
|
184
|
+
const handleClose = useCallback(() => {
|
|
185
|
+
if (closingFromPropRef.current) {
|
|
186
|
+
closingFromPropRef.current = false;
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
onClose();
|
|
190
|
+
}, [onClose]);
|
|
191
|
+
|
|
145
192
|
// Web keyboard navigation on the search input.
|
|
146
193
|
const webKeyHandler: Record<string, unknown> =
|
|
147
194
|
Platform.OS === 'web'
|
|
@@ -172,8 +219,8 @@ export function createCommand(Dialog: DialogComponent) {
|
|
|
172
219
|
|
|
173
220
|
return (
|
|
174
221
|
<Dialog
|
|
175
|
-
|
|
176
|
-
onClose={
|
|
222
|
+
control={control}
|
|
223
|
+
onClose={handleClose}
|
|
177
224
|
placement="center"
|
|
178
225
|
dismissOnBackdrop
|
|
179
226
|
maxWidth={COMMAND_MAX_WIDTH}
|