Skip to content

Commit b26cbbe

Browse files
committed
Update logs in example
1 parent dd5d609 commit b26cbbe

File tree

1 file changed

+69
-21
lines changed

1 file changed

+69
-21
lines changed

packages/rn-tester/js/examples/KeyboardEventsExample/KeyboardEventsExample.js

Lines changed: 69 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,25 @@ import {
2323
View,
2424
} from 'react-native';
2525

26+
function formatKeyEvent(event) {
27+
const modifiers = [];
28+
if (event.metaKey) {
29+
modifiers.push('Cmd');
30+
}
31+
if (event.ctrlKey) {
32+
modifiers.push('Ctrl');
33+
}
34+
if (event.altKey) {
35+
modifiers.push('Alt');
36+
}
37+
if (event.shiftKey) {
38+
modifiers.push('Shift');
39+
}
40+
41+
const modifierPrefix = modifiers.length > 0 ? `${modifiers.join('+')}+` : '';
42+
return `${modifierPrefix}${event.key}`;
43+
}
44+
2645
function BubblingExample(): React.Node {
2746
const ref = React.useRef<React.ElementRef<typeof Pressable> | null>(null);
2847
const [eventLog, setEventLog] = React.useState<Array<string>>([]);
@@ -51,14 +70,19 @@ function BubblingExample(): React.Node {
5170
style={styles.boxOuter}
5271
nativeID="Box 3"
5372
onKeyDown={ev => {
54-
appendEvent(`keyDown: ${ev.nativeEvent.key}`, 'Box 3');
73+
const keyDisplay = formatKeyEvent(ev.nativeEvent);
74+
appendEvent(`keyDown: ${keyDisplay}`, 'Box 3');
5575
}}>
5676
<View
5777
style={styles.boxMiddle}
5878
nativeID="Box 2"
5979
onKeyDown={ev => {
80+
const blockedKeys = ['f', 'g'];
81+
const isBlocked = blockedKeys.includes(ev.nativeEvent.key);
82+
const suffix = isBlocked ? ' (blocked)' : '';
83+
const keyDisplay = formatKeyEvent(ev.nativeEvent);
6084
appendEvent(
61-
`keyDown: ${ev.nativeEvent.key}`,
85+
`keyDown: ${keyDisplay}${suffix}`,
6286
'Box 2 keyDownEvents=[f,g]',
6387
);
6488
if (stopPropagationEnabled) {
@@ -71,7 +95,8 @@ function BubblingExample(): React.Node {
7195
style={styles.boxInner}
7296
nativeID="Box 1"
7397
onKeyDown={ev => {
74-
appendEvent(`keyDown: ${ev.nativeEvent.key}`, 'Box 1');
98+
const keyDisplay = formatKeyEvent(ev.nativeEvent);
99+
appendEvent(`keyDown: ${keyDisplay}`, 'Box 1');
75100
}}>
76101
<View style={[styles.centered]}>
77102
<Pressable
@@ -86,7 +111,8 @@ function BubblingExample(): React.Node {
86111
ref.current?.focus();
87112
}}
88113
onKeyDown={ev => {
89-
appendEvent(`keyDown: ${ev.nativeEvent.key}`, 'Focusable');
114+
const keyDisplay = formatKeyEvent(ev.nativeEvent);
115+
appendEvent(`keyDown: ${keyDisplay}`, 'Focusable');
90116
if (
91117
ev.nativeEvent.key === 'k' &&
92118
ev.nativeEvent.metaKey === true
@@ -127,7 +153,6 @@ function BubblingExample(): React.Node {
127153
}
128154

129155
function KeyboardEventExample(): React.Node {
130-
const pressableRef = React.useRef<React.ElementRef<typeof Pressable> | null>(null);
131156
const [eventLog, setEventLog] = React.useState<Array<string>>([]);
132157

133158
function appendEvent(eventName: string, source?: string) {
@@ -138,47 +163,70 @@ function KeyboardEventExample(): React.Node {
138163
});
139164
}
140165

166+
function isKeyBlocked(event, keyEvents) {
167+
return keyEvents.some(({key, metaKey, ctrlKey, altKey, shiftKey}) => {
168+
return event.key === key &&
169+
(metaKey ?? event.metaKey) === event.metaKey &&
170+
(ctrlKey ?? event.ctrlKey) === event.ctrlKey &&
171+
(altKey ?? event.altKey) === event.altKey &&
172+
(shiftKey ?? event.shiftKey) === event.shiftKey;
173+
});
174+
}
175+
141176
const handleSingleLineKeyDown = React.useCallback(
142177
(e: KeyEvent) => {
143-
appendEvent(`keyDown: ${e.nativeEvent.key}`, 'Single-line TextInput');
178+
const keyDownEvents = [
179+
{key: 'g'},
180+
{key: 'Escape'},
181+
{key: 'Enter'},
182+
{key: 'ArrowLeft'},
183+
];
184+
const isBlocked = isKeyBlocked(e.nativeEvent, keyDownEvents);
185+
const suffix = isBlocked ? ' (blocked)' : '';
186+
const keyDisplay = formatKeyEvent(e.nativeEvent);
187+
appendEvent(`keyDown: ${keyDisplay}${suffix}`, 'Single-line TextInput');
144188
},
145189
[],
146190
);
147191

148192
const handleSingleLineKeyUp = React.useCallback(
149193
(e: KeyEvent) => {
150-
appendEvent(`keyUp: ${e.nativeEvent.key}`, 'Single-line TextInput');
194+
const keyUpEvents = [{key: 'c'}, {key: 'd'}];
195+
const isBlocked = isKeyBlocked(e.nativeEvent, keyUpEvents);
196+
const suffix = isBlocked ? ' (blocked)' : '';
197+
const keyDisplay = formatKeyEvent(e.nativeEvent);
198+
appendEvent(`keyUp: ${keyDisplay}${suffix}`, 'Single-line TextInput');
151199
},
152200
[],
153201
);
154202

155203
const handleMultiLineKeyDown = React.useCallback(
156204
(e: KeyEvent) => {
157-
appendEvent(`keyDown: ${e.nativeEvent.key}`, 'Multi-line TextInput');
205+
const keyDownEvents = [
206+
{key: 'ArrowRight'},
207+
{key: 'ArrowDown'},
208+
{key: 'Enter', metaKey: true},
209+
];
210+
const isBlocked = isKeyBlocked(e.nativeEvent, keyDownEvents);
211+
const suffix = isBlocked ? ' (blocked)' : '';
212+
const keyDisplay = formatKeyEvent(e.nativeEvent);
213+
appendEvent(`keyDown: ${keyDisplay}${suffix}`, 'Multi-line TextInput');
158214
},
159215
[],
160216
);
161217

162218
const handleMultiLineKeyUp = React.useCallback(
163219
(e: KeyEvent) => {
164-
appendEvent(`keyUp: ${e.nativeEvent.key}`, 'Multi-line TextInput');
220+
const keyUpEvents = [{key: 'Escape'}, {key: 'Enter'}];
221+
const isBlocked = isKeyBlocked(e.nativeEvent, keyUpEvents);
222+
const suffix = isBlocked ? ' (blocked)' : '';
223+
const keyDisplay = formatKeyEvent(e.nativeEvent);
224+
appendEvent(`keyUp: ${keyDisplay}${suffix}`, 'Multi-line TextInput');
165225
},
166226
[],
167227
);
168228

169-
const handlePressableKeyDown = React.useCallback(
170-
(e: KeyEvent) => {
171-
appendEvent(`keyDown: ${e.nativeEvent.key}`, 'Focusable Pressable');
172-
},
173-
[],
174-
);
175229

176-
const handlePressableKeyUp = React.useCallback(
177-
(e: KeyEvent) => {
178-
appendEvent(`keyUp: ${e.nativeEvent.key}`, 'Focusable Pressable');
179-
},
180-
[],
181-
);
182230

183231
return (
184232
<View style={{marginTop: 10}}>

0 commit comments

Comments
 (0)