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

<Meta title='@dxtmisha/vi/functional/Functions/computedByLanguage - Thuộc tính computed theo ngôn ngữ'/>

# `computedByLanguage`

Tạo một thuộc tính computed phản ứng tự động tính toán lại khi ngôn ngữ hiện tại hoặc các phụ thuộc bên trong getter thay đổi.

### Cách thức hoạt động

Hàm thực hiện các kiểm tra theo thứ tự sau:
1. **Kiểm tra ngôn ngữ**: Xác minh rằng ngôn ngữ đã được thiết lập thông qua `GeoRef.get().value`.
2. **Kiểm tra điều kiện**: Nếu tham số `conditions` được cung cấp, nó sẽ được gọi để kiểm tra bổ sung (ví dụ: kiểm tra quyền truy cập hoặc trạng thái tải dữ liệu).
3. **Thực thi Getter chính**: Nếu cả hai kiểm tra trên đều vượt qua, `getter` sẽ được gọi. Nếu nó trả về một giá trị (không phải `undefined`), giá trị đó sẽ trở thành kết quả.
4. **Tùy chọn dự phòng**: Nếu bất kỳ kiểm tra nào thất bại hoặc `getter` trả về `undefined`, `getterNone` sẽ được thực thi/trả về.

**Tham số:**
- `getter: ComputedGetter<R>` — Logic chính để lấy giá trị. Chỉ được gọi nếu ngôn ngữ đã thiết lập và các điều kiện được thỏa mãn.
- `getterNone: R | (() => R)` — Giá trị dự phòng hoặc hàm trả về giá trị đó. Đóng vai trò là "Phương án B". Mặc định: `() => undefined`.
- `conditions?: () => boolean` — Một hàm điều kiện. Đóng vai trò là "người gác cổng" (gatekeeper): nếu nó trả về `false`, `getter` chính thậm chí sẽ không được kích hoạt.
- `debugOptions?: DebuggerOptions` — Tùy chọn dùng để gỡ lỗi các phép tính phản ứng, được hỗ trợ bởi Vue.js.

**Trả về:**
`ComputedRef<R>` — Thuộc tính computed phản ứng.

```typescript
import { computedByLanguage } from '@dxtmisha/functional'
import { ref } from 'vue'

// Sử dụng cơ bản
const label = computedByLanguage(() => translateKey('hello'))

// Với giá trị dự phòng
const title = computedByLanguage(
  () => translateKey('page.title'),
  () => 'Untitled'
)

// Với điều kiện bổ sung
const isReady = ref(true)
const content = computedByLanguage(
  () => translateKey('content'),
  () => 'Loading...',
  () => isReady.value
)
```
