# FThreadComment

> Language fallback: requested `ko-KR`; content is `en-US`.

- Human documentation: [https://docs.univer.ai/ko-KR/reference/facade/thread-comment](https://docs.univer.ai/ko-KR/reference/facade/thread-comment)

- Agent Markdown: [https://docs.univer.ai/ko-KR/reference/facade/thread-comment.md](https://docs.univer.ai/ko-KR/reference/facade/thread-comment.md)

- Requested language: `ko-KR`

- Content language: `en-US`

- Documentation version: `1.0.4`

- Source: [facade/thread-comment.mdx](https://github.com/dream-num/documentation/blob/dev/content/reference/facade/thread-comment.mdx)

---

A class that represents a thread comment already in the sheet.

## Access

Access through:

* [`FRange.getComment()`](https://docs.univer.ai/ko-KR/reference/facade/range.md#getcomment)
* [`FRange.getComments()`](https://docs.univer.ai/ko-KR/reference/facade/range.md#getcomments)
* [`FWorkbook.getComments()`](https://docs.univer.ai/ko-KR/reference/facade/workbook.md#getcomments)
* [`FWorksheet.getComments()`](https://docs.univer.ai/ko-KR/reference/facade/worksheet.md#getcomments)
* [`FWorksheet.getCommentById()`](https://docs.univer.ai/ko-KR/reference/facade/worksheet.md#getcommentbyid)

## Setup

Register [`@univerjs/sheets-thread-comment`](https://docs.univer.ai/ko-KR/reference/packages/plugins/univerjs/sheets-thread-comment.md) or a preset that includes it. In plugin mode, import `@univerjs/sheets-thread-comment/facade`. Additional methods below require their listed plugin packages. See [Facade setup](https://docs.univer.ai/ko-KR/guides/sheets/getting-started/facade.md).

## `@univerjs/sheets-thread-comment`

### `FThreadComment.deleteAsync`

Delete the comment and it's replies

```typescript
deleteAsync(): Promise<boolean>
```

**Returns**

Whether the comment is deleted successfully

**Examples**

```ts
const fWorkbook = univerAPI.getActiveWorkbook()
const fWorksheet = fWorkbook.getSheetByName('Sheet1')
if (!fWorksheet) throw new Error('fWorksheet is not available')
const comments = fWorksheet.getComments()

// Delete the first comment
const result = await comments[0]?.deleteAsync()
console.log(result)
```

**Types:** [`Promise`](https://unpkg.com/@typescript/typescript-darwin-arm64/lib/lib.es5.d.ts)

**Package:** [`@univerjs/sheets-thread-comment`](https://docs.univer.ai/ko-KR/reference/packages/plugins/univerjs/sheets-thread-comment.md) · [Type definitions](https://unpkg.com/@univerjs/sheets-thread-comment/lib/types/facade/f-thread-comment.d.ts)

### `FThreadComment.getCommentData`

Get the comment data

```typescript
getCommentData(): IBaseComment
```

**Returns**

The comment data

**Examples**

```ts
const fWorkbook = univerAPI.getActiveWorkbook()
const fWorksheet = fWorkbook.getSheetByName('Sheet1')
if (!fWorksheet) throw new Error('fWorksheet is not available')
const comments = fWorksheet.getComments()
comments.forEach((comment) => {
  console.log(comment.getCommentData())
})
```

**Types:** [`IBaseComment`](https://unpkg.com/@univerjs/thread-comment/lib/types/types/interfaces/i-thread-comment.d.ts)

**Package:** [`@univerjs/sheets-thread-comment`](https://docs.univer.ai/ko-KR/reference/packages/plugins/univerjs/sheets-thread-comment.md) · [Type definitions](https://unpkg.com/@univerjs/sheets-thread-comment/lib/types/facade/f-thread-comment.d.ts)

### `FThreadComment.getIsRoot`

Whether the comment is a root comment

```typescript
getIsRoot(): boolean
```

**Returns**

Whether the comment is a root comment

**Examples**

```ts
const fWorkbook = univerAPI.getActiveWorkbook()
const fWorksheet = fWorkbook.getSheetByName('Sheet1')
if (!fWorksheet) throw new Error('fWorksheet is not available')
const comments = fWorksheet.getComments()
comments.forEach((comment) => {
  console.log(comment.getIsRoot())
})
```

**Package:** [`@univerjs/sheets-thread-comment`](https://docs.univer.ai/ko-KR/reference/packages/plugins/univerjs/sheets-thread-comment.md) · [Type definitions](https://unpkg.com/@univerjs/sheets-thread-comment/lib/types/facade/f-thread-comment.d.ts)

### `FThreadComment.getRange`

Get the range of the comment

```typescript
getRange(): FRange | null
```

**Returns**

The range of the comment

**Examples**

```ts
const fWorkbook = univerAPI.getActiveWorkbook()
const fWorksheet = fWorkbook.getSheetByName('Sheet1')
if (!fWorksheet) throw new Error('fWorksheet is not available')
const comments = fWorksheet.getComments()
comments.forEach((comment) => {
  console.log(comment.getRange().getA1Notation())
})
```

**Types:** [`FRange`](https://docs.univer.ai/ko-KR/reference/facade/range.md)

**Package:** [`@univerjs/sheets-thread-comment`](https://docs.univer.ai/ko-KR/reference/packages/plugins/univerjs/sheets-thread-comment.md) · [Type definitions](https://unpkg.com/@univerjs/sheets-thread-comment/lib/types/facade/f-thread-comment.d.ts)

### `FThreadComment.getReplies`

Get the replies of the comment

```typescript
getReplies(): FThreadComment[] | undefined
```

**Returns**

The loaded replies, or `undefined` when the thread or its replies are unavailable.

**Examples**

```ts
const fWorkbook = univerAPI.getActiveWorkbook()
const fWorksheet = fWorkbook.getSheetByName('Sheet1')
if (!fWorksheet) throw new Error('fWorksheet is not available')
const comments = fWorksheet.getComments()
comments.forEach((comment) => {
  if (comment.getIsRoot()) {
    const replies = comment.getReplies()
    replies.forEach((reply) => {
      console.log(reply.getCommentData())
    })
  }
})
```

**Types:** [`FThreadComment`](https://docs.univer.ai/ko-KR/reference/facade/thread-comment.md)

**Package:** [`@univerjs/sheets-thread-comment`](https://docs.univer.ai/ko-KR/reference/packages/plugins/univerjs/sheets-thread-comment.md) · [Type definitions](https://unpkg.com/@univerjs/sheets-thread-comment/lib/types/facade/f-thread-comment.d.ts)

### `FThreadComment.getRichText`

Get the rich text of the comment

```typescript
getRichText(): RichTextValue
```

**Returns**

The rich text of the comment

**Examples**

```ts
const fWorkbook = univerAPI.getActiveWorkbook()
const fWorksheet = fWorkbook.getSheetByName('Sheet1')
if (!fWorksheet) throw new Error('fWorksheet is not available')
const comments = fWorksheet.getComments()
comments.forEach((comment) => {
  console.log(comment.getRichText())
})
```

**Types:** [`RichTextValue`](https://unpkg.com/@univerjs/core/lib/types/docs/data-model/rich-text-builder.d.ts)

**Package:** [`@univerjs/sheets-thread-comment`](https://docs.univer.ai/ko-KR/reference/packages/plugins/univerjs/sheets-thread-comment.md) · [Type definitions](https://unpkg.com/@univerjs/sheets-thread-comment/lib/types/facade/f-thread-comment.d.ts)

### `FThreadComment.replyAsync`

Reply to the comment

```typescript
replyAsync(comment: FTheadCommentBuilder): Promise<boolean>
```

**Parameters**

* `comment` — Required. The comment to reply to

**Returns**

Whether the comment is replied successfully

**Examples**

```ts
const fWorkbook = univerAPI.getActiveWorkbook()
const fWorksheet = fWorkbook.getSheetByName('Sheet1')
if (!fWorksheet) throw new Error('fWorksheet is not available')

// Create a new comment
const richText = univerAPI.newRichText().insertText('hello univer')
const commentBuilder = univerAPI.newTheadComment().setContent(richText).setId('mock-comment-id')
const cell = fWorksheet.getRange('A1')
await cell.addCommentAsync(commentBuilder)

// Reply to the comment
const replyText = univerAPI.newRichText().insertText('Hello Univer AI')
const reply = univerAPI.newTheadComment().setContent(replyText)
const comment = fWorksheet.getCommentById('mock-comment-id')
const result = await comment.replyAsync(reply)
console.log(result)
```

**Types:** [`Promise`](https://unpkg.com/@typescript/typescript-darwin-arm64/lib/lib.es5.d.ts) · [`FTheadCommentBuilder`](https://docs.univer.ai/ko-KR/reference/facade/thead-comment-builder.md)

**Package:** [`@univerjs/sheets-thread-comment`](https://docs.univer.ai/ko-KR/reference/packages/plugins/univerjs/sheets-thread-comment.md) · [Type definitions](https://unpkg.com/@univerjs/sheets-thread-comment/lib/types/facade/f-thread-comment.d.ts)

### `FThreadComment.resolveAsync`

Resolve the comment

```typescript
resolveAsync(resolved?: boolean): Promise<boolean>
```

**Parameters**

* `resolved` — Optional. Whether the comment is resolved

**Returns**

Set the comment to resolved or not operation result

**Examples**

```ts
const fWorkbook = univerAPI.getActiveWorkbook()
const fWorksheet = fWorkbook.getSheetByName('Sheet1')
if (!fWorksheet) throw new Error('fWorksheet is not available')

// Create a new comment
const richText = univerAPI.newRichText().insertText('hello univer')
const commentBuilder = univerAPI.newTheadComment().setContent(richText).setId('mock-comment-id')
const cell = fWorksheet.getRange('A1')
await cell.addCommentAsync(commentBuilder)

// Resolve the comment after 3 seconds
setTimeout(async () => {
  const comment = fWorksheet.getCommentById('mock-comment-id')
  const result = await comment.resolveAsync(true)
  console.log(result)
}, 3000)
```

**Types:** [`Promise`](https://unpkg.com/@typescript/typescript-darwin-arm64/lib/lib.es5.d.ts)

**Package:** [`@univerjs/sheets-thread-comment`](https://docs.univer.ai/ko-KR/reference/packages/plugins/univerjs/sheets-thread-comment.md) · [Type definitions](https://unpkg.com/@univerjs/sheets-thread-comment/lib/types/facade/f-thread-comment.d.ts)

### `FThreadComment.updateAsync`

Update the comment content

```typescript
updateAsync(content: IDocumentBody | RichTextValue): Promise<boolean>
```

**Parameters**

* `content` — Required. The new content of the comment

**Returns**

Whether the comment is updated successfully

**Examples**

```ts
const fWorkbook = univerAPI.getActiveWorkbook()
const fWorksheet = fWorkbook.getSheetByName('Sheet1')
if (!fWorksheet) throw new Error('fWorksheet is not available')

// Create a new comment
const richText = univerAPI.newRichText().insertText('hello univer')
const commentBuilder = univerAPI.newTheadComment().setContent(richText).setId('mock-comment-id')
const cell = fWorksheet.getRange('A1')
await cell.addCommentAsync(commentBuilder)

// Update the comment after 3 seconds
setTimeout(async () => {
  const comment = fWorksheet.getCommentById('mock-comment-id')
  const newRichText = univerAPI.newRichText().insertText('Hello Univer AI')
  const result = await comment.updateAsync(newRichText)
  console.log(result)
}, 3000)
```

**Types:** [`Promise`](https://unpkg.com/@typescript/typescript-darwin-arm64/lib/lib.es5.d.ts) · [`IDocumentBody`](https://docs.univer.ai/ko-KR/reference/types/document-body.md) · [`RichTextValue`](https://unpkg.com/@univerjs/core/lib/types/docs/data-model/rich-text-builder.d.ts)

**Package:** [`@univerjs/sheets-thread-comment`](https://docs.univer.ai/ko-KR/reference/packages/plugins/univerjs/sheets-thread-comment.md) · [Type definitions](https://unpkg.com/@univerjs/sheets-thread-comment/lib/types/facade/f-thread-comment.d.ts)
