MM-25670 perform search when hitting Enter on HW keyboard (#4432)

This commit is contained in:
Elias Nahum 2020-06-17 22:13:34 -04:00
parent b316ad5a20
commit a5c2f86f0b
No known key found for this signature in database
GPG key ID: E038DB71E0B61702
2 changed files with 45 additions and 24 deletions

View file

@ -10,6 +10,7 @@ import HWKeyboardEvent from 'react-native-hw-keyboard-event';
import PasteableTextInput from '@components/pasteable_text_input';
import {INSERT_TO_COMMENT, INSERT_TO_DRAFT} from '@constants/post_draft';
import EventEmitter from '@mm-redux/utils/event_emitter';
import EphemeralStore from '@store/ephemeral_store';
import {t} from '@utils/i18n';
import {switchKeyboardForCodeBlocks} from '@utils/markdown';
import {changeOpacity, makeStyleSheetFromTheme, getKeyboardAppearanceFromTheme} from '@utils/theme';
@ -17,6 +18,7 @@ import {changeOpacity, makeStyleSheetFromTheme, getKeyboardAppearanceFromTheme}
const {RNTextInputReset} = NativeModules;
const INPUT_LINE_HEIGHT = 20;
const HW_SHIFT_ENTER_TEXT = Platform.OS === 'ios' ? '\n' : '';
const HW_EVENT_IN_SCREEN = ['Channel', 'Thread'];
export default class PostInput extends PureComponent {
static contextTypes = {
@ -160,13 +162,15 @@ export default class PostInput extends PureComponent {
};
handleHardwareEnterPress = (keyEvent) => {
switch (keyEvent.pressedKey) {
case 'enter':
this.props.onSend();
break;
case 'shift-enter':
this.handleInsertTextToDraft(HW_SHIFT_ENTER_TEXT);
break;
if (HW_EVENT_IN_SCREEN.includes(EphemeralStore.getNavigationTopComponentId())) {
switch (keyEvent.pressedKey) {
case 'enter':
this.props.onSend();
break;
case 'shift-enter':
this.handleInsertTextToDraft(HW_SHIFT_ENTER_TEXT);
break;
}
}
}

View file

@ -15,30 +15,32 @@ import {
} from 'react-native';
import AwesomeIcon from 'react-native-vector-icons/FontAwesome';
import {Navigation} from 'react-native-navigation';
import HWKeyboardEvent from 'react-native-hw-keyboard-event';
import {goToScreen, showModalOverCurrentContext, dismissModal} from '@actions/navigation';
import Autocomplete from '@components/autocomplete';
import KeyboardLayout from '@components/layout/keyboard_layout';
import DateHeader from '@components/post_list/date_header';
import FormattedText from '@components/formatted_text';
import Loading from '@components/loading';
import PostListRetry from '@components/post_list_retry';
import PostSeparator from '@components/post_separator';
import SafeAreaView from 'app/components/safe_area_view';
import SearchBar from '@components/search_bar';
import StatusBar from '@components/status_bar';
import {paddingHorizontal as padding} from '@components/safe_area_view/iphone_x_spacing';
import {DeviceTypes, ListTypes} from '@constants';
import {debounce} from '@mm-redux/actions/helpers';
import {isDateLine, getDateForDateLine} from '@mm-redux/utils/post_list';
import Autocomplete from 'app/components/autocomplete';
import KeyboardLayout from 'app/components/layout/keyboard_layout';
import DateHeader from 'app/components/post_list/date_header';
import FormattedText from 'app/components/formatted_text';
import Loading from 'app/components/loading';
import PostListRetry from 'app/components/post_list_retry';
import PostSeparator from 'app/components/post_separator';
import SafeAreaView from 'app/components/safe_area_view';
import SearchBar from 'app/components/search_bar';
import StatusBar from 'app/components/status_bar';
import {paddingHorizontal as padding} from 'app/components/safe_area_view/iphone_x_spacing';
import {DeviceTypes, ListTypes} from 'app/constants';
import mattermostManaged from 'app/mattermost_managed';
import {preventDoubleTap} from 'app/utils/tap';
import {goToScreen, showModalOverCurrentContext, dismissModal} from 'app/actions/navigation';
import EphemeralStore from '@store/ephemeral_store';
import {preventDoubleTap} from '@utils/tap';
import {
changeOpacity,
makeStyleSheetFromTheme,
getKeyboardAppearanceFromTheme,
} from 'app/utils/theme';
} from '@utils/theme';
import mattermostManaged from 'app/mattermost_managed';
import ChannelDisplayName from './channel_display_name';
import Modifier, {MODIFIER_LABEL_HEIGHT} from './modifier';
@ -108,6 +110,7 @@ export default class Search extends PureComponent {
componentDidMount() {
this.navigationEventListener = Navigation.events().bindComponent(this);
HWKeyboardEvent.onHWKeyPressed(this.handleHardwareEnterPress);
if (this.props.initialValue) {
this.search(this.props.initialValue);
@ -152,6 +155,20 @@ export default class Search extends PureComponent {
}
}
componentWillUnmount() {
HWKeyboardEvent.removeOnHWKeyPressed();
}
handleHardwareEnterPress = (keyEvent) => {
if (EphemeralStore.getNavigationTopComponentId() === 'Search') {
switch (keyEvent.pressedKey) {
case 'enter':
this.search(this.state.value);
break;
}
}
}
navigationButtonPressed({buttonId}) {
if (buttonId === 'backPress') {
if (this.state.preview && this.previewRef) {