# Комментарии

- Human documentation: [https://docs.univer.ai/ru-RU/guides/bases/features/thread-comment](https://docs.univer.ai/ru-RU/guides/bases/features/thread-comment)

- Agent Markdown: [https://docs.univer.ai/ru-RU/guides/bases/features/thread-comment.md](https://docs.univer.ai/ru-RU/guides/bases/features/thread-comment.md)

- Requested language: `ru-RU`

- Content language: `ru-RU`

- Documentation version: `1.2.0`

- Source: [bases/features/thread-comment.ru-RU.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/bases/features/thread-comment.ru-RU.mdx)

---

#### Package metadata

```json
{
  "preset": [],
  "plugins": [
    {
      "client": "@univerjs/thread-comment",
      "facade": "@univerjs/thread-comment/facade"
    },
    {
      "client": "@univerjs/thread-comment-ui",
      "locale": "@univerjs/thread-comment-ui/locale/ru-RU",
      "style": "@univerjs/thread-comment-ui/lib/index.css"
    },
    {
      "client": "@univerjs-pro/bases-thread-comment",
      "facade": "@univerjs-pro/bases-thread-comment/facade"
    },
    {
      "client": "@univerjs-pro/bases-thread-comment-ui",
      "locale": "@univerjs-pro/bases-thread-comment-ui/locale/ru-RU",
      "style": "@univerjs-pro/bases-thread-comment-ui/lib/index.css"
    }
  ],
  "license": true,
  "server": "optional"
}
```

Обсуждайте задачи, заказы и другие записи. Комментарии остаются связанными с записью в представлениях «Таблица», «Канбан», «Галерея», «Календарь» и «Гант»: переключение представления не создаёт отдельное обсуждение.

## Регистрация плагинов

Добавьте их после основных плагинов Bases и его интерфейса:

#### npm

```bash
npm install @univerjs-pro/bases-thread-comment @univerjs-pro/bases-thread-comment-ui
```

#### pnpm

```bash
pnpm add @univerjs-pro/bases-thread-comment @univerjs-pro/bases-thread-comment-ui
```

#### yarn

```bash
yarn add @univerjs-pro/bases-thread-comment @univerjs-pro/bases-thread-comment-ui
```

#### bun

```bash
bun add @univerjs-pro/bases-thread-comment @univerjs-pro/bases-thread-comment-ui
```

```ts
import { UniverBasesThreadCommentPlugin } from '@univerjs-pro/bases-thread-comment'
import { UniverBasesThreadCommentUIPlugin } from '@univerjs-pro/bases-thread-comment-ui'

import '@univerjs-pro/bases-thread-comment/facade'
import '@univerjs/thread-comment/facade'
import '@univerjs-pro/bases-thread-comment-ui/lib/index.css'

univer.registerPlugin(UniverBasesThreadCommentPlugin)
univer.registerPlugin(UniverBasesThreadCommentUIPlugin)
```

Объедините языковые ресурсы пакетов комментариев и настройте текущего пользователя приложения. Плагин UI добавляет элементы управления комментариями записей; плагин данных связывает комментарии с записями.

## Добавление и чтение комментариев

```ts
const record = univerAPI.getActiveBase()?.getTables()[0]?.getRecords()[0]
if (!record) throw new Error('Create a record first')

await record.createCommentAsync('Please confirm the delivery date.')
const comments = record.getComments()
console.log(comments.map(({ root }) => root.id))
```

`getComments()` читает локально загруженные комментарии. При удалённом источнике данных `await record.listCommentsAsync()` синхронизирует известные ветки обсуждений перед возвратом результата. Ответы, обновление и удаление описаны в [Facade комментариев](https://docs.univer.ai/ru-RU/reference/facade/thread-comment.md).

## Сохранение и общие обсуждения

Локальные комментарии можно сохранить как ресурсы Base через `base.save()`. Перед восстановлением снимка зарегистрируйте плагины комментариев.

Для общих обсуждений также нужны сервис комментариев, источник данных и права доступа. Само совместное редактирование документа не подключает комментарии. Следуйте разделу [Модули расширений Office](https://docs.univer.ai/ru-RU/server/collaboration/extensions.md), затем проверьте создание, чтение, права и повторное открытие с двумя учётными записями.

## Общие операции

Импортируйте общую Facade комментариев и Facade продукта. Методы продукта создают стабильные привязки, общая API управляет ответами, изменениями, разрешением и удалением. `getComments()` читает локальное состояние. `listCommentsAsync()` синхронизирует уже известные обсуждения через настроенный источник, но не обнаруживает все обсуждения на сервере.

```ts
import '@univerjs/thread-comment/facade'

const [thread] = univerAPI.getComments({ resolved: false })
if (thread) {
  await univerAPI.replyCommentAsync({
    unitId: thread.unitId,
    subUnitId: thread.subUnitId,
    threadId: thread.threadId,
    content: 'Reviewed.',
  })
}
```

## Общие обсуждения

Интегрируйте Comment Service и Endpoint через [Server SDK](https://docs.univer.ai/ru-RU/server/collaboration/extensions.md), затем после настройки совместного редактирования и лицензии зарегистрируйте `UniverThreadCommentDataSourcePlugin` из `@univerjs-pro/thread-comment-datasource`. Источник использует `/universer-api/comment/unit/{unitId}/...` и `/universer-api/user/list`: предоставьте эти маршруты в приложении. Сервер должен отдельно проверять права на чтение и запись комментариев, не полагаясь на право редактирования документа.
