import {Meta} from '@storybook/addon-docs/blocks'

<Meta title='@dxtmisha/ru/figma/Classes/FigmaPostAbstract - Базовый класс сообщений'/>

# Класс FigmaPostAbstract

Базовый абстрактный класс для управления обменом сообщениями между плагином Figma (backend) и UI (frontend). Обеспечивает структурированную основу для двусторонней связи со встроенной проверкой и управлением несколькими слушателями.

## Ключевые особенности

- **Двусторонняя поддержка** — База как для `FigmaPluginMessenger`, так и для `FigmaUiMessenger`.
- **Проверка сообщений** — Использует `FigmaPostCode`, чтобы гарантировать, что сообщения исходят из того же экземпляра плагина.
- **Множественные слушатели** — Поддерживает несколько колбэков для одного типа сообщения.
- **Цепочка вызовов** — Методы, такие как `make` и `add`, возвращают `this`, что позволяет писать более лаконичный код.

## Публичные методы

### `make`

Инициализирует слушатель сообщений. Этот метод гарантирует, что специфичная для среды настройка (`prepare`) будет выполнена ровно один раз, независимо от того, сколько раз вызывается `make`.

**Возвращает:** `this`

```javascript
const messenger = new FigmaPluginMessenger().make()
```

### `add`

Регистрирует функцию обратного вызова (колбэк), которая будет выполнена при получении сообщения определенного типа.

**Параметры:**
- `type: string` — Уникальный идентификатор типа сообщения.
- `callback: UiFigmaMessengerCallback<Message>` — Функция, вызываемая при получении сообщения. Получает данные сообщения в качестве первого аргумента.
- `once: boolean = false` — Если установлено значение `true`, колбэк будет автоматически удален после одного вызова.

**Возвращает:** `this`

```javascript
messenger
  .add('update-selection', (data) => console.log('Выбор:', data.count))
  .add('init', (data) => console.log('Init:', data), true)
  .add('close', () => figma.closePlugin())
```

### `remove`

Удаляет ранее зарегистрированную функцию обратного вызова для определенного типа сообщения.

**Параметры:**
- `type: string` — Уникальный идентификатор типа сообщения.
- `callback: UiFigmaMessengerCallback<Message>` — Функция, которая будет удалена из слушателей.

**Возвращает:** `this`

```javascript
const onUpdate = (data) => console.log('Выбор:', data.count)

messenger
  .add('update-selection', onUpdate)
  .remove('update-selection', onUpdate)
```

## Структуры данных

### `UiFigmaMessengerData`

Структура объекта данных, передаваемого через систему сообщений:

- `code: string` — Код проверки из `FigmaPostCode`.
- `type: string` — Идентификатор сообщения.
- `message: Message` — Сами полезные данные сообщения.
