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

<Meta title='@dxtmisha/vi/functional-basic/Classes/ErrorCenterInstance - Thực thể lỗi'/>

# Lớp ErrorCenterInstance

`ErrorCenterInstance` là động cơ chính của hệ thống lỗi. Nó kết hợp một sổ đăng ký nguyên nhân và một trình quản lý xử lý. Bạn có thể tạo các thực thể độc lập của lớp này cho các phần khác nhau của ứng dụng để cô lập logic xử lý lỗi của chúng.

## Các tính năng chính

- **Kho lưu trữ cô lập** — duy trì một danh sách cục bộ các nguyên nhân lỗi.
- **Hợp nhất thông minh** — tự động bổ sung dữ liệu lỗi dựa trên hệ thống ưu tiên.
- **Ủy quyền xử lý** — sử dụng `ErrorCenterHandler` để kích hoạt các hàm callback.
- **API nối chuỗi** — hỗ trợ nối chuỗi cuộc gọi để cấu hình.

## Khởi tạo

Để tạo một thực thể, sử dụng constructor `ErrorCenterInstance(causes, handler)`.

**Tham số:**
- `causes?: ErrorCenterCauseList` — danh sách nguyên nhân lỗi ban đầu.
- `handler?: ErrorCenterHandler` — thực thể trình xử lý (nếu không được chỉ định, một thực thể mới sẽ được tạo).

```typescript
import { ErrorCenterInstance } from '@dxtmisha/functional-basic'

const myErrorCenter = new ErrorCenterInstance([
  { group: 'api', code: '404', label: 'Không tìm thấy' }
])
```

## Các phương thức

### Hành động
- `on(cause: ErrorCenterCauseItem): this` — Bắt đầu quá trình xử lý. Hợp nhất dữ liệu từ sổ đăng ký với dữ liệu đầu vào và chuyển nó cho trình xử lý.

### Xác minh
- `has(code: string, group?: string): boolean` — Tìm kiếm trong sổ đăng ký cục bộ.
- `get(code: string, group?: string): ErrorCenterCauseItem | undefined` — Truy xuất dữ liệu từ sổ đăng ký.

### Cấu hình
- `add(cause: ErrorCenterCauseItem): this` — Thêm một lỗi vào sổ đăng ký cục bộ.
- `addList(causes: ErrorCenterCauseList): this` — Thêm lỗi hàng loạt.
- `addHandler(group: ErrorCenterGroup, handler: ErrorCenterHandlerCallback): this` — Đăng ký một phản ứng cho nhóm.
- `addHandlerList(handlers: ErrorCenterHandlerList): this` — Đăng ký hàng loạt các phản ứng.

## Các kiểu dữ liệu

#### `ErrorCenterCauseItem`
Đối tượng mô tả một lỗi cụ thể.
- `group?: ErrorCenterGroup` — nhóm lỗi (ví dụ: 'api').
- `code: string` — mã lỗi duy nhất.
- `priority?: number` — mức độ ưu tiên (mặc định `500`). Được sử dụng trong quá trình hợp nhất dữ liệu.
- `label?: string` — tiêu đề lỗi.
- `message?: string` — mô tả lỗi.
- `details?: any` — dữ liệu bổ sung.

#### `ErrorCenterHandlerCallback`
- `(cause: ErrorCenterCauseItem) => void` — hàm xử lý.

## Ví dụ

### Khởi tạo với một từ điển
```typescript
const myEC = new ErrorCenterInstance([
  { group: 'db', code: 'connection_lost', label: 'DB không khả dụng' }
]);

myEC.addHandler('db', (cause) => alert(cause.label));
myEC.on({ group: 'db', code: 'connection_lost' });
```
