50 lines
1.1 KiB
TypeScript
50 lines
1.1 KiB
TypeScript
/** پارس مقدار هزینه خرید/فروش (نقدی یا درصدی) قبل از ارسال به API */
|
||
function normalizeDecimalString(value: string) {
|
||
const trimmed = value.trim()
|
||
if (!trimmed.includes(',') || trimmed.includes('.')) {
|
||
return trimmed.replaceAll(',', '')
|
||
}
|
||
|
||
// 0,5 => 0.5
|
||
return trimmed.replace(',', '.')
|
||
}
|
||
|
||
export function parseCashFeeValue(value: unknown): number {
|
||
if (value === undefined || value === null) {
|
||
return 0
|
||
}
|
||
|
||
const raw = normalizeDecimalString(String(value))
|
||
if (raw === '') {
|
||
return 0
|
||
}
|
||
|
||
const num = Number(raw)
|
||
return Number.isFinite(num) ? num : 0
|
||
}
|
||
|
||
export function normalizeCashFeeFlags(value: unknown): boolean {
|
||
if (value === true || value === 1 || value === '1' || value === 'true') {
|
||
return true
|
||
}
|
||
|
||
return false
|
||
}
|
||
|
||
export function formatAdminCashFeeLabel(
|
||
value: number | null | undefined,
|
||
isPercent?: boolean | null,
|
||
) {
|
||
const raw = Number(value ?? 0)
|
||
if (!raw) {
|
||
return '۰'
|
||
}
|
||
|
||
if (isPercent) {
|
||
const text = Number.isInteger(raw) ? String(raw) : String(parseFloat(raw.toFixed(4)))
|
||
return `${text}%`
|
||
}
|
||
|
||
return String(raw)
|
||
}
|