# Общий API

- Human documentation: [https://docs.univer.ai/ru-RU/guides/boards/features/core/general-api](https://docs.univer.ai/ru-RU/guides/boards/features/core/general-api)

- Agent Markdown: [https://docs.univer.ai/ru-RU/guides/boards/features/core/general-api.md](https://docs.univer.ai/ru-RU/guides/boards/features/core/general-api.md)

- Requested language: `ru-RU`

- Content language: `ru-RU`

- Documentation version: `1.2.0`

- Source: [boards/features/core/general-api.ru-RU.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/boards/features/core/general-api.ru-RU.mdx)

---

Набор Facade API в Univer зависит от типа текущего юнита и зарегистрированных плагинов. На этой странице описаны общие API приложения Univer Boards.

## Импорт

```typescript
import { FUniver } from '@univerjs/core/facade'
import '@univerjs-pro/boards/facade'

const univerAPI = FUniver.newAPI(univer)
```

## Команды

Большинство операций Univer регистрируются в системе команд. Единый путь выполнения поддерживает отмену, повтор действий и совместную работу.

> [!NOTE]
> Подробнее об устройстве системы читайте в разделе [Система команд Univer](/blog/univer#command-system).

### Прослушивание команд

Используйте `Event.BeforeCommandExecute` для логики перед выполнением команды и `Event.CommandExecuted` — после её завершения.

```typescript
const beforeDisposable = univerAPI.addEvent(univerAPI.Event.BeforeCommandExecute, ({ id, params }) => {
  console.log('Перед командой:', id, params)
})

const afterDisposable = univerAPI.addEvent(univerAPI.Event.CommandExecuted, ({ id, params }) => {
  console.log('Команда выполнена:', id, params)
})
```

Чтобы отменить команду, установите `event.cancel` в `true` в обработчике `BeforeCommandExecute`.

```typescript
const disposable = univerAPI.addEvent(univerAPI.Event.BeforeCommandExecute, (event) => {
  if (event.id === 'board.command.set-name') {
    event.cancel = true
  }
})
```

Обработчики возвращают `IDisposable`. Освобождайте их, когда они больше не нужны.

```typescript
beforeDisposable.dispose()
afterDisposable.dispose()
disposable.dispose()
```

### Выполнение команд

Если известны идентификатор команды и её параметры, выполните её через `FUniver.executeCommand`. Например, следующая команда Boards переименовывает активный Board.

```typescript
const board = univerAPI.getActiveBoard()

if (board) {
  await univerAPI.executeCommand('board.command.set-name', {
    unitId: board.getId(),
    name: 'Заметки проекта',
  })
}
```

## API событий

События в `univerAPI.Event` предоставляются ядром Univer и плагинами, зарегистрированными в приложении. Ядро предоставляет общие события команд и модулей, а зарегистрированные плагины могут расширять этот набор. Перед использованием события убедитесь, что предоставляющий его плагин зарегистрирован.

Имена событий и типы параметров текущей версии приведены в [справочнике Facade Events](https://docs.univer.ai/ru-RU/reference/facade/events.md).

Подпишитесь через `addEvent` и освободите возвращённый объект, чтобы отменить подписку.

```typescript
const disposable = univerAPI.addEvent(univerAPI.Event.CommandExecuted, ({ id }) => {
  if (id === 'board.command.set-name') {
    console.log('Имя Board изменено')
  }
})

// Удалите обработчик, когда он больше не нужен
disposable.dispose()
```

## Отмена и повтор действий

```typescript
await univerAPI.undo()
await univerAPI.redo()
```

## UI

О расширении меню, панели инструментов и других областей интерфейса читайте в разделе [Компоненты интерфейса Boards](https://docs.univer.ai/ru-RU/guides/boards/ui/components.md).

## WebSocket

Для работы с WebSocket установите `@univerjs/network`, зарегистрируйте `UniverNetworkPlugin` и импортируйте его Facade-расширение.

```typescript
import { UniverNetworkPlugin } from '@univerjs/network'
import '@univerjs/network/facade'

univer.registerPlugin(UniverNetworkPlugin)
```

После этого можно подписываться на события сокета, отправлять сообщения и закрывать соединение.

```typescript
const socket = univerAPI.createSocket('wss://example.com/boards')

socket.open$.subscribe(() => socket.send('hello'))
socket.message$.subscribe((message) => console.log('Сообщение WebSocket:', message.data))
socket.error$.subscribe((error) => console.error('Ошибка WebSocket:', error))
socket.close()
```

## API перечислений

Общие перечисления доступны через `univerAPI.Enum`.

```typescript
console.log(univerAPI.Enum.UniverInstanceType.UNIVER_BOARD)
console.log(univerAPI.Enum.BoardElementType.Shape)
```

## API вспомогательных методов

Общие вспомогательные методы доступны через `univerAPI.Util`.

```typescript
console.log(univerAPI.Util.tools.isString('Univer Boards')) // true
```
