# ctx.message

Глобальный API сообщений Ant Design, используемый для отображения временных легких подсказок в верхней центральной части страницы. Сообщения закрываются автоматически через определенное время или могут быть закрыты пользователем вручную.

## Области применения

| Сценарий | Описание |
|------|------|
| **JSBlock / JSField / JSItem / JSColumn** | Обратная связь по операциям, подсказки валидации, уведомления об успешном копировании и другие легкие сообщения |
| **Операции с формами / Рабочий процесс** | Обратная связь при успешной отправке, ошибке сохранения, неудачной валидации и т. д. |
| **События действий (JSAction)** | Мгновенная обратная связь при кликах, завершении массовых операций и т. д. |

## Определение типа

```ts
message: MessageInstance;
```

`MessageInstance` — это интерфейс сообщений Ant Design, предоставляющий следующие методы.

## Общие методы

| Метод | Описание |
|------|------|
| `success(content, duration?)` | Отобразить сообщение об успехе |
| `error(content, duration?)` | Отобразить сообщение об ошибке |
| `warning(content, duration?)` | Отобразить предупреждение |
| `info(content, duration?)` | Отобразить информационное сообщение |
| `loading(content, duration?)` | Отобразить индикатор загрузки (необходимо закрывать вручную) |
| `open(config)` | Открыть сообщение с использованием пользовательской конфигурации |
| `destroy()` | Закрыть все отображаемые в данный момент сообщения |

**Параметры:**

- `content` (`string` \| `ConfigOptions`): Содержимое сообщения или объект конфигурации
- `duration` (`number`, необязательно): Задержка автоматического закрытия (в секундах), по умолчанию 3 секунды; установите 0, чтобы отключить автоматическое закрытие

**ConfigOptions** (когда `content` является объектом):

```ts
interface ConfigOptions {
  content: React.ReactNode;  // Содержимое сообщения
  duration?: number;        // Задержка автоматического закрытия (секунды)
  onClose?: () => void;    // Обратный вызов при закрытии
  icon?: React.ReactNode;  // Пользовательская иконка
}
```

## Примеры

### Базовое использование

```ts
ctx.message.success('Операция выполнена успешно');
ctx.message.error('Ошибка операции');
ctx.message.warning('Пожалуйста, сначала выберите данные');
ctx.message.info('Обработка...');
```

### Интернационализация с помощью ctx.t

```ts
ctx.message.success(ctx.t('Copied'));
ctx.message.warning(ctx.t('Please select at least one row'));
ctx.message.success(ctx.t('Exported {{count}} records', { count: rows.length }));
```

### Индикатор загрузки и ручное закрытие

```ts
const hide = ctx.message.loading(ctx.t('Saving...'));
// Выполнение асинхронной операции
await saveData();
hide();  // Закрыть индикатор загрузки вручную
ctx.message.success(ctx.t('Saved'));
```

### Использование open для пользовательской конфигурации

```ts
ctx.message.open({
  type: 'success',
  content: 'Пользовательское сообщение об успехе',
  duration: 5,
  onClose: () => console.log('message closed'),
});
```

### Закрытие всех сообщений

```ts
ctx.message.destroy();
```

## Различия между ctx.message и ctx.notification

| Характеристика | ctx.message | ctx.notification |
|------|--------------|------------------|
| **Позиция** | Сверху по центру страницы | Правый верхний угол |
| **Назначение** | Временная легкая подсказка, исчезает автоматически | Панель уведомлений, может содержать заголовок и описание, подходит для длительного отображения |
| **Типичные сценарии** | Обратная связь по операциям, подсказки валидации, успешное копирование | Уведомления о завершении задач, системные сообщения, объемный контент, требующий внимания пользователя |

## Связанные разделы

- [ctx.notification](./notification.md) — Уведомления в правом верхнем углу, подходят для длительного отображения
- [ctx.modal](./modal.md) — Модальное окно подтверждения, блокирующее взаимодействие
- [ctx.t()](./t.md) — Интернационализация, часто используется вместе с message