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

<Meta title='@dxtmisha/vi/functional-basic/Classes/CookieBlockInstance - Phiên bản trạng thái truy cập Cookie'/>

# Lớp CookieBlockInstance

Lớp `CookieBlockInstance` chịu trách nhiệm quản lý trạng thái truy cập cookie ở cấp độ phiên bản (instance). Nó cung cấp một trạng thái cục bộ để chặn hoặc cho phép các thao tác cookie, điều này rất quan trọng để cách ly các yêu cầu trong Server-Side Rendering (SSR) hoặc khi cần nhiều ngữ cảnh độc lập.

Bao gồm tích hợp chặt chẽ với `DataStorage` để lưu trữ trạng thái chặn đáng tin cậy.

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

- **Dựa trên phiên bản (Instance-Based)** — cho phép tạo các phiên bản riêng biệt với trạng thái chặn của riêng chúng
- **Tích hợp DataStorage** — tự động lưu trữ trạng thái chặn bằng cách sử dụng lớp `DataStorage`
- **Tương thích với SSR** — được thiết kế để hoạt động trơn tru trong môi trường phía máy chủ bằng cách tận dụng mô hình singleton-mỗi-yêu-cầu khi được bao bọc bởi `CookieBlock`

## Phương thức

### Hành động

#### `set`

Cập nhật trạng thái truy cập cookie. Khi đặt thành `true`, chặn tất cả hoạt động ghi cookie trong ngữ cảnh của phiên bản này.

**Tham số:**
- `value: boolean` — trạng thái mới cần thiết lập

### Kiểm tra

- `get(): boolean` — Trả về trạng thái truy cập cookie hiện tại. `true` nếu cookie bị chặn, `false` nếu ngược lại

## Cách sử dụng cơ bản

Mặc dù `CookieBlockInstance` có thể được sử dụng trực tiếp, nhưng thông thường nó được truy cập thông qua lớp bọc tĩnh `CookieBlock`. Tuy nhiên, đối với logic chuyên biệt, bạn có thể khởi tạo nó theo cách thủ công:

```javascript
import { CookieBlockInstance } from '@dxtmisha/functional-basic'

const cookieBlock = new CookieBlockInstance()

// Lấy trạng thái hiện tại
console.log(cookieBlock.get()) // false (mặc định)

// Đặt trạng thái thành bị chặn
cookieBlock.set(true)

console.log(cookieBlock.get()) // true
```

## Ví dụ

### Sử dụng trực tiếp

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

const cookieBlock = new CookieBlockInstance()

// Lấy trạng thái hiện tại
console.log(cookieBlock.get()) // false (mặc định)

// Đặt trạng thái thành bị chặn
cookieBlock.set(true)

console.log(cookieBlock.get()) // true

// Mở chặn
cookieBlock.set(false)

console.log(cookieBlock.get()) // false
```

### Sử dụng qua CookieBlock

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

// CookieBlock tự động tạo phiên bản cách ly cho mỗi yêu cầu
CookieBlock.set(true)

// Trạng thái có thể truy cập qua các phương thức tĩnh
if (CookieBlock.get()) {
  console.log('Cookies bị chặn trong ngữ cảnh hiện tại')
}
```

### Ngữ cảnh độc lập

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

// Tạo các phiên bản độc lập
const block1 = new CookieBlockInstance()
const block2 = new CookieBlockInstance()

block1.set(true)

console.log(block1.get()) // true
console.log(block2.get()) // false (phiên bản độc lập)
```
