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

<Meta title='@dxtmisha/ru/functional/Composables/useApiPut - Выполнение PUT-запросов'/>

# `useApiPut`

Возвращает объект с состоянием загрузки и методом `send` для выполнения `PUT`-запросов к API.

**Параметры:**
- `path?: RefOrNormal<string | undefined>` — Путь к endpoint API (может быть реактивным).
- `action?: (data: Return | undefined) => Promise<void> | void` — Действие (коллбэк), выполняемое после успешного завершения запроса.
- `transformation?: (data: T) => Return` — Функция трансформации ответа от сервера перед возвращением или передачей в `action`.
- `toData: boolean = true` — Извлекать ли поле `data` из ответа.
- `options?: ApiOptions` — Дополнительные опции запроса (объект параметров `ApiFetch`).
- `apiInstance?: ApiInstance` — Экземпляр API, используемый для выполнения запроса. По умолчанию `Api.getItem()`.

**Возвращает:**
Объект со следующими свойствами:
- `loading: Ref<boolean>` — Реактивное состояние загрузки. Принимает значение `true` во время выполнения запроса и `false` после его завершения или ошибки.
- `send(request?: Request): Promise<Return | undefined>` — Асинхронный метод для отправки `PUT`-запроса. Он автоматически управляет состоянием `loading`, применяет функцию трансформации к ответу, вызывает коллбэк `action` при успехе и безопасно обрабатывает ошибки.

```typescript
import { useApiPut } from '@dxtmisha/functional'

const { loading, send } = useApiPut(
  '/api/update',
  (data) => console.log('Действие завершено:', data),
  (raw) => ({ ...raw, processed: true }),
  true,
  { cache: false }
)

const handleUpdate = async () => {
  const result = await send({ id: 1, name: 'New Name' })
  console.log('Итоговый результат:', result)
}
```
