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

<Meta title='@dxtmisha/vi/functional/Composables/useApiDelete - DELETE Request Execution'/>

# `useApiDelete`

Trả về một đối tượng với trạng thái tải và phương thức `send` để thực hiện các yêu cầu API `DELETE`. Đây là một trình bao bọc tiện lợi trên `useApiRequest` được điền sẵn phương thức `DELETE`. Nhận các thiết lập dưới dạng một đối tượng `UseApiDeleteSetup` duy nhất.

**Tham số:**
- `setup: UseApiDeleteSetup` — Đối tượng thiết lập cấu hình:
  - `path?: RefOrNormal<string | undefined>` — Đường dẫn đến endpoint API (có thể phản ứng).
  - `action?: (data: Return | undefined) => Promise<void> | void` — Hành động (callback) thực hiện sau khi yêu cầu hoàn tất thành công.
  - `transformation?: (data: T) => Return` — Hàm chuyển đổi dữ liệu phản hồi từ máy chủ trước khi trả về hoặc truyền vào `action`.
  - `validateRequestContract?: (data: Request) => ApiDataValidation & Return` — Hàm xác thực hợp đồng yêu cầu.
  - `validateResponseContract?: (data: T) => ApiDataValidation & Return` — Hàm xác thực hợp đồng phản hồi.
  - `errorContract?: ApiErrorStorageList` — nơi lưu trữ hợp đồng lỗi phản hồi.
  - `toData?: boolean` — Việc trích xuất trường `data` từ phản hồi hay không. Mặc định: `true`.
  - `options?: ApiOptions` — Các tùy chọn bổ sung cho yêu cầu (đối tượng tham số `ApiFetch`).
  - `apiInstance?: ApiInstance` — Phiên bản API sử dụng cho yêu cầu. Mặc định là `Api.getItem()`.

**Trả về:**
Một đối tượng với các thuộc tính sau:
- `loading: Ref<boolean>` — Trạng thái tải phản ứng. Sẽ là `true` trong khi yêu cầu đang thực hiện và `false` sau khi hoàn thành hoặc có lỗi.
- `send(request?: Request): Promise<Return | undefined>` — Phương thức bất đồng bộ để gửi yêu cầu `DELETE`. Nó tự động quản lý trạng thái `loading`, xác thực hợp đồng yêu cầu và phản hồi, áp dụng hàm biến đổi cho phản hồi, thực hiện callback `action` khi thành công và xử lý lỗi một cách an toàn bằng cách ghi log ra console.

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

const { loading, send } = useApiDelete({
  path: '/api/delete',
  action: (data) => console.log('Hành động hoàn tất:', data),
  transformation: (raw) => ({ ...raw, processed: true }),
  toData: true,
  options: { cache: false }
})

const handleDelete = async () => {
  const result = await send({ id: 1 })
  console.log('Kết quả cuối cùng:', result)
}
```
