react native gifted chat - sending interactive buttons to the user

3 min read 29-09-2024
react native gifted chat - sending interactive buttons to the user


In modern mobile applications, enhancing user interaction is crucial for delivering an engaging user experience. One effective method to achieve this is by incorporating interactive buttons within chat interfaces. In this article, we will discuss how to send interactive buttons to users using the React Native Gifted Chat library.

Problem Scenario

The goal is to implement interactive buttons in a chat application built with React Native. The original code setup for Gifted Chat might look something like this:

import React, { useState } from 'react';
import { GiftedChat } from 'react-native-gifted-chat';

const ChatScreen = () => {
  const [messages, setMessages] = useState([]);

  const onSend = (newMessages = []) => {
    setMessages((previousMessages) => GiftedChat.append(previousMessages, newMessages));
  };

  return (
    <GiftedChat
      messages={messages}
      onSend={(newMessages) => onSend(newMessages)}
      user={{
        _id: 1,
      }}
    />
  );
};

export default ChatScreen;

Enhanced Code Example with Interactive Buttons

To introduce interactive buttons, you can customize the message rendering. Here’s an example where we send buttons alongside the messages:

import React, { useState } from 'react';
import { GiftedChat, Button } from 'react-native-gifted-chat';
import { View, Text, StyleSheet } from 'react-native';

const ChatScreen = () => {
  const [messages, setMessages] = useState([]);

  const onSend = (newMessages = []) => {
    setMessages((previousMessages) => GiftedChat.append(previousMessages, newMessages));
  };

  const renderMessage = (props) => {
    const { currentMessage } = props;

    return (
      <View style={styles.messageContainer}>
        <Text>{currentMessage.text}</Text>
        {currentMessage.buttons && currentMessage.buttons.map((button, index) => (
          <Button
            key={index}
            title={button.label}
            onPress={() => handleButtonPress(button.action)}
          />
        ))}
      </View>
    );
  };

  const handleButtonPress = (action) => {
    // Implement what happens when the button is pressed
    console.log(action);
  };

  const messagesWithButtons = [
    {
      _id: 1,
      text: 'Choose an option:',
      createdAt: new Date(),
      user: {
        _id: 2,
        name: 'React Native Bot',
      },
      buttons: [
        { label: 'Option 1', action: 'action1' },
        { label: 'Option 2', action: 'action2' },
      ],
    },
    // Add more messages as required
  ];

  return (
    <GiftedChat
      messages={messagesWithButtons}
      renderMessage={renderMessage}
      onSend={(newMessages) => onSend(newMessages)}
      user={{
        _id: 1,
      }}
    />
  );
};

const styles = StyleSheet.create({
  messageContainer: {
    margin: 5,
    backgroundColor: '#f0f0f0',
    padding: 10,
    borderRadius: 5,
  },
});

export default ChatScreen;

Analysis and Additional Explanation

In the modified code above, we have:

  1. Custom Message Rendering: We have created a custom message renderer using the renderMessage prop provided by Gifted Chat. This function allows you to customize how each message is displayed.

  2. Buttons Implementation: By appending a buttons array to the message object, we can create interactive buttons that are rendered beneath the message text. Each button has a label and an associated action that can be triggered when the button is pressed.

  3. Handling Button Actions: The handleButtonPress function can be expanded to include any logic that you want to execute when a user presses a button, such as navigating to a new screen or changing the current message.

Practical Example

Suppose you are creating a chatbot application where users can ask questions about different services. By implementing interactive buttons, users can simply press a button for quick responses like "Show Services" or "Get Support," making the chat experience faster and more user-friendly.

Conclusion

Adding interactive buttons to a chat interface not only improves the user experience but also allows for more direct interaction with the application. With the help of React Native Gifted Chat, it’s straightforward to incorporate such features.

Useful Resources

By following the steps outlined in this article, you can enhance your chat application and keep your users engaged with interactive buttons that promote easy navigation and choice selection.