Send key when onKeyPress event is fired from TextInput
Summary: Changelog: [Internal] In `onKeyPress` event, we were not returning `key` property. This diff adds `key` property to `onKeyPress` event and removes other, redundant properties from `onKeyPress` event. The implementation has been translated from Paper. Reviewed By: shergin Differential Revision: D21250411 fbshipit-source-id: f1e31381667acb9dec02d0b33883df8f8f5b2a4b
This commit is contained in:
Родитель
79d5b20ced
Коммит
027e8f9b16
|
@ -306,7 +306,10 @@ using namespace facebook::react;
|
||||||
{
|
{
|
||||||
if (!_backedTextInputView.textWasPasted) {
|
if (!_backedTextInputView.textWasPasted) {
|
||||||
if (_eventEmitter) {
|
if (_eventEmitter) {
|
||||||
std::static_pointer_cast<TextInputEventEmitter const>(_eventEmitter)->onKeyPress([self _textInputMetrics]);
|
KeyPressMetrics keyPressMetrics;
|
||||||
|
keyPressMetrics.text = RCTStringFromNSString(text);
|
||||||
|
keyPressMetrics.eventCount = _mostRecentEventCount;
|
||||||
|
std::static_pointer_cast<TextInputEventEmitter const>(_eventEmitter)->onKeyPress(keyPressMetrics);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,29 @@ static jsi::Value textInputMetricsPayload(
|
||||||
return payload;
|
return payload;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static jsi::Value keyPressMetricsPayload(
|
||||||
|
jsi::Runtime &runtime,
|
||||||
|
KeyPressMetrics const &keyPressMetrics) {
|
||||||
|
auto payload = jsi::Object(runtime);
|
||||||
|
payload.setProperty(runtime, "eventCount", keyPressMetrics.eventCount);
|
||||||
|
|
||||||
|
std::string key;
|
||||||
|
if (keyPressMetrics.text.empty()) {
|
||||||
|
key = "Backspace";
|
||||||
|
} else {
|
||||||
|
if (keyPressMetrics.text.front() == '\n') {
|
||||||
|
key = "Enter";
|
||||||
|
} else if (keyPressMetrics.text.front() == '\t') {
|
||||||
|
key = "Tab";
|
||||||
|
} else {
|
||||||
|
key = keyPressMetrics.text.front();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
payload.setProperty(
|
||||||
|
runtime, "key", jsi::String::createFromUtf8(runtime, key));
|
||||||
|
return payload;
|
||||||
|
};
|
||||||
|
|
||||||
void TextInputEventEmitter::onFocus(
|
void TextInputEventEmitter::onFocus(
|
||||||
TextInputMetrics const &textInputMetrics) const {
|
TextInputMetrics const &textInputMetrics) const {
|
||||||
dispatchTextInputEvent("focus", textInputMetrics);
|
dispatchTextInputEvent("focus", textInputMetrics);
|
||||||
|
@ -78,8 +101,13 @@ void TextInputEventEmitter::onSubmitEditing(
|
||||||
}
|
}
|
||||||
|
|
||||||
void TextInputEventEmitter::onKeyPress(
|
void TextInputEventEmitter::onKeyPress(
|
||||||
TextInputMetrics const &textInputMetrics) const {
|
KeyPressMetrics const &keyPressMetrics) const {
|
||||||
dispatchTextInputEvent("keyPress", textInputMetrics);
|
dispatchEvent(
|
||||||
|
"keyPress",
|
||||||
|
[keyPressMetrics](jsi::Runtime &runtime) {
|
||||||
|
return keyPressMetricsPayload(runtime, keyPressMetrics);
|
||||||
|
},
|
||||||
|
EventPriority::AsynchronousBatched);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TextInputEventEmitter::dispatchTextInputEvent(
|
void TextInputEventEmitter::dispatchTextInputEvent(
|
||||||
|
|
|
@ -25,6 +25,12 @@ class TextInputMetrics {
|
||||||
int eventCount;
|
int eventCount;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class KeyPressMetrics {
|
||||||
|
public:
|
||||||
|
std::string text;
|
||||||
|
int eventCount;
|
||||||
|
};
|
||||||
|
|
||||||
class TextInputEventEmitter : public ViewEventEmitter {
|
class TextInputEventEmitter : public ViewEventEmitter {
|
||||||
public:
|
public:
|
||||||
using ViewEventEmitter::ViewEventEmitter;
|
using ViewEventEmitter::ViewEventEmitter;
|
||||||
|
@ -37,7 +43,7 @@ class TextInputEventEmitter : public ViewEventEmitter {
|
||||||
void onSelectionChange(TextInputMetrics const &textInputMetrics) const;
|
void onSelectionChange(TextInputMetrics const &textInputMetrics) const;
|
||||||
void onEndEditing(TextInputMetrics const &textInputMetrics) const;
|
void onEndEditing(TextInputMetrics const &textInputMetrics) const;
|
||||||
void onSubmitEditing(TextInputMetrics const &textInputMetrics) const;
|
void onSubmitEditing(TextInputMetrics const &textInputMetrics) const;
|
||||||
void onKeyPress(TextInputMetrics const &textInputMetrics) const;
|
void onKeyPress(KeyPressMetrics const &textInputMetrics) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void dispatchTextInputEvent(
|
void dispatchTextInputEvent(
|
||||||
|
|
Загрузка…
Ссылка в новой задаче