58 lines
1.3 KiB
TypeScript
58 lines
1.3 KiB
TypeScript
import { ReactNode } from 'react';
|
|
|
|
|
|
// Add tất cả sp trong data product vào 1 mảng
|
|
import { productList } from '@/data/products';
|
|
|
|
export function getAllProducts() {
|
|
return productList.flatMap((group:any) => group.list);
|
|
}
|
|
|
|
|
|
export function formatTextList(
|
|
text?: string | any[],
|
|
limit = 5
|
|
) {
|
|
if (!text) return '';
|
|
|
|
if (typeof window === 'undefined') {
|
|
// server: trả raw HTML
|
|
return Array.isArray(text)
|
|
? String(text[1] ?? '')
|
|
: String(text);
|
|
}
|
|
|
|
const html = Array.isArray(text)
|
|
? String(text[1] ?? '')
|
|
: String(text);
|
|
|
|
if (!html) return '';
|
|
|
|
const parser = new DOMParser();
|
|
const doc = parser.parseFromString(html, 'text/html');
|
|
|
|
const nodes = Array.from(
|
|
doc.body.querySelectorAll('p, div, li')
|
|
);
|
|
|
|
return nodes
|
|
.slice(0, limit)
|
|
.map(node => `<div class="item">${node.innerHTML}</div>`)
|
|
.join('');
|
|
}
|
|
|
|
|
|
|
|
// Format giá
|
|
export function formatPrice(amount: number) {
|
|
return amount.toLocaleString('vi-VN');
|
|
}
|
|
|
|
// Tính % giảm giá
|
|
export function calculateDiscount(
|
|
price: number,
|
|
marketPrice: number
|
|
) {
|
|
if (price <= 0 || marketPrice <= price) return 0;
|
|
return Math.ceil(((marketPrice - price) / marketPrice) * 100);
|
|
} |