fix(app): iPad hardware Enter submits the composer

Fixes #810
This commit is contained in:
Bolun Zhang
2026-05-13 17:52:39 +08:00
committed by GitHub
parent 72293f7f4f
commit 81697f85b2
9 changed files with 356 additions and 0 deletions
@@ -0,0 +1,29 @@
import { requireNativeModule, type EventSubscription } from "expo-modules-core";
type HardwareKeyboardSubmitHandler = () => void;
interface PaseoHardwareKeyboardModule {
setHardwareKeyboardSubmitEnabled(enabled: boolean): void;
addListener(
eventName: "onHardwareKeyboardSubmit",
handler: HardwareKeyboardSubmitHandler,
): EventSubscription;
}
const module = requireNativeModule<PaseoHardwareKeyboardModule>("PaseoHardwareKeyboard");
export function setHardwareKeyboardSubmitEnabled(enabled: boolean) {
module.setHardwareKeyboardSubmitEnabled(enabled);
}
export function addHardwareKeyboardSubmitListener(handler: HardwareKeyboardSubmitHandler) {
return module.addListener("onHardwareKeyboardSubmit", handler);
}
export function emitHardwareKeyboardSubmitForTest() {}
export function resetHardwareKeyboardSubmitForTest() {}
export function getHardwareKeyboardSubmitEnabledForTest() {
return false;
}
@@ -0,0 +1,34 @@
import type { EventSubscription } from "expo-modules-core";
type HardwareKeyboardSubmitHandler = () => void;
const testHandlers = new Set<HardwareKeyboardSubmitHandler>();
let isEnabledForTest = false;
export function setHardwareKeyboardSubmitEnabled(enabled: boolean) {
isEnabledForTest = enabled;
}
export function addHardwareKeyboardSubmitListener(
handler: HardwareKeyboardSubmitHandler,
): EventSubscription {
testHandlers.add(handler);
return {
remove: () => {
testHandlers.delete(handler);
},
};
}
export function emitHardwareKeyboardSubmitForTest() {
testHandlers.forEach((handler) => handler());
}
export function resetHardwareKeyboardSubmitForTest() {
testHandlers.clear();
isEnabledForTest = false;
}
export function getHardwareKeyboardSubmitEnabledForTest() {
return isEnabledForTest;
}