# Nested Comments Thread (with Like and Reply)

## Overview

![](https://47992944-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7QCQzQXopA53eLQUo8SB%2Fuploads%2FikEI7UAeUQTt3lQ25txC%2F8.png?alt=media\&token=dadc9521-363b-47f6-8bd3-2adc81e197d3)

This block contains a list of comments created by different users. Each user can create a new comment, reply to, or like a parent comment. This block (and its comments database object) can be connected to any data object in your database (e.g., a topic, a product, or a post). Admins (or users with admin access) can manage the comments section by hovering over a comment and clicking on the ellipsis menu to delete the comment. By default, the widget allows for three levels of comments.&#x20;

## 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.

* **nestedcomments\_template**\
  This reusable element contains all of the logic and UI for the nested comments module. It contains four main groups:<br>
  * **Group Parent message input**\
    This group contains the multiline input for posting a parent `Comment`. Clicking on **Button Parent POST** will most the text in **MultilineInput Parent Comment** as a parent `Comment`.<br>
  * **RepeatingGroup Parent comment**\
    This repeating group displays all parent `comments` posted by users (where the parent comment is empty).
    * **RepeatingGroup Child comment** displays all children comments (where the parent comment is parent group's comment).
    * Clicking on **Text Parent reply button** will show **Group Child message input\_t-comment** and allow the user to reply to a parent `comment`.
      * Clicking on **Button Child Reply** will post the `comment` underneath the parent `Comment`.
    * Clicking on **Text Parent like button** and **Text Child like button** will show **Popup likes**.
    * Clicking on **Group Parent fav comment\_t-comment** or **Group Child fav comment\_t-comment** will like/unlike the comment.
    * Clicking on **Group Parent menu\_t-comment** and **Group Child menu\_t-comment** will show a menu to delete a `Comment`.
      * You should add another statement to the existing conditional statements on these groups: *...and Current user's Role is App Admin*<br>
  * **Group Main no comments**\
    This group will be visible when **RepeatingGroup Parent comment's** list of comments count is 0.<br>
  * **Popup Likes**\
    This popup shows a list of users who have liked a `comment`.

## How to set up

* Add a field to the `Comment` data type that represents the object on which you want users to comment. For example, if you want users to comment on products, you should add a `Product` field.

![](https://47992944-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7QCQzQXopA53eLQUo8SB%2Fuploads%2FIt5zPyyK914rm7b31ywK%2F9.png?alt=media\&token=c90bc04d-6b62-4f42-b881-54aa65e63664)

* Make a copy of the **nestedcomments\_template** reusable. This preserves the original reusable element aded by the extension, incase you need to link comment functionality to multiple data types within your application. <br>
* Modify the copied reusable's type of content from empty to the custom object for which you want to show comments. For example, if you are building a marketplace where Users can comment on different Products, you could make the copied reusable's group type `Product`.&#x20;

![](https://47992944-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7QCQzQXopA53eLQUo8SB%2Fuploads%2F7blQS92ZqVxI6nM6iLqE%2F10.png?alt=media\&token=91ab8ce5-8e32-4b93-89d2-0801ed0055d4)

* Next, we can add a "Product" field (type: Product, list: no) to the "t-Comment" data type, and modify the data source for **RepeatingGroup Parent comment** to include any needed filters. In the marketplace example, the data source will display comments that are linked to the `Product`  object that is the data source of the reusable.

![](https://47992944-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7QCQzQXopA53eLQUo8SB%2Fuploads%2Fehjp9zJ8BWdBAbmO5yO5%2F11.png?alt=media\&token=d96c87a4-1f8f-4fce-bdf9-4ce098a8ad86)

* Modify the three actions that run when the **Button Parent POST,** **Button Child REPLY (second level), and Button Child REPLY (third level) elements** are clicked to link the`Comment` created to the relevant object. In this example, we are linking the `Product` that's displayed in the reusable to each Comment by storing the `Product` object in each `Comment`'s `Product` field.

**Button Child REPLY (second level)**

![](https://47992944-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7QCQzQXopA53eLQUo8SB%2Fuploads%2FP1C2Qb4KujmysTM01J6j%2F12.png?alt=media\&token=f96a529b-fb29-463a-b1ab-f24604e17379)

**Button Child REPLY (third level)**

![](https://47992944-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7QCQzQXopA53eLQUo8SB%2Fuploads%2FV6xZZ75OXGP5Ae0bx9qx%2F13.png?alt=media\&token=5da51f02-3eb9-4ee2-99e1-3798ae168924)

**Button Parent POST**&#x20;

![](https://47992944-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7QCQzQXopA53eLQUo8SB%2Fuploads%2FDLn1LyW1g6I7PgFQxkBu%2F14.png?alt=media\&token=58b3477a-6c1f-4708-bc37-cc6d71a7f7e5)

* Add a data source whenever you use the **nestedcomments\_template** reusable element as an instance on a page.&#x20;

![](https://47992944-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7QCQzQXopA53eLQUo8SB%2Fuploads%2FFg8WWixPyf9ePohF4Hd3%2F15.png?alt=media\&token=a5c5a6ab-cc51-4df8-a2ca-b0ddab255434)
