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

<Meta title='@dxtmisha/vi/functional-basic/Classes/CookieBlock - Quản lý Cấp Quyền Cookie'/>

# Lớp CookieBlock

Lớp tiện ích static dùng để định nghĩa quy luật truy cập ("kill switch" hoặc cầu dao tổng) nhắm thẳng vào quá trình hệ thống có cho phép chỉnh/sửa nội dung DOM cookie trên website hay không. Bằng cách thiết lập chuẩn khoá chặn (boolean logic), các node class lớn hơn (ví dụ Class gốc `Cookie`) sẽ liên tục móc và lắng nghe lệnh này trước khi tiến hành bước in/thực thi ghi data vào `document.cookie`.

Bao gồm tích hợp chặt chẽ với `ServerStorage` để cách ly trạng thái giữa các yêu cầu trong SSR.

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

- **Chấp Nhận Quy Trình Định Mức Chung (Global Truth)** — cổng tuỳ chỉnh/kiểm soát chung đối với quá trình lưu tạo/in cookie dọc toàn bộ mã lệnh ứng dụng
- **Chuẩn Cấu Hình Quyền Riêng Tư Đặc thù (Privacy Compliance)** — một mẫu logic tuyệt vời dùng lập trình những phần banner xác nhận "Cookie Consent" (Xin quyền nạp Tracking). Người code chỉ việc nối logic nút bật class thành giá trị `true` đến chừng nào user chốt chấp nhận quy tắc lấy thông tin ở nút 'Đồng Ý'
- **SSR-совместимость** — sử dụng `ServerStorage` để duy trì trạng thái chặn đáng tin cậy trong bối cảnh yêu cầu cách ly

## Phương thức tĩnh

### Hành động

#### `set`

Bật hoặc tắt khả năng ghi cookie. Khi đặt thành `true`, tất cả hoạt động ghi sẽ chỉ lưu dữ liệu trong bộ nhớ, không chạm đến `document.cookie`.

**Tham số:**
- `value: boolean` — `true` để chặn ghi cookie, `false` để cho phép

**Trả về:** `void`

### Kiểm tra

- `get(): boolean` — Trả về trạng thái chặn hiện tại. `true` nếu ghi cookie bị chặn

## Ví dụ

### Sử dụng cơ bản

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

// Lệnh chặn khẩn cấp toàn bộ dữ liệu ghi DOM cookie
CookieBlock.set(true)

if (CookieBlock.get()) {
  console.log('Quá trình nạp DOM/ghi chép Cookie đang khoá do cài đặt phía user chưa cho quyền truy cập.')
}

// Dỡ bỏ cảnh bảo / Cấp quyền DOM in cookie (Cấu hình chuẩn của object mới)
CookieBlock.set(false)
```

### Triển khai banner đồng ý

```typescript
import { CookieBlock, Cookie } from '@dxtmisha/functional'

// Chặn cookie khi tải ứng dụng
CookieBlock.set(true)

// Sau khi người dùng đồng ý
function onCookieConsentAccepted() {
  CookieBlock.set(false)
  
  // Bây giờ có thể đặt cookie
  const theme = new Cookie('theme')
  theme.set('dark')
}
```

## Phương thức logic khi mắc nối với lớp `Cookie`

Nhân/Bộ cấu trúc tổng của class `Cookie` được code giám sát nghiêm ngặt mọi lệnh do luồng chặn phát đi. Lúc biến nhị phân `CookieBlock.get()` bị chốt ở mode `true`:

1. Ở nội bộ luồng mã, quá trình chạy vẫn ngầm hiểu là hệ thống gọi app bằng node lưu biến `cookieInstance.set('value')`
2. Tiến trình instance trực thuộc `Cookie` kích hoạt việc in giá trị cập nhật/ghi đè thay thế nằm vào hàng đợi của *cơ sở memory ảo* (internal memory)
3. Tuyệt nhiên tại chính node instance của `Cookie` **hệ thống tự phát sinh quyền bác bỏ im lặng (silently refuse)** đối với hàm ghi biến tĩnh `document.cookie = ...` tại nhánh DOM ảo lẫn DOM thật

Luồng giao thức 3 buớc phía trên đáp ứng hoàn hảo hai tiêu chí tối thượng trong quy chuẩn kỹ thuật: Giúp DOM website không bị bóp băng thông khi chạy lỗi code lấy lệnh từ hệ memory chưa cấp dữ liệu (ngăn văng bug), cũng như giữ thiết lập tôn trọng chính sách truy vấn riêng tư bảo mật đĩa cứng phía Browser theo chuẩn Âu/Mỹ.
