Skip to content

Commit

Permalink
Merge pull request #27415 from teneeto/chore/16221-migrate-with-keyba…
Browse files Browse the repository at this point in the history
…ord-state-file-to-function-component

chore: migrate withKeyaboardState class to function component
  • Loading branch information
Joel Bettner authored Sep 27, 2023
2 parents 3e78070 + 5a35d74 commit 31bb197
Showing 1 changed file with 16 additions and 25 deletions.
41 changes: 16 additions & 25 deletions src/components/withKeyboardState.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
/* eslint-disable react/no-unused-state */
import React, {forwardRef, createContext} from 'react';
import PropTypes from 'prop-types';
import React, {forwardRef, createContext, useEffect, useState} from 'react';
import {Keyboard} from 'react-native';
import PropTypes from 'prop-types';
import getComponentDisplayName from '../libs/getComponentDisplayName';

const KeyboardStateContext = createContext(null);
Expand All @@ -15,32 +14,24 @@ const keyboardStateProviderPropTypes = {
children: PropTypes.node.isRequired,
};

class KeyboardStateProvider extends React.Component {
constructor(props) {
super(props);

this.state = {
isKeyboardShown: false,
};
}

componentDidMount() {
this.keyboardDidShowListener = Keyboard.addListener('keyboardDidShow', () => {
this.setState({isKeyboardShown: true});
function KeyboardStateProvider(props) {
const {children} = props;
const [isKeyboardShown, setIsKeyboardShown] = useState(false);
useEffect(() => {
const keyboardDidShowListener = Keyboard.addListener('keyboardDidShow', () => {
setIsKeyboardShown(true);
});
this.keyboardDidHideListener = Keyboard.addListener('keyboardDidHide', () => {
this.setState({isKeyboardShown: false});
const keyboardDidHideListener = Keyboard.addListener('keyboardDidHide', () => {
setIsKeyboardShown(false);
});
}

componentWillUnmount() {
this.keyboardDidShowListener.remove();
this.keyboardDidHideListener.remove();
}
return () => {
keyboardDidShowListener.remove();
keyboardDidHideListener.remove();
};
}, []);

render() {
return <KeyboardStateContext.Provider value={this.state}>{this.props.children}</KeyboardStateContext.Provider>;
}
return <KeyboardStateContext.Provider value={{isKeyboardShown}}>{children}</KeyboardStateContext.Provider>;
}

KeyboardStateProvider.propTypes = keyboardStateProviderPropTypes;
Expand Down

0 comments on commit 31bb197

Please sign in to comment.