DEV Community

Cover image for Implementing Long Press Functionality Using React Native Gesture Handler in React Native Application
MAYANK TYAGI
MAYANK TYAGI

Posted on

Implementing Long Press Functionality Using React Native Gesture Handler in React Native Application

You can implement long press functionality using libraries like React Native Gesture Handler to detect the long press gesture. This library provides more advanced and reliable gesture-handling capabilities compared to the standard React Native onLongPress event.

Here's how you can implement the long press functionality to display microfrontend version and other app info:

Step 1: Install React Native Gesture Handler

First, if you haven't already installed the react-native-gesture-handler package, install it:

npm install react-native-gesture-handler
Enter fullscreen mode Exit fullscreen mode

Make sure to link it with your project if you're using React Native CLI:

npx react-native link react-native-gesture-handler
Enter fullscreen mode Exit fullscreen mode

Step 2: Set Up Gesture Handler

After installation, wrap your app with GestureHandlerRootView in your entry point (usually index.js or App.js).

import { GestureHandlerRootView } from 'react-native-gesture-handler';
import { App } from './App';

export default function Main() {
  return (
    <GestureHandlerRootView style={{ flex: 1 }}>
      <App />
    </GestureHandlerRootView>
  );
}
Enter fullscreen mode Exit fullscreen mode

Step 3: Implement Long Press in Your Custom Header

Now, in your custom header, use the LongPressGestureHandler to detect the long press event. You can then display a modal or a custom view showing the microfrontend version and other app info.

Hereโ€™s an example of how you could implement this:

import React, { useState } from 'react';
import { Text, View, Modal, StyleSheet } from 'react-native';
import { LongPressGestureHandler, State } from 'react-native-gesture-handler';

const CustomHeader = ({ microfrontendVersion, appInfo }) => {
  const [isModalVisible, setModalVisible] = useState(false);

  const onLongPress = (event) => {
    if (event.nativeEvent.state === State.ACTIVE) {
      // Show the modal with app info when long press is detected
      setModalVisible(true);
    }
  };

  return (
    <View>
      {/* LongPressGestureHandler wraps the part of the UI where long press is to be detected */}
      <LongPressGestureHandler onHandlerStateChange={onLongPress} minDurationMs={800}>
        <View style={styles.header}>
          <Text style={styles.headerTitle}>My Custom Header</Text>
        </View>
      </LongPressGestureHandler>

      {/* Modal to show the version and app info */}
      <Modal
        transparent={true}
        visible={isModalVisible}
        onRequestClose={() => setModalVisible(false)}
      >
        <View style={styles.modalContainer}>
          <View style={styles.modalContent}>
            <Text>Microfrontend Version: {microfrontendVersion}</Text>
            <Text>App Info: {appInfo}</Text>
            <Text onPress={() => setModalVisible(false)} style={styles.closeButton}>Close</Text>
          </View>
        </View>
      </Modal>
    </View>
  );
};

const styles = StyleSheet.create({
  header: {
    padding: 16,
    backgroundColor: '#6200EE',
  },
  headerTitle: {
    color: 'white',
    fontSize: 18,
    fontWeight: 'bold',
  },
  modalContainer: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: 'rgba(0, 0, 0, 0.5)',
  },
  modalContent: {
    backgroundColor: 'white',
    padding: 20,
    borderRadius: 10,
  },
  closeButton: {
    marginTop: 10,
    color: 'blue',
    textAlign: 'center',
  },
});

export default CustomHeader;
Enter fullscreen mode Exit fullscreen mode

Explanation:

  1. LongPressGestureHandler: Wrap the header or any component where you want to detect a long press.

    • minDurationMs={800}: This defines how long the user needs to press to trigger the long press event.
    • onHandlerStateChange: This method is triggered when the gesture's state changes.
    • Inside onLongPress, we check if the gesture is in the ACTIVE state to determine if the long press was successful, and then trigger the modal to show the information.
  2. Modal: This is used to display the microfrontend version and other app info when the long press event is triggered.

This method efficiently detects long presses and displays the required information about the microfrontend and app details.

Top comments (0)