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

<Meta title='@dxtmisha/vi/functional-basic/Classes/Global - Dữ liệu Toàn cục'/>

# Lớp Global

Một lớp tiện ích tĩnh để lưu trữ và truy xuất dữ liệu toàn cục của ứng dụng. Dữ liệu được ghi **một lần duy nhất** trong quá trình khởi tạo và sau đó chỉ có thể đọc. Được sử dụng để truyền cấu hình hoặc dữ liệu từ máy chủ sang phía client.

## Tính năng chính

- **Khởi tạo một lần** — Phương thức `add` chỉ hoạt động trong lần gọi đầu tiên; các lần gọi tiếp theo bị bỏ qua.
- **Sao chép sâu** — Dữ liệu được sao chép qua `copyObjectLite`, cô lập khỏi các thay đổi bên ngoài.
- **Không quản lý trạng thái** — Chỉ dành cho cấu hình tĩnh.
- **Truy cập tĩnh** — tất cả các phương thức đều là tĩnh, loại bỏ nhu cầu khởi tạo (`new Global()`).

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

Vì lớp này là tĩnh, các phương thức của nó có thể được gọi trực tiếp.

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

// Thiết lập một lần (ví dụ: khi ứng dụng tải)
Global.add({
  apiUrl: 'https://api.myapp.com',
  appName: 'My Application'
})

// Lấy giá trị theo khóa
console.log(Global.get('apiUrl')) // 'https://api.myapp.com'
```

## Phương thức

- `add(data: Record<string, any>): void` — Lưu dữ liệu toàn cục. Chỉ hoạt động **trong lần gọi đầu tiên**. Các lần gọi sau bị bỏ qua hoàn toàn.
- `get<R>(name: string): R` — Trả về giá trị theo khóa từ dữ liệu toàn cục đã lưu.

## Ví dụ

### Truy xuất dữ liệu
```javascript
import { Global } from '@dxtmisha/functional-basic'

const apiUrl = Global.get<string>('apiUrl')
console.log(apiUrl) // 'https://api.myapp.com'

const flags = Global.get<Record<string, boolean>>('featureFlags')
console.log(flags.darkMode) // true
```

### Khởi tạo khi ứng dụng bắt đầu
```javascript
// main.ts (chạy một lần trước khi mount ứng dụng)
Global.add(window.__SERVER_DATA__ ?? {})

// Ở bất kỳ đâu trong code
const serverId = Global.get('serverId')
```
