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

<Meta title='@dxtmisha/vi/functional-basic/Functions/applyTemplate - Áp dụng mẫu vào văn bản'/>

# `applyTemplate`

Tiện ích để thay thế các thẻ đánh dấu trong văn bản bằng các giá trị từ một đối tượng hoặc mảng.

**Tham số:**
- `text: string` — Văn bản gốc có mẫu.
- `replacement: Record<string, string | number | boolean> | string[]` — Đối tượng hoặc mảng có các giá trị.

**Định dạng thay thế (replacement)**
- **Mảng**: Được sử dụng cho các thẻ vị trí như `%d`, `%e`, `%f`, v.v. (theo thứ tự bảng chữ cái).
- **Đối tượng**: Được sử dụng cho các thẻ có tên trong ngoặc `[key]` hoặc `{key}`, cũng như các thẻ cặp `[tag]nội dung[/tag]`.

**Trả về:**
`string` — Văn bản với các giá trị đã được thay thế.

## Ví dụ

<Source
  language='typescript'
  code={`
import { applyTemplate } from '@dxtmisha/functional-basic'

// 1. Điểm đánh dấu vị trí (mảng)
applyTemplate('Xin chào, %d %e!', ['John', 'Doe']) // 'Xin chào, John Doe!'

// 2. Điểm đánh dấu có tên (đối tượng)
applyTemplate('Giá: [price] {currency}', { price: 100, currency: 'USD' }) // 'Giá: 100 USD'

// 3. Xử lý 0 và false
applyTemplate('Giá trị: [val]', { val: 0 })      // // 'Giá trị: 0'
applyTemplate('Trạng thái: [val]', { val: false }) // 'Trạng thái: false'

// 4. Bỏ qua các khóa bị thiếu
applyTemplate('Thiếu: [none]', {})              // 'Thiếu: [none]'

// 5. Các thẻ cặp với thay thế nội dung
const tags = { link: '<a href="https://google.com">[content]</a>' }
applyTemplate('Nhấp vào [link]đây[/link]', tags) // 'Nhấp vào <a href="https://google.com">đây</a>'

// 6. Macro danh sách (vượt quá giới hạn)
applyTemplate('Macros: %d, %e, %f', ['A', 'B'])  // 'Macros: A, B, '
  `}
/>
