> For the complete documentation index, see [llms.txt](https://docs.airdev.co/canvas/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.airdev.co/canvas/3.7/canvas-library/blocks/bottom-input-chat-widget.md).

# Bottom Input Chat Widget

## Overview

![](/files/FhupIoDsqqjp1DkJuo3H)

![](/files/sozhn7tnpLZvYDfGqixy)

This block allows a user to manage multiple conversation threads with different users. A user can click into one of the threads and send or view messages/attachments.

## Structure

When this block is added to a page, it is placed within a group called **Blocks container 860 (do not rename)** on the page. This group contains the responsive settings for all blocks.

* **bottominput\_chat**\
  This reusable element contains all of the logic and UI for threads and messages. It contains three main groups:<br>
  * **Group Main threads list\_thread**\
    This group contains the list of threads that the current user is a part of. All of the threads are displayed in **RepeatingGroup t-Thread**. Clicking on **Group Main select thread\_thread** will hide **Group Main threads list\_thread** and show the messages for the selected thread.<br>
  * **Group Main message\_thread**\
    This group displays all messages between users in a thread (in **RepeatingGroup t-Message**). You have two versions of message formats to choose from:

    * **iMessage format**\
      This is the default message format. To hide this style, select **Group Collapsible iMsg\_message** and uncheck the box for This element is visible on page load.\
      \
      ![](/files/v2o8TdFiCzMohcA5kGen)<br>
    * **Slack format**\
      To use this style, hide **Group Collapsible iMsg\_message** and show **Group Collapsible Slack\_message** by checking the box for This element is visible on page load.\
      \
      ![](/files/CLZr020uDIm3RzT1cKRp)<br>

    Clicking on **Group Inner Back to threads** will navigate back to the list of threads.\
    \
    The user can enter a message in **MultilineInput message** and attach a file by clicking on the file clip icon. When an attachment is added, it will show underneath the message input. Clicking on it will open the attachment in a new tab for previewing. Clicking on **Group Inner delete file** will delete the attachment and allow you upload a new attachment.<br>
  * **Popup Hidden Variables**\
    This popup includes various variables that are referenced in workflows or conditionals on the page.

    * **var - Website object** - This group stores the `website object` (e.g., app name, primary color, and etc.)
    * **var - chat thread** - This group stores the `thread` that the user is currently viewing.&#x20;
    * **var - user viewing chat** - This group stores the `user` information (current user who is viewing the thread and messages).&#x20;
    * **var - attached msg file** - This group temporarily stores a `file` that the current user attaches to a message (this group will be reset when the message is sent).

    For more information on how to use hidden variables, click [here](https://docs.airdev.co/canvas/canvas-functionality/data-and-workflows#using-the-hidden-variables-popup).

## How to set up

#### Customizing the chat layout by going to the b**ottominput\_chat reusable element**

* In **Popup Hidden Variables**, update **var - user viewing chat's** data source to include any filters for the user who is viewing the chart
  * You would want to keep the data source for this group here to `Current user` and remove the conditional statement (Do a search for users:first item is a placeholder for demo purposes).\
    ![](/files/0g4qz4qM9Ih360V4SAlV)\
    \
    ![](/files/H2ncPtOJZyxEF7Qe0ADG)<br>
* Select a message format by showing **Group Collapsible iMsg\_message** or **Group Collapsible Slack\_message**. Hide the format that you are not using.<br>
* \[Optional] Change the iMessage format colors. You can do this by locating the **HTML message styles** in the reusable element and updating the hex color codes. From-me styles will apply to all messages sent by you (current user). From-them styles will apply to all messages sent by the other user(s).

{% hint style="warning" %}
Make sure you save the original code before you change the hex color codes in **HTML message styles**. Sometimes it takes a few page loads to see the html updates on the page. You can preview the updated html styles by doing a hard refresh in the chrome browser (Command + Shift+ R).
{% endhint %}

#### Adding the bottom chat widget reusable to different pages in your app

{% hint style="info" %}
In Bubble, a reusable element is a way to build elements that you can replicate in more than one page without having to recreate them.&#x20;
{% endhint %}

* On the page that you have your chat widget instance, set up a workflow to create a new thread and add the user(s) to the thread.&#x20;
  * For example, you might add a Message user button to the page and include the following workflows:

![Create a new thread](/files/4mDy8gIjuecBrITod6aH)

![Add the users to the thread. The second user is for demo purposes and should be whoever the current user is messaging.](/files/yLTvsiBPGjGBFqllsmXD)

* The **bottominput\_chat** instance has a data type of type `t-Thread`. To display all of the current user's threads that he or she is a part of, do not set a thread data source. However, if you want to display only one thread for a user (i.e, hiding the threads list view and only showing the thread conversation view, then you should pass a thread to the reusable instance).
