useEntityComments

Overview

The useEntityComments hook provides a higher-level abstraction for fetching and managing comments related to a specific entity. It handles pagination, sorting, and comment tree structure, allowing you to easily build a threaded comment UI. It’s especially useful when you want to render nested replies and dynamically manage additions or deletions in a structured way.

Usage Example

import { useEntityComments } from "@replyke/react-js";
 
function EntityComments({ entityId }: { entityId: string }) {
  const {
    comments,
    newComments,
    entityCommentsTree,
    loading,
    hasMore,
    sortBy,
    setSortBy,
    loadMore,
    addCommentsToTree,
    removeCommentFromTree,
  } = useEntityComments({ entityId, limit: 10, defaultSortBy: "new" });
 
  return (
    <div>
      <select
        value={sortBy}
        onChange={(e) => setSortBy(e.target.value as "new" | "top")}
      >
        <option value="new">Newest</option>
        <option value="top">Top</option>
      </select>
 
      <ul>
        {comments.map((comment) => (
          <li key={comment.id}>{comment.content}</li>
        ))}
      </ul>
 
      {loading && <p>Loading...</p>}
      {hasMore && !loading && <button onClick={loadMore}>Load More</button>}
    </div>
  );
}

Parameters & Returns

Parameters

The hook accepts an object with the following fields:

ParameterTypeRequiredDescription
entityIdstring | undefined | nullYesThe ID of the entity whose comments are being fetched.
limitnumberNoThe number of comments to fetch per page. Default is 10.
defaultSortByCommentsSortByOptionsNoThe default sorting criteria for comments (e.g., "new", "top").

Returns

The hook returns an object with the following fields:

Return ValueTypeDescription
entityCommentsTreeEntityCommentsTreeThe structured tree of comments, keyed by comment ID.
commentsComment[]The list of root-level comments (non-new).
newCommentsComment[]Comments recently added during the session.
loadingbooleanIndicates whether comments are currently loading.
hasMorebooleanWhether there are more comments available to fetch.
sortByCommentsSortByOptionsCurrent sorting method for the comments ("new" or "top").
setSortBy(newSortBy: CommentsSortByOptions) => voidUpdates the sort order for comments.
loadMore() => voidLoads the next page of comments, if available.
addCommentsToTree(newComments: Comment[] | undefined, newlyAdded?: boolean) => voidAdds comments to the internal tree structure.
removeCommentFromTree(commentId: string) => voidRemoves a comment (and its descendants) from the tree structure.