ilk
This commit is contained in:
54
ui/src/utils/flatten.js
Normal file
54
ui/src/utils/flatten.js
Normal file
@@ -0,0 +1,54 @@
|
||||
// src/utils/flatten.js
|
||||
|
||||
/**
|
||||
* 🔹 sql.Null* türlerini sadeleştirir.
|
||||
* Backend'den gelen objelerde genellikle { String, Int32, Float64, Time, Bool, Valid } alanları vardır.
|
||||
* Bu yardımcı, bunları otomatik olarak primitive değerlere dönüştürür.
|
||||
* Örnek:
|
||||
* { String: "ABC", Valid: true } → "ABC"
|
||||
* { Float64: 10.5, Valid: true } → 10.5
|
||||
* { Bool: false, Valid: true } → false
|
||||
* { Valid: false } → null
|
||||
*/
|
||||
export function flat(value) {
|
||||
if (value === null || value === undefined) return null
|
||||
|
||||
// Eğer sql.Null* objesi geldiyse
|
||||
if (typeof value === 'object' && 'Valid' in value) {
|
||||
if (!value.Valid) return null
|
||||
|
||||
// Farklı tiplerde gelen alanları sırayla dene
|
||||
if ('String' in value) return value.String
|
||||
if ('Float64' in value) return value.Float64
|
||||
if ('Int32' in value) return value.Int32
|
||||
if ('Int16' in value) return value.Int16
|
||||
if ('Bool' in value) return value.Bool
|
||||
if ('Time' in value) {
|
||||
try {
|
||||
// Tarih objesi veya ISO string olabilir
|
||||
const t = value.Time
|
||||
return typeof t === 'string' ? t : new Date(t).toISOString()
|
||||
} catch {
|
||||
return null
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
// Düz değer (primitive)
|
||||
return value
|
||||
}
|
||||
|
||||
/**
|
||||
* 🔹 Objeyi tamamen düzleştirir (tüm alanlarda flat uygular)
|
||||
* Örnek:
|
||||
* flattenObject({ A: { String: "x", Valid: true }, B: 5 })
|
||||
* → { A: "x", B: 5 }
|
||||
*/
|
||||
export function flattenObject(obj = {}) {
|
||||
const result = {}
|
||||
for (const [key, val] of Object.entries(obj)) {
|
||||
result[key] = flat(val)
|
||||
}
|
||||
return result
|
||||
}
|
||||
86
ui/src/utils/formatters.js
Normal file
86
ui/src/utils/formatters.js
Normal file
@@ -0,0 +1,86 @@
|
||||
/* ===========================================================
|
||||
📦 src/utils/formatters.js
|
||||
Tarih, para, sayı, yüzde formatlama yardımcıları
|
||||
=========================================================== */
|
||||
|
||||
/**
|
||||
* 📅 formatDateInput(value)
|
||||
* SQL veya ISO datetime'i "yyyy-MM-dd" formatına çevirir.
|
||||
* <input type="date"> için uygundur.
|
||||
* Örnek: "2025-11-07 00:00:00" → "2025-11-07"
|
||||
*/
|
||||
export function formatDateInput(value) {
|
||||
if (!value) return ''
|
||||
try {
|
||||
if (typeof value === 'string') {
|
||||
// "2025-11-07 00:00:00" → "2025-11-07"
|
||||
if (value.includes(' ')) return value.split(' ')[0]
|
||||
// "2025-11-07T00:00:00Z" → "2025-11-07"
|
||||
if (value.includes('T')) return value.split('T')[0]
|
||||
// zaten yyyy-MM-dd ise aynen dön
|
||||
if (/^\d{4}-\d{2}-\d{2}$/.test(value)) return value
|
||||
}
|
||||
if (value instanceof Date) {
|
||||
return value.toISOString().split('T')[0]
|
||||
}
|
||||
return ''
|
||||
} catch {
|
||||
return ''
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 📅 formatDateDisplay(value)
|
||||
* "2025-10-31" veya "2025-10-31 00:00:00" → "31.10.2025"
|
||||
* Sadece ekranda gösterim için.
|
||||
*/
|
||||
export function formatDateDisplay(value) {
|
||||
if (!value) return ''
|
||||
try {
|
||||
const d = new Date(value)
|
||||
if (isNaN(d)) return ''
|
||||
const dd = String(d.getDate()).padStart(2, '0')
|
||||
const mm = String(d.getMonth() + 1).padStart(2, '0')
|
||||
const yyyy = d.getFullYear()
|
||||
return `${dd}.${mm}.${yyyy}`
|
||||
} catch {
|
||||
return ''
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 💰 formatMoney(value, currency)
|
||||
* Sayıyı belirtilen para birimiyle biçimlendirir.
|
||||
* Varsayılan: TRY
|
||||
* Örnek: formatMoney(12500, 'USD')
|
||||
*/
|
||||
export function formatMoney(value, currency = 'TRY') {
|
||||
const n = Number(value || 0)
|
||||
return new Intl.NumberFormat('tr-TR', {
|
||||
style: 'currency',
|
||||
currency,
|
||||
minimumFractionDigits: 2,
|
||||
maximumFractionDigits: 2,
|
||||
}).format(n)
|
||||
}
|
||||
|
||||
/**
|
||||
* 🔢 formatNumber(value, fraction)
|
||||
* Genel sayı biçimlendirme (küsuratlı veya küsuratsız)
|
||||
*/
|
||||
export function formatNumber(value, fraction = 2) {
|
||||
const n = Number(value || 0)
|
||||
return n.toLocaleString('tr-TR', {
|
||||
minimumFractionDigits: fraction,
|
||||
maximumFractionDigits: fraction,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 💬 formatPercent(value)
|
||||
* 0.1 → "%10.00" şeklinde gösterir
|
||||
*/
|
||||
export function formatPercent(value) {
|
||||
const n = Number(value || 0)
|
||||
return `${(n * 100).toFixed(2)}%`
|
||||
}
|
||||
Reference in New Issue
Block a user